diff --git a/.gitignore b/.gitignore index 87290e01c509..2c545640e0c7 100644 --- a/.gitignore +++ b/.gitignore @@ -34,7 +34,8 @@ daemon/config/unigrid-config.h.in **/stamp-h1 share/setup.nsi contrib/devtools/split-debug.sh - +contrib/unigrid +contrib/gitian-builder .vscode .deps .dirstamp @@ -96,6 +97,9 @@ qa/pull-tester/test.*/* daemon/leveldb*/Makefile +#guix +guix-build-* + .cproject .project /doc/doxygen/ diff --git a/.travis.yml b/.travis.yml index df472d5892e9..24ee42d7466f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,7 +35,7 @@ env: # No wallet # - HOST=x86_64-unknown-linux-gnu PACKAGES="python3" DEP_OPTS="NO_WALLET=1" RUN_TESTS=true GOAL="install" BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports" # Cross-Mac - - HOST=x86_64-apple-darwin11 PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev" BITCOIN_CONFIG="--enable-gui --enable-reduce-exports" OSX_SDK=10.11 GOAL="deploy" + - HOST=x86_64-apple-darwin19 PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python-dev" BITCOIN_CONFIG="--enable-gui --enable-reduce-exports" OSX_SDK=10.11 GOAL="deploy" before_install: - export PATH=$(echo $PATH | tr ':' "\n" | sed '/\/opt\/python/d' | tr "\n" ":" | sed "s|::|:|g") diff --git a/autogen.sh b/autogen.sh index 27417daf7691..962f1748b7c8 100755 --- a/autogen.sh +++ b/autogen.sh @@ -6,7 +6,7 @@ set -e srcdir="$(dirname $0)" cd "$srcdir" -if [ -z ${LIBTOOLIZE} ] && GLIBTOOLIZE="`which glibtoolize 2>/dev/null`"; then +if [ -z "${LIBTOOLIZE}" ] && GLIBTOOLIZE="$(command -v glibtoolize)"; then LIBTOOLIZE="${GLIBTOOLIZE}" export LIBTOOLIZE fi diff --git a/build-aux/m4/ax_cxx_compile_stdcxx.m4 b/build-aux/m4/ax_cxx_compile_stdcxx.m4 index 3d45bae9d718..ef6fc828cc12 100644 --- a/build-aux/m4/ax_cxx_compile_stdcxx.m4 +++ b/build-aux/m4/ax_cxx_compile_stdcxx.m4 @@ -1,5 +1,5 @@ # =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html # =========================================================================== # # SYNOPSIS @@ -10,8 +10,9 @@ # # Check for baseline language coverage in the compiler for the specified # version of the C++ standard. If necessary, add switches to CXX and -# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard) -# or '14' (for the C++14 standard). +# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard), +# '14' (for the C++14 standard), '17' (for the C++17 standard) or +# '20' (for the C++20 standard) # # The second argument, if specified, indicates whether you insist on an # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. @@ -33,21 +34,27 @@ # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov # Copyright (c) 2015 Paul Norman # Copyright (c) 2015 Moritz Klammler +# Copyright (c) 2016, 2018 Krzesimir Nowak +# Copyright (c) 2019 Enji Cooper # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 4 +#serial 11 dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro dnl (serial version number 13). +dnl Modifications: +dnl Add support for C++20, with no new tests + AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl - m4_if([$1], [11], [], - [$1], [14], [], - [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])], + m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], + [$1], [14], [ax_cxx_compile_alternatives="14 1y"], + [$1], [17], [ax_cxx_compile_alternatives="17 1z"], + [$1], [20], [ax_cxx_compile_alternatives="20 2a"], [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl m4_if([$2], [], [], [$2], [ext], [], @@ -57,25 +64,13 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], [$3], [optional], [ax_cxx_compile_cxx$1_required=false], [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) - m4_if([$4], [], [ax_cxx_compile_cxx$1_try_default=true], - [$4], [default], [ax_cxx_compile_cxx$1_try_default=true], - [$4], [nodefault], [ax_cxx_compile_cxx$1_try_default=false], - [m4_fatal([invalid fourth argument `$4' to AX_CXX_COMPILE_STDCXX])]) AC_LANG_PUSH([C++])dnl ac_success=no - m4_if([$4], [nodefault], [], [dnl - AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, - ax_cv_cxx_compile_cxx$1, - [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], - [ax_cv_cxx_compile_cxx$1=yes], - [ax_cv_cxx_compile_cxx$1=no])]) - if test x$ax_cv_cxx_compile_cxx$1 = xyes; then - ac_success=yes - fi]) m4_if([$2], [noext], [], [dnl if test x$ac_success = xno; then - for switch in -std=gnu++$1 -std=gnu++0x; do + for alternative in ${ax_cxx_compile_alternatives}; do + switch="-std=gnu++${alternative}" cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, $cachevar, @@ -101,22 +96,27 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl dnl HP's aCC needs +std=c++11 according to: dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf dnl Cray's crayCC needs "-h std=c++11" - for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do - cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) - AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, - $cachevar, - [ac_save_CXX="$CXX" - CXX="$CXX $switch" - AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], - [eval $cachevar=yes], - [eval $cachevar=no]) - CXX="$ac_save_CXX"]) - if eval test x\$$cachevar = xyes; then - CXX="$CXX $switch" - if test -n "$CXXCPP" ; then - CXXCPP="$CXXCPP $switch" + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break fi - ac_success=yes + done + if test x$ac_success = xyes; then break fi done @@ -153,6 +153,27 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 ) +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 +) + + +dnl Test body for checking C++20 support: R modification +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20], +#ifndef __cplusplus +#error "This is not a C++ compiler" +dnl value from 2020-01-14 draft, clang 11 has 202002L +#elif __cplusplus < 201703L +#error "This is not a C++20 compiler" +#else + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 +#endif +) + dnl Tests for new features in C++11 @@ -190,11 +211,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -249,7 +272,7 @@ namespace cxx11 } int - test(const int c, volatile int v) + test(const int c, volatile int v) // 'volatile is deprecated in C++20' { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); @@ -523,7 +546,7 @@ namespace cxx14 } - namespace test_digit_seperators + namespace test_digit_separators { constexpr auto ten_million = 100'000'000; @@ -565,3 +588,385 @@ namespace cxx14 #endif // __cplusplus >= 201402L ]]) + + +dnl Tests for new features in C++17 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ + +// If the compiler admits that it is not ready for C++17, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201703L + +#error "This is not a C++17 compiler" + +#else + +#include +#include +#include + +namespace cxx17 +{ + + namespace test_constexpr_lambdas + { + + constexpr int foo = [](){return 42;}(); + + } + + namespace test::nested_namespace::definitions + { + + } + + namespace test_fold_expression + { + + template + int multiply(Args... args) + { + return (args * ... * 1); + } + + template + bool all(Args... args) + { + return (args && ...); + } + + } + + namespace test_extended_static_assert + { + + static_assert (true); + + } + + namespace test_auto_brace_init_list + { + + auto foo = {5}; + auto bar {5}; + + static_assert(std::is_same, decltype(foo)>::value); + static_assert(std::is_same::value); + } + + namespace test_typename_in_template_template_parameter + { + + template typename X> struct D; + + } + + namespace test_fallthrough_nodiscard_maybe_unused_attributes + { + + int f1() + { + return 42; + } + + [[nodiscard]] int f2() + { + [[maybe_unused]] auto unused = f1(); + + switch (f1()) + { + case 17: + f1(); + [[fallthrough]]; + case 42: + f1(); + } + return f1(); + } + + } + + namespace test_extended_aggregate_initialization + { + + struct base1 + { + int b1, b2 = 42; + }; + + struct base2 + { + base2() { + b3 = 42; + } + int b3; + }; + + struct derived : base1, base2 + { + int d; + }; + + derived d1 {{1, 2}, {}, 4}; // full initialization + derived d2 {{}, {}, 4}; // value-initialized bases + + } + + namespace test_general_range_based_for_loop + { + + struct iter + { + int i; + + int& operator* () + { + return i; + } + + const int& operator* () const + { + return i; + } + + iter& operator++() + { + ++i; + return *this; + } + }; + + struct sentinel + { + int i; + }; + + bool operator== (const iter& i, const sentinel& s) + { + return i.i == s.i; + } + + bool operator!= (const iter& i, const sentinel& s) + { + return !(i == s); + } + + struct range + { + iter begin() const + { + return {0}; + } + + sentinel end() const + { + return {5}; + } + }; + + void f() + { + range r {}; + + for (auto i : r) + { + [[maybe_unused]] auto v = i; + } + } + + } + + namespace test_lambda_capture_asterisk_this_by_value + { + + struct t + { + int i; + int foo() + { + return [*this]() + { + return i; + }(); + } + }; + + } + + namespace test_enum_class_construction + { + + enum class byte : unsigned char + {}; + + byte foo {42}; + + } + + namespace test_constexpr_if + { + + template + int f () + { + if constexpr(cond) + { + return 13; + } + else + { + return 42; + } + } + + } + + namespace test_selection_statement_with_initializer + { + + int f() + { + return 13; + } + + int f2() + { + if (auto i = f(); i > 0) + { + return 3; + } + + switch (auto i = f(); i + 4) + { + case 17: + return 2; + + default: + return 1; + } + } + + } + + namespace test_template_argument_deduction_for_class_templates + { + + template + struct pair + { + pair (T1 p1, T2 p2) + : m1 {p1}, + m2 {p2} + {} + + T1 m1; + T2 m2; + }; + + void f() + { + [[maybe_unused]] auto p = pair{13, 42u}; + } + + } + + namespace test_non_type_auto_template_parameters + { + + template + struct B + {}; + + B<5> b1; + B<'a'> b2; + + } + + namespace test_structured_bindings + { + + int arr[2] = { 1, 2 }; + std::pair pr = { 1, 2 }; + + auto f1() -> int(&)[2] + { + return arr; + } + + auto f2() -> std::pair& + { + return pr; + } + + struct S + { + int x1 : 2; + volatile double y1; + }; + + S f3() + { + return {}; + } + + auto [ x1, y1 ] = f1(); + auto& [ xr1, yr1 ] = f1(); + auto [ x2, y2 ] = f2(); + auto& [ xr2, yr2 ] = f2(); + const auto [ x3, y3 ] = f3(); + + } + + namespace test_exception_spec_type_system + { + + struct Good {}; + struct Bad {}; + + void g1() noexcept; + void g2(); + + template + Bad + f(T*, T*); + + template + Good + f(T1*, T2*); + + static_assert (std::is_same_v); + + } + + namespace test_inline_variables + { + + template void f(T) + {} + + template inline T g(T) + { + return T{}; + } + + template<> inline void f<>(int) + {} + + template<> int g<>(int) + { + return 5; + } + + } + +} // namespace cxx17 + +#endif // __cplusplus < 201703L + +]]) \ No newline at end of file diff --git a/configure.ac b/configure.ac old mode 100755 new mode 100644 index e35da9315e7d..e5c34aa2c790 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ dnl require autoconf 2.60 (AS_ECHO/AS_ECHO_N) AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 2) define(_CLIENT_VERSION_MINOR, 9) -define(_CLIENT_VERSION_REVISION, 3) +define(_CLIENT_VERSION_REVISION, 4) define(_CLIENT_VERSION_BUILD, 0) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2022) @@ -57,7 +57,9 @@ case $host in lt_cv_deplibs_check_method="pass_all" ;; esac + dnl Require C++14 compiler (no GNU extensions) + AX_CXX_COMPILE_STDCXX([14], [noext], [mandatory], [nodefault]) dnl Check if -latomic is required for CHECK_ATOMIC @@ -815,7 +817,7 @@ fi if test x$use_boost = xyes; then dnl Minimum required Boost version -define(MINIMUM_REQUIRED_BOOST, 1.71.0) +define(MINIMUM_REQUIRED_BOOST, 1.73.0) dnl Check for boost libs AX_BOOST_BASE([MINIMUM_REQUIRED_BOOST]) @@ -882,7 +884,6 @@ if test x$use_tests = xyes; then #define BOOST_TEST_DYN_LINK #define BOOST_TEST_MAIN #include - ])], [AC_MSG_RESULT(yes)] [TESTDEFS="$TESTDEFS -DBOOST_TEST_DYN_LINK"], @@ -898,13 +899,13 @@ if test x$use_boost = xyes; then BOOST_LIBS="$BOOST_LDFLAGS $BOOST_SYSTEM_LIB $BOOST_FILESYSTEM_LIB $BOOST_PROGRAM_OPTIONS_LIB $BOOST_THREAD_LIB $BOOST_CHRONO_LIB $BOOST_COROUTINE_LIB $BOOST_CONTEXT_LIB" -dnl If boost (prior to 1.57) was built without c++11, it emulated scoped enums +dnl If boost (prior to 1.57) was built without c++14, it emulated scoped enums dnl using c++98 constructs. Unfortunately, this implementation detail leaked into dnl the abi. This was fixed in 1.57. -dnl When building against that installed version using c++11, the headers pick up -dnl on the native c++11 scoped enum support and enable it, however it will fail to -dnl link. This can be worked around by disabling c++11 scoped enums if linking will +dnl When building against that installed version using c++14, the headers pick up +dnl on the native c++14 scoped enum support and enable it, however it will fail to +dnl link. This can be worked around by disabling c++14 scoped enums if linking will dnl fail. dnl BOOST_NO_SCOPED_ENUMS was changed to BOOST_NO_CXX11_SCOPED_ENUMS in 1.51. @@ -912,7 +913,7 @@ TEMP_LIBS="$LIBS" LIBS="$BOOST_LIBS $LIBS" TEMP_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" -AC_MSG_CHECKING([for mismatched boost c++11 scoped enums]) +AC_MSG_CHECKING([for mismatched boost c++14 scoped enums]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include #include @@ -1000,7 +1001,6 @@ if test x$use_pkgconfig = xyes; then PKG_CHECK_MODULES([EVENT_PTHREADS], [libevent_pthreads],, [AC_MSG_ERROR(libevent_pthreads not found.)]) fi fi - if test "x$use_zmq" = "xyes"; then PKG_CHECK_MODULES([ZMQ],[libzmq >= 4], [AC_DEFINE([ENABLE_ZMQ],[1],[Define to 1 to enable ZMQ functions])], @@ -1401,4 +1401,4 @@ echo " LDFLAGS = $PTHREAD_CFLAGS $HARDENED_LDFLAGS $GPROF_LDFLAGS $LDFLAG echo " ARFLAGS = $ARFLAGS" echo " PIC_FLAGS = $PIC_FLAGS" -echo +echo \ No newline at end of file diff --git a/contrib/devtools/symbol-check.py b/contrib/devtools/symbol-check.py index 723d7a51178c..653613c35130 100755 --- a/contrib/devtools/symbol-check.py +++ b/contrib/devtools/symbol-check.py @@ -36,10 +36,10 @@ # (glibc) GLIBC_2_11 # MAX_VERSIONS = { -'GCC': (4,4,0), +'GCC': (4,8,0), 'CXXABI': (1,3,3), 'GLIBCXX': (3,4,13), -'GLIBC': (2,11), +'GLIBC': (2,17), 'LIBATOMIC': (1,0) } # See here for a description of _IO_stdin_used: diff --git a/contrib/gitian-build.py b/contrib/gitian-build.py new file mode 100755 index 000000000000..e90e4b065c6b --- /dev/null +++ b/contrib/gitian-build.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 +# Copyright (c) 2018-2019 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +import argparse +import os +import subprocess +import sys + +def setup(): + global args, workdir + programs = ['ruby', 'git', 'make', 'wget', 'curl'] + if args.kvm: + programs += ['apt-cacher-ng', 'python-vm-builder', 'qemu-kvm', 'qemu-utils'] + elif args.docker: + if not os.path.isfile('/lib/systemd/system/docker.service'): + dockers = ['docker.io', 'docker-ce'] + for i in dockers: + return_code = subprocess.call(['sudo', 'apt-get', 'install', '-qq', i]) + if return_code == 0: + break + if return_code != 0: + print('Cannot find any way to install Docker.', file=sys.stderr) + sys.exit(1) + else: + programs += ['apt-cacher-ng', 'lxc', 'debootstrap'] + subprocess.check_call(['sudo', 'apt-get', 'install', '-qq'] + programs) + if not os.path.isdir('gitian-builder'): + subprocess.check_call(['git', 'clone', 'https://github.com/devrandom/gitian-builder.git']) + if not os.path.isdir('unigrid'): + subprocess.check_call(['git', 'clone', 'https://github.com/unigrid-project/daemon.git', 'unigrid']) + os.chdir('gitian-builder') + make_image_prog = ['bin/make-base-vm', '--suite', 'bionic', '--arch', 'amd64'] + if args.docker: + make_image_prog += ['--docker'] + elif args.lxc: + make_image_prog += ['--lxc', '--disksize', '13000'] + subprocess.check_call(make_image_prog) + os.chdir(workdir) + if args.is_bionic and not args.kvm and not args.docker: + subprocess.check_call(['sudo', 'sed', '-i', 's/lxcbr0/br0/', '/etc/default/lxc-net']) + print('Reboot is required') + sys.exit(0) + +def build(): + global args, workdir + + os.makedirs('unigrid-binaries/' + args.version, exist_ok=True) + print('\nBuilding Dependencies\n') + os.chdir('gitian-builder') + os.makedirs('inputs', exist_ok=True) + + subprocess.check_call(['wget', '-O', 'inputs/osslsigncode-2.0.tar.gz', 'https://github.com/mtrojnar/osslsigncode/archive/2.0.tar.gz']) + subprocess.check_call(["echo '5a60e0a4b3e0b4d655317b2f12a810211c50242138322b16e7e01c6fbb89d92f inputs/osslsigncode-2.0.tar.gz' | sha256sum -c"], shell=True) + subprocess.check_call(['make', '-C', '../unigrid/depends', 'download', 'SOURCES_PATH=' + os.getcwd() + '/cache/common']) + + if args.linux: + print('\nCompiling ' + args.version + ' Linux') + subprocess.check_call(['bin/gbuild', '--fetch-tags', '-j', args.jobs, '-m', args.memory, '--commit', 'unigrid='+args.commit, '--url', 'unigrid='+args.url, '../unigrid/contrib/gitian-descriptors/gitian-linux.yml']) + subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-linux', '--destination', '../gitian.sigs/', '../unigrid/contrib/gitian-descriptors/gitian-linux.yml']) + subprocess.check_call('mv build/out/unigrid-*.tar.gz build/out/src/unigrid-*.tar.gz ../unigrid-binaries/'+args.version, shell=True) + + if args.windows: + print('\nCompiling ' + args.version + ' Windows') + subprocess.check_call(['bin/gbuild', '--fetch-tags', '-j', args.jobs, '-m', args.memory, '--commit', 'unigrid='+args.commit, '--url', 'unigrid='+args.url, '../unigrid/contrib/gitian-descriptors/gitian-win.yml']) + subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-win-unsigned', '--destination', '../gitian.sigs/', '../unigrid/contrib/gitian-descriptors/gitian-win.yml']) + subprocess.check_call('mv build/out/unigrid-*-win-unsigned.tar.gz inputs/', shell=True) + subprocess.check_call('mv build/out/unigrid-*.zip build/out/unigrid-*.exe build/out/src/unigrid-*.tar.gz ../unigrid-binaries/'+args.version, shell=True) + + if args.macos: + print('\nCompiling ' + args.version + ' MacOS') + subprocess.check_call(['wget', '-N', '-P', 'inputs', 'https://bitcoincore.org/depends-sources/sdks/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers.tar.gz']) + subprocess.check_output(["echo '66c4d0756e3f5c6303643410c99821db8ec91b600f423b29788d1d7b9f35e2c1 inputs/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers.tar.gz' | sha256sum -c"], shell=True) + subprocess.check_call(['bin/gbuild', '--fetch-tags', '-j', args.jobs, '-m', args.memory, '--commit', 'unigrid='+args.commit, '--url', 'unigrid='+args.url, '../unigrid/contrib/gitian-descriptors/gitian-osx.yml']) + subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-osx-unsigned', '--destination', '../gitian.sigs/', '../unigrid/contrib/gitian-descriptors/gitian-osx.yml']) + subprocess.check_call('mv build/out/unigrid-*-osx-unsigned.tar.gz inputs/', shell=True) + subprocess.check_call('mv build/out/unigrid-*.tar.gz build/out/unigrid-*.dmg build/out/src/unigrid-*.tar.gz ../unigrid-binaries/'+args.version, shell=True) + + os.chdir(workdir) + + if args.commit_files: + print('\nCommitting '+args.version+' Unsigned Sigs\n') + os.chdir('gitian.sigs') + subprocess.check_call(['git', 'add', args.version+'-linux/'+args.signer]) + subprocess.check_call(['git', 'add', args.version+'-win-unsigned/'+args.signer]) + subprocess.check_call(['git', 'add', args.version+'-osx-unsigned/'+args.signer]) + subprocess.check_call(['git', 'commit', '-m', 'Add '+args.version+' unsigned sigs for '+args.signer]) + os.chdir(workdir) + +def sign(): + global args, workdir + os.chdir('gitian-builder') + + if args.windows: + print('\nSigning ' + args.version + ' Windows') + subprocess.check_call('cp inputs/unigrid-' + args.version + '-win-unsigned.tar.gz inputs/unigrid-win-unsigned.tar.gz', shell=True) + subprocess.check_call(['bin/gbuild', '--skip-image', '--upgrade', '--commit', 'signature='+args.commit, '../unigrid/contrib/gitian-descriptors/gitian-win-signer.yml']) + subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-win-signed', '--destination', '../gitian.sigs/', '../unigrid/contrib/gitian-descriptors/gitian-win-signer.yml']) + subprocess.check_call('mv build/out/unigrid-*win64-setup.exe ../unigrid-binaries/'+args.version, shell=True) + + if args.macos: + print('\nSigning ' + args.version + ' MacOS') + subprocess.check_call('cp inputs/unigrid-' + args.version + '-osx-unsigned.tar.gz inputs/unigrid-osx-unsigned.tar.gz', shell=True) + subprocess.check_call(['bin/gbuild', '--skip-image', '--upgrade', '--commit', 'signature='+args.commit, '../unigrid/contrib/gitian-descriptors/gitian-osx-signer.yml']) + subprocess.check_call(['bin/gsign', '-p', args.sign_prog, '--signer', args.signer, '--release', args.version+'-osx-signed', '--destination', '../gitian.sigs/', '../unigrid/contrib/gitian-descriptors/gitian-osx-signer.yml']) + subprocess.check_call('mv build/out/unigrid-osx-signed.dmg ../unigrid-binaries/'+args.version+'/unigrid-'+args.version+'-osx.dmg', shell=True) + + os.chdir(workdir) + + if args.commit_files: + print('\nCommitting '+args.version+' Signed Sigs\n') + os.chdir('gitian.sigs') + subprocess.check_call(['git', 'add', args.version+'-win-signed/'+args.signer]) + subprocess.check_call(['git', 'add', args.version+'-osx-signed/'+args.signer]) + subprocess.check_call(['git', 'commit', '-a', '-m', 'Add '+args.version+' signed binary sigs for '+args.signer]) + os.chdir(workdir) + +def verify(): + global args, workdir + rc = 0 + os.chdir('gitian-builder') + + print('\nVerifying v'+args.version+' Linux\n') + if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-linux', '../unigrid/contrib/gitian-descriptors/gitian-linux.yml']): + print('Verifying v'+args.version+' Linux FAILED\n') + rc = 1 + + print('\nVerifying v'+args.version+' Windows\n') + if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-win-unsigned', '../unigrid/contrib/gitian-descriptors/gitian-win.yml']): + print('Verifying v'+args.version+' Windows FAILED\n') + rc = 1 + + print('\nVerifying v'+args.version+' MacOS\n') + if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-osx-unsigned', '../unigrid/contrib/gitian-descriptors/gitian-osx.yml']): + print('Verifying v'+args.version+' MacOS FAILED\n') + rc = 1 + + print('\nVerifying v'+args.version+' Signed Windows\n') + if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-win-signed', '../unigrid/contrib/gitian-descriptors/gitian-win-signer.yml']): + print('Verifying v'+args.version+' Signed Windows FAILED\n') + rc = 1 + + print('\nVerifying v'+args.version+' Signed MacOS\n') + if subprocess.call(['bin/gverify', '-v', '-d', '../gitian.sigs/', '-r', args.version+'-osx-signed', '../unigrid/contrib/gitian-descriptors/gitian-osx-signer.yml']): + print('Verifying v'+args.version+' Signed MacOS FAILED\n') + rc = 1 + + os.chdir(workdir) + return rc + +def main(): + global args, workdir + + parser = argparse.ArgumentParser(description='Script for running full Gitian builds.') + parser.add_argument('-c', '--commit', action='store_true', dest='commit', help='Indicate that the version argument is for a commit or branch') + parser.add_argument('-p', '--pull', action='store_true', dest='pull', help='Indicate that the version argument is the number of a github repository pull request') + parser.add_argument('-u', '--url', dest='url', default='https://github.com/unigrid-project/daemon', help='Specify the URL of the repository. Default is %(default)s') + parser.add_argument('-v', '--verify', action='store_true', dest='verify', help='Verify the Gitian build') + parser.add_argument('-b', '--build', action='store_true', dest='build', help='Do a Gitian build') + parser.add_argument('-s', '--sign', action='store_true', dest='sign', help='Make signed binaries for Windows and MacOS') + parser.add_argument('-B', '--buildsign', action='store_true', dest='buildsign', help='Build both signed and unsigned binaries') + parser.add_argument('-o', '--os', dest='os', default='lwm', help='Specify which Operating Systems the build is for. Default is %(default)s. l for Linux, w for Windows, m for MacOS') + parser.add_argument('-j', '--jobs', dest='jobs', default='2', help='Number of processes to use. Default %(default)s') + parser.add_argument('-m', '--memory', dest='memory', default='2000', help='Memory to allocate in MiB. Default %(default)s') + parser.add_argument('-V', '--virtualization', dest='virtualization', default='docker', help='Specify virtualization technology to use: lxc for LXC, kvm for KVM, docker for Docker. Default is %(default)s') + parser.add_argument('-S', '--setup', action='store_true', dest='setup', help='Set up the Gitian building environment. Only works on Debian-based systems (Ubuntu, Debian)') + parser.add_argument('-D', '--detach-sign', action='store_true', dest='detach_sign', help='Create the assert file for detached signing. Will not commit anything.') + parser.add_argument('-n', '--no-commit', action='store_false', dest='commit_files', help='Do not commit anything to git') + parser.add_argument('signer', nargs='?', help='GPG signer to sign each build assert file') + parser.add_argument('version', nargs='?', help='Version number, commit, or branch to build. If building a commit or branch, the -c option must be specified') + + args = parser.parse_args() + workdir = os.getcwd() + + args.is_bionic = b'bionic' in subprocess.check_output(['lsb_release', '-cs']) + + args.lxc = (args.virtualization == 'lxc') + args.kvm = (args.virtualization == 'kvm') + args.docker = (args.virtualization == 'docker') + + script_name = os.path.basename(sys.argv[0]) + if not args.lxc and not args.kvm and not args.docker: + print(script_name+': Wrong virtualization option.') + print('Try '+script_name+' --help for more information') + sys.exit(1) + + # Ensure no more than one environment variable for gitian-builder (USE_LXC, USE_VBOX, USE_DOCKER) is set as they + # can interfere (e.g., USE_LXC being set shadows USE_DOCKER; for details see gitian-builder/libexec/make-clean-vm). + os.environ['USE_LXC'] = '' + os.environ['USE_VBOX'] = '' + os.environ['USE_DOCKER'] = '' + if args.docker: + os.environ['USE_DOCKER'] = '1' + elif not args.kvm: + os.environ['USE_LXC'] = '1' + if 'GITIAN_HOST_IP' not in os.environ.keys(): + os.environ['GITIAN_HOST_IP'] = '10.0.3.1' + if 'LXC_GUEST_IP' not in os.environ.keys(): + os.environ['LXC_GUEST_IP'] = '10.0.3.5' + + if args.setup: + setup() + + if args.buildsign: + args.build = True + args.sign = True + + if not args.build and not args.sign and not args.verify: + sys.exit(0) + + args.linux = 'l' in args.os + args.windows = 'w' in args.os + args.macos = 'm' in args.os + + args.sign_prog = 'true' if args.detach_sign else 'gpg --detach-sign' + + if not args.signer: + print(script_name+': Missing signer') + print('Try '+script_name+' --help for more information') + sys.exit(1) + if not args.version: + print(script_name+': Missing version') + print('Try '+script_name+' --help for more information') + sys.exit(1) + + # Add leading 'v' for tags + if args.commit and args.pull: + raise Exception('Cannot have both commit and pull') + args.commit = ('' if args.commit else 'v') + args.version + + os.chdir('unigrid') + if args.pull: + subprocess.check_call(['git', 'fetch', args.url, 'refs/pull/'+args.version+'/merge']) + os.chdir('../gitian-builder/inputs/unigrid') + subprocess.check_call(['git', 'fetch', args.url, 'refs/pull/'+args.version+'/merge']) + args.commit = subprocess.check_output(['git', 'show', '-s', '--format=%H', 'FETCH_HEAD'], universal_newlines=True, encoding='utf8').strip() + args.version = 'pull-' + args.version + print(args.commit) + subprocess.check_call(['git', 'fetch']) + subprocess.check_call(['git', 'checkout', args.commit]) + os.chdir(workdir) + + os.chdir('gitian-builder') + subprocess.check_call(['git', 'pull']) + os.chdir(workdir) + + if args.build: + build() + + if args.sign: + sign() + + if args.verify: + os.chdir('gitian.sigs') + subprocess.check_call(['git', 'pull']) + os.chdir(workdir) + sys.exit(verify()) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/contrib/gitian-build.sh b/contrib/gitian-build.sh index 7196f0d5f7ff..6ce270c6ee78 100755 --- a/contrib/gitian-build.sh +++ b/contrib/gitian-build.sh @@ -381,4 +381,4 @@ then git commit -a -m "Add ${VERSION} signed binary sigs for ${SIGNER}" popd fi -fi +fi \ No newline at end of file diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index 09a2fa7d6cd1..b1a08fe8fd2d 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -7,21 +7,12 @@ architectures: - "amd64" packages: - "curl" -- "g++-aarch64-linux-gnu" -- "g++-8-aarch64-linux-gnu" -- "gcc-8-aarch64-linux-gnu" -- "binutils-aarch64-linux-gnu" -- "g++-arm-linux-gnueabihf" -- "g++-8-arm-linux-gnueabihf" -- "gcc-8-arm-linux-gnueabihf" -- "binutils-arm-linux-gnueabihf" -- "g++-riscv64-linux-gnu" -- "g++-8-riscv64-linux-gnu" -- "gcc-8-riscv64-linux-gnu" -- "binutils-riscv64-linux-gnu" - "g++-8-multilib" - "gcc-8-multilib" - "binutils-gold" +- "binutils" +- "g++-8" +- "gcc-8" - "git" - "pkg-config" - "autoconf" @@ -31,6 +22,13 @@ packages: - "bsdmainutils" - "ca-certificates" - "python" +# Cross compilation HOSTS: +# - aarch64-linux-gnu +- "binutils-aarch64-linux-gnu" +- "g++-8-aarch64-linux-gnu" +# - riscv64-linux-gnu +- "binutils-riscv64-linux-gnu" +- "g++-8-riscv64-linux-gnu" remotes: - "url": "https://github.com/unigrid-project/daemon.git" "dir": "unigrid" @@ -38,7 +36,7 @@ files: [] script: | WRAP_DIR=$HOME/wrapped - HOSTS="x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu" + HOSTS="x86_64-linux-gnu" CONFIGFLAGS="--enable-glibc-back-compat --enable-reduce-exports --disable-bench --disable-gui-tests" FAKETIME_HOST_PROGS="gcc g++" FAKETIME_PROGS="date ar ranlib nm" @@ -198,4 +196,4 @@ script: | rm -rf distsrc-${i} done mkdir -p $OUTDIR/daemon - mv $SOURCEDIST $OUTDIR/daemon + mv $SOURCEDIST $OUTDIR/daemon \ No newline at end of file diff --git a/contrib/gitian-descriptors/gitian-osx.yml b/contrib/gitian-descriptors/gitian-osx.yml index 9a7725ca6516..e576ce6c9cdb 100644 --- a/contrib/gitian-descriptors/gitian-osx.yml +++ b/contrib/gitian-descriptors/gitian-osx.yml @@ -1,5 +1,5 @@ --- -name: "unigrid-osx" +name: "unigrid-osx-18" enable_cache: true suites: - "bionic" @@ -34,10 +34,12 @@ remotes: - "url": "https://github.com/unigrid-project/daemon.git" "dir": "unigrid" files: -- "MacOSX10.11.sdk.tar.xz" +#- "Xcode-12.1-12A7403-extracted-SDK-with-libcxx-headers.tar.gz" +#- "MacOSX10.11.sdk.tar.xz" +- "Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers.tar.gz" script: | WRAP_DIR=$HOME/wrapped - HOSTS="x86_64-apple-darwin11" + HOSTS="x86_64-apple-darwin19" CONFIGFLAGS="--enable-reduce-exports --disable-bench --disable-gui-tests" FAKETIME_HOST_PROGS="" FAKETIME_PROGS="ar ranlib date" @@ -56,26 +58,29 @@ script: | export ZERO_AR_DATE=1 + # Use $LIB in LD_PRELOAD to avoid hardcoding the dir (See `man ld.so`) function create_global_faketime_wrappers { for prog in ${FAKETIME_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${prog} echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog} + echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog} echo "\$REAL \$@" >> $WRAP_DIR/${prog} chmod +x ${WRAP_DIR}/${prog} + touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${prog} done } function create_per-host_faketime_wrappers { for i in $HOSTS; do for prog in ${FAKETIME_HOST_PROGS}; do - echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog} + echo '#!/usr/bin/env bash' > ${WRAP_DIR}/${i}-${prog} echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog} - echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog} + echo "export LD_PRELOAD='/usr/\$LIB/faketime/libfaketime.so.1'" >> ${WRAP_DIR}/${i}-${prog} echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog} echo "\$REAL \$@" >> $WRAP_DIR/${i}-${prog} chmod +x ${WRAP_DIR}/${i}-${prog} + touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${i}-${prog} done done } @@ -90,7 +95,7 @@ script: | BASEPREFIX=`pwd`/depends mkdir -p ${BASEPREFIX}/SDKs - tar -C ${BASEPREFIX}/SDKs -xf ${BUILD_DIR}/MacOSX10.11.sdk.tar.xz + tar -C ${BASEPREFIX}/SDKs -xf ${BUILD_DIR}/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers.tar.gz # Build dependencies for each host for i in $HOSTS; do @@ -150,4 +155,4 @@ script: | done mkdir -p $OUTDIR/daemon mv $SOURCEDIST $OUTDIR/daemon - mv ${OUTDIR}/${DISTNAME}-x86_64-*.tar.gz ${OUTDIR}/${DISTNAME}-osx64.tar.gz + mv ${OUTDIR}/${DISTNAME}-x86_64-*.tar.gz ${OUTDIR}/${DISTNAME}-osx64.tar.gz \ No newline at end of file diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml index f597c35958e2..d427dd6c80d1 100644 --- a/contrib/gitian-descriptors/gitian-win.yml +++ b/contrib/gitian-descriptors/gitian-win.yml @@ -28,7 +28,6 @@ remotes: files: [] script: | WRAP_DIR=$HOME/wrapped - HOSTS="x86_64-w64-mingw32" CONFIGFLAGS="--enable-reduce-exports --disable-bench --disable-gui-tests" FAKETIME_HOST_PROGS="ar ranlib nm windres strip objcopy" FAKETIME_PROGS="date makensis zip" @@ -173,6 +172,5 @@ script: | mkdir unsigned find . | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-win-unsigned.tar.gz mv ${OUTDIR}/${DISTNAME}-x86_64-*-debug.zip ${OUTDIR}/${DISTNAME}-win64-debug.zip - mv ${OUTDIR}/${DISTNAME}-i686-*-debug.zip ${OUTDIR}/${DISTNAME}-win32-debug.zip mv ${OUTDIR}/${DISTNAME}-x86_64-*.zip ${OUTDIR}/${DISTNAME}-win64.zip - mv ${OUTDIR}/${DISTNAME}-i686-*.zip ${OUTDIR}/${DISTNAME}-win32.zip + \ No newline at end of file diff --git a/contrib/guix/INSTALL.md b/contrib/guix/INSTALL.md new file mode 100644 index 000000000000..d4339356b308 --- /dev/null +++ b/contrib/guix/INSTALL.md @@ -0,0 +1,801 @@ +# Guix Installation and Setup + +This only needs to be done once per machine. If you have already completed the +installation and setup, please proceed to [perform a build](./README.md). + +Otherwise, you may choose from one of the following options to install Guix: + +1. Using the official **shell installer script** [⤓ skip to section][install-script] + - Maintained by Guix developers + - Easiest (automatically performs *most* setup) + - Works on nearly all Linux distributions + - Only installs latest release + - Binary installation only, requires high level of trust + - Note: The script needs to be run as root, so it should be inspected before it's run +2. Using the official **binary tarball** [⤓ skip to section][install-bin-tarball] + - Maintained by Guix developers + - Normal difficulty (full manual setup required) + - Works on nearly all Linux distributions + - Installs any release + - Binary installation only, requires high level of trust +3. Using fanquake's **Docker image** [↗︎ external instructions][install-fanquake-docker] + - Maintained by fanquake + - Easy (automatically performs *some* setup) + - Works wherever Docker images work + - Installs any release + - Binary installation only, requires high level of trust +4. Using a **distribution-maintained package** [⤓ skip to section][install-distro-pkg] + - Maintained by distribution's Guix package maintainer + - Normal difficulty (manual setup required) + - Works only on distributions with Guix packaged, see: https://repology.org/project/guix/versions + - Installs a release decided on by package maintainer + - Source or binary installation depending on the distribution +5. Building **from source** [⤓ skip to section][install-source] + - Maintained by you + - Hard, but rewarding + - Can be made to work on most Linux distributions + - Installs any commit (more granular) + - Source installation, requires lower level of trust + +## Options 1 and 2: Using the official shell installer script or binary tarball + +The installation instructions for both the official shell installer script and +the binary tarballs can be found in the GNU Guix Manual's [Binary Installation +section](https://guix.gnu.org/manual/en/html_node/Binary-Installation.html). + +Note that running through the binary tarball installation steps is largely +equivalent to manually performing what the shell installer script does. + +Note that at the time of writing (July 5th, 2021), the shell installer script +automatically creates an `/etc/profile.d` entry which the binary tarball +installation instructions do not ask you to create. However, you will likely +need this entry for better desktop integration. Please see [this +section](#add-an-etcprofiled-entry) for instructions on how to add a +`/etc/profile.d/guix.sh` entry. + +Regardless of which installation option you chose, the changes to +`/etc/profile.d` will not take effect until the next shell or desktop session, +so you should log out and log back in. + +## Option 3: Using fanquake's Docker image + +Please refer to fanquake's instructions +[here](https://github.com/fanquake/core-review/tree/master/guix). + +Note that the `Dockerfile` is largely equivalent to running through the binary +tarball installation steps. + +## Option 4: Using a distribution-maintained package + +Note that this section is based on the distro packaging situation at the time of +writing (July 2021). Guix is expected to be more widely packaged over time. For +an up-to-date view on Guix's package status/version across distros, please see: +https://repology.org/project/guix/versions + +### Debian / Ubuntu + +Guix v1.2.0 is available as a distribution package starting in [Debian +11](https://packages.debian.org/bullseye/guix) and [Ubuntu +21.04](https://packages.ubuntu.com/search?keywords=guix). + +Note that if you intend on using Guix without using any substitutes (more +details [here][security-model]), v1.2.0 has a known problem when building GnuTLS +from source. Solutions and workarounds are documented +[here](#gnutls-test-suite-fail-status-request-revoked). + + +To install: +```sh +sudo apt install guix +``` + +For up-to-date information on Debian and Ubuntu's release history: +- [Debian release history](https://www.debian.org/releases/) +- [Ubuntu release history](https://ubuntu.com/about/release-cycle) + +### Arch Linux + +Guix is available in the AUR as +[`guix`](https://aur.archlinux.org/packages/guix/), please follow the +installation instructions in the Arch Linux Wiki ([live +link](https://wiki.archlinux.org/index.php/Guix#AUR_Package_Installation), +[2021/03/30 +permalink](https://wiki.archlinux.org/index.php?title=Guix&oldid=637559#AUR_Package_Installation)) +to install Guix. + +At the time of writing (2021/03/30), the `check` phase will fail if the path to +guix's build directory is longer than 36 characters due to an anachronistic +character limit on the shebang line. Since the `check` phase happens after the +`build` phase, which may take quite a long time, it is recommended that users +either: + +1. Skip the `check` phase + - For `makepkg`: `makepkg --nocheck ...` + - For `yay`: `yay --mflags="--nocheck" ...` + - For `paru`: `paru --nocheck ...` +2. Or, check their build directory's length beforehand + - For those building with `makepkg`: `pwd | wc -c` + +## Option 5: Building from source + +Building Guix from source is a rather involved process but a rewarding one for +those looking to minimize trust and maximize customizability (e.g. building a +particular commit of Guix). Previous experience with using autotools-style build +systems to build packages from source will be helpful. *hic sunt dracones.* + +I strongly urge you to at least skim through the entire section once before you +start issuing commands, as it will save you a lot of unnecessary pain and +anguish. + +### Installing common build tools + +There are a few basic build tools that are required for most things we'll build, +so let's install them now: + +Text transformation/i18n: +- `autopoint` (sometimes packaged in `gettext`) +- `help2man` +- `po4a` +- `texinfo` + +Build system tools: +- `g++` w/ c++17 support +- `libtool` +- `autoconf` +- `automake` +- `pkg-config` (sometimes packaged as `pkgconf`) +- `make` +- `cmake` + +Miscellaneous: +- `git` +- `gnupg` +- `python3` + +### Building and Installing Guix's dependencies + +In order to build Guix itself from source, we need to first make sure that the +necessary dependencies are installed and discoverable. The most up-to-date list +of Guix's dependencies is kept in the ["Requirements" +section](https://guix.gnu.org/manual/en/html_node/Requirements.html) of the Guix +Reference Manual. + +Depending on your distribution, most or all of these dependencies may already be +packaged and installable without manually building and installing. + +For reference, the graphic below outlines Guix v1.3.0's dependency graph: + +![bootstrap map](https://user-images.githubusercontent.com/6399679/125064185-a9a59880-e0b0-11eb-82c1-9b8e5dc9950d.png) + +#### Guile + +##### Choosing a Guile version and sticking to it + +One of the first things you need to decide is which Guile version you want to +use: Guile v2.2 or Guile v3.0. Unlike the python2 to python3 transition, Guile +v2.2 and Guile v3.0 are largely compatible, as evidenced by the fact that most +Guile packages and even [Guix +itself](https://guix.gnu.org/en/blog/2020/guile-3-and-guix/) support running on +both. + +What is important here is that you **choose one**, and you **remain consistent** +with your choice throughout **all Guile-related packages**, no matter if they +are installed via the distribution's package manager or installed from source. +This is because the files for Guile packages are installed to directories which +are separated based on the Guile version. + +###### Example: Checking that Ubuntu's `guile-git` is compatible with your chosen Guile version + +On Ubuntu bionic: + +```sh +$ apt show guile-git +Package: guile-git +... +Depends: guile-2.2, guile-bytestructures, libgit2-dev +... +``` + +As you can see, the package `guile-git` depends on `guile-2.2`, meaning that it +was likely built for Guile v2.2. This means that if you decided to use Guile +v3.0 on Ubuntu bionic, you would need to build guile-git from source instead of +using the distribution package. + +On Ubuntu Hirsute: + +```sh +$ apt show guile-git +Package: guile-git +... +Depends: guile-3.0 | guile-2.2, guile-bytestructures (>= 1.0.7-3~), libgit2-dev (>= 1.0) +... +``` + +In this case, `guile-git` depends on either `guile-3.0` or `guile-2.2`, meaning +that it would work no matter what Guile version you decided to use. + +###### Corner case: Multiple versions of Guile on one system + +It is recommended to only install one version of Guile, so that build systems do +not get confused about which Guile to use. + +However, if you insist on having both Guile v2.2 and Guile v3.0 installed on +your system, then you need to **consistently** specify one of +`GUILE_EFFECTIVE_VERSION=3.0` or `GUILE_EFFECTIVE_VERSION=2.2` to all +`./configure` invocations for Guix and its dependencies. + +##### Installing Guile + +Guile is most likely already packaged for your distribution, so after you have +[chosen a Guile version](#choosing-a-guile-version-and-sticking-to-it), install +it via your distribution's package manager. + +If your distribution splits packages into `-dev`-suffixed and +non-`-dev`-suffixed sub-packages (as is the case for Debian-derived +distributions), please make sure to install both. For example, to install Guile +v2.2 on Debian/Ubuntu: + +```sh +apt install guile-2.2 guile-2.2-dev +``` + +#### Mixing distribution packages and source-built packages + +At the time of writing, most distributions have _some_ of Guix's dependencies +packaged, but not all. This means that you may want to install the distribution +package for some dependencies, and manually build-from-source for others. + +Distribution packages usually install to `/usr`, which is different from the +default `./configure` prefix of source-built packages: `/usr/local`. + +This means that if you mix-and-match distribution packages and source-built +packages and do not specify exactly `--prefix=/usr` to `./configure` for +source-built packages, you will need to augment the `GUILE_LOAD_PATH` and +`GUILE_LOAD_COMPILED_PATH` environment variables so that Guile will look +under the right prefix and find your source-built packages. + +For example, if you are using Guile v2.2, and have Guile packages in the +`/usr/local` prefix, either add the following lines to your `.profile` or +`.bash_profile` so that the environment variable is properly set for all future +shell logins, or paste the lines into a POSIX-style shell to temporarily modify +the environment variables of your current shell session. + +```sh +# Help Guile v2.2.x find packages in /usr/local +export GUILE_LOAD_PATH="/usr/local/share/guile/site/2.2${GUILE_LOAD_PATH:+:}$GUILE_LOAD_PATH" +export GUILE_LOAD_COMPILED_PATH="/usr/local/lib/guile/2.2/site-ccache${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_COMPILED_LOAD_PATH" +``` + +Note that these environment variables are used to check for packages during +`./configure`, so they should be set as soon as possible should you want to use +a prefix other than `/usr`. + +#### Building and installing source-built packages + +***IMPORTANT**: A few dependencies have non-obvious quirks/errata which are +documented in the sub-sections immediately below. Please read these sections +before proceeding to build and install these packages.* + +Although you should always refer to the README or INSTALL files for the most +accurate information, most of these dependencies use autoconf-style build +systems (check if there's a `configure.ac` file), and will likely do the right +thing with the following: + +Clone the repository and check out the latest release: +```sh +git clone /.git +cd +git tag -l # check for the latest release +git checkout +``` + +For autoconf-based build systems (if `./autogen.sh` or `configure.ac` exists at +the root of the repository): + +```sh +./autogen.sh || autoreconf -vfi +./configure --prefix= +make +sudo make install +``` + +For CMake-based build systems (if `CMakeLists.txt` exists at the root of the +repository): + +```sh +mkdir build && cd build +cmake .. -DCMAKE_INSTALL_PREFIX= +sudo cmake --build . --target install +``` + +If you choose not to specify exactly `--prefix=/usr` to `./configure`, please +make sure you've carefully read the [previous section] on mixing distribution +packages and source-built packages. + +##### Binding packages require `-dev`-suffixed packages + +Relevant for: +- Everyone + +When building bindings, the `-dev`-suffixed version of the original package +needs to be installed. For example, building `Guile-zlib` on Debian-derived +distributions requires that `zlib1g-dev` is installed. + +When using bindings, the `-dev`-suffixed version of the original package still +needs to be installed. This is particularly problematic when distribution +packages are mispackaged like `guile-sqlite3` is in Ubuntu bionic such that +installing `guile-sqlite3` does not automatically install `libsqlite3-dev` as a +dependency. + +Below is a list of relevant Guile bindings and their corresponding `-dev` +packages in Debian at the time of writing. + +| Guile binding package | -dev Debian package | +|-----------------------|---------------------| +| guile-gcrypt | libgcrypt-dev | +| guile-git | libgit2-dev | +| guile-lzlib | liblz-dev | +| guile-ssh | libssh-dev | +| guile-sqlite3 | libsqlite3-dev | +| guile-zlib | zlib1g-dev | + +##### `guile-git` actually depends on `libgit2 >= 1.1` + +Relevant for: +- Those building `guile-git` from source against `libgit2 < 1.1` +- Those installing `guile-git` from their distribution where `guile-git` is + built against `libgit2 < 1.1` + +As of v0.4.0, `guile-git` claims to only require `libgit2 >= 0.28.0`, however, +it actually requires `libgit2 >= 1.1`, otherwise, it will be confused by a +reference of `origin/keyring`: instead of interpreting the reference as "the +'keyring' branch of the 'origin' remote", the reference is interpreted as "the +branch literally named 'origin/keyring'" + +This is especially notable because Ubuntu bionic packages `libgit2 v0.28.4`, and +`guile-git` is built against it. + +Should you be in this situation, you need to build both `libgit2 v1.1.x` and +`guile-git` from source. + +Source: https://logs.guix.gnu.org/guix/2020-11-12.log#232527 + +##### `{scheme,guile}-bytestructures` v1.0.8 and v1.0.9 are broken for Guile v2.2 + +Relevant for: +- Those building `{scheme,guile}-bytestructures` from source against Guile v2.2 + +Commit +[707eea3](https://github.com/TaylanUB/scheme-bytestructures/commit/707eea3a85e1e375e86702229ebf73d496377669) +introduced a regression for Guile v2.2 and was first included in v1.0.8, this +was later corrected in commit +[ec9a721](https://github.com/TaylanUB/scheme-bytestructures/commit/ec9a721957c17bcda13148f8faa5f06934431ff7) +and included in v1.1.0. + +TL;DR If you decided to use Guile v2.2, do not use `{scheme,guile}-bytestructures` v1.0.8 or v1.0.9. + +### Building and Installing Guix itself + +Start by cloning Guix: + +``` +git clone https://git.savannah.gnu.org/git/guix.git +cd guix +``` + +You will likely want to build the latest release, however, if the latest release +when you're reading this is still 1.2.0 then you may want to use 95aca29 instead +to avoid a problem in the GnuTLS test suite. + +``` +git branch -a -l 'origin/version-*' # check for the latest release +git checkout +``` + +Bootstrap the build system: +``` +./bootstrap +``` + +Configure with the recommended `--localstatedir` flag: +``` +./configure --localstatedir=/var +``` + +Note: If you intend to hack on Guix in the future, you will need to supply the +same `--localstatedir=` flag for all future Guix `./configure` invocations. See +the last paragraph of this +[section](https://guix.gnu.org/manual/en/html_node/Requirements.html) for more +details. + +Build Guix (this will take a while): +``` +make -j$(nproc) +``` + +Install Guix: + +``` +sudo make install +``` + +### Post-"build from source" Setup + +#### Creating and starting a `guix-daemon-original` service with a fixed `argv[0]` + +At this point, guix will be installed to `${bindir}`, which is likely +`/usr/local/bin` if you did not override directory variables at +`./configure`-time. More information on standard Automake directory variables +can be found +[here](https://www.gnu.org/software/automake/manual/html_node/Standard-Directory-Variables.html). + +However, the Guix init scripts and service configurations for Upstart, systemd, +SysV, and OpenRC are installed (in `${libdir}`) to launch +`${localstatedir}/guix/profiles/per-user/root/current-guix/bin/guix-daemon`, +which does not yet exist, and will only exist after [`root` performs their first +`guix pull`](#guix-pull-as-root). + +We need to create a `-original` version of these init scripts that's pointed to +the binaries we just built and `make install`'ed in `${bindir}` (normally, +`/usr/local/bin`). + +Example for `systemd`, run as `root`: + +```sh +# Create guix-daemon-original.service by modifying guix-daemon.service +libdir=# set according to your PREFIX (default is /usr/local/lib) +bindir="$(dirname $(command -v guix-daemon))" +sed -E -e "s|/\S*/guix/profiles/per-user/root/current-guix/bin/guix-daemon|${bindir}/guix-daemon|" "${libdir}"/systemd/system/guix-daemon.service > /etc/systemd/system/guix-daemon-original.service +chmod 664 /etc/systemd/system/guix-daemon-original.service + +# Make systemd recognize the new service +systemctl daemon-reload + +# Make sure that the non-working guix-daemon.service is stopped and disabled +systemctl stop guix-daemon +systemctl disable guix-daemon + +# Make sure that the working guix-daemon-original.service is started and enabled +systemctl enable guix-daemon-original +systemctl start guix-daemon-original +``` + +#### Creating `guix-daemon` users / groups + +Please see the [relevant +section](https://guix.gnu.org/manual/en/html_node/Build-Environment-Setup.html) +in the Guix Reference Manual for more details. + +## Optional setup + +At this point, you are set up to [use Guix to build Bitcoin +Core](./README.md#usage). However, if you want to polish your setup a bit and +make it "what Guix intended", then read the next few subsections. + +### Add an `/etc/profile.d` entry + +This section definitely does not apply to you if you installed Guix using: +1. The shell installer script +2. fanquake's Docker image +3. Debian's `guix` package + +#### Background + +Although Guix knows how to update itself and its packages, it does so in a +non-invasive way (it does not modify `/usr/local/bin/guix`). + +Instead, it does the following: + +- After a `guix pull`, it updates + `/var/guix/profiles/per-user/$USER/current-guix`, and creates a symlink + targeting this directory at `$HOME/.config/guix/current` + +- After a `guix install`, it updates + `/var/guix/profiles/per-user/$USER/guix-profile`, and creates a symlink + targeting this directory at `$HOME/.guix-profile` + +Therefore, in order for these operations to affect your shell/desktop sessions +(and for the principle of least astonishment to hold), their corresponding +directories have to be added to well-known environment variables like `$PATH`, +`$INFOPATH`, `$XDG_DATA_DIRS`, etc. + +In other words, if `$HOME/.config/guix/current/bin` does not exist in your +`$PATH`, a `guix pull` will have no effect on what `guix` you are using. Same +goes for `$HOME/.guix-profile/bin`, `guix install`, and installed packages. + +Helpfully, after a `guix pull` or `guix install`, a message will be printed like +so: + +``` +hint: Consider setting the necessary environment variables by running: + + GUIX_PROFILE="$HOME/.guix-profile" + . "$GUIX_PROFILE/etc/profile" + +Alternately, see `guix package --search-paths -p "$HOME/.guix-profile"'. +``` + +However, this is somewhat tedious to do for both `guix pull` and `guix install` +for each user on the system that wants to properly use `guix`. I recommend that +you instead add an entry to `/etc/profile.d` instead. This is done by default +when installing the Debian package later than 1.2.0-4 and when using the shell +script installer. + +#### Instructions + +Create `/etc/profile.d/guix.sh` with the following content: +```sh +# _GUIX_PROFILE: `guix pull` profile +_GUIX_PROFILE="$HOME/.config/guix/current" +if [ -L $_GUIX_PROFILE ]; then + export PATH="$_GUIX_PROFILE/bin${PATH:+:}$PATH" + # Export INFOPATH so that the updated info pages can be found + # and read by both /usr/bin/info and/or $GUIX_PROFILE/bin/info + # When INFOPATH is unset, add a trailing colon so that Emacs + # searches 'Info-default-directory-list'. + export INFOPATH="$_GUIX_PROFILE/share/info:$INFOPATH" +fi + +# GUIX_PROFILE: User's default profile +GUIX_PROFILE="$HOME/.guix-profile" +[ -L $GUIX_PROFILE ] || return +GUIX_LOCPATH="$GUIX_PROFILE/lib/locale" +export GUIX_PROFILE GUIX_LOCPATH + +[ -f "$GUIX_PROFILE/etc/profile" ] && . "$GUIX_PROFILE/etc/profile" + +# set XDG_DATA_DIRS to include Guix installations +export XDG_DATA_DIRS="$GUIX_PROFILE/share:${XDG_DATA_DIRS:-/usr/local/share/:/usr/share/}" +``` + +Please note that this will not take effect until the next shell or desktop +session (log out and log back in). + +### `guix pull` as root + +Before you do this, you need to read the section on [choosing your security +model][security-model] and adjust `guix` and `guix-daemon` flags according to +your choice, as invoking `guix pull` may pull substitutes from substitute +servers (which you may not want). + +As mentioned in a previous section, Guix expects +`${localstatedir}/guix/profiles/per-user/root/current-guix` to be populated with +`root`'s Guix profile, `guix pull`-ed and built by some former version of Guix. +However, this is not the case when we build from source. Therefore, we need to +perform a `guix pull` as `root`: + +```sh +sudo --login guix pull --branch=version- +# or +sudo --login guix pull --commit= +``` + +`guix pull` is quite a long process (especially if you're using +`--no-substitute`). If you encounter build problems, please refer to the +[troubleshooting section](#troubleshooting). + +Note that running a bare `guix pull` with no commit or branch specified will +pull the latest commit on Guix's master branch, which is likely fine, but not +recommended. + +If you installed Guix from source, you may get an error like the following: +```sh +error: while creating symlink '/root/.config/guix/current' No such file or directory +``` +To resolve this, simply: +``` +sudo mkdir -p /root/.config/guix +``` +Then try the `guix pull` command again. + +After the `guix pull` finishes successfully, +`${localstatedir}/guix/profiles/per-user/root/current-guix` should be populated. + +#### Using the newly-pulled `guix` by restarting the daemon + +Depending on how you installed Guix, you should now make sure that your init +scripts and service configurations point to the newly-pulled `guix-daemon`. + +##### If you built Guix from source + +If you followed the instructions for [fixing argv\[0\]][fix-argv0], you can now +do the following: + +```sh +systemctl stop guix-daemon-original +systemctl disable guix-daemon-original + +systemctl enable guix-daemon +systemctl start guix-daemon +``` + +##### If you installed Guix via the Debian/Ubuntu distribution packages + +You will need to create a `guix-daemon-latest` service which points to the new +`guix` rather than a pinned one. + +```sh +# Create guix-daemon-latest.service by modifying guix-daemon.service +sed -E -e "s|/usr/bin/guix-daemon|/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon|" /etc/systemd/system/guix-daemon.service > /lib/systemd/system/guix-daemon-latest.service +chmod 664 /lib/systemd/system/guix-daemon-latest.service + +# Make systemd recognize the new service +systemctl daemon-reload + +# Make sure that the old guix-daemon.service is stopped and disabled +systemctl stop guix-daemon +systemctl disable guix-daemon + +# Make sure that the new guix-daemon-latest.service is started and enabled +systemctl enable guix-daemon-latest +systemctl start guix-daemon-latest +``` + +##### If you installed Guix via lantw44's Arch Linux AUR package + +At the time of writing (July 5th, 2021) the systemd unit for "updated Guix" is +`guix-daemon-latest.service`, therefore, you should do the following: + +```sh +systemctl stop guix-daemon +systemctl disable guix-daemon + +systemctl enable guix-daemon-latest +systemctl start guix-daemon-latest +``` + +##### Otherwise... + +Simply do: + +```sh +systemctl restart guix-daemon +``` + +### Checking everything + +If you followed all the steps above to make your Guix setup "prim and proper," +you can check that you did everything properly by running through this +checklist. + +1. `/etc/profile.d/guix.sh` should exist and be sourced at each shell login + +2. `guix describe` should not print `guix describe: error: failed to determine + origin`, but rather something like: + + ``` + Generation 38 Feb 22 2021 16:39:31 (current) + guix f350df4 + repository URL: https://git.savannah.gnu.org/git/guix.git + branch: version-1.2.0 + commit: f350df405fbcd5b9e27e6b6aa500da7f101f41e7 + ``` + +3. `guix-daemon` should be running from `${localstatedir}/guix/profiles/per-user/root/current-guix` + +# Troubleshooting + +## Derivation failed to build + +When you see a build failure like below: + +``` +building /gnu/store/...-foo-3.6.12.drv... +/ 'check' phasenote: keeping build directory `/tmp/guix-build-foo-3.6.12.drv-0' +builder for `/gnu/store/...-foo-3.6.12.drv' failed with exit code 1 +build of /gnu/store/...-foo-3.6.12.drv failed +View build log at '/var/log/guix/drvs/../...-foo-3.6.12.drv.bz2'. +cannot build derivation `/gnu/store/...-qux-7.69.1.drv': 1 dependencies couldn't be built +cannot build derivation `/gnu/store/...-bar-3.16.5.drv': 1 dependencies couldn't be built +cannot build derivation `/gnu/store/...-baz-2.0.5.drv': 1 dependencies couldn't be built +guix time-machine: error: build of `/gnu/store/...-baz-2.0.5.drv' failed +``` + +It means that `guix` failed to build a package named `foo`, which was a +dependency of `qux`, `bar`, and `baz`. Importantly, note that the last "failed" +line is not necessarily the root cause, the first "failed" line is. + +Most of the time, the build failure is due to a spurious test failure or the +package's build system/test suite breaking when running multi-threaded. To +rebuild _just_ this derivation in a single-threaded fashion (please don't forget +to add other `guix` flags like `--no-substitutes` as appropriate): + +```sh +$ guix build --cores=1 /gnu/store/...-foo-3.6.12.drv +``` + +If the single-threaded rebuild did not succeed, you may need to dig deeper. +You may view `foo`'s build logs in `less` like so (please replace paths with the +path you see in the build failure output): + +```sh +$ bzcat /var/log/guix/drvs/../...-foo-3.6.12.drv.bz2 | less +``` + +`foo`'s build directory is also preserved and available at +`/tmp/guix-build-foo-3.6.12.drv-0`. However, if you fail to build `foo` multiple +times, it may be `/tmp/...drv-1` or `/tmp/...drv-2`. Always consult the build +failure output for the most accurate, up-to-date information. + +### python(-minimal): [Errno 84] Invalid or incomplete multibyte or wide character + +This error occurs when your `$TMPDIR` (default: /tmp) exists on a filesystem +which rejects characters not present in the UTF-8 character code set. An example +is ZFS with the utf8only=on option set. + +More information: https://bugs.python.org/issue37584 + +### GnuTLS: test-suite FAIL: status-request-revoked + +*The derivation is likely identified by: `/gnu/store/vhphki5sg9xkdhh2pbc8gi6vhpfzryf0-gnutls-3.6.12.drv`* + +This unfortunate error is most common for non-substitute builders who installed +Guix v1.2.0. The problem stems from the fact that one of GnuTLS's tests uses a +hardcoded certificate which expired on 2020-10-24. + +What's more unfortunate is that this GnuTLS derivation is somewhat special in +Guix's dependency graph and is not affected by the package transformation flags +like `--without-tests=`. + +The easiest solution for those encountering this problem is to install a newer +version of Guix. However, there are ways to work around this issue: + +#### Workaround 1: Using substitutes for this single derivation + +If you've authorized the official Guix build farm's key (more info +[here](./README.md#step-1-authorize-the-signing-keys)), then you can use +substitutes just for this single derivation by invoking the following: + +```sh +guix build --substitute-urls="https://ci.guix.gnu.org" /gnu/store/vhphki5sg9xkdhh2pbc8gi6vhpfzryf0-gnutls-3.6.12.drv +``` + +See [this section](./README.md#removing-authorized-keys) for instructions on how +to remove authorized keys if you don't want to keep the build farm's key +authorized. + +#### Workaround 2: Temporarily setting the system clock back + +This workaround was described [here](https://issues.guix.gnu.org/44559#5). + +Basically: +1. Turn off networking +2. Turn off NTP +3. Set system time to 2020-10-01 +4. guix build --no-substitutes /gnu/store/vhphki5sg9xkdhh2pbc8gi6vhpfzryf0-gnutls-3.6.12.drv +5. Set system time back to accurate current time +6. Turn NTP back on +7. Turn networking back on + +### coreutils: FAIL: tests/tail-2/inotify-dir-recreate + +The inotify-dir-create test fails on "remote" filesystems such as overlayfs +(Docker's default filesystem) due to the filesystem being mistakenly recognized +as non-remote. + +A relatively easy workaround to this is to make sure that a somewhat traditional +filesystem is mounted at `/tmp` (where `guix-daemon` performs its builds). For +Docker users, this might mean [using a volume][docker/volumes], [binding +mounting][docker/bind-mnt] from host, or (for those with enough RAM and swap) +[mounting a tmpfs][docker/tmpfs] using the `--tmpfs` flag. + +Please see the following links for more details: + +- An upstream coreutils bug has been filed: [debbugs#47940](https://debbugs.gnu.org/cgi/bugreport.cgi?bug=47940) +- A Guix bug detailing the underlying problem has been filed: [guix-issues#47935](https://issues.guix.gnu.org/47935) +- A commit to skip this test in Guix has been merged into the core-updates branch: +[savannah/guix@6ba1058](https://git.savannah.gnu.org/cgit/guix.git/commit/?id=6ba1058df0c4ce5611c2367531ae5c3cdc729ab4) + + +[install-script]: #options-1-and-2-using-the-official-shell-installer-script-or-binary-tarball +[install-bin-tarball]: #options-1-and-2-using-the-official-shell-installer-script-or-binary-tarball +[install-fanquake-docker]: #option-3-using-fanquakes-docker-image +[install-distro-pkg]: #option-4-using-a-distribution-maintained-package +[install-source]: #option-5-building-from-source + +[fix-argv0]: #creating-and-starting-a-guix-daemon-original-service-with-a-fixed-argv0 +[security-model]: ./README.md#choosing-your-security-model + +[docker/volumes]: https://docs.docker.com/storage/volumes/ +[docker/bind-mnt]: https://docs.docker.com/storage/bind-mounts/ +[docker/tmpfs]: https://docs.docker.com/storage/tmpfs/ diff --git a/contrib/guix/README.md b/contrib/guix/README.md new file mode 100644 index 000000000000..2f2d65ae1cb7 --- /dev/null +++ b/contrib/guix/README.md @@ -0,0 +1,500 @@ +# Bootstrappable Bitcoin Core Builds + +This directory contains the files necessary to perform bootstrappable Bitcoin +Core builds. + +[Bootstrappability][b17e] furthers our binary security guarantees by allowing us +to _audit and reproduce_ our toolchain instead of blindly _trusting_ binary +downloads. + +We achieve bootstrappability by using Guix as a functional package manager. + +# Requirements + +Conservatively, you will need an x86_64 machine with: + +- 16GB of free disk space on the partition that /gnu/store will reside in +- 8GB of free disk space **per platform triple** you're planning on building + (see the `HOSTS` [environment variable description][env-vars-list]) + +# Installation and Setup + +[INSTALL.md](./INSTALL.md) + +# Usage + +If you haven't considered your security model yet, please read [the relevant +section](#choosing-your-security-model) before proceeding to perform a build. + +## Making the Xcode SDK available for macOS cross-compilation + +In order to perform a build for macOS (which is included in the default set of +platform triples to build), you'll need to extract the macOS SDK tarball using +tools found in the [`macdeploy` directory](../macdeploy/README.md). + +You can then either point to the SDK using the `SDK_PATH` environment variable: + +```sh +# Extract the SDK tarball to /path/to/parent/dir/of/extracted/SDK/Xcode---extracted-SDK-with-libcxx-headers +tar -C /path/to/parent/dir/of/extracted/SDK -xaf /path/to/Xcode---extracted-SDK-with-libcxx-headers.tar.gz + +# Indicate where to locate the SDK tarball +export SDK_PATH=/path/to/parent/dir/of/extracted/SDK +``` + +or extract it into `depends/SDKs`: + +```sh +mkdir -p depends/SDKs +tar -C depends/SDKs -xaf /path/to/SDK/tarball +``` + +## Building + +*The author highly recommends at least reading over the [common usage patterns +and examples](#common-guix-build-invocation-patterns-and-examples) section below +before starting a build. For a full list of customization options, see the +[recognized environment variables][env-vars-list] section.* + +To build Bitcoin Core reproducibly with all default options, invoke the +following from the top of a clean repository: + +Default HOSTS: +```bash +x86_64-linux-gnu +arm-linux-gnueabihf +aarch64-linux-gnu +riscv64-linux-gnu +powerpc64-linux-gnu +powerpc64le-linux-gnu +x86_64-w64-mingw32 +x86_64-apple-darwin +arm64-apple-darwin +``` + +```sh +./contrib/guix/guix-build +``` + +To build only one +``` +env HOSTS='x86_64-w64-mingw32' ./contrib/guix/guix-build +``` +## Codesigning build outputs + +The `guix-codesign` command attaches codesignatures (produced by codesigners) to +existing non-codesigned outputs. Please see the [release process +documentation](/doc/release-process.md) for more context. + +It respects many of the same environment variable flags as `guix-build`, with 2 +crucial differences: + +1. Since only Windows and macOS build outputs require codesigning, the `HOSTS` + environment variable will have a sane default value of `x86_64-w64-mingw32 + x86_64-apple-darwin arm64-apple-darwin` instead of all the platforms. +2. The `guix-codesign` command ***requires*** a `DETACHED_SIGS_REPO` flag. + * _**DETACHED_SIGS_REPO**_ + + Set the directory where detached codesignatures can be found for the current + Bitcoin Core version being built. + + _REQUIRED environment variable_ + +An invocation with all default options would look like: + +``` +env DETACHED_SIGS_REPO= ./contrib/guix/guix-codesign +``` + +## Cleaning intermediate work directories + +By default, `guix-build` leaves all intermediate files or "work directories" +(e.g. `depends/work`, `guix-build-*/distsrc-*`) intact at the end of a build so +that they are available to the user (to aid in debugging, etc.). However, these +directories usually take up a large amount of disk space. Therefore, a +`guix-clean` convenience script is provided which cleans the current `git` +worktree to save disk space: + +``` +./contrib/guix/guix-clean +``` + + +## Attesting to build outputs + +Much like how Gitian build outputs are attested to in a `gitian.sigs` +repository, Guix build outputs are attested to in the [`guix.sigs` +repository](https://github.com/bitcoin-core/guix.sigs). + +After you've cloned the `guix.sigs` repository, to attest to the current +worktree's commit/tag: + +``` +env GUIX_SIGS_REPO= SIGNER= ./contrib/guix/guix-attest +``` + +See `./contrib/guix/guix-attest --help` for more information on the various ways +`guix-attest` can be invoked. + +## Verifying build output attestations + +After at least one other signer has uploaded their signatures to the `guix.sigs` +repository: + +``` +git -C pull +env GUIX_SIGS_REPO= ./contrib/guix/guix-verify +``` + + +## Common `guix-build` invocation patterns and examples + +### Keeping caches and SDKs outside of the worktree + +If you perform a lot of builds and have a bunch of worktrees, you may find it +more efficient to keep the depends tree's download cache, build cache, and SDKs +outside of the worktrees to avoid duplicate downloads and unnecessary builds. To +help with this situation, the `guix-build` script honours the `SOURCES_PATH`, +`BASE_CACHE`, and `SDK_PATH` environment variables and will pass them on to the +depends tree so that you can do something like: + +```sh +env SOURCES_PATH="$HOME/depends-SOURCES_PATH" BASE_CACHE="$HOME/depends-BASE_CACHE" SDK_PATH="$HOME/macOS-SDKs" ./contrib/guix/guix-build +``` + +Note that the paths that these environment variables point to **must be +directories**, and **NOT symlinks to directories**. + +See the [recognized environment variables][env-vars-list] section for more +details. + +### Building a subset of platform triples + +Sometimes you only want to build a subset of the supported platform triples, in +which case you can override the default list by setting the space-separated +`HOSTS` environment variable: + +```sh +env HOSTS='x86_64-w64-mingw32 x86_64-apple-darwin' ./contrib/guix/guix-build +``` + +See the [recognized environment variables][env-vars-list] section for more +details. + +### Controlling the number of threads used by `guix` build commands + +Depending on your system's RAM capacity, you may want to decrease the number of +threads used to decrease RAM usage or vice versa. + +By default, the scripts under `./contrib/guix` will invoke all `guix` build +commands with `--cores="$JOBS"`. Note that `$JOBS` defaults to `$(nproc)` if not +specified. However, astute manual readers will also notice that `guix` build +commands also accept a `--max-jobs=` flag (which defaults to 1 if unspecified). + +Here is the difference between `--cores=` and `--max-jobs=`: + +> Note: When I say "derivation," think "package" + +`--cores=` + + - controls the number of CPU cores to build each derivation. This is the value + passed to `make`'s `--jobs=` flag. + +`--max-jobs=` + + - controls how many derivations can be built in parallel + - defaults to 1 + +Therefore, the default is for `guix` build commands to build one derivation at a +time, utilizing `$JOBS` threads. + +Specifying the `$JOBS` environment variable will only modify `--cores=`, but you +can also modify the value for `--max-jobs=` by specifying +`$ADDITIONAL_GUIX_COMMON_FLAGS`. For example, if you have a LOT of memory, you +may want to set: + +```sh +export ADDITIONAL_GUIX_COMMON_FLAGS='--max-jobs=8' +``` + +Which allows for a maximum of 8 derivations to be built at the same time, each +utilizing `$JOBS` threads. + +Or, if you'd like to avoid spurious build failures caused by issues with +parallelism within a single package, but would still like to build multiple +packages when the dependency graph allows for it, you may want to try: + +```sh +export JOBS=1 ADDITIONAL_GUIX_COMMON_FLAGS='--max-jobs=8' +``` + +See the [recognized environment variables][env-vars-list] section for more +details. + +## Recognized environment variables + +* _**HOSTS**_ + + Override the space-separated list of platform triples for which to perform a + bootstrappable build. + + _(defaults to "x86\_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu + riscv64-linux-gnu powerpc64-linux-gnu powerpc64le-linux-gnu + x86\_64-w64-mingw32 x86\_64-apple-darwin arm64-apple-darwin")_ + +* _**SOURCES_PATH**_ + + Set the depends tree download cache for sources. This is passed through to the + depends tree. Setting this to the same directory across multiple builds of the + depends tree can eliminate unnecessary redownloading of package sources. + + The path that this environment variable points to **must be a directory**, and + **NOT a symlink to a directory**. + +* _**BASE_CACHE**_ + + Set the depends tree cache for built packages. This is passed through to the + depends tree. Setting this to the same directory across multiple builds of the + depends tree can eliminate unnecessary building of packages. + + The path that this environment variable points to **must be a directory**, and + **NOT a symlink to a directory**. + +* _**SDK_PATH**_ + + Set the path where _extracted_ SDKs can be found. This is passed through to + the depends tree. Note that this is should be set to the _parent_ directory of + the actual SDK (e.g. `SDK_PATH=$HOME/Downloads/macOS-SDKs` instead of + `$HOME/Downloads/macOS-SDKs/Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers`). + + The path that this environment variable points to **must be a directory**, and + **NOT a symlink to a directory**. + +* _**JOBS**_ + + Override the number of jobs to run simultaneously, you might want to do so on + a memory-limited machine. This may be passed to: + + - `guix` build commands as in `guix environment --cores="$JOBS"` + - `make` as in `make --jobs="$JOBS"` + - `xargs` as in `xargs -P"$JOBS"` + + See [here](#controlling-the-number-of-threads-used-by-guix-build-commands) for + more details. + + _(defaults to the value of `nproc` outside the container)_ + +* _**SOURCE_DATE_EPOCH**_ + + Override the reference UNIX timestamp used for bit-for-bit reproducibility, + the variable name conforms to [standard][r12e/source-date-epoch]. + + _(defaults to the output of `$(git log --format=%at -1)`)_ + +* _**V**_ + + If non-empty, will pass `V=1` to all `make` invocations, making `make` output + verbose. + + Note that any given value is ignored. The variable is only checked for + emptiness. More concretely, this means that `V=` (setting `V` to the empty + string) is interpreted the same way as not setting `V` at all, and that `V=0` + has the same effect as `V=1`. + +* _**SUBSTITUTE_URLS**_ + + A whitespace-delimited list of URLs from which to download pre-built packages. + A URL is only used if its signing key is authorized (refer to the [substitute + servers section](#option-1-building-with-substitutes) for more details). + +* _**ADDITIONAL_GUIX_COMMON_FLAGS**_ + + Additional flags to be passed to all `guix` commands. + +* _**ADDITIONAL_GUIX_TIMEMACHINE_FLAGS**_ + + Additional flags to be passed to `guix time-machine`. + +* _**ADDITIONAL_GUIX_ENVIRONMENT_FLAGS**_ + + Additional flags to be passed to the invocation of `guix environment` inside + `guix time-machine`. + +# Choosing your security model + +No matter how you installed Guix, you need to decide on your security model for +building packages with Guix. + +Guix allows us to achieve better binary security by using our CPU time to build +everything from scratch. However, it doesn't sacrifice user choice in pursuit of +this: users can decide whether or not to use **substitutes** (pre-built +packages). + +## Option 1: Building with substitutes + +### Step 1: Authorize the signing keys + +Depending on the installation procedure you followed, you may have already +authorized the Guix build farm key. In particular, the official shell installer +script asks you if you want the key installed, and the debian distribution +package authorized the key during installation. + +You can check the current list of authorized keys at `/etc/guix/acl`. + +At the time of writing, a `/etc/guix/acl` with just the Guix build farm key +authorized looks something like: + +```lisp +(acl + (entry + (public-key + (ecc + (curve Ed25519) + (q #8D156F295D24B0D9A86FA5741A840FF2D24F60F7B6C4134814AD55625971B394#) + ) + ) + (tag + (guix import) + ) + ) + ) +``` + +If you've determined that the official Guix build farm key hasn't been +authorized, and you would like to authorize it, run the following as root: + +``` +guix archive --authorize < /var/guix/profiles/per-user/root/current-guix/share/guix/ci.guix.gnu.org.pub +``` + +If +`/var/guix/profiles/per-user/root/current-guix/share/guix/ci.guix.gnu.org.pub` +doesn't exist, try: + +```sh +guix archive --authorize < /share/guix/ci.guix.gnu.org.pub +``` + +Where `` is likely: +- `/usr` if you installed from a distribution package +- `/usr/local` if you installed Guix from source and didn't supply any + prefix-modifying flags to Guix's `./configure` + +For dongcarl's substitute server at https://guix.carldong.io, run as root: + +```sh +wget -qO- 'https://guix.carldong.io/signing-key.pub' | guix archive --authorize +``` + +#### Removing authorized keys + +To remove previously authorized keys, simply edit `/etc/guix/acl` and remove the +`(entry (public-key ...))` entry. + +### Step 2: Specify the substitute servers + +Once its key is authorized, the official Guix build farm at +https://ci.guix.gnu.org is automatically used unless the `--no-substitutes` flag +is supplied. This default list of substitute servers is overridable both on a +`guix-daemon` level and when you invoke `guix` commands. See examples below for +the various ways of adding dongcarl's substitute server after having [authorized +his signing key](#step-1-authorize-the-signing-keys). + +Change the **default list** of substitute servers by starting `guix-daemon` with +the `--substitute-urls` option (you will likely need to edit your init script): + +```sh +guix-daemon --substitute-urls='https://guix.carldong.io https://ci.guix.gnu.org' +``` + +Override the default list of substitute servers by passing the +`--substitute-urls` option for invocations of `guix` commands: + +```sh +guix --substitute-urls='https://guix.carldong.io https://ci.guix.gnu.org' +``` + +For scripts under `./contrib/guix`, set the `SUBSTITUTE_URLS` environment +variable: + +```sh +export SUBSTITUTE_URLS='https://guix.carldong.io https://ci.guix.gnu.org' +``` + +## Option 2: Disabling substitutes on an ad-hoc basis + +If you prefer not to use any substitutes, make sure to supply `--no-substitutes` +like in the following snippet. The first build will take a while, but the +resulting packages will be cached for future builds. + +For direct invocations of `guix`: +```sh +guix --no-substitutes +``` + +For the scripts under `./contrib/guix/`: +```sh +export ADDITIONAL_GUIX_COMMON_FLAGS='--no-substitutes' +``` + +## Option 3: Disabling substitutes by default + +`guix-daemon` accepts a `--no-substitutes` flag, which will make sure that, +unless otherwise overridden by a command line invocation, no substitutes will be +used. + +If you start `guix-daemon` using an init script, you can edit said script to +supply this flag. + + +# Purging/Uninstalling Guix + +In the extraordinarily rare case where you messed up your Guix installation in +an irreversible way, you may want to completely purge Guix from your system and +start over. + +1. Uninstall Guix itself according to the way you installed it (e.g. `sudo apt + purge guix` for Ubuntu packaging, `sudo make uninstall` for a build from source). +2. Remove all build users and groups + + You may check for relevant users and groups using: + + ``` + getent passwd | grep guix + getent group | grep guix + ``` + + Then, you may remove users and groups using: + + ``` + sudo userdel + sudo groupdel + ``` + +3. Remove all possible Guix-related directories + - `/var/guix/` + - `/var/log/guix/` + - `/gnu/` + - `/etc/guix/` + - `/home/*/.config/guix/` + - `/home/*/.cache/guix/` + - `/home/*/.guix-profile/` + - `/root/.config/guix/` + - `/root/.cache/guix/` + - `/root/.guix-profile/` + +[b17e]: https://bootstrappable.org/ +[r12e/source-date-epoch]: https://reproducible-builds.org/docs/source-date-epoch/ + +[guix/install.sh]: https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh +[guix/bin-install]: https://www.gnu.org/software/guix/manual/en/html_node/Binary-Installation.html +[guix/env-setup]: https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html +[guix/substitutes]: https://www.gnu.org/software/guix/manual/en/html_node/Substitutes.html +[guix/substitute-server-auth]: https://www.gnu.org/software/guix/manual/en/html_node/Substitute-Server-Authorization.html +[guix/time-machine]: https://guix.gnu.org/manual/en/html_node/Invoking-guix-time_002dmachine.html + +[debian/guix-bullseye]: https://packages.debian.org/bullseye/guix +[ubuntu/guix-hirsute]: https://packages.ubuntu.com/hirsute/guix +[fanquake/guix-docker]: https://github.com/fanquake/core-review/tree/master/guix + +[env-vars-list]: #recognized-environment-variables diff --git a/contrib/guix/guix-attest b/contrib/guix/guix-attest new file mode 100755 index 000000000000..b0ef28dc3f92 --- /dev/null +++ b/contrib/guix/guix-attest @@ -0,0 +1,263 @@ +#!/usr/bin/env bash +export LC_ALL=C +set -e -o pipefail + +# Source the common prelude, which: +# 1. Checks if we're at the top directory of the Bitcoin Core repository +# 2. Defines a few common functions and variables +# +# shellcheck source=libexec/prelude.bash +source "$(dirname "${BASH_SOURCE[0]}")/libexec/prelude.bash" + + +################### +## Sanity Checks ## +################### + +################ +# Required non-builtin commands should be invokable +################ + +check_tools cat env basename mkdir diff sort + +if [ -z "$NO_SIGN" ]; then + # make it possible to override the gpg binary + GPG=${GPG:-gpg} + + # $GPG can contain extra arguments passed to the binary + # so let's check only the existence of arg[0] + # shellcheck disable=SC2206 + GPG_ARRAY=($GPG) + check_tools "${GPG_ARRAY[0]}" +fi + +################ +# Required env vars should be non-empty +################ + +cmd_usage() { +cat < \\ + SIGNER=GPG_KEY_NAME[=SIGNER_NAME] \\ + [ NO_SIGN=1 ] + ./contrib/guix/guix-attest + +Example w/o overriding signing name: + + env GUIX_SIGS_REPO=/home/achow101/guix.sigs \\ + SIGNER=achow101 \\ + ./contrib/guix/guix-attest + +Example overriding signing name: + + env GUIX_SIGS_REPO=/home/dongcarl/guix.sigs \\ + SIGNER=0x96AB007F1A7ED999=dongcarl \\ + ./contrib/guix/guix-attest + +Example w/o signing, just creating SHA256SUMS: + + env GUIX_SIGS_REPO=/home/achow101/guix.sigs \\ + SIGNER=achow101 \\ + NO_SIGN=1 \\ + ./contrib/guix/guix-attest + +EOF +} + +if [ -z "$GUIX_SIGS_REPO" ] || [ -z "$SIGNER" ]; then + cmd_usage + exit 1 +fi + +################ +# GUIX_SIGS_REPO should exist as a directory +################ + +if [ ! -d "$GUIX_SIGS_REPO" ]; then +cat << EOF +ERR: The specified GUIX_SIGS_REPO is not an existent directory: + + '$GUIX_SIGS_REPO' + +Hint: Please clone the guix.sigs repository and point to it with the + GUIX_SIGS_REPO environment variable. + +EOF +cmd_usage +exit 1 +fi + +################ +# The key specified in SIGNER should be usable +################ + +IFS='=' read -r gpg_key_name signer_name <<< "$SIGNER" +if [ -z "${signer_name}" ]; then + signer_name="$gpg_key_name" +fi + +if [ -z "$NO_SIGN" ] && ! ${GPG} --dry-run --list-secret-keys "${gpg_key_name}" >/dev/null 2>&1; then + echo "ERR: GPG can't seem to find any key named '${gpg_key_name}'" + exit 1 +fi + +################ +# We should be able to find at least one output +################ + +echo "Looking for build output SHA256SUMS fragments in ${OUTDIR_BASE}" + +shopt -s nullglob +sha256sum_fragments=( "$OUTDIR_BASE"/*/SHA256SUMS.part ) # This expands to an array of directories... +shopt -u nullglob + +noncodesigned_fragments=() +codesigned_fragments=() + +if (( ${#sha256sum_fragments[@]} )); then + echo "Found build output SHA256SUMS fragments:" + for outdir in "${sha256sum_fragments[@]}"; do + echo " '$outdir'" + case "$outdir" in + "$OUTDIR_BASE"/*-codesigned/SHA256SUMS.part) + codesigned_fragments+=("$outdir") + ;; + *) + noncodesigned_fragments+=("$outdir") + ;; + esac + done + echo +else + echo "ERR: Could not find any build output SHA256SUMS fragments in ${OUTDIR_BASE}" + exit 1 +fi + +############## +## Attest ## +############## + +# Usage: out_name $outdir +# +# HOST: The output directory being attested +# +out_name() { + basename "$(dirname "$1")" +} + +shasum_already_exists() { +cat < "$temp_noncodesigned" + if [ -e noncodesigned.SHA256SUMS ]; then + # The SHA256SUMS already exists, make sure it's exactly what we + # expect, error out if not + if diff -u noncodesigned.SHA256SUMS "$temp_noncodesigned"; then + echo "A noncodesigned.SHA256SUMS file already exists for '${VERSION}' and is up-to-date." + else + shasum_already_exists noncodesigned.SHA256SUMS + exit 1 + fi + else + mv "$temp_noncodesigned" noncodesigned.SHA256SUMS + fi + else + echo "ERR: No noncodesigned outputs found for '${VERSION}', exiting..." + exit 1 + fi + + temp_all="$(mktemp)" + trap 'rm -rf -- "$temp_all"' EXIT + + if (( ${#codesigned_fragments[@]} )); then + # Note: all.SHA256SUMS attests to all of $sha256sum_fragments, but is + # not needed if there are no $codesigned_fragments + cat "${sha256sum_fragments[@]}" \ + | sort -u \ + | sort -k2 \ + | basenameify_SHA256SUMS \ + > "$temp_all" + if [ -e all.SHA256SUMS ]; then + # The SHA256SUMS already exists, make sure it's exactly what we + # expect, error out if not + if diff -u all.SHA256SUMS "$temp_all"; then + echo "An all.SHA256SUMS file already exists for '${VERSION}' and is up-to-date." + else + shasum_already_exists all.SHA256SUMS + exit 1 + fi + else + mv "$temp_all" all.SHA256SUMS + fi + else + # It is fine to have the codesigned outputs be missing (perhaps the + # detached codesigs have not been published yet), just print a log + # message instead of erroring out + echo "INFO: No codesigned outputs found for '${VERSION}', skipping..." + fi + + if [ -z "$NO_SIGN" ]; then + echo "Signing SHA256SUMS to produce SHA256SUMS.asc" + for i in *.SHA256SUMS; do + if [ ! -e "$i".asc ]; then + ${GPG} --detach-sign \ + --digest-algo sha256 \ + --local-user "$gpg_key_name" \ + --armor \ + --output "$i".asc "$i" + else + echo "Signature already there" + fi + done + else + echo "Not signing SHA256SUMS as \$NO_SIGN is not empty" + fi + echo "" +) diff --git a/contrib/guix/guix-build b/contrib/guix/guix-build new file mode 100755 index 000000000000..db0e7d563c2a --- /dev/null +++ b/contrib/guix/guix-build @@ -0,0 +1,466 @@ +#!/usr/bin/env bash +export LC_ALL=C +set -e -o pipefail + +# Source the common prelude, which: +# 1. Checks if we're at the top directory of the Bitcoin Core repository +# 2. Defines a few common functions and variables +# +# shellcheck source=libexec/prelude.bash +source "$(dirname "${BASH_SOURCE[0]}")/libexec/prelude.bash" + + +################### +## SANITY CHECKS ## +################### + +################ +# Required non-builtin commands should be invocable +################ + +check_tools cat mkdir make getent curl git guix + +################ +# GUIX_BUILD_OPTIONS should be empty +################ +# +# GUIX_BUILD_OPTIONS is an environment variable recognized by guix commands that +# can perform builds. This seems like what we want instead of +# ADDITIONAL_GUIX_COMMON_FLAGS, but the value of GUIX_BUILD_OPTIONS is actually +# _appended_ to normal command-line options. Meaning that they will take +# precedence over the command-specific ADDITIONAL_GUIX__FLAGS. +# +# This seems like a poor user experience. Thus we check for GUIX_BUILD_OPTIONS's +# existence here and direct users of this script to use our (more flexible) +# custom environment variables. +if [ -n "$GUIX_BUILD_OPTIONS" ]; then +cat << EOF +Error: Environment variable GUIX_BUILD_OPTIONS is not empty: + '$GUIX_BUILD_OPTIONS' + +Unfortunately this script is incompatible with GUIX_BUILD_OPTIONS, please unset +GUIX_BUILD_OPTIONS and use ADDITIONAL_GUIX_COMMON_FLAGS to set build options +across guix commands or ADDITIONAL_GUIX__FLAGS to set build options for a +specific guix command. + +See contrib/guix/README.md for more details. +EOF +exit 1 +fi + +################ +# The git worktree should not be dirty +################ + +if ! git diff-index --quiet HEAD -- && [ -z "$FORCE_DIRTY_WORKTREE" ]; then +cat << EOF +ERR: The current git worktree is dirty, which may lead to broken builds. + + Aborting... + +Hint: To make your git worktree clean, You may want to: + 1. Commit your changes, + 2. Stash your changes, or + 3. Set the 'FORCE_DIRTY_WORKTREE' environment variable if you insist on + using a dirty worktree +EOF +exit 1 +fi + +mkdir -p "$VERSION_BASE" + +################ +# Build directories should not exist +################ + +# Default to building for all supported HOSTs (overridable by environment) +export HOSTS="${HOSTS:-x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu riscv64-linux-gnu powerpc64-linux-gnu powerpc64le-linux-gnu + x86_64-w64-mingw32 + x86_64-apple-darwin arm64-apple-darwin}" + +# Usage: distsrc_for_host HOST +# +# HOST: The current platform triple we're building for +# +distsrc_for_host() { + echo "${DISTSRC_BASE}/distsrc-${VERSION}-${1}" +} + +# Accumulate a list of build directories that already exist... +hosts_distsrc_exists="" +for host in $HOSTS; do + if [ -e "$(distsrc_for_host "$host")" ]; then + hosts_distsrc_exists+=" ${host}" + fi +done + +if [ -n "$hosts_distsrc_exists" ]; then +# ...so that we can print them out nicely in an error message +cat << EOF +ERR: Build directories for this commit already exist for the following platform + triples you're attempting to build, probably because of previous builds. + Please remove, or otherwise deal with them prior to starting another build. + + Aborting... + +Hint: To blow everything away, you may want to use: + + $ ./contrib/guix/guix-clean + +Specifically, this will remove all files without an entry in the index, +excluding the SDK directory, the depends download cache, the depends built +packages cache, the garbage collector roots for Guix environments, and the +output directory. +EOF +for host in $hosts_distsrc_exists; do + echo " ${host} '$(distsrc_for_host "$host")'" +done +exit 1 +else + mkdir -p "$DISTSRC_BASE" +fi + +################ +# When building for darwin, the macOS SDK should exist +################ + +for host in $HOSTS; do + case "$host" in + *darwin*) + OSX_SDK="$(make -C "${PWD}/depends" --no-print-directory HOST="$host" print-OSX_SDK | sed 's@^[^=]\+=@@g')" + ls -l "$OSX_SDK" + ls -l "${PWD}/depends" + ls -l /home/evan/work/unigrid-daemon/depends/SDKs + if [ -e "$OSX_SDK" ]; then + echo "Found macOS SDK at '${OSX_SDK}', using..." + break + else + echo "macOS SDK does not exist at '${OSX_SDK}', please place the extracted, untarred SDK there to perform darwin builds, or define SDK_PATH environment variable. Exiting..." + exit 1 + fi + ;; + esac +done + +################ +# VERSION_BASE should have enough space +################ + +avail_KiB="$(df -Pk "$VERSION_BASE" | sed 1d | tr -s ' ' | cut -d' ' -f4)" +total_required_KiB=0 +for host in $HOSTS; do + case "$host" in + *darwin*) required_KiB=440000 ;; + *mingw*) required_KiB=7600000 ;; + *) required_KiB=6400000 ;; + esac + total_required_KiB=$((total_required_KiB+required_KiB)) +done + +if (( total_required_KiB > avail_KiB )); then + total_required_GiB=$((total_required_KiB / 1048576)) + avail_GiB=$((avail_KiB / 1048576)) + echo "Performing a Bitcoin Core Guix build for the selected HOSTS requires ${total_required_GiB} GiB, however, only ${avail_GiB} GiB is available. Please free up some disk space before performing the build." + exit 1 +fi + +################ +# Check that we can connect to the guix-daemon +################ + +cat << EOF +Checking that we can connect to the guix-daemon... + +Hint: If this hangs, you may want to try turning your guix-daemon off and on + again. + +EOF +if ! guix gc --list-failures > /dev/null; then +cat << EOF + +ERR: Failed to connect to the guix-daemon, please ensure that one is running and + reachable. +EOF +exit 1 +fi + +# Developer note: we could use `guix repl` for this check and run: +# +# (import (guix store)) (close-connection (open-connection)) +# +# However, the internal API is likely to change more than the CLI invocation + +################ +# Services database must have basic entries +################ + +if ! getent services http https ftp > /dev/null 2>&1; then +cat << EOF +ERR: Your system's C library cannot find service database entries for at least + one of the following services: http, https, ftp. + +Hint: Most likely, /etc/services does not exist yet (common for docker images + and minimal distros), or you don't have permissions to access it. + + If /etc/services does not exist yet, you may want to install the + appropriate package for your distro which provides it. + + On Debian/Ubuntu: netbase + On Arch Linux: iana-etc + + For more information, see: getent(1), services(5) + +EOF + +fi + +######### +# SETUP # +######### + +# Determine the maximum number of jobs to run simultaneously (overridable by +# environment) +JOBS="${JOBS:-$(nproc)}" + +# Usage: host_to_commonname HOST +# +# HOST: The current platform triple we're building for +# +host_to_commonname() { + case "$1" in + *darwin*) echo osx ;; + *mingw*) echo win ;; + *linux*) echo linux ;; + *) exit 1 ;; + esac +} + +# Determine the reference time used for determinism (overridable by environment) +SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(git -c log.showSignature=false log --format=%at -1)}" + +# Precious directories are those which should not be cleaned between successive +# guix builds +depends_precious_dir_names='SOURCES_PATH BASE_CACHE SDK_PATH' +precious_dir_names="${depends_precious_dir_names} OUTDIR_BASE PROFILES_BASE" + +# Usage: contains IFS-SEPARATED-LIST ITEM +contains() { + for i in ${1}; do + if [ "$i" = "${2}" ]; then + return 0 # Found! + fi + done + return 1 +} + +# If the user explicitly specified a precious directory, create it so we +# can map it into the container +for precious_dir_name in $precious_dir_names; do + precious_dir_path="${!precious_dir_name}" + if [ -n "$precious_dir_path" ]; then + if [ ! -e "$precious_dir_path" ]; then + mkdir -p "$precious_dir_path" + elif [ -L "$precious_dir_path" ]; then + echo "ERR: ${precious_dir_name} cannot be a symbolic link" + exit 1 + elif [ ! -d "$precious_dir_path" ]; then + echo "ERR: ${precious_dir_name} must be a directory" + exit 1 + fi + fi +done + +mkdir -p "$VAR_BASE" + +# Record the _effective_ values of precious directories such that guix-clean can +# avoid clobbering them if appropriate. +# +# shellcheck disable=SC2046,SC2086 +{ + # Get depends precious dir definitions from depends + make -C "${PWD}/depends" \ + --no-print-directory \ + -- $(printf "print-%s\n" $depends_precious_dir_names) + + # Get remaining precious dir definitions from the environment + for precious_dir_name in $precious_dir_names; do + precious_dir_path="${!precious_dir_name}" + if ! contains "$depends_precious_dir_names" "$precious_dir_name"; then + echo "${precious_dir_name}=${precious_dir_path}" + fi + done +} > "${VAR_BASE}/precious_dirs" + +# Make sure an output directory exists for our builds +OUTDIR_BASE="${OUTDIR_BASE:-${VERSION_BASE}/output}" +mkdir -p "$OUTDIR_BASE" + +# Download the depends sources now as we won't have internet access in the build +# container +for host in $HOSTS; do + make -C "${PWD}/depends" -j"$JOBS" download-"$(host_to_commonname "$host")" ${V:+V=1} ${SOURCES_PATH:+SOURCES_PATH="$SOURCES_PATH"} +done + +# Usage: outdir_for_host HOST SUFFIX +# +# HOST: The current platform triple we're building for +# +outdir_for_host() { + echo "${OUTDIR_BASE}/${1}${2:+-${2}}" +} + +# Usage: profiledir_for_host HOST SUFFIX +# +# HOST: The current platform triple we're building for +# +profiledir_for_host() { + echo "${PROFILES_BASE}/${1}${2:+-${2}}" +} + + +######### +# BUILD # +######### + +# Function to be called when building for host ${1} and the user interrupts the +# build +int_trap() { +cat << EOF +** INT received while building ${1}, you may want to clean up the relevant + work directories (e.g. distsrc-*) before rebuilding + +Hint: To blow everything away, you may want to use: + + $ ./contrib/guix/guix-clean + +Specifically, this will remove all files without an entry in the index, +excluding the SDK directory, the depends download cache, the depends built +packages cache, the garbage collector roots for Guix environments, and the +output directory. +EOF +} + +# Deterministically build Bitcoin Core +# shellcheck disable=SC2153 +for host in $HOSTS; do + + # Display proper warning when the user interrupts the build + trap 'int_trap ${host}' INT + + ( + # Required for 'contrib/guix/manifest.scm' to output the right manifest + # for the particular $HOST we're building for + export HOST="$host" + + # shellcheck disable=SC2030 +cat << EOF +INFO: Building ${VERSION:?not set} for platform triple ${HOST:?not set}: + ...using reference timestamp: ${SOURCE_DATE_EPOCH:?not set} + ...running at most ${JOBS:?not set} jobs + ...from worktree directory: '${PWD}' + ...bind-mounted in container to: '/bitcoin' + ...in build directory: '$(distsrc_for_host "$HOST")' + ...bind-mounted in container to: '$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")' + ...outputting in: '$(outdir_for_host "$HOST")' + ...bind-mounted in container to: '$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST")' +EOF + + # Run the build script 'contrib/guix/libexec/build.sh' in the build + # container specified by 'contrib/guix/manifest.scm'. + # + # Explanation of `guix environment` flags: + # + # --container run command within an isolated container + # + # Running in an isolated container minimizes build-time differences + # between machines and improves reproducibility + # + # --pure unset existing environment variables + # + # Same rationale as --container + # + # --no-cwd do not share current working directory with an + # isolated container + # + # When --container is specified, the default behavior is to share + # the current working directory with the isolated container at the + # same exact path (e.g. mapping '/home/satoshi/bitcoin/' to + # '/home/satoshi/bitcoin/'). This means that the $PWD inside the + # container becomes a source of irreproducibility. --no-cwd disables + # this behaviour. + # + # --share=SPEC for containers, share writable host file system + # according to SPEC + # + # --share="$PWD"=/bitcoin + # + # maps our current working directory to /bitcoin + # inside the isolated container, which we later cd + # into. + # + # While we don't want to map our current working directory to the + # same exact path (as this introduces irreproducibility), we do want + # it to be at a _fixed_ path _somewhere_ inside the isolated + # container so that we have something to build. '/bitcoin' was + # chosen arbitrarily. + # + # ${SOURCES_PATH:+--share="$SOURCES_PATH"} + # + # make the downloaded depends sources path available + # inside the isolated container + # + # The isolated container has no network access as it's in a + # different network namespace from the main machine, so we have to + # make the downloaded depends sources available to it. The sources + # should have been downloaded prior to this invocation. + # + # --keep-failed keep build tree of failed builds + # + # When builds of the Guix environment itself (not Bitcoin Core) + # fail, it is useful for the build tree to be kept for debugging + # purposes. + # + # ${SUBSTITUTE_URLS:+--substitute-urls="$SUBSTITUTE_URLS"} + # + # fetch substitute from SUBSTITUTE_URLS if they are + # authorized + # + # Depending on the user's security model, it may be desirable to use + # substitutes (pre-built packages) from servers that the user trusts. + # Please read the README.md in the same directory as this file for + # more information. + # + # shellcheck disable=SC2086,SC2031 + time-machine environment --manifest="${PWD}/contrib/guix/manifest.scm" \ + --container \ + --pure \ + --no-cwd \ + --share="$PWD"=/bitcoin \ + --share="$DISTSRC_BASE"=/distsrc-base \ + --share="$OUTDIR_BASE"=/outdir-base \ + --expose="$(git rev-parse --git-common-dir)" \ + ${SOURCES_PATH:+--share="$SOURCES_PATH"} \ + ${BASE_CACHE:+--share="$BASE_CACHE"} \ + ${SDK_PATH:+--share="$SDK_PATH"} \ + --cores="$JOBS" \ + --keep-failed \ + --fallback \ + --link-profile \ + --root="$(profiledir_for_host "${HOST}")" \ + ${SUBSTITUTE_URLS:+--substitute-urls="$SUBSTITUTE_URLS"} \ + ${ADDITIONAL_GUIX_COMMON_FLAGS} ${ADDITIONAL_GUIX_ENVIRONMENT_FLAGS} \ + -- env HOST="$host" \ + DISTNAME="$DISTNAME" \ + JOBS="$JOBS" \ + SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:?unable to determine value}" \ + ${V:+V=1} \ + ${SOURCES_PATH:+SOURCES_PATH="$SOURCES_PATH"} \ + ${BASE_CACHE:+BASE_CACHE="$BASE_CACHE"} \ + ${SDK_PATH:+SDK_PATH="$SDK_PATH"} \ + DISTSRC="$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")" \ + OUTDIR="$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST")" \ + DIST_ARCHIVE_BASE=/outdir-base/dist-archive \ + bash -c "cd /bitcoin && bash contrib/guix/libexec/build.sh" + ) + +done diff --git a/contrib/guix/guix-clean b/contrib/guix/guix-clean new file mode 100755 index 000000000000..9af0a793cff7 --- /dev/null +++ b/contrib/guix/guix-clean @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +export LC_ALL=C +set -e -o pipefail + +# Source the common prelude, which: +# 1. Checks if we're at the top directory of the Bitcoin Core repository +# 2. Defines a few common functions and variables +# +# shellcheck source=libexec/prelude.bash +source "$(dirname "${BASH_SOURCE[0]}")/libexec/prelude.bash" + + +################### +## Sanity Checks ## +################### + +################ +# Required non-builtin commands should be invokable +################ + +check_tools cat mkdir make git guix + + +############# +## Clean ## +############# + +# Usage: under_dir MAYBE_PARENT MAYBE_CHILD +# +# If MAYBE_CHILD is a subdirectory of MAYBE_PARENT, print the relative path +# from MAYBE_PARENT to MAYBE_CHILD. Otherwise, return 1 as the error code. +# +# NOTE: This does not perform any symlink-resolving or path canonicalization. +# +under_dir() { + local path_residue + path_residue="${2##"${1}"}" + if [ -z "$path_residue" ] || [ "$path_residue" = "$2" ]; then + return 1 + else + echo "$path_residue" + fi +} + +# Usage: dir_under_git_root MAYBE_CHILD +# +# If MAYBE_CHILD is under the current git repository and exists, print the +# relative path from the git repository's top-level directory to MAYBE_CHILD, +# otherwise, exit with an error code. +# +dir_under_git_root() { + local rv + rv="$(under_dir "$(git_root)" "$1")" + [ -n "$rv" ] && echo "$rv" +} + +shopt -s nullglob +found_precious_dirs_files=( "${version_base_prefix}"*/"${var_base_basename}/precious_dirs" ) # This expands to an array of directories... +shopt -u nullglob + +exclude_flags=() + +for precious_dirs_file in "${found_precious_dirs_files[@]}"; do + # Make sure the precious directories (e.g. SOURCES_PATH, BASE_CACHE, SDK_PATH) + # are excluded from git-clean + echo "Found precious_dirs file: '${precious_dirs_file}'" + + # Exclude the precious_dirs file itself + if dirs_file_exclude_fragment=$(dir_under_git_root "$(dirname "$precious_dirs_file")"); then + exclude_flags+=( --exclude="${dirs_file_exclude_fragment}/precious_dirs" ) + fi + + # Read each 'name=dir' pair from the precious_dirs file + while IFS='=' read -r name dir; do + # Add an exclusion flag if the precious directory is under the git root. + if under=$(dir_under_git_root "$dir"); then + echo "Avoiding ${name}: ${under}" + exclude_flags+=( --exclude="$under" ) + fi + done < "$precious_dirs_file" +done + +git clean -xdff "${exclude_flags[@]}" diff --git a/contrib/guix/guix-codesign b/contrib/guix/guix-codesign new file mode 100755 index 000000000000..3279d431aaf3 --- /dev/null +++ b/contrib/guix/guix-codesign @@ -0,0 +1,378 @@ +#!/usr/bin/env bash +export LC_ALL=C +set -e -o pipefail + +# Source the common prelude, which: +# 1. Checks if we're at the top directory of the Bitcoin Core repository +# 2. Defines a few common functions and variables +# +# shellcheck source=libexec/prelude.bash +source "$(dirname "${BASH_SOURCE[0]}")/libexec/prelude.bash" + + +################### +## SANITY CHECKS ## +################### + +################ +# Required non-builtin commands should be invocable +################ + +check_tools cat mkdir git guix + +################ +# Required env vars should be non-empty +################ + +cmd_usage() { + cat < \\ + ./contrib/guix/guix-codesign + +EOF +} + +if [ -z "$DETACHED_SIGS_REPO" ]; then + cmd_usage + exit 1 +fi + +################ +# GUIX_BUILD_OPTIONS should be empty +################ +# +# GUIX_BUILD_OPTIONS is an environment variable recognized by guix commands that +# can perform builds. This seems like what we want instead of +# ADDITIONAL_GUIX_COMMON_FLAGS, but the value of GUIX_BUILD_OPTIONS is actually +# _appended_ to normal command-line options. Meaning that they will take +# precedence over the command-specific ADDITIONAL_GUIX__FLAGS. +# +# This seems like a poor user experience. Thus we check for GUIX_BUILD_OPTIONS's +# existence here and direct users of this script to use our (more flexible) +# custom environment variables. +if [ -n "$GUIX_BUILD_OPTIONS" ]; then +cat << EOF +Error: Environment variable GUIX_BUILD_OPTIONS is not empty: + '$GUIX_BUILD_OPTIONS' + +Unfortunately this script is incompatible with GUIX_BUILD_OPTIONS, please unset +GUIX_BUILD_OPTIONS and use ADDITIONAL_GUIX_COMMON_FLAGS to set build options +across guix commands or ADDITIONAL_GUIX__FLAGS to set build options for a +specific guix command. + +See contrib/guix/README.md for more details. +EOF +exit 1 +fi + +################ +# The codesignature git worktree should not be dirty +################ + +if ! git -C "$DETACHED_SIGS_REPO" diff-index --quiet HEAD -- && [ -z "$FORCE_DIRTY_WORKTREE" ]; then + cat << EOF +ERR: The DETACHED CODESIGNATURE git worktree is dirty, which may lead to broken builds. + + Aborting... + +Hint: To make your git worktree clean, You may want to: + 1. Commit your changes, + 2. Stash your changes, or + 3. Set the 'FORCE_DIRTY_WORKTREE' environment variable if you insist on + using a dirty worktree +EOF + exit 1 +fi + +################ +# Build directories should not exist +################ + +# Default to building for all supported HOSTs (overridable by environment) +export HOSTS="${HOSTS:-x86_64-w64-mingw32 x86_64-apple-darwin arm64-apple-darwin}" + +# Usage: distsrc_for_host HOST +# +# HOST: The current platform triple we're building for +# +distsrc_for_host() { + echo "${DISTSRC_BASE}/distsrc-${VERSION}-${1}-codesigned" +} + +# Accumulate a list of build directories that already exist... +hosts_distsrc_exists="" +for host in $HOSTS; do + if [ -e "$(distsrc_for_host "$host")" ]; then + hosts_distsrc_exists+=" ${host}" + fi +done + +if [ -n "$hosts_distsrc_exists" ]; then +# ...so that we can print them out nicely in an error message +cat << EOF +ERR: Build directories for this commit already exist for the following platform + triples you're attempting to build, probably because of previous builds. + Please remove, or otherwise deal with them prior to starting another build. + + Aborting... + +Hint: To blow everything away, you may want to use: + + $ ./contrib/guix/guix-clean + +Specifically, this will remove all files without an entry in the index, +excluding the SDK directory, the depends download cache, the depends built +packages cache, the garbage collector roots for Guix environments, and the +output directory. +EOF +for host in $hosts_distsrc_exists; do + echo " ${host} '$(distsrc_for_host "$host")'" +done +exit 1 +else + mkdir -p "$DISTSRC_BASE" +fi + + +################ +# Unsigned tarballs SHOULD exist +################ + +# Usage: outdir_for_host HOST SUFFIX +# +# HOST: The current platform triple we're building for +# +outdir_for_host() { + echo "${OUTDIR_BASE}/${1}${2:+-${2}}" +} + + +unsigned_tarball_for_host() { + case "$1" in + *mingw*) + echo "$(outdir_for_host "$1")/${DISTNAME}-win64-unsigned.tar.gz" + ;; + *darwin*) + echo "$(outdir_for_host "$1")/${DISTNAME}-${1}-unsigned.tar.gz" + ;; + *) + exit 1 + ;; + esac +} + +# Accumulate a list of build directories that already exist... +hosts_unsigned_tarball_missing="" +for host in $HOSTS; do + if [ ! -e "$(unsigned_tarball_for_host "$host")" ]; then + hosts_unsigned_tarball_missing+=" ${host}" + fi +done + +if [ -n "$hosts_unsigned_tarball_missing" ]; then + # ...so that we can print them out nicely in an error message + cat << EOF +ERR: Unsigned tarballs do not exist +... + +EOF +for host in $hosts_unsigned_tarball_missing; do + echo " ${host} '$(unsigned_tarball_for_host "$host")'" +done +exit 1 +fi + +################ +# Check that we can connect to the guix-daemon +################ + +cat << EOF +Checking that we can connect to the guix-daemon... + +Hint: If this hangs, you may want to try turning your guix-daemon off and on + again. + +EOF +if ! guix gc --list-failures > /dev/null; then + cat << EOF + +ERR: Failed to connect to the guix-daemon, please ensure that one is running and + reachable. +EOF + exit 1 +fi + +# Developer note: we could use `guix repl` for this check and run: +# +# (import (guix store)) (close-connection (open-connection)) +# +# However, the internal API is likely to change more than the CLI invocation + + +######### +# SETUP # +######### + +# Determine the maximum number of jobs to run simultaneously (overridable by +# environment) +JOBS="${JOBS:-$(nproc)}" + +# Determine the reference time used for determinism (overridable by environment) +SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(git -c log.showSignature=false log --format=%at -1)}" + +# Make sure an output directory exists for our builds +OUTDIR_BASE="${OUTDIR_BASE:-${VERSION_BASE}/output}" +mkdir -p "$OUTDIR_BASE" + +# Usage: profiledir_for_host HOST SUFFIX +# +# HOST: The current platform triple we're building for +# +profiledir_for_host() { + echo "${PROFILES_BASE}/${1}${2:+-${2}}" +} + +######### +# BUILD # +######### + +# Function to be called when codesigning for host ${1} and the user interrupts +# the codesign +int_trap() { +cat << EOF +** INT received while codesigning ${1}, you may want to clean up the relevant + work directories (e.g. distsrc-*) before recodesigning + +Hint: To blow everything away, you may want to use: + + $ ./contrib/guix/guix-clean + +Specifically, this will remove all files without an entry in the index, +excluding the SDK directory, the depends download cache, the depends built +packages cache, the garbage collector roots for Guix environments, and the +output directory. +EOF +} + +# Deterministically build Bitcoin Core +# shellcheck disable=SC2153 +for host in $HOSTS; do + + # Display proper warning when the user interrupts the build + trap 'int_trap ${host}' INT + + ( + # Required for 'contrib/guix/manifest.scm' to output the right manifest + # for the particular $HOST we're building for + export HOST="$host" + + # shellcheck disable=SC2030 +cat << EOF +INFO: Codesigning ${VERSION:?not set} for platform triple ${HOST:?not set}: + ...using reference timestamp: ${SOURCE_DATE_EPOCH:?not set} + ...from worktree directory: '${PWD}' + ...bind-mounted in container to: '/bitcoin' + ...in build directory: '$(distsrc_for_host "$HOST")' + ...bind-mounted in container to: '$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")' + ...outputting in: '$(outdir_for_host "$HOST" codesigned)' + ...bind-mounted in container to: '$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST" codesigned)' + ...using detached signatures in: '${DETACHED_SIGS_REPO:?not set}' + ...bind-mounted in container to: '/detached-sigs' +EOF + + + # Run the build script 'contrib/guix/libexec/build.sh' in the build + # container specified by 'contrib/guix/manifest.scm'. + # + # Explanation of `guix environment` flags: + # + # --container run command within an isolated container + # + # Running in an isolated container minimizes build-time differences + # between machines and improves reproducibility + # + # --pure unset existing environment variables + # + # Same rationale as --container + # + # --no-cwd do not share current working directory with an + # isolated container + # + # When --container is specified, the default behavior is to share + # the current working directory with the isolated container at the + # same exact path (e.g. mapping '/home/satoshi/bitcoin/' to + # '/home/satoshi/bitcoin/'). This means that the $PWD inside the + # container becomes a source of irreproducibility. --no-cwd disables + # this behaviour. + # + # --share=SPEC for containers, share writable host file system + # according to SPEC + # + # --share="$PWD"=/bitcoin + # + # maps our current working directory to /bitcoin + # inside the isolated container, which we later cd + # into. + # + # While we don't want to map our current working directory to the + # same exact path (as this introduces irreproducibility), we do want + # it to be at a _fixed_ path _somewhere_ inside the isolated + # container so that we have something to build. '/bitcoin' was + # chosen arbitrarily. + # + # ${SOURCES_PATH:+--share="$SOURCES_PATH"} + # + # make the downloaded depends sources path available + # inside the isolated container + # + # The isolated container has no network access as it's in a + # different network namespace from the main machine, so we have to + # make the downloaded depends sources available to it. The sources + # should have been downloaded prior to this invocation. + # + # ${SUBSTITUTE_URLS:+--substitute-urls="$SUBSTITUTE_URLS"} + # + # fetch substitute from SUBSTITUTE_URLS if they are + # authorized + # + # Depending on the user's security model, it may be desirable to use + # substitutes (pre-built packages) from servers that the user trusts. + # Please read the README.md in the same directory as this file for + # more information. + # + # shellcheck disable=SC2086,SC2031 + time-machine environment --manifest="${PWD}/contrib/guix/manifest.scm" \ + --container \ + --pure \ + --no-cwd \ + --share="$PWD"=/bitcoin \ + --share="$DISTSRC_BASE"=/distsrc-base \ + --share="$OUTDIR_BASE"=/outdir-base \ + --share="$DETACHED_SIGS_REPO"=/detached-sigs \ + --expose="$(git rev-parse --git-common-dir)" \ + --expose="$(git -C "$DETACHED_SIGS_REPO" rev-parse --git-common-dir)" \ + ${SOURCES_PATH:+--share="$SOURCES_PATH"} \ + --cores="$JOBS" \ + --keep-failed \ + --fallback \ + --link-profile \ + --root="$(profiledir_for_host "${HOST}" codesigned)" \ + ${SUBSTITUTE_URLS:+--substitute-urls="$SUBSTITUTE_URLS"} \ + ${ADDITIONAL_GUIX_COMMON_FLAGS} ${ADDITIONAL_GUIX_ENVIRONMENT_FLAGS} \ + -- env HOST="$host" \ + DISTNAME="$DISTNAME" \ + JOBS="$JOBS" \ + SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:?unable to determine value}" \ + ${V:+V=1} \ + ${SOURCES_PATH:+SOURCES_PATH="$SOURCES_PATH"} \ + DISTSRC="$(DISTSRC_BASE=/distsrc-base && distsrc_for_host "$HOST")" \ + OUTDIR="$(OUTDIR_BASE=/outdir-base && outdir_for_host "$HOST" codesigned)" \ + DIST_ARCHIVE_BASE=/outdir-base/dist-archive \ + DETACHED_SIGS_REPO=/detached-sigs \ + UNSIGNED_TARBALL="$(OUTDIR_BASE=/outdir-base && unsigned_tarball_for_host "$HOST")" \ + bash -c "cd /bitcoin && bash contrib/guix/libexec/codesign.sh" + ) + +done diff --git a/contrib/guix/guix-verify b/contrib/guix/guix-verify new file mode 100755 index 000000000000..02ae022741ba --- /dev/null +++ b/contrib/guix/guix-verify @@ -0,0 +1,174 @@ +#!/usr/bin/env bash +export LC_ALL=C +set -e -o pipefail + +# Source the common prelude, which: +# 1. Checks if we're at the top directory of the Bitcoin Core repository +# 2. Defines a few common functions and variables +# +# shellcheck source=libexec/prelude.bash +source "$(dirname "${BASH_SOURCE[0]}")/libexec/prelude.bash" + + +################### +## Sanity Checks ## +################### + +################ +# Required non-builtin commands should be invokable +################ + +check_tools cat diff gpg + +################ +# Required env vars should be non-empty +################ + +cmd_usage() { +cat < [ SIGNER= ] ./contrib/guix/guix-verify + +Example overriding signer's manifest to use as base + + env GUIX_SIGS_REPO=/home/dongcarl/guix.sigs SIGNER=achow101 ./contrib/guix/guix-verify + +EOF +} + +if [ -z "$GUIX_SIGS_REPO" ]; then + cmd_usage + exit 1 +fi + +################ +# GUIX_SIGS_REPO should exist as a directory +################ + +if [ ! -d "$GUIX_SIGS_REPO" ]; then +cat << EOF +ERR: The specified GUIX_SIGS_REPO is not an existent directory: + + '$GUIX_SIGS_REPO' + +Hint: Please clone the guix.sigs repository and point to it with the + GUIX_SIGS_REPO environment variable. + +EOF +cmd_usage +exit 1 +fi + +############## +## Verify ## +############## + +OUTSIGDIR_BASE="${GUIX_SIGS_REPO}/${VERSION}" +echo "Looking for signature directories in '${OUTSIGDIR_BASE}'" +echo "" + +# Usage: verify compare_manifest current_manifest +verify() { + local compare_manifest="$1" + local current_manifest="$2" + if ! gpg --quiet --batch --verify "$current_manifest".asc "$current_manifest" 1>&2; then + echo "ERR: Failed to verify GPG signature in '${current_manifest}'" + echo "" + echo "Hint: Either the signature is invalid or the public key is missing" + echo "" + failure=1 + elif ! diff --report-identical "$compare_manifest" "$current_manifest" 1>&2; then + echo "ERR: The SHA256SUMS attestation in these two directories differ:" + echo " '${compare_manifest}'" + echo " '${current_manifest}'" + echo "" + failure=1 + else + echo "Verified: '${current_manifest}'" + echo "" + fi +} + +shopt -s nullglob +all_noncodesigned=( "$OUTSIGDIR_BASE"/*/noncodesigned.SHA256SUMS ) +shopt -u nullglob + +echo "--------------------" +echo "" +if (( ${#all_noncodesigned[@]} )); then + compare_noncodesigned="${all_noncodesigned[0]}" + if [[ -n "$SIGNER" ]]; then + signer_noncodesigned="$OUTSIGDIR_BASE/$SIGNER/noncodesigned.SHA256SUMS" + if [[ -f "$signer_noncodesigned" ]]; then + echo "Using $SIGNER's manifest as the base to compare against" + compare_noncodesigned="$signer_noncodesigned" + else + echo "Unable to find $SIGNER's manifest, using the first one found" + fi + else + echo "No SIGNER provided, using the first manifest found" + fi + + for current_manifest in "${all_noncodesigned[@]}"; do + verify "$compare_noncodesigned" "$current_manifest" + done + + echo "DONE: Checking output signatures for noncodesigned.SHA256SUMS" + echo "" +else + echo "WARN: No signature directories with noncodesigned.SHA256SUMS found" + echo "" +fi + +shopt -s nullglob +all_all=( "$OUTSIGDIR_BASE"/*/all.SHA256SUMS ) +shopt -u nullglob + +echo "--------------------" +echo "" +if (( ${#all_all[@]} )); then + compare_all="${all_all[0]}" + if [[ -n "$SIGNER" ]]; then + signer_all="$OUTSIGDIR_BASE/$SIGNER/all.SHA256SUMS" + if [[ -f "$signer_all" ]]; then + echo "Using $SIGNER's manifest as the base to compare against" + compare_all="$signer_all" + else + echo "Unable to find $SIGNER's manifest, using the first one found" + fi + else + echo "No SIGNER provided, using the first manifest found" + fi + + for current_manifest in "${all_all[@]}"; do + verify "$compare_all" "$current_manifest" + done + + # Sanity check: there should be no entries that exist in + # noncodesigned.SHA256SUMS that doesn't exist in all.SHA256SUMS + if [[ "$(comm -23 <(sort "$compare_noncodesigned") <(sort "$compare_all") | wc -c)" -ne 0 ]]; then + echo "ERR: There are unique lines in noncodesigned.SHA256SUMS which" + echo " do not exist in all.SHA256SUMS, something went very wrong." + exit 1 + fi + + echo "DONE: Checking output signatures for all.SHA256SUMS" + echo "" +else + echo "WARN: No signature directories with all.SHA256SUMS found" + echo "" +fi + +echo "====================" +echo "" +if (( ${#all_noncodesigned[@]} + ${#all_all[@]} == 0 )); then + echo "ERR: Unable to perform any verifications as no signature directories" + echo " were found" + echo "" + exit 1 +fi + +if [ -n "$failure" ]; then + exit 1 +fi diff --git a/contrib/guix/libexec/build.sh b/contrib/guix/libexec/build.sh new file mode 100755 index 000000000000..f39f83d443be --- /dev/null +++ b/contrib/guix/libexec/build.sh @@ -0,0 +1,442 @@ +#!/usr/bin/env bash +# Copyright (c) 2019-2021 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +export LC_ALL=C +set -e -o pipefail +export TZ=UTC + +# Although Guix _does_ set umask when building its own packages (in our case, +# this is all packages in manifest.scm), it does not set it for `guix +# environment`. It does make sense for at least `guix environment --container` +# to set umask, so if that change gets merged upstream and we bump the +# time-machine to a commit which includes the aforementioned change, we can +# remove this line. +# +# This line should be placed before any commands which creates files. +umask 0022 + +if [ -n "$V" ]; then + # Print both unexpanded (-v) and expanded (-x) forms of commands as they are + # read from this file. + set -vx + # Set VERBOSE for CMake-based builds + export VERBOSE="$V" +fi + +# Check that required environment variables are set +cat << EOF +Required environment variables as seen inside the container: + DIST_ARCHIVE_BASE: ${DIST_ARCHIVE_BASE:?not set} + DISTNAME: ${DISTNAME:?not set} + HOST: ${HOST:?not set} + SOURCE_DATE_EPOCH: ${SOURCE_DATE_EPOCH:?not set} + JOBS: ${JOBS:?not set} + DISTSRC: ${DISTSRC:?not set} + OUTDIR: ${OUTDIR:?not set} +EOF + +ACTUAL_OUTDIR="${OUTDIR}" +OUTDIR="${DISTSRC}/output" + +##################### +# Environment Setup # +##################### + +# The depends folder also serves as a base-prefix for depends packages for +# $HOSTs after successfully building. +BASEPREFIX="${PWD}/depends" + +# Given a package name and an output name, return the path of that output in our +# current guix environment +store_path() { + grep --extended-regexp "/[^-]{32}-${1}-[^-]+${2:+-${2}}" "${GUIX_ENVIRONMENT}/manifest" \ + | head --lines=1 \ + | sed --expression='s|^[[:space:]]*"||' \ + --expression='s|"[[:space:]]*$||' +} + + +# Set environment variables to point the NATIVE toolchain to the right +# includes/libs +NATIVE_GCC="$(store_path gcc-toolchain)" +NATIVE_GCC_STATIC="$(store_path gcc-toolchain static)" + +unset LIBRARY_PATH +unset CPATH +unset C_INCLUDE_PATH +unset CPLUS_INCLUDE_PATH +unset OBJC_INCLUDE_PATH +unset OBJCPLUS_INCLUDE_PATH + +export LIBRARY_PATH="${NATIVE_GCC}/lib:${NATIVE_GCC}/lib64:${NATIVE_GCC_STATIC}/lib:${NATIVE_GCC_STATIC}/lib64" +export C_INCLUDE_PATH="${NATIVE_GCC}/include" +export CPLUS_INCLUDE_PATH="${NATIVE_GCC}/include/c++:${NATIVE_GCC}/include" +export OBJC_INCLUDE_PATH="${NATIVE_GCC}/include" +export OBJCPLUS_INCLUDE_PATH="${NATIVE_GCC}/include/c++:${NATIVE_GCC}/include" + +prepend_to_search_env_var() { + export "${1}=${2}${!1:+:}${!1}" +} + +# Set environment variables to point the CROSS toolchain to the right +# includes/libs for $HOST +case "$HOST" in + *mingw*) + # Determine output paths to use in CROSS_* environment variables + CROSS_GLIBC="$(store_path "mingw-w64-x86_64-winpthreads")" + CROSS_GCC="$(store_path "gcc-cross-${HOST}")" + CROSS_GCC_LIB_STORE="$(store_path "gcc-cross-${HOST}" lib)" + CROSS_GCC_LIBS=( "${CROSS_GCC_LIB_STORE}/lib/gcc/${HOST}"/* ) # This expands to an array of directories... + CROSS_GCC_LIB="${CROSS_GCC_LIBS[0]}" # ...we just want the first one (there should only be one) + + # The search path ordering is generally: + # 1. gcc-related search paths + # 2. libc-related search paths + # 2. kernel-header-related search paths (not applicable to mingw-w64 hosts) + export CROSS_C_INCLUDE_PATH="${CROSS_GCC_LIB}/include:${CROSS_GCC_LIB}/include-fixed:${CROSS_GLIBC}/include" + export CROSS_CPLUS_INCLUDE_PATH="${CROSS_GCC}/include/c++:${CROSS_GCC}/include/c++/${HOST}:${CROSS_GCC}/include/c++/backward:${CROSS_C_INCLUDE_PATH}" + export CROSS_LIBRARY_PATH="${CROSS_GCC_LIB_STORE}/lib:${CROSS_GCC_LIB}:${CROSS_GLIBC}/lib" + ;; + *darwin*) + # The CROSS toolchain for darwin uses the SDK and ignores environment variables. + # See depends/hosts/darwin.mk for more details. + ;; + *linux*) + CROSS_GLIBC="$(store_path "glibc-cross-${HOST}")" + CROSS_GLIBC_STATIC="$(store_path "glibc-cross-${HOST}" static)" + CROSS_KERNEL="$(store_path "linux-libre-headers-cross-${HOST}")" + CROSS_GCC="$(store_path "gcc-cross-${HOST}")" + CROSS_GCC_LIB_STORE="$(store_path "gcc-cross-${HOST}" lib)" + CROSS_GCC_LIBS=( "${CROSS_GCC_LIB_STORE}/lib/gcc/${HOST}"/* ) # This expands to an array of directories... + CROSS_GCC_LIB="${CROSS_GCC_LIBS[0]}" # ...we just want the first one (there should only be one) + + export CROSS_C_INCLUDE_PATH="${CROSS_GCC_LIB}/include:${CROSS_GCC_LIB}/include-fixed:${CROSS_GLIBC}/include:${CROSS_KERNEL}/include" + export CROSS_CPLUS_INCLUDE_PATH="${CROSS_GCC}/include/c++:${CROSS_GCC}/include/c++/${HOST}:${CROSS_GCC}/include/c++/backward:${CROSS_C_INCLUDE_PATH}" + export CROSS_LIBRARY_PATH="${CROSS_GCC_LIB_STORE}/lib:${CROSS_GCC_LIB}:${CROSS_GLIBC}/lib:${CROSS_GLIBC_STATIC}/lib" + ;; + *) + exit 1 ;; +esac + +# Sanity check CROSS_*_PATH directories +IFS=':' read -ra PATHS <<< "${CROSS_C_INCLUDE_PATH}:${CROSS_CPLUS_INCLUDE_PATH}:${CROSS_LIBRARY_PATH}" +for p in "${PATHS[@]}"; do + if [ -n "$p" ] && [ ! -d "$p" ]; then + echo "'$p' doesn't exist or isn't a directory... Aborting..." + exit 1 + fi +done + +# Disable Guix ld auto-rpath behavior +case "$HOST" in + *darwin*) + # The auto-rpath behavior is necessary for darwin builds as some native + # tools built by depends refer to and depend on Guix-built native + # libraries + # + # After the native packages in depends are built, the ld wrapper should + # no longer affect our build, as clang would instead reach for + # x86_64-apple-darwin-ld from cctools + ;; + *) export GUIX_LD_WRAPPER_DISABLE_RPATH=yes ;; +esac + +# Make /usr/bin if it doesn't exist +[ -e /usr/bin ] || mkdir -p /usr/bin + +# Symlink file and env to a conventional path +[ -e /usr/bin/file ] || ln -s --no-dereference "$(command -v file)" /usr/bin/file +[ -e /usr/bin/env ] || ln -s --no-dereference "$(command -v env)" /usr/bin/env + +# Determine the correct value for -Wl,--dynamic-linker for the current $HOST +case "$HOST" in + *linux*) + glibc_dynamic_linker=$( + case "$HOST" in + x86_64-linux-gnu) echo /lib64/ld-linux-x86-64.so.2 ;; + arm-linux-gnueabihf) echo /lib/ld-linux-armhf.so.3 ;; + aarch64-linux-gnu) echo /lib/ld-linux-aarch64.so.1 ;; + riscv64-linux-gnu) echo /lib/ld-linux-riscv64-lp64d.so.1 ;; + powerpc64-linux-gnu) echo /lib64/ld64.so.1;; + powerpc64le-linux-gnu) echo /lib64/ld64.so.2;; + *) exit 1 ;; + esac + ) + ;; +esac + +# Environment variables for determinism +export TAR_OPTIONS="--owner=0 --group=0 --numeric-owner --mtime='@${SOURCE_DATE_EPOCH}' --sort=name" +export TZ="UTC" +case "$HOST" in + *darwin*) + # cctools AR, unlike GNU binutils AR, does not have a deterministic mode + # or a configure flag to enable determinism by default, it only + # understands if this env-var is set or not. See: + # + # https://github.com/tpoechtrager/cctools-port/blob/55562e4073dea0fbfd0b20e0bf69ffe6390c7f97/cctools/ar/archive.c#L334 + export ZERO_AR_DATE=yes + ;; +esac + +#################### +# Depends Building # +#################### + +# Build the depends tree, overriding variables that assume multilib gcc +make -C depends --jobs="$JOBS" HOST="$HOST" \ + ${V:+V=1} \ + ${SOURCES_PATH+SOURCES_PATH="$SOURCES_PATH"} \ + ${BASE_CACHE+BASE_CACHE="$BASE_CACHE"} \ + ${SDK_PATH+SDK_PATH="$SDK_PATH"} \ + x86_64_linux_CC=x86_64-linux-gnu-gcc \ + x86_64_linux_CXX=x86_64-linux-gnu-g++ \ + x86_64_linux_AR=x86_64-linux-gnu-ar \ + x86_64_linux_RANLIB=x86_64-linux-gnu-ranlib \ + x86_64_linux_NM=x86_64-linux-gnu-nm \ + x86_64_linux_STRIP=x86_64-linux-gnu-strip \ + FORCE_USE_SYSTEM_CLANG=1 + + +########################### +# Source Tarball Building # +########################### + +GIT_ARCHIVE="${DIST_ARCHIVE_BASE}/${DISTNAME}.tar.gz" + +# Create the source tarball if not already there +if [ ! -e "$GIT_ARCHIVE" ]; then + mkdir -p "$(dirname "$GIT_ARCHIVE")" + git archive --prefix="${DISTNAME}/" --output="$GIT_ARCHIVE" HEAD +fi + +mkdir -p "$OUTDIR" + +########################### +# Binary Tarball Building # +########################### + +# CONFIGFLAGS +CONFIGFLAGS="--enable-reduce-exports --disable-bench --disable-gui-tests --disable-fuzz-binary" + +# CFLAGS +HOST_CFLAGS="-O2 -g" +HOST_CFLAGS+=$(find /gnu/store -maxdepth 1 -mindepth 1 -type d -exec echo -n " -ffile-prefix-map={}=/usr" \;) +case "$HOST" in + *linux*) HOST_CFLAGS+=" -ffile-prefix-map=${PWD}=." ;; + *mingw*) HOST_CFLAGS+=" -fno-ident" ;; + *darwin*) unset HOST_CFLAGS ;; +esac + +# CXXFLAGS +HOST_CXXFLAGS="$HOST_CFLAGS" + +case "$HOST" in + arm-linux-gnueabihf) HOST_CXXFLAGS="${HOST_CXXFLAGS} -Wno-psabi" ;; +esac + +# LDFLAGS +case "$HOST" in + *linux*) HOST_LDFLAGS="-Wl,--as-needed -Wl,--dynamic-linker=$glibc_dynamic_linker -static-libstdc++ -Wl,-O2" ;; + *mingw*) HOST_LDFLAGS="-Wl,--no-insert-timestamp" ;; +esac + +# Using --no-tls-get-addr-optimize retains compatibility with glibc 2.18, by +# avoiding a PowerPC64 optimisation available in glibc 2.22 and later. +# https://sourceware.org/binutils/docs-2.35/ld/PowerPC64-ELF64.html +case "$HOST" in + *powerpc64*) HOST_LDFLAGS="${HOST_LDFLAGS} -Wl,--no-tls-get-addr-optimize" ;; +esac + +# Make $HOST-specific native binaries from depends available in $PATH +export PATH="${BASEPREFIX}/${HOST}/native/bin:${PATH}" +mkdir -p "$DISTSRC" +( + cd "$DISTSRC" + + # Extract the source tarball + tar --strip-components=1 -xf "${GIT_ARCHIVE}" + + ./autogen.sh + + # Configure this DISTSRC for $HOST + # shellcheck disable=SC2086 + env CONFIG_SITE="${BASEPREFIX}/${HOST}/share/config.site" \ + ./configure --prefix=/ \ + --disable-ccache \ + --disable-maintainer-mode \ + --disable-dependency-tracking \ + ${CONFIGFLAGS} \ + ${HOST_CFLAGS:+CFLAGS="${HOST_CFLAGS}"} \ + ${HOST_CXXFLAGS:+CXXFLAGS="${HOST_CXXFLAGS}"} \ + ${HOST_LDFLAGS:+LDFLAGS="${HOST_LDFLAGS}"} + + sed -i.old 's/-lstdc++ //g' config.status libtool + + # Build Bitcoin Core + make --jobs="$JOBS" ${V:+V=1} + + # Check that symbol/security checks tools are sane. + make test-security-check ${V:+V=1} + # Perform basic security checks on a series of executables. + make -C src --jobs=1 check-security ${V:+V=1} + # Check that executables only contain allowed version symbols. + make -C src --jobs=1 check-symbols ${V:+V=1} + + mkdir -p "$OUTDIR" + + # Make the os-specific installers + case "$HOST" in + *mingw*) + make deploy ${V:+V=1} BITCOIN_WIN_INSTALLER="${OUTDIR}/${DISTNAME}-win64-setup-unsigned.exe" + ;; + esac + + # Setup the directory where our Bitcoin Core build for HOST will be + # installed. This directory will also later serve as the input for our + # binary tarballs. + INSTALLPATH="${PWD}/installed/${DISTNAME}" + mkdir -p "${INSTALLPATH}" + # Install built Bitcoin Core to $INSTALLPATH + case "$HOST" in + *darwin*) + make install-strip DESTDIR="${INSTALLPATH}" ${V:+V=1} + ;; + *) + make install DESTDIR="${INSTALLPATH}" ${V:+V=1} + ;; + esac + + case "$HOST" in + *darwin*) + make osx_volname ${V:+V=1} + make deploydir ${V:+V=1} + mkdir -p "unsigned-app-${HOST}" + cp --target-directory="unsigned-app-${HOST}" \ + osx_volname \ + contrib/macdeploy/detached-sig-create.sh + mv --target-directory="unsigned-app-${HOST}" dist + ( + cd "unsigned-app-${HOST}" + find . -print0 \ + | sort --zero-terminated \ + | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \ + | gzip -9n > "${OUTDIR}/${DISTNAME}-${HOST}-unsigned.tar.gz" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST}-unsigned.tar.gz" && exit 1 ) + ) + make deploy ${V:+V=1} OSX_DMG="${OUTDIR}/${DISTNAME}-${HOST}-unsigned.dmg" + ;; + esac + ( + cd installed + + case "$HOST" in + *mingw*) + mv --target-directory="$DISTNAME"/lib/ "$DISTNAME"/bin/*.dll + ;; + esac + + # Prune libtool and object archives + find . -name "lib*.la" -delete + find . -name "lib*.a" -delete + + # Prune pkg-config files + rm -rf "${DISTNAME}/lib/pkgconfig" + + case "$HOST" in + *darwin*) ;; + *) + # Split binaries and libraries from their debug symbols + { + find "${DISTNAME}/bin" -type f -executable -print0 + find "${DISTNAME}/lib" -type f -print0 + } | xargs -0 -P"$JOBS" -I{} "${DISTSRC}/contrib/devtools/split-debug.sh" {} {} {}.dbg + ;; + esac + + case "$HOST" in + *mingw*) + cp "${DISTSRC}/doc/README_windows.txt" "${DISTNAME}/readme.txt" + ;; + *linux*) + cp "${DISTSRC}/README.md" "${DISTNAME}/" + ;; + esac + + # copy over the example bitcoin.conf file. if contrib/devtools/gen-bitcoin-conf.sh + # has not been run before buildling, this file will be a stub + cp "${DISTSRC}/share/examples/bitcoin.conf" "${DISTNAME}/" + + cp -r "${DISTSRC}/share/rpcauth" "${DISTNAME}/share/" + + # Finally, deterministically produce {non-,}debug binary tarballs ready + # for release + case "$HOST" in + *mingw*) + find "${DISTNAME}" -not -name "*.dbg" -print0 \ + | xargs -0r touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" + find "${DISTNAME}" -not -name "*.dbg" \ + | sort \ + | zip -X@ "${OUTDIR}/${DISTNAME}-${HOST//x86_64-w64-mingw32/win64}.zip" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST//x86_64-w64-mingw32/win64}.zip" && exit 1 ) + find "${DISTNAME}" -name "*.dbg" -print0 \ + | xargs -0r touch --no-dereference --date="@${SOURCE_DATE_EPOCH}" + find "${DISTNAME}" -name "*.dbg" \ + | sort \ + | zip -X@ "${OUTDIR}/${DISTNAME}-${HOST//x86_64-w64-mingw32/win64}-debug.zip" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST//x86_64-w64-mingw32/win64}-debug.zip" && exit 1 ) + ;; + *linux*) + find "${DISTNAME}" -not -name "*.dbg" -print0 \ + | sort --zero-terminated \ + | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \ + | gzip -9n > "${OUTDIR}/${DISTNAME}-${HOST}.tar.gz" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST}.tar.gz" && exit 1 ) + find "${DISTNAME}" -name "*.dbg" -print0 \ + | sort --zero-terminated \ + | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \ + | gzip -9n > "${OUTDIR}/${DISTNAME}-${HOST}-debug.tar.gz" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST}-debug.tar.gz" && exit 1 ) + ;; + *darwin*) + find "${DISTNAME}" -print0 \ + | sort --zero-terminated \ + | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \ + | gzip -9n > "${OUTDIR}/${DISTNAME}-${HOST}.tar.gz" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-${HOST}.tar.gz" && exit 1 ) + ;; + esac + ) # $DISTSRC/installed + + case "$HOST" in + *mingw*) + cp -rf --target-directory=. contrib/windeploy + ( + cd ./windeploy + mkdir -p unsigned + cp --target-directory=unsigned/ "${OUTDIR}/${DISTNAME}-win64-setup-unsigned.exe" + find . -print0 \ + | sort --zero-terminated \ + | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \ + | gzip -9n > "${OUTDIR}/${DISTNAME}-win64-unsigned.tar.gz" \ + || ( rm -f "${OUTDIR}/${DISTNAME}-win64-unsigned.tar.gz" && exit 1 ) + ) + ;; + esac +) # $DISTSRC + +rm -rf "$ACTUAL_OUTDIR" +mv --no-target-directory "$OUTDIR" "$ACTUAL_OUTDIR" \ + || ( rm -rf "$ACTUAL_OUTDIR" && exit 1 ) + +( + cd /outdir-base + { + echo "$GIT_ARCHIVE" + find "$ACTUAL_OUTDIR" -type f + } | xargs realpath --relative-base="$PWD" \ + | xargs sha256sum \ + | sort -k2 \ + | sponge "$ACTUAL_OUTDIR"/SHA256SUMS.part +) diff --git a/contrib/guix/libexec/codesign.sh b/contrib/guix/libexec/codesign.sh new file mode 100755 index 000000000000..9a5d3a1ce542 --- /dev/null +++ b/contrib/guix/libexec/codesign.sh @@ -0,0 +1,113 @@ +#!/usr/bin/env bash +# Copyright (c) 2021 The Bitcoin Core developers +# Distributed under the MIT software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. +export LC_ALL=C +set -e -o pipefail +export TZ=UTC + +# Although Guix _does_ set umask when building its own packages (in our case, +# this is all packages in manifest.scm), it does not set it for `guix +# environment`. It does make sense for at least `guix environment --container` +# to set umask, so if that change gets merged upstream and we bump the +# time-machine to a commit which includes the aforementioned change, we can +# remove this line. +# +# This line should be placed before any commands which creates files. +umask 0022 + +if [ -n "$V" ]; then + # Print both unexpanded (-v) and expanded (-x) forms of commands as they are + # read from this file. + set -vx + # Set VERBOSE for CMake-based builds + export VERBOSE="$V" +fi + +# Check that required environment variables are set +cat << EOF +Required environment variables as seen inside the container: + UNSIGNED_TARBALL: ${UNSIGNED_TARBALL:?not set} + DETACHED_SIGS_REPO: ${DETACHED_SIGS_REPO:?not set} + DIST_ARCHIVE_BASE: ${DIST_ARCHIVE_BASE:?not set} + DISTNAME: ${DISTNAME:?not set} + HOST: ${HOST:?not set} + SOURCE_DATE_EPOCH: ${SOURCE_DATE_EPOCH:?not set} + DISTSRC: ${DISTSRC:?not set} + OUTDIR: ${OUTDIR:?not set} +EOF + +ACTUAL_OUTDIR="${OUTDIR}" +OUTDIR="${DISTSRC}/output" + +git_head_version() { + local recent_tag + if recent_tag="$(git -C "$1" describe --exact-match HEAD 2> /dev/null)"; then + echo "${recent_tag#v}" + else + git -C "$1" rev-parse --short=12 HEAD + fi +} + +CODESIGNATURE_GIT_ARCHIVE="${DIST_ARCHIVE_BASE}/${DISTNAME}-codesignatures-$(git_head_version "$DETACHED_SIGS_REPO").tar.gz" + +# Create the codesignature tarball if not already there +if [ ! -e "$CODESIGNATURE_GIT_ARCHIVE" ]; then + mkdir -p "$(dirname "$CODESIGNATURE_GIT_ARCHIVE")" + git -C "$DETACHED_SIGS_REPO" archive --output="$CODESIGNATURE_GIT_ARCHIVE" HEAD +fi + +mkdir -p "$OUTDIR" + +mkdir -p "$DISTSRC" +( + cd "$DISTSRC" + + tar -xf "$UNSIGNED_TARBALL" + + mkdir -p codesignatures + tar -C codesignatures -xf "$CODESIGNATURE_GIT_ARCHIVE" + + case "$HOST" in + *mingw*) + find "$PWD" -name "*-unsigned.exe" | while read -r infile; do + infile_base="$(basename "$infile")" + + # Codesigned *-unsigned.exe and output to OUTDIR + osslsigncode attach-signature \ + -in "$infile" \ + -out "${OUTDIR}/${infile_base/-unsigned}" \ + -sigin codesignatures/win/"$infile_base".pem + done + ;; + *darwin*) + # Apply detached codesignatures to dist/ (in-place) + signapple apply dist/Bitcoin-Qt.app codesignatures/osx/dist + + # Make a DMG from dist/ + xorrisofs -D -l -V "$(< osx_volname)" -no-pad -r -dir-mode 0755 \ + -o "${OUTDIR}/${DISTNAME}-${HOST}.dmg" \ + dist \ + -- -volume_date all_file_dates ="$SOURCE_DATE_EPOCH" + ;; + *) + exit 1 + ;; + esac +) # $DISTSRC + +rm -rf "$ACTUAL_OUTDIR" +mv --no-target-directory "$OUTDIR" "$ACTUAL_OUTDIR" \ + || ( rm -rf "$ACTUAL_OUTDIR" && exit 1 ) + +( + cd /outdir-base + { + echo "$UNSIGNED_TARBALL" + echo "$CODESIGNATURE_GIT_ARCHIVE" + find "$ACTUAL_OUTDIR" -type f + } | xargs realpath --relative-base="$PWD" \ + | xargs sha256sum \ + | sort -k2 \ + | sponge "$ACTUAL_OUTDIR"/SHA256SUMS.part +) diff --git a/contrib/guix/libexec/prelude.bash b/contrib/guix/libexec/prelude.bash new file mode 100644 index 000000000000..3eb8fc02dae6 --- /dev/null +++ b/contrib/guix/libexec/prelude.bash @@ -0,0 +1,82 @@ +#!/usr/bin/env bash +export LC_ALL=C +set -e -o pipefail + +# shellcheck source=contrib/shell/realpath.bash +source contrib/shell/realpath.bash + +# shellcheck source=contrib/shell/git-utils.bash +source contrib/shell/git-utils.bash + +################ +# Required non-builtin commands should be invocable +################ + +check_tools() { + for cmd in "$@"; do + if ! command -v "$cmd" > /dev/null 2>&1; then + echo "ERR: This script requires that '$cmd' is installed and available in your \$PATH" + exit 1 + fi + done +} + +check_tools cat env readlink dirname basename git + +################ +# We should be at the top directory of the repository +################ + +same_dir() { + local resolved1 resolved2 + resolved1="$(bash_realpath "${1}")" + resolved2="$(bash_realpath "${2}")" + [ "$resolved1" = "$resolved2" ] +} + +if ! same_dir "${PWD}" "$(git_root)"; then +cat << EOF +ERR: This script must be invoked from the top level of the git repository + +Hint: This may look something like: + env FOO=BAR ./contrib/guix/guix- + +EOF +exit 1 +fi + +################ +# Execute "$@" in a pinned, possibly older version of Guix, for reproducibility +# across time. +time-machine() { + # shellcheck disable=SC2086 + guix time-machine --url=https://git.savannah.gnu.org/git/guix.git \ + --commit=998eda3067c7d21e0d9bb3310d2f5a14b8f1c681 \ + --cores="$JOBS" \ + --keep-failed \ + --fallback \ + ${SUBSTITUTE_URLS:+--substitute-urls="$SUBSTITUTE_URLS"} \ + ${ADDITIONAL_GUIX_COMMON_FLAGS} ${ADDITIONAL_GUIX_TIMEMACHINE_FLAGS} \ + -- "$@" +} + + +################ +# Set common variables +################ + +VERSION="${FORCE_VERSION:-$(git_head_version)}" +DISTNAME="${DISTNAME:-bitcoin-${VERSION}}" + +version_base_prefix="${PWD}/guix-build-" +VERSION_BASE="${version_base_prefix}${VERSION}" # TOP + +DISTSRC_BASE="${DISTSRC_BASE:-${VERSION_BASE}}" + +OUTDIR_BASE="${OUTDIR_BASE:-${VERSION_BASE}/output}" + +var_base_basename="var" +VAR_BASE="${VAR_BASE:-${VERSION_BASE}/${var_base_basename}}" + +profiles_base_basename="profiles" +PROFILES_BASE="${PROFILES_BASE:-${VAR_BASE}/${profiles_base_basename}}" diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm new file mode 100644 index 000000000000..8e5c89cc5e0a --- /dev/null +++ b/contrib/guix/manifest.scm @@ -0,0 +1,638 @@ +(use-modules (gnu) + (gnu packages) + (gnu packages autotools) + (gnu packages base) + (gnu packages bash) + (gnu packages bison) + (gnu packages certs) + (gnu packages cdrom) + (gnu packages check) + (gnu packages cmake) + (gnu packages commencement) + (gnu packages compression) + (gnu packages cross-base) + (gnu packages curl) + (gnu packages file) + (gnu packages gawk) + (gnu packages gcc) + (gnu packages gnome) + (gnu packages installers) + (gnu packages linux) + (gnu packages llvm) + (gnu packages mingw) + (gnu packages moreutils) + (gnu packages pkg-config) + (gnu packages python) + (gnu packages python-crypto) + (gnu packages python-web) + (gnu packages shells) + (gnu packages tls) + (gnu packages version-control) + (guix build-system gnu) + (guix build-system python) + (guix build-system trivial) + (guix download) + (guix gexp) + (guix git-download) + ((guix licenses) #:prefix license:) + (guix packages) + (guix profiles) + (guix utils)) + +(define-syntax-rule (search-our-patches file-name ...) + "Return the list of absolute file names corresponding to each +FILE-NAME found in ./patches relative to the current file." + (parameterize + ((%patch-path (list (string-append (dirname (current-filename)) "/patches")))) + (list (search-patch file-name) ...))) + +(define (make-ssp-fixed-gcc xgcc) + "Given a XGCC package, return a modified package that uses the SSP function +from glibc instead of from libssp.so. Our `symbol-check' script will complain if +we link against libssp.so, and thus will ensure that this works properly. + +Taken from: +http://www.linuxfromscratch.org/hlfs/view/development/chapter05/gcc-pass1.html" + (package + (inherit xgcc) + (arguments + (substitute-keyword-arguments (package-arguments xgcc) + ((#:make-flags flags) + `(cons "gcc_cv_libc_provides_ssp=yes" ,flags)))))) + +(define (make-gcc-rpath-link xgcc) + "Given a XGCC package, return a modified package that replace each instance of +-rpath in the default system spec that's inserted by Guix with -rpath-link" + (package + (inherit xgcc) + (arguments + (substitute-keyword-arguments (package-arguments xgcc) + ((#:phases phases) + `(modify-phases ,phases + (add-after 'pre-configure 'replace-rpath-with-rpath-link + (lambda _ + (substitute* (cons "gcc/config/rs6000/sysv4.h" + (find-files "gcc/config" + "^gnu-user.*\\.h$")) + (("-rpath=") "-rpath-link=")) + #t)))))))) + +(define building-on (string-append (list-ref (string-split (%current-system) #\-) 0) "-guix-linux-gnu")) + +(define (explicit-cross-configure package) + (package-with-extra-configure-variable package "--build" building-on)) + +(define (make-cross-toolchain target + base-gcc-for-libc + base-kernel-headers + base-libc + base-gcc) + "Create a cross-compilation toolchain package for TARGET" + (let* ((xbinutils (cross-binutils target)) + ;; 1. Build a cross-compiling gcc without targeting any libc, derived + ;; from BASE-GCC-FOR-LIBC + (xgcc-sans-libc (explicit-cross-configure (cross-gcc target + #:xgcc base-gcc-for-libc + #:xbinutils xbinutils))) + ;; 2. Build cross-compiled kernel headers with XGCC-SANS-LIBC, derived + ;; from BASE-KERNEL-HEADERS + (xkernel (cross-kernel-headers target + base-kernel-headers + xgcc-sans-libc + xbinutils)) + ;; 3. Build a cross-compiled libc with XGCC-SANS-LIBC and XKERNEL, + ;; derived from BASE-LIBC + (xlibc (explicit-cross-configure (cross-libc target + base-libc + xgcc-sans-libc + xbinutils + xkernel))) + ;; 4. Build a cross-compiling gcc targeting XLIBC, derived from + ;; BASE-GCC + (xgcc (explicit-cross-configure (cross-gcc target + #:xgcc base-gcc + #:xbinutils xbinutils + #:libc xlibc)))) + ;; Define a meta-package that propagates the resulting XBINUTILS, XLIBC, and + ;; XGCC + (package + (name (string-append target "-toolchain")) + (version (package-version xgcc)) + (source #f) + (build-system trivial-build-system) + (arguments '(#:builder (begin (mkdir %output) #t))) + (propagated-inputs + `(("binutils" ,xbinutils) + ("libc" ,xlibc) + ("libc:static" ,xlibc "static") + ("gcc" ,xgcc) + ("gcc-lib" ,xgcc "lib"))) + (synopsis (string-append "Complete GCC tool chain for " target)) + (description (string-append "This package provides a complete GCC tool +chain for " target " development.")) + (home-page (package-home-page xgcc)) + (license (package-license xgcc))))) + +(define base-gcc gcc-10) +(define base-linux-kernel-headers linux-libre-headers-5.15) + +;; https://gcc.gnu.org/install/configure.html +(define (hardened-gcc gcc) + (package-with-extra-configure-variable ( + package-with-extra-configure-variable gcc + "--enable-default-ssp" "yes") + "--enable-default-pie" "yes")) + +(define* (make-bitcoin-cross-toolchain target + #:key + (base-gcc-for-libc base-gcc) + (base-kernel-headers base-linux-kernel-headers) + (base-libc (make-glibc-with-bind-now (make-glibc-without-werror glibc-2.24))) + (base-gcc (make-gcc-rpath-link (hardened-gcc base-gcc)))) + "Convenience wrapper around MAKE-CROSS-TOOLCHAIN with default values +desirable for building Bitcoin Core release binaries." + (make-cross-toolchain target + base-gcc-for-libc + base-kernel-headers + base-libc + base-gcc)) + +(define (make-gcc-with-pthreads gcc) + (package-with-extra-configure-variable + (package-with-extra-patches gcc + (search-our-patches "gcc-10-remap-guix-store.patch")) + "--enable-threads" "posix")) + +(define (make-mingw-w64-cross-gcc cross-gcc) + (package-with-extra-patches cross-gcc + (search-our-patches "vmov-alignment.patch" + "gcc-broken-longjmp.patch"))) + +(define (make-mingw-pthreads-cross-toolchain target) + "Create a cross-compilation toolchain package for TARGET" + (let* ((xbinutils (cross-binutils target)) + (pthreads-xlibc mingw-w64-x86_64-winpthreads) + (pthreads-xgcc (make-gcc-with-pthreads + (cross-gcc target + #:xgcc (make-ssp-fixed-gcc (make-mingw-w64-cross-gcc base-gcc)) + #:xbinutils xbinutils + #:libc pthreads-xlibc)))) + ;; Define a meta-package that propagates the resulting XBINUTILS, XLIBC, and + ;; XGCC + (package + (name (string-append target "-posix-toolchain")) + (version (package-version pthreads-xgcc)) + (source #f) + (build-system trivial-build-system) + (arguments '(#:builder (begin (mkdir %output) #t))) + (propagated-inputs + `(("binutils" ,xbinutils) + ("libc" ,pthreads-xlibc) + ("gcc" ,pthreads-xgcc) + ("gcc-lib" ,pthreads-xgcc "lib"))) + (synopsis (string-append "Complete GCC tool chain for " target)) + (description (string-append "This package provides a complete GCC tool +chain for " target " development.")) + (home-page (package-home-page pthreads-xgcc)) + (license (package-license pthreads-xgcc))))) + +(define (make-nsis-for-gcc-10 base-nsis) + (package-with-extra-patches base-nsis + (search-our-patches "nsis-gcc-10-memmove.patch" + "nsis-disable-installer-reloc.patch"))) + +(define (fix-ppc64-nx-default lief) + (package-with-extra-patches lief + (search-our-patches "lief-fix-ppc64-nx-default.patch"))) + +(define-public lief + (package + (name "python-lief") + (version "0.12.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/lief-project/LIEF.git") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1xzbh3bxy4rw1yamnx68da1v5s56ay4g081cyamv67256g0qy2i1")))) + (build-system python-build-system) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'parallel-jobs + ;; build with multiple cores + (lambda _ + (substitute* "setup.py" (("self.parallel if self.parallel else 1") (number->string (parallel-job-count))))))))) + (native-inputs + `(("cmake" ,cmake))) + (home-page "https://github.com/lief-project/LIEF") + (synopsis "Library to Instrument Executable Formats") + (description "Python library to to provide a cross platform library which can +parse, modify and abstract ELF, PE and MachO formats.") + (license license:asl2.0))) + +(define osslsigncode + (package + (name "osslsigncode") + (version "2.0") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/mtrojnar/" + name "/archive/" version ".tar.gz")) + (sha256 + (base32 + "0byri6xny770wwb2nciq44j5071122l14bvv65axdd70nfjf0q2s")))) + (build-system gnu-build-system) + (native-inputs + `(("pkg-config" ,pkg-config) + ("autoconf" ,autoconf) + ("automake" ,automake) + ("libtool" ,libtool))) + (inputs + `(("openssl" ,openssl))) + (arguments + `(#:configure-flags + `("--without-gsf" + "--without-curl" + "--disable-dependency-tracking"))) + (home-page "https://github.com/mtrojnar/osslsigncode") + (synopsis "Authenticode signing and timestamping tool") + (description "osslsigncode is a small tool that implements part of the +functionality of the Microsoft tool signtool.exe - more exactly the Authenticode +signing and timestamping. But osslsigncode is based on OpenSSL and cURL, and +thus should be able to compile on most platforms where these exist.") + (license license:gpl3+))) ; license is with openssl exception + +(define-public python-elfesteem + (let ((commit "2eb1e5384ff7a220fd1afacd4a0170acff54fe56")) + (package + (name "python-elfesteem") + (version (git-version "0.1" "1" commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/LRGH/elfesteem") + (commit commit))) + (file-name (git-file-name name commit)) + (sha256 + (base32 + "07x6p8clh11z8s1n2kdxrqwqm2almgc5qpkcr9ckb6y5ivjdr5r6")))) + (build-system python-build-system) + ;; There are no tests, but attempting to run python setup.py test leads to + ;; PYTHONPATH problems, just disable the test + (arguments '(#:tests? #f)) + (home-page "https://github.com/LRGH/elfesteem") + (synopsis "ELF/PE/Mach-O parsing library") + (description "elfesteem parses ELF, PE and Mach-O files.") + (license license:lgpl2.1)))) + +(define-public python-oscrypto + (package + (name "python-oscrypto") + (version "1.2.1") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/wbond/oscrypto") + (commit version))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1d4d8s4z340qhvb3g5m5v3436y3a71yc26wk4749q64m09kxqc3l")) + (patches (search-our-patches "oscrypto-hard-code-openssl.patch")))) + (build-system python-build-system) + (native-search-paths + (list (search-path-specification + (variable "SSL_CERT_FILE") + (file-type 'regular) + (separator #f) ;single entry + (files '("etc/ssl/certs/ca-certificates.crt"))))) + + (propagated-inputs + `(("python-asn1crypto" ,python-asn1crypto) + ("openssl" ,openssl))) + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'hard-code-path-to-libscrypt + (lambda* (#:key inputs #:allow-other-keys) + (let ((openssl (assoc-ref inputs "openssl"))) + (substitute* "oscrypto/__init__.py" + (("@GUIX_OSCRYPTO_USE_OPENSSL@") + (string-append openssl "/lib/libcrypto.so" "," openssl "/lib/libssl.so"))) + #t))) + (add-after 'unpack 'disable-broken-tests + (lambda _ + ;; This test is broken as there is no keyboard interrupt. + (substitute* "tests/test_trust_list.py" + (("^(.*)class TrustListTests" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + (substitute* "tests/test_tls.py" + (("^(.*)class TLSTests" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + #t)) + (replace 'check + (lambda _ + (invoke "python" "run.py" "tests") + #t))))) + (home-page "https://github.com/wbond/oscrypto") + (synopsis "Compiler-free Python crypto library backed by the OS") + (description "oscrypto is a compilation-free, always up-to-date encryption library for Python.") + (license license:expat))) + +(define-public python-oscryptotests + (package (inherit python-oscrypto) + (name "python-oscryptotests") + (propagated-inputs + `(("python-oscrypto" ,python-oscrypto))) + (arguments + `(#:tests? #f + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'hard-code-path-to-libscrypt + (lambda* (#:key inputs #:allow-other-keys) + (chdir "tests") + #t))))))) + +(define-public python-certvalidator + (let ((commit "a145bf25eb75a9f014b3e7678826132efbba6213")) + (package + (name "python-certvalidator") + (version (git-version "0.1" "1" commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/achow101/certvalidator") + (commit commit))) + (file-name (git-file-name name commit)) + (sha256 + (base32 + "1qw2k7xis53179lpqdqyylbcmp76lj7sagp883wmxg5i7chhc96k")))) + (build-system python-build-system) + (propagated-inputs + `(("python-asn1crypto" ,python-asn1crypto) + ("python-oscrypto" ,python-oscrypto) + ("python-oscryptotests", python-oscryptotests))) ;; certvalidator tests import oscryptotests + (arguments + `(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'disable-broken-tests + (lambda _ + (substitute* "tests/test_certificate_validator.py" + (("^(.*)class CertificateValidatorTests" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + (substitute* "tests/test_crl_client.py" + (("^(.*)def test_fetch_crl" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + (substitute* "tests/test_ocsp_client.py" + (("^(.*)def test_fetch_ocsp" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + (substitute* "tests/test_registry.py" + (("^(.*)def test_build_paths" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + (substitute* "tests/test_validate.py" + (("^(.*)def test_revocation_mode_hard" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + (substitute* "tests/test_validate.py" + (("^(.*)def test_revocation_mode_soft" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + #t)) + (replace 'check + (lambda _ + (invoke "python" "run.py" "tests") + #t))))) + (home-page "https://github.com/wbond/certvalidator") + (synopsis "Python library for validating X.509 certificates and paths") + (description "certvalidator is a Python library for validating X.509 +certificates or paths. Supports various options, including: validation at a +specific moment in time, whitelisting and revocation checks.") + (license license:expat)))) + +(define-public python-altgraph + (package + (name "python-altgraph") + (version "0.17") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ronaldoussoren/altgraph") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "09sm4srvvkw458pn48ga9q7ykr4xlz7q8gh1h9w7nxpf001qgpwb")))) + (build-system python-build-system) + (home-page "https://github.com/ronaldoussoren/altgraph") + (synopsis "Python graph (network) package") + (description "altgraph is a fork of graphlib: a graph (network) package for +constructing graphs, BFS and DFS traversals, topological sort, shortest paths, +etc. with graphviz output.") + (license license:expat))) + + +(define-public python-macholib + (package + (name "python-macholib") + (version "1.14") + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/ronaldoussoren/macholib") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0aislnnfsza9wl4f0vp45ivzlc0pzhp9d4r08700slrypn5flg42")))) + (build-system python-build-system) + (propagated-inputs + `(("python-altgraph" ,python-altgraph))) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'disable-broken-tests + (lambda _ + ;; This test is broken as there is no keyboard interrupt. + (substitute* "macholib_tests/test_command_line.py" + (("^(.*)class TestCmdLine" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line))) + (substitute* "macholib_tests/test_dyld.py" + (("^(.*)def test_\\S+_find" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line)) + (("^(.*)def testBasic" line indent) + (string-append indent + "@unittest.skip(\"Disabled by Guix\")\n" + line)) + ) + #t))))) + (home-page "https://github.com/ronaldoussoren/macholib") + (synopsis "Python library for analyzing and editing Mach-O headers") + (description "macholib is a Macho-O header analyzer and editor. It's +typically used as a dependency analysis tool, and also to rewrite dylib +references in Mach-O headers to be @executable_path relative. Though this tool +targets a platform specific file format, it is pure python code that is platform +and endian independent.") + (license license:expat))) + +(define-public python-signapple + (let ((commit "8a945a2e7583be2665cf3a6a89d665b70ecd1ab6")) + (package + (name "python-signapple") + (version (git-version "0.1" "1" commit)) + (source + (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/achow101/signapple") + (commit commit))) + (file-name (git-file-name name commit)) + (sha256 + (base32 + "0fr1hangvfyiwflca6jg5g8zvg3jc9qr7vd2c12ff89pznf38dlg")))) + (build-system python-build-system) + (propagated-inputs + `(("python-asn1crypto" ,python-asn1crypto) + ("python-oscrypto" ,python-oscrypto) + ("python-certvalidator" ,python-certvalidator) + ("python-elfesteem" ,python-elfesteem) + ("python-requests" ,python-requests) + ("python-macholib" ,python-macholib))) + ;; There are no tests, but attempting to run python setup.py test leads to + ;; problems, just disable the test + (arguments '(#:tests? #f)) + (home-page "https://github.com/achow101/signapple") + (synopsis "Mach-O binary signature tool") + (description "signapple is a Python tool for creating, verifying, and +inspecting signatures in Mach-O binaries.") + (license license:expat)))) + +(define (make-glibc-without-werror glibc) + (package-with-extra-configure-variable glibc "enable_werror" "no")) + +(define (make-glibc-with-stack-protector glibc) + (package-with-extra-configure-variable glibc "--enable-stack-protector" "all")) + +(define (make-glibc-with-bind-now glibc) + (package-with-extra-configure-variable glibc "--enable-bind-now" "yes")) + +(define-public glibc-2.24 + (package + (inherit glibc-2.31) + (version "2.24") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://sourceware.org/git/glibc.git") + (commit "0d7f1ed30969886c8dde62fbf7d2c79967d4bace"))) + (file-name (git-file-name "glibc" "0d7f1ed30969886c8dde62fbf7d2c79967d4bace")) + (sha256 + (base32 + "0g5hryia5v1k0qx97qffgwzrz4lr4jw3s5kj04yllhswsxyjbic3")) + (patches (search-our-patches "glibc-ldd-x86_64.patch" + "glibc-versioned-locpath.patch" + "glibc-2.24-elfm-loadaddr-dynamic-rewrite.patch" + "glibc-2.24-no-build-time-cxx-header-run.patch" + "glibc-2.24-fcommon.patch" + "glibc-2.24-guix-prefix.patch")))))) + +(define-public glibc-2.27/bitcoin-patched + (package + (inherit glibc-2.31) + (version "2.27") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://sourceware.org/git/glibc.git") + (commit "23158b08a0908f381459f273a984c6fd328363cb"))) + (file-name (git-file-name "glibc" "23158b08a0908f381459f273a984c6fd328363cb")) + (sha256 + (base32 + "1b2n1gxv9f4fd5yy68qjbnarhf8mf4vmlxk10i3328c1w5pmp0ca")) + (patches (search-our-patches "glibc-ldd-x86_64.patch" + "glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch" + "glibc-2.27-dont-redefine-nss-database.patch" + "glibc-2.27-guix-prefix.patch")))))) + +(packages->manifest + (append + (list ;; The Basics + bash + which + coreutils + util-linux + ;; File(system) inspection + file + grep + diffutils + findutils + ;; File transformation + patch + gawk + sed + moreutils + ;; Compression and archiving + tar + bzip2 + gzip + xz + ;; Build tools + gnu-make + libtool-2.4.7 + autoconf-2.71 + automake + pkg-config + bison + ;; Native GCC 10 toolchain + gcc-toolchain-10 + (list gcc-toolchain-10 "static") + ;; Scripting + python-3 + ;; Git + git-minimal + ;; Tests + (fix-ppc64-nx-default lief)) + (let ((target (getenv "HOST"))) + (cond ((string-suffix? "-mingw32" target) + ;; Windows + (list zip + (make-mingw-pthreads-cross-toolchain "x86_64-w64-mingw32") + (make-nsis-for-gcc-10 nsis-x86_64) + osslsigncode)) + ((string-contains target "-linux-") + (list (cond ((string-contains target "riscv64-") + (make-bitcoin-cross-toolchain target + #:base-libc (make-glibc-with-stack-protector + (make-glibc-with-bind-now (make-glibc-without-werror glibc-2.27/bitcoin-patched))))) + (else + (make-bitcoin-cross-toolchain target))))) + ((string-contains target "darwin") + (list clang-toolchain-10 binutils cmake xorriso python-signapple)) + (else '()))))) diff --git a/contrib/guix/patches/gcc-10-remap-guix-store.patch b/contrib/guix/patches/gcc-10-remap-guix-store.patch new file mode 100644 index 000000000000..a47ef7a2df13 --- /dev/null +++ b/contrib/guix/patches/gcc-10-remap-guix-store.patch @@ -0,0 +1,25 @@ +From aad25427e74f387412e8bc9a9d7bbc6c496c792f Mon Sep 17 00:00:00 2001 +From: Andrew Chow +Date: Wed, 6 Jul 2022 16:49:41 -0400 +Subject: [PATCH] guix: remap guix store paths to /usr + +--- + libgcc/Makefile.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libgcc/Makefile.in b/libgcc/Makefile.in +index 851e7657d07..476c2becd1c 100644 +--- a/libgcc/Makefile.in ++++ b/libgcc/Makefile.in +@@ -854,7 +854,7 @@ endif + # libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and + # LIB2ADDEHSHARED matter. (Usually all three are identical.) + +-c_flags := -fexceptions ++c_flags := -fexceptions $(shell find /gnu/store -maxdepth 1 -mindepth 1 -type d -exec echo -n " -ffile-prefix-map={}=/usr" \;) + + ifeq ($(enable_shared),yes) + +-- +2.37.0 + diff --git a/contrib/guix/patches/gcc-broken-longjmp.patch b/contrib/guix/patches/gcc-broken-longjmp.patch new file mode 100644 index 000000000000..1cfc0918b090 --- /dev/null +++ b/contrib/guix/patches/gcc-broken-longjmp.patch @@ -0,0 +1,68 @@ +commit eb5698897c52702498938592d7f76e67d126451f +Author: Eric Botcazou +Date: Wed May 5 22:48:51 2021 +0200 + + Fix PR target/100402 + + This is a regression for 64-bit Windows present from mainline down to the 9 + branch and introduced by the fix for PR target/99234. Again SEH, but with + a twist related to the way MinGW implements setjmp/longjmp, which turns out + to be piggybacked on SEH with recent versions of MinGW, i.e. the longjmp + performs a bona-fide unwinding of the stack, because it calls RtlUnwindEx + with the second argument initially passed to setjmp, which is the result of + __builtin_frame_address (0) in the MinGW header file: + + define setjmp(BUF) _setjmp((BUF), __builtin_frame_address (0)) + + This means that we directly expose the frame pointer to the SEH machinery + here (unlike with regular exception handling where we use an intermediate + CFA) and thus that we cannot do whatever we want with it. The old code + would leave it unaligned, i.e. not multiple of 16, whereas the new code + aligns it, but this breaks for some reason; at least it appears that a + .seh_setframe directive with 0 as second argument always works, so the + fix aligns it this way. + + gcc/ + PR target/100402 + * config/i386/i386.c (ix86_compute_frame_layout): For a SEH target, + always return the establisher frame for __builtin_frame_address (0). + gcc/testsuite/ + * gcc.c-torture/execute/20210505-1.c: New test. + +diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c +index 2f838840e96..06ad1b2274e 100644 +--- a/gcc/config/i386/i386.c ++++ b/gcc/config/i386/i386.c +@@ -6356,12 +6356,29 @@ ix86_compute_frame_layout (void) + area, see the SEH code in config/i386/winnt.c for the rationale. */ + frame->hard_frame_pointer_offset = frame->sse_reg_save_offset; + +- /* If we can leave the frame pointer where it is, do so. Also, return ++ /* If we can leave the frame pointer where it is, do so; however return + the establisher frame for __builtin_frame_address (0) or else if the +- frame overflows the SEH maximum frame size. */ ++ frame overflows the SEH maximum frame size. ++ ++ Note that the value returned by __builtin_frame_address (0) is quite ++ constrained, because setjmp is piggybacked on the SEH machinery with ++ recent versions of MinGW: ++ ++ # elif defined(__SEH__) ++ # if defined(__aarch64__) || defined(_ARM64_) ++ # define setjmp(BUF) _setjmp((BUF), __builtin_sponentry()) ++ # elif (__MINGW_GCC_VERSION < 40702) ++ # define setjmp(BUF) _setjmp((BUF), mingw_getsp()) ++ # else ++ # define setjmp(BUF) _setjmp((BUF), __builtin_frame_address (0)) ++ # endif ++ ++ and the second argument passed to _setjmp, if not null, is forwarded ++ to the TargetFrame parameter of RtlUnwindEx by longjmp (after it has ++ built an ExceptionRecord on the fly describing the setjmp buffer). */ + const HOST_WIDE_INT diff + = frame->stack_pointer_offset - frame->hard_frame_pointer_offset; +- if (diff <= 255) ++ if (diff <= 255 && !crtl->accesses_prior_frames) + { + /* The resulting diff will be a multiple of 16 lower than 255, + i.e. at most 240 as required by the unwind data structure. */ diff --git a/contrib/guix/patches/glibc-2.24-elfm-loadaddr-dynamic-rewrite.patch b/contrib/guix/patches/glibc-2.24-elfm-loadaddr-dynamic-rewrite.patch new file mode 100644 index 000000000000..5c4d0c6ebe19 --- /dev/null +++ b/contrib/guix/patches/glibc-2.24-elfm-loadaddr-dynamic-rewrite.patch @@ -0,0 +1,62 @@ +https://sourceware.org/git/?p=glibc.git;a=commit;h=a68ba2f3cd3cbe32c1f31e13c20ed13487727b32 + +commit 6b02af31e9a721bb15a11380cd22d53b621711f8 +Author: Szabolcs Nagy +Date: Wed Oct 18 17:26:23 2017 +0100 + + [AARCH64] Rewrite elf_machine_load_address using _DYNAMIC symbol + + This patch rewrites aarch64 elf_machine_load_address to use special _DYNAMIC + symbol instead of _dl_start. + + The static address of _DYNAMIC symbol is stored in the first GOT entry. + Here is the change which makes this solution work (part of binutils 2.24): + https://sourceware.org/ml/binutils/2013-06/msg00248.html + + i386, x86_64 targets use the same method to do this as well. + + The original implementation relies on a trick that R_AARCH64_ABS32 relocation + being resolved at link time and the static address fits in the 32bits. + However, in LP64, normally, the address is defined to be 64 bit. + + Here is the C version one which should be portable in all cases. + + * sysdeps/aarch64/dl-machine.h (elf_machine_load_address): Use + _DYNAMIC symbol to calculate load address. + +diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h +index e86d8b5b63..5a5b8a5de5 100644 +--- a/sysdeps/aarch64/dl-machine.h ++++ b/sysdeps/aarch64/dl-machine.h +@@ -49,26 +49,11 @@ elf_machine_load_address (void) + /* To figure out the load address we use the definition that for any symbol: + dynamic_addr(symbol) = static_addr(symbol) + load_addr + +- The choice of symbol is arbitrary. The static address we obtain +- by constructing a non GOT reference to the symbol, the dynamic +- address of the symbol we compute using adrp/add to compute the +- symbol's address relative to the PC. +- This depends on 32bit relocations being resolved at link time +- and that the static address fits in the 32bits. */ +- +- ElfW(Addr) static_addr; +- ElfW(Addr) dynamic_addr; +- +- asm (" \n" +-" adrp %1, _dl_start; \n" +-" add %1, %1, #:lo12:_dl_start \n" +-" ldr %w0, 1f \n" +-" b 2f \n" +-"1: \n" +-" .word _dl_start \n" +-"2: \n" +- : "=r" (static_addr), "=r" (dynamic_addr)); +- return dynamic_addr - static_addr; ++ _DYNAMIC sysmbol is used here as its link-time address stored in ++ the special unrelocated first GOT entry. */ ++ ++ extern ElfW(Dyn) _DYNAMIC[] attribute_hidden; ++ return (ElfW(Addr)) &_DYNAMIC - elf_machine_dynamic (); + } + + /* Set up the loaded object described by L so its unrelocated PLT diff --git a/contrib/guix/patches/glibc-2.24-fcommon.patch b/contrib/guix/patches/glibc-2.24-fcommon.patch new file mode 100644 index 000000000000..2bc32ede9056 --- /dev/null +++ b/contrib/guix/patches/glibc-2.24-fcommon.patch @@ -0,0 +1,32 @@ +commit 264a4a0dbe1f4369db315080034b500bed66016c +Author: fanquake +Date: Fri May 6 11:03:04 2022 +0100 + + build: use -fcommon to retain legacy behaviour with GCC 10 + + GCC 10 started using -fno-common by default, which causes issues with + the powerpc builds using gibc 2.24. A patch was commited to glibc to fix + the issue, 18363b4f010da9ba459b13310b113ac0647c2fcc but is non-trvial + to backport, and was broken in at least one way, see the followup in + commit 7650321ce037302bfc2f026aa19e0213b8d02fe6. + + For now, retain the legacy GCC behaviour by passing -fcommon when + building glibc. + + https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html. + https://sourceware.org/git/?p=glibc.git;a=commit;h=18363b4f010da9ba459b13310b113ac0647c2fcc + https://sourceware.org/git/?p=glibc.git;a=commit;h=7650321ce037302bfc2f026aa19e0213b8d02fe6 + +diff --git a/Makeconfig b/Makeconfig +index ee379f5852..63c4a2f234 100644 +--- a/Makeconfig ++++ b/Makeconfig +@@ -824,7 +824,7 @@ ifeq "$(strip $(+cflags))" "" + +cflags := $(default_cflags) + endif # $(+cflags) == "" + +-+cflags += $(cflags-cpu) $(+gccwarn) $(+merge-constants) $(+math-flags) +++cflags += $(cflags-cpu) $(+gccwarn) $(+merge-constants) $(+math-flags) -fcommon + +gcc-nowarn := -w + + # Don't duplicate options if we inherited variables from the parent. diff --git a/contrib/guix/patches/glibc-2.24-guix-prefix.patch b/contrib/guix/patches/glibc-2.24-guix-prefix.patch new file mode 100644 index 000000000000..875e8cd61191 --- /dev/null +++ b/contrib/guix/patches/glibc-2.24-guix-prefix.patch @@ -0,0 +1,25 @@ +Without ffile-prefix-map, the debug symbols will contain paths for the +guix store which will include the hashes of each package. However, the +hash for the same package will differ when on different architectures. +In order to be reproducible regardless of the architecture used to build +the package, map all guix store prefixes to something fixed, e.g. /usr. + +We might be able to drop this in favour of using --with-nonshared-cflags +when we being using newer versions of glibc. + +--- a/Makeconfig ++++ b/Makeconfig +@@ -950,6 +950,10 @@ object-suffixes-for-libc += .oS + # shared objects. We don't want to use CFLAGS-os because users may, for + # example, make that processor-specific. + CFLAGS-.oS = $(CFLAGS-.o) $(PIC-ccflag) ++ ++# Map Guix store paths to /usr ++CFLAGS-.oS += `find /gnu/store -maxdepth 1 -mindepth 1 -type d -exec echo -n " -ffile-prefix-map={}=/usr" \;` ++ + CPPFLAGS-.oS = $(CPPFLAGS-.o) -DPIC -DLIBC_NONSHARED=1 + libtype.oS = lib%_nonshared.a + endif +-- +2.35.1 + diff --git a/contrib/guix/patches/glibc-2.24-no-build-time-cxx-header-run.patch b/contrib/guix/patches/glibc-2.24-no-build-time-cxx-header-run.patch new file mode 100644 index 000000000000..11fe7fdc99c0 --- /dev/null +++ b/contrib/guix/patches/glibc-2.24-no-build-time-cxx-header-run.patch @@ -0,0 +1,100 @@ +https://sourceware.org/git/?p=glibc.git;a=commit;h=fc3e1337be1c6935ab58bd13520f97a535cf70cc + +commit dc23a45db566095e83ff0b7a57afc87fb5ca89a1 +Author: Florian Weimer +Date: Wed Sep 21 10:45:32 2016 +0200 + + Avoid running $(CXX) during build to obtain header file paths + + This reduces the build time somewhat and is particularly noticeable + during rebuilds with few code changes. + +diff --git a/Makerules b/Makerules +index 7e4077ee50..c338850de5 100644 +--- a/Makerules ++++ b/Makerules +@@ -121,14 +121,10 @@ ifneq (,$(CXX)) + # will be used instead of /usr/include/stdlib.h and /usr/include/math.h. + before-compile := $(common-objpfx)cstdlib $(common-objpfx)cmath \ + $(before-compile) +-cstdlib=$(shell echo "\#include " | $(CXX) -M -MP -x c++ - \ +- | sed -n "/cstdlib:/{s/:$$//;p}") +-$(common-objpfx)cstdlib: $(cstdlib) ++$(common-objpfx)cstdlib: $(c++-cstdlib-header) + $(INSTALL_DATA) $< $@T + $(move-if-change) $@T $@ +-cmath=$(shell echo "\#include " | $(CXX) -M -MP -x c++ - \ +- | sed -n "/cmath:/{s/:$$//;p}") +-$(common-objpfx)cmath: $(cmath) ++$(common-objpfx)cmath: $(c++-cmath-header) + $(INSTALL_DATA) $< $@T + $(move-if-change) $@T $@ + endif +diff --git a/config.make.in b/config.make.in +index 95c6f36876..04a8b3ed7f 100644 +--- a/config.make.in ++++ b/config.make.in +@@ -45,6 +45,8 @@ defines = @DEFINES@ + sysheaders = @sysheaders@ + sysincludes = @SYSINCLUDES@ + c++-sysincludes = @CXX_SYSINCLUDES@ ++c++-cstdlib-header = @CXX_CSTDLIB_HEADER@ ++c++-cmath-header = @CXX_CMATH_HEADER@ + all-warnings = @all_warnings@ + enable-werror = @enable_werror@ + +diff --git a/configure b/configure +index 17625e1041..6ff252744b 100755 +--- a/configure ++++ b/configure +@@ -635,6 +635,8 @@ BISON + INSTALL_INFO + PERL + BASH_SHELL ++CXX_CMATH_HEADER ++CXX_CSTDLIB_HEADER + CXX_SYSINCLUDES + SYSINCLUDES + AUTOCONF +@@ -5054,6 +5056,18 @@ fi + + + ++# Obtain some C++ header file paths. This is used to make a local ++# copy of those headers in Makerules. ++if test -n "$CXX"; then ++ find_cxx_header () { ++ echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$1:/{s/:\$//;p}" ++ } ++ CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)" ++ CXX_CMATH_HEADER="$(find_cxx_header cmath)" ++fi ++ ++ ++ + # Test if LD_LIBRARY_PATH contains the notation for the current directory + # since this would lead to problems installing/building glibc. + # LD_LIBRARY_PATH contains the current directory if one of the following +diff --git a/configure.ac b/configure.ac +index 33bcd62180..9938ab0dc2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1039,6 +1039,18 @@ fi + AC_SUBST(SYSINCLUDES) + AC_SUBST(CXX_SYSINCLUDES) + ++# Obtain some C++ header file paths. This is used to make a local ++# copy of those headers in Makerules. ++if test -n "$CXX"; then ++ find_cxx_header () { ++ echo "#include <$1>" | $CXX -M -MP -x c++ - | sed -n "/$1:/{s/:\$//;p}" ++ } ++ CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)" ++ CXX_CMATH_HEADER="$(find_cxx_header cmath)" ++fi ++AC_SUBST(CXX_CSTDLIB_HEADER) ++AC_SUBST(CXX_CMATH_HEADER) ++ + # Test if LD_LIBRARY_PATH contains the notation for the current directory + # since this would lead to problems installing/building glibc. + # LD_LIBRARY_PATH contains the current directory if one of the following diff --git a/contrib/guix/patches/glibc-2.27-dont-redefine-nss-database.patch b/contrib/guix/patches/glibc-2.27-dont-redefine-nss-database.patch new file mode 100644 index 000000000000..16a595d613c1 --- /dev/null +++ b/contrib/guix/patches/glibc-2.27-dont-redefine-nss-database.patch @@ -0,0 +1,87 @@ +commit 78a90c2f74a2012dd3eff302189e47ff6779a757 +Author: Andreas Schwab +Date: Fri Mar 2 23:07:14 2018 +0100 + + Fix multiple definitions of __nss_*_database (bug 22918) + + (cherry picked from commit eaf6753f8aac33a36deb98c1031d1bad7b593d2d) + +diff --git a/nscd/gai.c b/nscd/gai.c +index d081747797..576fd0045b 100644 +--- a/nscd/gai.c ++++ b/nscd/gai.c +@@ -45,3 +45,6 @@ + #ifdef HAVE_LIBIDN + # include + #endif ++ ++/* Some variables normally defined in libc. */ ++service_user *__nss_hosts_database attribute_hidden; +diff --git a/nss/nsswitch.c b/nss/nsswitch.c +index d5e655974f..b0f0c11a3e 100644 +--- a/nss/nsswitch.c ++++ b/nss/nsswitch.c +@@ -62,7 +62,7 @@ static service_library *nss_new_service (name_database *database, + + /* Declare external database variables. */ + #define DEFINE_DATABASE(name) \ +- extern service_user *__nss_##name##_database attribute_hidden; \ ++ service_user *__nss_##name##_database attribute_hidden; \ + weak_extern (__nss_##name##_database) + #include "databases.def" + #undef DEFINE_DATABASE +diff --git a/nss/nsswitch.h b/nss/nsswitch.h +index eccb535ef5..63573b9ebc 100644 +--- a/nss/nsswitch.h ++++ b/nss/nsswitch.h +@@ -226,10 +226,10 @@ libc_hidden_proto (__nss_hostname_digits_dots) + #define MAX_NR_ADDRS 48 + + /* Prototypes for __nss_*_lookup2 functions. */ +-#define DEFINE_DATABASE(arg) \ +- service_user *__nss_##arg##_database attribute_hidden; \ +- int __nss_##arg##_lookup2 (service_user **, const char *, \ +- const char *, void **); \ ++#define DEFINE_DATABASE(arg) \ ++ extern service_user *__nss_##arg##_database attribute_hidden; \ ++ int __nss_##arg##_lookup2 (service_user **, const char *, \ ++ const char *, void **); \ + libc_hidden_proto (__nss_##arg##_lookup2) + #include "databases.def" + #undef DEFINE_DATABASE +diff --git a/posix/tst-rfc3484-2.c b/posix/tst-rfc3484-2.c +index f509534ca9..8c64ac59ff 100644 +--- a/posix/tst-rfc3484-2.c ++++ b/posix/tst-rfc3484-2.c +@@ -58,6 +58,7 @@ _res_hconf_init (void) + #undef USE_NSCD + #include "../sysdeps/posix/getaddrinfo.c" + ++service_user *__nss_hosts_database attribute_hidden; + + /* This is the beginning of the real test code. The above defines + (among other things) the function rfc3484_sort. */ +diff --git a/posix/tst-rfc3484-3.c b/posix/tst-rfc3484-3.c +index ae44087a10..1c61aaf844 100644 +--- a/posix/tst-rfc3484-3.c ++++ b/posix/tst-rfc3484-3.c +@@ -58,6 +58,7 @@ _res_hconf_init (void) + #undef USE_NSCD + #include "../sysdeps/posix/getaddrinfo.c" + ++service_user *__nss_hosts_database attribute_hidden; + + /* This is the beginning of the real test code. The above defines + (among other things) the function rfc3484_sort. */ +diff --git a/posix/tst-rfc3484.c b/posix/tst-rfc3484.c +index 7f191abbbc..8f45848e44 100644 +--- a/posix/tst-rfc3484.c ++++ b/posix/tst-rfc3484.c +@@ -58,6 +58,7 @@ _res_hconf_init (void) + #undef USE_NSCD + #include "../sysdeps/posix/getaddrinfo.c" + ++service_user *__nss_hosts_database attribute_hidden; + + /* This is the beginning of the real test code. The above defines + (among other things) the function rfc3484_sort. */ diff --git a/contrib/guix/patches/glibc-2.27-guix-prefix.patch b/contrib/guix/patches/glibc-2.27-guix-prefix.patch new file mode 100644 index 000000000000..d777af74f018 --- /dev/null +++ b/contrib/guix/patches/glibc-2.27-guix-prefix.patch @@ -0,0 +1,25 @@ +Without ffile-prefix-map, the debug symbols will contain paths for the +guix store which will include the hashes of each package. However, the +hash for the same package will differ when on different architectures. +In order to be reproducible regardless of the architecture used to build +the package, map all guix store prefixes to something fixed, e.g. /usr. + +We might be able to drop this in favour of using --with-nonshared-cflags +when we being using newer versions of glibc. + +--- a/Makeconfig ++++ b/Makeconfig +@@ -992,6 +992,10 @@ object-suffixes := + CPPFLAGS-.o = $(pic-default) + # libc.a must be compiled with -fPIE/-fpie for static PIE. + CFLAGS-.o = $(filter %frame-pointer,$(+cflags)) $(pie-default) ++ ++# Map Guix store paths to /usr ++CFLAGS-.o += `find /gnu/store -maxdepth 1 -mindepth 1 -type d -exec echo -n " -ffile-prefix-map={}=/usr" \;` ++ + libtype.o := lib%.a + object-suffixes += .o + ifeq (yes,$(build-shared)) +-- +2.35.1 + diff --git a/contrib/guix/patches/glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch b/contrib/guix/patches/glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch new file mode 100644 index 000000000000..c0f8495c41de --- /dev/null +++ b/contrib/guix/patches/glibc-2.27-riscv64-Use-__has_include-to-include-asm-syscalls.h.patch @@ -0,0 +1,76 @@ +Note that this has been modified from the original commit, to use __has_include +instead of __has_include__, as the later was causing build failures with GCC 10. +See also: http://lists.busybox.net/pipermail/buildroot/2020-July/590376.html. + +https://sourceware.org/git/?p=glibc.git;a=commit;h=0b9c84906f653978fb8768c7ebd0ee14a47e662e + +From 562c52cc81a4e456a62e6455feb32732049e9070 Mon Sep 17 00:00:00 2001 +From: "H.J. Lu" +Date: Mon, 31 Dec 2018 09:26:42 -0800 +Subject: [PATCH] riscv: Use __has_include__ to include [BZ + #24022] + + has been removed by + +commit 27f8899d6002e11a6e2d995e29b8deab5aa9cc25 +Author: David Abdurachmanov +Date: Thu Nov 8 20:02:39 2018 +0100 + + riscv: add asm/unistd.h UAPI header + + Marcin Juszkiewicz reported issues while generating syscall table for riscv + using 4.20-rc1. The patch refactors our unistd.h files to match some other + architectures. + + - Add asm/unistd.h UAPI header, which has __ARCH_WANT_NEW_STAT only for 64-bit + - Remove asm/syscalls.h UAPI header and merge to asm/unistd.h + - Adjust kernel asm/unistd.h + + So now asm/unistd.h UAPI header should show all syscalls for riscv. + + may be restored by + +Subject: [PATCH] riscv: restore asm/syscalls.h UAPI header +Date: Tue, 11 Dec 2018 09:09:35 +0100 + +UAPI header asm/syscalls.h was merged into UAPI asm/unistd.h header, +which did resolve issue with missing syscalls macros resulting in +glibc (2.28) build failure. It also broke glibc in a different way: +asm/syscalls.h is being used by glibc. I noticed this while doing +Fedora 30/Rawhide mass rebuild. + +The patch returns asm/syscalls.h header and incl. it into asm/unistd.h. +I plan to send a patch to glibc to use asm/unistd.h instead of +asm/syscalls.h + +In the meantime, we use __has_include__, which was added to GCC 5, to +check if exists before including it. Tested with +build-many-glibcs.py for riscv against kernel 4.19.12 and 4.20-rc7. + + [BZ #24022] + * sysdeps/unix/sysv/linux/riscv/flush-icache.c: Check if + exists with __has_include__ before including it. +--- + sysdeps/unix/sysv/linux/riscv/flush-icache.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/sysdeps/unix/sysv/linux/riscv/flush-icache.c b/sysdeps/unix/sysv/linux/riscv/flush-icache.c +index d612ef4c6c..0b2042620b 100644 +--- a/sysdeps/unix/sysv/linux/riscv/flush-icache.c ++++ b/sysdeps/unix/sysv/linux/riscv/flush-icache.c +@@ -21,7 +21,11 @@ + #include + #include + #include +-#include ++#if __has_include () ++# include ++#else ++# include ++#endif + + typedef int (*func_type) (void *, void *, unsigned long int); + +-- +2.31.1 + diff --git a/contrib/guix/patches/glibc-ldd-x86_64.patch b/contrib/guix/patches/glibc-ldd-x86_64.patch new file mode 100644 index 000000000000..b1b6d5a54863 --- /dev/null +++ b/contrib/guix/patches/glibc-ldd-x86_64.patch @@ -0,0 +1,10 @@ +By default, 'RTDLLIST' in 'ldd' refers to 'lib64/ld-linux-x86-64.so', whereas +it's in 'lib/' for us. This patch fixes that. + +--- glibc-2.17/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed 2012-12-25 04:02:13.000000000 +0100 ++++ glibc-2.17/sysdeps/unix/sysv/linux/x86_64/ldd-rewrite.sed 2013-09-15 23:08:03.000000000 +0200 +@@ -1,3 +1,3 @@ + /LD_TRACE_LOADED_OBJECTS=1/a\ + add_env="$add_env LD_LIBRARY_VERSION=\\$verify_out" +-s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|x32\)\(/[^/]*\)\(-x86-64\|-x32\)\(\.so\.[0-9.]*\)[ ]*$_\1"\2\4\6 \264\4-x86-64\6 \2x32\4-x32\6"_ ++s_^\(RTLDLIST=\)\(.*lib\)\(\|64\|x32\)\(/[^/]*\)\(-x86-64\|-x32\)\(\.so\.[0-9.]*\)[ ]*$_\1"\2\4\6 \2\4-x86-64\6 \2x32\4-x32\6"_ diff --git a/contrib/guix/patches/glibc-versioned-locpath.patch b/contrib/guix/patches/glibc-versioned-locpath.patch new file mode 100644 index 000000000000..bc7652127fa5 --- /dev/null +++ b/contrib/guix/patches/glibc-versioned-locpath.patch @@ -0,0 +1,240 @@ +The format of locale data can be incompatible between libc versions, and +loading incompatible data can lead to 'setlocale' returning EINVAL at best +or triggering an assertion failure at worst. See +https://lists.gnu.org/archive/html/guix-devel/2015-09/msg00717.html +for background information. + +To address that, this patch changes libc to honor a new 'GUIX_LOCPATH' +variable, and to look for locale data in version-specific sub-directories of +that variable. So, if GUIX_LOCPATH=/foo:/bar, locale data is searched for in +/foo/X.Y and /bar/X.Y, where X.Y is the libc version number. + +That way, a single 'GUIX_LOCPATH' setting can work even if different libc +versions coexist on the system. + +--- a/locale/newlocale.c ++++ b/locale/newlocale.c +@@ -30,6 +30,7 @@ + /* Lock for protecting global data. */ + __libc_rwlock_define (extern , __libc_setlocale_lock attribute_hidden) + ++extern error_t compute_locale_search_path (char **, size_t *); + + /* Use this when we come along an error. */ + #define ERROR_RETURN \ +@@ -48,7 +49,6 @@ __newlocale (int category_mask, const char *locale, __locale_t base) + __locale_t result_ptr; + char *locale_path; + size_t locale_path_len; +- const char *locpath_var; + int cnt; + size_t names_len; + +@@ -102,17 +102,8 @@ __newlocale (int category_mask, const char *locale, __locale_t base) + locale_path = NULL; + locale_path_len = 0; + +- locpath_var = getenv ("LOCPATH"); +- if (locpath_var != NULL && locpath_var[0] != '\0') +- { +- if (__argz_create_sep (locpath_var, ':', +- &locale_path, &locale_path_len) != 0) +- return NULL; +- +- if (__argz_add_sep (&locale_path, &locale_path_len, +- _nl_default_locale_path, ':') != 0) +- return NULL; +- } ++ if (compute_locale_search_path (&locale_path, &locale_path_len) != 0) ++ return NULL; + + /* Get the names for the locales we are interested in. We either + allow a composite name or a single name. */ +diff --git a/locale/setlocale.c b/locale/setlocale.c +index ead030d..0c0e314 100644 +--- a/locale/setlocale.c ++++ b/locale/setlocale.c +@@ -215,12 +215,65 @@ setdata (int category, struct __locale_data *data) + } + } + ++/* Return in *LOCALE_PATH and *LOCALE_PATH_LEN the locale data search path as ++ a colon-separated list. Return ENOMEN on error, zero otherwise. */ ++error_t ++compute_locale_search_path (char **locale_path, size_t *locale_path_len) ++{ ++ char* guix_locpath_var = getenv ("GUIX_LOCPATH"); ++ char *locpath_var = getenv ("LOCPATH"); ++ ++ if (guix_locpath_var != NULL && guix_locpath_var[0] != '\0') ++ { ++ /* Entries in 'GUIX_LOCPATH' take precedence over 'LOCPATH'. These ++ entries are systematically prefixed with "/X.Y" where "X.Y" is the ++ libc version. */ ++ if (__argz_create_sep (guix_locpath_var, ':', ++ locale_path, locale_path_len) != 0 ++ || __argz_suffix_entries (locale_path, locale_path_len, ++ "/" VERSION) != 0) ++ goto bail_out; ++ } ++ ++ if (locpath_var != NULL && locpath_var[0] != '\0') ++ { ++ char *reg_locale_path = NULL; ++ size_t reg_locale_path_len = 0; ++ ++ if (__argz_create_sep (locpath_var, ':', ++ ®_locale_path, ®_locale_path_len) != 0) ++ goto bail_out; ++ ++ if (__argz_append (locale_path, locale_path_len, ++ reg_locale_path, reg_locale_path_len) != 0) ++ goto bail_out; ++ ++ free (reg_locale_path); ++ } ++ ++ if (*locale_path != NULL) ++ { ++ /* Append the system default locale directory. */ ++ if (__argz_add_sep (locale_path, locale_path_len, ++ _nl_default_locale_path, ':') != 0) ++ goto bail_out; ++ } ++ ++ return 0; ++ ++ bail_out: ++ free (*locale_path); ++ *locale_path = NULL; ++ *locale_path_len = 0; ++ ++ return ENOMEM; ++} ++ + char * + setlocale (int category, const char *locale) + { + char *locale_path; + size_t locale_path_len; +- const char *locpath_var; + char *composite; + + /* Sanity check for CATEGORY argument. */ +@@ -251,17 +304,10 @@ setlocale (int category, const char *locale) + locale_path = NULL; + locale_path_len = 0; + +- locpath_var = getenv ("LOCPATH"); +- if (locpath_var != NULL && locpath_var[0] != '\0') ++ if (compute_locale_search_path (&locale_path, &locale_path_len) != 0) + { +- if (__argz_create_sep (locpath_var, ':', +- &locale_path, &locale_path_len) != 0 +- || __argz_add_sep (&locale_path, &locale_path_len, +- _nl_default_locale_path, ':') != 0) +- { +- __libc_rwlock_unlock (__libc_setlocale_lock); +- return NULL; +- } ++ __libc_rwlock_unlock (__libc_setlocale_lock); ++ return NULL; + } + + if (category == LC_ALL) +diff --git a/string/Makefile b/string/Makefile +index 8424a61..f925503 100644 +--- a/string/Makefile ++++ b/string/Makefile +@@ -38,7 +38,7 @@ routines := strcat strchr strcmp strcoll strcpy strcspn \ + swab strfry memfrob memmem rawmemchr strchrnul \ + $(addprefix argz-,append count create ctsep next \ + delete extract insert stringify \ +- addsep replace) \ ++ addsep replace suffix) \ + envz basename \ + strcoll_l strxfrm_l string-inlines memrchr \ + xpg-strerror strerror_l +diff --git a/string/argz-suffix.c b/string/argz-suffix.c +new file mode 100644 +index 0000000..505b0f2 +--- /dev/null ++++ b/string/argz-suffix.c +@@ -0,0 +1,56 @@ ++/* Copyright (C) 2015 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Ludovic Courtès . ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++ ++ ++error_t ++__argz_suffix_entries (char **argz, size_t *argz_len, const char *suffix) ++ ++{ ++ size_t suffix_len = strlen (suffix); ++ size_t count = __argz_count (*argz, *argz_len); ++ size_t new_argz_len = *argz_len + count * suffix_len; ++ char *new_argz = malloc (new_argz_len); ++ ++ if (new_argz) ++ { ++ char *p = new_argz, *entry; ++ ++ for (entry = *argz; ++ entry != NULL; ++ entry = argz_next (*argz, *argz_len, entry)) ++ { ++ p = stpcpy (p, entry); ++ p = stpcpy (p, suffix); ++ p++; ++ } ++ ++ free (*argz); ++ *argz = new_argz; ++ *argz_len = new_argz_len; ++ ++ return 0; ++ } ++ else ++ return ENOMEM; ++} ++weak_alias (__argz_suffix_entries, argz_suffix_entries) +diff --git a/string/argz.h b/string/argz.h +index bb62a31..d276a35 100644 +--- a/string/argz.h ++++ b/string/argz.h +@@ -134,6 +134,16 @@ extern error_t argz_replace (char **__restrict __argz, + const char *__restrict __str, + const char *__restrict __with, + unsigned int *__restrict __replace_count); ++ ++/* Suffix each entry of ARGZ & ARGZ_LEN with SUFFIX. Return 0 on success, ++ and ENOMEN if memory cannot be allocated. */ ++extern error_t __argz_suffix_entries (char **__restrict __argz, ++ size_t *__restrict __argz_len, ++ const char *__restrict __suffix); ++extern error_t argz_suffix_entries (char **__restrict __argz, ++ size_t *__restrict __argz_len, ++ const char *__restrict __suffix); ++ + + /* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there + are no more. If entry is NULL, then the first entry is returned. This diff --git a/contrib/guix/patches/lief-fix-ppc64-nx-default.patch b/contrib/guix/patches/lief-fix-ppc64-nx-default.patch new file mode 100644 index 000000000000..101bc1ddc0cf --- /dev/null +++ b/contrib/guix/patches/lief-fix-ppc64-nx-default.patch @@ -0,0 +1,29 @@ +Correct default for Binary::has_nx on ppc64 + +From the Linux kernel source: + + * This is the default if a program doesn't have a PT_GNU_STACK + * program header entry. The PPC64 ELF ABI has a non executable stack + * stack by default, so in the absence of a PT_GNU_STACK program header + * we turn execute permission off. + +This patch can be dropped the next time we update LIEF. + +diff --git a/src/ELF/Binary.cpp b/src/ELF/Binary.cpp +index a90be1ab..fd2d9764 100644 +--- a/src/ELF/Binary.cpp ++++ b/src/ELF/Binary.cpp +@@ -1084,7 +1084,12 @@ bool Binary::has_nx() const { + return segment->type() == SEGMENT_TYPES::PT_GNU_STACK; + }); + if (it_stack == std::end(segments_)) { +- return false; ++ if (header().machine_type() == ARCH::EM_PPC64) { ++ // The PPC64 ELF ABI has a non-executable stack by default. ++ return true; ++ } else { ++ return false; ++ } + } + + return !(*it_stack)->has(ELF_SEGMENT_FLAGS::PF_X); diff --git a/contrib/guix/patches/nsis-disable-installer-reloc.patch b/contrib/guix/patches/nsis-disable-installer-reloc.patch new file mode 100644 index 000000000000..4914527e56be --- /dev/null +++ b/contrib/guix/patches/nsis-disable-installer-reloc.patch @@ -0,0 +1,30 @@ +Patch NSIS so that it's installer stubs, produced at NSIS build time, +do not contain .reloc sections, which will exist by default when using +binutils/ld 2.36+. + +This ultimately fixes an issue when running the installer with the +"Force randomization for images (Mandatory ASLR)" setting active. + +This patch has not yet been sent upstream, because it's not clear if this +is the best fix, for the underlying issue, which seems to be that makensis +doesn't account for .reloc sections when it builds installers. + +The existence of a reloc section shouldn't be a problem, and, if anything, +is actually a requirement for working ASLR. All other Windows binaries we +produce contain them, and function correctly when under the same +"Force randomization for images (Mandatory ASLR)" setting. + +See: +https://github.com/bitcoin/bitcoin/issues/25726 +https://sourceforge.net/p/nsis/bugs/1131/ + +--- a/SCons/Config/gnu ++++ b/SCons/Config/gnu +@@ -102,6 +102,7 @@ stub_env.Append(LINKFLAGS = ['-mwindows']) # build windows executables + stub_env.Append(LINKFLAGS = ['$NODEFLIBS_FLAG']) # no standard libraries + stub_env.Append(LINKFLAGS = ['$ALIGN_FLAG']) # 512 bytes align + stub_env.Append(LINKFLAGS = ['$MAP_FLAG']) # generate map file ++stub_env.Append(LINKFLAGS = ['-Wl,--disable-reloc-section']) + + conf = FlagsConfigure(stub_env) + conf.CheckCompileFlag('-fno-tree-loop-distribute-patterns') # GCC 10: Don't generate msvcrt!memmove calls (bug #1248) diff --git a/contrib/guix/patches/nsis-gcc-10-memmove.patch b/contrib/guix/patches/nsis-gcc-10-memmove.patch new file mode 100644 index 000000000000..a1aadfd4f361 --- /dev/null +++ b/contrib/guix/patches/nsis-gcc-10-memmove.patch @@ -0,0 +1,23 @@ +commit f6df41524e703dc471e283e566a48e05a735b7f2 +Author: Anders +Date: Sat Jun 27 23:18:45 2020 +0000 + + Don't let GCC 10 generate memmove calls (bug #1248) + + git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@7189 212acab6-be3b-0410-9dea-997c60f758d6 + +diff --git a/SCons/Config/gnu b/SCons/Config/gnu +index bfcb362d..21fa446b 100644 +--- a/SCons/Config/gnu ++++ b/SCons/Config/gnu +@@ -103,6 +103,10 @@ stub_env.Append(LINKFLAGS = ['$NODEFLIBS_FLAG']) # no standard libraries + stub_env.Append(LINKFLAGS = ['$ALIGN_FLAG']) # 512 bytes align + stub_env.Append(LINKFLAGS = ['$MAP_FLAG']) # generate map file + ++conf = FlagsConfigure(stub_env) ++conf.CheckCompileFlag('-fno-tree-loop-distribute-patterns') # GCC 10: Don't generate msvcrt!memmove calls (bug #1248) ++conf.Finish() ++ + stub_uenv = stub_env.Clone() + stub_uenv.Append(CPPDEFINES = ['_UNICODE', 'UNICODE']) + diff --git a/contrib/guix/patches/oscrypto-hard-code-openssl.patch b/contrib/guix/patches/oscrypto-hard-code-openssl.patch new file mode 100644 index 000000000000..32027f2d09af --- /dev/null +++ b/contrib/guix/patches/oscrypto-hard-code-openssl.patch @@ -0,0 +1,13 @@ +diff --git a/oscrypto/__init__.py b/oscrypto/__init__.py +index eb27313..371ab24 100644 +--- a/oscrypto/__init__.py ++++ b/oscrypto/__init__.py +@@ -302,3 +302,8 @@ def load_order(): + 'oscrypto._win.tls', + 'oscrypto.tls', + ] ++ ++ ++paths = '@GUIX_OSCRYPTO_USE_OPENSSL@'.split(',') ++assert len(paths) == 2, 'Value for OSCRYPTO_USE_OPENSSL env var must be two paths separated by a comma' ++use_openssl(*paths) diff --git a/contrib/guix/patches/vmov-alignment.patch b/contrib/guix/patches/vmov-alignment.patch new file mode 100644 index 000000000000..072f76eafd38 --- /dev/null +++ b/contrib/guix/patches/vmov-alignment.patch @@ -0,0 +1,267 @@ +Description: Use unaligned VMOV instructions +Author: Stephen Kitt +Bug-Debian: https://bugs.debian.org/939559 + +Based on a patch originally by Claude Heiland-Allen + +--- a/gcc/config/i386/sse.md ++++ b/gcc/config/i386/sse.md +@@ -1058,17 +1058,11 @@ + { + if (FLOAT_MODE_P (GET_MODE_INNER (mode))) + { +- if (misaligned_operand (operands[1], mode)) +- return "vmovu\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; +- else +- return "vmova\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; ++ return "vmovu\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; + } + else + { +- if (misaligned_operand (operands[1], mode)) +- return "vmovdqu\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; +- else +- return "vmovdqa\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; ++ return "vmovdqu\t{%1, %0%{%3%}%N2|%0%{%3%}%N2, %1}"; + } + } + [(set_attr "type" "ssemov") +@@ -1184,17 +1178,11 @@ + { + if (FLOAT_MODE_P (GET_MODE_INNER (mode))) + { +- if (misaligned_operand (operands[0], mode)) +- return "vmovu\t{%1, %0%{%2%}|%0%{%2%}, %1}"; +- else +- return "vmova\t{%1, %0%{%2%}|%0%{%2%}, %1}"; ++ return "vmovu\t{%1, %0%{%2%}|%0%{%2%}, %1}"; + } + else + { +- if (misaligned_operand (operands[0], mode)) +- return "vmovdqu\t{%1, %0%{%2%}|%0%{%2%}, %1}"; +- else +- return "vmovdqa\t{%1, %0%{%2%}|%0%{%2%}, %1}"; ++ return "vmovdqu\t{%1, %0%{%2%}|%0%{%2%}, %1}"; + } + } + [(set_attr "type" "ssemov") +@@ -7806,7 +7794,7 @@ + "TARGET_SSE && !(MEM_P (operands[0]) && MEM_P (operands[1]))" + "@ + %vmovlps\t{%1, %0|%q0, %1} +- %vmovaps\t{%1, %0|%0, %1} ++ %vmovups\t{%1, %0|%0, %1} + %vmovlps\t{%1, %d0|%d0, %q1}" + [(set_attr "type" "ssemov") + (set_attr "prefix" "maybe_vex") +@@ -13997,29 +13985,15 @@ + switch (mode) + { + case E_V8DFmode: +- if (misaligned_operand (operands[2], mode)) +- return "vmovupd\t{%2, %x0|%x0, %2}"; +- else +- return "vmovapd\t{%2, %x0|%x0, %2}"; ++ return "vmovupd\t{%2, %x0|%x0, %2}"; + case E_V16SFmode: +- if (misaligned_operand (operands[2], mode)) +- return "vmovups\t{%2, %x0|%x0, %2}"; +- else +- return "vmovaps\t{%2, %x0|%x0, %2}"; ++ return "vmovups\t{%2, %x0|%x0, %2}"; + case E_V8DImode: +- if (misaligned_operand (operands[2], mode)) +- return which_alternative == 2 ? "vmovdqu64\t{%2, %x0|%x0, %2}" ++ return which_alternative == 2 ? "vmovdqu64\t{%2, %x0|%x0, %2}" + : "vmovdqu\t{%2, %x0|%x0, %2}"; +- else +- return which_alternative == 2 ? "vmovdqa64\t{%2, %x0|%x0, %2}" +- : "vmovdqa\t{%2, %x0|%x0, %2}"; + case E_V16SImode: +- if (misaligned_operand (operands[2], mode)) +- return which_alternative == 2 ? "vmovdqu32\t{%2, %x0|%x0, %2}" ++ return which_alternative == 2 ? "vmovdqu32\t{%2, %x0|%x0, %2}" + : "vmovdqu\t{%2, %x0|%x0, %2}"; +- else +- return which_alternative == 2 ? "vmovdqa32\t{%2, %x0|%x0, %2}" +- : "vmovdqa\t{%2, %x0|%x0, %2}"; + default: + gcc_unreachable (); + } +@@ -21225,63 +21199,27 @@ + switch (get_attr_mode (insn)) + { + case MODE_V16SF: +- if (misaligned_operand (operands[1], mode)) +- return "vmovups\t{%1, %t0|%t0, %1}"; +- else +- return "vmovaps\t{%1, %t0|%t0, %1}"; ++ return "vmovups\t{%1, %t0|%t0, %1}"; + case MODE_V8DF: +- if (misaligned_operand (operands[1], mode)) +- return "vmovupd\t{%1, %t0|%t0, %1}"; +- else +- return "vmovapd\t{%1, %t0|%t0, %1}"; ++ return "vmovupd\t{%1, %t0|%t0, %1}"; + case MODE_V8SF: +- if (misaligned_operand (operands[1], mode)) +- return "vmovups\t{%1, %x0|%x0, %1}"; +- else +- return "vmovaps\t{%1, %x0|%x0, %1}"; ++ return "vmovups\t{%1, %x0|%x0, %1}"; + case MODE_V4DF: +- if (misaligned_operand (operands[1], mode)) +- return "vmovupd\t{%1, %x0|%x0, %1}"; +- else +- return "vmovapd\t{%1, %x0|%x0, %1}"; ++ return "vmovupd\t{%1, %x0|%x0, %1}"; + case MODE_XI: +- if (misaligned_operand (operands[1], mode)) +- { +- if (which_alternative == 2) +- return "vmovdqu\t{%1, %t0|%t0, %1}"; +- else if (GET_MODE_SIZE (mode) == 8) +- return "vmovdqu64\t{%1, %t0|%t0, %1}"; +- else +- return "vmovdqu32\t{%1, %t0|%t0, %1}"; +- } ++ if (which_alternative == 2) ++ return "vmovdqu\t{%1, %t0|%t0, %1}"; ++ else if (GET_MODE_SIZE (mode) == 8) ++ return "vmovdqu64\t{%1, %t0|%t0, %1}"; + else +- { +- if (which_alternative == 2) +- return "vmovdqa\t{%1, %t0|%t0, %1}"; +- else if (GET_MODE_SIZE (mode) == 8) +- return "vmovdqa64\t{%1, %t0|%t0, %1}"; +- else +- return "vmovdqa32\t{%1, %t0|%t0, %1}"; +- } ++ return "vmovdqu32\t{%1, %t0|%t0, %1}"; + case MODE_OI: +- if (misaligned_operand (operands[1], mode)) +- { +- if (which_alternative == 2) +- return "vmovdqu\t{%1, %x0|%x0, %1}"; +- else if (GET_MODE_SIZE (mode) == 8) +- return "vmovdqu64\t{%1, %x0|%x0, %1}"; +- else +- return "vmovdqu32\t{%1, %x0|%x0, %1}"; +- } ++ if (which_alternative == 2) ++ return "vmovdqu\t{%1, %x0|%x0, %1}"; ++ else if (GET_MODE_SIZE (mode) == 8) ++ return "vmovdqu64\t{%1, %x0|%x0, %1}"; + else +- { +- if (which_alternative == 2) +- return "vmovdqa\t{%1, %x0|%x0, %1}"; +- else if (GET_MODE_SIZE (mode) == 8) +- return "vmovdqa64\t{%1, %x0|%x0, %1}"; +- else +- return "vmovdqa32\t{%1, %x0|%x0, %1}"; +- } ++ return "vmovdqu32\t{%1, %x0|%x0, %1}"; + default: + gcc_unreachable (); + } +--- a/gcc/config/i386/i386.c ++++ b/gcc/config/i386/i386.c +@@ -4981,13 +4981,13 @@ + switch (type) + { + case opcode_int: +- opcode = misaligned_p ? "vmovdqu32" : "vmovdqa32"; ++ opcode = "vmovdqu32"; + break; + case opcode_float: +- opcode = misaligned_p ? "vmovups" : "vmovaps"; ++ opcode = "vmovups"; + break; + case opcode_double: +- opcode = misaligned_p ? "vmovupd" : "vmovapd"; ++ opcode = "vmovupd"; + break; + } + } +@@ -4996,16 +4996,16 @@ + switch (scalar_mode) + { + case E_SFmode: +- opcode = misaligned_p ? "%vmovups" : "%vmovaps"; ++ opcode = "%vmovups"; + break; + case E_DFmode: +- opcode = misaligned_p ? "%vmovupd" : "%vmovapd"; ++ opcode = "%vmovupd"; + break; + case E_TFmode: + if (evex_reg_p) +- opcode = misaligned_p ? "vmovdqu64" : "vmovdqa64"; ++ opcode = "vmovdqu64"; + else +- opcode = misaligned_p ? "%vmovdqu" : "%vmovdqa"; ++ opcode = "%vmovdqu"; + break; + default: + gcc_unreachable (); +@@ -5017,48 +5017,32 @@ + { + case E_QImode: + if (evex_reg_p) +- opcode = (misaligned_p +- ? (TARGET_AVX512BW +- ? "vmovdqu8" +- : "vmovdqu64") +- : "vmovdqa64"); ++ opcode = TARGET_AVX512BW ? "vmovdqu8" : "vmovdqu64"; + else +- opcode = (misaligned_p +- ? (TARGET_AVX512BW +- ? "vmovdqu8" +- : "%vmovdqu") +- : "%vmovdqa"); ++ opcode = TARGET_AVX512BW ? "vmovdqu8" : "%vmovdqu"; + break; + case E_HImode: + if (evex_reg_p) +- opcode = (misaligned_p +- ? (TARGET_AVX512BW +- ? "vmovdqu16" +- : "vmovdqu64") +- : "vmovdqa64"); ++ opcode = TARGET_AVX512BW ? "vmovdqu16" : "vmovdqu64"; + else +- opcode = (misaligned_p +- ? (TARGET_AVX512BW +- ? "vmovdqu16" +- : "%vmovdqu") +- : "%vmovdqa"); ++ opcode = TARGET_AVX512BW ? "vmovdqu16" : "%vmovdqu"; + break; + case E_SImode: + if (evex_reg_p) +- opcode = misaligned_p ? "vmovdqu32" : "vmovdqa32"; ++ opcode = "vmovdqu32"; + else +- opcode = misaligned_p ? "%vmovdqu" : "%vmovdqa"; ++ opcode = "%vmovdqu"; + break; + case E_DImode: + case E_TImode: + case E_OImode: + if (evex_reg_p) +- opcode = misaligned_p ? "vmovdqu64" : "vmovdqa64"; ++ opcode = "vmovdqu64"; + else +- opcode = misaligned_p ? "%vmovdqu" : "%vmovdqa"; ++ opcode = "%vmovdqu"; + break; + case E_XImode: +- opcode = misaligned_p ? "vmovdqu64" : "vmovdqa64"; ++ opcode = "vmovdqu64"; + break; + default: + gcc_unreachable (); diff --git a/contrib/install_db4.sh b/contrib/install_db4.sh index 9ec308f1fb4d..81541ea9160e 100755 --- a/contrib/install_db4.sh +++ b/contrib/install_db4.sh @@ -64,7 +64,7 @@ http_get "${BDB_URL}" "${BDB_VERSION}.tar.gz" "${BDB_HASH}" tar -xzvf ${BDB_VERSION}.tar.gz -C "$BDB_PREFIX" cd "${BDB_PREFIX}/${BDB_VERSION}/" -# Apply a patch necessary when building with clang and c++11 (see https://community.oracle.com/thread/3952592) +# Apply a patch necessary when building with clang and c++17 (see https://community.oracle.com/thread/3952592) CLANG_CXX11_PATCH_URL='https://gist.githubusercontent.com/LnL7/5153b251fd525fe15de69b67e63a6075/raw/7778e9364679093a32dec2908656738e16b6bdcb/clang.patch' CLANG_CXX11_PATCH_HASH='7a9a47b03fd5fb93a16ef42235fa9512db9b0829cfc3bdf90edd3ec1f44d637c' http_get "${CLANG_CXX11_PATCH_URL}" clang.patch "${CLANG_CXX11_PATCH_HASH}" diff --git a/contrib/shell/git-utils.bash b/contrib/shell/git-utils.bash new file mode 100644 index 000000000000..3a88bcf71330 --- /dev/null +++ b/contrib/shell/git-utils.bash @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +git_root() { + git rev-parse --show-toplevel 2> /dev/null +} + +git_head_version() { + local recent_tag + if recent_tag="$(git describe --exact-match HEAD 2> /dev/null)"; then + echo "${recent_tag#v}" + else + git rev-parse --short=12 HEAD + fi +} \ No newline at end of file diff --git a/contrib/shell/realpath.bash b/contrib/shell/realpath.bash new file mode 100644 index 000000000000..7ac0675d4ee0 --- /dev/null +++ b/contrib/shell/realpath.bash @@ -0,0 +1,71 @@ +#!/usr/bin/env bash + +# Based on realpath.sh written by Michael Kropat +# Found at: https://github.com/mkropat/sh-realpath/blob/65512368b8155b176b67122aa395ac580d9acc5b/realpath.sh + +bash_realpath() { + canonicalize_path "$(resolve_symlinks "$1")" +} + +resolve_symlinks() { + _resolve_symlinks "$1" +} + +_resolve_symlinks() { + _assert_no_path_cycles "$@" || return + + local dir_context path + if path=$(readlink -- "$1"); then + dir_context=$(dirname -- "$1") + _resolve_symlinks "$(_prepend_dir_context_if_necessary "$dir_context" "$path")" "$@" + else + printf '%s\n' "$1" + fi +} + +_prepend_dir_context_if_necessary() { + if [ "$1" = . ]; then + printf '%s\n' "$2" + else + _prepend_path_if_relative "$1" "$2" + fi +} + +_prepend_path_if_relative() { + case "$2" in + /* ) printf '%s\n' "$2" ;; + * ) printf '%s\n' "$1/$2" ;; + esac +} + +_assert_no_path_cycles() { + local target path + + target=$1 + shift + + for path in "$@"; do + if [ "$path" = "$target" ]; then + return 1 + fi + done +} + +canonicalize_path() { + if [ -d "$1" ]; then + _canonicalize_dir_path "$1" + else + _canonicalize_file_path "$1" + fi +} + +_canonicalize_dir_path() { + (cd "$1" 2>/dev/null && pwd -P) +} + +_canonicalize_file_path() { + local dir file + dir=$(dirname -- "$1") + file=$(basename -- "$1") + (cd "$dir" 2>/dev/null && printf '%s/%s\n' "$(pwd -P)" "$file") +} \ No newline at end of file diff --git a/daemon/Makefile.am b/daemon/Makefile.am index c0880c8a2460..cb82fb5e895a 100644 --- a/daemon/Makefile.am +++ b/daemon/Makefile.am @@ -76,7 +76,7 @@ endif .PHONY: FORCE check-symbols check-security # unigrid core # BITCOIN_CORE_H = \ - activemasternode.h \ + activegridnode.h \ accumulators.h \ accumulatorcheckpoints.h \ accumulatorcheckpoints.json.h \ @@ -129,15 +129,16 @@ BITCOIN_CORE_H = \ leveldbwrapper.h \ limitedmap.h \ main.h \ - masternode.h \ - masternode-payments.h \ - masternode-budget.h \ - masternode-sync.h \ - masternodeman.h \ - masternodeconfig.h \ + gridnode.h \ + gridnode-payments.h \ + gridnode-budget.h \ + gridnode-sync.h \ + gridnodeman.h \ + gridnodeconfig.h \ merkleblock.h \ miner.h \ mintpool.h \ + mint.h \ mruset.h \ netbase.h \ net.h \ @@ -194,7 +195,8 @@ BITCOIN_CORE_H = \ zmq/zmqabstractnotifier.h \ zmq/zmqconfig.h \ zmq/zmqnotificationinterface.h \ - zmq/zmqpublishnotifier.h + zmq/zmqpublishnotifier.h \ + restclient.h obj/build.h: FORCE @$(MKDIR_P) $(builddir)/obj @@ -222,13 +224,14 @@ libbitcoin_server_a_SOURCES = \ main.cpp \ merkleblock.cpp \ miner.cpp \ + mint.cpp\ net.cpp \ noui.cpp \ pow.cpp \ rest.cpp \ rpcblockchain.cpp \ - rpcmasternode.cpp \ - rpcmasternode-budget.cpp \ + rpcgridnode.cpp \ + rpcgridnode-budget.cpp \ rpcmining.cpp \ rpcmisc.cpp \ rpcnet.cpp \ @@ -245,6 +248,7 @@ libbitcoin_server_a_SOURCES = \ xz/xz_dec_lzma2.c \ xz/xz_dec_stream.c \ zpivchain.cpp \ + restclient.cpp \ $(BITCOIN_CORE_H) if ENABLE_ZMQ @@ -261,7 +265,7 @@ endif libbitcoin_wallet_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) libbitcoin_wallet_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libbitcoin_wallet_a_SOURCES = \ - activemasternode.cpp \ + activegridnode.cpp \ bip38.cpp \ denomination_functions.cpp \ obfuscation.cpp \ @@ -269,12 +273,12 @@ libbitcoin_wallet_a_SOURCES = \ db.cpp \ crypter.cpp \ swifttx.cpp \ - masternode.cpp \ - masternode-budget.cpp \ - masternode-payments.cpp \ - masternode-sync.cpp \ - masternodeconfig.cpp \ - masternodeman.cpp \ + gridnode.cpp \ + gridnode-budget.cpp \ + gridnode-payments.cpp \ + gridnode-sync.cpp \ + gridnodeconfig.cpp \ + gridnodeman.cpp \ mintpool.cpp \ rpcdump.cpp \ primitives/deterministicmint.cpp \ diff --git a/daemon/activegridnode.cpp b/daemon/activegridnode.cpp new file mode 100644 index 000000000000..d122a5d1b040 --- /dev/null +++ b/daemon/activegridnode.cpp @@ -0,0 +1,481 @@ +// Copyright (c) 2014-2016 The Dash developers +// Copyright (c) 2015-2018 The PIVX developers +// Copyright (c) 2018-2019 The UNIGRID organization +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "activegridnode.h" +#include "addrman.h" +#include "gridnode.h" +#include "gridnodeconfig.h" +#include "gridnodeman.h" +#include "protocol.h" +#include "spork.h" + +// +// Bootup the Gridnode, look for a 10000 UNIGRID input and register on the network +// +void CActiveGridnode::ManageStatus() +{ + std::string errorMessage; + + if (!fGridnode) return; + + if (fDebug) LogPrintf("CActiveGridnode::ManageStatus() - Begin\n"); + + //need correct blocks to send ping + if (Params().NetworkID() != CBaseChainParams::REGTEST && !GridnodeSync.IsBlockchainSynced()) { + status = ACTIVE_GRIDNODE_SYNC_IN_PROCESS; + LogPrintf("CActiveGridnode::ManageStatus() - %s\n", GetStatus()); + return; + } + + if (status == ACTIVE_GRIDNODE_SYNC_IN_PROCESS) status = ACTIVE_GRIDNODE_INITIAL; + + if (status == ACTIVE_GRIDNODE_INITIAL) { + CGridnode* pgn; + pgn = gnodeman.Find(pubKeyGridnode); + if (pgn != NULL) { + pgn->Check(); + if (pgn->IsEnabled() && pgn->protocolVersion == PROTOCOL_VERSION) EnableHotColdGridnode(pgn->vin, pgn->addr); + } + } + + if (status != ACTIVE_GRIDNODE_STARTED) { + // Set defaults + status = ACTIVE_GRIDNODE_NOT_CAPABLE; + notCapableReason = ""; + + if (pwalletMain->IsLocked()) { + notCapableReason = "Wallet is locked."; + LogPrintf("CActiveGridnode::ManageStatus() - not capable: %s\n", notCapableReason); + return; + } + + if (pwalletMain->GetBalance() == 0) { + notCapableReason = "Hot node, waiting for remote activation."; + LogPrintf("CActiveGridnode::ManageStatus() - not capable: %s\n", notCapableReason); + return; + } + + if (strGridnodeAddr.empty()) { + if (!GetLocal(service)) { + notCapableReason = "Can't detect external address. Please use the gridnodeaddr configuration option."; + LogPrintf("CActiveGridnode::ManageStatus() - not capable: %s\n", notCapableReason); + return; + } + } else { + service = CService(strGridnodeAddr); + } + + // The service needs the correct default port to work properly + if(!CGridnodeBroadcast::CheckDefaultPort(strGridnodeAddr, errorMessage, "CActiveGridnode::ManageStatus()")) + return; + + LogPrintf("CActiveGridnode::ManageStatus() - Checking inbound connection to '%s'\n", service.ToString()); + + CNode* pnode = ConnectNode((CAddress)service, NULL, false); + if (!pnode) { + notCapableReason = "Could not connect to " + service.ToString(); + LogPrintf("CActiveGridnode::ManageStatus() - not capable: %s\n", notCapableReason); + return; + } + pnode->Release(); + + // Choose coins to use + CPubKey pubKeyCollateralAddress; + CKey keyCollateralAddress; + + if (GetGridnodeVin(vin, pubKeyCollateralAddress, keyCollateralAddress)) { + if (GetInputAge(vin) < GRIDNODE_MIN_CONFIRMATIONS) { + status = ACTIVE_GRIDNODE_INPUT_TOO_NEW; + notCapableReason = strprintf("%s - %d confirmations", GetStatus(), GetInputAge(vin)); + LogPrintf("CActiveGridnode::ManageStatus() - %s\n", notCapableReason); + return; + } + + LOCK(pwalletMain->cs_wallet); + pwalletMain->LockCoin(vin.prevout); + + // send to all nodes + CPubKey pubKeyGridnode; + CKey keyGridnode; + + if (!obfuScationSigner.SetKey(strGridnodePrivKey, errorMessage, keyGridnode, pubKeyGridnode)) { + notCapableReason = "Error upon calling SetKey: " + errorMessage; + LogPrintf("Register::ManageStatus() - %s\n", notCapableReason); + return; + } + + CGridnodeBroadcast gnb; + if (!CreateBroadcast(vin, service, keyCollateralAddress, pubKeyCollateralAddress, keyGridnode, pubKeyGridnode, errorMessage, gnb)) { + notCapableReason = "Error on Register: " + errorMessage; + LogPrintf("CActiveGridnode::ManageStatus() - %s\n", notCapableReason); + return; + } + + //send to all peers + LogPrintf("CActiveGridnode::ManageStatus() - Relay broadcast vin = %s\n", vin.ToString()); + gnb.Relay(); + + LogPrintf("CActiveGridnode::ManageStatus() - Is capable master node!\n"); + status = ACTIVE_GRIDNODE_STARTED; + + return; + } else { + notCapableReason = "Could not find suitable coins!"; + LogPrintf("CActiveGridnode::ManageStatus() - %s\n", notCapableReason); + return; + } + } + + //send to all peers + if (!SendGridnodePing(errorMessage)) { + LogPrintf("CActiveGridnode::ManageStatus() - Error on Ping: %s\n", errorMessage); + } +} + +std::string CActiveGridnode::GetStatus() +{ + switch (status) { + case ACTIVE_GRIDNODE_INITIAL: + return "Node just started, not yet activated"; + case ACTIVE_GRIDNODE_SYNC_IN_PROCESS: + return "Sync in progress. Must wait until sync is complete to start Gridnode"; + case ACTIVE_GRIDNODE_INPUT_TOO_NEW: + return strprintf("Gridnode input must have at least %d confirmations", GRIDNODE_MIN_CONFIRMATIONS); + case ACTIVE_GRIDNODE_NOT_CAPABLE: + return "Not capable gridnode: " + notCapableReason; + case ACTIVE_GRIDNODE_STARTED: + return "Gridnode successfully started"; + default: + return "unknown"; + } +} + +bool CActiveGridnode::SendGridnodePing(std::string& errorMessage) +{ + if (status != ACTIVE_GRIDNODE_STARTED) { + errorMessage = "Gridnode is not in a running status"; + return false; + } + + CPubKey pubKeyGridnode; + CKey keyGridnode; + + if (!obfuScationSigner.SetKey(strGridnodePrivKey, errorMessage, keyGridnode, pubKeyGridnode)) { + errorMessage = strprintf("Error upon calling SetKey: %s\n", errorMessage); + return false; + } + + LogPrintf("CActiveGridnode::SendGridnodePing() - Relay Gridnode Ping vin = %s\n", vin.ToString()); + + CGridnodePing gnp(vin); + if (!gnp.Sign(keyGridnode, pubKeyGridnode)) { + errorMessage = "Couldn't sign Gridnode Ping"; + return false; + } + + // Update lastPing for our gridnode in Gridnode list + CGridnode* pgn = gnodeman.Find(vin); + if (pgn != NULL) { + if (pgn->IsPingedWithin(GRIDNODE_PING_SECONDS, gnp.sigTime)) { + errorMessage = "Too early to send Gridnode Ping"; + return false; + } + + pgn->lastPing = gnp; + gnodeman.mapSeenGridnodePing.insert(make_pair(gnp.GetHash(), gnp)); + + //gnodeman.mapSeenGridnodeBroadcast.lastPing is probably outdated, so we'll update it + CGridnodeBroadcast gnb(*pgn); + uint256 hash = gnb.GetHash(); + if (gnodeman.mapSeenGridnodeBroadcast.count(hash)) gnodeman.mapSeenGridnodeBroadcast[hash].lastPing = gnp; + + gnp.Relay(); + + /* + * IT'S SAFE TO REMOVE THIS IN FURTHER VERSIONS + * AFTER MIGRATION TO V12 IS DONE + */ + + if (IsSporkActive(SPORK_10_GRIDNODE_PAY_UPDATED_NODES)) return true; + // for migration purposes ping our node on old Gridnodes network too + std::string retErrorMessage; + std::vector vchGridnodeSignature; + int64_t GridnodeSignatureTime = GetAdjustedTime(); + + std::string strMessage = service.ToString() + boost::lexical_cast(GridnodeSignatureTime) + boost::lexical_cast(false); + + if (!obfuScationSigner.SignMessage(strMessage, retErrorMessage, vchGridnodeSignature, keyGridnode)) { + errorMessage = "dseep sign message failed: " + retErrorMessage; + return false; + } + + if (!obfuScationSigner.VerifyMessage(pubKeyGridnode, vchGridnodeSignature, strMessage, retErrorMessage)) { + errorMessage = "dseep verify message failed: " + retErrorMessage; + return false; + } + + LogPrint("gridnode", "dseep - relaying from active gn, %s \n", vin.ToString().c_str()); + LOCK(cs_vNodes); + BOOST_FOREACH (CNode* pnode, vNodes) + pnode->PushMessage("dseep", vin, vchGridnodeSignature, GridnodeSignatureTime, false); + + /* + * END OF "REMOVE" + */ + + return true; + } else { + // Seems like we are trying to send a ping while the Gridnode is not registered in the network + errorMessage = "Obfuscation Gridnode List doesn't include our Gridnode, shutting down Gridnode pinging service! " + vin.ToString(); + status = ACTIVE_GRIDNODE_NOT_CAPABLE; + notCapableReason = errorMessage; + return false; + } +} + +bool CActiveGridnode::CreateBroadcast(std::string strService, std::string strKeyGridnode, std::string strTxHash, std::string strOutputIndex, std::string& errorMessage, CGridnodeBroadcast &gnb, bool fOffline) +{ + CTxIn vin; + CPubKey pubKeyCollateralAddress; + CKey keyCollateralAddress; + CPubKey pubKeyGridnode; + CKey keyGridnode; + + //need correct blocks to send ping + if (!fOffline && !GridnodeSync.IsBlockchainSynced()) { + errorMessage = "Sync in progress. Must wait until sync is complete to start Gridnode"; + LogPrintf("CActiveGridnode::CreateBroadcast() - %s\n", errorMessage); + return false; + } + + if (!obfuScationSigner.SetKey(strKeyGridnode, errorMessage, keyGridnode, pubKeyGridnode)) { + errorMessage = strprintf("Can't find keys for gridnode %s - %s", strService, errorMessage); + LogPrintf("CActiveGridnode::CreateBroadcast() - %s\n", errorMessage); + return false; + } + + if (!GetGridnodeVin(vin, pubKeyCollateralAddress, keyCollateralAddress, strTxHash, strOutputIndex)) { + errorMessage = strprintf("Could not allocate vin %s:%s for gridnode %s", strTxHash, strOutputIndex, strService); + LogPrintf("CActiveGridnode::CreateBroadcast() - %s\n", errorMessage); + return false; + } + + CService service = CService(strService); + + // The service needs the correct default port to work properly + if(!CGridnodeBroadcast::CheckDefaultPort(strService, errorMessage, "CActiveGridnode::CreateBroadcast()")) + return false; + + addrman.Add(CAddress(service), CNetAddr("127.0.0.1"), 2 * 60 * 60); + + return CreateBroadcast(vin, CService(strService), keyCollateralAddress, pubKeyCollateralAddress, keyGridnode, pubKeyGridnode, errorMessage, gnb); +} + +bool CActiveGridnode::CreateBroadcast(CTxIn vin, CService service, CKey keyCollateralAddress, CPubKey pubKeyCollateralAddress, CKey keyGridnode, CPubKey pubKeyGridnode, std::string& errorMessage, CGridnodeBroadcast &gnb) +{ + // wait for reindex and/or import to finish + if (fImporting || fReindex) return false; + + CGridnodePing gnp(vin); + if (!gnp.Sign(keyGridnode, pubKeyGridnode)) { + errorMessage = strprintf("Failed to sign ping, vin: %s", vin.ToString()); + LogPrintf("CActiveGridnode::CreateBroadcast() - %s\n", errorMessage); + gnb = CGridnodeBroadcast(); + return false; + } + + gnb = CGridnodeBroadcast(service, vin, pubKeyCollateralAddress, pubKeyGridnode, PROTOCOL_VERSION); + gnb.lastPing = gnp; + if (!gnb.Sign(keyCollateralAddress)) { + errorMessage = strprintf("Failed to sign broadcast, vin: %s", vin.ToString()); + LogPrintf("CActiveGridnode::CreateBroadcast() - %s\n", errorMessage); + gnb = CGridnodeBroadcast(); + return false; + } + + /* + * IT'S SAFE TO REMOVE THIS IN FURTHER VERSIONS + * AFTER MIGRATION TO V12 IS DONE + */ + + if (IsSporkActive(SPORK_10_GRIDNODE_PAY_UPDATED_NODES)) return true; + // for migration purposes inject our node in old Gridnodes' list too + std::string retErrorMessage; + std::vector vchGridnodeSignature; + int64_t GridnodeSignatureTime = GetAdjustedTime(); + std::string donationAddress = ""; + int donationPercantage = 0; + + std::string vchPubKey(pubKeyCollateralAddress.begin(), pubKeyCollateralAddress.end()); + std::string vchPubKey2(pubKeyGridnode.begin(), pubKeyGridnode.end()); + + std::string strMessage = service.ToString() + boost::lexical_cast(GridnodeSignatureTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(PROTOCOL_VERSION) + donationAddress + boost::lexical_cast(donationPercantage); + + if (!obfuScationSigner.SignMessage(strMessage, retErrorMessage, vchGridnodeSignature, keyCollateralAddress)) { + errorMessage = "dsee sign message failed: " + retErrorMessage; + LogPrintf("CActiveGridnode::Register() - Error: %s\n", errorMessage.c_str()); + return false; + } + + if (!obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, vchGridnodeSignature, strMessage, retErrorMessage)) { + errorMessage = "dsee verify message failed: " + retErrorMessage; + LogPrintf("CActiveGridnode::Register() - Error: %s\n", errorMessage.c_str()); + return false; + } + + LOCK(cs_vNodes); + BOOST_FOREACH (CNode* pnode, vNodes) + pnode->PushMessage("dsee", vin, service, vchGridnodeSignature, GridnodeSignatureTime, pubKeyCollateralAddress, pubKeyGridnode, -1, -1, GridnodeSignatureTime, PROTOCOL_VERSION, donationAddress, donationPercantage); + + /* + * END OF "REMOVE" + */ + + return true; +} + +bool CActiveGridnode::GetGridnodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey) +{ + return GetGridnodeVin(vin, pubkey, secretKey, "", ""); +} + +bool CActiveGridnode::GetGridnodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey, std::string strTxHash, std::string strOutputIndex) +{ + // wait for reindex and/or import to finish + if (fImporting || fReindex) return false; + + // Find possible candidates + TRY_LOCK(pwalletMain->cs_wallet, fWallet); + if (!fWallet) return false; + + vector possibleCoins = SelectCoinsGridnode(); + COutput* selectedOutput; + + // Find the vin + if (!strTxHash.empty()) { + // Let's find it + uint256 txHash(strTxHash); + int outputIndex; + try { + outputIndex = std::stoi(strOutputIndex.c_str()); + } catch (const std::exception& e) { + LogPrintf("%s: %s on strOutputIndex\n", __func__, e.what()); + return false; + } + + bool found = false; + BOOST_FOREACH (COutput& out, possibleCoins) { + if (out.tx->GetHash() == txHash && out.i == outputIndex) { + selectedOutput = &out; + found = true; + break; + } + } + if (!found) { + LogPrintf("CActiveGridnode::GetGridnodeVin - Could not locate valid vin\n"); + return false; + } + } else { + // No output specified, Select the first one + if (possibleCoins.size() > 0) { + selectedOutput = &possibleCoins[0]; + } else { + LogPrintf("CActiveGridnode::GetGridnodeVin - Could not locate specified vin from possible list\n"); + return false; + } + } + + // At this point we have a selected output, retrieve the associated info + return GetVinFromOutput(*selectedOutput, vin, pubkey, secretKey); +} + + +// Extract Gridnode vin information from output +bool CActiveGridnode::GetVinFromOutput(COutput out, CTxIn& vin, CPubKey& pubkey, CKey& secretKey) +{ + // wait for reindex and/or import to finish + if (fImporting || fReindex) return false; + + CScript pubScript; + + vin = CTxIn(out.tx->GetHash(), out.i); + pubScript = out.tx->vout[out.i].scriptPubKey; // the inputs PubKey + + CTxDestination address1; + ExtractDestination(pubScript, address1); + CBitcoinAddress address2(address1); + + CKeyID keyID; + if (!address2.GetKeyID(keyID)) { + LogPrintf("CActiveGridnode::GetGridnodeVin - Address does not refer to a key\n"); + return false; + } + + if (!pwalletMain->GetKey(keyID, secretKey)) { + LogPrintf("CActiveGridnode::GetGridnodeVin - Private key for address is not known\n"); + return false; + } + + pubkey = secretKey.GetPubKey(); + return true; +} + +// get all possible outputs for running Gridnode +vector CActiveGridnode::SelectCoinsGridnode() +{ + vector vCoins; + vector filteredCoins; + vector confLockedCoins; + + // Temporary unlock GM coins from gridnode.conf + if (GetBoolArg("-gnconflock", true)) { + uint256 gnTxHash; + BOOST_FOREACH (CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { + gnTxHash.SetHex(gne.getTxHash()); + + int nIndex; + if(!gne.castOutputIndex(nIndex)) + continue; + + COutPoint outpoint = COutPoint(gnTxHash, nIndex); + confLockedCoins.push_back(outpoint); + pwalletMain->UnlockCoin(outpoint); + } + } + + // Retrieve all possible outputs + pwalletMain->AvailableCoins(vCoins); + + // Lock GM coins from gridnode.conf back if they where temporary unlocked + if (!confLockedCoins.empty()) { + BOOST_FOREACH (COutPoint outpoint, confLockedCoins) + pwalletMain->LockCoin(outpoint); + } + + // Filter + BOOST_FOREACH (const COutput& out, vCoins) { + if (out.tx->vout[out.i].nValue == Params().GridnodeCollateral()) { //TODO find the other place collateral is checked + filteredCoins.push_back(out); + } + } + return filteredCoins; +} + +// when starting a Gridnode, this can enable to run as a hot wallet with no funds +bool CActiveGridnode::EnableHotColdGridnode(CTxIn& newVin, CService& newService) +{ + if (!fGridnode) return false; + + status = ACTIVE_GRIDNODE_STARTED; + + //The values below are needed for signing gnping messages going forward + vin = newVin; + service = newService; + + LogPrintf("CActiveGridnode::EnableHotColdGridnode() - Enabled! You may shut down the cold daemon.\n"); + + return true; +} diff --git a/daemon/activegridnode.h b/daemon/activegridnode.h new file mode 100644 index 000000000000..4f1581b4dcdc --- /dev/null +++ b/daemon/activegridnode.h @@ -0,0 +1,73 @@ +// Copyright (c) 2014-2016 The Dash developers +// Copyright (c) 2015-2018 The PIVX developers +// Copyright (c) 2018-2019 The UNIGRID organization +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef ACTIVEGRIDNODE_H +#define ACTIVEGRIDNODE_H + +#include "init.h" +#include "key.h" +#include "gridnode.h" +#include "net.h" +#include "obfuscation.h" +#include "sync.h" +#include "wallet.h" + +#define ACTIVE_GRIDNODE_INITIAL 0 // initial state +#define ACTIVE_GRIDNODE_SYNC_IN_PROCESS 1 +#define ACTIVE_GRIDNODE_INPUT_TOO_NEW 2 +#define ACTIVE_GRIDNODE_NOT_CAPABLE 3 +#define ACTIVE_GRIDNODE_STARTED 4 + +// Responsible for activating the Gridnode and pinging the network +class CActiveGridnode +{ +private: + // critical section to protect the inner data structures + mutable CCriticalSection cs; + + /// Ping Gridnode + bool SendGridnodePing(std::string& errorMessage); + + /// Create Gridnode broadcast, needs to be relayed manually after that + bool CreateBroadcast(CTxIn vin, CService service, CKey key, CPubKey pubKey, CKey keyGridnode, CPubKey pubKeyGridnode, std::string& errorMessage, CGridnodeBroadcast &gnb); + + /// Get 10000 UNIGRID input that can be used for the Gridnode + bool GetGridnodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey, std::string strTxHash, std::string strOutputIndex); + bool GetVinFromOutput(COutput out, CTxIn& vin, CPubKey& pubkey, CKey& secretKey); + +public: + // Initialized by init.cpp + // Keys for the main Gridnode + CPubKey pubKeyGridnode; + + // Initialized while registering Gridnode + CTxIn vin; + CService service; + + int status; + std::string notCapableReason; + + CActiveGridnode() + { + status = ACTIVE_GRIDNODE_INITIAL; + } + + /// Manage status of main Gridnode + void ManageStatus(); + std::string GetStatus(); + + /// Create Gridnode broadcast, needs to be relayed manually after that + bool CreateBroadcast(std::string strService, std::string strKey, std::string strTxHash, std::string strOutputIndex, std::string& errorMessage, CGridnodeBroadcast &gnb, bool fOffline = false); + + /// Get 10000 UNIGRID input that can be used for the Gridnode + bool GetGridnodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey); + vector SelectCoinsGridnode(); + + /// Enable cold wallet mode (run a Gridnode with no funds) + bool EnableHotColdGridnode(CTxIn& vin, CService& addr); +}; + +#endif diff --git a/daemon/activemasternode.cpp b/daemon/activemasternode.cpp deleted file mode 100644 index afc750dd933e..000000000000 --- a/daemon/activemasternode.cpp +++ /dev/null @@ -1,481 +0,0 @@ -// Copyright (c) 2014-2016 The Dash developers -// Copyright (c) 2015-2018 The PIVX developers -// Copyright (c) 2018-2019 The UNIGRID organization -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "activemasternode.h" -#include "addrman.h" -#include "masternode.h" -#include "masternodeconfig.h" -#include "masternodeman.h" -#include "protocol.h" -#include "spork.h" - -// -// Bootup the Masternode, look for a 10000 UNIGRID input and register on the network -// -void CActiveMasternode::ManageStatus() -{ - std::string errorMessage; - - if (!fMasterNode) return; - - if (fDebug) LogPrintf("CActiveMasternode::ManageStatus() - Begin\n"); - - //need correct blocks to send ping - if (Params().NetworkID() != CBaseChainParams::REGTEST && !masternodeSync.IsBlockchainSynced()) { - status = ACTIVE_MASTERNODE_SYNC_IN_PROCESS; - LogPrintf("CActiveMasternode::ManageStatus() - %s\n", GetStatus()); - return; - } - - if (status == ACTIVE_MASTERNODE_SYNC_IN_PROCESS) status = ACTIVE_MASTERNODE_INITIAL; - - if (status == ACTIVE_MASTERNODE_INITIAL) { - CMasternode* pmn; - pmn = mnodeman.Find(pubKeyMasternode); - if (pmn != NULL) { - pmn->Check(); - if (pmn->IsEnabled() && pmn->protocolVersion == PROTOCOL_VERSION) EnableHotColdMasterNode(pmn->vin, pmn->addr); - } - } - - if (status != ACTIVE_MASTERNODE_STARTED) { - // Set defaults - status = ACTIVE_MASTERNODE_NOT_CAPABLE; - notCapableReason = ""; - - if (pwalletMain->IsLocked()) { - notCapableReason = "Wallet is locked."; - LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason); - return; - } - - if (pwalletMain->GetBalance() == 0) { - notCapableReason = "Hot node, waiting for remote activation."; - LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason); - return; - } - - if (strMasterNodeAddr.empty()) { - if (!GetLocal(service)) { - notCapableReason = "Can't detect external address. Please use the masternodeaddr configuration option."; - LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason); - return; - } - } else { - service = CService(strMasterNodeAddr); - } - - // The service needs the correct default port to work properly - if(!CMasternodeBroadcast::CheckDefaultPort(strMasterNodeAddr, errorMessage, "CActiveMasternode::ManageStatus()")) - return; - - LogPrintf("CActiveMasternode::ManageStatus() - Checking inbound connection to '%s'\n", service.ToString()); - - CNode* pnode = ConnectNode((CAddress)service, NULL, false); - if (!pnode) { - notCapableReason = "Could not connect to " + service.ToString(); - LogPrintf("CActiveMasternode::ManageStatus() - not capable: %s\n", notCapableReason); - return; - } - pnode->Release(); - - // Choose coins to use - CPubKey pubKeyCollateralAddress; - CKey keyCollateralAddress; - - if (GetMasterNodeVin(vin, pubKeyCollateralAddress, keyCollateralAddress)) { - if (GetInputAge(vin) < MASTERNODE_MIN_CONFIRMATIONS) { - status = ACTIVE_MASTERNODE_INPUT_TOO_NEW; - notCapableReason = strprintf("%s - %d confirmations", GetStatus(), GetInputAge(vin)); - LogPrintf("CActiveMasternode::ManageStatus() - %s\n", notCapableReason); - return; - } - - LOCK(pwalletMain->cs_wallet); - pwalletMain->LockCoin(vin.prevout); - - // send to all nodes - CPubKey pubKeyMasternode; - CKey keyMasternode; - - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode)) { - notCapableReason = "Error upon calling SetKey: " + errorMessage; - LogPrintf("Register::ManageStatus() - %s\n", notCapableReason); - return; - } - - CMasternodeBroadcast mnb; - if (!CreateBroadcast(vin, service, keyCollateralAddress, pubKeyCollateralAddress, keyMasternode, pubKeyMasternode, errorMessage, mnb)) { - notCapableReason = "Error on Register: " + errorMessage; - LogPrintf("CActiveMasternode::ManageStatus() - %s\n", notCapableReason); - return; - } - - //send to all peers - LogPrintf("CActiveMasternode::ManageStatus() - Relay broadcast vin = %s\n", vin.ToString()); - mnb.Relay(); - - LogPrintf("CActiveMasternode::ManageStatus() - Is capable master node!\n"); - status = ACTIVE_MASTERNODE_STARTED; - - return; - } else { - notCapableReason = "Could not find suitable coins!"; - LogPrintf("CActiveMasternode::ManageStatus() - %s\n", notCapableReason); - return; - } - } - - //send to all peers - if (!SendMasternodePing(errorMessage)) { - LogPrintf("CActiveMasternode::ManageStatus() - Error on Ping: %s\n", errorMessage); - } -} - -std::string CActiveMasternode::GetStatus() -{ - switch (status) { - case ACTIVE_MASTERNODE_INITIAL: - return "Node just started, not yet activated"; - case ACTIVE_MASTERNODE_SYNC_IN_PROCESS: - return "Sync in progress. Must wait until sync is complete to start Masternode"; - case ACTIVE_MASTERNODE_INPUT_TOO_NEW: - return strprintf("Masternode input must have at least %d confirmations", MASTERNODE_MIN_CONFIRMATIONS); - case ACTIVE_MASTERNODE_NOT_CAPABLE: - return "Not capable masternode: " + notCapableReason; - case ACTIVE_MASTERNODE_STARTED: - return "Masternode successfully started"; - default: - return "unknown"; - } -} - -bool CActiveMasternode::SendMasternodePing(std::string& errorMessage) -{ - if (status != ACTIVE_MASTERNODE_STARTED) { - errorMessage = "Masternode is not in a running status"; - return false; - } - - CPubKey pubKeyMasternode; - CKey keyMasternode; - - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode)) { - errorMessage = strprintf("Error upon calling SetKey: %s\n", errorMessage); - return false; - } - - LogPrintf("CActiveMasternode::SendMasternodePing() - Relay Masternode Ping vin = %s\n", vin.ToString()); - - CMasternodePing mnp(vin); - if (!mnp.Sign(keyMasternode, pubKeyMasternode)) { - errorMessage = "Couldn't sign Masternode Ping"; - return false; - } - - // Update lastPing for our masternode in Masternode list - CMasternode* pmn = mnodeman.Find(vin); - if (pmn != NULL) { - if (pmn->IsPingedWithin(MASTERNODE_PING_SECONDS, mnp.sigTime)) { - errorMessage = "Too early to send Masternode Ping"; - return false; - } - - pmn->lastPing = mnp; - mnodeman.mapSeenMasternodePing.insert(make_pair(mnp.GetHash(), mnp)); - - //mnodeman.mapSeenMasternodeBroadcast.lastPing is probably outdated, so we'll update it - CMasternodeBroadcast mnb(*pmn); - uint256 hash = mnb.GetHash(); - if (mnodeman.mapSeenMasternodeBroadcast.count(hash)) mnodeman.mapSeenMasternodeBroadcast[hash].lastPing = mnp; - - mnp.Relay(); - - /* - * IT'S SAFE TO REMOVE THIS IN FURTHER VERSIONS - * AFTER MIGRATION TO V12 IS DONE - */ - - if (IsSporkActive(SPORK_10_MASTERNODE_PAY_UPDATED_NODES)) return true; - // for migration purposes ping our node on old masternodes network too - std::string retErrorMessage; - std::vector vchMasterNodeSignature; - int64_t masterNodeSignatureTime = GetAdjustedTime(); - - std::string strMessage = service.ToString() + boost::lexical_cast(masterNodeSignatureTime) + boost::lexical_cast(false); - - if (!obfuScationSigner.SignMessage(strMessage, retErrorMessage, vchMasterNodeSignature, keyMasternode)) { - errorMessage = "dseep sign message failed: " + retErrorMessage; - return false; - } - - if (!obfuScationSigner.VerifyMessage(pubKeyMasternode, vchMasterNodeSignature, strMessage, retErrorMessage)) { - errorMessage = "dseep verify message failed: " + retErrorMessage; - return false; - } - - LogPrint("masternode", "dseep - relaying from active mn, %s \n", vin.ToString().c_str()); - LOCK(cs_vNodes); - BOOST_FOREACH (CNode* pnode, vNodes) - pnode->PushMessage("dseep", vin, vchMasterNodeSignature, masterNodeSignatureTime, false); - - /* - * END OF "REMOVE" - */ - - return true; - } else { - // Seems like we are trying to send a ping while the Masternode is not registered in the network - errorMessage = "Obfuscation Masternode List doesn't include our Masternode, shutting down Masternode pinging service! " + vin.ToString(); - status = ACTIVE_MASTERNODE_NOT_CAPABLE; - notCapableReason = errorMessage; - return false; - } -} - -bool CActiveMasternode::CreateBroadcast(std::string strService, std::string strKeyMasternode, std::string strTxHash, std::string strOutputIndex, std::string& errorMessage, CMasternodeBroadcast &mnb, bool fOffline) -{ - CTxIn vin; - CPubKey pubKeyCollateralAddress; - CKey keyCollateralAddress; - CPubKey pubKeyMasternode; - CKey keyMasternode; - - //need correct blocks to send ping - if (!fOffline && !masternodeSync.IsBlockchainSynced()) { - errorMessage = "Sync in progress. Must wait until sync is complete to start Masternode"; - LogPrintf("CActiveMasternode::CreateBroadcast() - %s\n", errorMessage); - return false; - } - - if (!obfuScationSigner.SetKey(strKeyMasternode, errorMessage, keyMasternode, pubKeyMasternode)) { - errorMessage = strprintf("Can't find keys for masternode %s - %s", strService, errorMessage); - LogPrintf("CActiveMasternode::CreateBroadcast() - %s\n", errorMessage); - return false; - } - - if (!GetMasterNodeVin(vin, pubKeyCollateralAddress, keyCollateralAddress, strTxHash, strOutputIndex)) { - errorMessage = strprintf("Could not allocate vin %s:%s for masternode %s", strTxHash, strOutputIndex, strService); - LogPrintf("CActiveMasternode::CreateBroadcast() - %s\n", errorMessage); - return false; - } - - CService service = CService(strService); - - // The service needs the correct default port to work properly - if(!CMasternodeBroadcast::CheckDefaultPort(strService, errorMessage, "CActiveMasternode::CreateBroadcast()")) - return false; - - addrman.Add(CAddress(service), CNetAddr("127.0.0.1"), 2 * 60 * 60); - - return CreateBroadcast(vin, CService(strService), keyCollateralAddress, pubKeyCollateralAddress, keyMasternode, pubKeyMasternode, errorMessage, mnb); -} - -bool CActiveMasternode::CreateBroadcast(CTxIn vin, CService service, CKey keyCollateralAddress, CPubKey pubKeyCollateralAddress, CKey keyMasternode, CPubKey pubKeyMasternode, std::string& errorMessage, CMasternodeBroadcast &mnb) -{ - // wait for reindex and/or import to finish - if (fImporting || fReindex) return false; - - CMasternodePing mnp(vin); - if (!mnp.Sign(keyMasternode, pubKeyMasternode)) { - errorMessage = strprintf("Failed to sign ping, vin: %s", vin.ToString()); - LogPrintf("CActiveMasternode::CreateBroadcast() - %s\n", errorMessage); - mnb = CMasternodeBroadcast(); - return false; - } - - mnb = CMasternodeBroadcast(service, vin, pubKeyCollateralAddress, pubKeyMasternode, PROTOCOL_VERSION); - mnb.lastPing = mnp; - if (!mnb.Sign(keyCollateralAddress)) { - errorMessage = strprintf("Failed to sign broadcast, vin: %s", vin.ToString()); - LogPrintf("CActiveMasternode::CreateBroadcast() - %s\n", errorMessage); - mnb = CMasternodeBroadcast(); - return false; - } - - /* - * IT'S SAFE TO REMOVE THIS IN FURTHER VERSIONS - * AFTER MIGRATION TO V12 IS DONE - */ - - if (IsSporkActive(SPORK_10_MASTERNODE_PAY_UPDATED_NODES)) return true; - // for migration purposes inject our node in old masternodes' list too - std::string retErrorMessage; - std::vector vchMasterNodeSignature; - int64_t masterNodeSignatureTime = GetAdjustedTime(); - std::string donationAddress = ""; - int donationPercantage = 0; - - std::string vchPubKey(pubKeyCollateralAddress.begin(), pubKeyCollateralAddress.end()); - std::string vchPubKey2(pubKeyMasternode.begin(), pubKeyMasternode.end()); - - std::string strMessage = service.ToString() + boost::lexical_cast(masterNodeSignatureTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(PROTOCOL_VERSION) + donationAddress + boost::lexical_cast(donationPercantage); - - if (!obfuScationSigner.SignMessage(strMessage, retErrorMessage, vchMasterNodeSignature, keyCollateralAddress)) { - errorMessage = "dsee sign message failed: " + retErrorMessage; - LogPrintf("CActiveMasternode::Register() - Error: %s\n", errorMessage.c_str()); - return false; - } - - if (!obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, vchMasterNodeSignature, strMessage, retErrorMessage)) { - errorMessage = "dsee verify message failed: " + retErrorMessage; - LogPrintf("CActiveMasternode::Register() - Error: %s\n", errorMessage.c_str()); - return false; - } - - LOCK(cs_vNodes); - BOOST_FOREACH (CNode* pnode, vNodes) - pnode->PushMessage("dsee", vin, service, vchMasterNodeSignature, masterNodeSignatureTime, pubKeyCollateralAddress, pubKeyMasternode, -1, -1, masterNodeSignatureTime, PROTOCOL_VERSION, donationAddress, donationPercantage); - - /* - * END OF "REMOVE" - */ - - return true; -} - -bool CActiveMasternode::GetMasterNodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey) -{ - return GetMasterNodeVin(vin, pubkey, secretKey, "", ""); -} - -bool CActiveMasternode::GetMasterNodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey, std::string strTxHash, std::string strOutputIndex) -{ - // wait for reindex and/or import to finish - if (fImporting || fReindex) return false; - - // Find possible candidates - TRY_LOCK(pwalletMain->cs_wallet, fWallet); - if (!fWallet) return false; - - vector possibleCoins = SelectCoinsMasternode(); - COutput* selectedOutput; - - // Find the vin - if (!strTxHash.empty()) { - // Let's find it - uint256 txHash(strTxHash); - int outputIndex; - try { - outputIndex = std::stoi(strOutputIndex.c_str()); - } catch (const std::exception& e) { - LogPrintf("%s: %s on strOutputIndex\n", __func__, e.what()); - return false; - } - - bool found = false; - BOOST_FOREACH (COutput& out, possibleCoins) { - if (out.tx->GetHash() == txHash && out.i == outputIndex) { - selectedOutput = &out; - found = true; - break; - } - } - if (!found) { - LogPrintf("CActiveMasternode::GetMasterNodeVin - Could not locate valid vin\n"); - return false; - } - } else { - // No output specified, Select the first one - if (possibleCoins.size() > 0) { - selectedOutput = &possibleCoins[0]; - } else { - LogPrintf("CActiveMasternode::GetMasterNodeVin - Could not locate specified vin from possible list\n"); - return false; - } - } - - // At this point we have a selected output, retrieve the associated info - return GetVinFromOutput(*selectedOutput, vin, pubkey, secretKey); -} - - -// Extract Masternode vin information from output -bool CActiveMasternode::GetVinFromOutput(COutput out, CTxIn& vin, CPubKey& pubkey, CKey& secretKey) -{ - // wait for reindex and/or import to finish - if (fImporting || fReindex) return false; - - CScript pubScript; - - vin = CTxIn(out.tx->GetHash(), out.i); - pubScript = out.tx->vout[out.i].scriptPubKey; // the inputs PubKey - - CTxDestination address1; - ExtractDestination(pubScript, address1); - CBitcoinAddress address2(address1); - - CKeyID keyID; - if (!address2.GetKeyID(keyID)) { - LogPrintf("CActiveMasternode::GetMasterNodeVin - Address does not refer to a key\n"); - return false; - } - - if (!pwalletMain->GetKey(keyID, secretKey)) { - LogPrintf("CActiveMasternode::GetMasterNodeVin - Private key for address is not known\n"); - return false; - } - - pubkey = secretKey.GetPubKey(); - return true; -} - -// get all possible outputs for running Masternode -vector CActiveMasternode::SelectCoinsMasternode() -{ - vector vCoins; - vector filteredCoins; - vector confLockedCoins; - - // Temporary unlock MN coins from masternode.conf - if (GetBoolArg("-mnconflock", true)) { - uint256 mnTxHash; - BOOST_FOREACH (CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - mnTxHash.SetHex(mne.getTxHash()); - - int nIndex; - if(!mne.castOutputIndex(nIndex)) - continue; - - COutPoint outpoint = COutPoint(mnTxHash, nIndex); - confLockedCoins.push_back(outpoint); - pwalletMain->UnlockCoin(outpoint); - } - } - - // Retrieve all possible outputs - pwalletMain->AvailableCoins(vCoins); - - // Lock MN coins from masternode.conf back if they where temporary unlocked - if (!confLockedCoins.empty()) { - BOOST_FOREACH (COutPoint outpoint, confLockedCoins) - pwalletMain->LockCoin(outpoint); - } - - // Filter - BOOST_FOREACH (const COutput& out, vCoins) { - if (out.tx->vout[out.i].nValue == Params().MasternodeCollateral()) { //exactly - filteredCoins.push_back(out); - } - } - return filteredCoins; -} - -// when starting a Masternode, this can enable to run as a hot wallet with no funds -bool CActiveMasternode::EnableHotColdMasterNode(CTxIn& newVin, CService& newService) -{ - if (!fMasterNode) return false; - - status = ACTIVE_MASTERNODE_STARTED; - - //The values below are needed for signing mnping messages going forward - vin = newVin; - service = newService; - - LogPrintf("CActiveMasternode::EnableHotColdMasterNode() - Enabled! You may shut down the cold daemon.\n"); - - return true; -} diff --git a/daemon/activemasternode.h b/daemon/activemasternode.h deleted file mode 100644 index 9f83a873e046..000000000000 --- a/daemon/activemasternode.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (c) 2014-2016 The Dash developers -// Copyright (c) 2015-2018 The PIVX developers -// Copyright (c) 2018-2019 The UNIGRID organization -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#ifndef ACTIVEMASTERNODE_H -#define ACTIVEMASTERNODE_H - -#include "init.h" -#include "key.h" -#include "masternode.h" -#include "net.h" -#include "obfuscation.h" -#include "sync.h" -#include "wallet.h" - -#define ACTIVE_MASTERNODE_INITIAL 0 // initial state -#define ACTIVE_MASTERNODE_SYNC_IN_PROCESS 1 -#define ACTIVE_MASTERNODE_INPUT_TOO_NEW 2 -#define ACTIVE_MASTERNODE_NOT_CAPABLE 3 -#define ACTIVE_MASTERNODE_STARTED 4 - -// Responsible for activating the Masternode and pinging the network -class CActiveMasternode -{ -private: - // critical section to protect the inner data structures - mutable CCriticalSection cs; - - /// Ping Masternode - bool SendMasternodePing(std::string& errorMessage); - - /// Create Masternode broadcast, needs to be relayed manually after that - bool CreateBroadcast(CTxIn vin, CService service, CKey key, CPubKey pubKey, CKey keyMasternode, CPubKey pubKeyMasternode, std::string& errorMessage, CMasternodeBroadcast &mnb); - - /// Get 10000 UNIGRID input that can be used for the Masternode - bool GetMasterNodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey, std::string strTxHash, std::string strOutputIndex); - bool GetVinFromOutput(COutput out, CTxIn& vin, CPubKey& pubkey, CKey& secretKey); - -public: - // Initialized by init.cpp - // Keys for the main Masternode - CPubKey pubKeyMasternode; - - // Initialized while registering Masternode - CTxIn vin; - CService service; - - int status; - std::string notCapableReason; - - CActiveMasternode() - { - status = ACTIVE_MASTERNODE_INITIAL; - } - - /// Manage status of main Masternode - void ManageStatus(); - std::string GetStatus(); - - /// Create Masternode broadcast, needs to be relayed manually after that - bool CreateBroadcast(std::string strService, std::string strKey, std::string strTxHash, std::string strOutputIndex, std::string& errorMessage, CMasternodeBroadcast &mnb, bool fOffline = false); - - /// Get 10000 UNIGRID input that can be used for the Masternode - bool GetMasterNodeVin(CTxIn& vin, CPubKey& pubkey, CKey& secretKey); - vector SelectCoinsMasternode(); - - /// Enable cold wallet mode (run a Masternode with no funds) - bool EnableHotColdMasterNode(CTxIn& vin, CService& addr); -}; - -#endif diff --git a/daemon/cachegrind.out.140820 b/daemon/cachegrind.out.140820 new file mode 100644 index 000000000000..d5b47105b32b --- /dev/null +++ b/daemon/cachegrind.out.140820 @@ -0,0 +1,11100 @@ +desc: I1 cache: 32768 B, 64 B, 8-way associative +desc: D1 cache: 32768 B, 64 B, 8-way associative +desc: LL cache: 3145728 B, 64 B, 12-way associative +cmd: ./unigridd +events: Ir I1mr ILmr Dr D1mr DLmr Dw D1mw DLmw +fl=/build/glibc-sMfBJT/glibc-2.31/csu/../csu/libc-start.c +fn=(below main) +137 14 1 1 0 0 0 9 0 0 +141 4 1 1 1 1 0 1 0 0 +237 2 0 0 0 0 0 0 0 0 +238 3 0 0 0 0 0 1 0 0 +260 4 0 0 2 0 0 0 0 0 +263 2 0 0 0 0 0 0 0 0 +264 5 0 0 4 0 0 1 0 0 +268 4 1 1 2 1 0 0 0 0 +283 2 0 0 0 0 0 0 0 0 +295 3 0 0 0 0 0 1 0 0 +296 2 0 0 0 0 0 0 0 0 +301 2 0 0 1 0 0 1 0 0 +302 2 1 1 1 0 0 1 0 0 +305 2 0 0 0 0 0 1 0 0 +308 6 0 0 5 1 0 1 0 0 +342 2 1 1 0 0 0 1 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/csu/init-first.c +fn=_init +52 4 1 1 0 0 0 1 0 0 +55 4 1 1 1 1 1 1 1 1 +62 5 1 1 4 2 0 0 0 0 +67 1 0 0 0 0 0 1 1 1 +68 1 0 0 0 0 0 1 0 0 +69 2 0 0 1 1 1 1 1 1 +77 2 0 0 0 0 0 1 0 0 +80 1 0 0 0 0 0 0 0 0 +85 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/ctype/ctype-info.c +fn=__ctype_init +29 1 1 1 0 0 0 0 0 0 +31 7 1 1 5 3 3 1 0 0 +33 4 0 0 2 1 0 1 0 0 +35 4 1 1 2 1 0 1 0 0 +36 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/ctype/ctype.c +fn=isspace +34 5480 9 1 2740 26 1 0 0 0 +fn=tolower +45 30 8 1 0 0 0 0 0 0 +46 120 0 0 75 28 2 0 0 0 +47 15 0 0 15 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/ifunc-memmove.h +fn=__memcpy_chk +44 28 0 0 0 0 0 0 0 0 +45 42 0 0 28 5 0 0 0 0 +48 28 0 0 0 0 0 0 0 0 +49 28 0 0 14 0 0 0 0 0 +60 28 0 0 0 0 0 0 0 0 +62 70 1 1 28 5 0 0 0 0 +fn=__memmove_chk +44 6 0 0 0 0 0 0 0 0 +45 9 0 0 6 2 0 0 0 0 +48 6 0 0 0 0 0 0 0 0 +49 6 0 0 3 0 0 0 0 0 +60 6 0 0 0 0 0 0 0 0 +62 15 1 1 6 2 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/ifunc-memset.h +fn=__memset_chk +42 35 0 0 14 3 0 0 0 0 +45 14 0 0 0 0 0 0 0 0 +46 14 0 0 7 0 0 0 0 0 +57 28 1 1 14 4 0 0 0 0 +59 35 0 0 7 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/memcpy_chk.c +fn=__memcpy_chk +29 14 1 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/memmove_chk.c +fn=__memmove_chk +29 3 1 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/memset_chk.c +fn=__memset_chk +29 7 1 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/debug/fprintf_chk.c +fn=__fprintf_chk +25 60 11 3 5 0 0 20 0 0 +28 20 0 0 0 0 0 0 0 0 +32 30 3 1 0 0 0 20 0 0 +33 10 0 0 0 0 0 5 0 0 +37 25 0 0 15 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/dlfcn/dlerror.c +fn=check_free +194 6 1 1 1 0 0 2 0 0 +195 3 0 0 1 1 1 0 0 0 +213 6 1 1 4 0 0 0 0 0 +fn=fini +219 1 1 1 0 0 0 0 0 0 +220 2 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/dlfcn/dlfcn.c +fn=init +28 1 1 1 0 0 0 0 0 0 +29 1 0 0 0 0 0 1 1 1 +30 1 0 0 0 0 0 1 0 0 +31 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../elf/dl-runtime.c +fn=_dl_fixup +66 860 22 4 0 0 0 215 0 0 +68 215 0 0 215 7 1 0 0 0 +69 430 0 0 430 22 2 0 0 0 +72 1075 0 0 430 31 7 0 0 0 +73 1505 0 0 430 221 54 215 0 0 +75 645 12 2 430 33 4 0 0 0 +80 430 0 0 0 0 0 0 0 0 +84 430 0 0 215 214 113 0 0 0 +86 860 14 2 215 50 18 0 0 0 +88 645 0 0 215 19 3 0 0 0 +92 430 0 0 430 206 42 0 0 0 +93 860 0 0 215 11 1 0 0 0 +101 215 0 0 0 0 0 0 0 0 +102 645 0 0 215 2 0 0 0 0 +112 2365 11 2 430 14 5 645 0 0 +116 1075 0 0 645 0 0 0 0 0 +126 1935 0 0 645 10 2 0 0 0 +133 215 0 0 215 0 0 0 0 0 +141 860 12 2 215 0 0 0 0 0 +145 645 0 0 215 9 1 0 0 0 +149 645 0 0 430 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../elf/dl-sysdep.c +fn=_dl_sysdep_start +89 9 2 2 0 0 0 6 1 1 +90 2 0 0 1 1 1 0 0 0 +91 1 0 0 0 0 0 0 0 0 +113 1 0 0 0 0 0 1 0 0 +114 198 1 1 64 8 8 4 3 3 +117 2 0 0 0 0 0 1 0 0 +118 1 0 0 0 0 0 1 0 0 +120 137 6 6 36 6 6 19 1 1 +121 108 1 1 17 3 3 0 0 0 +124 1 1 1 1 0 0 0 0 0 +127 1 0 0 1 0 0 0 0 0 +130 1 1 1 1 0 0 0 0 0 +131 1 0 0 0 0 0 0 0 0 +133 1 0 0 1 0 0 0 0 0 +134 1 0 0 0 0 0 0 0 0 +154 1 1 1 1 0 0 0 0 0 +155 1 0 0 0 0 0 0 0 0 +157 1 0 0 1 0 0 0 0 0 +158 1 0 0 0 0 0 0 0 0 +160 2 2 2 1 0 0 1 0 0 +161 1 0 0 0 0 0 1 0 0 +166 2 0 0 1 0 0 1 0 0 +167 1 0 0 0 0 0 1 0 0 +182 2 0 0 1 0 0 1 0 0 +183 2 0 0 0 0 0 1 0 0 +223 1 1 1 0 0 0 1 1 1 +234 3 0 0 1 0 0 0 0 0 +235 2 1 1 0 0 0 2 0 0 +237 5 0 0 0 0 0 1 0 0 +249 3 0 0 1 0 0 0 0 0 +252 5 0 0 1 0 0 1 0 0 +253 1 1 1 1 1 1 0 0 0 +254 8 1 1 7 1 1 0 0 0 +fn=_dl_sysdep_start_cleanup +258 1 1 1 0 0 0 0 0 0 +259 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../elf/dl-tls.c +fn=_dl_add_to_slotinfo +887 48 1 1 0 0 0 24 0 0 +893 6 0 0 6 0 0 0 0 0 +896 6 0 0 6 6 0 0 0 0 +897 6 0 0 0 0 0 0 0 0 +901 18 0 0 6 6 0 0 0 0 +942 12 1 1 0 0 0 0 0 0 +944 6 0 0 0 0 0 6 6 0 +945 30 0 0 6 6 0 6 0 0 +947 36 0 0 30 0 0 0 0 0 +fn=_dl_allocate_tls_init +437 9 1 1 0 0 0 7 0 0 +438 2 0 0 0 0 0 0 0 0 +442 2 0 0 1 1 1 1 0 0 +444 2 0 0 0 0 0 0 0 0 +445 1 0 0 0 0 0 0 0 0 +448 3 0 0 2 1 1 0 0 0 +460 1 0 0 1 0 0 0 0 0 +465 23 1 1 7 1 0 0 0 0 +471 21 1 1 0 0 0 0 0 0 +474 18 0 0 6 2 0 0 0 0 +475 12 0 0 0 0 0 0 0 0 +481 18 0 0 12 0 0 0 0 0 +482 12 1 1 0 0 0 0 0 0 +484 36 0 0 18 7 3 6 2 2 +487 12 0 0 0 0 0 0 0 0 +488 12 0 0 6 0 0 0 0 0 +491 12 0 0 0 0 0 0 0 0 +492 24 1 1 12 1 0 0 0 0 +494 12 0 0 0 0 0 0 0 0 +495 12 0 0 6 0 0 0 0 0 +504 6 0 0 0 0 0 6 0 0 +507 54 0 0 12 2 1 12 0 0 +521 2 0 0 1 0 0 1 0 0 +524 9 0 0 8 0 0 0 0 0 +fn=_dl_allocate_tls_storage +285 2 0 0 1 0 0 0 0 0 +286 3 0 0 0 0 0 1 0 0 +287 2 0 0 0 0 0 0 0 0 +290 1 0 0 0 0 0 1 0 0 +296 2 1 1 0 0 0 1 0 0 +332 4 1 1 0 0 0 3 0 0 +334 1 0 0 1 0 0 0 0 0 +345 1 0 0 1 0 0 0 0 0 +346 2 0 0 0 0 0 1 0 0 +347 3 1 1 0 0 0 0 0 0 +355 4 0 0 0 0 0 0 0 0 +356 1 0 0 0 0 0 0 0 0 +360 297 1 1 0 0 0 289 36 36 +379 1 0 0 0 0 0 1 1 1 +385 5 0 0 4 0 0 0 0 0 +fn=_dl_count_modids +108 1 1 1 0 0 0 0 0 0 +113 2 0 0 1 0 0 0 0 0 +114 1 0 0 1 0 0 0 0 0 +129 2 0 0 1 0 0 0 0 0 +fn=_dl_determine_tlsoffset +135 6 1 1 0 0 0 5 0 0 +136 2 0 0 0 0 0 0 0 0 +137 1 0 0 0 0 0 0 0 0 +138 1 1 1 0 0 0 0 0 0 +141 3 0 0 1 0 0 0 0 0 +144 2 0 0 1 1 0 0 0 0 +178 1 0 0 0 0 0 0 0 0 +180 40 0 0 7 0 0 0 0 0 +182 13 1 1 1 0 0 0 0 0 +184 18 0 0 6 0 0 0 0 0 +185 12 1 1 6 1 0 0 0 0 +187 12 0 0 0 0 0 0 0 0 +189 30 0 0 6 0 0 0 0 0 +201 6 1 1 0 0 0 0 0 0 +205 48 0 0 0 0 0 0 0 0 +207 12 0 0 0 0 0 0 0 0 +208 12 0 0 0 0 0 0 0 0 +211 3 0 0 0 0 0 0 0 0 +217 6 0 0 0 0 0 6 0 0 +221 3 1 1 0 0 0 1 0 0 +272 1 0 0 0 0 0 1 0 0 +273 6 0 0 6 0 0 0 0 0 +fn=_dl_get_tls_static_info +308 1 0 0 0 0 0 0 0 0 +309 2 0 0 1 0 0 1 1 1 +310 2 0 0 1 0 0 1 0 0 +311 1 0 0 1 0 0 0 0 0 +fn=_dl_next_tls_modid +48 6 1 1 0 0 0 0 0 0 +51 24 0 0 12 0 0 0 0 0 +99 6 0 0 0 0 0 6 0 0 +103 6 0 0 6 0 0 0 0 0 +fn=_dl_tls_get_addr_soft +845 2 1 1 0 0 0 0 0 0 +846 6 0 0 2 0 0 0 0 0 +848 8 0 0 2 0 0 0 0 0 +850 2 0 0 2 0 0 0 0 0 +851 6 0 0 4 0 0 0 0 0 +875 4 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../include/scratch_buffer.h +fn=_dl_map_object_deps +77 3 0 0 0 0 0 2 1 1 +78 1 1 1 0 0 0 1 0 0 +85 3 1 1 2 0 0 0 0 0 +131 141 0 0 0 0 0 47 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../misc/sbrk.c +fn=sbrk +32 5 1 1 0 0 0 2 0 0 +40 6 0 0 2 1 1 0 0 0 +44 2 0 0 0 0 0 0 0 0 +60 5 1 1 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/generic/dl-cache.h +fn=_dl_load_cache_lookup +153 5 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/generic/ldsodefs.h +fn=_dl_relocate_object +126 32661 0 0 10887 0 0 0 0 0 +fn=do_lookup_x +126 24045 0 0 8015 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/posix/dl-fileid.h +fn=_dl_map_object_from_fd +37 282 1 1 47 0 0 47 0 0 +40 141 0 0 94 0 0 47 0 0 +41 47 0 0 47 0 0 0 0 0 +49 4550 1 1 2275 760 5 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/dl-osinfo.h +fn=dl_main +64 2 1 1 1 1 0 0 0 0 +77 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/dl-sysdep.c +fn=_dl_discover_osversion +46 5 1 1 0 0 0 3 0 0 +48 3 0 0 1 0 0 0 0 0 +88 4 1 1 0 0 0 1 1 1 +103 1 1 1 0 0 0 0 0 0 +107 1 0 0 0 0 0 0 0 0 +108 1 0 0 0 0 0 0 0 0 +110 12 0 0 3 1 1 0 0 0 +112 6 0 0 0 0 0 0 0 0 +114 17 0 0 4 0 0 0 0 0 +116 1 0 0 0 0 0 0 0 0 +117 2 0 0 0 0 0 0 0 0 +120 3 0 0 0 0 0 0 0 0 +121 3 1 1 0 0 0 0 0 0 +122 3 0 0 0 0 0 0 0 0 +124 13 0 0 0 0 0 0 0 0 +129 2 0 0 0 0 0 0 0 0 +133 5 0 0 4 0 0 0 0 0 +fn=_dl_sysdep_start +36 2 0 0 0 0 0 1 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/dl-vdso-setup.h +fn=dl_main +30 5 2 2 0 0 0 3 0 0 +33 1 0 0 0 0 0 1 0 0 +36 1 0 0 0 0 0 1 0 0 +39 1 0 0 0 0 0 1 0 0 +45 1 1 1 0 0 0 1 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/dl-vdso.h +fn=dl_main +40 1 1 1 1 0 0 0 0 0 +41 2 1 1 0 0 0 0 0 0 +55 2 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/x86/cpu-features.c +fn=_dl_sysdep_start +28 6 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/x86_64/brk.c +fn=brk +28 1 1 1 0 0 0 0 0 0 +31 5 1 1 0 0 0 1 0 0 +33 2 0 0 0 0 0 0 0 0 +39 1 0 0 0 0 0 0 0 0 +40 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/cpu-features.c +fn=_dl_sysdep_start +49 4 0 0 0 0 0 0 0 0 +50 2 1 1 0 0 0 0 0 0 +51 6 0 0 0 0 0 4 0 0 +56 2 0 0 0 0 0 0 0 0 +57 6 1 1 0 0 0 4 0 0 +62 2 0 0 0 0 0 0 0 0 +63 6 0 0 0 0 0 4 0 0 +309 1 0 0 0 0 0 1 0 0 +310 1 0 0 0 0 0 1 0 0 +311 1 0 0 0 0 0 1 0 0 +322 3 0 0 0 0 0 1 1 1 +325 6 1 1 0 0 0 0 0 0 +326 1 0 0 0 0 0 0 0 0 +329 1 0 0 0 0 0 0 0 0 +331 6 1 1 0 0 0 1 0 0 +336 7 1 1 5 0 0 0 0 0 +338 10 1 1 2 1 1 1 0 0 +376 2 0 0 1 0 0 0 0 0 +390 1 0 0 0 0 0 0 0 0 +400 5 1 1 0 0 0 0 0 0 +414 2 0 0 0 0 0 1 0 0 +415 1 0 0 0 0 0 0 0 0 +425 6 0 0 0 0 0 1 0 0 +476 3 1 1 1 0 0 0 0 0 +477 1 0 0 1 0 0 0 0 0 +480 2 0 0 0 0 0 0 0 0 +481 1 0 0 1 0 0 0 0 0 +487 1 0 0 0 0 0 1 0 0 +488 1 0 0 0 0 0 1 0 0 +489 1 0 0 0 0 0 1 0 0 +490 1 0 0 0 0 0 1 0 0 +493 4 1 1 0 0 0 1 0 0 +495 6 0 0 1 0 0 2 0 0 +497 6 1 1 1 0 0 2 0 0 +499 6 0 0 1 0 0 2 0 0 +510 1 0 0 0 0 0 1 0 0 +511 2 0 0 1 0 0 0 0 0 +515 3 1 1 1 0 0 0 0 0 +534 3 1 1 0 0 0 0 0 0 +536 4 0 0 1 0 0 0 0 0 +537 2 0 0 1 0 0 0 0 0 +539 4 1 1 1 0 0 0 0 0 +540 2 0 0 0 0 0 0 0 0 +543 2 1 1 0 0 0 1 0 0 +558 4 1 1 0 0 0 1 0 0 +560 4 0 0 0 0 0 1 0 0 +fn=get_common_indices.constprop.0 +71 2 1 1 0 0 0 1 0 0 +75 4 0 0 0 0 0 0 0 0 +78 5 1 1 0 0 0 3 0 0 +81 1 0 0 0 0 0 1 0 0 +82 4 0 0 0 0 0 1 0 0 +83 4 0 0 0 0 0 1 0 0 +84 4 0 0 0 0 0 1 0 0 +85 3 0 0 0 0 0 1 0 0 +86 2 0 0 1 0 0 0 0 0 +93 2 0 0 1 0 0 0 0 0 +94 7 1 1 0 0 0 4 0 0 +100 2 0 0 1 0 0 0 0 0 +101 7 1 1 0 0 0 4 0 0 +108 3 0 0 1 0 0 0 0 0 +112 2 0 0 0 0 0 0 0 0 +114 4 0 0 0 0 0 0 0 0 +118 2 1 1 0 0 0 0 0 0 +121 4 1 1 1 0 0 1 0 0 +124 2 0 0 1 0 0 0 0 0 +127 3 0 0 0 0 0 1 0 0 +132 1 0 0 1 0 0 0 0 0 +135 2 0 0 0 0 0 0 0 0 +137 2 1 1 0 0 0 1 0 0 +139 3 0 0 1 0 0 0 0 0 +143 2 0 0 0 0 0 0 0 0 +147 2 0 0 1 0 0 0 0 0 +154 3 1 1 0 0 0 0 0 0 +225 2 0 0 1 0 0 0 0 0 +229 3 1 1 0 0 0 0 0 0 +230 2 0 0 0 0 0 0 0 0 +232 1 0 0 0 0 0 0 0 0 +233 1 0 0 0 0 0 0 0 0 +236 2 0 0 0 0 0 1 0 0 +238 1 0 0 0 0 0 1 1 1 +241 2 0 0 1 0 0 0 0 0 +291 3 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/dl-cet.c +fn=_dl_cet_check +343 1 1 1 0 0 0 0 0 0 +344 1 0 0 0 0 0 0 0 0 +fn=dl_cet_check +97 7 1 1 0 0 0 6 0 0 +99 2 0 0 0 0 0 0 0 0 +100 1 0 0 1 1 0 0 0 0 +102 1 0 0 0 0 0 0 0 0 +103 1 0 0 0 0 0 0 0 0 +106 4 0 0 0 0 0 0 0 0 +107 2 0 0 0 0 0 0 0 0 +112 1 0 0 1 0 0 0 0 0 +117 2 1 1 0 0 0 0 0 0 +326 8 1 1 7 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/dl-hwcap.h +fn=_dl_important_hwcaps +57 6 1 1 0 0 0 2 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/dl-procinfo.h +fn=_dl_load_cache_lookup +39 92 0 0 0 0 0 0 0 0 +42 322 1 1 0 0 0 92 8 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/dl-prop.h +fn=_dl_process_pt_note +53 176 1 1 88 0 0 0 0 0 +59 94 0 0 47 0 0 0 0 0 +62 41 0 0 0 0 0 0 0 0 +67 328 0 0 0 0 0 0 0 0 +70 123 1 1 41 0 0 0 0 0 +71 82 0 0 41 0 0 0 0 0 +72 82 0 0 41 0 0 0 0 0 +76 123 1 1 41 0 0 0 0 0 +80 123 0 0 0 0 0 41 0 0 +83 123 0 0 41 0 0 0 0 0 +84 82 0 0 0 0 0 0 0 0 +88 41 0 0 0 0 0 0 0 0 +89 82 0 0 0 0 0 0 0 0 +93 82 1 1 41 0 0 0 0 0 +94 41 0 0 41 0 0 0 0 0 +97 85 0 0 0 0 0 0 0 0 +100 41 1 1 0 0 0 0 0 0 +101 164 0 0 0 0 0 0 0 0 +106 82 0 0 0 0 0 0 0 0 +113 82 1 1 0 0 0 0 0 0 +116 82 0 0 41 0 0 41 0 0 +120 41 0 0 0 0 0 0 0 0 +136 41 0 0 0 0 0 0 0 0 +137 164 0 0 0 0 0 0 0 0 +142 205 1 1 41 0 0 0 0 0 +143 41 0 0 41 0 0 0 0 0 +144 82 0 0 0 0 0 0 0 0 +145 82 0 0 41 0 0 0 0 0 +153 880 1 1 0 0 0 528 15 3 +156 123 0 0 0 0 0 41 14 2 +157 88 0 0 88 0 0 0 0 0 +159 352 0 0 176 0 0 0 0 0 +160 40 0 0 0 0 0 0 0 0 +163 6 0 0 0 0 0 0 0 0 +164 48 1 1 3 0 0 0 0 0 +170 21 0 0 0 0 0 3 1 1 +179 82 1 1 0 0 0 0 0 0 +182 88 0 0 0 0 0 0 0 0 +183 704 1 1 616 0 0 0 0 0 +fn=dl_main +33 3 0 0 1 1 0 1 0 0 +59 4 1 1 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86_64/dl-irel.h +fn=_dl_fixup +32 22 0 0 0 0 0 11 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86_64/dl-machine.h +fn=_dl_fixup +242 215 0 0 0 0 0 215 0 0 +fn=_dl_relocate_object +76 194 0 0 49 0 0 0 0 0 +82 42 0 0 42 18 1 0 0 0 +86 63 0 0 21 21 21 0 0 0 +92 21 0 0 0 0 0 21 0 0 +100 63 0 0 21 0 0 0 0 0 +120 42 1 1 21 16 0 0 0 0 +122 42 1 1 0 0 0 21 0 0 +124 84 1 1 21 7 0 0 0 0 +131 87 1 1 22 22 8 0 0 0 +276 21818 0 0 0 0 0 0 0 0 +297 21818 1 1 0 0 0 0 0 0 +301 21818 0 0 0 0 0 0 0 0 +308 458564 10 10 89700 5583 3775 58538 702 1 +309 97247 4 4 43050 332 0 0 0 0 +312 32304 1 1 0 0 0 0 0 0 +314 1710 0 0 342 0 0 0 0 0 +317 684 0 0 0 0 0 0 0 0 +318 1026 0 0 342 0 0 0 0 0 +319 684 0 0 0 0 0 0 0 0 +323 342 1 1 0 0 0 342 0 0 +330 1026 0 0 342 0 0 342 0 0 +333 65498 1 1 10909 45 3 0 0 0 +367 14 0 0 0 0 0 0 0 0 +368 28 0 0 14 4 0 7 5 2 +375 6 0 0 2 0 0 0 0 0 +377 4 0 0 4 1 1 0 0 0 +386 6 1 1 2 0 0 2 0 0 +429 72 1 1 24 0 0 0 0 0 +433 96 1 1 24 4 0 0 0 0 +438 72 0 0 48 3 3 0 0 0 +447 72 0 0 24 0 0 24 8 8 +457 32517 0 0 21678 1592 1355 10839 3265 1190 +458 10839 0 0 0 0 0 0 0 0 +481 147 0 0 0 0 0 49 0 0 +491 144 0 0 0 0 0 48 0 0 +497 111 0 0 37 0 0 0 0 0 +501 222 1 1 148 5 1 37 0 0 +503 111 0 0 74 0 0 0 0 0 +504 37 0 0 0 0 0 0 0 0 +536 143223 0 0 47741 5966 5966 0 0 0 +541 95482 0 0 0 0 0 0 0 0 +542 143223 0 0 47741 5967 5967 47741 11957 11898 +552 4388 0 0 2194 0 0 0 0 0 +556 4276 0 0 0 0 0 0 0 0 +559 6414 0 0 2138 3 0 0 0 0 +560 2138 0 0 2138 281 254 0 0 0 +577 112 0 0 112 1 1 0 0 0 +579 56 0 0 0 0 0 56 0 0 +580 56 0 0 0 0 0 56 3 3 +fn=_dl_start +59 3 0 0 1 1 1 0 0 0 +301 27 0 0 0 0 0 0 0 0 +309 90 1 1 36 8 8 0 0 0 +312 18 0 0 0 0 0 0 0 0 +333 63 0 0 0 0 0 0 0 0 +353 18 1 1 9 2 2 9 2 2 +354 9 0 0 0 0 0 0 0 0 +421 1 0 0 0 0 0 0 0 0 +541 84 0 0 42 5 5 0 0 0 +542 126 1 1 42 5 5 42 25 25 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86_64/dl-trampoline.h +fn=_dl_runtime_resolve_xsave +67 215 9 2 0 0 0 0 0 0 +72 215 0 0 0 0 0 215 0 0 +75 215 0 0 0 0 0 0 0 0 +77 215 0 0 0 0 0 0 0 0 +87 215 0 0 215 14 1 0 0 0 +93 215 0 0 0 0 0 215 12 0 +94 215 0 0 0 0 0 215 0 0 +95 215 14 2 0 0 0 215 0 0 +96 215 0 0 0 0 0 215 0 0 +97 215 0 0 0 0 0 215 0 0 +98 215 0 0 0 0 0 215 0 0 +99 215 0 0 0 0 0 215 0 0 +103 215 0 0 0 0 0 0 0 0 +104 215 0 0 0 0 0 0 0 0 +107 215 0 0 0 0 0 215 10 0 +108 215 0 0 0 0 0 215 0 0 +110 215 0 0 0 0 0 215 0 0 +111 215 0 0 0 0 0 215 0 0 +112 215 10 2 0 0 0 215 0 0 +113 215 0 0 0 0 0 215 0 0 +114 215 0 0 0 0 0 215 0 0 +115 215 0 0 0 0 0 215 0 0 +117 215 0 0 215 0 0 7095 80 6 +124 215 0 0 215 0 0 0 0 0 +125 215 0 0 215 0 0 0 0 0 +126 215 0 0 0 0 0 215 12 2 +127 215 0 0 0 0 0 0 0 0 +132 215 0 0 0 0 0 0 0 0 +133 215 0 0 0 0 0 0 0 0 +134 215 0 0 7740 2 0 0 0 0 +136 215 12 2 215 0 0 0 0 0 +137 215 0 0 215 0 0 0 0 0 +138 215 0 0 215 0 0 0 0 0 +139 215 0 0 215 0 0 0 0 0 +140 215 0 0 215 0 0 0 0 0 +141 215 0 0 215 0 0 0 0 0 +142 215 0 0 215 0 0 0 0 0 +144 215 0 0 0 0 0 0 0 0 +146 215 0 0 215 0 0 0 0 0 +150 215 0 0 0 0 0 0 0 0 +153 215 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86_64/tls_get_addr.S +fn=__tls_get_addr +29 4 2 1 0 0 0 0 0 0 +30 4 0 0 4 0 0 0 0 0 +31 4 0 0 4 2 1 0 0 0 +33 4 0 0 4 3 1 0 0 0 +34 4 0 0 0 0 0 0 0 0 +35 4 0 0 4 2 2 0 0 0 +38 4 0 0 0 0 0 0 0 0 +39 4 2 1 4 2 1 0 0 0 +43 4 0 0 0 0 0 0 0 0 +44 4 0 0 0 0 0 0 0 0 +45 4 0 0 4 0 0 0 0 0 +46 4 0 0 4 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/./dl-load.h +fn=_dl_map_object_from_fd +90 376 0 0 0 0 0 0 0 0 +91 141 0 0 94 0 0 47 0 0 +93 376 1 1 188 11 11 0 0 0 +94 225 1 1 135 0 0 0 0 0 +95 270 1 1 90 0 0 0 0 0 +96 180 0 0 45 0 0 0 0 0 +98 180 0 0 0 0 0 45 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/./dl-map-segments.h +fn=_dl_map_object_from_fd +50 94 0 0 47 0 0 0 0 0 +56 376 0 0 141 0 0 94 0 0 +60 94 0 0 0 0 0 0 0 0 +63 141 1 1 47 0 0 47 0 0 +64 94 0 0 0 0 0 47 0 0 +66 94 0 0 47 0 0 0 0 0 +73 228 0 0 76 0 0 19 0 0 +80 47 1 1 47 0 0 0 0 0 +82 47 0 0 47 0 0 0 0 0 +90 940 0 0 188 0 0 0 0 0 +92 705 0 0 423 0 0 0 0 0 +94 1410 1 1 423 0 0 141 0 0 +104 752 0 0 376 0 0 0 0 0 +110 94 0 0 47 0 0 0 0 0 +111 47 0 0 0 0 0 0 0 0 +112 141 0 0 47 0 0 0 0 0 +113 94 0 0 0 0 0 0 0 0 +115 94 0 0 0 0 0 0 0 0 +120 94 1 1 0 0 0 0 0 0 +123 94 0 0 0 0 0 0 0 0 +131 329 0 0 0 0 0 141 0 0 +132 94 0 0 94 0 0 0 0 0 +137 94 0 0 0 0 0 0 0 0 +141 96 1 1 0 0 0 12 0 0 +144 24 0 0 0 0 0 0 0 0 +149 188 1 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/./setup-vdso.h +fn=dl_main +24 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-addr.c +fn=_dl_addr +30 4 0 0 2 0 0 1 0 0 +34 2 0 0 1 0 0 0 0 0 +38 1 0 0 1 0 0 0 0 0 +39 1 0 0 1 0 0 0 0 0 +40 3 0 0 2 0 0 1 0 0 +42 3 1 1 2 0 0 1 0 0 +44 4 0 0 0 0 0 0 0 0 +45 3 0 0 1 1 0 0 0 0 +49 4048 0 0 2 0 0 0 0 0 +51 1011 1 1 1011 64 0 0 0 0 +52 2022 0 0 0 0 0 0 0 0 +54 2757 0 0 919 0 0 0 0 0 +60 7074 2 2 0 0 0 0 0 0 +61 14148 0 0 2358 513 304 0 0 0 +63 7043 0 0 0 0 0 0 0 0 +64 9308 0 0 2327 0 0 0 0 0 +65 16996 1 1 5320 371 235 0 0 0 +70 7074 0 0 2358 147 2 0 0 0 +100 2 0 0 0 0 0 0 0 0 +101 1 0 0 0 0 0 1 1 0 +102 3 0 0 1 1 0 0 0 0 +105 2 1 1 0 0 0 0 0 0 +117 3 1 1 0 0 0 1 1 0 +126 12 1 1 0 0 0 7 0 0 +128 1 0 0 0 0 0 0 0 0 +131 3 0 0 2 1 0 1 0 0 +133 2 0 0 0 0 0 1 0 0 +135 2 1 1 0 0 0 0 0 0 +138 1 0 0 0 0 0 0 0 0 +141 2 0 0 1 1 0 1 0 0 +144 9 1 1 7 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-cache.c +fn=_dl_cache_libcmp +141 449 21 1 0 0 0 0 0 0 +142 6150 0 0 898 327 147 0 0 0 +144 10320 0 0 0 0 0 0 0 0 +146 152 0 0 0 0 0 0 0 0 +152 216 0 0 0 0 0 0 0 0 +153 216 0 0 0 0 0 0 0 0 +154 332 1 1 81 0 0 0 0 0 +155 27 0 0 0 0 0 0 0 0 +156 332 0 0 81 1 1 0 0 0 +157 27 0 0 0 0 0 0 0 0 +158 144 0 0 0 0 0 0 0 0 +159 6 0 0 2 0 0 0 0 0 +162 8 0 0 4 0 0 0 0 0 +164 5008 0 0 0 0 0 0 0 0 +165 4 0 0 0 0 0 0 0 0 +166 5000 0 0 0 0 0 0 0 0 +167 786 0 0 393 0 0 0 0 0 +170 2107 0 0 0 0 0 0 0 0 +171 6321 1 1 4214 19 12 0 0 0 +174 138 0 0 46 0 0 0 0 0 +175 4 0 0 4 0 0 0 0 0 +fn=_dl_load_cache_lookup +187 460 2 2 0 0 0 276 0 0 +195 92 0 0 46 0 0 0 0 0 +198 138 0 0 46 10 0 0 0 0 +201 5 1 1 0 0 0 1 1 1 +209 5 0 0 1 0 0 0 0 0 +210 8 1 1 3 1 1 0 0 0 +213 1 0 0 1 0 0 0 0 0 +218 1 1 1 0 0 0 1 0 0 +219 2 1 1 0 0 0 1 0 0 +264 135 0 0 45 0 0 0 0 0 +270 230 1 1 46 0 0 46 0 0 +279 46 0 0 0 0 0 0 0 0 +281 46 0 0 46 0 0 0 0 0 +285 276 1 1 46 0 0 92 0 0 +293 276 0 0 138 0 0 92 0 0 +294 138 0 0 46 0 0 0 0 0 +308 9324 6 6 1853 314 121 633 0 0 +320 322 1 1 92 0 0 0 0 0 +324 92 1 1 46 0 0 0 0 0 +328 92 0 0 0 0 0 0 0 0 +336 874 2 2 46 0 0 46 0 0 +337 184 0 0 0 0 0 46 15 0 +338 46 1 1 0 0 0 46 0 0 +339 368 0 0 322 0 0 0 0 0 +fn=_dl_unload_cache +348 2 1 1 0 0 0 0 0 0 +349 4 0 0 1 1 0 0 0 0 +351 2 0 0 1 0 0 1 0 0 +352 1 0 0 0 0 0 1 0 0 +354 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-debug.c +fn=_dl_debug_initialize +46 49 1 1 0 0 0 0 0 0 +49 98 0 0 0 0 0 0 0 0 +50 49 1 1 49 0 0 0 0 0 +54 194 1 1 49 2 2 0 0 0 +57 1 0 0 0 0 0 1 0 0 +58 51 0 0 48 0 0 1 0 0 +59 5 1 1 1 0 0 1 0 0 +60 2 0 0 0 0 0 1 0 0 +64 1 0 0 1 0 0 0 0 0 +fn=_dl_debug_state +73 2 0 0 0 0 0 0 0 0 +74 2 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-deps.c +fn=_dl_map_object_deps +144 3 0 0 0 0 0 2 0 0 +145 6 0 0 1 0 0 2 1 1 +146 8 1 1 0 0 0 1 0 0 +148 3 0 0 0 0 0 1 0 0 +152 9 1 1 2 0 0 3 1 1 +159 12 2 2 0 0 0 9 2 2 +160 21 2 2 1 0 0 0 0 0 +176 10 1 1 1 0 0 1 0 0 +177 1 0 0 1 0 0 0 0 0 +180 1 0 0 0 0 0 1 0 0 +198 2 0 0 1 0 0 1 0 0 +199 3 0 0 1 0 0 1 0 0 +200 2 0 0 0 0 0 2 0 0 +202 145 0 0 96 0 0 0 0 0 +206 49 0 0 0 0 0 0 0 0 +209 49 0 0 0 0 0 49 0 0 +213 196 1 1 49 41 0 49 0 0 +214 340 2 2 146 35 0 0 0 0 +217 141 0 0 0 0 0 0 0 0 +221 141 1 1 47 0 0 47 0 0 +224 106 0 0 53 11 2 0 0 0 +226 141 1 1 94 26 0 47 0 0 +231 47 0 0 0 0 0 47 0 0 +232 47 0 0 0 0 0 47 0 0 +233 94 0 0 47 0 0 47 0 0 +234 94 0 0 47 3 0 47 0 0 +237 5806 2 2 1522 345 0 47 0 0 +238 2809 0 0 0 0 0 0 0 0 +244 1512 2 2 336 7 0 168 0 0 +246 168 0 0 0 0 0 168 0 0 +248 672 2 2 336 0 0 168 0 0 +249 336 0 0 168 0 0 0 0 0 +258 168 0 0 168 0 0 0 0 0 +260 336 0 0 168 0 0 0 0 0 +265 329 1 1 47 0 0 0 0 0 +268 47 0 0 0 0 0 47 4 0 +269 47 0 0 0 0 0 47 0 0 +270 47 1 1 0 0 0 47 0 0 +271 94 0 0 47 1 0 47 4 0 +273 47 0 0 47 0 0 0 0 0 +275 235 0 0 47 0 0 94 0 0 +279 504 0 0 168 0 0 0 0 0 +280 486 0 0 0 0 0 162 4 2 +282 3639 0 0 0 0 0 0 0 0 +287 1 0 0 0 0 0 1 0 0 +303 188 0 0 0 0 0 94 0 0 +380 96 1 1 0 0 0 48 0 0 +433 147 1 1 49 0 0 0 0 0 +435 141 0 0 0 0 0 47 0 0 +438 188 0 0 0 0 0 47 0 0 +439 94 0 0 0 0 0 0 0 0 +445 47 0 0 0 0 0 47 13 11 +446 235 0 0 47 0 0 47 0 0 +447 235 0 0 0 0 0 47 0 0 +450 47 0 0 0 0 0 47 8 0 +451 47 0 0 47 0 0 0 0 0 +455 196 1 1 98 5 0 0 0 0 +457 49 1 1 49 5 0 0 0 0 +458 242 0 0 48 18 0 0 0 0 +464 6 0 0 2 1 0 0 0 0 +465 1 0 0 0 0 0 1 0 0 +468 5 1 1 2 1 0 1 0 0 +479 5 0 0 1 0 0 1 0 0 +481 2 1 1 0 0 0 0 0 0 +486 6 0 0 3 0 0 1 1 0 +487 1 0 0 0 0 0 1 0 0 +489 151 0 0 49 0 0 0 0 0 +491 49 1 1 49 17 0 0 0 0 +495 147 0 0 0 0 0 49 7 7 +499 98 0 0 98 7 0 0 0 0 +502 2 0 0 1 1 0 0 0 0 +553 3 0 0 2 0 0 0 0 0 +554 1 0 0 0 0 0 0 0 0 +555 3 1 1 1 0 0 0 0 0 +590 5 1 1 0 0 0 1 0 0 +594 5 1 1 0 0 0 1 0 0 +597 1 0 0 0 0 0 1 0 0 +599 2 0 0 1 0 0 1 0 0 +600 1 0 0 1 0 0 0 0 0 +601 2 0 0 0 0 0 0 0 0 +608 3 0 0 1 0 0 0 0 0 +611 3 0 0 1 0 0 0 0 0 +614 8 0 0 7 2 0 0 0 0 +fn=openaux +61 504 1 1 0 0 0 168 0 0 +64 1848 0 0 672 1 0 336 1 0 +65 168 0 0 168 10 0 0 0 0 +68 168 0 0 168 0 0 0 0 0 +69 336 0 0 336 19 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-environ.c +fn=_dl_next_ld_env_entry +28 3 1 1 0 0 0 0 0 0 +29 3 0 0 3 0 0 0 0 0 +32 190 0 0 63 0 0 0 0 0 +34 124 1 1 62 0 0 0 0 0 +35 36 0 0 18 0 0 0 0 0 +37 2 0 0 0 0 0 0 0 0 +40 4 0 0 0 0 0 2 0 0 +42 2 0 0 2 0 0 0 0 0 +45 60 0 0 0 0 0 0 0 0 +49 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-error-skeleton.c +fn=_dl_catch_error +225 10 2 2 0 0 0 3 0 0 +227 2 0 0 0 0 0 1 0 0 +228 2 0 0 1 0 0 1 0 0 +229 2 0 0 1 0 0 1 0 0 +230 2 0 0 1 0 0 1 0 0 +232 5 0 0 4 0 0 0 0 0 +fn=_dl_catch_exception +175 1352 1 1 169 0 0 845 4 3 +178 338 0 0 0 0 0 0 0 0 +199 169 0 0 0 0 0 169 9 0 +200 338 1 1 0 0 0 169 0 0 +203 338 0 0 0 0 0 169 0 0 +206 1183 0 0 0 0 0 169 0 0 +208 507 0 0 338 0 0 169 0 0 +209 338 0 0 169 0 0 169 9 0 +210 676 1 1 169 0 0 338 0 0 +219 676 0 0 338 21 0 0 0 0 +fn=_dl_receive_error +238 6 1 1 0 0 0 2 0 0 +239 1 0 0 1 0 0 0 0 0 +240 1 0 0 1 0 0 0 0 0 +243 1 0 0 0 0 0 1 0 0 +244 1 0 0 0 0 0 1 0 0 +246 1 0 0 0 0 0 1 0 0 +248 1 0 0 0 0 0 1 1 0 +249 1 0 0 0 0 0 1 0 0 +250 4 1 1 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-fini.c +fn=_dl_fini +30 9 1 1 0 0 0 6 0 0 +47 6 1 1 0 0 0 1 0 0 +50 7 0 0 1 1 0 0 0 0 +53 2 1 1 1 1 0 1 0 0 +55 1 0 0 1 1 0 0 0 0 +58 2 0 0 0 0 0 0 0 0 +60 6 0 0 3 0 0 0 0 0 +65 1 0 0 0 0 0 1 0 0 +68 17 1 1 1 0 0 0 0 0 +73 149 2 2 49 13 11 0 0 0 +75 98 0 0 49 41 28 0 0 0 +77 98 0 0 0 0 0 0 0 0 +79 98 0 0 0 0 0 49 0 0 +80 49 0 0 0 0 0 49 48 46 +81 49 0 0 0 0 0 0 0 0 +85 49 0 0 49 41 28 0 0 0 +87 6 0 0 0 0 0 0 0 0 +88 4 0 0 0 0 0 0 0 0 +94 10 2 2 0 0 0 1 0 0 +104 2 0 0 1 0 0 1 0 0 +109 155 0 0 50 0 0 1 0 0 +111 49 0 0 49 5 0 0 0 0 +113 147 1 1 49 39 0 0 0 0 +116 98 0 0 0 0 0 49 0 0 +119 147 0 0 49 48 46 0 0 0 +120 6 1 1 2 2 2 0 0 0 +123 94 0 0 47 1 0 0 0 0 +134 188 0 0 94 84 49 47 0 0 +135 47 0 0 47 13 13 0 0 0 +136 94 1 1 47 7 5 0 0 0 +137 514 0 0 105 45 41 0 0 0 +138 58 0 0 58 48 47 58 0 0 +142 94 0 0 0 0 0 0 0 0 +143 141 0 0 94 40 38 47 0 0 +149 294 1 1 98 2 0 0 0 0 +168 49 0 0 49 1 0 0 0 0 +174 6 1 1 2 0 0 0 0 0 +180 2 0 0 1 0 0 0 0 0 +187 8 0 0 7 1 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-hwcaps.c +fn=_dl_important_hwcaps +42 14 1 1 0 0 0 10 1 1 +43 8 1 1 1 0 0 3 0 0 +45 2 0 0 1 0 0 1 0 0 +46 3 1 1 0 0 0 0 0 0 +55 17 1 1 0 0 0 0 0 0 +56 8 0 0 2 0 0 2 1 1 +57 1 0 0 0 0 0 0 0 0 +65 3 0 0 1 0 0 0 0 0 +148 19 2 2 1 0 0 0 0 0 +149 1 0 0 0 0 0 0 0 0 +185 12 2 2 1 0 0 0 0 0 +186 10 0 0 2 0 0 2 1 1 +188 1 0 0 0 0 0 1 1 1 +189 2 0 0 0 0 0 2 0 0 +190 13 0 0 1 0 0 1 0 0 +193 3 1 1 1 0 0 0 0 0 +195 1 0 0 0 0 0 1 0 0 +196 2 0 0 1 0 0 1 0 0 +197 4 0 0 0 0 0 0 0 0 +200 2 1 1 0 0 0 1 0 0 +201 1 0 0 0 0 0 1 0 0 +204 2 0 0 0 0 0 0 0 0 +207 5 0 0 1 0 0 1 0 0 +211 7 1 1 1 0 0 2 0 0 +212 2 0 0 0 0 0 0 0 0 +214 2 0 0 0 0 0 0 0 0 +215 8 1 1 0 0 0 0 0 0 +216 3 1 1 1 0 0 0 0 0 +217 4 1 1 0 0 0 0 0 0 +224 2 1 1 0 0 0 0 0 0 +230 11 1 1 1 0 0 5 1 1 +231 5 0 0 0 0 0 1 0 0 +232 5 0 0 2 0 0 0 0 0 +263 10 1 1 0 0 0 3 1 1 +266 4 0 0 0 0 0 2 0 0 +273 3 0 0 2 0 0 0 0 0 +276 2 0 0 0 0 0 0 0 0 +279 12 0 0 4 0 0 4 0 0 +282 11 0 0 3 0 0 0 0 0 +283 21 2 2 1 0 0 4 0 0 +284 7 0 0 2 0 0 2 0 0 +287 10 1 1 2 0 0 4 0 0 +289 6 0 0 2 0 0 0 0 0 +294 28 1 1 2 0 0 0 0 0 +295 24 0 0 0 0 0 8 1 1 +299 21 0 0 0 0 0 0 0 0 +302 24 0 0 0 0 0 0 0 0 +303 96 1 1 0 0 0 0 0 0 +304 48 0 0 24 0 0 12 0 0 +306 9 0 0 0 0 0 0 0 0 +309 3 0 0 1 0 0 0 0 0 +310 2 0 0 0 0 0 0 0 0 +311 19 2 2 2 0 0 0 0 0 +313 6 0 0 0 0 0 0 0 0 +314 2 0 0 2 0 0 0 0 0 +316 1 0 0 1 0 0 0 0 0 +317 4 0 0 0 0 0 2 0 0 +324 18 1 1 6 0 0 4 0 0 +325 4 0 0 0 0 0 0 0 0 +327 8 0 0 0 0 0 0 0 0 +330 3 0 0 2 0 0 1 0 0 +333 9 1 1 7 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-init.c +fn=_dl_init +30 293 3 3 50 42 0 49 0 0 +79 12 1 1 0 0 0 6 0 0 +80 1 0 0 1 1 0 0 0 0 +81 1 0 0 1 0 0 0 0 0 +84 3 1 1 1 0 0 0 0 0 +87 2 0 0 0 0 0 1 0 0 +92 2 0 0 0 0 0 0 0 0 +117 1 0 0 1 0 0 0 0 0 +118 152 0 0 0 0 0 0 0 0 +119 98 0 0 98 14 3 0 0 0 +125 8 0 0 7 1 0 0 0 0 +fn=call_init.part.0 +28 441 1 1 0 0 0 245 0 0 +36 147 1 1 49 0 0 49 0 0 +39 196 0 0 98 83 35 0 0 0 +40 3 1 1 0 0 0 0 0 0 +44 144 0 0 48 47 23 0 0 0 +45 3 0 0 1 0 0 0 0 0 +49 94 0 0 47 2 0 0 0 0 +58 329 1 1 141 93 56 47 0 0 +62 94 0 0 0 0 0 0 0 0 +68 141 0 0 94 21 17 0 0 0 +70 94 0 0 94 19 15 0 0 0 +71 433 0 0 0 0 0 0 0 0 +72 264 1 1 66 46 15 66 0 0 +74 294 0 0 294 3 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-iteratephdr.c +fn=dl_iterate_phdr +34 91 2 2 7 0 0 56 0 0 +40 21 0 0 14 1 1 7 0 0 +45 7 0 0 7 2 1 0 0 0 +46 14 1 1 0 0 0 0 0 0 +48 7 1 1 7 0 0 0 0 0 +49 28 0 0 7 1 1 0 0 0 +63 73 1 1 15 0 0 0 0 0 +65 45 1 1 30 1 1 15 0 0 +66 30 0 0 15 0 0 15 0 0 +67 30 0 0 15 6 6 15 0 0 +68 30 0 0 15 1 1 15 0 0 +69 30 0 0 15 0 0 15 0 0 +70 30 0 0 0 0 0 15 0 0 +71 15 0 0 0 0 0 15 0 0 +72 30 1 1 15 6 6 15 0 0 +73 30 0 0 0 0 0 0 0 0 +74 6 0 0 4 2 1 4 0 0 +75 75 0 0 15 0 0 15 0 0 +76 37 1 1 0 0 0 7 0 0 +82 14 0 0 7 0 0 7 0 0 +85 84 0 0 70 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-load.c +fn=_dl_dst_count +231 1008 1 1 0 0 0 840 7 1 +234 336 0 0 0 0 0 168 22 0 +237 336 0 0 0 0 0 0 0 0 +238 168 0 0 0 0 0 0 0 0 +257 1176 1 1 1008 0 0 0 0 0 +fn=_dl_init_paths +681 10 1 1 0 0 0 7 0 0 +694 6 1 1 2 0 0 2 0 0 +698 1 0 0 0 0 0 1 0 0 +699 2 0 0 0 0 0 1 0 0 +700 2 0 0 0 0 0 0 0 0 +707 5 0 0 0 0 0 0 0 0 +708 4 1 1 1 0 0 1 0 0 +711 6 0 0 0 0 0 2 0 0 +713 2 0 0 0 0 0 0 0 0 +719 1 1 1 0 0 0 1 0 0 +720 1 0 0 0 0 0 1 0 0 +728 11 1 1 0 0 0 3 0 0 +730 8 1 1 0 0 0 4 2 2 +731 4 0 0 0 0 0 4 1 1 +733 5 0 0 0 0 0 4 0 0 +734 7 0 0 3 1 1 4 1 1 +735 7 1 1 0 0 0 0 0 0 +738 6 0 0 3 1 1 0 0 0 +739 24 0 0 4 0 0 4 0 0 +742 26 0 0 6 0 0 6 0 0 +748 1 0 0 0 0 0 1 0 0 +749 1 0 0 0 0 0 1 0 0 +753 1 0 0 1 0 0 0 0 0 +754 2 0 0 0 0 0 0 0 0 +756 4 1 1 1 0 0 0 0 0 +758 3 0 0 1 0 0 0 0 0 +775 1 1 1 0 0 0 1 0 0 +777 3 1 1 1 0 0 0 0 0 +791 2 1 1 0 0 0 1 0 0 +796 5 0 0 2 0 0 0 0 0 +798 24 2 2 2 0 0 2 0 0 +802 2 0 0 0 0 0 0 0 0 +803 61 1 1 15 0 0 0 0 0 +804 56 0 0 0 0 0 0 0 0 +807 1 1 1 0 0 0 1 0 0 +808 2 0 0 0 0 0 1 0 0 +809 2 0 0 0 0 0 0 0 0 +815 6 0 0 0 0 0 1 0 0 +818 3 0 0 2 0 0 0 0 0 +824 1 0 0 0 0 0 1 0 0 +828 8 0 0 7 0 0 0 0 0 +fn=_dl_map_object +659 678 1 1 226 44 0 0 0 0 +662 52 0 0 0 0 0 0 0 0 +665 78 1 1 26 0 0 0 0 0 +668 26 2 2 0 0 0 26 0 0 +669 26 0 0 0 0 0 0 0 0 +1927 1690 1 1 0 0 0 1352 11 4 +1929 47 0 0 0 0 0 47 0 0 +1935 338 1 1 0 0 0 0 0 0 +1936 676 0 0 169 19 1 0 0 0 +1939 11030 0 0 3395 29 0 0 0 0 +1944 23436 1 1 3348 493 0 0 0 0 +1946 16740 0 0 0 0 0 3348 0 0 +1950 6452 0 0 3226 0 0 0 0 0 +1951 9678 1 1 3226 1022 0 0 0 0 +1954 2898 0 0 2898 796 0 0 0 0 +1955 5796 0 0 5796 3262 0 0 0 0 +1956 11592 0 0 0 0 0 2898 0 0 +1972 282 1 1 47 0 0 47 10 2 +1982 141 0 0 47 0 0 0 0 0 +2016 47 0 0 0 0 0 47 10 0 +2018 235 21 1 0 0 0 47 0 0 +2022 184 2 2 0 0 0 92 0 0 +2024 92 0 0 46 0 0 0 0 0 +2031 184 0 0 46 14 0 0 0 0 +2035 230 1 1 92 19 0 138 0 0 +2040 402 1 1 134 25 0 0 0 0 +2041 134 0 0 0 0 0 0 0 0 +2043 184 0 0 0 0 0 46 0 0 +2055 184 2 2 138 0 0 0 0 0 +2056 368 0 0 92 0 0 46 0 0 +2057 46 0 0 0 0 0 0 0 0 +2066 92 1 1 46 1 0 0 0 0 +2067 690 1 1 46 0 0 184 0 0 +2073 230 0 0 0 0 0 0 0 0 +2074 46 1 1 0 0 0 0 0 0 +2082 46 1 1 0 0 0 46 10 1 +2096 92 0 0 0 0 0 0 0 0 +2098 138 1 1 46 0 0 0 0 0 +2102 138 0 0 0 0 0 46 0 0 +2104 92 0 0 0 0 0 0 0 0 +2108 92 0 0 0 0 0 0 0 0 +2116 138 0 0 46 17 0 0 0 0 +2139 322 1 1 0 0 0 92 0 0 +2143 138 0 0 46 0 0 0 0 0 +2144 92 0 0 0 0 0 46 0 0 +2161 92 1 1 46 0 0 0 0 0 +2167 1 0 0 0 0 0 1 0 0 +2168 4 0 0 0 0 0 1 0 0 +2169 2 0 0 0 0 0 0 0 0 +2170 3 0 0 0 0 0 0 0 0 +2174 5 1 1 0 0 0 1 0 0 +2177 2 0 0 0 0 0 0 0 0 +2189 188 0 0 47 0 0 0 0 0 +2191 184 0 0 0 0 0 0 0 0 +2235 94 0 0 47 36 0 47 0 0 +2236 705 1 1 141 0 0 235 0 0 +2238 1521 0 0 1183 35 0 0 0 0 +fn=_dl_map_object_from_fd +866 658 1 1 0 0 0 517 2 2 +876 188 1 1 47 0 0 94 1 1 +877 47 0 0 0 0 0 47 0 0 +883 188 0 0 47 0 0 47 0 0 +901 3854 1 1 1269 249 0 0 0 0 +902 2350 1 1 1175 135 0 0 0 0 +920 94 1 1 47 0 0 0 0 0 +944 188 1 1 47 0 0 47 0 0 +954 94 0 0 47 0 0 0 0 0 +961 188 0 0 94 0 0 0 0 0 +994 94 0 0 0 0 0 0 0 0 +997 376 1 1 235 0 0 47 0 0 +998 94 0 0 0 0 0 0 0 0 +1009 141 0 0 94 0 0 47 22 22 +1010 188 0 0 94 0 0 94 0 0 +1011 94 0 0 47 0 0 47 0 0 +1013 141 0 0 0 0 0 0 0 0 +1014 188 0 0 94 0 0 0 0 0 +1015 47 1 1 0 0 0 0 0 0 +1018 17 1 1 1 0 0 0 0 0 +1019 6 0 0 1 0 0 1 0 0 +1030 94 0 0 0 0 0 47 0 0 +1032 47 1 1 0 0 0 47 0 0 +1034 987 1 1 94 0 0 94 0 0 +1035 47 0 0 0 0 0 0 0 0 +1036 47 0 0 0 0 0 47 0 0 +1042 3325 1 1 0 0 0 0 0 0 +1043 4510 2 2 848 37 1 0 0 0 +1049 94 22 1 47 0 0 0 0 0 +1054 94 0 0 47 0 0 47 0 0 +1055 188 0 0 47 0 0 47 0 0 +1060 4 0 0 2 0 0 2 0 0 +1061 2 0 0 0 0 0 0 0 0 +1066 940 2 2 376 0 0 0 0 0 +1071 1316 0 0 376 0 0 0 0 0 +1079 564 0 0 0 0 0 0 0 0 +1080 1128 0 0 188 0 0 188 28 5 +1081 1880 1 1 376 0 0 188 0 0 +1082 376 0 0 188 0 0 188 19 2 +1084 376 0 0 0 0 0 188 15 2 +1088 376 1 1 0 0 0 0 0 0 +1089 846 0 0 423 0 0 141 0 0 +1093 376 0 0 0 0 0 0 0 0 +1094 1504 1 1 376 0 0 188 0 0 +1107 18 0 0 6 0 0 0 0 0 +1111 6 0 0 0 0 0 6 6 6 +1112 12 1 1 6 0 0 6 1 1 +1113 6 0 0 6 0 0 0 0 0 +1116 30 0 0 0 0 0 6 0 0 +1117 12 0 0 6 0 0 6 0 0 +1120 6 0 0 0 0 0 6 2 2 +1125 24 1 1 6 0 0 0 0 0 +1132 188 0 0 47 0 0 47 0 0 +1140 94 1 1 47 0 0 47 0 0 +1141 47 0 0 0 0 0 0 0 0 +1144 188 0 0 94 0 0 47 22 22 +1146 47 0 0 0 0 0 0 0 0 +1149 792 1 1 264 0 0 88 6 1 +1157 94 0 0 0 0 0 0 0 0 +1170 94 1 1 0 0 0 0 0 0 +1180 423 1 1 188 0 0 47 0 0 +1192 188 1 1 94 0 0 0 0 0 +1201 141 0 0 47 0 0 47 0 0 +1208 94 0 0 0 0 0 0 0 0 +1210 94 0 0 0 0 0 0 0 0 +1229 141 1 1 47 0 0 0 0 0 +1248 94 0 0 47 0 0 47 0 0 +1250 235 0 0 94 18 0 0 0 0 +1298 141 1 1 47 41 41 0 0 0 +1299 12 0 0 6 0 0 6 0 0 +1302 188 0 0 47 0 0 47 0 0 +1311 94 0 0 47 0 0 0 0 0 +1313 188 1 1 94 0 0 47 0 0 +1315 94 0 0 47 0 0 0 0 0 +1331 94 0 0 0 0 0 47 0 0 +1335 94 0 0 47 0 0 0 0 0 +1336 94 0 0 47 0 0 0 0 0 +1353 94 1 1 47 0 0 0 0 0 +1354 4 0 0 0 0 0 2 0 0 +1357 94 0 0 47 0 0 47 0 0 +1362 94 0 0 47 0 0 0 0 0 +1372 94 1 1 47 0 0 0 0 0 +1381 94 0 0 47 0 0 0 0 0 +1382 24 0 0 6 0 0 0 0 0 +1387 12 0 0 0 0 0 12 0 0 +1394 141 0 0 47 0 0 47 0 0 +1398 141 1 1 47 0 0 0 0 0 +1417 423 1 1 329 0 0 0 0 0 +fn=expand_dynamic_string_token +234 6 0 0 0 0 0 2 0 0 +237 4 0 0 0 0 0 0 0 0 +378 18 1 1 0 0 0 12 0 0 +392 4 0 0 0 0 0 0 0 0 +403 14 1 1 12 0 0 0 0 0 +fn=fillin_rpath +447 16 2 2 0 0 0 12 0 0 +449 1 0 0 0 0 0 0 0 0 +451 12 1 1 4 0 0 2 0 0 +458 2 0 0 1 0 0 0 0 0 +460 4 0 0 1 0 0 1 0 0 +464 2 0 0 0 0 0 0 0 0 +469 3 0 0 0 0 0 1 0 0 +470 2 0 0 0 0 0 0 0 0 +477 5 1 1 1 0 0 0 0 0 +482 4 1 1 0 0 0 2 0 0 +486 17 0 0 5 0 0 0 0 0 +487 8 1 1 4 0 0 0 0 0 +505 4 1 1 1 0 0 1 0 0 +509 8 1 1 2 0 0 3 0 0 +511 3 1 1 1 0 0 0 0 0 +515 2 0 0 0 0 0 2 1 1 +516 1 0 0 0 0 0 0 0 0 +517 4 0 0 0 0 0 2 0 0 +518 2 0 0 1 0 0 1 0 0 +520 2 0 0 1 0 0 0 0 0 +526 4 1 1 1 0 0 0 0 0 +527 18 1 1 0 0 0 0 0 0 +528 8 0 0 0 0 0 2 0 0 +530 2 1 1 1 0 0 1 0 0 +531 2 0 0 1 0 0 0 0 0 +536 2 1 1 0 0 0 1 0 0 +538 1 0 0 0 0 0 1 0 0 +539 1 0 0 0 0 0 1 0 0 +542 3 0 0 0 0 0 1 0 0 +544 3 0 0 1 0 0 1 0 0 +548 1 0 0 0 0 0 1 0 0 +551 9 0 0 7 0 0 0 0 0 +fn=open_path +1443 92 1 1 0 0 0 46 0 0 +1779 644 1 1 46 0 0 506 41 3 +1780 92 1 1 46 0 0 46 0 0 +1783 46 0 0 0 0 0 46 0 0 +1784 46 0 0 0 0 0 46 0 0 +1786 92 0 0 0 0 0 0 0 0 +1791 1012 2 2 138 19 0 0 0 0 +1794 92 0 0 92 17 0 0 0 0 +1798 46 0 0 0 0 0 46 0 0 +1803 276 0 0 46 0 0 46 0 0 +1810 230 1 1 92 31 0 46 12 1 +1811 1762 1 1 99 0 0 0 0 0 +1814 736 0 0 368 0 0 0 0 0 +1818 583 1 1 265 1 0 106 0 0 +1821 106 0 0 0 0 0 53 0 0 +1824 159 0 0 53 0 0 0 0 0 +1827 371 1 1 159 0 0 53 0 0 +1829 159 0 0 53 0 0 0 0 0 +1831 16 0 0 0 0 0 0 0 0 +1836 16 1 1 0 0 0 0 0 0 +1837 56 0 0 24 0 0 0 0 0 +1843 400 3 3 62 0 0 54 0 0 +1845 56 0 0 8 0 0 8 0 0 +1846 2 0 0 1 1 1 0 0 0 +1848 32 1 1 1 0 0 9 0 0 +1855 180 0 0 45 0 0 0 0 0 +1857 90 0 0 0 0 0 0 0 0 +1865 92 0 0 0 0 0 46 0 0 +1893 46 1 1 0 0 0 0 0 0 +1896 368 1 1 92 0 0 0 0 0 +1901 92 0 0 92 0 0 0 0 0 +1903 184 0 0 138 0 0 0 0 0 +1906 138 1 1 46 0 0 0 0 0 +1920 414 0 0 322 0 0 0 0 0 +fn=open_verify.constprop.0 +1466 1089 1 1 0 0 0 594 6 0 +1505 297 0 0 99 0 0 0 0 0 +1518 53 1 1 0 0 0 0 0 0 +1536 495 0 0 0 0 0 99 19 2 +1538 198 1 1 0 0 0 0 0 0 +1543 92 0 0 0 0 0 0 0 0 +1549 138 0 0 0 0 0 46 0 0 +1550 92 0 0 0 0 0 92 0 0 +1555 276 0 0 46 0 0 46 0 0 +1557 92 1 1 0 0 0 0 0 0 +1559 138 0 0 46 0 0 46 0 0 +1561 92 0 0 0 0 0 0 0 0 +1567 92 0 0 0 0 0 0 0 0 +1583 748 3 3 372 27 0 0 0 0 +1657 92 0 0 46 0 0 0 0 0 +1662 92 0 0 46 0 0 0 0 0 +1664 184 1 1 46 0 0 0 0 0 +1670 92 0 0 46 11 1 0 0 0 +1676 230 0 0 46 0 0 0 0 0 +1677 184 21 1 46 0 0 0 0 0 +1678 90 0 0 45 0 0 0 0 0 +1681 16 1 1 1 0 0 0 0 0 +1682 13 0 0 2 0 0 2 0 0 +1698 3052 0 0 0 0 0 0 0 0 +1699 1224 1 1 569 165 9 0 0 0 +1700 344 0 0 86 9 0 0 0 0 +1704 344 0 0 172 0 0 0 0 0 +1705 249 1 1 83 0 0 0 0 0 +1710 6 0 0 0 0 0 0 0 0 +1711 48 1 1 3 0 0 0 0 0 +1721 122 1 1 9 0 0 12 0 0 +1729 546 1 1 364 40 2 0 0 0 +1731 86 0 0 0 0 0 0 0 0 +1732 774 1 1 258 0 0 0 0 0 +1735 258 0 0 0 0 0 0 0 0 +1740 5 0 0 0 0 0 0 0 0 +1741 172 1 1 81 0 0 0 0 0 +1744 10 0 0 0 0 0 0 0 0 +1747 10 0 0 5 0 0 0 0 0 +1748 20 1 1 5 0 0 0 0 0 +1749 5 0 0 5 0 0 0 0 0 +1750 15 0 0 5 0 0 0 0 0 +1751 15 0 0 5 0 0 0 0 0 +1761 138 0 0 0 0 0 46 0 0 +1765 891 0 0 693 0 0 0 0 0 +fn=open_verify.constprop.1 +1466 11 1 1 0 0 0 6 0 0 +1536 4 0 0 0 0 0 1 1 1 +1538 2 0 0 0 0 0 0 0 0 +1543 2 0 0 0 0 0 0 0 0 +1549 3 1 1 0 0 0 1 0 0 +1550 2 0 0 0 0 0 2 1 1 +1555 6 0 0 1 0 0 1 0 0 +1557 2 0 0 0 0 0 0 0 0 +1559 3 0 0 1 0 0 1 0 0 +1561 2 0 0 0 0 0 0 0 0 +1567 2 1 1 0 0 0 0 0 0 +1583 16 2 2 8 0 0 0 0 0 +1657 2 0 0 1 0 0 0 0 0 +1662 2 0 0 1 0 0 0 0 0 +1664 4 0 0 1 0 0 0 0 0 +1670 2 0 0 1 0 0 0 0 0 +1676 5 0 0 1 1 1 0 0 0 +1677 4 1 1 1 0 0 0 0 0 +1678 2 0 0 1 0 0 0 0 0 +1698 70 0 0 0 0 0 0 0 0 +1699 28 1 1 13 7 7 0 0 0 +1700 8 0 0 2 1 1 0 0 0 +1704 8 1 1 4 0 0 0 0 0 +1705 6 1 1 2 0 0 0 0 0 +1721 4 1 1 0 0 0 0 0 0 +1729 12 0 0 8 3 3 0 0 0 +1731 2 0 0 0 0 0 0 0 0 +1732 18 1 1 6 0 0 0 0 0 +1735 6 0 0 0 0 0 0 0 0 +1741 4 1 1 2 0 0 0 0 0 +1761 2 0 0 0 0 0 1 0 0 +1765 9 0 0 7 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-lookup.c +fn=_dl_lookup_symbol_x +581 16312 0 0 0 0 0 0 0 0 +582 818300 0 0 202536 7108 3937 0 0 0 +583 777520 0 0 0 0 0 0 0 0 +841 114184 24 5 0 0 0 81560 52 4 +843 16312 0 0 0 0 0 8156 26 3 +844 16312 14 3 0 0 0 8156 0 0 +847 8156 0 0 8156 32 1 0 0 0 +851 31508 0 0 15754 0 0 0 0 0 +853 48936 0 0 8156 0 0 8156 0 0 +854 40780 0 0 32624 80 1 0 0 0 +860 17158 12 3 282 39 0 0 0 0 +861 138511 12 3 48795 0 0 57092 29 4 +866 16312 12 3 8156 0 0 0 0 0 +868 846 2 2 141 15 0 0 0 0 +885 141 1 1 0 0 0 141 0 0 +886 282 0 0 0 0 0 0 0 0 +890 64120 0 0 16030 198 0 0 0 0 +930 32060 0 0 8015 0 0 0 0 0 +944 24045 0 0 8015 971 10 0 0 0 +945 2 1 1 0 0 0 1 0 0 +947 32060 14 3 16030 0 0 0 0 0 +952 8015 0 0 0 0 0 8015 0 0 +954 73404 0 0 57092 470 0 0 0 0 +fn=_dl_setup_hash +961 49 1 1 0 0 0 0 0 0 +964 147 0 0 49 0 0 0 0 0 +966 49 0 0 49 0 0 0 0 0 +968 98 0 0 49 49 49 49 1 1 +969 49 1 1 49 0 0 0 0 0 +970 49 0 0 49 1 1 0 0 0 +972 147 0 0 0 0 0 0 0 0 +973 49 0 0 0 0 0 49 0 0 +974 147 0 0 49 0 0 49 0 0 +976 49 0 0 0 0 0 49 0 0 +977 98 0 0 0 0 0 0 0 0 +979 49 0 0 0 0 0 49 0 0 +981 147 1 1 0 0 0 49 0 0 +986 49 0 0 49 0 0 0 0 0 +fn=check_match +75 107692 25 5 24852 5180 2270 41420 47 7 +78 49704 0 0 8284 987 536 0 0 0 +91 49236 11 3 0 0 0 0 0 0 +94 47452 0 0 10400 0 0 5200 0 0 +98 8126 0 0 8126 761 4 0 0 0 +99 16252 0 0 0 0 0 0 0 0 +101 15418 0 0 0 0 0 0 0 0 +120 15418 0 0 15418 3943 259 0 0 0 +121 61672 11 2 23127 1617 15 0 0 0 +122 37980 11 2 15192 144 8 7596 0 0 +123 226 0 0 113 0 0 0 0 0 +124 4 0 0 0 0 0 0 0 0 +149 834 0 0 0 0 0 0 0 0 +151 2502 3 3 834 213 22 0 0 0 +152 1668 0 0 0 0 0 0 0 0 +155 16 0 0 0 0 0 0 0 0 +156 56 0 0 24 0 0 8 0 0 +158 24 0 0 8 0 0 8 0 0 +160 8362 1 1 0 0 0 0 0 0 +167 49704 0 0 49704 0 0 0 0 0 +fn=do_lookup_x +175 280 0 0 0 0 0 0 0 0 +176 280 0 0 0 0 0 0 0 0 +177 954 1 1 255 58 58 0 0 0 +179 103 0 0 0 0 0 0 0 0 +180 309 0 0 0 0 0 0 0 0 +181 526 1 1 0 0 0 0 0 0 +184 152 0 0 0 0 0 152 0 0 +185 537 1 1 71 0 0 152 0 0 +187 153 0 0 1 0 0 152 0 0 +188 70 0 0 0 0 0 0 0 0 +226 121 0 0 0 0 0 121 0 0 +227 363 1 1 242 0 0 121 0 0 +229 847 0 0 121 4 0 242 0 0 +231 363 1 1 121 0 0 121 0 0 +232 121 0 0 121 0 0 0 0 0 +233 363 0 0 121 0 0 0 0 0 +235 2324 1 1 191 0 0 360 0 0 +236 720 0 0 0 0 0 0 0 0 +239 1052 1 1 526 98 42 0 0 0 +240 156 0 0 39 0 0 39 0 0 +242 195 0 0 117 0 0 0 0 0 +252 39 0 0 39 0 0 0 0 0 +253 156 0 0 78 0 0 0 0 0 +255 156 0 0 78 0 0 78 0 0 +256 39 0 0 0 0 0 0 0 0 +259 448 0 0 0 0 0 0 0 0 +262 143 0 0 0 0 0 0 0 0 +263 429 0 0 0 0 0 0 0 0 +264 142 1 1 0 0 0 0 0 0 +267 1215 0 0 405 0 0 0 0 0 +274 12 1 1 0 0 0 6 0 0 +276 8 0 0 0 0 0 2 0 0 +277 4 0 0 0 0 0 0 0 0 +284 296 1 1 6 0 0 0 0 0 +285 276 0 0 92 8 1 0 0 0 +286 350 1 1 210 0 0 70 0 0 +290 18 1 1 6 1 0 6 0 0 +291 4 0 0 0 0 0 2 0 0 +293 4 0 0 2 0 0 2 0 0 +294 56073 9 3 40039 1 0 4 0 0 +310 2 1 1 0 0 0 0 0 0 +318 2 0 0 1 0 0 0 0 0 +319 5 1 1 0 0 0 3 0 0 +320 2 0 0 0 0 0 0 0 0 +323 1 0 0 0 0 0 1 0 0 +324 3 0 0 0 0 0 1 0 0 +325 33886 7 4 28216 1 0 1 1 0 +328 660 2 2 328 0 0 0 0 0 +336 324 0 0 81 0 0 0 0 0 +347 574 1 1 164 0 0 0 0 0 +352 328 0 0 164 0 0 164 0 0 +354 328 0 0 164 0 0 82 0 0 +368 114184 14 3 16312 0 0 81560 90 16 +369 8156 0 0 8156 199 1 0 0 0 +375 8156 0 0 8156 0 0 0 0 0 +379 257856 12 3 257856 14031 23 0 0 0 +382 257856 0 0 0 0 0 0 0 0 +386 282644 0 0 8316 2 0 8156 0 0 +390 257782 0 0 128891 25094 21 0 0 0 +394 257782 0 0 128891 20 0 0 0 0 +400 386673 0 0 128891 10385 8 0 0 0 +404 128891 8 3 0 0 0 128891 0 0 +405 128891 0 0 0 0 0 128891 0 0 +408 386673 0 0 257782 31338 40 128891 0 0 +409 386673 0 0 257782 12629 11 128891 0 0 +412 128891 0 0 128891 0 0 0 0 0 +413 257782 0 0 0 0 0 0 0 0 +415 128891 0 0 128891 84891 428 0 0 0 +416 16312 0 0 0 0 0 8156 0 0 +417 257782 0 0 257782 0 0 0 0 0 +420 644455 0 0 257782 0 0 0 0 0 +423 902237 0 0 0 0 0 0 0 0 +426 30762 10 2 30762 11423 1094 0 0 0 +427 46143 10 3 0 0 0 0 0 0 +428 30762 0 0 0 0 0 0 0 0 +430 27300 0 0 13650 0 0 0 0 0 +433 132960 0 0 26592 11948 1572 0 0 0 +435 24852 10 3 8284 0 0 0 0 0 +436 288060 20 5 82370 0 0 131604 36 7 +437 16568 0 0 0 0 0 0 0 0 +440 25406 0 0 277 0 0 0 0 0 +443 55755 0 0 0 0 0 0 0 0 +451 40780 11 3 0 0 0 8156 0 0 +474 11294 23 6 5651 0 0 0 0 0 +476 16 0 0 0 0 0 0 0 0 +482 16030 11 3 8015 0 0 0 0 0 +533 16030 0 0 0 0 0 0 0 0 +536 54102 0 0 8015 0 0 0 0 0 +540 7332 10 2 2444 75 0 0 0 0 +552 39470 0 0 7894 0 0 7894 79 0 +554 16030 0 0 0 0 0 0 0 0 +571 362739 0 0 0 0 0 0 0 0 +574 141 0 0 0 0 0 0 0 0 +575 65248 0 0 57092 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-minimal.c +fn=calloc +92 202 22 1 0 0 0 0 0 0 +96 101 0 0 0 0 0 0 0 0 +99 202 1 1 0 0 0 0 0 0 +100 303 0 0 0 0 0 0 0 0 +103 101 0 0 0 0 0 0 0 0 +fn=free +109 50 0 0 0 0 0 0 0 0 +111 200 1 1 100 0 0 0 0 0 +fn=malloc +49 1250 1 1 0 0 0 500 1 1 +50 1000 0 0 500 5 0 0 0 0 +55 5 0 0 2 0 0 1 0 0 +56 2 1 1 1 0 0 0 0 0 +57 2 0 0 0 0 0 0 0 0 +61 750 1 1 0 0 0 250 0 0 +64 1702 0 0 0 0 0 0 0 0 +69 48 1 1 12 0 0 0 0 0 +70 24 0 0 0 0 0 0 0 0 +72 12 0 0 0 0 0 0 0 0 +73 96 0 0 0 0 0 12 0 0 +75 24 0 0 0 0 0 0 0 0 +77 24 0 0 12 0 0 0 0 0 +79 48 0 0 0 0 0 12 0 0 +82 250 0 0 0 0 0 250 0 0 +83 250 0 0 0 0 0 250 0 0 +85 1000 0 0 750 0 0 0 0 0 +fn=strsep +262 2 1 1 0 0 0 0 0 0 +265 4 0 0 2 1 1 0 0 0 +267 2 0 0 2 0 0 0 0 0 +268 4 0 0 0 0 0 0 0 0 +272 77 1 1 15 0 0 0 0 0 +277 56 0 0 28 0 0 0 0 0 +279 84 0 0 28 0 0 0 0 0 +287 14 0 0 0 0 0 0 0 0 +290 1 0 0 0 0 0 1 0 0 +294 4 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-misc.c +fn=_dl_higher_prime_number +300 2 0 0 0 0 0 0 0 0 +337 2 0 0 0 0 0 0 0 0 +338 2 0 0 0 0 0 0 0 0 +340 26 1 1 0 0 0 0 0 0 +342 80 0 0 0 0 0 0 0 0 +343 37 0 0 10 2 1 0 0 0 +344 6 0 0 0 0 0 0 0 0 +358 2 0 0 2 0 0 0 0 0 +359 2 0 0 2 0 0 0 0 0 +fn=_dl_name_match_p +282 37632 1 1 0 0 0 12544 0 0 +283 31360 0 0 6272 1337 0 6272 1 1 +284 6539 0 0 0 0 0 0 0 0 +286 6272 0 0 6272 729 0 0 0 0 +288 25024 0 0 0 0 0 0 0 0 +289 32535 1 1 6507 1835 0 6507 0 0 +292 6240 0 0 6240 0 0 0 0 0 +294 6005 0 0 0 0 0 0 0 0 +295 25088 0 0 18816 0 0 0 0 0 +fn=_dl_sysdep_read_whole_file +44 9 2 2 0 0 0 4 0 0 +47 3 0 0 0 0 0 1 0 0 +48 2 0 0 0 0 0 0 0 0 +50 7 0 0 0 0 0 1 0 0 +52 2 0 0 1 0 0 1 0 0 +55 2 1 1 0 0 0 0 0 0 +57 8 0 0 0 0 0 1 0 0 +68 3 0 0 0 0 0 1 0 0 +71 7 0 0 5 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-object.c +fn=_dl_add_to_namespace_list +31 288 1 1 0 0 0 144 0 0 +33 144 1 1 48 32 0 48 0 0 +35 335 0 0 48 0 0 0 0 0 +38 4700 0 0 1175 29 0 0 0 0 +40 47 0 0 0 0 0 47 0 0 +42 47 0 0 0 0 0 47 0 0 +45 2 1 1 0 0 0 1 0 0 +46 144 0 0 48 0 0 0 0 0 +47 96 0 0 48 0 0 48 0 0 +48 96 0 0 0 0 0 48 0 0 +50 96 0 0 48 0 0 0 0 0 +51 144 0 0 144 0 0 0 0 0 +fn=_dl_new_object +59 624 1 1 0 0 0 432 3 3 +62 144 0 0 0 0 0 48 0 0 +64 2 1 1 0 0 0 0 0 0 +65 6 0 0 0 0 0 0 0 0 +69 2 0 0 0 0 0 0 0 0 +74 1 0 0 0 0 0 0 0 0 +77 423 0 0 47 0 0 47 0 0 +89 240 1 1 0 0 0 144 0 0 +92 96 0 0 0 0 0 0 0 0 +95 48 0 0 0 0 0 48 37 37 +96 144 1 1 48 0 0 48 48 48 +100 96 0 0 0 0 0 48 12 12 +101 384 0 0 96 0 0 144 22 22 +103 48 0 0 0 0 0 48 0 0 +116 334 1 1 144 0 0 0 0 0 +122 1 0 0 0 0 0 0 0 0 +124 336 1 1 96 48 48 96 0 0 +127 96 0 0 48 0 0 0 0 0 +128 96 1 1 0 0 0 48 48 48 +129 48 0 0 0 0 0 48 0 0 +133 48 0 0 0 0 0 48 0 0 +136 246 23 2 47 0 0 0 0 0 +138 16 0 0 0 0 0 16 4 4 +146 96 0 0 0 0 0 48 8 8 +147 48 0 0 0 0 0 48 48 48 +150 1 1 1 0 0 0 0 0 0 +152 288 1 1 48 0 0 0 0 0 +154 188 0 0 0 0 0 47 25 25 +157 98 0 0 0 0 0 0 0 0 +161 540 0 0 135 2 0 0 0 0 +165 235 0 0 0 0 0 0 0 0 +167 1 1 1 0 0 0 0 0 0 +173 1 0 0 0 0 0 1 1 1 +176 96 0 0 0 0 0 48 0 0 +186 144 0 0 0 0 0 48 0 0 +188 235 1 1 47 0 0 94 0 0 +192 188 0 0 47 0 0 0 0 0 +196 141 0 0 0 0 0 47 0 0 +197 188 0 0 0 0 0 0 0 0 +205 47 0 0 0 0 0 0 0 0 +209 47 0 0 0 0 0 0 0 0 +242 188 1 1 94 0 0 47 0 0 +247 1530 0 0 0 0 0 0 0 0 +248 1530 0 0 765 0 0 0 0 0 +250 94 0 0 0 0 0 0 0 0 +253 47 0 0 0 0 0 47 0 0 +256 47 0 0 0 0 0 47 14 14 +260 432 0 0 336 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-open.c +fn=_dl_find_dso_for_object +201 9 1 1 0 0 0 4 0 0 +205 3 0 0 1 0 0 0 0 0 +206 25 0 0 8 2 0 0 0 0 +207 32 1 1 16 7 0 0 0 0 +208 2 0 0 1 0 0 0 0 0 +211 2 1 1 1 0 0 0 0 0 +215 7 0 0 5 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-profstub.c +fn=_dl_mcount_wrapper_check +37 800 3 1 0 0 0 0 0 0 +38 1200 0 0 800 1 0 0 0 0 +40 400 3 1 400 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-reloc.c +fn=_dl_relocate_object +148 637 1 1 0 0 0 392 0 0 +158 44 0 0 0 0 0 0 0 0 +159 147 1 1 0 0 0 98 0 0 +163 98 1 1 0 0 0 0 0 0 +164 245 0 0 49 43 0 49 0 0 +170 98 0 0 49 0 0 0 0 0 +176 245 1 1 98 0 0 0 0 0 +177 98 1 1 49 49 1 0 0 0 +180 125 0 0 0 0 0 0 0 0 +187 196 0 0 49 14 0 49 0 0 +227 147 1 1 98 26 0 49 0 0 +255 2436 4 4 1025 242 6 363 1 0 +258 196 1 1 49 0 0 0 0 0 +282 49 0 0 49 12 0 0 0 0 +285 98 0 0 49 1 0 0 0 0 +302 147 0 0 49 46 1 0 0 0 +304 392 0 0 343 32 0 0 0 0 +310 294 1 1 147 14 0 0 0 0 +313 98 0 0 0 0 0 0 0 0 +317 98 1 1 0 0 0 0 0 0 +318 294 0 0 0 0 0 49 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-sort-maps.c +fn=_dl_sort_maps +28 26 2 2 0 0 0 20 0 0 +30 4 0 0 0 0 0 0 0 0 +33 8 2 2 0 0 0 2 0 0 +34 40 4 4 2 0 0 2 0 0 +35 26 0 0 4 0 0 8 0 0 +39 756 0 0 252 0 0 252 0 0 +40 378 0 0 252 0 0 0 0 0 +42 252 0 0 126 0 0 0 0 0 +46 252 2 2 126 7 0 0 0 0 +54 10784 2 2 498 0 0 0 0 0 +56 7710 0 0 5140 60 20 0 0 0 +57 5140 0 0 0 0 0 0 0 0 +59 37770 2 2 12590 120 67 0 0 0 +60 30492 2 2 0 0 0 0 0 0 +65 240 0 0 30 0 0 120 0 0 +66 120 0 0 0 0 0 60 0 0 +67 30 0 0 0 0 0 30 0 0 +69 240 2 2 180 0 0 0 0 0 +77 210 0 0 90 0 0 0 0 0 +84 180 0 0 0 0 0 90 0 0 +85 120 0 0 90 0 0 30 0 0 +87 60 0 0 30 0 0 0 0 0 +90 8890 1 1 1270 0 0 0 0 0 +115 570 0 0 190 0 0 0 0 0 +118 846 4 4 94 0 0 94 0 0 +122 16 0 0 14 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-tunables.c +fn=__GI___tunables_init +67 315 1 1 63 0 0 0 0 0 +70 124 1 1 0 0 0 0 0 0 +73 5614 0 0 802 27 27 0 0 0 +77 124 1 1 0 0 0 0 0 0 +82 372 0 0 0 0 0 62 1 1 +278 5 0 0 1 0 0 0 0 0 +287 9 1 1 0 0 0 6 0 0 +310 6448 1 1 0 0 0 0 0 0 +316 8060 0 0 3224 0 0 0 0 0 +328 248 0 0 62 0 0 0 0 0 +362 8 0 0 7 0 0 0 0 0 +fn=__tunable_get_val +368 71 2 2 0 0 0 0 0 0 +371 704 0 0 71 23 10 0 0 0 +380 80 1 1 71 6 3 9 0 0 +390 62 1 1 0 0 0 62 0 0 +391 62 0 0 0 0 0 0 0 0 +397 355 0 0 71 2 1 0 0 0 +399 71 0 0 71 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-tunables.h +fn=__GI___tunables_init +119 4379 1 1 1288 9 9 0 0 0 +120 2576 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/dl-version.c +fn=_dl_check_all_versions +362 6 1 1 0 0 0 4 0 0 +364 2 0 0 0 0 0 0 0 0 +366 152 0 0 49 0 0 0 0 0 +368 490 1 1 49 33 0 49 0 0 +371 7 0 0 5 0 0 0 0 0 +fn=_dl_check_map_versions +37 6573 0 0 290 1 0 0 0 0 +38 2779 0 0 2779 0 0 0 0 0 +39 14620 1 1 0 0 0 2924 1 0 +57 1185 0 0 790 108 0 395 0 0 +65 1185 0 0 395 0 0 0 0 0 +71 1185 1 1 395 46 0 0 0 0 +87 395 0 0 395 72 0 0 0 0 +88 790 0 0 0 0 0 0 0 0 +90 395 0 0 395 0 0 0 0 0 +95 8683 0 0 3354 123 73 790 0 0 +109 6708 0 0 3354 22 19 0 0 0 +111 395 1 1 395 9 7 0 0 0 +114 3305 1 1 935 3 3 395 0 0 +121 8877 1 1 2959 40 24 0 0 0 +125 2959 0 0 0 0 0 0 0 0 +143 725 1 1 0 0 0 435 0 0 +156 490 1 1 0 0 0 392 2 0 +157 49 0 0 0 0 0 49 0 0 +165 49 0 0 0 0 0 0 0 0 +171 147 0 0 49 14 0 0 0 0 +173 98 0 0 49 20 0 49 0 0 +175 98 1 1 49 12 0 49 0 0 +176 147 0 0 49 18 0 49 1 0 +178 98 0 0 0 0 0 0 0 0 +181 141 0 0 94 49 0 47 0 0 +185 329 1 1 94 39 36 0 0 0 +198 98 0 0 0 0 0 0 0 0 +199 98 0 0 0 0 0 0 0 0 +201 290 0 0 290 18 18 0 0 0 +209 435 0 0 145 0 0 0 0 0 +210 47 1 1 0 0 0 0 0 0 +214 435 0 0 290 10 7 0 0 0 +218 3305 1 1 2823 2 0 0 0 0 +220 395 0 0 395 38 38 0 0 0 +222 1040 0 0 395 66 66 395 0 0 +225 1580 1 1 395 0 0 0 0 0 +228 1185 0 0 395 0 0 0 0 0 +233 250 0 0 0 0 0 0 0 0 +237 580 0 0 290 0 0 0 0 0 +242 196 0 0 0 0 0 98 0 0 +251 193 0 0 49 0 0 0 0 0 +254 152 0 0 114 15 0 0 0 0 +257 1048 0 0 262 42 21 0 0 0 +260 786 0 0 262 17 5 0 0 0 +264 224 0 0 0 0 0 0 0 0 +268 96 1 1 0 0 0 0 0 0 +273 48 0 0 0 0 0 48 35 0 +274 240 2 2 0 0 0 48 0 0 +275 96 0 0 0 0 0 0 0 0 +285 48 0 0 0 0 0 48 1 0 +288 144 0 0 96 71 0 48 39 0 +290 144 1 1 48 0 0 0 0 0 +293 188 0 0 141 0 0 0 0 0 +295 98 0 0 0 0 0 0 0 0 +297 435 0 0 145 3 0 0 0 0 +300 1185 1 1 395 0 0 0 0 0 +302 1580 0 0 0 0 0 0 0 0 +304 1975 0 0 395 0 0 395 0 0 +305 1185 0 0 0 0 0 395 151 151 +306 1185 0 0 395 0 0 395 30 30 +307 1185 0 0 395 0 0 395 8 8 +310 1185 0 0 395 0 0 0 0 0 +315 250 0 0 0 0 0 0 0 0 +318 435 1 1 145 0 0 0 0 0 +323 98 0 0 0 0 0 0 0 0 +328 144 0 0 48 0 0 0 0 0 +331 152 0 0 114 0 0 0 0 0 +335 224 0 0 224 0 0 0 0 0 +337 524 1 1 262 0 0 0 0 0 +341 224 0 0 224 0 0 0 0 0 +342 1120 0 0 224 0 0 224 63 63 +343 672 0 0 224 0 0 224 0 0 +344 224 0 0 0 0 0 224 19 19 +347 786 0 0 262 0 0 0 0 0 +351 224 0 0 0 0 0 0 0 0 +357 441 0 0 392 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/do-rel.h +fn=_dl_relocate_object +47 294 0 0 98 0 0 98 0 0 +48 98 0 0 98 42 0 0 0 0 +50 90 0 0 0 0 0 48 0 0 +51 70 1 1 0 0 0 49 10 0 +58 294 0 0 98 0 0 0 0 0 +61 6624 0 0 0 0 0 0 0 0 +63 8776 1 1 2194 819 819 0 0 0 +65 170 1 1 0 0 0 0 0 0 +74 42 0 0 0 0 0 0 0 0 +75 184 0 0 2 0 0 0 0 0 +76 112 0 0 56 0 0 0 0 0 +83 154 0 0 77 11 0 77 0 0 +84 77 1 1 77 6 0 0 0 0 +86 231 0 0 77 0 0 0 0 0 +98 231 0 0 0 0 0 0 0 0 +108 150 0 0 0 0 0 0 0 0 +111 143421 2 2 0 0 0 0 0 0 +112 95482 0 0 47741 6009 5968 0 0 0 +118 231 0 0 77 71 1 0 0 0 +121 152 1 1 76 49 2 76 10 0 +124 32864 1 1 10980 0 0 0 0 0 +127 43616 0 0 10904 2731 2731 0 0 0 +136 43616 0 0 21808 2172 620 0 0 0 +137 32712 1 1 10904 0 0 0 0 0 +138 45616 0 0 10904 144 0 10904 0 0 +139 32712 0 0 21808 0 0 10904 0 0 +143 240 0 0 96 0 0 0 0 0 +160 21 2 2 7 0 0 2 0 0 +162 20 0 0 5 1 1 0 0 0 +170 30 1 1 5 0 0 5 0 0 +171 15 0 0 10 0 0 5 0 0 +174 3 0 0 1 0 0 0 0 0 +fn=_dl_start +83 1 0 0 1 0 0 0 0 0 +84 1 0 0 1 0 0 0 0 0 +111 129 0 0 0 0 0 0 0 0 +112 84 0 0 42 6 6 0 0 0 +116 2 0 0 1 0 0 0 0 0 +124 29 0 0 0 0 0 0 0 0 +136 27 1 1 9 2 2 0 0 0 +137 18 0 0 0 0 0 0 0 0 +139 18 0 0 9 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/get-dynamic-info.h +fn=_dl_map_object_from_fd +42 47 0 0 0 0 0 0 0 0 +46 47 0 0 0 0 0 0 0 0 +48 4251 1 1 1417 388 388 0 0 0 +50 2740 1 1 0 0 0 0 0 0 +63 1383 0 0 0 0 0 0 0 0 +64 955 0 0 0 0 0 287 116 116 +65 235 0 0 0 0 0 0 0 0 +67 47 0 0 0 0 0 0 0 0 +68 235 1 1 0 0 0 0 0 0 +69 47 0 0 0 0 0 0 0 0 +71 235 0 0 0 0 0 0 0 0 +72 188 0 0 0 0 0 0 0 0 +73 2166 0 0 0 0 0 1083 178 178 +74 1370 0 0 0 0 0 0 0 0 +81 94 0 0 0 0 0 0 0 0 +101 146 0 0 52 0 0 0 0 0 +102 188 1 1 94 0 0 0 0 0 +103 188 0 0 94 0 0 0 0 0 +104 188 0 0 94 0 0 0 0 0 +106 188 0 0 94 0 0 0 0 0 +111 187 0 0 93 1 1 0 0 0 +112 187 1 1 93 1 1 0 0 0 +113 188 0 0 94 0 0 0 0 0 +118 141 0 0 47 0 0 0 0 0 +123 92 0 0 46 0 0 0 0 0 +130 94 1 1 47 0 0 0 0 0 +131 141 0 0 94 0 0 0 0 0 +149 141 0 0 47 0 0 0 0 0 +154 60 0 0 30 0 0 30 9 9 +156 60 0 0 0 0 0 0 0 0 +158 60 0 0 0 0 0 0 0 0 +160 60 0 0 0 0 0 0 0 0 +161 52 1 1 0 0 0 26 0 0 +163 141 1 1 47 0 0 0 0 0 +165 84 0 0 28 0 0 28 1 1 +166 56 0 0 0 0 0 0 0 0 +167 6 0 0 0 0 0 3 0 0 +175 56 1 1 28 0 0 0 0 0 +180 56 0 0 0 0 0 0 0 0 +181 78 0 0 26 0 0 26 0 0 +183 94 0 0 47 0 0 0 0 0 +fn=_dl_start +48 57 1 1 19 6 6 0 0 0 +50 36 1 1 0 0 0 0 0 0 +63 21 0 0 0 0 0 0 0 0 +64 14 0 0 0 0 0 4 2 2 +65 5 1 1 0 0 0 0 0 0 +67 1 0 0 0 0 0 0 0 0 +68 5 1 1 0 0 0 0 0 0 +69 1 0 0 0 0 0 0 0 0 +71 5 1 1 0 0 0 0 0 0 +72 4 0 0 0 0 0 0 0 0 +73 16 0 0 0 0 0 14 5 5 +74 18 0 0 0 0 0 0 0 0 +81 2 0 0 0 0 0 0 0 0 +101 4 1 1 2 0 0 0 0 0 +102 4 0 0 2 0 0 0 0 0 +103 4 0 0 2 0 0 0 0 0 +104 4 0 0 2 0 0 0 0 0 +106 4 1 1 2 0 0 0 0 0 +111 4 0 0 2 0 0 0 0 0 +112 4 0 0 2 0 0 0 0 0 +113 4 0 0 2 0 0 0 0 0 +118 3 1 1 1 0 0 0 0 0 +123 2 0 0 1 0 0 0 0 0 +130 3 0 0 1 0 0 0 0 0 +131 3 0 0 2 0 0 0 0 0 +139 3 0 0 1 0 0 0 0 0 +142 3 1 1 1 1 1 0 0 0 +146 2 0 0 1 0 0 0 0 0 +147 2 1 1 1 0 0 0 0 0 +fn=dl_main +33 1 0 0 1 0 0 0 0 0 +42 2 0 0 0 0 0 0 0 0 +46 1 0 0 0 0 0 0 0 0 +48 96 1 1 32 8 8 0 0 0 +50 62 0 0 0 0 0 0 0 0 +63 25 0 0 0 0 0 0 0 0 +64 17 0 0 0 0 0 5 2 2 +65 5 0 0 0 0 0 0 0 0 +68 5 0 0 0 0 0 0 0 0 +69 1 1 1 0 0 0 0 0 0 +71 5 0 0 0 0 0 0 0 0 +72 5 0 0 0 0 0 0 0 0 +73 26 0 0 0 0 0 26 4 4 +74 31 0 0 0 0 0 0 0 0 +81 3 0 0 1 0 0 0 0 0 +101 3 0 0 1 0 0 0 0 0 +102 4 0 0 2 0 0 0 0 0 +103 4 0 0 2 0 0 0 0 0 +104 4 1 1 2 0 0 0 0 0 +106 4 0 0 2 0 0 0 0 0 +111 4 0 0 2 0 0 0 0 0 +112 4 0 0 2 0 0 0 0 0 +113 4 1 1 2 0 0 0 0 0 +118 3 0 0 1 0 0 0 0 0 +123 2 0 0 1 0 0 0 0 0 +130 2 0 0 1 0 0 0 0 0 +131 3 0 0 2 0 0 0 0 0 +149 3 0 0 1 0 0 0 0 0 +154 2 1 1 1 0 0 1 0 0 +156 2 0 0 0 0 0 0 0 0 +158 2 0 0 0 0 0 0 0 0 +160 2 0 0 0 0 0 0 0 0 +161 2 1 1 0 0 0 1 0 0 +163 3 0 0 1 0 0 0 0 0 +165 3 1 1 1 0 0 1 0 0 +166 2 0 0 0 0 0 0 0 0 +175 2 0 0 1 0 0 0 0 0 +180 2 0 0 0 0 0 0 0 0 +181 3 0 0 1 0 0 1 0 0 +183 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/elf/rtld.c +fn=_dl_start +66 8 0 0 0 0 0 2 1 1 +430 2 0 0 0 0 0 1 1 1 +431 2 1 1 0 0 0 1 0 0 +432 2 0 0 0 0 0 1 0 0 +433 2 0 0 0 0 0 1 1 1 +434 2 0 0 0 0 0 1 0 0 +443 1 0 0 0 0 0 1 0 0 +449 4 1 1 0 0 0 1 0 0 +451 2 0 0 1 0 0 0 0 0 +463 10 2 2 0 0 0 6 1 1 +504 1 0 0 0 0 0 1 0 0 +507 1 0 0 0 0 0 1 1 1 +518 2 0 0 0 0 0 0 0 0 +523 25 2 2 9 0 0 0 0 0 +525 1 0 0 1 1 1 0 0 0 +550 9 0 0 7 2 2 0 0 0 +fn=dl_main +66 16 5 5 0 0 0 0 0 0 +73 12 0 0 0 0 0 0 0 0 +74 2 0 0 0 0 0 1 1 0 +82 8 0 0 3 1 0 0 0 0 +817 1 0 0 1 1 0 0 0 0 +819 1 0 0 0 0 0 1 0 0 +828 1 0 0 0 0 0 1 0 0 +830 1 0 0 0 0 0 1 1 0 +835 1 0 0 0 0 0 1 0 0 +1090 14 2 2 0 0 0 8 2 2 +1096 1 0 0 0 0 0 0 0 0 +1099 1 0 0 0 0 0 1 0 0 +1102 2 0 0 0 0 0 1 1 1 +1106 6 0 0 0 0 0 1 1 1 +1112 2 1 1 0 0 0 1 1 1 +1122 3 0 0 1 0 0 0 0 0 +1330 8 1 1 0 0 0 1 0 0 +1332 2 0 0 0 0 0 0 0 0 +1333 1 1 1 0 0 0 1 1 1 +1334 2 0 0 1 0 0 1 0 0 +1335 2 0 0 1 0 0 1 0 0 +1339 3 0 0 0 0 0 1 0 0 +1340 2 0 0 1 0 0 0 0 0 +1362 1 0 0 0 0 0 1 0 0 +1364 2 1 1 1 1 1 1 0 0 +1366 1 0 0 1 0 0 0 0 0 +1369 41 4 4 12 0 0 1 0 0 +1370 99 2 2 19 5 5 0 0 0 +1374 3 1 1 1 0 0 1 0 0 +1379 3 0 0 2 0 0 1 0 0 +1388 2 0 0 0 0 0 1 1 1 +1389 2 0 0 2 1 1 0 0 0 +1391 1 1 1 0 0 0 1 0 0 +1398 3 1 1 1 0 0 0 0 0 +1410 3 0 0 0 0 0 1 0 0 +1416 1 0 0 0 0 0 0 0 0 +1424 8 1 1 4 0 0 0 0 0 +1425 17 1 1 9 1 1 1 0 0 +1426 8 0 0 4 0 0 0 0 0 +1427 1 0 0 0 0 0 1 0 0 +1430 8 0 0 4 3 3 0 0 0 +1431 8 0 0 4 0 0 0 0 0 +1432 4 0 0 0 0 0 4 0 0 +1433 10 0 0 5 0 0 0 0 0 +1434 1 0 0 0 0 0 1 0 0 +1461 2 1 1 1 0 0 1 0 0 +1465 4 0 0 2 1 1 1 1 1 +1478 7 0 0 4 1 1 0 0 0 +1481 2 0 0 0 0 0 0 0 0 +1483 2 1 1 0 0 0 0 0 0 +1485 3 0 0 1 0 0 0 0 0 +1498 3 0 0 1 0 0 0 0 0 +1499 5 1 1 1 0 0 1 0 0 +1501 3 0 0 3 0 0 0 0 0 +1504 1 0 0 0 0 0 1 0 0 +1506 1 0 0 0 0 0 1 1 1 +1507 1 0 0 0 0 0 1 0 0 +1509 2 0 0 1 0 0 0 0 0 +1510 2 0 0 0 0 0 1 0 0 +1514 2 1 1 1 0 0 0 0 0 +1516 2 0 0 1 0 0 0 0 0 +1521 2 1 1 0 0 0 1 0 0 +1524 2 0 0 1 0 0 0 0 0 +1549 10 0 0 1 0 0 2 0 0 +1554 2 1 1 1 0 0 1 0 0 +1557 4 0 0 1 0 0 2 0 0 +1559 1 0 0 0 0 0 1 0 0 +1564 2 1 1 1 0 0 0 0 0 +1567 4 1 1 2 0 0 1 0 0 +1568 4 0 0 1 0 0 1 0 0 +1569 2 0 0 1 0 0 1 0 0 +1570 1 0 0 0 0 0 1 0 0 +1571 1 0 0 1 0 0 0 0 0 +1572 1 1 1 1 0 0 0 0 0 +1577 2 0 0 1 0 0 0 0 0 +1578 6 0 0 1 0 0 1 0 0 +1595 2 0 0 1 1 1 0 0 0 +1596 2 0 0 1 0 0 0 0 0 +1598 2 1 1 1 0 0 0 0 0 +1600 1 0 0 0 0 0 1 0 0 +1601 3 0 0 1 0 0 1 0 0 +1606 5 1 1 0 0 0 0 0 0 +1607 5 0 0 1 1 1 0 0 0 +1609 4 1 1 2 1 1 1 1 1 +1615 2 0 0 1 1 1 0 0 0 +1620 1 0 0 0 0 0 1 0 0 +1621 3 0 0 1 0 0 0 0 0 +1622 4 1 1 1 0 0 1 0 0 +1640 2 0 0 0 0 0 2 0 0 +1648 3 0 0 1 0 0 0 0 0 +1651 2 0 0 1 0 0 1 0 0 +1655 3 0 0 1 0 0 0 0 0 +1660 2 1 1 1 0 0 1 0 0 +1661 1 0 0 0 0 0 1 0 0 +1662 1 0 0 0 0 0 0 0 0 +1666 3 0 0 1 0 0 0 0 0 +1682 3 0 0 2 0 0 0 0 0 +1684 1 0 0 0 0 0 0 0 0 +1686 2 1 1 1 0 0 0 0 0 +1690 5 0 0 1 0 0 1 0 0 +1694 2 0 0 1 0 0 0 0 0 +1709 5 0 0 0 0 0 1 0 0 +1785 4 0 0 2 0 0 0 0 0 +1789 20 3 3 1 0 0 0 0 0 +1790 1 0 0 0 0 0 0 0 0 +1793 3 0 0 0 0 0 1 0 0 +1794 1 0 0 1 0 0 0 0 0 +1795 2 0 0 0 0 0 0 0 0 +1796 2 0 0 0 0 0 0 0 0 +1805 8 0 0 1 0 0 1 0 0 +1810 199 1 1 1 0 0 0 0 0 +1811 101 0 0 99 2 0 0 0 0 +1814 3 0 0 2 0 0 1 0 0 +1815 3 1 1 1 0 0 0 0 0 +1816 1 0 0 0 0 0 1 0 0 +1818 60 0 0 0 0 0 0 0 0 +1819 84 1 1 41 1 0 0 0 0 +1829 5 1 1 1 0 0 1 0 0 +1831 3 0 0 1 0 0 1 0 0 +1832 3 0 0 1 0 0 0 0 0 +1834 2 0 0 0 0 0 1 0 0 +1836 4 0 0 1 0 0 0 0 0 +1838 3 0 0 1 0 0 0 0 0 +1839 1 1 1 1 0 0 0 0 0 +1852 2 0 0 0 0 0 0 0 0 +1853 2 0 0 1 0 0 1 0 0 +1854 3 0 0 1 0 0 0 0 0 +1856 2 0 0 1 0 0 0 0 0 +1857 1 0 0 0 0 0 1 0 0 +1865 5 1 1 1 0 0 1 0 0 +1866 1 0 0 0 0 0 1 1 0 +1867 5 1 1 0 0 0 1 0 0 +1877 2 0 0 1 0 0 1 0 0 +1878 2 0 0 1 1 0 0 0 0 +1879 3 1 1 0 0 0 2 0 0 +1881 2 0 0 1 0 0 0 0 0 +1886 3 0 0 1 1 0 0 0 0 +2116 3 1 1 1 1 0 0 0 0 +2172 1 0 0 0 0 0 1 0 0 +2176 2 1 1 1 1 0 1 1 0 +2182 2 0 0 1 0 0 1 1 0 +2185 2 0 0 0 0 0 0 0 0 +2193 1 1 1 1 0 0 0 0 0 +2239 3 0 0 1 0 0 0 0 0 +2242 1 0 0 1 0 0 0 0 0 +2246 1 0 0 1 0 0 0 0 0 +2247 151 1 1 0 0 0 0 0 0 +2249 98 0 0 98 75 1 0 0 0 +2254 98 0 0 98 59 1 0 0 0 +2256 100 1 1 0 0 0 0 0 0 +2258 1 1 1 0 0 0 1 0 0 +2259 1 0 0 1 0 0 0 0 0 +2262 49 1 1 49 19 0 0 0 0 +2264 98 0 0 49 39 0 0 0 0 +2265 384 0 0 96 57 2 48 0 0 +2269 110 0 0 55 6 0 0 0 0 +2270 24 1 1 0 0 0 6 0 0 +2278 2 0 0 1 0 0 0 0 0 +2283 4 1 1 2 2 1 0 0 0 +2285 1 1 1 1 1 0 0 0 0 +2292 3 0 0 1 0 0 1 0 0 +2295 2 0 0 1 0 0 0 0 0 +2304 3 0 0 2 1 0 0 0 0 +2306 2 0 0 1 1 0 0 0 0 +2319 1 0 0 1 1 0 0 0 0 +2320 5 0 0 1 1 0 1 0 0 +2330 1 0 0 0 0 0 1 0 0 +2334 3 1 1 1 0 0 0 0 0 +2355 4 0 0 0 0 0 1 0 0 +2356 1 0 0 0 0 0 1 0 0 +2357 1 0 0 0 0 0 1 0 0 +2358 1 0 0 0 0 0 0 0 0 +2362 1 0 0 0 0 0 1 0 0 +2367 8 0 0 7 1 1 0 0 0 +2533 2 0 0 1 0 0 1 1 1 +2535 1 0 0 0 0 0 1 0 0 +2536 1 1 1 0 0 0 0 0 0 +2540 6 0 0 1 0 0 1 0 0 +2542 17 0 0 3 0 0 4 1 1 +2544 2 0 0 0 0 0 0 0 0 +2546 105 0 0 21 0 0 0 0 0 +2547 19 1 1 0 0 0 0 0 0 +2555 12 0 0 2 1 1 0 0 0 +2576 2 1 1 1 0 0 0 0 0 +2583 6 1 1 3 0 0 0 0 0 +2585 2 0 0 0 0 0 1 1 1 +2586 1 0 0 0 0 0 0 0 0 +2631 3 1 1 1 0 0 0 0 0 +2632 5 2 2 2 0 0 0 0 0 +2634 2 1 1 0 0 0 1 1 1 +2635 1 0 0 0 0 0 0 0 0 +2704 3 0 0 1 0 0 0 0 0 +2736 3 1 1 1 0 0 0 0 0 +fn=handle_preload_list +168 3 0 0 1 0 0 0 0 0 +770 1 0 0 0 0 0 1 1 1 +774 1 0 0 0 0 0 1 0 0 +775 1 0 0 0 0 0 1 0 0 +776 1 0 0 0 0 0 1 0 0 +778 1 0 0 1 0 0 0 0 0 +780 6 1 1 0 0 0 1 0 0 +781 3 0 0 1 0 0 0 0 0 +789 4 0 0 1 0 0 0 0 0 +858 10 1 1 1 1 1 6 0 0 +859 1 1 1 0 0 0 0 0 0 +863 7 0 0 2 0 0 0 0 0 +866 4 0 0 0 0 0 1 1 1 +867 3 0 0 0 0 0 0 0 0 +869 6 1 1 0 0 0 1 0 0 +870 2 0 0 0 0 0 1 1 1 +876 1 1 1 0 0 0 0 0 0 +878 2 0 0 1 0 0 0 0 0 +880 2 0 0 1 0 0 0 0 0 +884 9 0 0 7 0 0 0 0 0 +fn=init_tls +699 1 1 1 0 0 0 1 0 0 +701 2 1 1 1 1 0 1 0 0 +705 2 0 0 1 1 0 0 0 0 +711 2 0 0 0 0 0 1 0 0 +714 1 0 0 0 0 0 1 0 0 +715 3 0 0 0 0 0 1 0 0 +716 1 0 0 0 0 0 0 0 0 +720 1 0 0 0 0 0 0 0 0 +722 1 1 1 0 0 0 1 0 0 +726 2 0 0 1 1 1 0 0 0 +727 2 0 0 0 0 0 0 0 0 +728 102 0 0 1 0 0 0 0 0 +729 61 2 2 49 6 0 0 0 0 +730 147 0 0 49 49 0 0 0 0 +734 12 0 0 0 0 0 6 2 2 +736 6 0 0 0 0 0 0 0 0 +738 2 0 0 0 0 0 0 0 0 +741 1 0 0 0 0 0 1 0 0 +748 2 0 0 0 0 0 1 0 0 +749 2 0 0 0 0 0 0 0 0 +755 2 0 0 1 0 0 1 0 0 +758 7 0 0 0 0 0 2 0 0 +761 1 0 0 0 0 0 1 1 0 +764 3 0 0 2 0 0 0 0 0 +fn=map_doit +606 3 1 1 0 0 0 1 0 0 +608 4 0 0 1 0 0 0 0 0 +609 6 0 0 2 0 0 2 0 0 +611 2 0 0 2 0 0 0 0 0 +fn=rtld_lock_default_lock_recursive +801 169 1 1 0 0 0 0 0 0 +802 169 0 0 169 36 2 0 0 0 +803 169 0 0 169 0 0 0 0 0 +fn=rtld_lock_default_unlock_recursive +807 169 0 0 0 0 0 0 0 0 +808 169 0 0 169 0 0 0 0 0 +809 169 0 0 169 0 0 0 0 0 +fn=version_check_doit +639 3 1 1 0 0 0 1 0 0 +641 6 1 0 2 0 0 1 0 0 +645 2 0 0 2 1 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/iconv/../iconv/loop.c +fn=__gconv_transform_utf8_internal +301 16 0 0 0 0 0 16 0 0 +309 128 0 0 0 0 0 0 0 0 +322 96 0 0 0 0 0 0 0 0 +323 48 0 0 0 0 0 0 0 0 +336 448 2 1 48 0 0 48 0 0 +340 32 3 1 16 0 0 16 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/iconv/../iconv/skeleton.c +fn=__gconv_transform_utf8_internal +399 272 4 2 32 0 0 160 0 0 +400 32 0 0 0 0 0 16 0 0 +401 32 0 0 0 0 0 16 0 0 +402 16 0 0 0 0 0 16 0 0 +405 48 2 1 16 0 0 0 0 0 +417 32 0 0 0 0 0 0 0 0 +511 32 0 0 32 0 0 0 0 0 +513 80 0 0 32 0 0 0 0 0 +514 16 0 0 16 0 0 0 0 0 +518 16 0 0 0 0 0 16 0 0 +519 80 0 0 16 0 0 16 0 0 +556 80 4 2 16 0 0 0 0 0 +559 80 2 1 32 0 0 0 0 0 +647 32 2 1 16 0 0 0 0 0 +654 16 0 0 16 0 0 0 0 0 +658 32 0 0 16 0 0 0 0 0 +661 16 0 0 0 0 0 16 0 0 +665 64 4 2 64 0 0 0 0 0 +667 16 0 0 0 0 0 0 0 0 +789 80 2 1 16 0 0 0 0 0 +813 192 2 1 144 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/iconv/../sysdeps/unix/sysv/linux/not-cancel.h +fn=__gconv_load_cache +60 2 0 0 0 0 0 1 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/iconv/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +fn=__gconv_find_transform +47 8 0 0 4 1 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/iconv/gconv_builtin.c +fn=__gconv_get_builtin_trans +63 12 0 0 0 0 0 0 0 0 +66 8 1 1 0 0 0 0 0 0 +67 306 3 3 296 2 2 0 0 0 +72 20 1 1 4 2 2 4 0 0 +74 8 0 0 0 0 0 4 0 0 +76 4 0 0 0 0 0 4 0 0 +79 40 0 0 4 0 0 4 0 0 +80 4 0 0 4 0 0 0 0 0 +81 8 0 0 4 0 0 0 0 0 +82 4 0 0 4 0 0 0 0 0 +85 8 1 1 4 0 0 4 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/iconv/gconv_cache.c +fn=__gconv_load_cache +49 7 2 2 1 0 0 3 0 0 +56 3 0 0 0 0 0 2 1 1 +57 2 0 0 0 0 0 0 0 0 +61 6 0 0 0 0 0 1 0 0 +62 2 0 0 0 0 0 0 0 0 +67 6 1 1 0 0 0 1 0 0 +70 3 0 0 1 0 0 0 0 0 +78 1 0 0 0 0 0 1 0 0 +80 7 1 1 0 0 0 2 0 0 +81 2 0 0 0 0 0 0 0 0 +113 1 0 0 1 0 0 0 0 0 +114 2 0 0 1 1 1 0 0 0 +115 4 0 0 2 0 0 0 0 0 +116 3 0 0 1 0 0 0 0 0 +117 3 1 1 1 0 0 0 0 0 +118 2 0 0 0 0 0 0 0 0 +119 1 0 0 0 0 0 0 0 0 +121 3 0 0 1 0 0 0 0 0 +122 3 0 0 1 0 0 0 0 0 +139 1 0 0 0 0 0 0 0 0 +140 8 1 1 5 0 0 0 0 0 +fn=__gconv_lookup_cache +248 48 2 2 4 0 0 32 0 0 +258 20 0 0 4 0 0 0 0 0 +263 8 0 0 4 0 0 0 0 0 +264 4 0 0 0 0 0 0 0 0 +265 8 0 0 4 0 0 0 0 0 +267 20 0 0 0 0 0 4 0 0 +268 32 1 1 12 0 0 4 0 0 +271 4 0 0 0 0 0 0 0 0 +273 24 1 1 0 0 0 4 0 0 +274 28 1 1 12 0 0 0 0 0 +277 4 0 0 0 0 0 0 0 0 +280 16 0 0 8 0 0 0 0 0 +284 12 0 0 0 0 0 0 0 0 +359 8 1 1 2 1 1 0 0 0 +360 12 1 1 6 0 0 0 0 0 +366 16 1 1 0 0 0 8 0 0 +367 12 0 0 4 0 0 0 0 0 +370 8 0 0 4 0 0 4 0 0 +371 10 1 1 0 0 0 4 0 0 +376 6 0 0 2 0 0 2 0 0 +377 4 0 0 0 0 0 2 2 2 +379 4 0 0 2 0 0 2 0 0 +380 2 0 0 0 0 0 2 2 2 +383 10 2 2 4 0 0 0 0 0 +399 12 1 1 2 0 0 4 0 0 +402 6 0 0 2 0 0 2 0 0 +406 4 0 0 2 0 0 0 0 0 +410 2 0 0 0 0 0 2 0 0 +411 6 0 0 2 0 0 2 0 0 +413 2 0 0 0 0 0 2 0 0 +414 2 0 0 0 0 0 2 2 2 +417 12 0 0 6 0 0 0 0 0 +435 8 0 0 0 0 0 2 0 0 +438 4 1 1 2 0 0 0 0 0 +442 48 0 0 36 0 0 0 0 0 +fn=find_module_idx +145 72 1 1 0 0 0 64 0 0 +154 8 0 0 8 0 0 0 0 0 +155 16 0 0 8 0 0 8 0 0 +157 8 0 0 8 0 0 0 0 0 +159 16 1 1 0 0 0 8 0 0 +160 32 0 0 8 0 0 0 0 0 +161 40 0 0 0 0 0 0 0 0 +163 32 0 0 16 0 0 8 0 0 +164 104 1 1 16 5 4 0 0 0 +165 48 0 0 16 0 0 0 0 0 +166 96 0 0 32 0 0 16 0 0 +168 24 1 1 16 0 0 8 0 0 +172 8 0 0 0 0 0 0 0 0 +173 48 0 0 0 0 0 0 0 0 +177 64 0 0 56 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/iconv/gconv_conf.c +fn=__gconv_load_conf +617 4 1 1 0 0 0 0 0 0 +618 36 1 1 12 0 0 0 0 0 +fn=__gconv_read_conf +539 12 2 2 1 0 0 7 0 0 +542 3 0 0 2 0 0 1 0 0 +546 3 0 0 0 0 0 1 0 0 +549 2 0 0 1 0 0 1 0 0 +604 11 1 1 9 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/iconv/gconv_db.c +fn=__gconv_find_transform +722 64 2 2 4 0 0 28 0 0 +728 4 0 0 0 0 0 4 0 0 +731 12 0 0 4 0 0 0 0 0 +733 28 0 0 0 0 0 4 0 0 +734 8 0 0 0 0 0 0 0 0 +737 16 1 1 8 0 0 0 0 0 +779 48 0 0 36 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/iconv/gconv_simple.c +fn=__gconv_btwoc_ascii +50 384 3 1 0 0 0 0 0 0 +52 1536 0 0 0 0 0 0 0 0 +55 384 0 0 384 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/intl/../include/../locale/localeinfo.h +fn=__dcigettext +206 6 1 1 2 1 1 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/intl/../intl/l10nflist.c +fn=_nl_normalize_codeset +311 8 1 1 0 0 0 6 0 0 +312 4 0 0 0 0 0 0 0 0 +313 2 0 0 0 0 0 0 0 0 +323 34 2 2 0 0 0 0 0 0 +324 50 0 0 22 2 1 0 0 0 +326 8 0 0 0 0 0 0 0 0 +328 8 0 0 0 0 0 0 0 0 +329 18 0 0 0 0 0 0 0 0 +332 8 0 0 0 0 0 2 0 0 +334 6 0 0 0 0 0 0 0 0 +341 30 0 0 0 0 0 0 0 0 +342 30 1 1 20 0 0 0 0 0 +343 24 0 0 8 2 2 6 0 0 +344 16 0 0 0 0 0 0 0 0 +345 4 0 0 0 0 0 2 0 0 +347 2 0 0 0 0 0 2 0 0 +351 10 0 0 8 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/intl/bindtextdom.c +fn=bindtextdomain +82 9 1 1 2 1 1 1 0 0 +319 3 1 1 0 0 0 1 0 0 +322 2 0 0 1 0 0 0 0 0 +fn=set_binding_values.part.0 +75 10 1 0 0 0 0 6 0 0 +91 8 1 1 3 0 0 1 0 0 +95 5 0 0 2 2 1 0 0 0 +189 5 1 1 1 0 0 0 0 0 +201 4 0 0 0 0 0 2 0 0 +203 3 0 0 0 0 0 1 0 0 +205 3 0 0 1 0 0 0 0 0 +208 3 1 1 0 0 0 1 0 0 +216 1 0 0 0 0 0 0 0 0 +219 6 0 0 0 0 0 1 0 0 +238 1 0 0 0 0 0 1 0 0 +239 1 0 0 0 0 0 1 0 0 +245 2 0 0 0 0 0 0 0 0 +270 2 1 1 0 0 0 1 0 0 +273 3 1 1 1 0 0 0 0 0 +276 1 1 1 0 0 0 1 0 0 +277 2 0 0 0 0 0 1 0 0 +310 2 1 1 2 0 0 0 0 0 +312 8 1 1 3 0 0 0 0 0 +313 7 0 0 6 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/intl/dcgettext.c +fn=dcgettext +46 2 1 1 0 0 0 0 0 0 +47 4 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/intl/dcigettext.c +fn=__dcigettext +485 16 2 2 1 0 0 11 0 0 +494 1 0 0 0 0 0 1 0 0 +508 3 1 1 0 0 0 0 0 0 +512 4 0 0 0 0 0 0 0 0 +521 3 0 0 2 2 1 1 0 0 +525 9 1 1 3 2 2 1 0 0 +528 8 0 0 3 0 0 1 0 0 +534 2 0 0 1 1 1 0 0 0 +544 1 0 0 0 0 0 1 0 0 +545 1 0 0 0 0 0 1 0 0 +546 1 0 0 0 0 0 1 0 0 +547 2 1 1 1 0 0 1 0 0 +551 3 0 0 0 0 0 2 0 0 +560 1 0 0 0 0 0 1 0 0 +567 8 1 1 3 0 0 1 0 0 +569 5 1 1 0 0 0 2 0 0 +571 8 0 0 3 0 0 1 0 0 +573 3 0 0 1 0 0 0 0 0 +601 7 1 1 3 2 2 0 0 0 +603 3 1 1 0 0 0 1 0 0 +604 2 0 0 0 0 0 0 0 0 +607 1 1 1 0 0 0 0 0 0 +616 2 0 0 0 0 0 1 0 0 +650 3 0 0 0 0 0 2 0 0 +651 20 2 2 2 0 0 2 0 0 +655 10 1 1 1 0 0 4 0 0 +660 24 2 2 1 0 0 2 0 0 +669 3 1 1 1 0 0 0 0 0 +671 2 0 0 0 0 0 0 0 0 +683 3 0 0 1 0 0 0 0 0 +684 3 0 0 0 0 0 1 0 0 +685 1 0 0 0 0 0 1 0 0 +689 4 1 1 2 2 2 0 0 0 +696 4 0 0 2 0 0 0 0 0 +833 2 1 1 1 0 0 1 0 0 +835 8 1 1 3 0 0 1 0 0 +837 8 1 1 3 0 0 1 0 0 +852 3 0 0 2 0 0 1 0 0 +856 6 0 0 2 0 0 0 0 0 +857 12 1 1 9 0 0 0 0 0 +1539 2 0 0 0 0 0 1 0 0 +1568 4 0 0 2 1 1 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/intl/gettext.c +fn=gettext +54 2 1 1 0 0 0 0 0 0 +55 3 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/intl/hash-string.c +fn=__hash_string +32 8 1 1 0 0 0 0 0 0 +38 228 1 1 76 2 1 0 0 0 +40 52 0 0 0 0 0 0 0 0 +41 112 0 0 0 0 0 0 0 0 +43 156 0 0 0 0 0 0 0 0 +45 24 0 0 0 0 0 0 0 0 +46 12 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/syscall-template.S +fn=umask +59 3 1 1 0 0 0 0 0 0 +60 1 0 0 1 0 0 0 0 0 +fn=unlink +78 5 1 1 0 0 0 0 0 0 +79 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/access.c +fn=access +25 1 1 1 0 0 0 0 0 0 +27 7 0 0 0 0 0 1 0 0 +31 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/close_nocancel.c +fn=__GI___close_nocancel +25 48 1 1 0 0 0 0 0 0 +26 192 0 0 0 0 0 0 0 0 +27 48 0 0 48 0 0 0 0 0 +fn=__close_nocancel +25 13 10 2 0 0 0 0 0 0 +26 52 11 2 0 0 0 0 0 0 +27 13 0 0 13 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/fcntl64.c +fn=fcntl +38 28188 1 1 4698 0 0 9396 0 0 +42 23490 1 1 0 0 0 14094 0 0 +48 18792 0 0 0 0 0 0 0 0 +51 4698 0 0 0 0 0 4698 0 0 +52 23490 1 1 14094 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/fcntl_nocancel.c +fn=__fcntl64_nocancel_adjusted +51 23490 1 1 4698 0 0 4698 0 0 +52 9396 0 0 0 0 0 0 0 0 +64 42282 1 1 4698 1 0 4698 1 0 +65 23490 1 1 14094 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/lseek64.c +fn=lseek +28 3 3 2 0 0 0 0 0 0 +36 12 3 2 0 0 0 0 0 0 +38 3 0 0 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/open64.c +fn=open +37 90 7 2 9 0 0 36 0 0 +40 43 2 1 0 0 0 0 0 0 +43 25 5 1 0 0 0 15 0 0 +44 5 0 0 5 0 0 0 0 0 +45 5 0 0 0 0 0 0 0 0 +48 90 4 1 9 0 0 0 0 0 +50 63 3 1 45 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/open64_nocancel.c +fn=__open_nocancel +34 444 10 3 5 0 0 111 16 3 +37 742 1 1 0 0 0 0 0 0 +45 901 1 1 0 0 0 53 0 0 +47 126 4 1 116 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/poll.c +fn=poll +27 1 1 1 0 0 0 0 0 0 +29 7 0 0 1 0 0 0 0 0 +43 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/pread64_nocancel.c +fn=__pread64_nocancel +29 16 1 1 0 0 0 0 0 0 +30 32 0 0 0 0 0 0 0 0 +31 8 0 0 8 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/read.c +fn=read +25 3 3 1 0 0 0 0 0 0 +26 18 3 1 3 0 0 0 0 0 +27 3 0 0 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/read_nocancel.c +fn=__read_nocancel +25 51 4 2 0 0 0 0 0 0 +26 204 0 0 0 0 0 0 0 0 +27 51 3 1 51 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c +fn=_fxstat +33 236 8 2 0 0 0 0 0 0 +34 118 6 2 0 0 0 0 0 0 +35 236 0 0 0 0 0 0 0 0 +39 59 0 0 59 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/wordsize-64/lxstat.c +fn=_lxstat +33 4 1 1 0 0 0 0 0 0 +34 2 0 0 0 0 0 0 0 0 +35 4 0 0 0 0 0 0 0 0 +39 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/wordsize-64/xstat.c +fn=_xstat +33 60 7 3 0 0 0 0 0 0 +34 30 0 0 0 0 0 0 0 0 +35 93 1 1 9 1 0 8 1 0 +39 7 0 0 7 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/write.c +fn=write +25 12 6 1 0 0 0 0 0 0 +26 84 0 0 12 0 0 0 0 0 +27 12 0 0 12 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/../libio/libioP.h +fn=_IO_seekoff_unlocked +941 6 0 0 0 0 0 0 0 0 +943 4 0 0 0 0 0 0 0 0 +944 4 0 0 0 0 0 0 0 0 +fn=ftello +884 2 1 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +fn=_IO_cleanup +47 2 0 0 1 0 0 0 0 0 +fn=_IO_flush_all_lockp +47 2 0 0 1 0 0 0 0 0 +fn=_IO_link_in +47 40 0 0 20 0 0 0 0 0 +fn=__GI__IO_un_link.part.0 +47 34 0 0 17 0 0 0 0 0 +fn=fclose@@GLIBC_2.2.5 +47 16 0 0 8 0 0 0 0 0 +fn=fflush +47 12 0 0 6 0 0 0 0 0 +fn=fread +47 12 0 0 6 0 0 0 0 0 +fn=fwrite +47 14 0 0 7 0 0 0 0 0 +fn=setbuffer +47 2 0 0 1 0 0 0 0 0 +fn=setvbuf +47 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/filedoalloc.c +fn=_IO_file_doallocate +78 63 10 4 7 0 0 28 0 0 +84 63 5 2 21 0 0 7 0 0 +86 28 0 0 7 0 0 0 0 0 +97 28 0 0 7 0 0 0 0 0 +101 21 0 0 0 0 0 7 0 0 +102 14 0 0 0 0 0 0 0 0 +104 28 5 2 0 0 0 7 0 0 +105 7 0 0 0 0 0 0 0 0 +106 56 0 0 42 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/fileno.c +fn=fileno +32 3 2 1 0 0 0 0 0 0 +35 15 0 0 6 0 0 0 0 0 +42 3 0 0 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/fileops.c +fn=_IO_do_write@@GLIBC_2.2.5 +424 63 10 2 3 0 0 18 0 0 +426 57 0 0 0 0 0 0 0 0 +427 36 0 0 33 0 0 0 0 0 +434 6 0 0 3 0 0 0 0 0 +441 12 0 0 6 0 0 0 0 0 +449 15 3 1 3 0 0 3 0 0 +450 15 0 0 3 0 0 0 0 0 +452 12 0 0 3 0 0 9 0 0 +453 6 0 0 0 0 0 6 0 0 +454 3 0 0 0 0 0 3 0 0 +455 9 2 1 3 0 0 0 0 0 +456 12 0 0 6 0 0 0 0 0 +fn=_IO_file_close +1165 9 6 2 0 0 0 0 0 0 +1168 18 0 0 9 0 0 0 0 0 +fn=_IO_file_close_it@@GLIBC_2.2.5 +129 36 8 2 0 0 0 27 0 0 +131 27 0 0 9 0 0 0 0 0 +134 18 0 0 0 0 0 0 0 0 +135 27 9 2 9 0 0 0 0 0 +136 27 6 1 9 0 0 3 0 0 +138 9 0 0 0 0 0 0 0 0 +140 18 0 0 0 0 0 9 0 0 +143 63 0 0 27 1 0 9 0 0 +146 27 0 0 9 0 0 0 0 0 +154 45 9 2 0 0 0 9 0 0 +155 36 0 0 0 0 0 27 0 0 +158 18 0 0 0 0 0 9 0 0 +159 9 6 2 0 0 0 9 0 0 +160 9 0 0 0 0 0 9 0 0 +161 9 0 0 0 0 0 9 0 0 +163 18 0 0 0 0 0 0 0 0 +164 45 0 0 36 0 0 0 0 0 +fn=_IO_file_finish@@GLIBC_2.2.5 +169 45 7 2 0 0 0 18 0 0 +170 18 0 0 9 0 0 0 0 0 +176 27 0 0 0 0 0 0 0 0 +177 27 8 2 18 0 0 0 0 0 +fn=_IO_file_fopen@@GLIBC_2.2.5 +214 110 8 2 10 0 0 70 0 0 +215 10 0 0 0 0 0 0 0 0 +223 20 0 0 10 0 0 0 0 0 +225 83 11 2 10 5 4 0 0 0 +228 5 0 0 0 0 0 0 0 0 +229 5 5 2 0 0 0 0 0 0 +237 2 0 0 0 0 0 0 0 0 +238 4 0 0 0 0 0 0 0 0 +239 2 2 1 0 0 0 0 0 0 +248 206 28 10 26 3 3 0 0 0 +268 3 1 1 1 0 0 0 0 0 +271 1 0 0 0 0 0 0 0 0 +272 3 0 0 1 0 0 0 0 0 +281 50 16 3 0 0 0 10 0 0 +284 20 0 0 0 0 0 0 0 0 +287 40 0 0 0 0 0 10 0 0 +288 20 0 0 0 0 0 0 0 0 +357 120 0 0 90 0 0 0 0 0 +fn=_IO_file_open +183 90 10 2 0 0 0 30 0 0 +185 20 6 2 10 0 0 0 0 0 +186 13 1 1 0 0 0 1 0 0 +189 18 0 0 0 0 0 9 0 0 +190 20 0 0 0 0 0 0 0 0 +192 10 0 0 0 0 0 10 0 0 +193 60 0 0 10 0 0 10 0 0 +196 30 0 0 0 0 0 0 0 0 +199 10 0 0 4 1 1 2 0 0 +200 4 0 0 0 0 0 0 0 0 +206 20 5 1 0 0 0 10 0 0 +207 10 0 0 0 0 0 0 0 0 +208 40 0 0 40 0 0 0 0 0 +fn=_IO_file_overflow@@GLIBC_2.2.5 +732 60 6 1 0 0 0 36 1 0 +733 48 6 1 12 0 0 0 0 0 +740 57 0 0 19 0 0 0 0 0 +743 11 4 1 1 0 0 0 0 0 +745 8 4 1 0 0 0 4 0 0 +746 24 0 0 8 0 0 12 0 0 +755 10 0 0 0 0 0 0 0 0 +764 20 4 1 10 0 0 0 0 0 +769 45 0 0 0 0 0 15 0 0 +771 15 0 0 0 0 0 5 0 0 +772 25 4 1 5 0 0 0 0 0 +773 2 0 0 0 0 0 2 0 0 +775 24 0 0 0 0 0 0 0 0 +776 24 0 0 0 0 0 0 0 0 +777 12 0 0 0 0 0 0 0 0 +788 36 3 0 36 0 0 0 0 0 +fn=_IO_file_read +1131 5 4 2 0 0 0 0 0 0 +1132 5 0 0 5 0 0 0 0 0 +1133 7 0 0 0 0 0 0 0 0 +1134 13 0 0 5 0 0 0 0 0 +fn=_IO_file_seek +1140 3 3 2 0 0 0 0 0 0 +1141 6 0 0 3 0 0 0 0 0 +fn=_IO_file_seekoff@@GLIBC_2.2.5 +847 2 0 0 1 0 0 0 0 0 +849 2 0 0 2 0 0 0 0 0 +851 2 0 0 1 0 0 0 0 0 +856 2 1 1 0 0 0 0 0 0 +866 3 1 1 1 0 0 0 0 0 +867 4 0 0 2 0 0 0 0 0 +880 2 1 1 0 0 0 0 0 0 +885 4 2 2 0 0 0 0 0 0 +890 3 0 0 0 0 0 0 0 0 +901 24 1 1 2 0 0 14 0 0 +909 5 1 1 0 0 0 0 0 0 +914 3 0 0 2 0 0 0 0 0 +915 3 0 0 2 0 0 0 0 0 +917 1 0 0 0 0 0 0 0 0 +918 4 1 1 1 0 0 0 0 0 +930 2 0 0 1 0 0 0 0 0 +943 2 1 1 0 0 0 0 0 0 +947 3 1 1 2 0 0 0 0 0 +949 3 0 0 1 0 0 0 0 0 +1035 2 1 1 0 0 0 1 0 0 +1036 5 1 1 2 0 0 1 0 0 +1037 2 0 0 0 0 0 0 0 0 +1039 2 0 0 2 0 0 0 0 0 +1040 1 0 0 0 0 0 1 0 0 +1041 3 0 0 0 0 0 3 0 0 +1042 1 0 0 0 0 0 0 0 0 +1055 22 1 1 18 0 0 0 0 0 +fn=_IO_file_setbuf@@GLIBC_2.2.5 +382 6 0 0 0 0 0 2 0 0 +383 6 0 0 0 0 0 2 0 0 +388 8 1 1 2 0 0 6 0 0 +390 4 0 0 0 0 0 0 0 0 +391 4 0 0 4 0 0 0 0 0 +fn=_IO_file_stat +1147 14 7 2 0 0 0 0 0 0 +1148 21 5 1 7 0 0 0 0 0 +fn=_IO_file_sync@@GLIBC_2.2.5 +793 40 2 1 0 0 0 16 0 0 +798 32 2 1 16 1 1 0 0 0 +800 8 2 1 8 0 0 0 0 0 +801 16 0 0 8 0 0 0 0 0 +812 16 2 1 0 0 0 8 0 0 +816 32 0 0 24 0 0 0 0 0 +fn=_IO_file_underflow@@GLIBC_2.2.5 +462 45 4 2 0 0 0 30 0 0 +466 15 0 0 5 0 0 0 0 0 +469 10 0 0 0 0 0 0 0 0 +475 15 4 2 10 0 0 0 0 0 +478 10 0 0 5 0 0 0 0 0 +490 10 0 0 0 0 0 0 0 0 +506 10 0 0 0 0 0 5 0 0 +512 30 0 0 10 0 0 15 0 0 +517 25 0 0 15 0 0 5 0 0 +519 10 0 0 0 0 0 0 0 0 +526 5 0 0 5 0 0 0 0 0 +535 15 0 0 5 0 0 0 0 0 +536 2 0 0 0 0 0 1 0 0 +537 10 0 0 10 0 0 0 0 0 +538 40 4 2 35 0 0 0 0 0 +fn=_IO_file_write@@GLIBC_2.2.5 +1174 84 4 1 0 0 0 48 1 1 +1176 96 0 0 0 0 0 0 0 0 +1178 12 7 1 12 0 0 0 0 0 +1180 24 0 0 0 0 0 0 0 0 +1181 36 0 0 12 0 0 12 1 0 +1182 24 0 0 0 0 0 0 0 0 +1187 12 0 0 0 0 0 0 0 0 +1188 12 0 0 0 0 0 0 0 0 +1191 36 0 0 12 0 0 0 0 0 +1194 108 6 1 60 0 0 0 0 0 +fn=_IO_file_xsgetn +1273 198 8 4 0 0 0 126 0 0 +1280 36 0 0 18 0 0 0 0 0 +1283 12 4 2 4 0 0 0 0 0 +1288 12 0 0 0 0 0 4 0 0 +1291 82 0 0 18 0 0 0 0 0 +1293 69 4 2 46 0 0 0 0 0 +1294 46 0 0 0 0 0 0 0 0 +1296 54 4 2 0 0 0 18 0 0 +1297 54 0 0 36 0 0 0 0 0 +1302 10 0 0 0 0 0 0 0 0 +1310 10 4 2 5 0 0 0 0 0 +1319 15 0 0 5 0 0 0 0 0 +1320 20 0 0 5 0 0 0 0 0 +1322 20 4 2 0 0 0 5 0 0 +1361 162 4 2 126 0 0 0 0 0 +fn=_IO_file_xsputn@@GLIBC_2.2.5 +434 45 4 1 18 0 0 0 0 0 +440 16 4 1 0 0 0 8 0 0 +441 4 0 0 2 0 0 0 0 0 +449 54 0 0 9 3 0 18 0 0 +450 54 0 0 18 0 0 0 0 0 +452 36 4 1 9 0 0 27 0 0 +453 18 0 0 0 0 0 18 0 0 +454 9 0 0 0 0 0 9 0 0 +455 18 4 1 9 0 0 0 0 0 +456 27 0 0 9 0 0 0 0 0 +1198 96 7 1 0 0 0 72 0 0 +1204 72 0 0 12 0 0 0 0 0 +1205 12 0 0 0 0 0 0 0 0 +1211 48 0 0 12 0 0 0 0 0 +1228 36 0 0 12 1 0 0 0 0 +1232 12 7 1 0 0 0 0 0 0 +1244 72 0 0 24 4 0 12 1 0 +1250 24 0 0 24 0 0 0 0 0 +1251 48 3 0 0 0 0 0 0 0 +1253 24 4 1 0 0 0 0 0 0 +1256 18 0 0 0 0 0 0 0 0 +1257 18 0 0 0 0 0 0 0 0 +1264 36 0 0 0 0 0 0 0 0 +1265 21 0 0 0 0 0 3 0 0 +1268 108 7 1 84 0 0 0 0 0 +fn=_IO_new_file_init_internal +107 30 9 2 0 0 0 10 0 0 +111 10 0 0 0 0 0 10 0 0 +112 10 0 0 10 0 0 0 0 0 +114 10 0 0 0 0 0 10 0 0 +115 10 8 2 0 0 0 10 0 0 +116 20 0 0 20 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/fseek.c +fn=fseek +32 9 1 1 0 0 0 4 0 0 +35 3 0 0 1 0 0 0 0 0 +36 9 1 1 0 0 0 1 0 0 +39 7 0 0 5 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/ftello.c +fn=ftello +38 5 1 1 0 0 0 2 0 0 +41 3 0 0 1 0 0 0 0 0 +42 6 2 2 0 0 0 1 0 0 +43 5 0 0 1 0 0 0 0 0 +49 2 0 0 0 0 0 0 0 0 +61 5 0 0 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/genops.c +fn=_IO_cleanup +786 10 0 0 3 0 0 1 0 0 +787 10 1 1 4 0 0 2 0 0 +790 15 1 1 5 0 0 0 0 0 +799 12 1 1 4 0 0 0 0 0 +801 6 0 0 2 0 0 0 0 0 +807 3 0 0 1 0 0 1 0 0 +831 2 2 2 1 0 0 0 0 0 +838 4 0 0 0 0 0 4 0 0 +842 8 0 0 2 0 0 2 0 0 +843 8 1 1 2 0 0 1 0 0 +863 11 1 1 1 0 0 7 0 0 +866 3 1 1 0 0 0 1 0 0 +878 12 0 0 9 0 0 0 0 0 +fn=_IO_default_finish +54 18 0 0 9 0 0 0 0 0 +601 27 7 2 0 0 0 9 0 0 +603 27 7 2 9 0 0 0 0 0 +609 27 0 0 9 0 0 0 0 0 +612 27 0 0 9 0 0 0 0 0 +624 18 7 2 18 0 0 0 0 0 +fn=_IO_default_setbuf +330 6 0 0 0 0 0 0 0 0 +332 8 0 0 0 0 0 2 0 0 +337 6 0 0 0 0 0 2 0 0 +452 18 1 1 0 0 0 8 0 0 +453 10 0 0 4 0 0 2 0 0 +455 8 0 0 4 0 0 0 0 0 +457 4 1 1 0 0 0 2 0 0 +458 4 0 0 0 0 0 0 0 0 +462 2 0 0 0 0 0 0 0 0 +466 8 1 1 0 0 0 6 0 0 +467 2 0 0 0 0 0 0 0 0 +468 12 0 0 10 0 0 0 0 0 +fn=_IO_default_xsputn +371 185 7 1 0 0 0 90 3 3 +374 40 0 0 0 0 0 0 0 0 +379 60 6 1 30 0 0 0 0 0 +381 15 0 0 0 0 0 0 0 0 +382 30 0 0 0 0 0 0 0 0 +384 30 0 0 0 0 0 0 0 0 +386 16 4 1 0 0 0 12 0 0 +387 12 0 0 4 0 0 0 0 0 +389 22 0 0 0 0 0 0 0 0 +393 185 4 1 0 0 0 0 0 0 +394 56 4 1 28 0 0 28 0 0 +395 49 3 1 0 0 0 11 0 0 +397 15 0 0 0 0 0 0 0 0 +399 30 0 0 0 0 0 0 0 0 +404 125 3 0 110 0 0 0 0 0 +fn=_IO_doallocbuf +330 1 0 0 0 0 0 0 0 0 +332 4 0 0 0 0 0 1 0 0 +337 2 1 1 0 0 0 1 0 0 +343 32 15 3 0 0 0 24 0 0 +344 16 0 0 8 0 0 0 0 0 +346 35 0 0 9 0 0 0 0 0 +347 35 7 1 14 1 1 7 0 0 +349 2 1 1 0 0 0 0 0 0 +350 32 0 0 32 0 0 0 0 0 +fn=_IO_flush_all_lockp +686 12 2 2 1 0 0 7 0 0 +687 1 0 0 0 0 0 0 0 0 +691 11 0 0 3 1 0 2 0 0 +692 10 2 2 4 1 0 2 0 0 +695 15 0 0 5 5 1 0 0 0 +697 4 1 1 0 0 0 4 1 0 +698 8 0 0 0 0 0 0 0 0 +699 2 0 0 1 0 0 0 0 0 +701 30 1 1 13 8 2 0 0 0 +709 8 1 1 0 0 0 0 0 0 +711 4 1 1 0 0 0 4 0 0 +715 8 1 1 2 0 0 2 0 0 +716 9 1 1 3 0 0 1 0 0 +720 12 0 0 9 0 0 0 0 0 +fn=_IO_link_in +87 160 8 2 20 0 0 80 0 0 +88 60 0 0 20 0 0 0 0 0 +90 30 10 2 0 0 0 10 0 0 +92 110 17 4 30 6 1 10 0 0 +93 100 9 2 40 5 2 20 0 0 +94 10 0 0 0 0 0 10 0 0 +95 140 16 4 80 0 0 10 0 0 +97 20 0 0 10 4 2 10 0 0 +98 10 0 0 0 0 0 10 0 0 +100 140 6 2 50 0 0 20 0 0 +101 10 0 0 0 0 0 10 0 0 +102 80 4 2 20 0 0 20 0 0 +103 80 0 0 20 0 0 10 0 0 +106 160 0 0 120 0 0 0 0 0 +fn=_IO_no_init +563 100 8 2 0 0 0 40 0 0 +564 10 0 0 0 0 0 10 0 0 +565 10 0 0 0 0 0 10 1 1 +566 20 0 0 0 0 0 0 0 0 +568 10 9 2 0 0 0 10 0 0 +572 60 0 0 0 0 0 50 3 1 +579 10 0 0 0 0 0 10 4 2 +581 10 0 0 0 0 0 10 3 1 +587 10 0 0 0 0 0 10 0 0 +588 60 0 0 50 0 0 0 0 0 +fn=_IO_old_init +531 10 8 2 0 0 0 0 0 0 +532 20 0 0 0 0 0 10 0 0 +533 10 0 0 0 0 0 10 0 0 +534 30 0 0 10 4 2 0 0 0 +539 70 0 0 0 0 0 60 1 1 +544 10 0 0 0 0 0 10 3 1 +550 20 7 2 0 0 0 10 0 0 +555 30 0 0 10 0 0 0 0 0 +556 20 0 0 0 0 0 20 4 2 +558 10 0 0 10 0 0 0 0 0 +fn=_IO_setb +329 128 8 2 0 0 0 64 0 0 +330 78 0 0 32 0 0 0 0 0 +331 21 0 0 7 0 0 7 0 0 +332 48 0 0 32 0 0 16 0 0 +334 16 0 0 0 0 0 16 0 0 +335 80 2 1 0 0 0 0 0 0 +338 64 0 0 48 0 0 0 0 0 +fn=_IO_sgetn +409 54 4 2 0 0 0 18 0 0 +411 54 0 0 36 1 1 0 0 0 +412 36 0 0 18 0 0 0 0 0 +fn=_IO_switch_to_get_mode +164 25 4 2 0 0 0 10 0 0 +165 15 4 2 10 0 0 0 0 0 +168 15 4 2 5 0 0 0 0 0 +172 10 0 0 5 0 0 5 0 0 +173 10 0 0 5 0 0 0 0 0 +176 5 0 0 0 0 0 5 0 0 +178 10 0 0 0 0 0 10 0 0 +180 10 0 0 0 0 0 5 0 0 +181 5 0 0 0 0 0 0 0 0 +182 20 0 0 15 0 0 0 0 0 +fn=_IO_un_link +53 18 8 2 0 0 0 0 0 0 +54 45 0 0 18 0 0 0 0 0 +82 9 0 0 9 0 0 0 0 0 +fn=_IO_unsave_markers +960 30 7 2 0 0 0 10 0 0 +962 20 0 0 10 0 0 0 0 0 +967 30 0 0 10 0 0 0 0 0 +969 20 7 2 20 0 0 0 0 0 +fn=__GI__IO_un_link.part.0 +52 72 6 2 9 0 0 36 0 0 +58 90 7 2 27 0 0 9 0 0 +59 90 7 2 36 1 0 18 0 0 +60 9 0 0 0 0 0 9 1 0 +61 132 8 2 65 0 0 8 0 0 +63 35 8 3 9 1 0 0 0 0 +65 27 1 1 9 0 0 0 0 0 +66 9 0 0 0 0 0 9 0 0 +74 18 0 0 0 0 0 9 0 0 +76 116 7 2 49 0 0 16 0 0 +77 9 1 1 0 0 0 9 0 0 +78 72 9 2 18 0 0 18 0 0 +79 72 0 0 18 0 0 9 0 0 +82 72 7 1 54 0 0 0 0 0 +fn=__underflow +269 25 4 2 0 0 0 10 0 0 +270 21 1 1 5 0 0 4 0 0 +275 25 0 0 15 0 0 0 0 0 +278 10 4 2 0 0 0 0 0 0 +280 10 0 0 0 0 0 0 0 0 +286 10 0 0 5 0 0 0 0 0 +291 15 4 2 5 0 0 0 0 0 +293 20 0 0 10 0 0 0 0 0 +294 15 0 0 10 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/iofclose.c +fn=fclose@@GLIBC_2.2.5 +34 45 8 2 0 0 0 27 0 0 +48 27 0 0 9 0 0 0 0 0 +49 9 9 2 0 0 0 9 0 0 +51 115 7 1 65 0 0 8 0 0 +52 36 1 1 0 0 0 0 0 0 +53 54 0 0 9 0 0 9 0 0 +57 36 0 0 18 3 2 9 0 0 +58 27 0 0 9 0 0 0 0 0 +71 18 1 1 9 0 0 0 0 0 +76 45 0 0 36 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/iofflush.c +fn=fflush +32 30 2 2 0 0 0 12 0 0 +33 12 0 0 0 0 0 0 0 0 +39 78 1 1 42 5 1 6 0 0 +40 42 1 1 12 2 1 6 0 0 +44 30 0 0 18 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/iofopen.c +fn=fopen@@GLIBC_2.2.5 +37 20 0 0 10 0 0 0 0 0 +65 20 0 0 0 0 0 10 1 0 +67 30 0 0 0 0 0 0 0 0 +70 20 0 0 0 0 0 10 4 2 +72 70 7 2 0 0 0 10 0 0 +73 20 0 0 0 0 0 10 0 0 +74 20 0 0 0 0 0 10 0 0 +75 70 5 2 0 0 0 10 0 0 +85 80 4 2 0 0 0 40 0 0 +87 70 5 2 50 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/iofread.c +fn=fread +31 48 3 1 0 0 0 36 0 0 +32 12 0 0 0 0 0 0 0 0 +35 18 0 0 0 0 0 0 0 0 +37 96 6 2 42 0 0 6 0 0 +38 30 0 0 0 0 0 6 0 0 +40 24 0 0 0 0 0 0 0 0 +41 54 0 0 42 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/iofread_u.c +fn=fread_unlocked +34 48 1 1 0 0 0 36 0 0 +35 24 0 0 0 0 0 0 0 0 +38 24 0 0 0 0 0 0 0 0 +40 36 0 0 0 0 0 12 0 0 +41 36 1 1 0 0 0 0 0 0 +42 108 0 0 48 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/iofwrite.c +fn=fwrite +31 56 7 1 0 0 0 42 0 0 +32 14 7 1 0 0 0 0 0 0 +35 21 0 0 0 0 0 0 0 0 +37 112 7 1 49 0 0 7 0 0 +38 32 4 1 7 0 0 3 0 0 +39 49 7 1 14 0 0 7 0 0 +45 14 0 0 0 0 0 0 0 0 +46 7 0 0 0 0 0 0 0 0 +49 63 3 0 49 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/ioseekoff.c +fn=_IO_seekoff_unlocked +33 10 2 2 0 0 0 4 0 0 +34 4 0 0 0 0 0 0 0 0 +43 9 1 1 2 0 0 0 0 0 +59 8 1 1 4 0 0 0 0 0 +60 6 0 0 4 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/iosetbuffer.c +fn=setbuffer +31 9 1 1 0 0 0 4 0 0 +33 15 2 2 8 0 0 1 0 0 +34 2 0 0 0 0 0 1 0 0 +36 3 0 0 0 0 0 0 0 0 +37 5 1 1 2 1 1 1 0 0 +38 6 0 0 2 0 0 0 0 0 +40 5 0 0 2 1 1 1 0 0 +42 6 0 0 5 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/iosetvbuf.c +fn=setvbuf +35 10 1 1 0 0 0 5 0 0 +38 15 1 1 8 2 1 1 0 0 +39 2 0 0 0 0 0 0 0 0 +72 1 1 1 0 0 0 0 0 0 +73 2 0 0 0 0 0 1 0 0 +74 2 0 0 0 0 0 0 0 0 +76 2 0 0 0 0 0 0 0 0 +95 7 0 0 6 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/libioP.h +fn=_IO_cleanup +941 3 0 0 0 0 0 0 0 0 +fn=_IO_default_setbuf +941 6 0 0 0 0 0 0 0 0 +943 4 1 1 0 0 0 0 0 0 +944 4 0 0 0 0 0 0 0 0 +fn=_IO_default_xsputn +941 45 7 1 0 0 0 0 0 0 +fn=_IO_do_write@@GLIBC_2.2.5 +944 6 2 1 0 0 0 0 0 0 +fn=_IO_doallocbuf +941 21 0 0 0 0 0 0 0 0 +943 14 0 0 0 0 0 0 0 0 +944 14 0 0 0 0 0 0 0 0 +fn=_IO_file_close_it@@GLIBC_2.2.5 +941 27 0 0 0 0 0 0 0 0 +943 18 0 0 0 0 0 0 0 0 +944 18 8 2 0 0 0 0 0 0 +fn=_IO_file_doallocate +941 21 0 0 0 0 0 0 0 0 +943 14 0 0 0 0 0 0 0 0 +944 14 0 0 0 0 0 0 0 0 +fn=_IO_file_open +941 6 1 1 0 0 0 0 0 0 +943 4 0 0 0 0 0 0 0 0 +944 4 0 0 0 0 0 0 0 0 +fn=_IO_file_seekoff@@GLIBC_2.2.5 +943 2 0 0 0 0 0 0 0 0 +944 2 0 0 0 0 0 0 0 0 +fn=_IO_file_underflow@@GLIBC_2.2.5 +885 25 8 4 0 0 0 0 0 0 +943 10 0 0 0 0 0 0 0 0 +944 10 4 2 0 0 0 0 0 0 +fn=_IO_file_xsgetn +941 54 0 0 0 0 0 0 0 0 +fn=_IO_file_xsputn@@GLIBC_2.2.5 +941 36 7 1 0 0 0 0 0 0 +943 24 0 0 0 0 0 0 0 0 +944 42 4 1 0 0 0 0 0 0 +fn=_IO_flush_all_lockp +941 3 0 0 0 0 0 0 0 0 +fn=_IO_sgetn +941 54 0 0 0 0 0 0 0 0 +943 36 0 0 0 0 0 0 0 0 +944 36 0 0 0 0 0 0 0 0 +fn=__underflow +941 15 0 0 0 0 0 0 0 0 +943 10 0 0 0 0 0 0 0 0 +944 10 0 0 0 0 0 0 0 0 +fn=fclose@@GLIBC_2.2.5 +856 36 9 2 18 1 0 0 0 0 +857 36 0 0 9 0 0 0 0 0 +863 18 0 0 0 0 0 9 0 0 +884 18 0 0 0 0 0 0 0 0 +885 75 15 3 34 0 0 8 0 0 +941 27 0 0 0 0 0 0 0 0 +943 18 0 0 0 0 0 0 0 0 +944 18 0 0 0 0 0 0 0 0 +fn=fflush +884 12 0 0 6 0 0 0 0 0 +885 60 0 0 24 0 0 12 0 0 +941 18 0 0 0 0 0 0 0 0 +943 12 0 0 0 0 0 0 0 0 +944 12 0 0 0 0 0 0 0 0 +fn=fread +884 12 0 0 6 0 0 0 0 0 +885 60 3 1 24 0 0 12 0 0 +fn=fseek +884 2 1 1 1 0 0 0 0 0 +fn=fwrite +884 21 7 1 7 0 0 0 0 0 +885 56 0 0 28 0 0 7 0 0 +941 21 0 0 0 0 0 0 0 0 +943 14 0 0 0 0 0 0 0 0 +944 14 0 0 0 0 0 0 0 0 +fn=setbuffer +884 2 0 0 1 0 0 0 0 0 +885 10 1 1 4 0 0 2 0 0 +941 3 0 0 0 0 0 0 0 0 +943 2 0 0 0 0 0 0 0 0 +944 2 0 0 0 0 0 0 0 0 +fn=setvbuf +884 2 1 1 0 0 0 0 0 0 +885 10 1 1 4 0 0 2 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/setbuf.c +fn=setbuf +32 1 1 1 0 0 0 0 0 0 +33 2 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/libio/vtables.c +fn=check_stdfiles_vtables +83 1 1 1 0 0 0 0 0 0 +84 4 0 0 2 1 0 0 0 0 +85 3 1 1 2 1 1 0 0 0 +86 3 0 0 2 1 1 0 0 0 +88 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/../sysdeps/unix/sysv/linux/not-cancel.h +fn=_nl_load_locale_from_archive +60 2 0 0 0 0 0 1 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/duplocale.c +fn=duplocale +34 270 1 1 0 0 0 180 0 0 +36 90 0 0 0 0 0 0 0 0 +41 90 0 0 0 0 0 0 0 0 +45 60 0 0 0 0 0 0 0 0 +49 1110 3 2 360 0 0 0 0 0 +50 720 5 3 0 0 0 360 0 0 +53 90 0 0 0 0 0 30 0 0 +55 60 0 0 0 0 0 0 0 0 +57 30 0 0 0 0 0 0 0 0 +60 270 2 1 120 0 0 30 0 0 +62 1080 0 0 0 0 0 0 0 0 +63 780 1 1 0 0 0 0 0 0 +65 720 0 0 360 0 0 360 30 17 +66 1080 0 0 360 2 0 0 0 0 +69 1080 0 0 360 0 0 0 0 0 +73 360 0 0 0 0 0 360 44 22 +74 1080 0 0 0 0 0 360 0 0 +79 60 2 1 30 0 0 30 0 0 +81 60 0 0 30 0 0 30 0 0 +84 210 0 0 60 0 0 30 0 0 +88 270 0 0 210 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/findlocale.c +fn=_nl_find_locale +75 78 0 0 0 0 0 26 0 0 +78 52 2 1 0 0 0 0 0 0 +82 182 0 0 0 0 0 26 0 0 +85 52 0 0 0 0 0 0 0 0 +87 26 0 0 0 0 0 0 0 0 +88 104 2 1 52 0 0 0 0 0 +96 156 0 0 0 0 0 26 0 0 +104 608 3 1 38 0 0 304 0 0 +107 76 0 0 38 0 0 38 0 0 +115 76 3 1 38 0 0 0 0 0 +132 190 0 0 0 0 0 38 0 0 +133 190 0 0 0 0 0 38 0 0 +137 24 1 1 0 0 0 12 0 0 +138 36 0 0 12 0 0 0 0 0 +146 52 0 0 26 0 0 26 0 0 +150 52 0 0 0 0 0 0 0 0 +153 104 2 0 0 0 0 26 0 0 +154 52 0 0 0 0 0 0 0 0 +325 456 1 1 342 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/freelocale.c +fn=freelocale +33 99 4 2 0 0 0 33 0 0 +37 99 0 0 0 0 0 0 0 0 +41 264 4 2 99 3 0 33 0 0 +44 1188 12 6 792 94 61 0 0 0 +49 264 0 0 99 0 0 33 0 0 +52 66 4 2 0 0 0 0 0 0 +53 33 0 0 33 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/hashval.h +fn=_nl_load_locale_from_archive +36 2 0 0 0 0 0 0 0 0 +37 50 1 1 0 0 0 0 0 0 +39 20 0 0 0 0 0 0 0 0 +40 60 0 0 20 0 0 0 0 0 +42 6 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/loadarchive.c +fn=_nl_load_locale_from_archive +118 1 0 0 1 0 0 0 0 0 +119 3 0 0 1 1 1 0 0 0 +120 2 1 1 2 0 0 0 0 0 +121 1 0 0 1 0 0 0 0 0 +122 4 0 0 1 0 0 0 0 0 +123 4 0 0 0 0 0 0 0 0 +134 364 2 1 26 0 0 234 0 0 +135 26 0 0 26 0 0 0 0 0 +153 52 2 1 0 0 0 26 0 0 +159 97 0 0 32 2 1 0 0 0 +160 288 1 0 30 1 0 30 0 0 +162 48 0 0 24 0 0 24 0 0 +163 48 1 0 48 2 0 0 0 0 +169 6 1 1 0 0 0 2 0 0 +170 8 1 1 2 0 0 0 0 0 +172 10 1 1 0 0 0 2 0 0 +173 12 0 0 0 0 0 2 0 0 +174 4 0 0 0 0 0 0 0 0 +176 12 0 0 0 0 0 2 0 0 +181 6 1 1 0 0 0 2 0 0 +182 6 0 0 0 0 0 2 0 0 +183 40 1 1 2 0 0 0 0 0 +184 28 1 1 2 0 0 8 0 0 +189 6 1 1 0 0 0 2 0 0 +194 6 0 0 2 1 1 0 0 0 +202 2 1 1 0 0 0 1 0 0 +205 5 1 1 0 0 0 1 0 0 +206 2 0 0 0 0 0 0 0 0 +210 6 0 0 0 0 0 1 0 0 +225 1 0 0 1 1 1 0 0 0 +227 8 1 1 0 0 0 1 0 0 +228 2 0 0 0 0 0 0 0 0 +235 2 0 0 0 0 0 0 0 0 +259 1 0 0 0 0 0 1 1 1 +261 1 0 0 0 0 0 1 0 0 +265 4 0 0 1 0 0 0 0 0 +270 4 0 0 0 0 0 2 0 0 +274 4 0 0 2 0 0 2 0 0 +277 6 1 1 2 0 0 0 0 0 +280 10 0 0 0 0 0 0 0 0 +281 24 1 1 2 0 0 0 0 0 +287 6 0 0 2 2 2 0 0 0 +291 4 0 0 2 0 0 0 0 0 +292 22 1 1 6 0 0 8 0 0 +302 6 0 0 2 1 1 0 0 0 +305 2 0 0 0 0 0 0 0 0 +310 8 1 1 4 0 0 0 0 0 +314 120 5 5 48 6 6 0 0 0 +318 50 1 1 0 0 0 24 0 0 +319 48 0 0 0 0 0 24 0 0 +460 6 0 0 0 0 0 2 0 0 +461 4 0 0 0 0 0 0 0 0 +464 10 1 1 4 0 0 4 1 1 +465 4 0 0 0 0 0 0 0 0 +471 4 0 0 2 0 0 2 0 0 +472 8 0 0 0 0 0 2 0 0 +474 100 1 1 0 0 0 0 0 0 +475 52 0 0 0 0 0 0 0 0 +477 168 0 0 48 0 0 48 1 1 +480 48 0 0 0 0 0 0 0 0 +483 24 0 0 0 0 0 24 0 0 +484 48 0 0 24 0 0 24 0 0 +493 24 0 0 0 0 0 24 0 0 +497 6 0 0 4 0 0 2 0 0 +498 6 0 0 4 0 0 0 0 0 +499 312 0 0 234 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/loadlocale.c +fn=_nl_intern_locale_data +69 192 1 1 0 0 0 144 0 0 +79 96 0 0 0 0 0 0 0 0 +80 278 1 1 24 14 14 0 0 0 +87 120 0 0 48 2 2 0 0 0 +89 48 0 0 0 0 0 0 0 0 +90 24 0 0 0 0 0 0 0 0 +98 48 0 0 0 0 0 24 0 0 +100 48 1 1 0 0 0 0 0 0 +103 24 0 0 0 0 0 24 2 2 +104 24 0 0 0 0 0 24 8 8 +105 24 0 0 0 0 0 24 0 0 +106 24 0 0 0 0 0 24 2 0 +107 24 0 0 0 0 0 24 8 7 +109 24 0 0 0 0 0 24 0 0 +110 2316 0 0 0 0 0 0 0 0 +112 1480 0 0 740 45 45 0 0 0 +113 1480 0 0 0 0 0 0 0 0 +124 3700 0 0 740 1 1 0 0 0 +132 24 0 0 0 0 0 0 0 0 +133 636 0 0 0 0 0 0 0 0 +134 76 0 0 0 0 0 0 0 0 +135 184 0 0 0 0 0 0 0 0 +137 12 0 0 0 0 0 0 0 0 +138 28 0 0 0 0 0 0 0 0 +139 52 0 0 0 0 0 0 0 0 +140 60 0 0 0 0 0 0 0 0 +141 8 0 0 0 0 0 0 0 0 +142 64 0 0 0 0 0 0 0 0 +144 356 1 1 0 0 0 0 0 0 +148 528 1 1 0 0 0 0 0 0 +151 2276 2 2 1468 27 27 0 0 0 +152 1340 0 0 0 0 0 670 71 60 +155 140 1 1 0 0 0 0 0 0 +157 210 0 0 70 25 25 70 7 4 +163 192 0 0 168 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/localeinfo.h +fn=newlocale +206 80 10 5 24 2 1 28 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/localename.c +fn=__current_locale_name +24 2 1 1 0 0 0 0 0 0 +25 8 0 0 6 2 2 0 0 0 +26 2 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/newlocale.c +fn=newlocale +44 84 7 2 6 0 0 42 0 0 +56 15 0 0 0 0 0 0 0 0 +57 6 3 1 0 0 0 0 0 0 +60 6 0 0 0 0 0 0 0 0 +64 12 0 0 0 0 0 0 0 0 +67 18 4 1 0 0 0 0 0 0 +73 16 0 0 0 0 0 0 0 0 +74 24 7 1 9 1 1 0 0 0 +76 4 4 1 0 0 0 0 0 0 +79 6 0 0 0 0 0 0 0 0 +80 60 6 3 30 0 0 30 0 0 +83 90 9 3 45 15 3 45 0 0 +87 4 2 1 0 0 0 0 0 0 +102 5 0 0 0 0 0 5 0 0 +103 5 0 0 0 0 0 5 0 0 +105 10 0 0 0 0 0 5 1 0 +106 10 3 1 0 0 0 0 0 0 +121 60 3 1 0 0 0 60 0 0 +122 25 3 1 0 0 0 5 0 0 +125 46 4 2 2 0 0 4 0 0 +127 12 0 0 0 0 0 5 0 0 +129 146 2 1 0 0 0 24 0 0 +131 53 1 1 0 0 0 0 0 0 +133 408 6 3 156 2 1 22 1 0 +134 246 18 8 68 0 0 36 0 0 +142 24 0 0 0 0 0 0 0 0 +143 48 2 1 0 0 0 24 0 0 +144 48 0 0 0 0 0 24 0 0 +145 48 0 0 0 0 0 0 0 0 +148 22 0 0 0 0 0 22 0 0 +149 22 0 0 0 0 0 0 0 0 +156 6 0 0 0 0 0 0 0 0 +162 40 4 2 15 1 0 5 0 0 +166 181 0 0 0 0 0 0 0 0 +168 130 3 1 65 0 0 65 0 0 +170 304 3 1 76 0 0 114 0 0 +173 114 0 0 38 0 0 0 0 0 +187 152 3 1 38 0 0 0 0 0 +190 172 0 0 22 0 0 5 0 0 +192 192 0 0 48 0 0 96 0 0 +200 20 0 0 10 0 0 5 0 0 +201 10 0 0 0 0 0 0 0 0 +207 30 3 1 0 0 0 4 0 0 +215 117 3 1 0 0 0 0 0 0 +216 186 0 0 75 2 0 39 0 0 +218 24 0 0 0 0 0 24 0 0 +219 48 0 0 0 0 0 24 0 0 +222 96 9 3 45 4 0 45 9 6 +230 76 0 0 2 0 0 2 0 0 +231 104 2 1 52 0 0 26 0 0 +233 8 0 0 6 0 0 0 0 0 +236 4 2 1 2 0 0 2 0 0 +238 6 0 0 2 0 0 0 0 0 +246 48 0 0 0 0 0 0 0 0 +249 44 0 0 22 0 0 22 2 1 +250 66 0 0 22 0 0 0 0 0 +254 24 0 0 0 0 0 24 3 2 +255 120 0 0 24 0 0 48 0 0 +259 6 0 0 2 0 0 2 0 0 +263 55 6 2 20 2 0 10 1 0 +268 5 4 1 5 0 0 0 0 0 +269 5 0 0 0 0 0 5 0 0 +270 20 0 0 15 5 0 0 0 0 +273 5 0 0 0 0 0 5 0 0 +274 10 0 0 5 0 0 0 0 0 +278 72 1 0 54 1 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/nl_langinfo_l.c +fn=nl_langinfo_l +31 428 2 1 0 0 0 0 0 0 +32 856 0 0 0 0 0 0 0 0 +33 428 0 0 0 0 0 0 0 0 +36 1712 2 1 0 0 0 0 0 0 +38 428 0 0 0 0 0 0 0 0 +42 856 0 0 0 0 0 0 0 0 +43 428 0 0 0 0 0 0 0 0 +58 428 0 0 428 1 0 0 0 0 +61 856 0 0 428 0 0 0 0 0 +66 856 0 0 856 34 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/locale/uselocale.c +fn=uselocale +30 22 3 1 0 0 0 0 0 0 +31 66 0 0 44 6 0 0 0 0 +33 44 0 0 0 0 0 0 0 0 +36 44 0 0 0 0 0 0 0 0 +37 22 0 0 0 0 0 22 0 0 +65 66 3 1 44 5 1 22 0 0 +66 66 0 0 44 3 0 22 0 0 +68 66 0 0 44 0 0 22 0 0 +72 66 0 0 0 0 0 0 0 0 +73 22 0 0 22 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/malloc/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +fn=tcache_init.part.0 +47 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/malloc/alloc_buffer_alloc_array.c +fn=__libc_alloc_buffer_alloc_array +25 6 1 1 0 0 0 0 0 0 +26 6 0 0 6 0 0 0 0 0 +28 18 0 0 0 0 0 0 0 0 +30 42 0 0 0 0 0 0 0 0 +31 6 0 0 0 0 0 0 0 0 +32 6 0 0 0 0 0 0 0 0 +34 36 1 1 0 0 0 0 0 0 +35 18 0 0 6 0 0 6 0 0 +38 6 0 0 0 0 0 0 0 0 +45 6 0 0 6 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/malloc/arena.c +fn=malloc_hook_ini +291 5 0 0 2 2 1 1 0 0 +fn=ptmalloc_init.part.0 +289 5 1 1 1 0 0 2 0 0 +294 1 0 0 0 0 0 1 0 0 +302 2 0 0 1 0 0 0 0 0 +303 7 1 1 0 0 0 1 0 0 +304 4 0 0 2 1 0 0 0 0 +308 4 1 1 1 1 0 1 1 0 +313 5 1 1 0 0 0 1 0 0 +314 4 0 0 0 0 0 1 0 0 +315 4 1 1 0 0 0 1 0 0 +316 4 0 0 0 0 0 1 0 0 +317 4 0 0 0 0 0 1 0 0 +318 4 1 1 0 0 0 1 0 0 +319 4 0 0 0 0 0 1 0 0 +320 4 0 0 0 0 0 1 0 0 +322 4 1 1 0 0 0 1 0 0 +323 4 0 0 0 0 0 1 0 0 +324 4 0 0 0 0 0 1 0 0 +327 4 1 1 0 0 0 1 0 0 +396 2 0 0 2 2 1 0 0 0 +397 2 0 0 0 0 0 0 0 0 +400 1 0 0 0 0 0 1 1 0 +401 6 0 0 4 0 0 0 0 0 +fn=sysmalloc +536 9 0 0 0 0 0 3 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/malloc/hooks.c +fn=malloc_hook_ini +29 5 1 1 0 0 0 3 0 0 +30 2 0 0 1 0 0 1 0 0 +33 5 0 0 4 1 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/malloc/malloc.c +fn=_int_free +1875 7620 10 2 2540 0 0 0 0 0 +2924 3002 36 2 0 0 0 1501 0 0 +2926 3002 0 0 1501 30 5 1501 0 0 +2927 1501 22 2 0 0 0 1501 0 0 +2928 3002 0 0 0 0 0 1501 0 0 +4155 44451 41 4 4041 0 0 28287 6 0 +4165 12123 0 0 4041 0 0 0 0 0 +4171 20205 0 0 0 0 0 0 0 0 +4172 8082 0 0 0 0 0 0 0 0 +4176 16164 15 2 0 0 0 0 0 0 +4183 8082 0 0 0 0 0 0 0 0 +4184 28287 0 0 12123 4 0 0 0 0 +4187 3999 0 0 0 0 0 0 0 0 +4193 7998 0 0 3999 226 222 0 0 0 +4206 19995 18 2 7998 12 0 0 0 0 +4209 1501 0 0 0 0 0 0 0 0 +4220 5080 0 0 2540 1 0 0 0 0 +4231 7340 0 0 1835 328 108 0 0 0 +4233 5505 13 2 1835 1 0 0 0 0 +4254 1835 0 0 0 0 0 1835 3 0 +4255 1835 0 0 0 0 0 0 0 0 +4259 5505 0 0 1835 0 0 0 0 0 +4261 5505 0 0 1835 0 0 0 0 0 +4265 3670 0 0 0 0 0 0 0 0 +4267 1835 0 0 0 0 0 1835 0 0 +4268 1835 0 0 0 0 0 1835 0 0 +4286 7304 0 0 0 0 0 0 0 0 +4295 1410 0 0 705 0 0 0 0 0 +4298 705 0 0 705 0 0 0 0 0 +4301 2115 0 0 0 0 0 705 0 0 +4304 705 10 2 0 0 0 0 0 0 +4308 2115 0 0 705 4 0 0 0 0 +4311 2820 13 2 705 0 0 0 0 0 +4313 2115 12 2 705 6 0 0 0 0 +4316 2115 0 0 705 152 47 0 0 0 +4319 1410 0 0 0 0 0 0 0 0 +4320 1410 0 0 0 0 0 0 0 0 +4321 1410 0 0 705 0 0 0 0 0 +4327 1410 0 0 705 0 0 0 0 0 +4328 167 0 0 167 0 0 0 0 0 +4329 167 0 0 0 0 0 0 0 0 +4330 167 0 0 0 0 0 0 0 0 +4331 668 0 0 167 1 0 0 0 0 +4333 334 0 0 0 0 0 167 0 0 +4336 1410 11 2 705 0 0 0 0 0 +4341 1396 0 0 698 215 85 0 0 0 +4342 282 8 2 0 0 0 141 0 0 +4343 282 0 0 0 0 0 0 0 0 +4345 557 0 0 557 0 0 0 0 0 +4353 698 0 0 0 0 0 0 0 0 +4354 698 0 0 698 0 0 0 0 0 +4355 1396 0 0 698 2 0 0 0 0 +4357 2792 0 0 0 0 0 698 1 1 +4359 1396 8 1 0 0 0 0 0 0 +4361 303 8 2 0 0 0 101 3 3 +4364 698 0 0 0 0 0 698 0 0 +4365 698 0 0 0 0 0 698 0 0 +4367 2094 0 0 0 0 0 698 0 0 +4368 698 0 0 0 0 0 698 0 0 +4379 7 7 2 0 0 0 0 0 0 +4380 21 0 0 0 0 0 7 0 0 +4381 14 0 0 0 0 0 7 0 0 +4398 1410 5 1 0 0 0 0 0 0 +4399 21 5 2 7 0 0 0 0 0 +4400 3 1 1 0 0 0 1 0 0 +4402 21 0 0 0 0 0 0 0 0 +4404 35 4 1 21 2 0 0 0 0 +4418 2115 0 0 705 0 0 0 0 0 +4428 44451 30 4 36369 0 0 0 0 0 +fn=_int_malloc +1208 4214 16 2 0 0 0 0 0 0 +1210 10535 20 2 0 0 0 0 0 0 +1637 4184 0 0 0 0 0 0 0 0 +1868 6313 7 0 2103 1 0 0 0 0 +2920 1351 0 0 0 0 0 608 0 0 +2924 612 0 0 135 0 0 477 0 0 +2926 1498 1 0 616 0 0 612 0 0 +2927 4 0 0 0 0 0 4 0 0 +2928 1494 0 0 135 0 0 612 0 0 +2929 946 0 0 0 0 0 0 0 0 +2936 12 0 0 8 0 0 0 0 0 +2937 8 0 0 4 0 0 4 0 0 +2938 4 0 0 4 0 0 0 0 0 +2939 4 0 0 0 0 0 4 0 0 +3513 18963 17 2 0 0 0 12642 3 0 +3553 4214 0 0 0 0 0 0 0 0 +3577 4244 0 0 2107 8 0 0 0 0 +3580 24 0 0 0 0 0 0 0 0 +3582 2610 16 2 1305 7 1 0 0 0 +3584 2610 0 0 0 0 0 0 0 0 +3586 96 0 0 48 5 0 0 0 0 +3587 24 0 0 0 0 0 24 0 0 +3589 6096 29 4 0 0 0 0 0 0 +3592 48 7 1 24 2 0 0 0 0 +3593 48 0 0 0 0 0 0 0 0 +3599 48 0 0 0 0 0 0 0 0 +3600 144 0 0 72 0 0 0 0 0 +3605 525 6 1 183 0 0 0 0 0 +3606 423 6 1 141 0 0 0 0 0 +3608 540 3 0 270 43 0 0 0 0 +3609 135 0 0 0 0 0 135 0 0 +3635 1604 0 0 0 0 0 0 0 0 +3637 5889 19 2 0 0 0 1963 14 0 +3638 4064 21 2 0 0 0 0 0 0 +3640 27689 16 2 2032 67 7 17667 7 0 +3642 69 0 0 69 10 1 0 0 0 +3643 138 0 0 69 67 9 0 0 0 +3645 69 0 0 69 22 2 0 0 0 +3646 69 0 0 0 0 0 69 0 0 +3647 69 0 0 0 0 0 69 0 0 +3649 207 0 0 0 0 0 0 0 0 +3655 138 0 0 0 0 0 0 0 0 +3656 483 10 2 207 0 0 0 0 0 +3661 1833 0 0 138 0 0 0 0 0 +3662 952 9 2 0 0 0 0 0 0 +3666 473 0 0 473 0 0 0 0 0 +3667 473 0 0 473 140 21 0 0 0 +3668 946 0 0 0 0 0 0 0 0 +3670 473 0 0 0 0 0 473 0 0 +3671 473 0 0 0 0 0 473 466 60 +3678 93 0 0 0 0 0 0 0 0 +3697 1746 44 7 0 0 0 545 2 0 +3698 153 0 0 51 2 0 0 0 0 +3699 30 0 0 0 0 0 10 1 0 +3716 10067 0 0 2013 1 0 4027 9 0 +3717 6042 4 0 0 0 0 0 0 0 +3718 6042 0 0 4028 2 0 0 0 0 +3722 4028 21 2 0 0 0 2014 0 0 +3727 250 0 0 0 0 0 0 0 0 +3728 8045 3 1 2679 11 1 0 0 0 +3730 872 0 0 872 2 0 0 0 0 +3731 1744 0 0 872 104 0 0 0 0 +3732 872 0 0 0 0 0 0 0 0 +3734 1744 0 0 0 0 0 0 0 0 +3735 2616 19 2 872 6 1 0 0 0 +3737 872 0 0 872 139 0 0 0 0 +3738 3488 0 0 0 0 0 0 0 0 +3740 3488 0 0 872 0 0 0 0 0 +3742 1744 0 0 872 436 0 0 0 0 +3743 1744 18 2 872 0 0 0 0 0 +3745 1744 0 0 0 0 0 0 0 0 +3756 2184 0 0 0 0 0 0 0 0 +3757 440 13 2 220 0 0 0 0 0 +3758 416 0 0 208 0 0 0 0 0 +3759 1500 0 0 0 0 0 750 0 0 +3762 203 0 0 0 0 0 0 0 0 +3763 1218 0 0 0 0 0 0 0 0 +3764 406 13 2 203 0 0 203 0 0 +3765 203 0 0 0 0 0 203 0 0 +3766 609 0 0 0 0 0 203 95 17 +3767 406 0 0 0 0 0 0 0 0 +3769 364 0 0 0 0 0 182 46 17 +3773 1624 13 2 0 0 0 203 0 0 +3775 609 0 0 0 0 0 203 8 4 +3776 203 0 0 0 0 0 203 0 0 +3779 203 0 0 0 0 0 0 0 0 +3787 669 0 0 0 0 0 669 0 0 +3788 669 0 0 0 0 0 669 0 0 +3792 1338 0 0 0 0 0 0 0 0 +3794 8 3 1 0 0 0 4 0 0 +3795 6054 0 0 0 0 0 4028 1 0 +3800 12 0 0 4 0 0 0 0 0 +3801 1020 18 2 512 0 0 250 0 0 +3805 8 0 0 0 0 0 0 0 0 +3821 1330 0 0 0 0 0 0 0 0 +3823 1258 6 1 0 0 0 0 0 0 +3824 2516 0 0 0 0 0 0 0 0 +3825 629 0 0 629 10 2 0 0 0 +3829 305 9 2 0 0 0 0 0 0 +3830 144 16 4 0 0 0 0 0 0 +3831 36 0 0 36 14 1 0 0 0 +3834 72 0 0 0 0 0 0 0 0 +3878 180 7 1 0 0 0 36 0 0 +3881 3990 7 1 665 7 0 0 0 0 +3883 2660 0 0 0 0 0 665 0 0 +3884 665 0 0 0 0 0 665 4 0 +3885 665 0 0 0 0 0 665 0 0 +3890 1330 14 2 1330 0 0 0 0 0 +3891 1330 0 0 0 0 0 0 0 0 +3892 750 0 0 250 0 0 250 0 0 +3900 1995 8 0 0 0 0 0 0 0 +3908 4 0 0 0 0 0 0 0 0 +3917 3614 9 2 0 0 0 0 0 0 +3919 204 0 0 51 0 0 0 0 0 +3922 153 8 0 51 23 1 0 0 0 +3990 3614 11 2 1807 0 0 0 0 0 +3991 3614 0 0 0 0 0 0 0 0 +3992 3614 0 0 0 0 0 0 0 0 +3993 3614 0 0 1807 4 1 0 0 0 +3994 5421 0 0 0 0 0 0 0 0 +3999 3817 20 2 0 0 0 0 0 0 +4003 14158 16 2 0 0 0 0 0 0 +4006 19148 16 3 5197 0 0 0 0 0 +4008 124 2 1 0 0 0 0 0 0 +4009 62 0 0 0 0 0 0 0 0 +4013 940 0 0 0 0 0 0 0 0 +4015 396 0 0 0 0 0 0 0 0 +4017 792 0 0 0 0 0 0 0 0 +4021 74 0 0 74 11 1 0 0 0 +4024 148 0 0 0 0 0 0 0 0 +4026 195 6 2 0 0 0 39 0 0 +4027 39 0 0 0 0 0 0 0 0 +4028 39 0 0 0 0 0 0 0 0 +4033 105 24 4 70 6 1 0 0 0 +4036 70 0 0 0 0 0 0 0 0 +4038 70 0 0 0 0 0 0 0 0 +4041 140 0 0 0 0 0 105 0 0 +4044 140 0 0 70 0 0 0 0 0 +4046 1 0 0 1 0 0 0 0 0 +4047 3 1 1 0 0 0 0 0 0 +4054 34 0 0 0 0 0 0 0 0 +4059 34 0 0 34 0 0 0 0 0 +4060 68 12 2 34 0 0 0 0 0 +4063 136 0 0 0 0 0 34 19 0 +4064 34 0 0 0 0 0 34 0 0 +4065 34 0 0 0 0 0 34 0 0 +4068 68 0 0 0 0 0 0 0 0 +4069 19 0 0 0 0 0 19 0 0 +4070 68 0 0 0 0 0 0 0 0 +4072 44 0 0 0 0 0 22 1 0 +4075 272 13 2 0 0 0 34 0 0 +4077 102 0 0 0 0 0 34 9 0 +4078 34 0 0 0 0 0 34 0 0 +4081 35 0 0 0 0 0 0 0 0 +4103 1772 6 0 1772 0 0 0 0 0 +4104 3544 16 2 1772 6 1 0 0 0 +4106 3544 0 0 1772 3 1 0 0 0 +4109 5323 0 0 0 0 0 7 0 0 +4111 1765 0 0 0 0 0 0 0 0 +4112 3530 14 2 1765 0 0 0 0 0 +4113 1765 0 0 0 0 0 1765 0 0 +4114 14120 12 1 0 0 0 1765 0 0 +4116 3530 0 0 0 0 0 1765 1438 1438 +4119 1765 0 0 0 0 0 0 0 0 +4126 21 0 0 7 0 0 0 0 0 +4141 35 8 2 7 0 0 7 0 0 +4142 14 0 0 0 0 0 0 0 0 +4147 26759 20 2 14749 1 0 0 0 0 +fn=calloc +3366 3786 6 1 0 0 0 2524 0 0 +3376 5679 0 0 0 0 0 0 0 0 +3384 1262 0 0 1262 1 0 0 0 0 +3385 1262 6 1 0 0 0 0 0 0 +3394 1893 0 0 1262 0 0 0 0 0 +3396 1893 0 0 631 0 0 0 0 0 +3406 631 0 0 631 1 0 0 0 0 +3407 1893 0 0 631 1 0 0 0 0 +3428 2524 7 1 0 0 0 631 0 0 +3430 6310 5 1 631 0 0 0 0 0 +3433 1893 0 0 631 0 0 0 0 0 +3447 1262 0 0 0 0 0 0 0 0 +3450 631 5 1 0 0 0 0 0 0 +3453 2524 5 1 1262 0 0 0 0 0 +3461 631 0 0 0 0 0 0 0 0 +3464 4402 0 0 0 0 0 0 0 0 +3475 631 0 0 0 0 0 0 0 0 +3477 1262 0 0 0 0 0 0 0 0 +3479 1262 5 1 0 0 0 0 0 0 +3480 3050 5 1 0 0 0 610 0 0 +3484 42 0 0 0 0 0 21 0 0 +3486 21 0 0 0 0 0 21 0 0 +3487 42 0 0 0 0 0 0 0 0 +3489 21 0 0 0 0 0 21 0 0 +3491 42 0 0 0 0 0 0 0 0 +3505 4417 0 0 3155 0 0 0 0 0 +fn=free +3087 8102 14 2 0 0 0 0 0 0 +3092 8102 0 0 8102 24 2 0 0 0 +3093 8102 0 0 0 0 0 0 0 0 +3099 8102 0 0 0 0 0 0 0 0 +3102 4045 0 0 0 0 0 0 0 0 +3104 12135 0 0 4045 1023 530 0 0 0 +3108 12 0 0 4 1 1 0 0 0 +3110 12 0 0 4 0 0 0 0 0 +3111 8 1 1 4 1 1 0 0 0 +3113 4 0 0 0 0 0 2 0 0 +3114 4 1 1 0 0 0 2 0 0 +3115 4 0 0 0 0 0 0 0 0 +3118 8 0 0 0 0 0 0 0 0 +3122 12123 0 0 8082 11 0 0 0 0 +3124 12123 18 2 0 0 0 0 0 0 +3125 8082 0 0 0 0 0 0 0 0 +3126 4057 4 1 6 0 0 0 0 0 +fn=malloc +1208 6914 0 0 0 0 0 0 0 0 +1210 26892 30 4 0 0 0 0 0 0 +2936 3966 0 0 1983 26 3 0 0 0 +2937 3966 0 0 1983 177 16 1983 0 0 +2938 3966 0 0 0 0 0 1983 0 0 +2939 1983 17 2 0 0 0 1983 0 0 +3023 17290 14 1 0 0 0 10374 2 0 +3031 6916 0 0 6916 14 1 0 0 0 +3032 6916 0 0 0 0 0 0 0 0 +3033 2 1 1 1 0 0 0 0 0 +3044 13828 0 0 6914 13 2 0 0 0 +3047 6914 0 0 3457 6 1 0 0 0 +3048 3421 12 2 0 0 0 0 0 0 +3049 10263 0 0 3421 17 2 0 0 0 +3051 1983 0 0 0 0 0 0 0 0 +3056 4422 0 0 1474 0 0 0 0 0 +3058 5896 2 1 0 0 0 1474 2 0 +3059 10310 0 0 1474 13 0 0 0 0 +3082 17288 11 1 13831 0 0 0 0 0 +fn=malloc_consolidate +4441 88 9 2 0 0 0 66 0 0 +4456 11 0 0 0 0 0 11 0 0 +4458 22 0 0 0 0 0 11 1 0 +4469 11 10 2 0 0 0 0 0 0 +4471 220 0 0 220 1 0 0 0 0 +4472 220 0 0 0 0 0 0 0 0 +4475 1896 6 2 632 132 0 0 0 0 +4476 2528 0 0 0 0 0 0 0 0 +4481 632 0 0 632 70 0 0 0 0 +4484 1264 0 0 0 0 0 0 0 0 +4485 632 0 0 0 0 0 0 0 0 +4486 1264 6 2 632 154 0 0 0 0 +4488 1264 0 0 0 0 0 0 0 0 +4489 19 0 0 19 0 0 0 0 0 +4490 19 0 0 0 0 0 0 0 0 +4491 19 0 0 0 0 0 0 0 0 +4492 76 0 0 19 0 0 0 0 0 +4494 76 0 0 19 0 0 38 0 0 +4497 1264 0 0 632 0 0 0 0 0 +4500 1264 6 2 632 401 15 0 0 0 +4504 632 0 0 632 0 0 0 0 0 +4506 632 0 0 632 0 0 0 0 0 +4507 632 0 0 0 0 0 632 0 0 +4508 632 0 0 0 0 0 632 0 0 +4510 1264 0 0 0 0 0 0 0 0 +4515 1896 0 0 0 0 0 632 0 0 +4517 1896 0 0 632 0 0 632 0 0 +4518 632 0 0 0 0 0 632 0 0 +4527 1890 0 0 0 0 0 0 0 0 +4530 330 0 0 110 0 0 0 0 0 +4531 88 0 0 77 1 0 0 0 0 +fn=malloc_hook_ini +1208 2 1 1 0 0 0 0 0 0 +1210 8 1 1 0 0 0 0 0 0 +2978 4 0 0 2 1 1 1 0 0 +3032 2 0 0 0 0 0 0 0 0 +3044 4 0 0 2 0 0 0 0 0 +3047 2 1 1 1 0 0 0 0 0 +3048 5 0 0 1 0 0 0 0 0 +3049 3 0 0 1 0 0 0 0 0 +3056 3 1 1 1 0 0 0 0 0 +3058 4 0 0 0 0 0 1 0 0 +3059 7 0 0 1 0 0 0 0 0 +fn=munmap_chunk +2809 4 2 1 0 0 0 0 0 0 +2810 8 0 0 8 3 2 0 0 0 +2811 12 0 0 4 0 0 0 0 0 +2813 8 0 0 0 0 0 0 0 0 +2817 16 4 2 8 0 0 0 0 0 +2820 4 0 0 0 0 0 0 0 0 +2821 12 0 0 4 0 0 0 0 0 +2822 4 0 0 0 0 0 0 0 0 +2828 16 0 0 0 0 0 0 0 0 +2829 20 0 0 0 0 0 0 0 0 +2832 4 0 0 8 0 0 0 0 0 +2833 12 0 0 8 0 0 0 0 0 +2838 8 0 0 0 0 0 0 0 0 +2839 4 0 0 0 0 0 0 0 0 +fn=ptmalloc_init.part.0 +1795 257 0 0 0 0 0 0 0 0 +1798 508 0 0 0 0 0 127 33 33 +1806 1 0 0 0 0 0 1 1 1 +1807 1 0 0 0 0 0 1 1 1 +1809 1 0 0 0 0 0 1 0 0 +fn=sysmalloc +2255 56 8 2 0 0 0 42 0 0 +2275 14 0 0 14 5 0 0 0 0 +2286 14 0 0 0 0 0 0 0 0 +2287 27 0 0 7 4 1 3 0 0 +2288 12 1 1 8 0 0 0 0 0 +2302 28 3 1 0 0 0 6 0 0 +2308 8 0 0 0 0 0 0 0 0 +2310 28 1 1 0 0 0 4 0 0 +2312 8 0 0 0 0 0 0 0 0 +2327 12 1 1 0 0 0 0 0 0 +2342 4 0 0 0 0 0 4 4 4 +2343 12 1 1 0 0 0 4 0 0 +2348 12 0 0 8 0 0 0 0 0 +2349 20 0 0 8 0 0 0 0 0 +2352 12 0 0 8 0 0 0 0 0 +2353 20 1 0 8 0 0 0 0 0 +2368 3 0 0 3 0 0 0 0 0 +2369 9 0 0 3 0 0 0 0 0 +2370 3 0 0 0 0 0 0 0 0 +2379 22 2 0 3 0 0 0 0 0 +2385 9 1 1 0 0 0 0 0 0 +2388 9 0 0 0 0 0 0 0 0 +2449 27 2 1 6 0 0 3 0 0 +2460 3 3 1 0 0 0 0 0 0 +2468 9 0 0 0 0 0 0 0 0 +2470 18 0 0 6 3 0 9 0 0 +2471 3 0 0 0 0 0 0 0 0 +2474 12 0 0 6 0 0 0 0 0 +2477 6 3 1 6 4 0 0 0 0 +2478 6 0 0 0 0 0 0 0 0 +2524 20 0 0 6 1 0 0 0 0 +2525 2 1 1 0 0 0 1 0 0 +2526 3 0 0 0 0 0 3 0 0 +2532 10 2 1 0 0 0 0 0 0 +2533 10 0 0 2 0 0 2 0 0 +2535 4 2 2 1 0 0 0 0 0 +2575 3 0 0 0 0 0 0 0 0 +2597 2 0 0 0 0 0 0 0 0 +2598 6 1 1 1 0 0 0 0 0 +2600 2 0 0 0 0 0 0 0 0 +2601 2 0 0 2 0 0 1 0 0 +2613 2 0 0 0 0 0 0 0 0 +2621 2 0 0 2 0 0 0 0 0 +2622 9 1 1 2 0 0 1 0 0 +2660 1 1 1 0 0 0 1 0 0 +2661 4 1 1 0 0 0 1 1 1 +2662 1 0 0 0 0 0 1 0 0 +2673 2 0 0 0 0 0 0 0 0 +2705 6 2 1 3 0 0 0 0 0 +2706 3 0 0 0 0 0 3 0 0 +2711 6 0 0 3 0 0 0 0 0 +2714 6 0 0 0 0 0 0 0 0 +2716 9 2 1 0 0 0 0 0 0 +2717 3 0 0 0 0 0 0 0 0 +2718 9 0 0 0 0 0 3 0 0 +2719 9 0 0 0 0 0 3 0 0 +2720 6 0 0 0 0 0 3 3 3 +2722 3 0 0 0 0 0 0 0 0 +2728 63 1 0 49 0 0 0 0 0 +fn=tcache_init.part.0 +2972 1 0 0 0 0 0 1 0 0 +2981 7 2 2 3 0 0 0 0 0 +2982 4 0 0 0 0 0 1 0 0 +2983 2 0 0 0 0 0 0 0 0 +2991 4 1 1 2 0 0 0 0 0 +2998 2 0 0 0 0 0 0 0 0 +3000 2 0 0 1 0 0 1 0 0 +3001 88 1 1 0 0 0 81 9 9 +3004 2 0 0 2 0 0 0 0 0 +fn=unlink_chunk.isra.0 +1451 362 15 2 0 0 0 0 0 0 +1453 1810 0 0 724 6 1 0 0 0 +1456 362 0 0 362 0 0 0 0 0 +1457 362 0 0 362 0 0 0 0 0 +1459 1448 0 0 724 48 0 0 0 0 +1462 362 15 2 0 0 0 362 0 0 +1463 362 0 0 0 0 0 362 0 0 +1464 1009 0 0 95 4 1 0 0 0 +1466 70 0 0 35 0 0 0 0 0 +1467 105 0 0 70 0 0 0 0 0 +1470 70 0 0 35 4 1 0 0 0 +1484 35 0 0 0 0 0 35 0 0 +1485 70 0 0 35 0 0 35 0 0 +1488 724 0 0 362 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/malloc/morecore.c +fn=__default_morecore +46 8 3 1 0 0 0 0 0 0 +47 4 0 0 0 0 0 4 0 0 +49 12 2 1 0 0 0 0 0 0 +52 8 0 0 4 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/malloc/scratch_buffer_set_array_size.c +fn=__libc_scratch_buffer_set_array_size +30 235 1 1 0 0 0 141 0 0 +31 94 0 0 0 0 0 0 0 0 +34 94 0 0 0 0 0 0 0 0 +35 94 0 0 0 0 0 0 0 0 +45 94 0 0 47 0 0 0 0 0 +46 47 1 1 0 0 0 0 0 0 +63 188 0 0 188 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_asin.c +fn=__acos_finite@GLIBC_2.15 +35 1 1 1 0 0 0 0 0 0 +fn=__asin_finite@GLIBC_2.15 +27 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_atan2.c +fn=__atan2_finite@GLIBC_2.15 +26 2 2 2 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_exp.c +fn=__exp_finite@GLIBC_2.15 +27 2 2 2 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_exp2f.c +fn=exp2f@@GLIBC_2.27 +27 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_expf.c +fn=expf@@GLIBC_2.27 +27 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_log.c +fn=__log_finite@GLIBC_2.15 +27 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_log2f.c +fn=log2f@@GLIBC_2.27 +27 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_logf.c +fn=logf@@GLIBC_2.27 +27 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_pow.c +fn=__pow_finite@GLIBC_2.15 +27 2 2 2 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_powf.c +fn=powf@@GLIBC_2.27 +30 3 1 1 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/ifunc-avx-fma4.h +fn=__atan2_finite@GLIBC_2.15 +32 2 0 0 0 0 0 0 0 0 +33 5 0 0 2 0 0 0 0 0 +fn=__exp_finite@GLIBC_2.15 +32 2 0 0 0 0 0 0 0 0 +33 5 0 0 2 0 0 0 0 0 +fn=__log_finite@GLIBC_2.15 +32 2 1 1 0 0 0 0 0 0 +33 5 0 0 2 0 0 0 0 0 +fn=cos +32 2 0 0 0 0 0 0 0 0 +33 5 0 0 2 0 0 0 0 0 +fn=sin +32 2 0 0 0 0 0 0 0 0 +33 5 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/ifunc-fma.h +fn=cosf +29 4 0 0 0 0 0 0 0 0 +30 3 0 0 2 0 0 0 0 0 +fn=exp2f@@GLIBC_2.27 +29 4 1 1 0 0 0 0 0 0 +30 3 0 0 2 0 0 0 0 0 +fn=expf@@GLIBC_2.27 +29 4 1 1 0 0 0 0 0 0 +30 3 0 0 2 0 0 0 0 0 +fn=log2f@@GLIBC_2.27 +29 4 0 0 0 0 0 0 0 0 +30 3 0 0 2 0 0 0 0 0 +fn=logf@@GLIBC_2.27 +29 4 0 0 0 0 0 0 0 0 +30 3 0 0 2 0 0 0 0 0 +fn=powf@@GLIBC_2.27 +29 4 1 1 0 0 0 0 0 0 +30 2 0 0 1 0 0 0 0 0 +fn=sincosf +29 4 1 1 0 0 0 0 0 0 +30 3 0 0 2 0 0 0 0 0 +fn=sinf +29 4 1 1 0 0 0 0 0 0 +30 3 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/ifunc-fma4.h +fn=__acos_finite@GLIBC_2.15 +31 2 1 1 0 0 0 0 0 0 +32 5 0 0 2 0 0 0 0 0 +35 1 0 0 1 0 0 0 0 0 +fn=__asin_finite@GLIBC_2.15 +31 2 0 0 0 0 0 0 0 0 +32 5 0 0 2 0 0 0 0 0 +fn=__pow_finite@GLIBC_2.15 +31 2 0 0 0 0 0 0 0 0 +32 5 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/s_cosf.c +fn=cosf +26 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/s_sin.c +fn=cos +34 2 2 2 1 0 0 0 0 0 +fn=sin +27 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/s_sincosf.c +fn=sincosf +26 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/s_sinf.c +fn=sinf +26 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/../include/time.h +fn=get_nprocs +326 12 0 0 0 0 0 3 0 0 +327 9 0 0 3 0 0 3 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/pthread/allocalim.h +fn=get_nprocs +27 4 0 0 0 0 0 2 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/syscall-template.S +fn=mlock +78 10 3 3 0 0 0 0 0 0 +79 2 0 0 2 0 0 0 0 0 +fn=mprotect +78 340 1 1 0 0 0 0 0 0 +79 68 0 0 68 0 0 0 0 0 +fn=munlock +78 10 2 1 0 0 0 0 0 0 +79 2 0 0 2 0 0 0 0 0 +fn=munmap +78 25 3 2 0 0 0 0 0 0 +79 5 0 0 5 0 0 0 0 0 +fn=prctl +78 6 1 1 0 0 0 0 0 0 +79 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/getclktck.c +fn=__getclktck +29 1946 1 1 0 0 0 0 0 0 +30 9730 0 0 3892 0 0 0 0 0 +31 1946 0 0 1946 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/getpagesize.c +fn=getpagesize +27 27 3 1 0 0 0 0 0 0 +28 108 0 0 54 3 0 0 0 0 +30 27 0 0 27 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/getsysstats.c +fn=get_nprocs +127 36 3 1 3 0 0 21 0 0 +132 3 3 1 3 3 1 0 0 0 +134 10 1 0 1 1 0 0 0 0 +139 8 0 0 0 0 0 0 0 0 +140 52 4 2 6 4 4 2 0 0 +141 2 0 0 0 0 0 0 0 0 +142 2 0 0 0 0 0 2 0 0 +143 2 0 0 0 0 0 2 0 0 +146 12 2 1 0 0 0 4 1 1 +148 2 2 1 0 0 0 0 0 0 +149 4 0 0 0 0 0 0 0 0 +151 16 0 0 0 0 0 2 0 0 +152 6 0 0 0 0 0 0 0 0 +156 10 0 0 0 0 0 2 0 0 +157 6 0 0 2 0 0 0 0 0 +163 2 0 0 0 0 0 0 0 0 +164 4 2 1 2 0 0 0 0 0 +166 2 2 1 0 0 0 0 0 0 +167 10 0 0 0 0 0 2 0 0 +168 6 0 0 2 0 0 0 0 0 +175 8 0 0 0 0 0 0 0 0 +178 24 2 1 10 2 0 0 0 0 +179 2 0 0 0 0 0 0 0 0 +185 4 0 0 0 0 0 0 0 0 +223 2 2 1 0 0 0 2 2 1 +225 4 0 0 2 0 0 2 0 0 +228 36 1 0 27 0 0 0 0 0 +fn=next_line +75 24 2 1 0 0 0 16 0 0 +76 2 0 0 2 0 0 0 0 0 +77 14 2 1 2 0 0 2 0 0 +78 4 0 0 0 0 0 0 0 0 +80 4 2 1 0 0 0 0 0 0 +82 4 0 0 2 0 0 0 0 0 +84 8 0 0 0 0 0 2 0 0 +85 8 0 0 4 0 0 2 0 0 +86 2 0 0 0 0 0 2 0 0 +88 10 2 1 4 0 0 2 0 0 +89 4 0 0 0 0 0 0 0 0 +92 6 0 0 2 0 0 2 0 0 +94 12 2 1 2 0 0 2 0 0 +95 4 0 0 0 0 0 0 0 0 +114 2 0 0 0 0 0 0 0 0 +118 2 0 0 0 0 0 2 0 0 +119 6 0 0 2 0 0 0 0 0 +121 4 0 0 0 0 0 0 0 0 +122 18 0 0 14 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/mmap64.c +fn=mmap +48 1095 5 3 0 0 0 438 2 1 +51 438 0 0 0 0 0 0 0 0 +54 570 3 2 0 0 0 0 0 0 +59 1314 0 0 0 0 0 0 0 0 +61 657 0 0 657 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/not-cancel.h +fn=get_nprocs +60 4 0 0 2 0 0 2 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/x86_64/brk.c +fn=brk +28 4 3 1 0 0 0 0 0 0 +31 24 3 1 4 0 0 4 0 0 +33 8 0 0 0 0 0 0 0 0 +39 4 0 0 0 0 0 0 0 0 +40 4 0 0 4 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/getauxval.c +fn=getauxval +25 1 1 1 0 0 0 0 0 0 +31 2 0 0 0 0 0 0 0 0 +32 1 0 0 1 0 0 0 0 0 +36 2 0 0 0 0 0 0 0 0 +41 60 0 0 16 5 5 0 0 0 +42 30 0 0 0 0 0 0 0 0 +43 2 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/init-misc.c +fn=__init_misc +30 5 2 2 0 0 0 2 0 0 +31 5 0 0 1 0 0 0 0 0 +33 3 0 0 0 0 0 1 0 0 +37 5 0 0 1 1 1 1 1 1 +38 3 0 0 2 0 0 1 0 0 +40 4 0 0 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/sbrk.c +fn=sbrk +32 20 3 1 0 0 0 12 0 0 +40 25 0 0 11 7 0 0 0 0 +41 6 2 2 1 0 0 1 0 0 +44 8 0 0 0 0 0 0 0 0 +48 18 1 0 0 0 0 0 0 0 +56 12 1 0 0 0 0 3 0 0 +60 20 0 0 16 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/misc/tsearch.c +fn=tfind +373 6 1 1 0 0 0 4 0 0 +377 2 0 0 0 0 0 0 0 0 +378 1 0 0 0 0 0 0 0 0 +383 6 1 1 1 1 1 0 0 0 +395 7 1 1 5 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../csu/errno-loc.c +fn=__errno_location +25 786 11 2 0 0 0 0 0 0 +26 1572 0 0 1572 9 1 0 0 0 +27 786 0 0 786 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../include/list.h +fn=__pthread_initialize_minimal +44 1 1 1 0 0 0 1 0 0 +46 1 0 0 0 0 0 1 0 0 +48 1 0 0 0 0 0 1 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../malloc/dynarray-skeleton.c +fn=__register_atfork +195 2 0 0 1 1 1 1 0 0 +197 2 1 1 0 0 0 1 0 0 +216 2 0 0 2 0 0 0 0 0 +318 3 0 0 3 0 0 0 0 0 +319 6 1 0 0 0 0 0 0 0 +320 6 0 0 0 0 0 3 0 0 +357 6 1 1 2 0 0 0 0 0 +361 4 0 0 0 0 0 0 0 0 +fn=__unregister_atfork +239 91 0 0 0 0 0 0 0 0 +250 140 1 1 47 0 0 0 0 0 +270 6 0 0 0 0 0 0 0 0 +421 4 0 0 0 0 0 0 0 0 +423 4 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../nptl/pthread_mutex_lock.c +fn=__pthread_mutex_cond_lock +64 3 1 1 0 0 0 1 0 0 +67 3 0 0 1 0 0 0 0 0 +69 1 0 0 0 0 0 0 0 0 +71 2 0 0 0 0 0 0 0 0 +75 2 0 0 0 0 0 0 0 0 +80 4 1 1 2 0 0 0 0 0 +81 3 0 0 1 0 0 0 0 0 +156 1 0 0 1 0 0 0 0 0 +159 1 0 0 0 0 0 1 0 0 +164 1 0 0 0 0 0 0 0 0 +166 1 0 0 0 0 0 0 0 0 +167 3 0 0 2 0 0 0 0 0 +fn=pthread_mutex_lock +64 255 15 2 0 0 0 85 0 0 +67 255 0 0 85 42 27 0 0 0 +69 85 0 0 0 0 0 0 0 0 +71 170 0 0 0 0 0 0 0 0 +75 170 0 0 0 0 0 0 0 0 +77 129 0 0 43 8 1 0 0 0 +80 172 0 0 43 5 5 0 0 0 +81 129 5 1 43 0 0 0 0 0 +84 84 15 2 0 0 0 0 0 0 +95 168 0 0 42 0 0 0 0 0 +99 42 0 0 42 3 0 0 0 0 +102 84 0 0 42 0 0 0 0 0 +115 84 13 2 42 0 0 0 0 0 +117 126 0 0 42 0 0 0 0 0 +118 84 17 2 0 0 0 42 0 0 +156 85 8 1 85 4 1 0 0 0 +159 85 0 0 0 0 0 85 0 0 +161 85 0 0 85 0 0 0 0 0 +164 85 0 0 0 0 0 0 0 0 +166 85 0 0 0 0 0 0 0 0 +167 255 0 0 170 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../nptl/pthread_mutex_trylock.c +fn=pthread_mutex_trylock +36 7 1 1 0 0 0 5 0 0 +38 1 0 0 1 0 0 0 0 0 +42 9 0 0 2 1 1 0 0 0 +49 2 1 1 1 0 0 0 0 0 +60 4 1 1 1 0 0 0 0 0 +63 1 0 0 0 0 0 1 0 0 +64 1 1 1 0 0 0 1 0 0 +65 1 0 0 1 0 0 0 0 0 +66 2 0 0 0 0 0 0 0 0 +460 7 1 1 6 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../nptl/sigaction.c +fn=sigaction +23 3 1 1 0 0 0 0 0 0 +24 15 1 1 0 0 0 0 0 0 +30 3 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/nptl/futex-internal.h +fn=__pthread_once_slow +141 8 0 0 0 0 0 0 0 0 +364 32 0 0 0 0 0 0 0 0 +fn=pthread_cond_destroy@@GLIBC_2.3.2 +141 9 0 0 0 0 0 0 0 0 +fn=pthread_cond_timedwait@@GLIBC_2.3.2 +319 2 0 0 0 0 0 2 0 0 +320 16 0 0 2 0 0 1 0 0 +323 3 1 1 1 0 0 2 0 0 +324 3 1 1 1 0 0 0 0 0 +fn=pthread_rwlock_rdlock +368 3 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/pt-fcntl.c +fn=fcntl@GLIBC_2.2.5 +34 28188 1 1 4698 0 0 9396 0 0 +37 23490 1 1 0 0 0 14094 0 0 +40 9396 0 0 0 0 0 4698 0 0 +41 23490 0 0 14094 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/close.c +fn=close +26 2 2 2 0 0 0 0 0 0 +27 14 0 0 2 0 0 0 0 0 +28 2 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/internal-signals.h +fn=sigaction +46 3 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/open64.c +fn=open +37 20 2 2 2 0 0 8 0 0 +40 14 0 0 0 0 0 0 0 0 +48 20 2 2 2 0 0 0 0 0 +50 14 2 2 10 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/pthread-pids.h +fn=__pthread_initialize_minimal +29 4 0 0 0 0 0 1 1 1 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/read.c +fn=read +25 3 2 1 0 0 0 0 0 0 +26 18 0 0 3 0 0 0 0 0 +27 3 0 0 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/sigaction.c +fn=__libc_sigaction +43 30 2 1 5 0 0 5 0 0 +48 10 0 0 0 0 0 0 0 0 +50 10 0 0 5 0 0 5 0 0 +51 80 6 3 40 0 0 40 3 3 +53 30 0 0 5 0 0 10 0 0 +58 55 0 0 0 0 0 0 0 0 +62 10 0 0 0 0 0 0 0 0 +70 30 2 1 15 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/x86/elision-conf.c +fn=elision_init +105 6 1 1 1 0 0 2 0 0 +110 5 1 1 0 0 0 1 0 0 +112 4 0 0 0 0 0 1 0 0 +114 4 1 1 0 0 0 1 0 0 +116 4 0 0 0 0 0 1 0 0 +118 4 0 0 0 0 0 1 0 0 +122 3 0 0 1 0 0 0 0 0 +123 1 1 1 0 0 0 1 1 0 +124 6 0 0 4 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +fn=__register_atfork +47 6 0 0 3 3 1 0 0 0 +fn=__unregister_atfork +47 94 0 0 47 2 1 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/x86_64/cancellation.S +fn=__pthread_disable_asynccancel +76 1 1 1 0 0 0 0 0 0 +77 1 0 0 0 0 0 0 0 0 +78 1 0 0 0 0 0 0 0 0 +80 1 0 0 1 0 0 0 0 0 +81 1 0 0 0 0 0 0 0 0 +82 1 0 0 0 0 0 0 0 0 +83 1 0 0 1 0 0 0 0 0 +85 1 0 0 0 0 0 0 0 0 +87 1 0 0 0 0 0 0 0 0 +88 1 0 0 0 0 0 0 0 0 +89 1 0 0 0 0 0 0 0 0 +90 1 0 0 0 0 0 0 0 0 +91 1 0 0 1 0 0 0 0 0 +fn=__pthread_enable_asynccancel +47 1 1 1 0 0 0 0 0 0 +48 1 0 0 1 0 0 0 0 0 +49 1 0 0 0 0 0 0 0 0 +50 1 0 0 0 0 0 0 0 0 +51 1 0 0 0 0 0 0 0 0 +52 1 0 0 0 0 0 0 0 0 +54 1 1 1 1 0 0 0 0 0 +56 1 0 0 0 0 0 0 0 0 +58 1 0 0 0 0 0 0 0 0 +59 1 0 0 0 0 0 0 0 0 +60 1 0 0 0 0 0 0 0 0 +62 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/alloca_cutoff.c +fn=__libc_alloca_cutoff +27 2 2 1 0 0 0 0 0 0 +28 18 2 1 2 2 0 0 0 0 +35 2 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/cleanup_compat.c +fn=_pthread_cleanup_pop +40 5 0 0 0 0 0 0 0 0 +43 10 0 0 5 1 0 5 0 0 +47 10 0 0 0 0 0 0 0 0 +49 5 3 2 5 0 0 0 0 0 +fn=_pthread_cleanup_push +26 5 4 2 0 0 0 0 0 0 +29 5 0 0 0 0 0 5 0 0 +30 5 0 0 0 0 0 5 0 0 +31 10 4 2 5 1 0 5 0 0 +33 5 0 0 0 0 0 5 0 0 +34 5 0 0 5 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/cleanup_defer_compat.c +fn=_pthread_cleanup_pop_restore +62 26 12 2 0 0 0 0 0 0 +63 26 0 0 26 0 0 0 0 0 +65 52 0 0 26 0 0 26 0 0 +68 78 0 0 26 0 0 0 0 0 +91 52 0 0 0 0 0 0 0 0 +92 26 0 0 26 0 0 0 0 0 +fn=_pthread_cleanup_push_defer +25 26 11 0 0 0 0 0 0 0 +26 26 0 0 26 0 0 0 0 0 +28 26 0 0 0 0 0 26 0 0 +29 26 0 0 0 0 0 26 0 0 +30 52 0 0 26 0 0 26 0 0 +32 78 8 2 26 4 2 0 0 0 +35 78 0 0 0 0 0 0 0 0 +52 78 0 0 0 0 0 26 0 0 +54 26 0 0 0 0 0 26 0 0 +55 26 0 0 26 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/libc_pthread_init.c +fn=__libc_pthread_init +43 3 1 1 0 0 0 1 0 0 +45 1 0 0 0 0 0 1 1 1 +48 5 0 0 0 0 0 1 0 0 +67 129 0 0 0 0 0 0 0 0 +70 126 0 0 84 6 6 0 0 0 +71 42 0 0 0 0 0 42 5 5 +73 1 0 0 0 0 0 1 0 0 +79 3 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/nptl-init.c +fn=__pthread_initialize_minimal +244 11 2 2 1 0 0 4 0 0 +246 1 0 0 1 0 0 0 0 0 +248 2 0 0 0 0 0 1 1 1 +249 1 0 0 0 0 0 1 1 1 +254 4 0 0 0 0 0 1 0 0 +258 1 0 0 0 0 0 1 0 0 +262 3 1 1 0 0 0 0 0 0 +272 3 0 0 2 2 2 1 1 1 +275 1 0 0 0 0 0 1 1 1 +276 1 0 0 0 0 0 0 0 0 +280 2 0 0 1 1 1 1 0 0 +283 3 0 0 0 0 0 0 0 0 +288 2 0 0 0 0 0 1 0 0 +289 18 0 0 0 0 0 17 1 1 +290 6 1 1 0 0 0 1 1 1 +293 2 0 0 0 0 0 1 0 0 +294 1 0 0 0 0 0 1 0 0 +295 4 0 0 0 0 0 1 0 0 +301 2 0 0 1 0 0 0 0 0 +304 6 1 1 0 0 0 0 0 0 +311 3 0 0 0 0 0 1 0 0 +314 4 1 1 1 0 0 0 0 0 +316 1 0 0 0 0 0 1 0 0 +318 6 1 1 1 0 0 1 0 0 +323 6 0 0 0 0 0 1 0 0 +324 3 0 0 1 0 0 0 0 0 +328 4 0 0 0 0 0 0 0 0 +335 2 0 0 2 0 0 0 0 0 +336 3 1 1 1 0 0 0 0 0 +341 7 0 0 0 0 0 1 0 0 +342 4 0 0 1 1 0 0 0 0 +343 2 0 0 1 0 0 1 1 1 +344 1 1 1 0 0 0 1 1 1 +345 4 0 0 2 0 0 0 0 0 +350 4 0 0 3 1 1 1 1 0 +352 1 0 0 1 1 1 0 0 0 +353 1 1 1 0 0 0 1 0 0 +354 3 0 0 0 0 0 0 0 0 +355 1 0 0 0 0 0 0 0 0 +357 2 1 1 0 0 0 1 0 0 +360 6 0 0 0 0 0 1 0 0 +366 1 0 0 0 0 0 1 0 0 +368 4 0 0 0 0 0 1 0 0 +372 1 1 1 0 0 0 1 0 0 +375 1 0 0 0 0 0 1 0 0 +377 8 0 0 6 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_broadcast.c +fn=pthread_cond_broadcast@@GLIBC_2.3.2 +40 32 6 4 0 0 0 24 0 0 +41 4 0 0 0 0 0 0 0 0 +43 4 0 0 4 3 2 0 0 0 +44 12 0 0 0 0 0 0 0 0 +89 36 3 2 28 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_common.c +fn=__condvar_cancel_waiting +49 1 0 0 1 0 0 0 0 0 +256 2 0 0 1 0 0 0 0 0 +257 2 1 1 0 0 0 0 0 0 +259 4 0 0 1 0 0 0 0 0 +291 8 0 0 2 0 0 0 0 0 +292 1 0 0 0 0 0 0 0 0 +301 2 0 0 1 0 0 0 0 0 +fn=pthread_cond_destroy@@GLIBC_2.3.2 +326 45 3 1 0 0 0 0 0 0 +fn=pthread_cond_timedwait@@GLIBC_2.3.2 +37 3 0 0 2 0 0 1 0 0 +49 1 0 0 1 0 0 0 0 0 +326 5 1 1 0 0 0 2 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_destroy.c +fn=pthread_cond_destroy@@GLIBC_2.3.2 +43 18 2 0 0 0 0 9 0 0 +44 9 0 0 0 0 0 0 0 0 +50 63 0 0 18 4 4 0 0 0 +52 36 0 0 0 0 0 0 0 0 +60 27 2 0 18 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_init.c +fn=pthread_cond_init@@GLIBC_2.3.2 +28 9 3 2 0 0 0 0 0 0 +33 36 0 0 0 0 0 27 1 1 +39 54 0 0 9 0 0 0 0 0 +45 18 4 2 0 0 0 0 0 0 +46 9 0 0 0 0 0 9 0 0 +48 9 0 0 0 0 0 0 0 0 +51 18 0 0 9 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_signal.c +fn=pthread_cond_signal@@GLIBC_2.3.2 +36 8 1 1 0 0 0 6 0 0 +37 1 0 0 0 0 0 0 0 0 +42 1 0 0 1 1 1 0 0 0 +43 3 1 1 0 0 0 0 0 0 +97 9 1 1 7 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_wait.c +fn=__condvar_cancel_waiting +81 9 1 1 0 0 0 4 0 0 +88 1 0 0 0 0 0 0 0 0 +89 2 0 0 0 0 0 0 0 0 +97 4 0 0 0 0 0 0 0 0 +102 3 0 0 1 0 0 0 0 0 +130 2 1 1 0 0 0 1 0 0 +145 6 0 0 5 0 0 0 0 0 +fn=pthread_cond_timedwait@@GLIBC_2.3.2 +54 5 1 1 2 0 0 0 0 0 +153 4 0 0 2 0 0 0 0 0 +388 1 0 0 0 0 0 0 0 0 +406 3 0 0 0 0 0 1 0 0 +407 2 0 0 0 0 0 1 0 0 +411 2 0 0 2 0 0 0 0 0 +421 4 0 0 0 0 0 2 0 0 +422 2 0 0 0 0 0 0 0 0 +434 6 1 1 2 0 0 2 0 0 +467 2 0 0 0 0 0 0 0 0 +471 2 0 0 0 0 0 0 0 0 +486 5 1 1 4 0 0 1 0 0 +487 3 0 0 1 0 0 0 0 0 +488 3 0 0 1 0 0 0 0 0 +499 2 0 0 1 0 0 1 0 0 +500 4 1 1 0 0 0 1 0 0 +502 2 0 0 1 0 0 1 0 0 +503 5 0 0 0 0 0 1 0 0 +516 3 1 1 2 0 0 0 0 0 +526 3 1 1 0 0 0 1 0 0 +536 5 0 0 3 0 0 1 0 0 +537 1 0 0 0 0 0 1 0 0 +538 1 0 0 0 0 0 0 0 0 +627 3 0 0 0 0 0 1 0 0 +629 2 1 1 1 0 0 0 0 0 +645 12 1 1 1 0 0 8 0 0 +648 2 0 0 1 0 0 0 0 0 +653 4 1 1 1 0 0 0 0 0 +654 1 0 0 0 0 0 0 0 0 +655 1 0 0 0 0 0 0 0 0 +657 12 0 0 9 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_condattr_destroy.c +fn=pthread_condattr_destroy +24 9 0 0 0 0 0 0 0 0 +27 18 0 0 9 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_condattr_init.c +fn=pthread_condattr_init +25 9 3 2 0 0 0 0 0 0 +32 9 0 0 0 0 0 9 0 0 +35 18 0 0 9 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_condattr_setclock.c +fn=pthread_condattr_setclock +29 9 3 2 0 0 0 0 0 0 +31 18 0 0 0 0 0 0 0 0 +34 9 0 0 0 0 0 0 0 0 +41 18 0 0 9 0 0 0 0 0 +42 27 0 0 0 0 0 9 0 0 +44 9 0 0 0 0 0 0 0 0 +45 9 0 0 9 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_getspecific.c +fn=pthread_getspecific +25 4 2 1 0 0 0 0 0 0 +30 8 0 0 0 0 0 0 0 0 +31 20 0 0 4 0 0 0 0 0 +55 4 0 0 4 0 0 0 0 0 +56 8 0 0 0 0 0 0 0 0 +65 8 2 1 4 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_key_create.c +fn=pthread_key_create +26 1 1 1 0 0 0 0 0 0 +28 3 0 0 0 0 0 0 0 0 +30 1 1 1 1 1 1 0 0 0 +32 4 0 0 0 0 0 0 0 0 +34 3 0 0 1 0 0 0 0 0 +38 3 0 0 0 0 0 1 0 0 +41 1 0 0 0 0 0 1 0 0 +44 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutex_conf.c +fn=__pthread_tunables_init +42 5 1 1 1 0 0 1 0 0 +43 4 0 0 0 0 0 1 0 0 +45 5 1 1 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutex_destroy.c +fn=pthread_mutex_destroy +27 127 6 1 0 0 0 0 0 0 +28 127 0 0 0 0 0 0 0 0 +32 381 0 0 127 68 52 0 0 0 +34 381 0 0 127 7 2 0 0 0 +35 127 5 1 0 0 0 0 0 0 +40 127 0 0 0 0 0 127 0 0 +42 127 0 0 0 0 0 0 0 0 +43 127 0 0 127 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutex_init.c +fn=pthread_mutex_init +53 1260 12 2 126 0 0 630 1 0 +65 252 0 0 0 0 0 0 0 0 +68 400 7 2 80 0 0 0 0 0 +89 550 6 2 0 0 0 378 34 33 +92 286 0 0 80 0 0 0 0 0 +94 160 0 0 0 0 0 0 0 0 +102 160 0 0 0 0 0 0 0 0 +105 320 14 2 0 0 0 0 0 0 +136 320 0 0 0 0 0 0 0 0 +140 126 5 2 0 0 0 126 0 0 +149 126 0 0 0 0 0 0 0 0 +151 126 0 0 0 0 0 0 0 0 +152 1134 0 0 882 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutex_unlock.c +fn=__pthread_mutex_unlock_usercnt +38 1 1 1 0 0 0 0 0 0 +41 3 0 0 1 0 0 0 0 0 +42 3 0 0 0 0 0 0 0 0 +47 2 0 0 0 0 0 0 0 0 +52 1 1 1 0 0 0 1 0 0 +53 2 0 0 0 0 0 0 0 0 +58 5 0 0 3 0 0 0 0 0 +60 1 0 0 0 0 0 0 0 0 +94 2 0 0 1 0 0 0 0 0 +fn=pthread_mutex_unlock +41 258 0 0 86 2 0 0 0 0 +42 258 14 2 0 0 0 0 0 0 +47 172 0 0 0 0 0 0 0 0 +52 86 0 0 0 0 0 86 0 0 +55 86 0 0 86 0 0 0 0 0 +58 437 0 0 258 0 0 0 0 0 +60 86 0 0 0 0 0 0 0 0 +64 86 14 2 0 0 0 0 0 0 +70 172 14 2 43 0 0 0 0 0 +74 129 0 0 86 1 0 0 0 0 +77 129 0 0 43 0 0 0 0 0 +356 86 13 2 0 0 0 0 0 0 +358 172 0 0 86 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutexattr_destroy.c +fn=pthread_mutexattr_destroy +24 80 0 0 0 0 0 0 0 0 +26 160 0 0 80 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutexattr_init.c +fn=pthread_mutexattr_init +25 80 7 2 0 0 0 0 0 0 +36 80 0 0 0 0 0 80 0 0 +39 160 0 0 80 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutexattr_settype.c +fn=pthread_mutexattr_settype +25 80 7 2 0 0 0 0 0 0 +28 160 0 0 0 0 0 0 0 0 +29 80 0 0 0 0 0 0 0 0 +33 240 0 0 0 0 0 0 0 0 +38 320 8 2 80 0 0 80 0 0 +40 80 0 0 0 0 0 0 0 0 +41 80 0 0 80 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_once.c +fn=__pthread_once_slow +68 36 3 2 4 0 0 16 0 0 +76 4 0 0 4 0 0 0 0 0 +80 8 0 0 0 0 0 0 0 0 +88 8 3 2 4 3 1 0 0 0 +92 8 0 0 4 0 0 0 0 0 +101 8 0 0 0 0 0 0 0 0 +114 20 3 2 0 0 0 4 0 0 +116 4 0 0 0 0 0 4 0 0 +118 12 3 2 0 0 0 4 0 0 +124 4 0 0 0 0 0 4 0 0 +132 36 0 0 24 1 0 0 0 0 +fn=pthread_once +136 141 11 2 0 0 0 0 0 0 +139 141 0 0 141 11 5 0 0 0 +140 282 0 0 0 0 0 0 0 0 +143 4 0 0 0 0 0 0 0 0 +144 274 0 0 137 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_rwlock_common.c +fn=pthread_rwlock_rdlock +299 12 1 1 6 3 3 0 0 0 +311 6 0 0 3 0 0 0 0 0 +353 6 0 0 6 0 0 0 0 0 +355 3 0 0 0 0 0 0 0 0 +370 6 0 0 0 0 0 0 0 0 +390 6 0 0 0 0 0 0 0 0 +395 4 0 0 0 0 0 0 0 0 +396 4 1 1 0 0 0 0 0 0 +402 8 0 0 2 0 0 0 0 0 +413 10 1 1 4 0 0 0 0 0 +fn=pthread_rwlock_unlock +221 296 5 2 74 0 0 0 0 0 +232 3 0 0 3 0 0 0 0 0 +236 3 0 0 0 0 0 0 0 0 +240 9 0 0 0 0 0 0 0 0 +243 12 1 1 0 0 0 0 0 0 +244 6 0 0 0 0 0 0 0 0 +254 9 0 0 3 0 0 0 0 0 +259 6 0 0 0 0 0 0 0 0 +275 9 0 0 0 0 0 0 0 0 +531 71 4 2 0 0 0 71 0 0 +535 213 4 2 142 0 0 0 0 0 +536 71 0 0 0 0 0 0 0 0 +538 213 0 0 71 0 0 0 0 0 +559 71 0 0 71 0 0 0 0 0 +561 568 0 0 71 0 0 0 0 0 +569 142 0 0 0 0 0 0 0 0 +582 142 0 0 0 0 0 0 0 0 +fn=pthread_rwlock_wrlock +604 284 0 0 142 7 2 0 0 0 +623 426 0 0 142 0 0 0 0 0 +625 213 0 0 0 0 0 0 0 0 +779 142 0 0 0 0 0 71 0 0 +784 213 0 0 0 0 0 0 0 0 +789 6 2 2 0 0 0 0 0 0 +790 18 2 2 0 0 0 0 0 0 +796 24 0 0 6 0 0 0 0 0 +803 3 0 0 0 0 0 3 0 0 +948 142 2 0 71 0 0 71 0 0 +950 71 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_rwlock_rdlock.c +fn=pthread_rwlock_rdlock +24 21 1 1 0 0 0 15 0 0 +25 3 0 0 0 0 0 0 0 0 +28 3 0 0 0 0 0 0 0 0 +30 18 0 0 18 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_rwlock_unlock.c +fn=pthread_rwlock_unlock +31 370 5 2 0 0 0 148 0 0 +32 74 0 0 0 0 0 0 0 0 +39 222 0 0 74 1 0 0 0 0 +40 74 0 0 74 0 0 0 0 0 +45 370 4 1 222 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/pthread_rwlock_wrlock.c +fn=pthread_rwlock_wrlock +24 639 8 4 0 0 0 426 0 0 +25 71 0 0 0 0 0 0 0 0 +28 71 0 0 0 0 0 0 0 0 +30 568 0 0 497 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/register-atfork.c +fn=__register_atfork +39 18 2 2 0 0 0 9 0 0 +40 9 0 0 3 0 0 0 0 0 +42 6 0 0 3 0 0 0 0 0 +45 2 0 0 0 0 0 1 0 0 +49 6 0 0 0 0 0 0 0 0 +51 9 0 0 6 0 0 3 1 0 +53 3 0 0 0 0 0 3 3 2 +54 3 1 1 0 0 0 3 0 0 +58 12 0 0 6 0 0 0 0 0 +60 9 0 0 0 0 0 0 0 0 +61 9 0 0 6 0 0 0 0 0 +fn=__unregister_atfork +68 508 0 0 0 0 0 0 0 0 +71 186 0 0 93 4 2 0 0 0 +79 141 1 1 0 0 0 47 0 0 +80 141 1 1 47 0 0 0 0 0 +82 47 0 0 47 0 0 0 0 0 +91 2 0 0 0 0 0 0 0 0 +92 6 0 0 0 0 0 0 0 0 +102 22 2 2 0 0 0 2 0 0 +106 188 1 1 94 0 0 0 0 0 +107 94 0 0 94 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/sem_destroy.c +fn=sem_destroy@@GLIBC_2.2.5 +26 1 1 1 0 0 0 0 0 0 +31 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/nptl/sem_init.c +fn=sem_init@@GLIBC_2.2.5 +29 1 1 1 0 0 0 0 0 0 +33 2 0 0 0 0 0 0 0 0 +51 2 0 0 0 0 0 1 1 1 +59 1 0 0 0 0 0 1 0 0 +60 3 1 1 0 0 0 0 0 0 +62 1 0 0 0 0 0 0 0 0 +63 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/posix/sysconf.c +fn=sysconf +54 11856 10 3 1976 7 3 0 0 0 +77 5838 1 1 0 0 0 1946 0 0 +215 81 6 2 0 0 0 27 2 0 +631 9 3 1 0 0 0 3 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/unix/syscall-template.S +fn=getpid +59 2193 11 2 0 0 0 0 0 0 +60 731 0 0 731 0 0 0 0 0 +fn=getuid +59 3 1 1 0 0 0 0 0 0 +60 1 0 0 1 0 0 0 0 0 +fn=sched_yield +78 13595 1 1 0 0 0 0 0 0 +79 2719 0 0 2719 0 0 0 0 0 +fn=uname +78 5 1 1 0 0 0 0 0 0 +79 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/unix/sysv/linux/_exit.c +fn=_Exit +27 3 1 1 1 1 0 0 0 0 +31 4 0 0 0 0 0 0 0 0 +33 2 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/unix/sysv/linux/x86/../sysconf.c +fn=sysconf +44 13832 3 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/unix/sysv/linux/x86/sysconf.c +fn=sysconf +32 19760 12 4 1976 0 0 9880 2 0 +33 5928 0 0 0 0 0 0 0 0 +37 17784 7 2 13832 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/posix/nanosleep.c +fn=nanosleep +26 7780 1 1 0 0 0 0 0 0 +27 5835 0 0 0 0 0 1945 0 0 +28 3890 0 0 0 0 0 0 0 0 +34 3890 0 0 1945 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/resource/../sysdeps/unix/sysv/linux/getrlimit64.c +fn=getrlimit +37 4 2 1 0 0 0 0 0 0 +38 14 0 0 0 0 0 0 0 0 +39 2 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/setjmp/../sysdeps/x86_64/bsd-_setjmp.S +fn=_setjmp +28 1 1 1 0 0 0 0 0 0 +30 1 0 0 0 0 0 0 0 0 +32 1 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/setjmp/../sysdeps/x86_64/setjmp.S +fn=__sigsetjmp +30 170 2 2 0 0 0 0 0 0 +32 170 0 0 0 0 0 170 1 0 +41 170 0 0 0 0 0 0 0 0 +42 340 0 0 170 31 0 0 0 0 +43 170 0 0 0 0 0 170 0 0 +47 170 0 0 0 0 0 170 9 1 +48 170 2 2 0 0 0 170 0 0 +49 170 0 0 0 0 0 170 1 0 +50 170 0 0 0 0 0 170 0 0 +51 170 0 0 0 0 0 0 0 0 +53 340 0 0 170 0 0 0 0 0 +55 170 0 0 0 0 0 170 28 0 +56 170 0 0 170 0 0 0 0 0 +57 170 0 0 0 0 0 0 0 0 +59 340 0 0 170 0 0 0 0 0 +61 170 0 0 0 0 0 170 0 0 +66 1 1 1 1 1 1 0 0 0 +67 1 0 0 0 0 0 0 0 0 +69 169 0 0 0 0 0 0 0 0 +72 169 0 0 0 0 0 0 0 0 +73 169 0 0 0 0 0 169 9 1 +80 169 0 0 0 0 0 0 0 0 +81 169 0 0 169 0 0 0 0 0 +84 1 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/setjmp/sigjmp.c +fn=__sigjmp_save +28 3 0 0 0 0 0 1 0 0 +29 1 0 0 0 0 0 1 0 0 +30 2 0 0 0 0 0 0 0 0 +34 3 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/signal/../nptl/sigaction.c +fn=sigaction +23 1 1 1 0 0 0 0 0 0 +24 5 1 1 0 0 0 0 0 0 +30 1 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/signal/../sysdeps/posix/signal.c +fn=__bsd_signal.part.0 +29 6 1 1 1 0 0 1 0 0 +41 2 0 0 0 0 0 1 0 0 +43 4 0 0 1 0 0 0 0 0 +44 5 0 0 1 1 0 1 0 0 +45 22 1 1 0 0 0 17 0 0 +48 3 0 0 1 0 0 0 0 0 +49 5 0 0 3 0 0 0 0 0 +fn=signal +30 1 1 1 0 0 0 0 0 0 +34 5 1 1 0 0 0 0 0 0 +35 3 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/signal/../sysdeps/unix/sysv/linux/internal-signals.h +fn=sigaction +46 1 0 0 0 0 0 0 0 0 +fn=signal +46 1 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/signal/../sysdeps/unix/sysv/linux/sigaction.c +fn=__libc_sigaction +43 6 1 1 1 0 0 1 0 0 +48 2 0 0 0 0 0 0 0 0 +50 2 0 0 1 0 0 1 0 0 +51 16 3 3 8 0 0 8 0 0 +53 6 0 0 1 0 0 2 0 0 +58 11 0 0 0 0 0 0 0 0 +62 4 0 0 0 0 0 0 0 0 +64 2 0 0 1 0 0 1 0 0 +65 16 3 3 8 1 0 8 0 0 +66 2 0 0 1 0 0 1 0 0 +67 2 0 0 1 0 0 1 0 0 +70 6 0 0 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/signal/sigempty.c +fn=sigemptyset +25 4 1 1 0 0 0 0 0 0 +26 4 0 0 0 0 0 0 0 0 +32 48 1 1 0 0 0 34 0 0 +35 2 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdio-common/../libio/libioP.h +fn=__vfprintf_internal +941 25 0 0 0 0 0 5 0 0 +943 39 8 2 12 0 0 5 0 0 +944 40 0 0 12 0 0 6 0 0 +fn=buffered_vfprintf +941 15 0 0 0 0 0 0 0 0 +943 10 0 0 0 0 0 0 0 0 +944 10 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdio-common/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +fn=buffered_vfprintf +47 10 0 0 5 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdio-common/printf-parse.h +fn=__vfprintf_internal +111 56 4 1 0 0 0 28 4 4 +fl=/build/glibc-sMfBJT/glibc-2.31/stdio-common/vfprintf-internal.c +fn=__vfprintf_internal +1289 160 8 2 10 0 0 80 9 6 +1320 30 0 0 20 4 0 10 1 1 +1324 5 3 1 0 0 0 5 0 0 +1328 48 4 1 10 2 1 2 0 0 +1332 50 4 1 10 3 1 0 0 0 +1343 30 0 0 0 0 0 0 0 0 +1346 35 4 1 5 0 0 5 0 0 +1350 5 0 0 0 0 0 5 0 0 +1354 20 0 0 10 0 0 10 6 5 +1358 5 0 0 0 0 0 5 3 3 +1369 15 2 1 0 0 0 5 0 0 +1373 60 4 1 15 2 1 5 0 0 +1377 15 0 0 10 0 0 0 0 0 +1381 40 0 0 15 5 2 5 4 4 +1402 6 0 0 0 0 0 6 0 0 +1403 6 0 0 0 0 0 6 0 0 +1404 6 0 0 0 0 0 6 0 0 +1405 6 0 0 0 0 0 6 0 0 +1406 12 0 0 0 0 0 6 0 0 +1407 6 4 1 0 0 0 6 0 0 +1408 18 0 0 6 2 1 6 0 0 +1409 6 0 0 0 0 0 6 0 0 +1410 6 0 0 0 0 0 6 0 0 +1411 6 0 0 0 0 0 6 0 0 +1412 12 2 1 0 0 0 0 0 0 +1415 6 0 0 0 0 0 6 0 0 +1416 6 0 0 0 0 0 6 0 0 +1419 6 0 0 0 0 0 6 0 0 +1420 18 0 0 0 0 0 6 0 0 +1423 60 0 0 12 3 1 0 0 0 +1687 50 3 1 5 0 0 15 0 0 +1688 300 19 5 72 0 0 48 0 0 +1705 6 3 1 6 0 0 0 0 0 +1707 12 0 0 6 0 0 0 0 0 +1715 6 0 0 0 0 0 0 0 0 +1719 126 4 1 30 0 0 12 0 0 +1721 23 2 1 6 0 0 0 0 0 +1741 10 4 1 5 0 0 0 0 0 +1742 15 0 0 5 0 0 0 0 0 +1745 120 8 2 90 0 0 0 0 0 +fn=buffered_vfprintf +2345 70 7 2 15 7 2 30 2 1 +2353 30 2 1 5 0 0 0 0 0 +2357 10 0 0 0 0 0 5 3 2 +2363 20 4 1 0 0 0 10 3 1 +2364 5 0 0 0 0 0 5 2 0 +2366 5 0 0 0 0 0 5 3 1 +2371 5 0 0 0 0 0 5 0 0 +2373 10 0 0 5 2 1 5 4 2 +2374 10 4 1 0 0 0 5 0 0 +2377 15 0 0 0 0 0 5 3 1 +2380 50 4 1 20 6 1 5 0 0 +2381 65 3 1 35 2 1 5 0 0 +2393 30 3 1 10 0 0 0 0 0 +2395 20 3 1 10 0 0 5 0 0 +2396 15 0 0 0 0 0 0 0 0 +2401 60 4 1 25 0 0 10 0 0 +2402 40 0 0 10 0 0 5 0 0 +2405 55 0 0 40 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/../stdlib/strtol.c +fn=strtol +105 2 1 1 0 0 0 0 0 0 +106 8 0 0 4 2 0 0 0 0 +fn=strtoul +105 4 1 1 0 0 0 0 0 0 +106 16 0 0 8 2 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/../stdlib/strtol_l.c +fn=____strtol_l_internal +226 20 2 1 0 0 0 14 0 0 +245 2 0 0 0 0 0 0 0 0 +246 4 0 0 0 0 0 0 0 0 +252 4 0 0 0 0 0 0 0 0 +280 2 0 0 0 0 0 0 0 0 +283 8 0 0 0 0 0 0 0 0 +292 12 0 0 6 2 0 0 0 0 +294 4 1 1 0 0 0 0 0 0 +298 2 0 0 0 0 0 2 0 0 +299 4 0 0 0 0 0 0 0 0 +304 4 0 0 0 0 0 0 0 0 +308 4 0 0 0 0 0 0 0 0 +318 4 1 1 0 0 0 0 0 0 +325 4 1 1 0 0 0 0 0 0 +328 8 0 0 0 0 0 2 0 0 +432 8 0 0 4 0 0 0 0 0 +434 26 0 0 2 1 0 0 0 0 +436 12 1 1 0 0 0 0 0 0 +450 4 1 1 0 0 0 2 0 0 +460 8 0 0 2 0 0 0 0 0 +464 12 0 0 0 0 0 0 0 0 +467 12 0 0 0 0 0 0 0 0 +472 8 0 0 0 0 0 0 0 0 +473 12 0 0 0 0 0 0 0 0 +478 4 1 1 0 0 0 0 0 0 +483 6 0 0 2 0 0 0 0 0 +489 4 0 0 0 0 0 0 0 0 +490 4 0 0 0 0 0 0 0 0 +492 6 1 1 2 0 0 0 0 0 +507 10 0 0 2 0 0 0 0 0 +525 16 1 1 14 0 0 0 0 0 +fn=____strtoul_l_internal +226 40 2 1 0 0 0 28 0 0 +245 4 0 0 0 0 0 0 0 0 +246 4 0 0 0 0 0 0 0 0 +252 8 2 1 0 0 0 0 0 0 +280 4 0 0 0 0 0 0 0 0 +283 16 0 0 0 0 0 0 0 0 +292 24 0 0 12 1 1 0 0 0 +294 8 2 1 0 0 0 0 0 0 +298 4 0 0 0 0 0 4 0 0 +299 8 0 0 0 0 0 0 0 0 +304 8 0 0 0 0 0 0 0 0 +308 8 0 0 0 0 0 0 0 0 +310 4 2 1 0 0 0 0 0 0 +318 4 0 0 0 0 0 0 0 0 +325 8 2 1 0 0 0 0 0 0 +328 12 2 1 0 0 0 0 0 0 +373 8 0 0 4 2 1 0 0 0 +374 10 0 0 4 2 1 4 0 0 +378 2 0 0 0 0 0 0 0 0 +432 8 0 0 4 0 0 0 0 0 +434 30 2 1 4 1 0 0 0 0 +436 24 2 1 0 0 0 0 0 0 +443 8 0 0 0 0 0 0 0 0 +450 8 2 1 0 0 0 4 0 0 +460 28 0 0 8 2 1 0 0 0 +464 12 0 0 0 0 0 0 0 0 +467 12 0 0 0 0 0 0 0 0 +472 12 0 0 0 0 0 0 0 0 +473 12 0 0 0 0 0 0 0 0 +478 8 2 1 0 0 0 0 0 0 +483 12 0 0 4 0 0 0 0 0 +484 4 0 0 0 0 0 4 0 0 +496 8 0 0 0 0 0 0 0 0 +507 20 0 0 4 0 0 0 0 0 +525 32 2 1 28 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/../sysdeps/unix/sysv/linux/getrandom.c +fn=getrandom +29 1 1 1 0 0 0 0 0 0 +30 7 0 0 1 0 0 0 0 0 +31 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +fn=__cxa_atexit +47 1407 0 0 469 12 2 0 0 0 +fn=__cxa_finalize +47 157 0 0 55 1 0 0 0 0 +51 47 0 0 0 0 0 0 0 0 +fn=__run_exit_handlers +47 970 0 0 485 1 0 0 0 0 +fn=srand +47 2 0 0 1 1 1 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/cxa_atexit.c +fn=__cxa_atexit +41 1407 0 0 0 0 0 0 0 0 +43 1407 10 2 469 0 0 0 0 0 +44 938 0 0 0 0 0 469 1 0 +46 938 0 0 0 0 0 0 0 0 +53 1407 0 0 469 0 0 0 0 0 +55 469 0 0 0 0 0 469 0 0 +56 1407 11 2 938 0 0 469 34 18 +58 469 0 0 0 0 0 469 0 0 +59 1876 0 0 938 0 0 0 0 0 +69 2814 10 2 0 0 0 1876 0 0 +71 2345 0 0 1407 0 0 0 0 0 +fn=__new_exitfn +82 2345 9 2 0 0 0 938 2 0 +83 938 0 0 0 0 0 0 0 0 +88 938 11 2 469 12 2 0 0 0 +93 1880 0 0 470 12 1 0 0 0 +95 1876 11 2 469 9 1 0 0 0 +96 2340 0 0 468 9 1 0 0 0 +103 1 0 0 0 0 0 1 0 0 +106 936 0 0 0 0 0 0 0 0 +110 42 0 0 0 0 0 0 0 0 +114 56 0 0 0 0 0 14 0 0 +115 28 0 0 0 0 0 0 0 0 +117 14 0 0 0 0 0 14 0 0 +118 14 0 0 0 0 0 14 0 0 +124 15 0 0 0 0 0 0 0 0 +125 30 4 1 0 0 0 15 0 0 +131 1362 9 1 0 0 0 0 0 0 +132 908 0 0 0 0 0 454 0 0 +138 469 1 1 0 0 0 469 21 0 +139 469 0 0 469 0 0 0 0 0 +143 2345 0 0 1407 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/cxa_finalize.c +fn=__cxa_finalize +30 423 1 1 0 0 0 282 0 0 +33 141 0 0 47 0 0 0 0 0 +36 282 2 2 94 2 0 0 0 0 +40 1411 0 0 47 1 0 0 0 0 +41 1520 1 1 384 7 3 0 0 0 +43 8 0 0 8 0 0 0 0 0 +45 8 0 0 8 0 0 0 0 0 +76 8 0 0 0 0 0 8 0 0 +79 24 0 0 16 0 0 0 0 0 +82 32 1 1 16 0 0 0 0 0 +83 24 0 0 0 0 0 8 0 0 +84 24 0 0 8 0 0 0 0 0 +88 16 0 0 8 0 0 0 0 0 +94 329 1 1 94 0 0 0 0 0 +98 282 0 0 47 2 1 0 0 0 +106 94 0 0 0 0 0 0 0 0 +107 94 0 0 0 0 0 47 0 0 +109 188 0 0 94 0 0 0 0 0 +110 376 1 1 329 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/cxa_thread_atexit_impl.c +fn=__call_tls_dtors +145 4 1 1 0 0 0 2 0 0 +146 4 1 1 2 0 0 0 0 0 +164 4 1 1 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/exit.c +fn=__run_exit_handlers +40 11 1 1 0 0 0 7 0 0 +45 3 1 1 0 0 0 0 0 0 +46 2 1 1 0 0 0 1 0 0 +56 50 1 0 16 0 0 0 0 0 +59 16 0 0 16 1 0 0 0 0 +61 33 0 0 0 0 0 0 0 0 +65 1 0 0 0 0 0 1 0 0 +66 4 0 0 2 0 0 0 0 0 +70 1452 1 1 484 15 11 0 0 0 +72 938 0 0 0 0 0 469 0 0 +73 469 1 1 469 0 0 0 0 0 +76 1876 0 0 938 0 0 0 0 0 +77 3768 0 0 469 229 225 0 0 0 +103 461 1 1 0 0 0 461 0 0 +106 1383 0 0 922 0 0 0 0 0 +108 1383 0 0 461 3 3 461 0 0 +109 461 0 0 0 0 0 0 0 0 +112 1407 0 0 469 0 0 0 0 0 +114 938 0 0 469 0 0 0 0 0 +120 30 2 1 15 0 0 15 1 0 +121 30 0 0 0 0 0 0 0 0 +124 28 1 1 0 0 0 14 0 0 +126 75 1 0 30 0 0 0 0 0 +129 2 0 0 1 0 0 0 0 0 +130 13 1 1 1 1 1 1 0 0 +132 2 0 0 0 0 0 1 0 0 +fn=exit +138 4 1 1 1 0 0 1 0 0 +139 4 1 1 0 0 0 1 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/getenv.c +fn=getenv +34 376 7 2 0 0 0 282 1 0 +35 94 7 2 0 0 0 47 1 0 +39 376 7 2 141 33 16 0 0 0 +42 141 0 0 94 8 1 0 0 0 +67 47 0 0 47 0 0 0 0 0 +72 47 0 0 0 0 0 0 0 0 +73 47 0 0 0 0 0 0 0 0 +75 9390 0 0 2324 76 15 0 0 0 +84 5862 7 2 2346 228 49 195 0 0 +85 44 0 0 22 0 0 0 0 0 +86 44 0 0 0 0 0 0 0 0 +91 423 0 0 329 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/random.c +fn=srand +209 3 1 1 0 0 0 1 0 0 +210 3 1 1 1 0 0 0 0 0 +211 3 0 0 0 0 0 1 0 0 +212 4 0 0 2 0 0 0 0 0 +213 2 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/random_r.c +fn=srandom_r +162 1 1 1 0 0 0 0 0 0 +170 2 0 0 0 0 0 0 0 0 +172 1 0 0 1 1 1 0 0 0 +173 2 1 1 0 0 0 0 0 0 +176 1 0 0 1 0 0 0 0 0 +180 4 0 0 0 0 0 1 1 1 +181 2 0 0 0 0 0 0 0 0 +186 1 0 0 1 0 0 0 0 0 +187 67 1 1 0 0 0 0 0 0 +192 240 1 1 0 0 0 0 0 0 +193 60 0 0 0 0 0 0 0 0 +194 90 0 0 0 0 0 0 0 0 +196 60 0 0 0 0 0 0 0 0 +197 60 0 0 0 0 0 30 1 1 +200 3 0 0 1 0 0 1 0 0 +201 1 0 0 0 0 0 1 0 0 +203 621 0 0 0 0 0 0 0 0 +210 22 1 1 1 0 0 0 0 0 +362 930 0 0 310 0 0 0 0 0 +370 310 0 0 310 0 0 0 0 0 +371 310 1 1 310 0 0 0 0 0 +372 310 0 0 310 0 0 0 0 0 +375 620 0 0 620 0 0 0 0 0 +378 310 0 0 0 0 0 0 0 0 +379 930 0 0 0 0 0 0 0 0 +387 600 0 0 0 0 0 0 0 0 +390 1240 0 0 0 0 0 310 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/stdlib/secure-getenv.c +fn=secure_getenv +28 6 2 2 0 0 0 0 0 0 +29 30 2 1 12 5 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../bits/stdlib-bsearch.h +fn=intel_check_word.isra.0 +27 12 0 0 0 0 0 0 0 0 +28 12 0 0 0 0 0 0 0 0 +29 228 0 0 0 0 0 0 0 0 +31 162 1 1 0 0 0 0 0 0 +32 81 0 0 0 0 0 0 0 0 +37 15 1 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../string/strstr.c +fn=__GI_strstr +77 110 9 2 10 0 0 70 0 0 +82 30 9 2 10 4 2 0 0 0 +84 50 0 0 0 0 0 10 0 0 +85 20 0 0 0 0 0 0 0 0 +129 10 8 2 0 0 0 0 0 0 +161 120 0 0 90 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86/cacheinfo.c +fn=handle_intel.constprop.0 +259 30 2 2 3 0 0 21 0 0 +261 3 0 0 3 0 0 0 0 0 +264 6 0 0 3 0 0 0 0 0 +270 6 0 0 0 0 0 3 0 0 +272 6 0 0 0 0 0 3 0 0 +273 3 0 0 0 0 0 3 0 0 +275 9 0 0 0 0 0 0 0 0 +281 15 1 1 0 0 0 6 0 0 +286 6 0 0 0 0 0 0 0 0 +288 6 0 0 0 0 0 3 0 0 +289 3 0 0 0 0 0 0 0 0 +293 18 0 0 0 0 0 3 0 0 +295 6 1 1 0 0 0 0 0 0 +298 21 0 0 0 0 0 3 0 0 +300 6 0 0 0 0 0 0 0 0 +319 33 1 1 27 0 0 0 0 0 +fn=init_cacheinfo +488 8 1 1 0 0 0 6 0 0 +500 2 1 1 1 0 0 1 0 0 +502 6 0 0 4 1 0 0 0 0 +504 3 0 0 0 0 0 1 0 0 +506 3 0 0 0 0 0 2 0 0 +510 1 1 1 0 0 0 1 0 0 +511 3 0 0 0 0 0 1 0 0 +519 2 0 0 0 0 0 0 0 0 +530 1 0 0 0 0 0 0 0 0 +535 3 0 0 1 1 0 0 0 0 +539 2 0 0 1 0 0 0 0 0 +547 12 1 1 0 0 0 0 0 0 +550 13 1 1 0 0 0 0 0 0 +556 8 0 0 0 0 0 0 0 0 +559 26 0 0 0 0 0 0 0 0 +564 2 1 1 0 0 0 0 0 0 +568 3 1 1 0 0 0 0 0 0 +569 2 0 0 0 0 0 0 0 0 +573 2 0 0 0 0 0 0 0 0 +577 3 0 0 0 0 0 0 0 0 +580 3 0 0 0 0 0 0 0 0 +581 1 0 0 0 0 0 0 0 0 +586 4 0 0 0 0 0 0 0 0 +592 2 1 1 1 0 0 0 0 0 +600 9 0 0 1 0 0 0 0 0 +602 7 1 1 0 0 0 0 0 0 +604 7 0 0 0 0 0 0 0 0 +606 6 0 0 0 0 0 0 0 0 +609 2 0 0 0 0 0 0 0 0 +610 8 0 0 0 0 0 0 0 0 +612 4 1 1 0 0 0 0 0 0 +615 2 0 0 0 0 0 0 0 0 +620 1 0 0 0 0 0 0 0 0 +622 4 0 0 0 0 0 0 0 0 +623 2 0 0 0 0 0 0 0 0 +624 2 0 0 0 0 0 0 0 0 +627 2 0 0 0 0 0 0 0 0 +630 2 1 1 0 0 0 0 0 0 +633 1 0 0 0 0 0 0 0 0 +634 2 0 0 1 0 0 0 0 0 +637 1 0 0 0 0 0 0 0 0 +639 4 1 1 0 0 0 0 0 0 +640 1 0 0 0 0 0 0 0 0 +645 2 0 0 0 0 0 0 0 0 +651 2 0 0 0 0 0 0 0 0 +652 2 0 0 0 0 0 0 0 0 +653 1 1 1 0 0 0 0 0 0 +654 2 0 0 1 0 0 0 0 0 +691 4 0 0 0 0 0 0 0 0 +692 5 0 0 0 0 0 0 0 0 +696 2 1 1 0 0 0 0 0 0 +755 2 0 0 0 0 0 0 0 0 +758 2 1 1 0 0 0 0 0 0 +760 3 0 0 0 0 0 1 0 0 +761 1 0 0 0 0 0 1 1 1 +763 1 0 0 0 0 0 0 0 0 +764 3 1 1 0 0 0 1 0 0 +765 1 0 0 0 0 0 1 0 0 +768 2 0 0 0 0 0 0 0 0 +771 2 0 0 0 0 0 0 0 0 +773 3 0 0 0 0 0 1 0 0 +774 1 0 0 0 0 0 1 1 1 +776 1 0 0 0 0 0 0 0 0 +777 3 0 0 0 0 0 1 0 0 +778 1 0 0 0 0 0 1 0 0 +786 2 0 0 1 0 0 1 0 0 +788 8 0 0 1 0 0 0 0 0 +789 8 0 0 7 0 0 0 0 0 +fn=intel_check_word.isra.0 +119 162 0 0 81 6 6 0 0 0 +122 81 0 0 0 0 0 0 0 0 +128 42 1 1 0 0 0 24 0 0 +132 12 1 1 0 0 0 0 0 0 +134 3 0 0 0 0 0 0 0 0 +138 42 0 0 0 0 0 0 0 0 +140 60 0 0 0 0 0 0 0 0 +142 15 1 1 0 0 0 0 0 0 +144 30 0 0 0 0 0 0 0 0 +152 30 0 0 0 0 0 0 0 0 +161 13 1 1 0 0 0 0 0 0 +164 29 1 1 0 0 0 0 0 0 +167 24 0 0 0 0 0 0 0 0 +171 16 0 0 0 0 0 0 0 0 +173 36 0 0 0 0 0 0 0 0 +175 14 0 0 0 0 0 0 0 0 +177 10 0 0 0 0 0 0 0 0 +178 6 0 0 0 0 0 0 0 0 +179 2 1 1 0 0 0 0 0 0 +181 3 1 1 0 0 0 0 0 0 +183 6 0 0 0 0 0 0 0 0 +185 9 1 1 0 0 0 0 0 0 +186 12 0 0 0 0 0 0 0 0 +187 9 1 1 0 0 0 0 0 0 +188 15 0 0 0 0 0 0 0 0 +196 5 0 0 0 0 0 0 0 0 +203 24 0 0 0 0 0 0 0 0 +225 12 1 1 0 0 0 0 0 0 +255 36 0 0 30 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/../strchr.S +fn=index +23 217 1 1 0 0 0 0 0 0 +24 217 0 0 0 0 0 0 0 0 +25 217 0 0 0 0 0 0 0 0 +26 217 0 0 0 0 0 0 0 0 +27 217 0 0 0 0 0 0 0 0 +28 217 0 0 0 0 0 0 0 0 +29 217 0 0 0 0 0 0 0 0 +30 217 1 1 0 0 0 0 0 0 +31 217 0 0 0 0 0 0 0 0 +32 216 0 0 216 49 34 0 0 0 +33 216 0 0 0 0 0 0 0 0 +34 216 0 0 0 0 0 0 0 0 +35 216 0 0 0 0 0 0 0 0 +36 216 0 0 0 0 0 0 0 0 +37 216 0 0 0 0 0 0 0 0 +38 216 0 0 0 0 0 0 0 0 +39 216 0 0 0 0 0 0 0 0 +40 216 0 0 0 0 0 0 0 0 +41 169 0 0 0 0 0 0 0 0 +45 169 0 0 0 0 0 0 0 0 +46 169 0 0 0 0 0 0 0 0 +47 169 0 0 169 0 0 0 0 0 +48 169 0 0 0 0 0 0 0 0 +50 169 0 0 169 0 0 0 0 0 +54 47 1 1 47 2 0 0 0 0 +55 47 0 0 0 0 0 0 0 0 +56 47 0 0 0 0 0 0 0 0 +57 47 0 0 0 0 0 0 0 0 +58 47 0 0 0 0 0 0 0 0 +59 47 0 0 0 0 0 0 0 0 +60 47 0 0 47 6 3 0 0 0 +61 47 0 0 0 0 0 0 0 0 +62 47 0 0 0 0 0 0 0 0 +63 47 0 0 0 0 0 0 0 0 +64 47 0 0 0 0 0 0 0 0 +65 47 0 0 0 0 0 0 0 0 +66 47 0 0 0 0 0 0 0 0 +67 47 0 0 47 8 5 0 0 0 +68 47 0 0 0 0 0 0 0 0 +69 47 1 1 0 0 0 0 0 0 +70 47 0 0 0 0 0 0 0 0 +71 47 0 0 0 0 0 0 0 0 +72 47 0 0 0 0 0 0 0 0 +73 47 0 0 0 0 0 0 0 0 +74 47 0 0 0 0 0 0 0 0 +75 47 0 0 0 0 0 0 0 0 +76 47 0 0 0 0 0 0 0 0 +77 51 0 0 0 0 0 0 0 0 +82 2 0 0 0 0 0 0 0 0 +83 2 0 0 0 0 0 0 0 0 +86 2 0 0 0 0 0 0 0 0 +87 2 0 0 2 1 1 0 0 0 +88 2 1 1 2 0 0 0 0 0 +89 2 0 0 2 0 0 0 0 0 +90 2 0 0 0 0 0 0 0 0 +91 2 0 0 2 0 0 0 0 0 +92 2 0 0 0 0 0 0 0 0 +93 2 0 0 0 0 0 0 0 0 +94 2 0 0 2 0 0 0 0 0 +95 2 0 0 0 0 0 0 0 0 +96 2 0 0 2 0 0 0 0 0 +97 2 0 0 2 0 0 0 0 0 +98 2 0 0 0 0 0 0 0 0 +99 2 0 0 2 0 0 0 0 0 +100 2 0 0 0 0 0 0 0 0 +101 2 0 0 0 0 0 0 0 0 +102 2 1 1 0 0 0 0 0 0 +103 2 0 0 0 0 0 0 0 0 +105 2 0 0 0 0 0 0 0 0 +106 2 0 0 0 0 0 0 0 0 +108 2 0 0 2 0 0 0 0 0 +109 2 0 0 0 0 0 0 0 0 +110 2 0 0 0 0 0 0 0 0 +111 2 0 0 0 0 0 0 0 0 +112 2 0 0 0 0 0 0 0 0 +113 2 0 0 0 0 0 0 0 0 +114 2 0 0 0 0 0 0 0 0 +115 2 0 0 0 0 0 0 0 0 +117 2 0 0 0 0 0 0 0 0 +118 2 0 0 0 0 0 0 0 0 +119 2 0 0 0 0 0 0 0 0 +120 2 0 0 0 0 0 0 0 0 +121 2 0 0 0 0 0 0 0 0 +122 2 1 1 0 0 0 0 0 0 +123 2 0 0 0 0 0 0 0 0 +124 2 0 0 0 0 0 0 0 0 +125 2 0 0 0 0 0 0 0 0 +126 2 0 0 0 0 0 0 0 0 +129 48 0 0 0 0 0 0 0 0 +133 48 0 0 0 0 0 0 0 0 +134 48 0 0 0 0 0 0 0 0 +135 48 0 0 48 0 0 0 0 0 +136 48 0 0 0 0 0 0 0 0 +138 48 0 0 48 0 0 0 0 0 +142 1 0 0 0 0 0 0 0 0 +143 1 0 0 0 0 0 0 0 0 +144 1 0 0 0 0 0 0 0 0 +145 1 0 0 0 0 0 0 0 0 +146 1 1 1 1 1 1 0 0 0 +147 1 0 0 0 0 0 0 0 0 +148 1 0 0 0 0 0 0 0 0 +149 1 0 0 0 0 0 0 0 0 +150 1 0 0 0 0 0 0 0 0 +151 1 0 0 0 0 0 0 0 0 +152 1 0 0 1 0 0 0 0 0 +153 1 0 0 0 0 0 0 0 0 +154 1 0 0 0 0 0 0 0 0 +155 1 0 0 0 0 0 0 0 0 +156 1 0 0 0 0 0 0 0 0 +157 1 0 0 0 0 0 0 0 0 +158 1 0 0 1 0 0 0 0 0 +159 1 0 0 0 0 0 0 0 0 +160 1 0 0 0 0 0 0 0 0 +161 1 1 1 0 0 0 0 0 0 +162 1 0 0 0 0 0 0 0 0 +163 1 0 0 0 0 0 0 0 0 +164 1 0 0 0 0 0 0 0 0 +165 1 0 0 1 0 0 0 0 0 +166 1 0 0 0 0 0 0 0 0 +167 1 0 0 0 0 0 0 0 0 +168 1 0 0 0 0 0 0 0 0 +169 1 0 0 0 0 0 0 0 0 +170 1 0 0 0 0 0 0 0 0 +171 1 0 0 0 0 0 0 0 0 +172 1 0 0 0 0 0 0 0 0 +173 1 0 0 0 0 0 0 0 0 +174 1 0 0 0 0 0 0 0 0 +175 1 0 0 0 0 0 0 0 0 +176 1 0 0 0 0 0 0 0 0 +177 1 0 0 0 0 0 0 0 0 +178 1 0 0 0 0 0 0 0 0 +179 1 0 0 0 0 0 0 0 0 +180 1 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/../strlen.S +fn=strlen +41 238 1 1 0 0 0 0 0 0 +79 238 0 0 0 0 0 0 0 0 +80 238 0 0 0 0 0 0 0 0 +81 238 0 0 0 0 0 0 0 0 +82 238 0 0 0 0 0 0 0 0 +83 238 0 0 0 0 0 0 0 0 +84 238 0 0 0 0 0 0 0 0 +85 238 0 0 0 0 0 0 0 0 +87 238 0 0 0 0 0 0 0 0 +89 238 0 0 0 0 0 0 0 0 +120 236 0 0 236 15 10 0 0 0 +121 236 1 1 0 0 0 0 0 0 +122 236 0 0 0 0 0 0 0 0 +123 236 0 0 0 0 0 0 0 0 +124 236 0 0 0 0 0 0 0 0 +125 71 0 0 0 0 0 0 0 0 +127 71 0 0 71 0 0 0 0 0 +131 165 0 0 0 0 0 0 0 0 +132 165 0 0 165 0 0 0 0 0 +133 165 0 0 165 2 2 0 0 0 +134 165 0 0 165 10 9 0 0 0 +135 165 0 0 0 0 0 0 0 0 +136 165 0 0 0 0 0 0 0 0 +137 165 0 0 0 0 0 0 0 0 +138 165 0 0 0 0 0 0 0 0 +139 165 0 0 0 0 0 0 0 0 +140 165 0 0 0 0 0 0 0 0 +141 165 0 0 0 0 0 0 0 0 +142 165 0 0 0 0 0 0 0 0 +147 1314 1 1 162 0 0 0 0 0 +151 2 0 0 0 0 0 0 0 0 +152 28 1 1 8 0 0 0 0 0 +153 14 0 0 1 0 0 0 0 0 +168 1 0 0 0 0 0 0 0 0 +169 1 0 0 0 0 0 0 0 0 +170 2 0 0 0 0 0 0 0 0 +221 4 1 1 4 0 0 0 0 0 +222 4 0 0 4 0 0 0 0 0 +223 4 0 0 4 0 0 0 0 0 +224 4 0 0 4 0 0 0 0 0 +225 4 0 0 0 0 0 0 0 0 +226 4 0 0 0 0 0 0 0 0 +227 4 0 0 0 0 0 0 0 0 +228 4 0 0 0 0 0 0 0 0 +244 4 1 1 0 0 0 0 0 0 +246 4 0 0 0 0 0 0 0 0 +247 56 1 1 16 0 0 0 0 0 +249 4 0 0 0 0 0 0 0 0 +250 4 0 0 0 0 0 0 0 0 +251 4 0 0 0 0 0 0 0 0 +253 4 0 0 4 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-avx2.h +fn=memchr +30 60 0 0 0 0 0 0 0 0 +32 36 0 0 24 3 0 0 0 0 +fn=memrchr +30 5 1 1 0 0 0 0 0 0 +32 3 0 0 2 0 0 0 0 0 +fn=rawmemchr +30 5 0 0 0 0 0 0 0 0 +32 3 0 0 2 0 0 0 0 0 +fn=rindex +30 80 1 1 0 0 0 0 0 0 +32 48 0 0 32 9 0 0 0 0 +fn=strchrnul +30 15 0 0 0 0 0 0 0 0 +32 9 0 0 6 2 0 0 0 0 +fn=strlen +30 145 2 2 0 0 0 0 0 0 +32 87 0 0 58 23 1 0 0 0 +fn=strnlen +30 30 1 1 0 0 0 0 0 0 +32 18 0 0 12 1 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-memcmp.h +fn=bcmp +32 75 0 0 25 10 0 0 0 0 +33 75 0 0 50 15 0 0 0 0 +34 75 1 1 0 0 0 0 0 0 +35 50 0 0 25 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-memmove.h +fn=memcpy@@GLIBC_2.14 +44 52 0 0 0 0 0 0 0 0 +45 78 0 0 52 22 0 0 0 0 +48 52 0 0 0 0 0 0 0 0 +49 52 0 0 26 0 0 0 0 0 +60 52 0 0 0 0 0 0 0 0 +62 130 2 2 52 8 0 0 0 0 +fn=memmove +44 50 0 0 0 0 0 0 0 0 +45 75 2 2 50 21 0 0 0 0 +48 50 0 0 0 0 0 0 0 0 +49 50 0 0 25 0 0 0 0 0 +60 50 0 0 0 0 0 0 0 0 +62 125 0 0 50 11 0 0 0 0 +fn=mempcpy +44 2 0 0 0 0 0 0 0 0 +45 3 0 0 2 0 0 0 0 0 +48 2 1 1 0 0 0 0 0 0 +49 2 0 0 1 0 0 0 0 0 +60 2 0 0 0 0 0 0 0 0 +62 5 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-memset.h +fn=memset +42 90 2 2 36 15 0 0 0 0 +45 36 0 0 0 0 0 0 0 0 +46 36 0 0 18 0 0 0 0 0 +57 72 0 0 36 15 0 0 0 0 +59 90 2 2 18 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-sse4_2.h +fn=strcspn +30 55 1 1 22 13 0 0 0 0 +fn=strpbrk +30 30 0 0 12 4 0 0 0 0 +fn=strspn +30 45 0 0 18 6 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-strcasecmp.h +fn=strcasecmp +32 60 0 0 30 17 0 0 0 0 +fn=strcasecmp_l +32 4 0 0 2 0 0 0 0 0 +fn=strncasecmp +32 48 1 1 24 10 0 0 0 0 +fn=strncasecmp_l +32 4 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-strcpy.h +fn=stpcpy +34 18 1 1 0 0 0 0 0 0 +36 24 0 0 12 0 0 0 0 0 +fn=stpncpy +34 6 0 0 0 0 0 0 0 0 +36 8 0 0 4 0 0 0 0 0 +fn=strcat +34 18 1 1 0 0 0 0 0 0 +36 24 0 0 12 1 0 0 0 0 +fn=strcpy +34 30 0 0 0 0 0 0 0 0 +36 40 0 0 20 4 0 0 0 0 +fn=strncat +34 15 1 1 0 0 0 0 0 0 +36 20 0 0 10 2 0 0 0 0 +fn=strncpy +34 36 0 0 0 0 0 0 0 0 +36 48 1 1 24 8 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memchr-avx2.S +fn=__memchr_avx2 +40 361 11 2 0 0 0 0 0 0 +43 361 0 0 0 0 0 0 0 0 +44 361 0 0 0 0 0 0 0 0 +46 359 0 0 0 0 0 0 0 0 +48 359 0 0 0 0 0 0 0 0 +57 359 0 0 0 0 0 0 0 0 +60 359 0 0 0 0 0 0 0 0 +61 359 0 0 0 0 0 0 0 0 +62 359 0 0 0 0 0 0 0 0 +65 172 0 0 172 2 2 0 0 0 +66 172 0 0 0 0 0 0 0 0 +67 172 0 0 0 0 0 0 0 0 +70 172 0 0 0 0 0 0 0 0 +72 41 0 0 0 0 0 0 0 0 +73 41 0 0 0 0 0 0 0 0 +79 2 0 0 0 0 0 0 0 0 +80 2 0 0 0 0 0 0 0 0 +81 2 0 0 0 0 0 0 0 0 +85 2 0 0 0 0 0 0 0 0 +87 2 0 0 0 0 0 0 0 0 +88 2 0 0 0 0 0 0 0 0 +90 1 0 0 0 0 0 0 0 0 +94 187 6 2 0 0 0 0 0 0 +95 187 0 0 0 0 0 0 0 0 +96 187 0 0 187 1 1 0 0 0 +97 187 0 0 0 0 0 0 0 0 +99 187 0 0 0 0 0 0 0 0 +100 187 0 0 0 0 0 0 0 0 +101 187 0 0 0 0 0 0 0 0 +102 105 0 0 0 0 0 0 0 0 +105 105 0 0 0 0 0 0 0 0 +106 105 2 2 0 0 0 0 0 0 +108 99 0 0 0 0 0 0 0 0 +109 99 0 0 0 0 0 0 0 0 +110 99 0 0 0 0 0 0 0 0 +111 99 0 0 99 0 0 0 0 0 +119 82 3 0 0 0 0 0 0 0 +120 82 0 0 0 0 0 0 0 0 +123 82 0 0 0 0 0 0 0 0 +124 82 0 0 0 0 0 0 0 0 +127 11 0 0 0 0 0 0 0 0 +130 11 0 0 0 0 0 0 0 0 +131 11 0 0 0 0 0 0 0 0 +137 4 0 0 4 3 3 0 0 0 +138 4 0 0 0 0 0 0 0 0 +139 4 0 0 0 0 0 0 0 0 +140 4 1 1 0 0 0 0 0 0 +200 9 3 1 0 0 0 0 0 0 +201 9 0 0 0 0 0 0 0 0 +203 1 0 0 1 1 1 0 0 0 +204 1 0 0 0 0 0 0 0 0 +205 1 0 0 0 0 0 0 0 0 +206 1 0 0 0 0 0 0 0 0 +232 8 2 1 0 0 0 0 0 0 +233 8 0 0 8 1 1 0 0 0 +234 8 0 0 0 0 0 0 0 0 +235 8 0 0 0 0 0 0 0 0 +237 8 0 0 0 0 0 0 0 0 +238 8 0 0 0 0 0 0 0 0 +239 8 0 0 0 0 0 0 0 0 +251 131 6 1 0 0 0 0 0 0 +253 131 0 0 0 0 0 0 0 0 +254 131 0 0 0 0 0 0 0 0 +255 111 0 0 0 0 0 0 0 0 +256 111 0 0 0 0 0 0 0 0 +257 111 0 0 111 0 0 0 0 0 +294 144 8 1 0 0 0 0 0 0 +296 146 2 1 0 0 0 0 0 0 +297 146 0 0 146 0 0 0 0 0 +302 5 1 0 0 0 0 0 0 0 +303 5 0 0 0 0 0 0 0 0 +304 5 0 0 0 0 0 0 0 0 +305 5 0 0 5 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memchr.c +fn=memchr +29 24 2 2 12 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S +fn=__memcmp_avx2_movbe +59 2074 16 2 0 0 0 0 0 0 +66 2074 0 0 0 0 0 0 0 0 +67 2074 0 0 0 0 0 0 0 0 +70 1 0 0 1 0 0 0 0 0 +71 1 0 0 1 0 0 0 0 0 +72 1 0 0 0 0 0 0 0 0 +73 1 0 0 0 0 0 0 0 0 +74 1 0 0 0 0 0 0 0 0 +76 1 0 0 0 0 0 0 0 0 +77 1 0 0 0 0 0 0 0 0 +79 1 1 1 0 0 0 0 0 0 +81 1 0 0 0 0 0 0 0 0 +82 1 0 0 0 0 0 0 0 0 +83 1 0 0 0 0 0 0 0 0 +84 1 0 0 0 0 0 0 0 0 +87 1 0 0 1 0 0 0 0 0 +88 1 0 0 1 0 0 0 0 0 +90 1 0 0 1 0 0 0 0 0 +91 1 0 0 1 0 0 0 0 0 +93 1 0 0 1 0 0 0 0 0 +94 1 0 0 1 0 0 0 0 0 +96 1 0 0 1 0 0 0 0 0 +97 1 1 1 1 0 0 0 0 0 +99 1 0 0 0 0 0 0 0 0 +100 1 0 0 0 0 0 0 0 0 +101 1 0 0 0 0 0 0 0 0 +103 1 0 0 0 0 0 0 0 0 +104 1 0 0 0 0 0 0 0 0 +106 1 0 0 0 0 0 0 0 0 +107 1 0 0 0 0 0 0 0 0 +108 1 0 0 1 0 0 0 0 0 +109 1 0 0 1 0 0 0 0 0 +111 1 0 0 1 0 0 0 0 0 +112 1 0 0 1 0 0 0 0 0 +113 1 0 0 0 0 0 0 0 0 +115 1 0 0 1 0 0 0 0 0 +116 1 1 1 1 0 0 0 0 0 +117 1 0 0 0 0 0 0 0 0 +119 1 0 0 1 0 0 0 0 0 +120 1 0 0 1 0 0 0 0 0 +121 1 0 0 0 0 0 0 0 0 +123 1 0 0 0 0 0 0 0 0 +124 1 0 0 0 0 0 0 0 0 +125 1 0 0 0 0 0 0 0 0 +126 1 0 0 0 0 0 0 0 0 +127 1 0 0 1 0 0 0 0 0 +153 1118 5 2 0 0 0 0 0 0 +163 1118 0 0 1118 0 0 0 0 0 +164 1118 0 0 1118 0 0 0 0 0 +165 1118 0 0 0 0 0 0 0 0 +167 1118 0 0 0 0 0 0 0 0 +168 1118 0 0 1118 0 0 0 0 0 +182 596 9 2 596 1 0 0 0 0 +183 596 0 0 596 15 0 0 0 0 +184 596 0 0 0 0 0 0 0 0 +185 596 0 0 0 0 0 0 0 0 +186 596 0 0 596 0 0 0 0 0 +187 596 0 0 596 0 0 0 0 0 +188 596 0 0 0 0 0 0 0 0 +189 596 0 0 0 0 0 0 0 0 +190 596 0 0 0 0 0 0 0 0 +191 596 0 0 0 0 0 0 0 0 +192 554 0 0 0 0 0 0 0 0 +193 554 0 0 0 0 0 0 0 0 +194 554 0 0 554 0 0 0 0 0 +198 42 0 0 42 0 0 0 0 0 +203 201 5 1 201 0 0 0 0 0 +204 201 0 0 201 0 0 0 0 0 +205 201 0 0 0 0 0 0 0 0 +206 201 0 0 0 0 0 0 0 0 +207 201 0 0 0 0 0 0 0 0 +208 201 0 0 0 0 0 0 0 0 +209 201 0 0 201 0 0 0 0 0 +210 201 0 0 201 0 0 0 0 0 +212 201 0 0 0 0 0 0 0 0 +213 201 0 0 201 0 0 0 0 0 +217 25 4 1 25 0 0 0 0 0 +218 25 0 0 25 0 0 0 0 0 +219 25 0 0 0 0 0 0 0 0 +220 25 0 0 25 0 0 0 0 0 +236 2073 14 2 0 0 0 0 0 0 +237 2073 0 0 0 0 0 0 0 0 +238 2048 0 0 0 0 0 0 0 0 +239 2048 0 0 0 0 0 0 0 0 +240 2048 0 0 0 0 0 0 0 0 +241 1847 0 0 0 0 0 0 0 0 +242 1847 0 0 0 0 0 0 0 0 +244 1251 0 0 0 0 0 0 0 0 +245 1251 0 0 0 0 0 0 0 0 +247 1038 0 0 1038 1 1 0 0 0 +248 1038 0 0 1038 6 2 0 0 0 +249 1038 0 0 0 0 0 0 0 0 +250 1038 0 0 0 0 0 0 0 0 +251 1038 0 0 0 0 0 0 0 0 +252 1038 0 0 0 0 0 0 0 0 +254 108 0 0 0 0 0 0 0 0 +255 108 0 0 0 0 0 0 0 0 +256 108 5 1 108 0 0 0 0 0 +257 108 0 0 108 0 0 0 0 0 +258 108 0 0 0 0 0 0 0 0 +259 108 0 0 0 0 0 0 0 0 +260 108 0 0 0 0 0 0 0 0 +261 108 0 0 0 0 0 0 0 0 +262 70 0 0 70 0 0 0 0 0 +267 213 4 1 213 12 0 0 0 0 +268 213 0 0 213 0 0 0 0 0 +269 213 0 0 0 0 0 0 0 0 +270 213 0 0 0 0 0 0 0 0 +271 213 0 0 0 0 0 0 0 0 +274 66 0 0 0 0 0 0 0 0 +275 66 6 2 0 0 0 0 0 0 +276 66 0 0 66 0 0 0 0 0 +277 66 0 0 66 0 0 0 0 0 +278 66 0 0 0 0 0 0 0 0 +279 66 0 0 0 0 0 0 0 0 +280 66 0 0 0 0 0 0 0 0 +281 63 0 0 63 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memcmp.c +fn=bcmp +29 50 2 2 25 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memcpy.c +fn=memcpy@@GLIBC_2.14 +29 26 2 2 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S +fn=??? +221 133 0 0 0 0 0 0 0 0 +fn=__memcpy_avx_unaligned_erms +225 9154 36 2 0 0 0 0 0 0 +226 9154 0 0 0 0 0 0 0 0 +232 9163 0 0 0 0 0 0 0 0 +233 9163 0 0 0 0 0 0 0 0 +234 287 41 2 0 0 0 0 0 0 +235 287 0 0 0 0 0 0 0 0 +238 203 0 0 203 9 5 0 0 0 +239 203 0 0 203 0 0 0 0 0 +240 203 0 0 0 0 0 203 17 6 +241 203 0 0 0 0 0 203 3 1 +243 203 0 0 0 0 0 0 0 0 +244 203 0 0 203 0 0 0 0 0 +277 8876 20 2 0 0 0 0 0 0 +278 8876 0 0 0 0 0 0 0 0 +280 4385 0 0 0 0 0 0 0 0 +281 4385 0 0 0 0 0 0 0 0 +282 2004 0 0 0 0 0 0 0 0 +283 2004 0 0 0 0 0 0 0 0 +284 513 0 0 0 0 0 0 0 0 +285 513 0 0 0 0 0 0 0 0 +286 109 0 0 0 0 0 0 0 0 +287 107 0 0 107 1 1 0 0 0 +288 107 0 0 0 0 0 107 0 0 +290 109 0 0 109 0 0 0 0 0 +304 4491 0 0 4491 18 15 0 0 0 +305 4491 0 0 4491 3 3 0 0 0 +306 4491 0 0 0 0 0 4491 0 0 +307 4491 0 0 0 0 0 4491 23 1 +308 4491 0 0 4491 0 0 0 0 0 +312 2381 0 0 2381 88 9 0 0 0 +313 2381 0 0 2381 0 0 0 0 0 +314 2381 12 1 0 0 0 2381 26 25 +315 2381 0 0 0 0 0 2381 0 0 +316 2381 0 0 2381 0 0 0 0 0 +319 1491 12 1 1491 10 4 0 0 0 +320 1491 0 0 1491 0 0 0 0 0 +321 1491 0 0 0 0 0 1491 30 29 +322 1491 0 0 0 0 0 1491 0 0 +323 1491 0 0 1491 0 0 0 0 0 +326 404 1 0 404 0 0 0 0 0 +327 404 0 0 404 0 0 0 0 0 +328 404 0 0 0 0 0 404 3 0 +329 404 0 0 0 0 0 404 0 0 +330 404 0 0 404 0 0 0 0 0 +334 84 1 0 0 0 0 0 0 0 +335 84 0 0 0 0 0 0 0 0 +340 84 0 0 0 0 0 0 0 0 +341 84 0 0 0 0 0 0 0 0 +342 65 15 2 0 0 0 0 0 0 +343 65 0 0 0 0 0 0 0 0 +345 16 0 0 16 12 4 0 0 0 +346 16 0 0 16 6 2 0 0 0 +347 16 0 0 16 6 2 0 0 0 +348 16 0 0 16 6 2 0 0 0 +349 16 0 0 16 0 0 0 0 0 +350 16 0 0 16 0 0 0 0 0 +351 16 0 0 16 0 0 0 0 0 +352 16 0 0 16 0 0 0 0 0 +353 16 0 0 0 0 0 16 5 0 +354 16 0 0 0 0 0 16 7 1 +355 16 7 0 0 0 0 16 7 0 +356 16 0 0 0 0 0 16 4 1 +357 16 0 0 0 0 0 16 2 1 +358 16 0 0 0 0 0 16 0 0 +359 16 0 0 0 0 0 16 0 0 +360 16 0 0 0 0 0 16 0 0 +361 16 0 0 0 0 0 0 0 0 +362 16 0 0 16 0 0 0 0 0 +365 49 9 2 49 12 2 0 0 0 +366 49 0 0 49 1 0 0 0 0 +367 49 0 0 49 7 1 0 0 0 +368 49 0 0 49 0 0 0 0 0 +369 49 0 0 0 0 0 49 15 4 +370 49 10 2 0 0 0 49 9 2 +371 49 0 0 0 0 0 49 5 2 +372 49 0 0 0 0 0 49 0 0 +373 49 0 0 0 0 0 0 0 0 +374 49 0 0 49 0 0 0 0 0 +377 19 5 0 0 0 0 0 0 0 +378 19 0 0 0 0 0 0 0 0 +436 19 7 1 19 0 0 0 0 0 +437 19 0 0 19 5 1 0 0 0 +438 19 0 0 19 0 0 0 0 0 +439 19 0 0 19 5 1 0 0 0 +440 19 0 0 19 5 1 0 0 0 +442 19 0 0 0 0 0 0 0 0 +445 19 0 0 0 0 0 0 0 0 +446 19 0 0 0 0 0 0 0 0 +447 19 0 0 0 0 0 0 0 0 +448 19 0 0 0 0 0 0 0 0 +450 19 0 0 0 0 0 0 0 0 +452 19 0 0 0 0 0 0 0 0 +454 19 0 0 0 0 0 0 0 0 +457 19 7 1 19 5 0 0 0 0 +458 19 0 0 0 0 0 0 0 0 +462 47 0 0 47 3 0 0 0 0 +463 47 0 0 47 12 3 0 0 0 +464 47 0 0 47 3 0 0 0 0 +465 47 0 0 47 12 3 0 0 0 +466 47 0 0 0 0 0 0 0 0 +467 47 0 0 0 0 0 0 0 0 +468 47 0 0 0 0 0 47 18 11 +469 47 0 0 0 0 0 47 13 6 +470 47 0 0 0 0 0 47 18 11 +471 47 0 0 0 0 0 47 6 3 +472 47 7 1 0 0 0 0 0 0 +473 47 0 0 0 0 0 0 0 0 +474 47 0 0 0 0 0 0 0 0 +476 19 0 0 0 0 0 19 3 3 +477 19 0 0 0 0 0 19 0 0 +478 19 0 0 0 0 0 19 4 2 +479 19 0 0 0 0 0 19 0 0 +481 19 0 0 0 0 0 19 0 0 +482 19 0 0 0 0 0 0 0 0 +483 19 0 0 19 0 0 0 0 0 +fn=__memcpy_chk_avx_unaligned_erms +219 133 0 0 0 0 0 0 0 0 +220 133 0 0 0 0 0 0 0 0 +221 133 0 0 0 0 0 0 0 0 +fn=__mempcpy_avx_unaligned_erms +212 9 0 0 0 0 0 0 0 0 +213 9 0 0 0 0 0 0 0 0 +214 9 0 0 0 0 0 0 0 0 +215 9 0 0 0 0 0 0 0 0 +fn=memcpy +127 336 2 2 0 0 0 0 0 0 +128 336 0 0 0 0 0 0 0 0 +134 547 0 0 0 0 0 0 0 0 +135 547 0 0 0 0 0 0 0 0 +136 356 0 0 0 0 0 0 0 0 +137 356 0 0 0 0 0 0 0 0 +142 137 0 0 137 15 2 0 0 0 +143 137 0 0 137 1 0 0 0 0 +144 137 0 0 0 0 0 137 41 41 +145 137 0 0 0 0 0 137 10 10 +150 137 0 0 137 0 0 0 0 0 +280 191 0 0 0 0 0 0 0 0 +281 191 0 0 0 0 0 0 0 0 +282 65 0 0 0 0 0 0 0 0 +283 65 0 0 0 0 0 0 0 0 +284 54 0 0 0 0 0 0 0 0 +285 54 0 0 0 0 0 0 0 0 +286 52 0 0 0 0 0 0 0 0 +287 1 0 0 1 1 1 0 0 0 +288 1 0 0 0 0 0 1 1 1 +290 52 0 0 52 0 0 0 0 0 +312 126 0 0 126 24 3 0 0 0 +313 126 0 0 126 0 0 0 0 0 +314 126 0 0 0 0 0 126 37 32 +315 126 0 0 0 0 0 126 0 0 +316 126 0 0 126 0 0 0 0 0 +319 11 0 0 11 0 0 0 0 0 +320 11 0 0 11 0 0 0 0 0 +321 11 0 0 0 0 0 11 0 0 +322 11 0 0 0 0 0 11 0 0 +323 11 0 0 11 0 0 0 0 0 +326 2 1 1 2 1 1 0 0 0 +327 2 0 0 2 0 0 0 0 0 +328 2 0 0 0 0 0 2 1 1 +329 2 0 0 0 0 0 2 0 0 +330 2 0 0 2 0 0 0 0 0 +340 219 1 1 0 0 0 0 0 0 +341 219 0 0 0 0 0 0 0 0 +342 205 0 0 0 0 0 0 0 0 +343 205 0 0 0 0 0 0 0 0 +345 38 0 0 38 8 0 0 0 0 +346 38 0 0 38 4 0 0 0 0 +347 38 2 2 38 2 0 0 0 0 +348 38 0 0 38 2 0 0 0 0 +349 38 0 0 38 6 0 0 0 0 +350 38 0 0 38 0 0 0 0 0 +351 38 0 0 38 0 0 0 0 0 +352 38 0 0 38 0 0 0 0 0 +353 38 0 0 0 0 0 38 7 7 +354 38 0 0 0 0 0 38 6 6 +355 38 0 0 0 0 0 38 6 6 +356 38 0 0 0 0 0 38 6 6 +357 38 0 0 0 0 0 38 12 11 +358 38 0 0 0 0 0 38 0 0 +359 38 0 0 0 0 0 38 0 0 +360 38 0 0 0 0 0 38 0 0 +362 38 0 0 38 0 0 0 0 0 +365 167 1 1 167 6 0 0 0 0 +366 167 0 0 167 1 0 0 0 0 +367 167 0 0 167 0 0 0 0 0 +368 167 0 0 167 0 0 0 0 0 +369 167 0 0 0 0 0 167 39 32 +370 167 0 0 0 0 0 167 31 31 +371 167 0 0 0 0 0 167 27 27 +372 167 0 0 0 0 0 167 0 0 +374 167 0 0 167 0 0 0 0 0 +377 14 1 1 0 0 0 0 0 0 +378 14 0 0 0 0 0 0 0 0 +380 14 0 0 0 0 0 0 0 0 +383 14 0 0 14 1 1 0 0 0 +384 14 0 0 14 1 1 0 0 0 +385 14 0 0 14 1 1 0 0 0 +386 14 0 0 14 0 0 0 0 0 +387 14 2 2 14 0 0 0 0 0 +389 14 0 0 0 0 0 0 0 0 +390 14 0 0 0 0 0 0 0 0 +393 14 0 0 0 0 0 0 0 0 +394 14 0 0 0 0 0 0 0 0 +396 14 0 0 0 0 0 0 0 0 +398 14 0 0 0 0 0 0 0 0 +400 14 0 0 0 0 0 0 0 0 +402 14 0 0 0 0 0 0 0 0 +410 48 0 0 48 0 0 0 0 0 +411 48 0 0 48 0 0 0 0 0 +412 48 0 0 48 0 0 0 0 0 +413 48 0 0 48 2 2 0 0 0 +414 48 0 0 0 0 0 0 0 0 +415 48 0 0 0 0 0 0 0 0 +416 48 0 0 0 0 0 48 6 6 +417 48 0 0 0 0 0 48 0 0 +418 48 3 3 0 0 0 48 0 0 +419 48 0 0 0 0 0 48 3 3 +420 48 0 0 0 0 0 0 0 0 +421 48 0 0 0 0 0 0 0 0 +422 48 0 0 0 0 0 0 0 0 +424 14 0 0 0 0 0 14 1 1 +425 14 0 0 0 0 0 14 0 0 +426 14 0 0 0 0 0 14 0 0 +427 14 0 0 0 0 0 14 0 0 +429 14 0 0 0 0 0 14 0 0 +431 14 0 0 14 0 0 0 0 0 +fn=mempcpy +114 211 2 2 0 0 0 0 0 0 +115 211 0 0 0 0 0 0 0 0 +116 211 0 0 0 0 0 0 0 0 +117 211 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memmove.c +fn=memmove +29 25 2 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/mempcpy.c +fn=mempcpy +33 1 1 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memrchr.c +fn=memrchr +29 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S +fn=??? +163 32 0 0 0 0 0 0 0 0 +fn=__memset_avx2_unaligned_erms +167 2235 20 2 0 0 0 0 0 0 +168 6705 0 0 0 0 0 0 0 0 +173 2235 40 2 0 0 0 0 0 0 +174 2235 0 0 0 0 0 0 0 0 +175 2183 0 0 0 0 0 0 0 0 +176 2183 0 0 0 0 0 0 0 0 +178 36 0 0 0 0 0 36 0 0 +179 36 0 0 0 0 0 36 0 0 +180 36 0 0 0 0 0 0 0 0 +181 36 0 0 36 0 0 0 0 0 +184 2147 0 0 0 0 0 0 0 0 +185 2147 0 0 0 0 0 0 0 0 +188 2147 0 0 0 0 0 0 0 0 +189 2147 0 0 0 0 0 0 0 0 +190 1528 0 0 0 0 0 1528 2 1 +191 1528 0 0 0 0 0 1528 1 1 +192 1528 0 0 0 0 0 1528 7 2 +193 1528 8 1 0 0 0 1528 0 0 +195 2043 0 0 0 0 0 0 0 0 +196 2043 0 0 2043 0 0 0 0 0 +199 619 4 1 0 0 0 0 0 0 +200 619 0 0 0 0 0 619 295 295 +201 619 0 0 0 0 0 0 0 0 +202 619 0 0 0 0 0 619 299 295 +203 619 0 0 0 0 0 619 319 314 +204 619 0 0 0 0 0 619 10 7 +205 619 0 0 0 0 0 619 8 6 +206 619 0 0 0 0 0 619 8 6 +207 619 0 0 0 0 0 619 11 6 +208 619 0 0 0 0 0 619 10 7 +209 619 8 1 0 0 0 0 0 0 +210 619 0 0 0 0 0 0 0 0 +211 619 0 0 0 0 0 0 0 0 +212 619 0 0 0 0 0 0 0 0 +214 214 0 0 0 0 0 214 88 59 +215 214 0 0 0 0 0 214 0 0 +216 214 0 0 0 0 0 214 89 60 +217 214 0 0 0 0 0 214 0 0 +218 214 0 0 0 0 0 0 0 0 +219 214 0 0 0 0 0 0 0 0 +220 214 0 0 0 0 0 0 0 0 +221 104 0 0 0 0 0 0 0 0 +222 104 0 0 104 0 0 0 0 0 +233 52 21 1 0 0 0 0 0 0 +234 52 0 0 0 0 0 0 0 0 +236 36 0 0 0 0 0 0 0 0 +237 36 0 0 0 0 0 0 0 0 +238 36 0 0 0 0 0 0 0 0 +239 34 0 0 0 0 0 0 0 0 +240 34 11 1 0 0 0 0 0 0 +241 26 0 0 0 0 0 0 0 0 +242 26 0 0 0 0 0 0 0 0 +243 26 0 0 0 0 0 0 0 0 +244 16 0 0 0 0 0 16 0 0 +246 26 0 0 0 0 0 0 0 0 +247 26 0 0 26 0 0 0 0 0 +259 16 10 1 0 0 0 16 0 0 +260 16 0 0 0 0 0 16 0 0 +261 16 0 0 0 0 0 0 0 0 +262 16 0 0 16 0 0 0 0 0 +266 2 0 0 0 0 0 2 0 0 +267 2 0 0 0 0 0 2 0 0 +268 2 0 0 0 0 0 0 0 0 +269 2 0 0 2 0 0 0 0 0 +272 8 0 0 0 0 0 8 0 0 +273 8 0 0 0 0 0 8 0 0 +274 8 0 0 0 0 0 0 0 0 +275 8 0 0 8 0 0 0 0 0 +fn=__memset_chk_avx2_unaligned_erms +161 32 21 0 0 0 0 0 0 0 +162 32 0 0 0 0 0 0 0 0 +163 32 0 0 0 0 0 0 0 0 +fn=memset +108 153 3 3 0 0 0 0 0 0 +109 765 23 2 0 0 0 0 0 0 +115 153 0 0 0 0 0 0 0 0 +116 153 0 0 0 0 0 0 0 0 +117 129 0 0 0 0 0 0 0 0 +118 129 0 0 0 0 0 0 0 0 +120 29 0 0 0 0 0 29 7 7 +121 29 0 0 0 0 0 29 1 1 +123 29 0 0 29 0 0 0 0 0 +188 100 0 0 0 0 0 0 0 0 +189 100 0 0 0 0 0 0 0 0 +190 34 0 0 0 0 0 34 2 2 +191 34 0 0 0 0 0 34 0 0 +192 34 0 0 0 0 0 34 0 0 +193 34 0 0 0 0 0 34 0 0 +196 35 0 0 35 0 0 0 0 0 +199 66 3 3 0 0 0 0 0 0 +200 66 0 0 0 0 0 66 33 33 +201 66 0 0 0 0 0 0 0 0 +202 66 0 0 0 0 0 66 32 32 +203 66 0 0 0 0 0 66 8 8 +204 66 0 0 0 0 0 66 3 3 +205 66 0 0 0 0 0 66 3 3 +206 66 0 0 0 0 0 66 6 6 +207 66 0 0 0 0 0 66 9 9 +208 66 0 0 0 0 0 66 3 3 +209 66 0 0 0 0 0 0 0 0 +210 66 0 0 0 0 0 0 0 0 +211 66 0 0 0 0 0 0 0 0 +212 66 0 0 0 0 0 0 0 0 +214 682 1 1 0 0 0 682 595 595 +215 682 0 0 0 0 0 682 0 0 +216 682 0 0 0 0 0 682 0 0 +217 682 0 0 0 0 0 682 0 0 +218 682 0 0 0 0 0 0 0 0 +219 682 0 0 0 0 0 0 0 0 +220 682 0 0 0 0 0 0 0 0 +221 65 0 0 65 0 0 0 0 0 +236 24 1 1 0 0 0 0 0 0 +237 24 0 0 0 0 0 0 0 0 +238 24 0 0 0 0 0 0 0 0 +239 6 0 0 0 0 0 0 0 0 +240 6 0 0 0 0 0 0 0 0 +241 2 0 0 0 0 0 0 0 0 +242 2 0 0 0 0 0 0 0 0 +266 18 0 0 0 0 0 18 10 10 +267 18 0 0 0 0 0 18 0 0 +269 18 0 0 18 0 0 0 0 0 +272 4 2 2 0 0 0 4 0 0 +273 4 0 0 0 0 0 4 0 0 +275 4 0 0 4 0 0 0 0 0 +278 2 0 0 0 0 0 2 0 0 +279 2 0 0 0 0 0 2 0 0 +281 2 0 0 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memset.c +fn=memset +29 18 2 2 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/rawmemchr.c +fn=rawmemchr +31 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/stpcpy.c +fn=stpcpy +33 12 1 1 6 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/stpncpy.c +fn=stpncpy +31 4 1 1 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcasecmp.c +fn=strcasecmp +31 30 2 2 15 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcasecmp_l.c +fn=strcasecmp_l +31 2 2 2 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcat.c +fn=strcat +29 12 1 1 6 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strchr-avx2.S +fn=__strchr_avx2 +44 379 12 2 0 0 0 0 0 0 +45 379 0 0 0 0 0 0 0 0 +47 379 0 0 0 0 0 0 0 0 +48 379 0 0 0 0 0 0 0 0 +49 379 14 2 0 0 0 0 0 0 +51 379 0 0 0 0 0 0 0 0 +52 379 0 0 0 0 0 0 0 0 +53 379 0 0 0 0 0 0 0 0 +57 326 0 0 326 0 0 0 0 0 +58 326 0 0 0 0 0 0 0 0 +59 326 0 0 0 0 0 0 0 0 +60 326 0 0 0 0 0 0 0 0 +61 326 0 0 0 0 0 0 0 0 +62 326 0 0 0 0 0 0 0 0 +63 326 0 0 0 0 0 0 0 0 +66 4 0 0 0 0 0 0 0 0 +67 4 0 0 0 0 0 0 0 0 +68 4 0 0 0 0 0 0 0 0 +70 4 0 0 0 0 0 0 0 0 +74 53 7 2 0 0 0 0 0 0 +75 53 0 0 0 0 0 0 0 0 +76 53 0 0 53 0 0 0 0 0 +77 53 0 0 0 0 0 0 0 0 +78 53 0 0 0 0 0 0 0 0 +79 53 0 0 0 0 0 0 0 0 +80 53 0 0 0 0 0 0 0 0 +82 53 0 0 0 0 0 0 0 0 +83 53 0 0 0 0 0 0 0 0 +84 53 0 0 0 0 0 0 0 0 +86 42 0 0 0 0 0 0 0 0 +87 42 0 0 0 0 0 0 0 0 +91 42 0 0 0 0 0 0 0 0 +92 42 0 0 0 0 0 0 0 0 +93 42 0 0 42 0 0 0 0 0 +94 42 0 0 0 0 0 0 0 0 +96 42 0 0 0 0 0 0 0 0 +97 42 0 0 42 0 0 0 0 0 +101 11 2 0 0 0 0 0 0 0 +106 15 1 1 15 0 0 0 0 0 +107 15 0 0 0 0 0 0 0 0 +108 15 0 0 0 0 0 0 0 0 +109 15 0 0 0 0 0 0 0 0 +110 15 0 0 0 0 0 0 0 0 +111 15 0 0 0 0 0 0 0 0 +112 15 0 0 0 0 0 0 0 0 +184 337 7 2 0 0 0 0 0 0 +188 337 0 0 0 0 0 0 0 0 +189 337 0 0 0 0 0 0 0 0 +190 337 0 0 337 0 0 0 0 0 +191 337 0 0 0 0 0 0 0 0 +193 337 0 0 0 0 0 0 0 0 +194 337 0 0 337 0 0 0 0 0 +fn=__strchrnul_avx2 +44 13 5 2 0 0 0 0 0 0 +45 13 0 0 0 0 0 0 0 0 +47 13 0 0 0 0 0 0 0 0 +48 13 0 0 0 0 0 0 0 0 +49 13 0 0 0 0 0 0 0 0 +51 13 0 0 0 0 0 0 0 0 +52 13 0 0 0 0 0 0 0 0 +53 13 0 0 0 0 0 0 0 0 +57 12 0 0 12 3 1 0 0 0 +58 12 4 1 0 0 0 0 0 0 +59 12 0 0 0 0 0 0 0 0 +60 12 0 0 0 0 0 0 0 0 +61 12 0 0 0 0 0 0 0 0 +62 12 0 0 0 0 0 0 0 0 +63 12 0 0 0 0 0 0 0 0 +74 1 1 1 0 0 0 0 0 0 +75 1 0 0 0 0 0 0 0 0 +76 1 0 0 1 0 0 0 0 0 +77 1 0 0 0 0 0 0 0 0 +78 1 1 1 0 0 0 0 0 0 +79 1 0 0 0 0 0 0 0 0 +80 1 0 0 0 0 0 0 0 0 +82 1 0 0 0 0 0 0 0 0 +83 1 0 0 0 0 0 0 0 0 +84 1 0 0 0 0 0 0 0 0 +101 1 0 0 0 0 0 0 0 0 +106 1 0 0 1 0 0 0 0 0 +107 1 0 0 0 0 0 0 0 0 +108 1 1 1 0 0 0 0 0 0 +109 1 0 0 0 0 0 0 0 0 +110 1 0 0 0 0 0 0 0 0 +111 1 0 0 0 0 0 0 0 0 +112 1 0 0 0 0 0 0 0 0 +184 13 5 2 0 0 0 0 0 0 +186 13 0 0 0 0 0 0 0 0 +193 13 0 0 0 0 0 0 0 0 +194 13 0 0 13 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strchr.c +fn=index +38 63 0 0 0 0 0 0 0 0 +40 84 2 2 42 5 0 0 0 0 +49 42 1 1 21 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strchrnul.c +fn=strchrnul +31 6 1 1 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcmp-avx2.S +fn=__strcmp_avx2 +79 525 12 2 0 0 0 0 0 0 +92 525 0 0 0 0 0 0 0 0 +93 525 0 0 0 0 0 0 0 0 +95 525 0 0 0 0 0 0 0 0 +96 525 0 0 0 0 0 0 0 0 +97 525 0 0 0 0 0 0 0 0 +98 525 0 0 0 0 0 0 0 0 +99 525 0 0 0 0 0 0 0 0 +101 297 19 2 297 53 4 0 0 0 +102 297 0 0 297 15 7 0 0 0 +103 297 0 0 0 0 0 0 0 0 +104 297 0 0 0 0 0 0 0 0 +105 297 0 0 0 0 0 0 0 0 +106 297 0 0 0 0 0 0 0 0 +107 297 0 0 0 0 0 0 0 0 +108 294 0 0 0 0 0 0 0 0 +126 294 0 0 294 0 0 0 0 0 +127 294 0 0 294 0 0 0 0 0 +128 294 0 0 0 0 0 0 0 0 +130 294 0 0 0 0 0 0 0 0 +131 294 0 0 294 0 0 0 0 0 +135 3 0 0 0 0 0 0 0 0 +159 3 0 0 3 0 0 0 0 0 +160 3 0 0 3 0 0 0 0 0 +161 3 0 0 0 0 0 0 0 0 +164 3 1 1 0 0 0 0 0 0 +165 3 0 0 3 0 0 0 0 0 +237 3 1 1 3 0 0 0 0 0 +238 3 0 0 3 0 0 0 0 0 +239 3 0 0 0 0 0 0 0 0 +240 3 0 0 0 0 0 0 0 0 +241 3 0 0 0 0 0 0 0 0 +242 3 0 0 0 0 0 0 0 0 +243 3 0 0 0 0 0 0 0 0 +636 71 0 0 0 0 0 0 0 0 +638 71 0 0 0 0 0 0 0 0 +639 65 0 0 0 0 0 0 0 0 +640 65 0 0 0 0 0 0 0 0 +641 65 0 0 0 0 0 0 0 0 +650 65 0 0 65 0 0 0 0 0 +651 65 0 0 65 0 0 0 0 0 +654 65 0 0 0 0 0 0 0 0 +655 65 0 0 0 0 0 0 0 0 +658 13 0 0 0 0 0 0 0 0 +662 19 0 0 0 0 0 0 0 0 +663 19 0 0 19 0 0 0 0 0 +702 208 3 1 0 0 0 0 0 0 +703 208 0 0 0 0 0 0 0 0 +707 208 0 0 0 0 0 0 0 0 +718 208 0 0 208 0 0 0 0 0 +719 208 0 0 208 0 0 0 0 0 +720 208 0 0 0 0 0 0 0 0 +722 208 0 0 0 0 0 0 0 0 +723 208 0 0 208 0 0 0 0 0 +733 228 3 1 0 0 0 0 0 0 +734 228 0 0 0 0 0 0 0 0 +736 174 0 0 174 11 0 0 0 0 +737 174 0 0 174 2 1 0 0 0 +738 174 0 0 0 0 0 0 0 0 +739 174 0 0 0 0 0 0 0 0 +740 174 0 0 0 0 0 0 0 0 +741 174 0 0 0 0 0 0 0 0 +742 174 0 0 0 0 0 0 0 0 +744 1 0 0 0 0 0 0 0 0 +746 1 0 0 0 0 0 0 0 0 +753 1 0 0 0 0 0 0 0 0 +754 1 0 0 0 0 0 0 0 0 +757 55 2 1 0 0 0 0 0 0 +758 55 0 0 0 0 0 0 0 0 +759 3 0 0 3 2 0 0 0 0 +760 3 0 0 3 1 1 0 0 0 +761 3 0 0 0 0 0 0 0 0 +762 3 0 0 0 0 0 0 0 0 +763 3 0 0 0 0 0 0 0 0 +764 3 0 0 0 0 0 0 0 0 +765 3 0 0 0 0 0 0 0 0 +767 1 0 0 0 0 0 0 0 0 +769 1 0 0 0 0 0 0 0 0 +782 53 0 0 0 0 0 0 0 0 +783 53 0 0 0 0 0 0 0 0 +784 12 0 0 12 0 0 0 0 0 +785 12 0 0 12 3 0 0 0 0 +786 12 0 0 0 0 0 0 0 0 +787 12 0 0 0 0 0 0 0 0 +788 12 0 0 0 0 0 0 0 0 +789 12 0 0 0 0 0 0 0 0 +791 12 0 0 0 0 0 0 0 0 +792 12 0 0 0 0 0 0 0 0 +793 12 0 0 0 0 0 0 0 0 +806 41 2 1 0 0 0 0 0 0 +807 41 0 0 0 0 0 0 0 0 +808 21 0 0 21 0 0 0 0 0 +809 21 0 0 21 2 1 0 0 0 +810 21 0 0 0 0 0 0 0 0 +811 21 0 0 0 0 0 0 0 0 +812 21 0 0 0 0 0 0 0 0 +813 21 0 0 0 0 0 0 0 0 +815 21 0 0 0 0 0 0 0 0 +816 21 0 0 0 0 0 0 0 0 +817 21 0 0 0 0 0 0 0 0 +838 20 0 0 20 0 0 0 0 0 +839 20 0 0 20 1 1 0 0 0 +841 20 0 0 0 0 0 0 0 0 +842 20 0 0 0 0 0 0 0 0 +843 1 0 0 0 0 0 0 0 0 +844 1 0 0 0 0 0 0 0 0 +845 1 0 0 1 0 0 0 0 0 +fn=__strncmp_avx2 +79 197 6 2 0 0 0 0 0 0 +82 197 0 0 0 0 0 0 0 0 +83 197 0 0 0 0 0 0 0 0 +84 197 0 0 0 0 0 0 0 0 +90 197 0 0 0 0 0 0 0 0 +92 197 0 0 0 0 0 0 0 0 +93 197 0 0 0 0 0 0 0 0 +95 197 0 0 0 0 0 0 0 0 +96 197 6 2 0 0 0 0 0 0 +97 197 0 0 0 0 0 0 0 0 +98 197 0 0 0 0 0 0 0 0 +99 197 0 0 0 0 0 0 0 0 +101 134 0 0 134 13 4 0 0 0 +102 134 0 0 134 4 2 0 0 0 +103 134 0 0 0 0 0 0 0 0 +104 134 0 0 0 0 0 0 0 0 +105 134 0 0 0 0 0 0 0 0 +106 134 0 0 0 0 0 0 0 0 +107 134 0 0 0 0 0 0 0 0 +108 134 0 0 0 0 0 0 0 0 +112 134 0 0 0 0 0 0 0 0 +113 134 0 0 0 0 0 0 0 0 +126 118 0 0 118 0 0 0 0 0 +127 118 4 2 118 0 0 0 0 0 +128 118 0 0 0 0 0 0 0 0 +130 118 0 0 0 0 0 0 0 0 +131 118 0 0 118 0 0 0 0 0 +636 44 3 1 0 0 0 0 0 0 +638 44 0 0 0 0 0 0 0 0 +639 30 0 0 0 0 0 0 0 0 +640 30 0 0 0 0 0 0 0 0 +641 30 0 0 0 0 0 0 0 0 +643 30 0 0 0 0 0 0 0 0 +644 30 0 0 0 0 0 0 0 0 +650 26 0 0 26 0 0 0 0 0 +651 26 0 0 26 0 0 0 0 0 +654 26 0 0 0 0 0 0 0 0 +655 26 0 0 0 0 0 0 0 0 +662 14 0 0 0 0 0 0 0 0 +663 14 0 0 14 0 0 0 0 0 +680 22 4 1 0 0 0 0 0 0 +681 22 0 0 0 0 0 0 0 0 +682 22 0 0 22 0 0 0 0 0 +702 45 2 1 0 0 0 0 0 0 +703 45 0 0 0 0 0 0 0 0 +705 45 0 0 0 0 0 0 0 0 +707 45 0 0 0 0 0 0 0 0 +709 45 0 0 0 0 0 0 0 0 +710 45 0 0 0 0 0 0 0 0 +718 43 0 0 43 0 0 0 0 0 +719 43 0 0 43 0 0 0 0 0 +720 43 0 0 0 0 0 0 0 0 +722 43 0 0 0 0 0 0 0 0 +723 43 0 0 43 0 0 0 0 0 +733 63 4 2 0 0 0 0 0 0 +734 63 0 0 0 0 0 0 0 0 +736 28 0 0 28 1 0 0 0 0 +737 28 0 0 28 3 3 0 0 0 +738 28 0 0 0 0 0 0 0 0 +739 28 0 0 0 0 0 0 0 0 +740 28 0 0 0 0 0 0 0 0 +741 28 0 0 0 0 0 0 0 0 +742 28 0 0 0 0 0 0 0 0 +757 35 0 0 0 0 0 0 0 0 +758 35 0 0 0 0 0 0 0 0 +759 6 0 0 6 0 0 0 0 0 +760 6 0 0 6 0 0 0 0 0 +761 6 0 0 0 0 0 0 0 0 +762 6 0 0 0 0 0 0 0 0 +763 6 0 0 0 0 0 0 0 0 +764 6 0 0 0 0 0 0 0 0 +765 6 0 0 0 0 0 0 0 0 +782 29 3 1 0 0 0 0 0 0 +783 29 0 0 0 0 0 0 0 0 +784 7 0 0 7 0 0 0 0 0 +785 7 0 0 7 0 0 0 0 0 +786 7 0 0 0 0 0 0 0 0 +787 7 0 0 0 0 0 0 0 0 +788 7 0 0 0 0 0 0 0 0 +789 7 0 0 0 0 0 0 0 0 +791 7 0 0 0 0 0 0 0 0 +792 7 0 0 0 0 0 0 0 0 +793 7 0 0 0 0 0 0 0 0 +795 2 0 0 0 0 0 0 0 0 +796 2 0 0 0 0 0 0 0 0 +800 2 0 0 0 0 0 0 0 0 +801 2 0 0 0 0 0 0 0 0 +806 24 3 1 0 0 0 0 0 0 +807 24 0 0 0 0 0 0 0 0 +808 6 0 0 6 0 0 0 0 0 +809 6 0 0 6 0 0 0 0 0 +810 6 0 0 0 0 0 0 0 0 +811 6 0 0 0 0 0 0 0 0 +812 6 0 0 0 0 0 0 0 0 +813 6 0 0 0 0 0 0 0 0 +815 6 0 0 0 0 0 0 0 0 +816 6 0 0 0 0 0 0 0 0 +817 6 0 0 0 0 0 0 0 0 +831 18 3 1 0 0 0 0 0 0 +832 18 0 0 0 0 0 0 0 0 +838 18 0 0 18 0 0 0 0 0 +839 18 0 0 18 0 0 0 0 0 +841 18 0 0 0 0 0 0 0 0 +842 18 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcmp.c +fn=strcmp +39 66 0 0 0 0 0 0 0 0 +41 88 0 0 44 14 0 0 0 0 +53 44 4 4 22 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcpy-avx2.S +fn=__stpcpy_avx2 +50 409 3 2 0 0 0 0 0 0 +56 409 0 0 0 0 0 0 0 0 +63 409 0 0 0 0 0 0 0 0 +65 409 0 0 0 0 0 0 0 0 +66 409 0 0 0 0 0 0 0 0 +67 409 0 0 0 0 0 0 0 0 +69 181 0 0 0 0 0 0 0 0 +70 181 0 0 0 0 0 0 0 0 +72 181 0 0 181 0 0 0 0 0 +73 181 0 0 0 0 0 0 0 0 +74 181 0 0 0 0 0 0 0 0 +88 181 0 0 0 0 0 0 0 0 +89 181 2 1 0 0 0 0 0 0 +91 32 0 0 32 0 0 0 0 0 +92 32 0 0 0 0 0 0 0 0 +99 32 0 0 0 0 0 0 0 0 +100 32 0 0 0 0 0 0 0 0 +301 228 3 2 228 0 0 0 0 0 +302 228 0 0 228 2 1 0 0 0 +303 228 0 0 0 0 0 0 0 0 +304 228 0 0 0 0 0 0 0 0 +314 228 0 0 0 0 0 0 0 0 +315 228 0 0 0 0 0 0 0 0 +346 149 2 1 0 0 0 0 0 0 +348 377 1 1 0 0 0 0 0 0 +350 409 0 0 0 0 0 0 0 0 +351 409 0 0 0 0 0 0 0 0 +352 409 0 0 0 0 0 0 0 0 +353 409 0 0 0 0 0 0 0 0 +354 409 0 0 0 0 0 0 0 0 +355 409 0 0 0 0 0 0 0 0 +386 32 2 1 0 0 0 0 0 0 +387 32 0 0 0 0 0 0 0 0 +388 32 0 0 0 0 0 0 0 0 +389 32 0 0 0 0 0 0 0 0 +390 32 0 0 0 0 0 0 0 0 +610 409 3 2 409 0 0 0 0 0 +611 409 0 0 409 0 0 0 0 0 +612 409 0 0 0 0 0 409 53 25 +613 409 0 0 0 0 0 409 22 10 +615 409 0 0 0 0 0 0 0 0 +623 409 0 0 0 0 0 0 0 0 +624 409 0 0 409 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcpy.c +fn=strcpy +29 20 1 1 10 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcspn.c +fn=strcspn +29 22 1 1 11 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strlen-avx2.S +fn=__strlen_avx2 +42 2939 13 2 0 0 0 0 0 0 +55 2939 0 0 0 0 0 0 0 0 +56 2939 0 0 0 0 0 0 0 0 +57 2939 0 0 0 0 0 0 0 0 +60 2939 0 0 0 0 0 0 0 0 +61 2939 0 0 0 0 0 0 0 0 +62 2939 0 0 0 0 0 0 0 0 +65 1926 0 0 1926 227 112 0 0 0 +66 1926 0 0 0 0 0 0 0 0 +67 1926 0 0 0 0 0 0 0 0 +75 1926 5 1 0 0 0 0 0 0 +79 38 0 0 0 0 0 0 0 0 +80 38 0 0 0 0 0 0 0 0 +81 38 0 0 0 0 0 0 0 0 +90 38 0 0 0 0 0 0 0 0 +94 1013 6 1 0 0 0 0 0 0 +95 1013 0 0 0 0 0 0 0 0 +96 1013 0 0 1013 133 80 0 0 0 +97 1013 0 0 0 0 0 0 0 0 +99 1013 0 0 0 0 0 0 0 0 +100 1013 0 0 0 0 0 0 0 0 +101 1013 0 0 0 0 0 0 0 0 +102 687 0 0 0 0 0 0 0 0 +108 687 0 0 0 0 0 0 0 0 +109 687 0 0 0 0 0 0 0 0 +110 687 6 1 0 0 0 0 0 0 +114 687 0 0 0 0 0 0 0 0 +115 687 0 0 687 0 0 0 0 0 +131 326 5 1 0 0 0 0 0 0 +141 364 0 0 364 154 115 0 0 0 +142 364 0 0 0 0 0 0 0 0 +143 364 0 0 0 0 0 0 0 0 +144 364 0 0 0 0 0 0 0 0 +146 35 0 0 35 7 7 0 0 0 +147 35 0 0 0 0 0 0 0 0 +148 35 0 0 0 0 0 0 0 0 +149 35 0 0 0 0 0 0 0 0 +151 18 0 0 18 4 0 0 0 0 +152 18 0 0 0 0 0 0 0 0 +153 18 0 0 0 0 0 0 0 0 +154 18 3 2 0 0 0 0 0 0 +156 16 0 0 16 0 0 0 0 0 +157 16 0 0 0 0 0 0 0 0 +158 16 0 0 0 0 0 0 0 0 +159 16 0 0 0 0 0 0 0 0 +161 16 0 0 0 0 0 0 0 0 +169 16 0 0 0 0 0 0 0 0 +170 16 0 0 0 0 0 0 0 0 +171 32 0 0 0 0 0 0 0 0 +181 16 0 0 16 0 0 0 0 0 +182 16 0 0 16 0 0 0 0 0 +183 16 0 0 16 1 0 0 0 0 +184 16 0 0 16 0 0 0 0 0 +185 16 0 0 0 0 0 0 0 0 +186 16 0 0 0 0 0 0 0 0 +187 16 0 0 0 0 0 0 0 0 +189 16 0 0 0 0 0 0 0 0 +190 16 0 0 0 0 0 0 0 0 +191 16 0 0 0 0 0 0 0 0 +192 16 0 0 0 0 0 0 0 0 +335 2217 10 2 0 0 0 0 0 0 +336 2217 0 0 0 0 0 0 0 0 +337 2217 0 0 0 0 0 0 0 0 +341 2217 0 0 0 0 0 0 0 0 +342 2217 0 0 2217 0 0 0 0 0 +346 17 4 2 0 0 0 0 0 0 +347 17 0 0 0 0 0 0 0 0 +348 17 0 0 0 0 0 0 0 0 +349 17 0 0 0 0 0 0 0 0 +353 17 0 0 0 0 0 0 0 0 +354 17 0 0 17 0 0 0 0 0 +358 2 2 0 0 0 0 0 0 0 +359 2 0 0 0 0 0 0 0 0 +360 2 0 0 0 0 0 0 0 0 +361 2 0 0 0 0 0 0 0 0 +365 2 0 0 0 0 0 0 0 0 +366 2 0 0 2 0 0 0 0 0 +370 16 2 1 0 0 0 0 0 0 +371 16 0 0 0 0 0 0 0 0 +372 16 0 0 0 0 0 0 0 0 +373 16 0 0 0 0 0 0 0 0 +374 16 0 0 0 0 0 0 0 0 +375 16 0 0 0 0 0 0 0 0 +376 16 0 0 0 0 0 0 0 0 +377 16 0 0 0 0 0 0 0 0 +378 16 0 0 0 0 0 0 0 0 +379 16 0 0 0 0 0 0 0 0 +380 16 0 0 0 0 0 0 0 0 +381 16 0 0 0 0 0 0 0 0 +382 16 0 0 0 0 0 0 0 0 +383 16 0 0 0 0 0 0 0 0 +385 16 0 0 0 0 0 0 0 0 +386 16 0 0 0 0 0 0 0 0 +387 16 0 0 0 0 0 0 0 0 +388 16 0 0 0 0 0 0 0 0 +392 16 0 0 0 0 0 0 0 0 +393 16 0 0 16 0 0 0 0 0 +fn=__strnlen_avx2 +42 16 2 1 0 0 0 0 0 0 +45 16 0 0 0 0 0 0 0 0 +46 16 0 0 0 0 0 0 0 0 +53 16 0 0 0 0 0 0 0 0 +55 16 0 0 0 0 0 0 0 0 +56 16 0 0 0 0 0 0 0 0 +57 16 0 0 0 0 0 0 0 0 +60 16 0 0 0 0 0 0 0 0 +61 16 0 0 0 0 0 0 0 0 +62 16 0 0 0 0 0 0 0 0 +65 16 0 0 16 1 0 0 0 0 +66 16 0 0 0 0 0 0 0 0 +67 16 0 0 0 0 0 0 0 0 +70 16 0 0 0 0 0 0 0 0 +261 16 2 1 0 0 0 0 0 0 +263 16 0 0 0 0 0 0 0 0 +264 16 0 0 0 0 0 0 0 0 +265 16 0 0 0 0 0 0 0 0 +266 16 0 0 0 0 0 0 0 0 +270 16 2 1 0 0 0 0 0 0 +271 16 0 0 16 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strlen.c +fn=strlen +29 58 3 3 29 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncase.c +fn=strncasecmp +31 24 0 0 12 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncase_l.c +fn=strncasecmp_l +31 2 1 1 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncat.c +fn=strncat +29 10 0 0 5 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncmp.c +fn=strncmp +39 48 0 0 0 0 0 0 0 0 +41 64 0 0 32 9 0 0 0 0 +54 32 1 1 16 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncpy.c +fn=strncpy +29 24 2 2 12 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strnlen.c +fn=strnlen +31 12 1 1 6 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strpbrk.c +fn=strpbrk +29 12 0 0 6 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strrchr-avx2.S +fn=__strrchr_avx2 +42 1 1 1 0 0 0 0 0 0 +43 1 0 0 0 0 0 0 0 0 +44 1 0 0 0 0 0 0 0 0 +46 1 0 0 0 0 0 0 0 0 +47 1 0 0 0 0 0 0 0 0 +50 1 0 0 0 0 0 0 0 0 +51 1 0 0 0 0 0 0 0 0 +52 1 0 0 0 0 0 0 0 0 +85 1 1 1 0 0 0 0 0 0 +86 1 0 0 0 0 0 0 0 0 +87 1 0 0 1 1 1 0 0 0 +88 1 0 0 0 0 0 0 0 0 +89 1 0 0 0 0 0 0 0 0 +90 1 0 0 0 0 0 0 0 0 +91 1 0 0 0 0 0 0 0 0 +92 1 0 0 0 0 0 0 0 0 +93 1 0 0 0 0 0 0 0 0 +94 1 0 0 0 0 0 0 0 0 +97 1 0 0 0 0 0 0 0 0 +98 1 0 0 0 0 0 0 0 0 +107 1 1 1 0 0 0 0 0 0 +108 1 0 0 0 0 0 0 0 0 +111 1 0 0 0 0 0 0 0 0 +112 2 0 0 0 0 0 0 0 0 +116 1 0 0 1 1 1 0 0 0 +117 1 0 0 0 0 0 0 0 0 +118 1 0 0 0 0 0 0 0 0 +119 1 0 0 0 0 0 0 0 0 +120 1 0 0 0 0 0 0 0 0 +121 1 0 0 0 0 0 0 0 0 +122 1 0 0 0 0 0 0 0 0 +123 1 0 0 0 0 0 0 0 0 +155 1 1 1 0 0 0 0 0 0 +156 1 0 0 0 0 0 0 0 0 +158 1 0 0 0 0 0 0 0 0 +159 1 0 0 0 0 0 0 0 0 +160 1 0 0 0 0 0 0 0 0 +161 1 0 0 0 0 0 0 0 0 +167 1 0 0 0 0 0 0 0 0 +168 1 0 0 0 0 0 0 0 0 +169 1 0 0 0 0 0 0 0 0 +170 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strrchr.c +fn=rindex +28 32 0 0 16 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strspn.c +fn=strspn +29 18 1 1 9 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strstr.c +fn=strstr +44 91 2 2 39 10 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/strcmp.S +fn=strcmp +111 28954 12 3 0 0 0 0 0 0 +144 28954 0 0 0 0 0 0 0 0 +145 28954 0 0 0 0 0 0 0 0 +147 28954 0 0 0 0 0 0 0 0 +148 28954 0 0 0 0 0 0 0 0 +169 28954 15 3 0 0 0 0 0 0 +170 28954 0 0 0 0 0 0 0 0 +171 25128 0 0 0 0 0 0 0 0 +172 25128 0 0 0 0 0 0 0 0 +173 20112 0 0 20112 3450 814 0 0 0 +174 20112 0 0 20112 2303 43 0 0 0 +175 20112 0 0 20112 0 0 0 0 0 +176 20112 0 0 20112 0 0 0 0 0 +197 20112 0 0 0 0 0 0 0 0 +198 20112 0 0 0 0 0 0 0 0 +199 20112 0 0 0 0 0 0 0 0 +200 20112 0 0 0 0 0 0 0 0 +201 20112 0 0 0 0 0 0 0 0 +202 20112 0 0 0 0 0 0 0 0 +203 20112 0 0 0 0 0 0 0 0 +208 2208 0 0 0 0 0 0 0 0 +209 6624 0 0 0 0 0 0 0 0 +218 11050 9 3 0 0 0 0 0 0 +219 11050 0 0 0 0 0 0 0 0 +220 11050 0 0 0 0 0 0 0 0 +221 11050 0 0 0 0 0 0 0 0 +222 11050 0 0 0 0 0 0 0 0 +223 11050 0 0 0 0 0 0 0 0 +224 11050 0 0 0 0 0 0 0 0 +225 11050 0 0 0 0 0 0 0 0 +226 9583 0 0 0 0 0 0 0 0 +227 6418 0 0 0 0 0 0 0 0 +228 6418 0 0 0 0 0 0 0 0 +229 6418 0 0 0 0 0 0 0 0 +231 9583 0 0 0 0 0 0 0 0 +232 9583 0 0 0 0 0 0 0 0 +233 9583 9 3 0 0 0 0 0 0 +234 9583 0 0 9583 162 4 0 0 0 +235 9583 0 0 0 0 0 0 0 0 +236 9583 0 0 0 0 0 0 0 0 +246 1467 1 0 1467 72 3 0 0 0 +247 1467 0 0 0 0 0 0 0 0 +248 1467 0 0 0 0 0 0 0 0 +250 1467 0 0 1467 165 40 0 0 0 +256 1467 0 0 0 0 0 0 0 0 +257 1467 0 0 0 0 0 0 0 0 +258 1467 0 0 0 0 0 0 0 0 +259 1467 0 0 0 0 0 0 0 0 +260 1467 0 0 0 0 0 0 0 0 +265 1467 0 0 0 0 0 0 0 0 +267 1072 0 0 0 0 0 0 0 0 +268 1072 8 3 0 0 0 0 0 0 +269 2144 0 0 0 0 0 0 0 0 +277 1102 0 0 1102 29 3 0 0 0 +278 1102 0 0 1102 89 28 0 0 0 +281 1102 0 0 0 0 0 0 0 0 +282 1102 0 0 0 0 0 0 0 0 +283 1102 0 0 0 0 0 0 0 0 +284 1102 0 0 0 0 0 0 0 0 +285 1102 0 0 0 0 0 0 0 0 +286 1102 0 0 0 0 0 0 0 0 +292 113 0 0 0 0 0 0 0 0 +293 113 0 0 113 0 0 0 0 0 +294 113 0 0 113 9 4 0 0 0 +297 113 0 0 0 0 0 0 0 0 +298 113 0 0 0 0 0 0 0 0 +299 113 0 0 0 0 0 0 0 0 +300 113 0 0 0 0 0 0 0 0 +301 113 0 0 0 0 0 0 0 0 +302 113 0 0 0 0 0 0 0 0 +307 30 0 0 0 0 0 0 0 0 +308 30 0 0 0 0 0 0 0 0 +317 288 1 1 0 0 0 0 0 0 +318 288 0 0 288 58 0 0 0 0 +319 288 0 0 288 6 2 0 0 0 +320 288 0 0 0 0 0 0 0 0 +321 288 1 1 0 0 0 0 0 0 +323 288 0 0 0 0 0 0 0 0 +324 288 0 0 0 0 0 0 0 0 +325 288 0 0 0 0 0 0 0 0 +326 288 0 0 0 0 0 0 0 0 +327 288 0 0 0 0 0 0 0 0 +328 288 0 0 0 0 0 0 0 0 +329 288 0 0 0 0 0 0 0 0 +330 146 0 0 146 0 0 0 0 0 +333 146 0 0 0 0 0 0 0 0 +334 146 0 0 0 0 0 0 0 0 +335 146 0 0 0 0 0 0 0 0 +341 146 0 0 0 0 0 0 0 0 +342 146 0 0 0 0 0 0 0 0 +343 292 1 1 0 0 0 0 0 0 +347 146 0 0 0 0 0 0 0 0 +348 146 0 0 0 0 0 0 0 0 +351 146 0 0 146 8 3 0 0 0 +352 146 0 0 146 18 5 0 0 0 +353 146 0 0 0 0 0 0 0 0 +356 146 0 0 0 0 0 0 0 0 +357 146 0 0 0 0 0 0 0 0 +358 146 0 0 0 0 0 0 0 0 +364 146 0 0 0 0 0 0 0 0 +365 146 0 0 0 0 0 0 0 0 +366 146 1 1 0 0 0 0 0 0 +367 146 0 0 0 0 0 0 0 0 +368 146 0 0 0 0 0 0 0 0 +369 146 0 0 0 0 0 0 0 0 +375 7 0 0 0 0 0 0 0 0 +376 7 0 0 0 0 0 0 0 0 +378 7 0 0 0 0 0 0 0 0 +379 7 0 0 0 0 0 0 0 0 +381 7 0 0 7 1 1 0 0 0 +382 7 0 0 7 1 1 0 0 0 +383 7 0 0 0 0 0 0 0 0 +386 7 0 0 0 0 0 0 0 0 +387 7 0 0 0 0 0 0 0 0 +388 7 0 0 0 0 0 0 0 0 +394 7 0 0 0 0 0 0 0 0 +395 7 1 1 0 0 0 0 0 0 +396 7 0 0 0 0 0 0 0 0 +397 7 0 0 0 0 0 0 0 0 +398 7 0 0 0 0 0 0 0 0 +399 7 0 0 0 0 0 0 0 0 +447 408 1 1 0 0 0 0 0 0 +448 408 0 0 408 67 4 0 0 0 +449 408 0 0 408 15 6 0 0 0 +450 408 0 0 0 0 0 0 0 0 +451 408 1 1 0 0 0 0 0 0 +453 408 0 0 0 0 0 0 0 0 +454 408 0 0 0 0 0 0 0 0 +455 408 0 0 0 0 0 0 0 0 +456 408 0 0 0 0 0 0 0 0 +457 408 0 0 0 0 0 0 0 0 +458 408 0 0 0 0 0 0 0 0 +459 408 0 0 0 0 0 0 0 0 +460 207 0 0 207 0 0 0 0 0 +463 207 0 0 0 0 0 0 0 0 +464 207 0 0 0 0 0 0 0 0 +465 207 0 0 0 0 0 0 0 0 +471 207 0 0 0 0 0 0 0 0 +472 207 0 0 0 0 0 0 0 0 +473 414 1 1 0 0 0 0 0 0 +477 207 0 0 0 0 0 0 0 0 +478 207 0 0 0 0 0 0 0 0 +481 207 0 0 207 11 4 0 0 0 +482 207 0 0 207 27 5 0 0 0 +483 207 0 0 0 0 0 0 0 0 +486 207 0 0 0 0 0 0 0 0 +487 207 0 0 0 0 0 0 0 0 +488 207 0 0 0 0 0 0 0 0 +494 207 0 0 0 0 0 0 0 0 +495 207 0 0 0 0 0 0 0 0 +496 207 1 1 0 0 0 0 0 0 +497 207 0 0 0 0 0 0 0 0 +498 207 0 0 0 0 0 0 0 0 +499 207 0 0 0 0 0 0 0 0 +506 12 0 0 0 0 0 0 0 0 +507 12 0 0 0 0 0 0 0 0 +509 12 0 0 0 0 0 0 0 0 +510 12 0 0 0 0 0 0 0 0 +512 12 0 0 12 1 0 0 0 0 +513 12 0 0 12 0 0 0 0 0 +514 12 0 0 0 0 0 0 0 0 +517 12 0 0 0 0 0 0 0 0 +518 12 0 0 0 0 0 0 0 0 +519 12 0 0 0 0 0 0 0 0 +525 12 0 0 0 0 0 0 0 0 +526 12 1 1 0 0 0 0 0 0 +527 12 0 0 0 0 0 0 0 0 +528 12 0 0 0 0 0 0 0 0 +529 12 0 0 0 0 0 0 0 0 +530 12 0 0 0 0 0 0 0 0 +571 519 1 1 0 0 0 0 0 0 +572 519 0 0 519 73 6 0 0 0 +573 519 0 0 519 40 7 0 0 0 +574 519 0 0 0 0 0 0 0 0 +575 519 1 1 0 0 0 0 0 0 +577 519 0 0 0 0 0 0 0 0 +578 519 0 0 0 0 0 0 0 0 +579 519 0 0 0 0 0 0 0 0 +580 519 0 0 0 0 0 0 0 0 +581 519 0 0 0 0 0 0 0 0 +582 519 0 0 0 0 0 0 0 0 +583 519 0 0 0 0 0 0 0 0 +584 371 0 0 371 0 0 0 0 0 +588 371 0 0 0 0 0 0 0 0 +589 371 0 0 0 0 0 0 0 0 +590 371 0 0 0 0 0 0 0 0 +596 371 0 0 0 0 0 0 0 0 +597 371 0 0 0 0 0 0 0 0 +598 742 1 1 0 0 0 0 0 0 +602 379 0 0 0 0 0 0 0 0 +603 379 0 0 0 0 0 0 0 0 +606 379 0 0 379 36 13 0 0 0 +607 379 0 0 379 38 9 0 0 0 +608 379 0 0 0 0 0 0 0 0 +611 379 0 0 0 0 0 0 0 0 +612 379 0 0 0 0 0 0 0 0 +613 379 0 0 0 0 0 0 0 0 +619 379 0 0 0 0 0 0 0 0 +620 379 0 0 0 0 0 0 0 0 +621 379 1 1 0 0 0 0 0 0 +622 379 0 0 0 0 0 0 0 0 +623 379 0 0 0 0 0 0 0 0 +624 379 0 0 0 0 0 0 0 0 +631 52 0 0 0 0 0 0 0 0 +632 52 0 0 0 0 0 0 0 0 +634 52 0 0 0 0 0 0 0 0 +635 52 0 0 0 0 0 0 0 0 +637 52 0 0 52 3 2 0 0 0 +638 52 0 0 52 4 1 0 0 0 +639 52 0 0 0 0 0 0 0 0 +642 52 0 0 0 0 0 0 0 0 +643 52 0 0 0 0 0 0 0 0 +644 52 0 0 0 0 0 0 0 0 +650 52 0 0 0 0 0 0 0 0 +651 52 1 1 0 0 0 0 0 0 +652 52 0 0 0 0 0 0 0 0 +653 52 0 0 0 0 0 0 0 0 +654 52 0 0 0 0 0 0 0 0 +655 52 0 0 0 0 0 0 0 0 +662 8 0 0 0 0 0 0 0 0 +663 8 0 0 0 0 0 0 0 0 +664 8 0 0 0 0 0 0 0 0 +668 1 0 0 0 0 0 0 0 0 +669 1 0 0 0 0 0 0 0 0 +670 1 0 0 0 0 0 0 0 0 +671 1 0 0 0 0 0 0 0 0 +678 1 0 0 0 0 0 0 0 0 +679 1 0 0 0 0 0 0 0 0 +680 1 0 0 0 0 0 0 0 0 +696 341 1 1 0 0 0 0 0 0 +697 341 0 0 341 74 12 0 0 0 +698 341 0 0 341 32 11 0 0 0 +699 341 0 0 0 0 0 0 0 0 +700 341 1 1 0 0 0 0 0 0 +702 341 0 0 0 0 0 0 0 0 +703 341 0 0 0 0 0 0 0 0 +704 341 0 0 0 0 0 0 0 0 +705 341 0 0 0 0 0 0 0 0 +706 341 0 0 0 0 0 0 0 0 +707 341 0 0 0 0 0 0 0 0 +708 341 0 0 0 0 0 0 0 0 +709 150 0 0 150 0 0 0 0 0 +713 150 0 0 0 0 0 0 0 0 +714 150 0 0 0 0 0 0 0 0 +715 150 0 0 0 0 0 0 0 0 +721 150 0 0 0 0 0 0 0 0 +722 150 0 0 0 0 0 0 0 0 +723 300 1 1 0 0 0 0 0 0 +727 156 0 0 0 0 0 0 0 0 +728 156 0 0 0 0 0 0 0 0 +731 150 0 0 150 28 10 0 0 0 +732 150 0 0 150 42 14 0 0 0 +733 150 0 0 0 0 0 0 0 0 +736 150 0 0 0 0 0 0 0 0 +737 150 0 0 0 0 0 0 0 0 +738 150 0 0 0 0 0 0 0 0 +744 150 0 0 0 0 0 0 0 0 +745 150 0 0 0 0 0 0 0 0 +746 150 1 1 0 0 0 0 0 0 +747 150 0 0 0 0 0 0 0 0 +748 150 0 0 0 0 0 0 0 0 +749 150 0 0 0 0 0 0 0 0 +756 32 0 0 0 0 0 0 0 0 +757 32 0 0 0 0 0 0 0 0 +759 32 0 0 0 0 0 0 0 0 +760 32 0 0 0 0 0 0 0 0 +762 32 0 0 32 1 0 0 0 0 +763 32 0 0 32 4 3 0 0 0 +764 32 0 0 0 0 0 0 0 0 +767 32 0 0 0 0 0 0 0 0 +768 32 0 0 0 0 0 0 0 0 +769 32 0 0 0 0 0 0 0 0 +775 32 0 0 0 0 0 0 0 0 +776 32 1 1 0 0 0 0 0 0 +777 32 0 0 0 0 0 0 0 0 +778 32 0 0 0 0 0 0 0 0 +779 32 0 0 0 0 0 0 0 0 +780 32 0 0 0 0 0 0 0 0 +787 6 0 0 0 0 0 0 0 0 +788 6 0 0 0 0 0 0 0 0 +789 6 0 0 0 0 0 0 0 0 +793 6 0 0 0 0 0 0 0 0 +794 6 0 0 0 0 0 0 0 0 +795 6 0 0 0 0 0 0 0 0 +796 6 0 0 0 0 0 0 0 0 +809 6 0 0 6 0 0 0 0 0 +810 6 0 0 0 0 0 0 0 0 +811 6 0 0 0 0 0 0 0 0 +812 6 0 0 0 0 0 0 0 0 +821 478 3 3 0 0 0 0 0 0 +822 478 0 0 478 51 7 0 0 0 +823 478 0 0 478 46 14 0 0 0 +824 478 0 0 0 0 0 0 0 0 +825 478 3 3 0 0 0 0 0 0 +827 478 0 0 0 0 0 0 0 0 +828 478 0 0 0 0 0 0 0 0 +829 478 0 0 0 0 0 0 0 0 +830 478 0 0 0 0 0 0 0 0 +831 478 0 0 0 0 0 0 0 0 +832 478 0 0 0 0 0 0 0 0 +833 478 0 0 0 0 0 0 0 0 +834 219 0 0 219 0 0 0 0 0 +838 219 0 0 0 0 0 0 0 0 +839 219 0 0 0 0 0 0 0 0 +840 219 0 0 0 0 0 0 0 0 +846 219 0 0 0 0 0 0 0 0 +847 219 0 0 0 0 0 0 0 0 +848 438 3 3 0 0 0 0 0 0 +852 222 0 0 0 0 0 0 0 0 +853 222 0 0 0 0 0 0 0 0 +856 221 0 0 221 25 10 0 0 0 +857 221 0 0 221 33 10 0 0 0 +858 221 0 0 0 0 0 0 0 0 +861 221 0 0 0 0 0 0 0 0 +862 221 0 0 0 0 0 0 0 0 +863 221 0 0 0 0 0 0 0 0 +869 221 0 0 0 0 0 0 0 0 +870 221 0 0 0 0 0 0 0 0 +871 221 3 3 0 0 0 0 0 0 +872 221 0 0 0 0 0 0 0 0 +873 221 0 0 0 0 0 0 0 0 +874 221 0 0 0 0 0 0 0 0 +881 32 0 0 0 0 0 0 0 0 +882 32 0 0 0 0 0 0 0 0 +884 32 0 0 0 0 0 0 0 0 +885 32 0 0 0 0 0 0 0 0 +887 32 0 0 32 4 1 0 0 0 +888 32 0 0 32 2 0 0 0 0 +889 32 0 0 0 0 0 0 0 0 +892 32 0 0 0 0 0 0 0 0 +893 32 0 0 0 0 0 0 0 0 +894 32 0 0 0 0 0 0 0 0 +900 32 0 0 0 0 0 0 0 0 +901 32 0 0 0 0 0 0 0 0 +902 32 0 0 0 0 0 0 0 0 +903 32 0 0 0 0 0 0 0 0 +904 32 0 0 0 0 0 0 0 0 +905 32 0 0 0 0 0 0 0 0 +912 3 0 0 0 0 0 0 0 0 +913 3 0 0 0 0 0 0 0 0 +914 3 0 0 0 0 0 0 0 0 +918 2 1 1 0 0 0 0 0 0 +919 2 0 0 0 0 0 0 0 0 +920 2 0 0 0 0 0 0 0 0 +921 2 0 0 0 0 0 0 0 0 +928 1 0 0 0 0 0 0 0 0 +929 1 0 0 0 0 0 0 0 0 +930 1 0 0 0 0 0 0 0 0 +934 1 0 0 1 0 0 0 0 0 +935 1 0 0 0 0 0 0 0 0 +936 1 0 0 0 0 0 0 0 0 +937 1 0 0 0 0 0 0 0 0 +946 360 1 1 0 0 0 0 0 0 +947 360 0 0 360 79 13 0 0 0 +948 360 0 0 360 69 20 0 0 0 +949 360 0 0 0 0 0 0 0 0 +950 360 1 1 0 0 0 0 0 0 +952 360 0 0 0 0 0 0 0 0 +953 360 0 0 0 0 0 0 0 0 +954 360 0 0 0 0 0 0 0 0 +955 360 0 0 0 0 0 0 0 0 +956 360 0 0 0 0 0 0 0 0 +957 360 0 0 0 0 0 0 0 0 +958 360 0 0 0 0 0 0 0 0 +959 194 0 0 194 0 0 0 0 0 +963 194 0 0 0 0 0 0 0 0 +964 194 0 0 0 0 0 0 0 0 +965 194 0 0 0 0 0 0 0 0 +971 194 0 0 0 0 0 0 0 0 +972 194 0 0 0 0 0 0 0 0 +973 388 1 1 0 0 0 0 0 0 +977 200 0 0 0 0 0 0 0 0 +978 200 0 0 0 0 0 0 0 0 +981 199 0 0 199 46 15 0 0 0 +982 199 0 0 199 46 18 0 0 0 +983 199 0 0 0 0 0 0 0 0 +986 199 0 0 0 0 0 0 0 0 +987 199 0 0 0 0 0 0 0 0 +988 199 0 0 0 0 0 0 0 0 +994 199 0 0 0 0 0 0 0 0 +995 199 0 0 0 0 0 0 0 0 +996 199 1 1 0 0 0 0 0 0 +997 199 0 0 0 0 0 0 0 0 +998 199 0 0 0 0 0 0 0 0 +999 199 0 0 0 0 0 0 0 0 +1006 41 0 0 0 0 0 0 0 0 +1007 41 0 0 0 0 0 0 0 0 +1009 41 0 0 0 0 0 0 0 0 +1010 41 0 0 0 0 0 0 0 0 +1012 41 0 0 41 1 1 0 0 0 +1013 41 0 0 41 2 0 0 0 0 +1014 41 0 0 0 0 0 0 0 0 +1017 41 0 0 0 0 0 0 0 0 +1018 41 0 0 0 0 0 0 0 0 +1019 41 0 0 0 0 0 0 0 0 +1025 41 0 0 0 0 0 0 0 0 +1026 41 1 1 0 0 0 0 0 0 +1027 41 0 0 0 0 0 0 0 0 +1028 41 0 0 0 0 0 0 0 0 +1029 41 0 0 0 0 0 0 0 0 +1030 41 0 0 0 0 0 0 0 0 +1037 6 0 0 0 0 0 0 0 0 +1038 6 0 0 0 0 0 0 0 0 +1039 6 0 0 0 0 0 0 0 0 +1043 1 0 0 0 0 0 0 0 0 +1044 1 0 0 0 0 0 0 0 0 +1045 1 0 0 0 0 0 0 0 0 +1046 1 0 0 0 0 0 0 0 0 +1059 1 0 0 1 0 0 0 0 0 +1060 1 0 0 0 0 0 0 0 0 +1061 1 0 0 0 0 0 0 0 0 +1062 1 0 0 0 0 0 0 0 0 +1071 578 3 3 0 0 0 0 0 0 +1072 578 0 0 578 103 12 0 0 0 +1073 578 0 0 578 78 14 0 0 0 +1074 578 0 0 0 0 0 0 0 0 +1075 578 3 3 0 0 0 0 0 0 +1077 578 0 0 0 0 0 0 0 0 +1078 578 0 0 0 0 0 0 0 0 +1079 578 0 0 0 0 0 0 0 0 +1080 578 0 0 0 0 0 0 0 0 +1081 578 0 0 0 0 0 0 0 0 +1082 578 0 0 0 0 0 0 0 0 +1083 578 0 0 0 0 0 0 0 0 +1084 262 0 0 262 0 0 0 0 0 +1088 262 0 0 0 0 0 0 0 0 +1089 262 0 0 0 0 0 0 0 0 +1090 262 0 0 0 0 0 0 0 0 +1096 262 0 0 0 0 0 0 0 0 +1097 262 0 0 0 0 0 0 0 0 +1098 524 3 3 0 0 0 0 0 0 +1102 268 0 0 0 0 0 0 0 0 +1103 268 0 0 0 0 0 0 0 0 +1106 265 0 0 265 60 25 0 0 0 +1107 265 0 0 265 54 15 0 0 0 +1108 265 0 0 0 0 0 0 0 0 +1111 265 0 0 0 0 0 0 0 0 +1112 265 0 0 0 0 0 0 0 0 +1113 265 0 0 0 0 0 0 0 0 +1119 265 0 0 0 0 0 0 0 0 +1120 265 0 0 0 0 0 0 0 0 +1121 265 3 3 0 0 0 0 0 0 +1122 265 0 0 0 0 0 0 0 0 +1123 265 0 0 0 0 0 0 0 0 +1124 265 0 0 0 0 0 0 0 0 +1131 29 0 0 0 0 0 0 0 0 +1132 29 0 0 0 0 0 0 0 0 +1134 29 0 0 0 0 0 0 0 0 +1135 29 0 0 0 0 0 0 0 0 +1137 28 0 0 28 2 1 0 0 0 +1138 28 0 0 28 0 0 0 0 0 +1139 28 0 0 0 0 0 0 0 0 +1142 28 0 0 0 0 0 0 0 0 +1143 28 0 0 0 0 0 0 0 0 +1144 28 0 0 0 0 0 0 0 0 +1150 28 0 0 0 0 0 0 0 0 +1151 28 0 0 0 0 0 0 0 0 +1152 28 0 0 0 0 0 0 0 0 +1153 28 0 0 0 0 0 0 0 0 +1154 28 0 0 0 0 0 0 0 0 +1155 28 0 0 0 0 0 0 0 0 +1162 6 0 0 0 0 0 0 0 0 +1163 6 0 0 0 0 0 0 0 0 +1164 6 0 0 0 0 0 0 0 0 +1168 10 1 1 0 0 0 0 0 0 +1169 10 0 0 0 0 0 0 0 0 +1170 10 0 0 0 0 0 0 0 0 +1171 10 0 0 0 0 0 0 0 0 +1178 6 0 0 0 0 0 0 0 0 +1179 6 0 0 0 0 0 0 0 0 +1180 6 0 0 0 0 0 0 0 0 +1184 4 0 0 4 0 0 0 0 0 +1185 4 0 0 0 0 0 0 0 0 +1186 4 0 0 0 0 0 0 0 0 +1187 4 0 0 0 0 0 0 0 0 +1196 457 3 3 0 0 0 0 0 0 +1197 457 0 0 457 92 21 0 0 0 +1198 457 0 0 457 104 24 0 0 0 +1199 457 0 0 0 0 0 0 0 0 +1200 457 3 3 0 0 0 0 0 0 +1202 457 0 0 0 0 0 0 0 0 +1203 457 0 0 0 0 0 0 0 0 +1204 457 0 0 0 0 0 0 0 0 +1205 457 0 0 0 0 0 0 0 0 +1206 457 0 0 0 0 0 0 0 0 +1207 457 0 0 0 0 0 0 0 0 +1208 457 0 0 0 0 0 0 0 0 +1209 333 0 0 333 0 0 0 0 0 +1213 333 0 0 0 0 0 0 0 0 +1214 333 0 0 0 0 0 0 0 0 +1215 333 0 0 0 0 0 0 0 0 +1221 333 0 0 0 0 0 0 0 0 +1222 333 0 0 0 0 0 0 0 0 +1223 666 3 3 0 0 0 0 0 0 +1227 344 0 0 0 0 0 0 0 0 +1228 344 0 0 0 0 0 0 0 0 +1231 343 0 0 343 69 22 0 0 0 +1232 343 0 0 343 74 27 0 0 0 +1233 343 0 0 0 0 0 0 0 0 +1236 343 0 0 0 0 0 0 0 0 +1237 343 0 0 0 0 0 0 0 0 +1238 343 0 0 0 0 0 0 0 0 +1244 343 0 0 0 0 0 0 0 0 +1245 343 0 0 0 0 0 0 0 0 +1246 343 3 3 0 0 0 0 0 0 +1247 343 0 0 0 0 0 0 0 0 +1248 343 0 0 0 0 0 0 0 0 +1249 343 0 0 0 0 0 0 0 0 +1256 68 0 0 0 0 0 0 0 0 +1257 68 0 0 0 0 0 0 0 0 +1259 68 0 0 0 0 0 0 0 0 +1260 68 0 0 0 0 0 0 0 0 +1262 68 0 0 68 4 2 0 0 0 +1263 68 0 0 68 10 5 0 0 0 +1264 68 0 0 0 0 0 0 0 0 +1267 68 0 0 0 0 0 0 0 0 +1268 68 0 0 0 0 0 0 0 0 +1269 68 0 0 0 0 0 0 0 0 +1275 68 0 0 0 0 0 0 0 0 +1276 68 0 0 0 0 0 0 0 0 +1277 68 0 0 0 0 0 0 0 0 +1278 68 0 0 0 0 0 0 0 0 +1279 68 0 0 0 0 0 0 0 0 +1280 68 0 0 0 0 0 0 0 0 +1287 11 0 0 0 0 0 0 0 0 +1288 11 0 0 0 0 0 0 0 0 +1289 11 0 0 0 0 0 0 0 0 +1293 5 1 1 0 0 0 0 0 0 +1294 5 0 0 0 0 0 0 0 0 +1295 5 0 0 0 0 0 0 0 0 +1296 5 0 0 0 0 0 0 0 0 +1303 4 0 0 0 0 0 0 0 0 +1304 4 0 0 0 0 0 0 0 0 +1305 4 0 0 0 0 0 0 0 0 +1309 1 0 0 1 0 0 0 0 0 +1310 1 0 0 0 0 0 0 0 0 +1311 1 0 0 0 0 0 0 0 0 +1312 1 0 0 0 0 0 0 0 0 +1321 550 1 1 0 0 0 0 0 0 +1322 550 0 0 550 112 20 0 0 0 +1323 550 0 0 550 86 22 0 0 0 +1324 550 0 0 0 0 0 0 0 0 +1325 550 1 1 0 0 0 0 0 0 +1327 550 0 0 0 0 0 0 0 0 +1328 550 0 0 0 0 0 0 0 0 +1329 550 0 0 0 0 0 0 0 0 +1330 550 0 0 0 0 0 0 0 0 +1331 550 0 0 0 0 0 0 0 0 +1332 550 0 0 0 0 0 0 0 0 +1333 550 0 0 0 0 0 0 0 0 +1334 313 0 0 313 0 0 0 0 0 +1338 313 0 0 0 0 0 0 0 0 +1339 313 0 0 0 0 0 0 0 0 +1340 313 0 0 0 0 0 0 0 0 +1346 313 0 0 0 0 0 0 0 0 +1347 313 0 0 0 0 0 0 0 0 +1348 626 1 1 0 0 0 0 0 0 +1352 322 0 0 0 0 0 0 0 0 +1353 322 0 0 0 0 0 0 0 0 +1356 321 0 0 321 54 21 0 0 0 +1357 321 0 0 321 69 23 0 0 0 +1358 321 0 0 0 0 0 0 0 0 +1361 321 0 0 0 0 0 0 0 0 +1362 321 0 0 0 0 0 0 0 0 +1363 321 0 0 0 0 0 0 0 0 +1369 321 0 0 0 0 0 0 0 0 +1370 321 0 0 0 0 0 0 0 0 +1371 321 1 1 0 0 0 0 0 0 +1372 321 0 0 0 0 0 0 0 0 +1373 321 0 0 0 0 0 0 0 0 +1374 321 0 0 0 0 0 0 0 0 +1381 56 0 0 0 0 0 0 0 0 +1382 56 0 0 0 0 0 0 0 0 +1384 56 0 0 0 0 0 0 0 0 +1385 56 0 0 0 0 0 0 0 0 +1387 56 0 0 56 4 3 0 0 0 +1388 56 0 0 56 2 0 0 0 0 +1389 56 0 0 0 0 0 0 0 0 +1392 56 0 0 0 0 0 0 0 0 +1393 56 0 0 0 0 0 0 0 0 +1394 56 0 0 0 0 0 0 0 0 +1400 56 0 0 0 0 0 0 0 0 +1401 56 1 1 0 0 0 0 0 0 +1402 56 0 0 0 0 0 0 0 0 +1403 56 0 0 0 0 0 0 0 0 +1404 56 0 0 0 0 0 0 0 0 +1405 56 0 0 0 0 0 0 0 0 +1412 9 0 0 0 0 0 0 0 0 +1413 9 0 0 0 0 0 0 0 0 +1414 9 0 0 0 0 0 0 0 0 +1418 3 0 0 0 0 0 0 0 0 +1419 3 0 0 0 0 0 0 0 0 +1420 3 0 0 0 0 0 0 0 0 +1421 3 0 0 0 0 0 0 0 0 +1428 2 0 0 0 0 0 0 0 0 +1429 2 0 0 0 0 0 0 0 0 +1430 2 0 0 0 0 0 0 0 0 +1434 1 0 0 1 0 0 0 0 0 +1435 1 0 0 0 0 0 0 0 0 +1436 1 0 0 0 0 0 0 0 0 +1437 1 0 0 0 0 0 0 0 0 +1446 701 11 3 0 0 0 0 0 0 +1447 701 0 0 701 149 27 0 0 0 +1448 701 0 0 701 119 22 0 0 0 +1449 701 0 0 0 0 0 0 0 0 +1450 701 10 3 0 0 0 0 0 0 +1452 701 0 0 0 0 0 0 0 0 +1453 701 0 0 0 0 0 0 0 0 +1454 701 0 0 0 0 0 0 0 0 +1455 701 0 0 0 0 0 0 0 0 +1456 701 0 0 0 0 0 0 0 0 +1457 701 0 0 0 0 0 0 0 0 +1458 701 0 0 0 0 0 0 0 0 +1459 366 0 0 366 0 0 0 0 0 +1463 366 0 0 0 0 0 0 0 0 +1464 366 0 0 0 0 0 0 0 0 +1465 366 0 0 0 0 0 0 0 0 +1471 366 0 0 0 0 0 0 0 0 +1472 366 0 0 0 0 0 0 0 0 +1473 732 10 3 0 0 0 0 0 0 +1477 381 0 0 0 0 0 0 0 0 +1478 381 0 0 0 0 0 0 0 0 +1481 380 0 0 380 60 21 0 0 0 +1482 380 0 0 380 99 34 0 0 0 +1483 380 0 0 0 0 0 0 0 0 +1486 380 0 0 0 0 0 0 0 0 +1487 380 0 0 0 0 0 0 0 0 +1488 380 0 0 0 0 0 0 0 0 +1494 380 0 0 0 0 0 0 0 0 +1495 380 0 0 0 0 0 0 0 0 +1496 380 10 3 0 0 0 0 0 0 +1497 380 0 0 0 0 0 0 0 0 +1498 380 0 0 0 0 0 0 0 0 +1499 380 0 0 0 0 0 0 0 0 +1506 57 0 0 0 0 0 0 0 0 +1507 57 0 0 0 0 0 0 0 0 +1509 57 0 0 0 0 0 0 0 0 +1510 57 0 0 0 0 0 0 0 0 +1512 57 0 0 57 4 1 0 0 0 +1513 57 0 0 57 9 3 0 0 0 +1514 57 0 0 0 0 0 0 0 0 +1517 57 0 0 0 0 0 0 0 0 +1518 57 0 0 0 0 0 0 0 0 +1519 57 0 0 0 0 0 0 0 0 +1525 57 0 0 0 0 0 0 0 0 +1526 57 1 1 0 0 0 0 0 0 +1527 57 0 0 0 0 0 0 0 0 +1528 57 0 0 0 0 0 0 0 0 +1529 57 0 0 0 0 0 0 0 0 +1530 57 0 0 0 0 0 0 0 0 +1537 15 0 0 0 0 0 0 0 0 +1538 15 0 0 0 0 0 0 0 0 +1539 15 0 0 0 0 0 0 0 0 +1543 4 0 0 0 0 0 0 0 0 +1544 4 0 0 0 0 0 0 0 0 +1545 4 0 0 0 0 0 0 0 0 +1546 4 0 0 0 0 0 0 0 0 +1553 3 0 0 0 0 0 0 0 0 +1554 3 0 0 0 0 0 0 0 0 +1555 3 0 0 0 0 0 0 0 0 +1559 1 0 0 1 1 0 0 0 0 +1560 1 0 0 0 0 0 0 0 0 +1561 1 0 0 0 0 0 0 0 0 +1562 1 0 0 0 0 0 0 0 0 +1571 724 1 1 0 0 0 0 0 0 +1572 724 0 0 724 190 31 0 0 0 +1573 724 0 0 724 102 20 0 0 0 +1574 724 0 0 0 0 0 0 0 0 +1575 724 1 1 0 0 0 0 0 0 +1577 724 0 0 0 0 0 0 0 0 +1578 724 0 0 0 0 0 0 0 0 +1579 724 0 0 0 0 0 0 0 0 +1580 724 0 0 0 0 0 0 0 0 +1581 724 0 0 0 0 0 0 0 0 +1582 724 0 0 0 0 0 0 0 0 +1583 724 0 0 0 0 0 0 0 0 +1584 299 0 0 299 0 0 0 0 0 +1588 299 0 0 0 0 0 0 0 0 +1589 299 0 0 0 0 0 0 0 0 +1590 299 0 0 0 0 0 0 0 0 +1596 299 0 0 0 0 0 0 0 0 +1597 299 0 0 0 0 0 0 0 0 +1598 598 1 1 0 0 0 0 0 0 +1602 307 0 0 0 0 0 0 0 0 +1603 307 0 0 0 0 0 0 0 0 +1606 307 0 0 307 49 18 0 0 0 +1607 307 0 0 307 67 21 0 0 0 +1608 307 0 0 0 0 0 0 0 0 +1611 307 0 0 0 0 0 0 0 0 +1612 307 0 0 0 0 0 0 0 0 +1613 307 0 0 0 0 0 0 0 0 +1619 307 0 0 0 0 0 0 0 0 +1620 307 0 0 0 0 0 0 0 0 +1621 307 1 1 0 0 0 0 0 0 +1622 307 0 0 0 0 0 0 0 0 +1623 307 0 0 0 0 0 0 0 0 +1624 307 0 0 0 0 0 0 0 0 +1631 40 0 0 0 0 0 0 0 0 +1632 40 0 0 0 0 0 0 0 0 +1634 40 0 0 0 0 0 0 0 0 +1635 40 0 0 0 0 0 0 0 0 +1637 40 0 0 40 7 3 0 0 0 +1638 40 0 0 40 3 1 0 0 0 +1639 40 0 0 0 0 0 0 0 0 +1642 40 0 0 0 0 0 0 0 0 +1643 40 0 0 0 0 0 0 0 0 +1644 40 0 0 0 0 0 0 0 0 +1650 40 0 0 0 0 0 0 0 0 +1651 40 1 1 0 0 0 0 0 0 +1652 40 0 0 0 0 0 0 0 0 +1653 40 0 0 0 0 0 0 0 0 +1654 40 0 0 0 0 0 0 0 0 +1655 40 0 0 0 0 0 0 0 0 +1662 8 0 0 0 0 0 0 0 0 +1663 8 0 0 0 0 0 0 0 0 +1664 8 0 0 0 0 0 0 0 0 +1668 2 0 0 0 0 0 0 0 0 +1669 2 0 0 0 0 0 0 0 0 +1670 2 0 0 0 0 0 0 0 0 +1671 2 0 0 0 0 0 0 0 0 +1678 2 0 0 0 0 0 0 0 0 +1679 2 0 0 0 0 0 0 0 0 +1680 2 0 0 0 0 0 0 0 0 +1696 901 2 2 0 0 0 0 0 0 +1697 901 0 0 901 204 27 0 0 0 +1698 901 0 0 901 138 22 0 0 0 +1699 901 0 0 0 0 0 0 0 0 +1700 901 2 2 0 0 0 0 0 0 +1702 901 0 0 0 0 0 0 0 0 +1703 901 0 0 0 0 0 0 0 0 +1704 901 0 0 0 0 0 0 0 0 +1705 901 0 0 0 0 0 0 0 0 +1706 901 0 0 0 0 0 0 0 0 +1707 901 0 0 0 0 0 0 0 0 +1708 901 0 0 0 0 0 0 0 0 +1709 369 0 0 369 0 0 0 0 0 +1713 369 0 0 0 0 0 0 0 0 +1714 369 0 0 0 0 0 0 0 0 +1715 369 0 0 0 0 0 0 0 0 +1721 369 0 0 0 0 0 0 0 0 +1722 369 0 0 0 0 0 0 0 0 +1723 738 2 2 0 0 0 0 0 0 +1727 376 0 0 0 0 0 0 0 0 +1728 376 0 0 0 0 0 0 0 0 +1731 375 0 0 375 70 21 0 0 0 +1732 375 0 0 375 87 23 0 0 0 +1733 375 0 0 0 0 0 0 0 0 +1736 375 0 0 0 0 0 0 0 0 +1737 375 0 0 0 0 0 0 0 0 +1738 375 0 0 0 0 0 0 0 0 +1744 375 0 0 0 0 0 0 0 0 +1745 375 0 0 0 0 0 0 0 0 +1746 375 22 2 0 0 0 0 0 0 +1747 375 0 0 0 0 0 0 0 0 +1748 375 0 0 0 0 0 0 0 0 +1749 375 0 0 0 0 0 0 0 0 +1756 51 0 0 0 0 0 0 0 0 +1757 51 0 0 0 0 0 0 0 0 +1759 51 0 0 0 0 0 0 0 0 +1760 51 0 0 0 0 0 0 0 0 +1762 51 0 0 51 3 1 0 0 0 +1763 51 0 0 51 7 4 0 0 0 +1764 51 0 0 0 0 0 0 0 0 +1767 51 0 0 0 0 0 0 0 0 +1768 51 0 0 0 0 0 0 0 0 +1769 51 0 0 0 0 0 0 0 0 +1775 51 0 0 0 0 0 0 0 0 +1776 51 1 1 0 0 0 0 0 0 +1777 51 0 0 0 0 0 0 0 0 +1778 51 0 0 0 0 0 0 0 0 +1779 51 0 0 0 0 0 0 0 0 +1780 51 0 0 0 0 0 0 0 0 +1787 7 0 0 0 0 0 0 0 0 +1788 7 0 0 0 0 0 0 0 0 +1789 7 0 0 0 0 0 0 0 0 +1793 1 0 0 0 0 0 0 0 0 +1794 1 0 0 0 0 0 0 0 0 +1795 1 0 0 0 0 0 0 0 0 +1796 1 0 0 0 0 0 0 0 0 +1809 1 0 0 1 0 0 0 0 0 +1810 1 0 0 0 0 0 0 0 0 +1811 1 0 0 0 0 0 0 0 0 +1812 1 0 0 0 0 0 0 0 0 +1821 939 5 3 0 0 0 0 0 0 +1822 939 0 0 939 188 37 0 0 0 +1823 939 0 0 939 146 29 0 0 0 +1824 939 0 0 0 0 0 0 0 0 +1825 939 4 3 0 0 0 0 0 0 +1827 939 0 0 0 0 0 0 0 0 +1828 939 0 0 0 0 0 0 0 0 +1829 939 0 0 0 0 0 0 0 0 +1830 939 0 0 0 0 0 0 0 0 +1831 939 0 0 0 0 0 0 0 0 +1832 939 0 0 0 0 0 0 0 0 +1833 939 0 0 0 0 0 0 0 0 +1834 635 0 0 635 0 0 0 0 0 +1838 635 0 0 0 0 0 0 0 0 +1839 635 0 0 0 0 0 0 0 0 +1840 635 0 0 0 0 0 0 0 0 +1846 635 0 0 0 0 0 0 0 0 +1847 635 0 0 0 0 0 0 0 0 +1848 1270 4 3 0 0 0 0 0 0 +1852 652 0 0 0 0 0 0 0 0 +1853 652 0 0 0 0 0 0 0 0 +1856 652 0 0 652 88 28 0 0 0 +1857 652 0 0 652 121 29 0 0 0 +1858 652 0 0 0 0 0 0 0 0 +1861 652 0 0 0 0 0 0 0 0 +1862 652 0 0 0 0 0 0 0 0 +1863 652 0 0 0 0 0 0 0 0 +1869 652 0 0 0 0 0 0 0 0 +1870 652 0 0 0 0 0 0 0 0 +1871 652 4 3 0 0 0 0 0 0 +1872 652 0 0 0 0 0 0 0 0 +1873 652 0 0 0 0 0 0 0 0 +1874 652 0 0 0 0 0 0 0 0 +1881 51 0 0 0 0 0 0 0 0 +1882 51 0 0 0 0 0 0 0 0 +1884 51 0 0 0 0 0 0 0 0 +1885 51 0 0 0 0 0 0 0 0 +1887 51 0 0 51 7 2 0 0 0 +1888 51 0 0 51 4 3 0 0 0 +1889 51 0 0 0 0 0 0 0 0 +1892 51 0 0 0 0 0 0 0 0 +1893 51 0 0 0 0 0 0 0 0 +1894 51 0 0 0 0 0 0 0 0 +1900 51 0 0 0 0 0 0 0 0 +1901 51 0 0 0 0 0 0 0 0 +1902 51 0 0 0 0 0 0 0 0 +1903 51 0 0 0 0 0 0 0 0 +1904 51 0 0 0 0 0 0 0 0 +1905 51 0 0 0 0 0 0 0 0 +1912 17 0 0 0 0 0 0 0 0 +1913 17 0 0 0 0 0 0 0 0 +1914 17 0 0 0 0 0 0 0 0 +1918 4 1 1 0 0 0 0 0 0 +1919 4 0 0 0 0 0 0 0 0 +1920 4 0 0 0 0 0 0 0 0 +1921 4 0 0 0 0 0 0 0 0 +1928 4 0 0 0 0 0 0 0 0 +1929 4 0 0 0 0 0 0 0 0 +1930 4 0 0 0 0 0 0 0 0 +1946 1284 4 3 0 0 0 0 0 0 +1947 1284 0 0 1284 222 42 0 0 0 +1948 1284 0 0 1284 127 27 0 0 0 +1949 1284 0 0 0 0 0 0 0 0 +1950 1284 4 3 0 0 0 0 0 0 +1952 1284 0 0 0 0 0 0 0 0 +1953 1284 0 0 0 0 0 0 0 0 +1954 1284 0 0 0 0 0 0 0 0 +1955 1284 0 0 0 0 0 0 0 0 +1956 1284 0 0 0 0 0 0 0 0 +1957 1284 0 0 0 0 0 0 0 0 +1958 1284 0 0 0 0 0 0 0 0 +1959 344 0 0 344 0 0 0 0 0 +1963 344 0 0 0 0 0 0 0 0 +1964 344 0 0 0 0 0 0 0 0 +1965 344 0 0 0 0 0 0 0 0 +1971 344 0 0 0 0 0 0 0 0 +1972 344 0 0 0 0 0 0 0 0 +1973 688 1 1 0 0 0 0 0 0 +1977 357 0 0 0 0 0 0 0 0 +1978 357 0 0 0 0 0 0 0 0 +1981 357 0 0 357 49 16 0 0 0 +1982 357 0 0 357 92 34 0 0 0 +1983 357 0 0 0 0 0 0 0 0 +1986 357 0 0 0 0 0 0 0 0 +1987 357 0 0 0 0 0 0 0 0 +1988 357 0 0 0 0 0 0 0 0 +1994 357 0 0 0 0 0 0 0 0 +1995 357 0 0 0 0 0 0 0 0 +1996 357 1 1 0 0 0 0 0 0 +1997 357 0 0 0 0 0 0 0 0 +1998 357 0 0 0 0 0 0 0 0 +1999 357 0 0 0 0 0 0 0 0 +2006 62 0 0 0 0 0 0 0 0 +2007 62 0 0 0 0 0 0 0 0 +2009 62 0 0 0 0 0 0 0 0 +2010 62 0 0 0 0 0 0 0 0 +2012 62 0 0 62 4 2 0 0 0 +2013 62 0 0 62 8 6 0 0 0 +2014 62 0 0 0 0 0 0 0 0 +2017 62 0 0 0 0 0 0 0 0 +2018 62 0 0 0 0 0 0 0 0 +2019 62 0 0 0 0 0 0 0 0 +2025 62 0 0 0 0 0 0 0 0 +2026 62 0 0 0 0 0 0 0 0 +2027 62 0 0 0 0 0 0 0 0 +2028 62 0 0 0 0 0 0 0 0 +2029 62 0 0 0 0 0 0 0 0 +2030 62 0 0 0 0 0 0 0 0 +2037 13 0 0 0 0 0 0 0 0 +2038 13 0 0 0 0 0 0 0 0 +2039 13 0 0 0 0 0 0 0 0 +2043 3 1 1 0 0 0 0 0 0 +2044 3 0 0 0 0 0 0 0 0 +2045 3 0 0 0 0 0 0 0 0 +2046 3 0 0 0 0 0 0 0 0 +2053 3 0 0 0 0 0 0 0 0 +2054 3 0 0 0 0 0 0 0 0 +2055 3 0 0 0 0 0 0 0 0 +2071 1055 5 3 0 0 0 0 0 0 +2072 1055 0 0 1055 185 43 0 0 0 +2073 1055 0 0 1055 315 35 0 0 0 +2074 1055 0 0 0 0 0 0 0 0 +2075 1055 5 3 0 0 0 0 0 0 +2077 1055 0 0 0 0 0 0 0 0 +2078 1055 0 0 0 0 0 0 0 0 +2079 1055 0 0 0 0 0 0 0 0 +2080 1055 0 0 0 0 0 0 0 0 +2081 1055 0 0 0 0 0 0 0 0 +2082 1055 0 0 0 0 0 0 0 0 +2083 1055 0 0 0 0 0 0 0 0 +2085 695 0 0 695 0 0 0 0 0 +2089 695 0 0 0 0 0 0 0 0 +2090 695 0 0 0 0 0 0 0 0 +2091 695 0 0 0 0 0 0 0 0 +2097 695 0 0 0 0 0 0 0 0 +2098 695 0 0 0 0 0 0 0 0 +2100 1390 3 3 0 0 0 0 0 0 +2104 711 0 0 0 0 0 0 0 0 +2105 711 0 0 0 0 0 0 0 0 +2108 711 0 0 711 137 30 0 0 0 +2109 711 0 0 711 96 27 0 0 0 +2110 711 0 0 0 0 0 0 0 0 +2113 711 0 0 0 0 0 0 0 0 +2114 711 0 0 0 0 0 0 0 0 +2115 711 0 0 0 0 0 0 0 0 +2121 711 0 0 0 0 0 0 0 0 +2122 711 0 0 0 0 0 0 0 0 +2123 711 3 3 0 0 0 0 0 0 +2124 711 0 0 0 0 0 0 0 0 +2125 711 0 0 0 0 0 0 0 0 +2126 711 0 0 0 0 0 0 0 0 +2133 70 0 0 0 0 0 0 0 0 +2134 70 0 0 0 0 0 0 0 0 +2136 70 0 0 0 0 0 0 0 0 +2137 70 0 0 0 0 0 0 0 0 +2139 70 0 0 70 4 2 0 0 0 +2140 70 0 0 70 6 4 0 0 0 +2141 70 0 0 0 0 0 0 0 0 +2144 70 0 0 0 0 0 0 0 0 +2145 70 0 0 0 0 0 0 0 0 +2146 70 0 0 0 0 0 0 0 0 +2152 70 0 0 0 0 0 0 0 0 +2153 70 1 1 0 0 0 0 0 0 +2154 70 0 0 0 0 0 0 0 0 +2155 70 0 0 0 0 0 0 0 0 +2156 70 0 0 0 0 0 0 0 0 +2157 70 0 0 0 0 0 0 0 0 +2164 16 0 0 0 0 0 0 0 0 +2165 16 0 0 0 0 0 0 0 0 +2166 16 0 0 0 0 0 0 0 0 +2170 3 0 0 0 0 0 0 0 0 +2171 3 0 0 0 0 0 0 0 0 +2172 3 0 0 0 0 0 0 0 0 +2173 3 0 0 0 0 0 0 0 0 +2180 3 0 0 0 0 0 0 0 0 +2181 3 0 0 0 0 0 0 0 0 +2182 3 0 0 0 0 0 0 0 0 +2193 16 0 0 0 0 0 0 0 0 +2194 16 0 0 0 0 0 0 0 0 +2195 16 0 0 0 0 0 0 0 0 +2196 32 0 0 0 0 0 0 0 0 +2200 5975 7 1 0 0 0 0 0 0 +2202 11050 2 1 0 0 0 0 0 0 +2203 11050 0 0 0 0 0 0 0 0 +2204 11050 0 0 0 0 0 0 0 0 +2205 11050 2 0 0 0 0 0 0 0 +2206 12836 0 0 0 0 0 0 0 0 +2211 28954 5 3 0 0 0 0 0 0 +2217 28954 0 0 28954 0 0 0 0 0 +2218 28954 0 0 28954 0 0 0 0 0 +2226 28954 0 0 0 0 0 0 0 0 +2227 28954 0 0 28954 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/strcspn.S +fn=strcspn +28 1 1 1 0 0 0 0 0 0 +30 1 0 0 0 0 0 0 0 0 +37 1 0 0 0 0 0 0 0 0 +38 1 0 0 0 0 0 0 0 0 +40 1 0 0 0 0 0 0 0 0 +41 1 0 0 0 0 0 0 0 0 +42 1 0 0 0 0 0 0 0 0 +43 1 0 0 0 0 0 0 0 0 +44 33 0 0 0 0 0 32 4 4 +47 3 0 0 0 0 0 0 0 0 +54 1 0 0 1 1 1 0 0 0 +55 1 0 0 0 0 0 0 0 0 +56 1 0 0 0 0 0 0 0 0 +57 1 0 0 0 0 0 1 0 0 +59 1 0 0 1 0 0 0 0 0 +60 1 0 0 0 0 0 0 0 0 +61 1 1 1 0 0 0 0 0 0 +62 1 0 0 0 0 0 1 0 0 +64 1 0 0 1 0 0 0 0 0 +65 1 0 0 0 0 0 0 0 0 +66 1 0 0 0 0 0 0 0 0 +75 3 0 0 0 0 0 0 0 0 +87 17 0 0 0 0 0 0 0 0 +89 17 0 0 17 1 1 0 0 0 +90 17 0 0 17 0 0 0 0 0 +91 17 0 0 0 0 0 0 0 0 +93 16 0 0 16 0 0 0 0 0 +94 16 0 0 16 0 0 0 0 0 +95 16 0 0 0 0 0 0 0 0 +97 16 0 0 16 0 0 0 0 0 +98 16 0 0 16 0 0 0 0 0 +99 16 0 0 0 0 0 0 0 0 +101 16 0 0 16 0 0 0 0 0 +102 16 0 0 16 0 0 0 0 0 +103 16 0 0 0 0 0 0 0 0 +109 1 0 0 0 0 0 0 0 0 +116 1 0 0 0 0 0 0 0 0 +120 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/memmem.c +fn=memmem +55 312 2 1 26 0 0 182 0 0 +59 104 0 0 0 0 0 0 0 0 +61 52 2 1 0 0 0 0 0 0 +65 52 0 0 0 0 0 0 0 0 +66 26 2 1 0 0 0 0 0 0 +68 78 0 0 0 0 0 0 0 0 +70 52 0 0 0 0 0 0 0 0 +79 52 0 0 0 0 0 0 0 0 +84 26 0 0 0 0 0 0 0 0 +85 26 0 0 0 0 0 0 0 0 +87 1066 4 2 0 0 0 832 2 0 +88 286 2 1 0 0 0 0 0 0 +89 416 2 1 104 2 1 52 0 0 +92 234 0 0 78 0 0 26 0 0 +93 26 2 1 0 0 0 26 0 0 +95 130 0 0 0 0 0 0 0 0 +100 78 0 0 0 0 0 0 0 0 +101 468 0 0 234 0 0 0 0 0 +103 312 0 0 0 0 0 0 0 0 +107 26 0 0 0 0 0 0 0 0 +108 52 0 0 0 0 0 0 0 0 +119 26 0 0 0 0 0 0 0 0 +126 286 2 1 234 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/strdup.c +fn=strdup +40 255 23 2 0 0 0 102 0 0 +41 102 0 0 0 0 0 51 0 0 +42 102 0 0 0 0 0 51 0 0 +44 102 2 1 0 0 0 0 0 0 +47 204 0 0 0 0 0 0 0 0 +48 153 0 0 102 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/string/strverscmp.c +fn=strverscmp +43 1 1 1 0 0 0 0 0 0 +68 2 0 0 0 0 0 0 0 0 +71 3 0 0 1 0 0 0 0 0 +72 2 0 0 1 1 1 0 0 0 +74 8 1 1 0 0 0 0 0 0 +77 3 0 0 0 0 0 0 0 0 +88 13 2 2 1 1 1 0 0 0 +90 2 0 0 0 0 0 0 0 0 +105 1 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/../bits/byteswap.h +fn=__tzfile_read +52 36 1 1 18 0 0 0 0 0 +73 360 1 1 120 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/../include/alloc_buffer.h +fn=__tzfile_read +126 5 1 1 1 0 0 1 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/../include/stdio.h +fn=__tzfile_read +255 150 3 3 75 0 0 25 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/clock_gettime.c +fn=clock_gettime@@GLIBC_2.17 +31 4686 5 2 0 0 0 1562 0 0 +38 8591 5 2 1562 7 2 0 0 0 +73 3124 0 0 2343 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/clock_nanosleep.c +fn=clock_nanosleep@@GLIBC_2.17 +62 17505 1 1 1945 0 0 9725 0 0 +65 9725 0 0 0 0 0 0 0 0 +67 7780 1 1 0 0 0 0 0 0 +78 17505 0 0 1945 0 0 0 0 0 +80 3890 0 0 0 0 0 0 0 0 +117 9725 1 1 0 0 0 0 0 0 +119 17505 0 0 13615 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/dl-vdso.h +fn=gettimeofday +40 20 0 0 20 13 0 0 0 0 +41 20 0 0 0 0 0 0 0 0 +fn=time +40 30 0 0 30 20 0 0 0 0 +41 30 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/gettimeofday.c +fn=__gettimeofday_syscall +32 4719 9 2 0 0 0 0 0 0 +33 9438 0 0 0 0 0 0 0 0 +35 18876 0 0 0 0 0 0 0 0 +36 4719 0 0 4719 0 0 0 0 0 +fn=gettimeofday +41 30 2 2 10 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/time.c +fn=time +38 45 2 2 15 0 0 0 0 0 +fn=time_syscall +31 733 13 2 0 0 0 0 0 0 +32 2932 14 2 0 0 0 0 0 0 +33 733 0 0 733 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +fn=__tz_convert +47 9436 0 0 4718 3 2 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/gmtime.c +fn=gmtime_r +25 9436 7 2 0 0 0 0 0 0 +26 14154 0 0 4718 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/offtime.c +fn=__offtime +30 37744 3 2 0 0 0 28308 0 0 +34 37744 0 0 0 0 0 0 0 0 +35 9436 0 0 0 0 0 0 0 0 +37 9436 3 2 0 0 0 0 0 0 +42 14154 18 4 0 0 0 0 0 0 +47 47180 0 0 0 0 0 9436 0 0 +48 9436 0 0 0 0 0 0 0 0 +49 23590 6 2 0 0 0 4718 0 0 +50 28308 0 0 0 0 0 4718 0 0 +52 70770 3 2 0 0 0 4718 0 0 +55 4718 0 0 0 0 0 0 0 0 +60 89642 21 6 4718 0 0 0 0 0 +63 75488 3 2 0 0 0 0 0 0 +66 28308 0 0 0 0 0 0 0 0 +67 198156 13 4 0 0 0 0 0 0 +68 184002 11 4 0 0 0 0 0 0 +69 4718 0 0 0 0 0 0 0 0 +71 9436 0 0 0 0 0 4718 0 0 +72 18872 0 0 0 0 0 0 0 0 +78 4718 0 0 0 0 0 4718 0 0 +79 14154 0 0 0 0 0 0 0 0 +80 207592 15 4 42462 3 2 0 0 0 +82 4718 0 0 0 0 0 0 0 0 +83 4718 0 0 0 0 0 4718 0 0 +84 9436 0 0 0 0 0 4718 0 0 +85 4718 0 0 0 0 0 0 0 0 +86 33026 0 0 33026 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/strftime_l.c +fn=__strftime_internal +471 408 7 2 48 0 0 264 1 0 +473 48 0 0 24 2 1 24 0 0 +476 24 0 0 24 0 0 0 0 0 +529 24 0 0 0 0 0 0 0 0 +544 48 0 0 24 0 0 24 0 0 +554 48 4 1 0 0 0 0 0 0 +558 96 4 1 0 0 0 0 0 0 +560 216 4 1 48 0 0 0 0 0 +562 48 4 1 0 0 0 0 0 0 +572 48 0 0 0 0 0 0 0 0 +574 24 0 0 0 0 0 0 0 0 +575 24 0 0 0 0 0 0 0 0 +658 48 0 0 0 0 0 0 0 0 +669 264 4 1 24 0 0 0 0 0 +693 72 4 1 0 0 0 0 0 0 +713 192 32 8 0 0 0 0 0 0 +727 168 0 0 24 6 3 0 0 0 +938 20 0 0 4 0 0 4 0 0 +941 28 4 1 8 0 0 4 0 0 +960 60 4 1 0 0 0 0 0 0 +987 72 0 0 0 0 0 0 0 0 +989 48 0 0 0 0 0 0 0 0 +993 464 4 1 0 0 0 40 0 0 +994 160 0 0 0 0 0 0 0 0 +997 24 0 0 0 0 0 0 0 0 +998 48 3 1 0 0 0 0 0 0 +1001 96 0 0 0 0 0 0 0 0 +1003 48 0 0 24 0 0 0 0 0 +1006 48 0 0 0 0 0 0 0 0 +1008 32 0 0 0 0 0 0 0 0 +1020 48 3 1 32 0 0 0 0 0 +1023 48 0 0 0 0 0 0 0 0 +1032 48 8 2 0 0 0 0 0 0 +1033 176 0 0 48 0 0 64 0 0 +1034 32 0 0 16 0 0 0 0 0 +1035 48 0 0 0 0 0 16 0 0 +1040 528 16 4 48 0 0 48 0 0 +1050 20 0 0 4 0 0 4 0 0 +1053 28 4 1 8 0 0 4 0 0 +1080 20 4 1 4 0 0 4 0 0 +1083 28 0 0 8 0 0 4 0 0 +1086 20 0 0 4 0 0 4 0 0 +1089 36 3 1 8 0 0 8 0 0 +1133 20 0 0 4 0 0 4 0 0 +1136 28 4 1 8 0 0 4 0 0 +1265 20 0 0 4 0 0 4 0 0 +1286 8 0 0 0 0 0 0 0 0 +1289 40 4 1 8 0 0 8 0 0 +1336 72 0 0 0 0 0 24 0 0 +1348 48 4 1 0 0 0 0 0 0 +1350 24 0 0 0 0 0 0 0 0 +1436 96 0 0 24 0 0 0 0 0 +1437 48 0 0 0 0 0 24 0 0 +1439 288 0 0 216 0 0 0 0 0 +fn=strftime_l +451 120 8 2 24 0 0 24 0 0 +459 24 0 0 0 0 0 24 0 0 +460 144 0 0 24 0 0 48 0 0 +462 120 0 0 72 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/tzfile.c +fn=__tzfile_compute +582 51898 3 2 0 0 0 33026 0 0 +585 9436 3 2 0 0 0 0 0 0 +750 9436 13 4 9436 0 0 0 0 0 +754 23590 0 0 4718 0 0 4718 0 0 +755 9436 0 0 0 0 0 4718 0 0 +758 4718 0 0 0 0 0 0 0 0 +760 9436 5 2 0 0 0 0 0 0 +780 37744 0 0 33026 0 0 0 0 0 +fn=__tzfile_read +102 13 1 1 1 0 0 7 0 0 +109 1 1 1 1 1 1 0 0 0 +110 1 0 0 0 0 0 1 0 0 +111 1 0 0 0 0 0 1 0 0 +116 1 0 0 0 0 0 1 0 0 +118 2 0 0 0 0 0 0 0 0 +121 4 0 0 1 0 0 0 0 0 +130 4 1 1 2 1 0 0 0 0 +140 2 1 1 0 0 0 0 0 0 +154 2 1 1 0 0 0 0 0 0 +162 4 1 1 0 0 0 1 0 0 +163 2 0 0 0 0 0 0 0 0 +167 9 0 0 0 0 0 3 0 0 +170 3 1 1 1 1 1 1 0 0 +171 1 0 0 0 0 0 1 0 0 +174 2 1 1 1 1 0 1 1 1 +175 2 0 0 1 0 0 1 0 0 +176 2 0 0 1 1 0 1 1 1 +179 2 0 0 1 0 0 1 0 0 +182 14 1 1 0 0 0 2 0 0 +184 4 0 0 2 0 0 0 0 0 +187 4 0 0 0 0 0 2 0 0 +188 4 0 0 0 0 0 2 0 0 +189 4 0 0 0 0 0 2 0 0 +190 4 0 0 0 0 0 2 0 0 +191 2 0 0 0 0 0 0 0 0 +192 2 0 0 0 0 0 0 0 0 +194 10 1 1 0 0 0 0 0 0 +197 6 0 0 3 0 0 0 0 0 +200 2 0 0 0 0 0 2 0 0 +203 6 0 0 0 0 0 0 0 0 +204 1 0 0 0 0 0 0 0 0 +209 5 1 1 0 0 0 1 0 0 +218 2 1 1 1 0 0 0 0 0 +220 3 1 1 1 1 0 1 0 0 +221 4 1 1 0 0 0 0 0 0 +222 2 0 0 1 0 0 0 0 0 +223 3 0 0 1 0 0 0 0 0 +224 1 0 0 1 0 0 0 0 0 +226 1 0 0 0 0 0 0 0 0 +229 6 0 0 1 0 0 0 0 0 +230 2 0 0 0 0 0 0 0 0 +232 1 0 0 0 0 0 0 0 0 +233 2 0 0 0 0 0 0 0 0 +236 5 1 1 0 0 0 0 0 0 +238 2 0 0 0 0 0 0 0 0 +239 3 0 0 0 0 0 1 0 0 +243 3 1 1 0 0 0 1 0 0 +269 6 0 0 2 0 0 1 0 0 +271 2 0 0 0 0 0 0 0 0 +275 3 0 0 0 0 0 2 0 0 +276 2 0 0 0 0 0 0 0 0 +278 3 0 0 1 0 0 1 0 0 +283 5 0 0 0 0 0 1 0 0 +284 6 1 1 1 0 0 2 0 0 +285 6 0 0 1 0 0 2 0 0 +286 6 1 1 1 0 0 2 0 0 +287 6 0 0 1 0 0 2 0 0 +288 2 0 0 1 0 0 0 0 0 +289 7 1 1 1 0 0 2 0 0 +292 2 1 1 0 0 0 0 0 0 +294 2 0 0 1 0 0 0 0 0 +297 9 1 1 4 0 0 1 0 0 +300 7 0 0 2 0 0 1 0 0 +306 366 1 1 2 0 0 0 0 0 +307 360 0 0 120 0 0 0 0 0 +310 2 0 0 1 0 0 0 0 0 +324 243 0 0 1 0 0 0 0 0 +325 120 0 0 0 0 0 120 0 0 +328 18 0 0 6 0 0 0 0 0 +332 42 0 0 0 0 0 6 0 0 +337 12 0 0 0 0 0 0 0 0 +339 18 0 0 6 0 0 6 0 0 +341 18 0 0 6 0 0 0 0 0 +344 12 0 0 6 0 0 6 0 0 +345 6 0 0 0 0 0 6 0 0 +348 8 1 1 2 0 0 1 0 0 +351 2 0 0 1 0 0 0 0 0 +367 22 1 1 1 0 0 0 0 0 +372 18 0 0 6 0 0 6 0 0 +374 4 2 2 1 0 0 0 0 0 +377 22 0 0 0 0 0 0 0 0 +382 12 0 0 0 0 0 6 0 0 +384 4 2 2 1 0 0 0 0 0 +388 2 0 0 1 0 0 0 0 0 +390 2 0 0 1 0 0 0 0 0 +392 2 1 1 0 0 0 0 0 0 +393 9 1 1 2 0 0 1 0 0 +397 3 1 1 2 0 0 1 0 0 +401 4 0 0 1 0 0 0 0 0 +404 2 0 0 0 0 0 1 0 0 +407 22 1 1 7 0 0 0 0 0 +408 36 0 0 18 0 0 6 0 0 +414 3 0 0 1 1 0 1 0 0 +416 5 0 0 1 0 0 0 0 0 +418 4 0 0 2 0 0 0 0 0 +419 8 1 1 6 0 0 0 0 0 +421 4 0 0 2 0 0 0 0 0 +425 8 0 0 4 0 0 4 0 0 +427 11 0 0 2 0 0 0 0 0 +431 2 0 0 1 0 0 0 0 0 +438 2 1 1 1 0 0 0 0 0 +441 4 0 0 2 0 0 0 0 0 +446 1 0 0 0 0 0 0 0 0 +447 2 0 0 0 0 0 2 0 0 +448 2 0 0 0 0 0 0 0 0 +451 8 1 1 4 0 0 0 0 0 +453 1 0 0 0 0 0 1 0 0 +454 2 0 0 1 0 0 0 0 0 +456 12 2 2 3 0 0 0 0 0 +458 2 0 0 0 0 0 0 0 0 +459 2 1 1 1 0 0 0 0 0 +461 4 0 0 2 0 0 0 0 0 +464 3 0 0 0 0 0 0 0 0 +467 8 1 1 1 0 0 2 0 0 +470 5 0 0 2 0 0 1 0 0 +471 4 0 0 1 0 0 1 0 0 +474 1 1 1 0 0 0 1 0 0 +475 2 0 0 1 0 0 1 0 0 +476 1 0 0 0 0 0 0 0 0 +484 11 0 0 9 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/time/tzset.c +fn=__tz_convert +568 51898 10 4 4718 0 0 18872 0 0 +572 14154 0 0 4718 0 0 0 0 0 +577 37744 0 0 0 0 0 4718 1 0 +579 14154 3 2 4718 2 1 0 0 0 +580 28308 0 0 0 0 0 4718 0 0 +592 18872 0 0 9436 0 0 0 0 0 +594 9436 0 0 0 0 0 0 0 0 +596 9436 3 2 0 0 0 0 0 0 +598 4718 0 0 0 0 0 4718 0 0 +599 9436 6 2 0 0 0 4718 0 0 +600 14154 0 0 0 0 0 4718 0 0 +603 28308 0 0 4718 0 0 4718 0 0 +604 14154 0 0 9436 0 0 0 0 0 +609 4718 0 0 0 0 0 0 0 0 +610 37744 0 0 28308 0 0 0 0 0 +fn=__tzstring +89 72 0 0 24 0 0 0 0 0 +90 60 0 0 20 0 0 0 0 0 +92 56 1 1 0 0 0 0 0 0 +93 66 0 0 0 0 0 11 0 0 +98 12 1 1 0 0 0 4 0 0 +99 8 1 1 0 0 0 0 0 0 +102 4 0 0 0 0 0 4 0 0 +103 4 0 0 0 0 0 4 0 0 +104 20 0 0 0 0 0 4 0 0 +105 4 1 1 0 0 0 4 0 0 +108 3 0 0 0 0 0 3 0 0 +110 1 0 0 0 0 0 1 0 0 +120 56 1 1 0 0 0 40 0 0 +121 16 0 0 0 0 0 8 0 0 +122 56 0 0 48 0 0 0 0 0 +fn=tzset_internal +368 3 1 1 0 0 0 2 0 0 +372 23588 17 3 4718 3 2 0 0 0 +374 1 0 0 0 0 0 1 0 0 +377 3 0 0 0 0 0 1 0 0 +378 2 0 0 0 0 0 0 0 0 +380 4717 8 1 4717 0 0 0 0 0 +397 1 0 0 0 0 0 1 1 1 +398 1 0 0 0 0 0 1 0 0 +401 2 1 1 1 0 0 1 0 0 +402 3 0 0 0 0 0 2 0 0 +405 4 1 1 0 0 0 1 0 0 +406 4 0 0 1 0 0 0 0 0 +424 4 1 1 3 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/ifunc-avx2.h +fn=wcschr +30 10 0 0 0 0 0 0 0 0 +32 6 0 0 4 0 0 0 0 0 +fn=wcscmp +30 12 2 2 2 0 0 0 0 0 +32 6 0 0 4 2 0 0 0 0 +fn=wcslen +30 10 2 2 0 0 0 0 0 0 +32 6 0 0 4 1 0 0 0 0 +fn=wmemchr +30 10 1 1 0 0 0 0 0 0 +32 6 0 0 4 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/ifunc-memcmp.h +fn=wmemcmp +32 3 0 0 1 0 0 0 0 0 +33 3 0 0 2 0 0 0 0 0 +34 3 1 1 0 0 0 0 0 0 +35 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/ifunc-wmemset.h +fn=wmemset +30 6 0 0 0 0 0 0 0 0 +32 10 1 1 4 0 0 0 0 0 +34 8 0 0 0 0 0 0 0 0 +35 4 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/strcmp-avx2.S +fn=__wcscmp_avx2 +79 8 2 2 0 0 0 0 0 0 +92 8 0 0 0 0 0 0 0 0 +93 8 0 0 0 0 0 0 0 0 +95 8 0 0 0 0 0 0 0 0 +96 8 0 0 0 0 0 0 0 0 +97 8 0 0 0 0 0 0 0 0 +98 8 0 0 0 0 0 0 0 0 +99 8 0 0 0 0 0 0 0 0 +101 6 0 0 6 5 3 0 0 0 +102 6 0 0 6 2 1 0 0 0 +103 6 0 0 0 0 0 0 0 0 +104 6 0 0 0 0 0 0 0 0 +105 6 0 0 0 0 0 0 0 0 +106 6 0 0 0 0 0 0 0 0 +107 6 0 0 0 0 0 0 0 0 +108 6 0 0 0 0 0 0 0 0 +116 6 2 2 0 0 0 0 0 0 +117 6 0 0 6 0 0 0 0 0 +118 6 0 0 6 0 0 0 0 0 +119 6 0 0 0 0 0 0 0 0 +121 7 0 0 0 0 0 0 0 0 +122 7 0 0 0 0 0 0 0 0 +123 7 0 0 0 0 0 0 0 0 +130 7 0 0 0 0 0 0 0 0 +131 7 0 0 7 0 0 0 0 0 +634 1 1 1 0 0 0 0 0 0 +638 1 0 0 0 0 0 0 0 0 +669 1 1 1 0 0 0 0 0 0 +670 1 0 0 0 0 0 0 0 0 +671 1 0 0 0 0 0 0 0 0 +672 1 0 0 0 0 0 0 0 0 +673 1 0 0 0 0 0 0 0 0 +674 1 0 0 1 0 0 0 0 0 +702 1 0 0 0 0 0 0 0 0 +703 1 0 0 0 0 0 0 0 0 +707 1 0 0 0 0 0 0 0 0 +713 1 0 0 0 0 0 0 0 0 +714 1 0 0 1 0 0 0 0 0 +715 1 0 0 1 0 0 0 0 0 +716 1 0 0 0 0 0 0 0 0 +733 2 2 2 0 0 0 0 0 0 +734 2 0 0 0 0 0 0 0 0 +736 1 0 0 1 1 1 0 0 0 +737 1 0 0 1 0 0 0 0 0 +738 1 0 0 0 0 0 0 0 0 +739 1 0 0 0 0 0 0 0 0 +740 1 0 0 0 0 0 0 0 0 +741 1 0 0 0 0 0 0 0 0 +742 1 1 1 0 0 0 0 0 0 +757 1 1 1 0 0 0 0 0 0 +758 1 0 0 0 0 0 0 0 0 +835 1 0 0 1 1 0 0 0 0 +836 1 0 0 1 1 1 0 0 0 +841 1 0 0 0 0 0 0 0 0 +842 1 1 1 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/strlen-avx2.S +fn=__wcslen_avx2 +42 24 2 1 0 0 0 0 0 0 +55 24 0 0 0 0 0 0 0 0 +56 24 0 0 0 0 0 0 0 0 +57 24 0 0 0 0 0 0 0 0 +60 24 0 0 0 0 0 0 0 0 +61 24 0 0 0 0 0 0 0 0 +62 24 0 0 0 0 0 0 0 0 +65 20 0 0 20 3 1 0 0 0 +66 20 0 0 0 0 0 0 0 0 +67 20 0 0 0 0 0 0 0 0 +75 20 0 0 0 0 0 0 0 0 +94 4 1 1 0 0 0 0 0 0 +95 4 0 0 0 0 0 0 0 0 +96 4 0 0 4 0 0 0 0 0 +97 4 0 0 0 0 0 0 0 0 +99 4 0 0 0 0 0 0 0 0 +100 4 0 0 0 0 0 0 0 0 +101 4 0 0 0 0 0 0 0 0 +102 3 0 0 0 0 0 0 0 0 +108 3 0 0 0 0 0 0 0 0 +109 3 0 0 0 0 0 0 0 0 +110 3 0 0 0 0 0 0 0 0 +112 3 0 0 0 0 0 0 0 0 +114 3 0 0 0 0 0 0 0 0 +115 3 0 0 3 0 0 0 0 0 +131 1 1 1 0 0 0 0 0 0 +141 1 0 0 1 0 0 0 0 0 +142 1 0 0 0 0 0 0 0 0 +143 1 0 0 0 0 0 0 0 0 +144 1 0 0 0 0 0 0 0 0 +335 21 2 1 0 0 0 0 0 0 +336 21 0 0 0 0 0 0 0 0 +337 21 0 0 0 0 0 0 0 0 +339 21 0 0 0 0 0 0 0 0 +341 21 0 0 0 0 0 0 0 0 +342 21 0 0 21 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcschr.c +fn=wcschr +31 4 1 1 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcscmp.c +fn=wcscmp +30 2 2 2 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcscpy.c +fn=wcscpy +37 5 0 0 2 0 0 0 0 0 +43 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcslen.c +fn=wcslen +29 4 2 2 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcsnlen.c +fn=wcsnlen +38 3 0 0 0 0 0 0 0 0 +40 4 0 0 2 0 0 0 0 0 +49 2 2 2 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wmemchr.c +fn=wmemchr +31 4 1 1 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wmemcmp.c +fn=wmemcmp +29 2 0 0 1 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wmemset.c +fn=wmemset +31 6 1 1 2 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/./wcsmbsload.h +fn=btowc +70 1152 0 0 384 1 1 0 0 0 +72 387 2 1 0 0 0 0 0 0 +73 129 0 0 0 0 0 0 0 0 +74 3 0 0 1 0 0 1 0 0 +76 1 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/btowc.c +fn=btowc +33 6912 3 1 768 0 0 3840 0 0 +38 5376 0 0 0 0 0 0 0 0 +43 1536 3 1 0 0 0 0 0 0 +47 1152 0 0 1152 1 0 0 0 0 +48 768 0 0 768 4 2 0 0 0 +50 768 0 0 384 1 1 0 0 0 +55 1536 0 0 384 0 0 0 0 0 +58 1920 0 0 384 0 0 768 0 0 +99 6912 3 1 5376 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/mbsrtowcs.c +fn=mbsrtowcs +28 16 2 1 0 0 0 0 0 0 +29 96 0 0 32 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/mbsrtowcs_l.c +fn=__mbsrtowcs_l +42 224 4 2 16 0 0 144 0 0 +52 16 0 0 0 0 0 16 0 0 +53 16 0 0 0 0 0 16 0 0 +54 16 0 0 0 0 0 16 0 0 +57 16 0 0 16 2 0 0 0 0 +60 16 0 0 16 1 0 0 0 0 +61 16 0 0 16 1 0 0 0 0 +63 32 0 0 16 0 0 0 0 0 +68 64 2 1 48 0 0 0 0 0 +72 16 0 0 0 0 0 16 0 0 +107 64 0 0 16 0 0 16 0 0 +108 32 0 0 0 0 0 16 0 0 +112 64 2 1 0 0 0 16 0 0 +116 48 0 0 0 0 0 16 0 0 +118 176 2 1 16 0 0 64 0 0 +120 96 0 0 48 0 0 0 0 0 +123 32 0 0 0 0 0 0 0 0 +125 32 0 0 16 0 0 0 0 0 +132 32 0 0 16 0 0 16 0 0 +134 64 2 1 16 0 0 0 0 0 +138 32 0 0 0 0 0 0 0 0 +139 48 0 0 16 0 0 0 0 0 +141 32 0 0 0 0 0 0 0 0 +142 64 0 0 32 0 0 0 0 0 +143 16 0 0 0 0 0 16 0 0 +144 112 2 1 0 0 0 0 0 0 +150 32 0 0 0 0 0 0 0 0 +155 80 0 0 16 0 0 16 2 0 +163 192 2 1 144 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/wcsmbsload.c +fn=__wcsmbs_load_conv +92 36 1 1 0 0 0 4 0 0 +112 16 0 0 8 0 0 0 0 0 +120 4 1 1 0 0 0 4 0 0 +153 26 1 1 2 0 0 14 0 0 +155 16 1 1 6 0 0 2 0 0 +159 4 0 0 2 0 0 0 0 0 +168 8 0 0 0 0 0 2 0 0 +169 4 1 1 0 0 0 0 0 0 +173 2 0 0 2 1 0 0 0 0 +180 264 6 6 42 7 5 16 0 0 +186 2 1 1 0 0 0 2 0 0 +188 4 0 0 0 0 0 0 0 0 +189 2 0 0 0 0 0 2 0 0 +195 4 0 0 0 0 0 0 0 0 +207 2 0 0 0 0 0 2 0 0 +208 4 0 0 0 0 0 2 0 0 +212 16 1 1 6 0 0 2 0 0 +213 22 0 0 18 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/wcsmbsload.h +fn=__mbsrtowcs_l +70 48 0 0 16 2 0 0 0 0 +72 3 1 1 0 0 0 0 0 0 +73 1 1 1 0 0 0 0 0 0 +74 5 0 0 2 0 0 2 0 0 +76 1 0 0 0 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wcsmbs/wctob.c +fn=wctob +31 3072 3 1 384 0 0 1536 0 0 +40 1152 0 0 0 0 0 0 0 0 +45 1152 0 0 0 0 0 0 0 0 +82 3072 3 1 2304 0 0 0 0 0 +fl=/build/glibc-sMfBJT/glibc-2.31/wctype/wctype_l.c +fn=wctype_l +27 300 3 1 0 0 0 180 0 0 +30 60 0 0 0 0 0 30 0 0 +33 60 0 0 60 3 1 0 0 0 +34 204 0 0 0 0 0 0 0 0 +36 522 3 1 0 0 0 174 0 0 +38 1230 0 0 0 0 0 147 0 0 +41 144 0 0 0 0 0 0 0 0 +42 288 0 0 144 0 0 0 0 0 +46 30 0 0 30 1 1 0 0 0 +47 30 0 0 30 6 2 0 0 0 +48 240 0 0 210 0 0 0 0 0 +fl=??? +fn=(anonymous namespace)::remove_file_or_directory(boost::filesystem::path const&, boost::filesystem::file_type, boost::system::error_code*) +0 32 3 3 10 0 0 7 0 0 +fn=(anonymous namespace)::sha256::Transform(unsigned int*, unsigned char const*) +0 101430 1554 330 5820 0 0 2130 3 0 +fn=??? +0 319224 2620 1495 112856 5669 937 24848 390 242 +fn=AnnotatedMixin::~AnnotatedMixin() +0 20 2 2 5 0 0 3 0 0 +fn=AppInit(int, char**) +0 158 22 19 24 4 3 45 2 0 +fn=AppInit2(boost::thread_group&, CScheduler&) +0 822 98 95 120 12 5 202 17 9 +fn=AreBaseParamsConfigured() +0 48 8 2 20 2 0 4 0 0 +fn=BN_bin2bn +0 18668 4 4 2192 33 29 280 0 0 +fn=BN_clear_free +0 140 3 3 10 5 5 25 0 0 +fn=BN_get_flags +0 100 2 2 50 0 0 0 0 0 +fn=BN_new +0 55 2 2 5 0 0 10 0 0 +fn=BN_set_word +0 25 2 2 5 0 0 6 0 0 +fn=BaseParams() +0 13 2 2 5 1 1 1 0 0 +fn=CActiveGridnode::~CActiveGridnode() +0 29 3 3 8 3 3 3 0 0 +fn=CAddrMan::CAddrMan() +0 333146 7 7 15 2 0 81954 5126 5122 +fn=CAddrMan::~CAddrMan() +0 75 3 3 16 2 2 17 1 1 +fn=CAddress::CAddress(CService, unsigned long) +0 12308 18 3 4344 0 0 4344 0 0 +fn=CAutoFile::read(char*, unsigned long) +0 162 6 2 48 0 0 30 0 0 +fn=CBaseMainParams::~CBaseMainParams() +0 14 2 1 5 1 0 1 0 0 +fn=CBaseRegTestParams::~CBaseRegTestParams() +0 14 2 2 5 1 1 1 0 0 +fn=CBaseTestNetParams::~CBaseTestNetParams() +0 14 2 2 5 1 1 1 0 0 +fn=CBaseUnitTestParams::~CBaseUnitTestParams() +0 14 2 2 5 1 1 1 0 0 +fn=CBlock::BuildMerkleTree(bool*) const +0 720 52 13 176 0 0 128 0 0 +fn=CBlockHeader::GetHash() const +0 161 27 3 56 1 0 35 0 0 +fn=CBlockHeader::SetNull() +0 504 16 4 88 0 0 160 1 0 +fn=CBudgetDB::CBudgetDB() +0 66 5 5 15 0 0 21 0 0 +fn=CBudgetDB::Read(CBudgetManager&, bool) +0 448 28 28 79 0 0 128 0 0 +fn=CBudgetDB::Write(CBudgetManager const&) +0 205 16 16 33 1 1 66 0 0 +fn=CBudgetManager::ToString[abi:cxx11]() const +0 98 8 8 18 2 0 29 0 0 +fn=CBudgetManager::~CBudgetManager() +0 48 4 4 14 7 1 12 0 0 +fn=CChain::~CChain() +0 13 1 1 5 1 1 1 0 0 +fn=CCheckQueue::~CCheckQueue() +0 62 5 5 9 2 2 9 0 0 +fn=CClientUIInterface::CClientUIInterface() +0 540 51 51 64 0 0 248 6 6 +fn=CClientUIInterface::~CClientUIInterface() +0 72 5 5 14 1 1 21 3 1 +fn=CCriticalSection::~CCriticalSection() +0 520 2 2 130 0 0 78 0 0 +fn=CDBEnv::CDBEnv() +0 64 6 6 9 0 0 25 1 1 +fn=CDBEnv::EnvShutdown() +0 18 2 2 8 1 1 4 0 0 +fn=CDBEnv::~CDBEnv() +0 36 3 3 9 2 2 8 0 0 +fn=CDataStream::read(char*, unsigned long) +0 815 9 3 266 0 0 159 0 0 +fn=CInit::CInit() +0 1263 6 6 49 0 0 299 1 0 +fn=CInit::~CInit() +0 762 3 3 89 6 4 130 0 0 +fn=CKey::GetPubKey() const +0 45 5 5 14 2 0 8 1 1 +fn=CKey::MakeNewKey(bool) +0 28 3 3 10 1 1 7 0 0 +fn=CKey::Sign(uint256 const&, std::vector >&, unsigned int) const +0 76 7 6 21 4 1 15 0 0 +fn=CKey::VerifyPubKey(CPubKey const&) const +0 124 10 8 20 3 1 49 0 0 +fn=CMainCleanup::~CMainCleanup() +0 32 6 6 9 3 3 13 0 0 +fn=CMainParams::CMainParams() +0 6956 532 132 1480 57 5 2488 76 61 +fn=CMainParams::~CMainParams() +0 257 11 11 53 21 20 39 1 0 +fn=CMainSignals::CMainSignals() +0 971 85 85 97 0 0 468 6 6 +fn=CMainSignals::~CMainSignals() +0 67 6 6 14 1 0 20 2 0 +fn=CGridnode::CGridnode() +0 316 21 12 44 0 0 144 1 0 +fn=CGridnode::~CGridnode() +0 74 6 3 22 0 0 6 0 0 +fn=CGridnodeConfig::~CGridnodeConfig() +0 22 3 3 9 1 1 4 0 0 +fn=CGridnodeDB::CGridnodeDB() +0 84 7 7 19 0 0 31 0 0 +fn=CGridnodeDB::Read(CGridnodeMan&, bool) +0 485 33 32 90 1 1 143 0 0 +fn=CGridnodeDB::Write(CGridnodeMan const&) +0 230 21 21 51 3 3 74 0 0 +fn=CGridnodeMan::CGridnodeMan() +0 104 14 14 12 0 0 68 4 4 +fn=CGridnodeMan::ToString[abi:cxx11]() const +0 144 8 6 28 0 0 36 0 0 +fn=CGridnodeMan::~CGridnodeMan() +0 106 10 4 28 5 0 22 0 0 +fn=CGridnodePaymentDB::CGridnodePaymentDB() +0 84 7 7 19 0 0 31 0 0 +fn=CGridnodePaymentDB::Read(CGridnodePayments&, bool) +0 373 22 22 68 0 0 106 0 0 +fn=CGridnodePaymentDB::Write(CGridnodePayments const&) +0 162 15 15 29 2 2 55 0 0 +fn=CGridnodePayments::ToString[abi:cxx11]() const +0 66 5 5 14 0 0 21 0 0 +fn=CGridnodePayments::~CGridnodePayments() +0 21 2 1 7 2 0 4 0 0 +fn=CGridnodePing::CGridnodePing() +0 604 11 8 96 0 0 228 0 0 +fn=CGridnodePing::swap(CGridnodePing&, CGridnodePing&) [clone .isra.0] +0 690 21 12 156 0 0 162 0 0 +fn=CGridnodePing::~CGridnodePing() +0 44 5 3 16 0 0 4 0 0 +fn=CGridnodeSync::CGridnodeSync() +0 34 4 4 6 0 0 19 2 2 +fn=CGridnodeSync::Reset() +0 48 4 4 8 0 0 29 2 2 +fn=CGridnodeSync::~CGridnodeSync() +0 21 2 2 7 3 3 4 0 0 +fn=CMutableTransaction::CMutableTransaction() +0 126 15 3 28 0 0 63 2 2 +fn=CMutexLock::CMutexLock(CCriticalSection&, char const*, char const*, int, bool) [clone .constprop.0] +0 104 8 5 24 0 0 28 0 0 +fn=CNetCleanup::~CNetCleanup() +0 44 7 7 16 5 3 9 0 0 +fn=CNodeSignals::CNodeSignals() +0 135 10 10 15 0 0 57 2 2 +fn=CNodeSignals::~CNodeSignals() +0 42 3 3 9 1 0 11 0 0 +fn=CObfuscationPool::SetNull() +0 53 8 8 19 0 0 18 0 0 +fn=CObfuscationPool::~CObfuscationPool() +0 60 6 6 16 4 4 12 0 0 +fn=CPubKey::Verify(uint256 const&, std::vector > const&) const +0 54 4 4 15 2 0 9 0 0 +fn=CRPCSignals::CRPCSignals() +0 110 8 8 14 0 0 47 1 1 +fn=CRPCSignals::~CRPCSignals() +0 36 3 3 9 0 0 10 2 0 +fn=CRPCTable::CRPCTable() +0 26095 10 10 5582 30 0 3837 34 34 +fn=CRPCTable::~CRPCTable() +0 11 2 2 4 1 1 1 0 0 +fn=CRYPTO_THREADID_cmp +0 168 1 1 0 0 0 0 0 0 +fn=CRYPTO_THREADID_current +0 10990 21 4 2355 0 0 1570 0 0 +fn=CRYPTO_THREADID_set_pointer +0 3140 10 2 785 0 0 1570 7 2 +fn=CRYPTO_clear_free +0 100 2 2 15 0 0 20 0 0 +fn=CRYPTO_free +0 10301 23 6 3955 3 2 1574 0 0 +fn=CRYPTO_lock +0 89800 21 4 26912 9 2 17960 1 0 +fn=CRYPTO_malloc +0 25307 33 8 7113 29 4 3937 1 0 +fn=CRYPTO_num_locks +0 255 2 2 85 0 0 0 0 0 +fn=CRYPTO_set_locking_callback +0 14 2 2 4 0 0 6 2 0 +fn=CRYPTO_zalloc +0 150 1 1 20 0 0 30 0 0 +fn=CRegTestParams::CRegTestParams() +0 379 17 15 77 2 1 95 3 0 +fn=CRegTestParams::~CRegTestParams() +0 177 11 11 40 13 13 27 1 1 +fn=CSHA256::CSHA256() +0 209 14 4 44 0 0 66 0 0 +fn=CSHA256::Finalize(unsigned char*) +0 1188 26 6 330 0 0 308 0 0 +fn=CSHA256::Reset() +0 220 20 4 44 0 0 66 0 0 +fn=CSHA256::Write(unsigned char const*, unsigned long) +0 5883 59 14 1517 0 0 1111 3 0 +fn=CScheduler::CScheduler() +0 64 6 6 9 0 0 19 0 0 +fn=CScheduler::~CScheduler() +0 44 3 3 7 1 0 6 0 0 +fn=CScript::operator<<(std::vector > const&) +0 528 20 5 208 0 0 112 0 0 +fn=CScript::~CScript() +0 13 2 2 5 0 0 1 0 0 +fn=CService::CService() +0 70 4 4 20 0 0 15 2 1 +fn=CService::CService(in6_addr const&, unsigned short) +0 9412 6 1 3620 0 0 2172 0 0 +fn=CSporkManager::~CSporkManager() +0 20 1 1 7 1 1 2 0 0 +fn=CTestNetParams::CTestNetParams() +0 1374 92 45 202 28 1 470 8 0 +fn=CTestNetParams::~CTestNetParams() +0 177 11 11 40 14 14 27 1 1 +fn=CTransaction::CTransaction(CMutableTransaction const&) +0 828 60 15 176 0 0 272 0 0 +fn=CTransaction::CTransaction(CTransaction const&) +0 968 56 14 208 0 0 284 4 2 +fn=CTransaction::UpdateHash() const +0 472 24 6 76 0 0 152 0 0 +fn=CTxIn::CTxIn() +0 21 3 3 4 0 0 11 2 2 +fn=CTxMemPool::AddTransactionsUpdated(unsigned int) +0 33 3 3 8 0 0 6 0 0 +fn=CTxMemPool::CTxMemPool(CFeeRate const&) +0 80 10 10 9 0 0 40 2 2 +fn=CTxMemPool::~CTxMemPool() +0 683 6 6 167 36 35 86 0 0 +fn=CTxOut* std::__uninitialized_copy::__uninit_copy(CTxOut const*, CTxOut const*, CTxOut*) +0 112 8 2 44 0 0 32 0 0 +fn=CUnitTestParams::~CUnitTestParams() +0 179 11 11 40 14 14 28 2 2 +fn=ClearDatadirCache() +0 34 4 4 8 0 0 11 0 0 +fn=DateTimeStrFormat[abi:cxx11](char const*, long) +0 960 70 19 156 19 5 304 0 0 +fn=DbEnv::DbEnv(unsigned int) +0 46 5 5 18 0 0 16 2 2 +fn=DbEnv::cleanup() +0 9 2 2 3 0 0 3 0 0 +fn=DbEnv::error_policy() +0 13 2 2 4 0 0 2 0 0 +fn=DbEnv::get_DB_ENV() +0 8 1 1 4 0 0 2 0 0 +fn=DbEnv::initialize(__db_env*) +0 35 3 3 11 0 0 9 1 0 +fn=DbEnv::~DbEnv() +0 27 2 2 9 1 1 7 1 1 +fn=DebugPrintInit() +0 68 5 5 15 0 0 18 0 0 +fn=DumpBudgets() +0 171 20 19 23 0 0 85 0 0 +fn=DumpGridnodePayments() +0 88 10 9 13 0 0 35 0 0 +fn=DumpGridnodes() +0 62 5 5 10 1 0 17 0 0 +fn=ECCVerifyHandle::ECCVerifyHandle() +0 23 3 3 7 2 1 4 1 1 +fn=ECCVerifyHandle::~ECCVerifyHandle() +0 17 2 2 6 1 0 3 0 0 +fn=ECC_InitSanityCheck() +0 116 11 10 24 5 0 25 1 1 +fn=ECC_Start() +0 291 15 14 31 6 0 66 2 0 +fn=ECC_Stop() +0 14 2 2 4 1 0 2 0 0 +fn=ENGINE_get_default_RAND +0 4 1 1 0 0 0 0 0 0 +fn=ENGINE_get_digest_engine +0 6100 11 2 0 0 0 0 0 0 +fn=EVP_DigestFinal_ex +0 44225 21 4 16775 0 0 7625 0 0 +fn=EVP_DigestInit_ex +0 74362 97 18 17608 17 2 12294 0 0 +fn=EVP_DigestUpdate +0 12216 9 2 6108 0 0 0 0 0 +fn=EVP_MD_CTX_cleanup +0 29868 33 6 9432 0 0 5502 0 0 +fn=EVP_MD_CTX_clear_flags +0 7625 11 2 3050 0 0 0 0 0 +fn=EVP_MD_CTX_init +0 4716 9 2 786 0 0 2358 0 0 +fn=EVP_MD_CTX_test_flags +0 3144 0 0 1572 0 0 0 0 0 +fn=EVP_sha1 +0 4575 10 2 1525 0 0 0 0 0 +fn=GenerateBitcoins(bool, CWallet*, int) +0 34 5 5 12 1 1 10 1 1 +fn=GetAdjustedTime() +0 32 3 2 10 0 0 8 0 0 +fn=GetArg(std::__cxx11::basic_string, std::allocator > const&, long) +0 238 5 5 65 0 0 48 0 0 +fn=GetArg(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&) +0 105 11 8 30 0 0 24 0 0 +fn=GetBoolArg(std::__cxx11::basic_string, std::allocator > const&, bool) +0 934 7 6 280 0 0 218 0 0 +fn=GetConfigFile() +0 86 6 6 20 0 0 20 0 0 +fn=GetDataDir(bool) +0 496 35 20 108 6 2 97 0 0 +fn=GetDefaultDataDir(std::__cxx11::basic_string, std::allocator >) +0 228 20 20 52 0 0 62 1 0 +fn=GetNodeSignals() +0 11 2 2 4 0 0 1 0 0 +fn=GetPidFile() +0 86 6 6 20 0 0 20 1 0 +fn=GetRand(unsigned long) +0 8688 12 2 2172 0 0 724 0 0 +fn=GetRand(unsigned long) [clone .part.0] +0 25340 12 2 5792 0 0 4344 0 0 +fn=GetRandBytes(unsigned char*, int) +0 39 4 3 12 0 0 6 0 0 +fn=GetRandHash() +0 22 2 2 5 0 0 7 0 0 +fn=GetTime() +0 10248 25 4 2928 7 2 732 0 0 +fn=GetTimeMillis() +0 779 15 8 114 0 0 114 0 0 +fn=GetTimeOffset() +0 62 6 3 14 1 1 10 0 0 +fn=HexDigit(char) +0 38753 16 2 14905 9 2 2981 0 0 +fn=InitError(std::__cxx11::basic_string, std::allocator > const&) +0 28 3 2 8 1 0 7 0 0 +fn=InitSanityCheck() +0 25 3 2 6 1 0 6 0 0 +fn=InterpretNegativeSetting(std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >&) +0 286 9 2 132 0 0 55 0 0 +fn=Interrupt(boost::thread_group&) +0 123 10 10 20 1 1 33 3 3 +fn=InterruptHTTPRPC() +0 18 2 2 6 0 0 4 0 0 +fn=InterruptHTTPServer() +0 23 5 5 8 1 1 4 1 1 +fn=InterruptREST() +0 10 1 1 4 0 0 1 0 0 +fn=InterruptRPC() +0 19 2 2 6 0 0 5 1 1 +fn=InterruptTorControl() +0 12 2 2 5 1 1 1 0 0 +fn=LockedPageManager::CreateInstance() +0 30 3 3 6 1 0 7 1 0 +fn=LockedPageManager::LockedPageManager() +0 39 3 3 8 0 0 14 2 1 +fn=LockedPageManager::~LockedPageManager() +0 24 2 2 6 1 0 4 0 0 +fn=LogAcceptCategory(char const*) +0 866 33 4 326 0 0 240 6 4 +fn=LogPrint(char const*, char const*) +0 208 18 10 65 0 0 46 0 0 +fn=LogPrintStr(std::__cxx11::basic_string, std::allocator > const&) +0 364 35 9 96 13 2 70 0 0 +fn=MapPort(bool) +0 24 4 4 9 1 1 5 0 0 +fn=MemoryPageLocker::Lock(void const*, unsigned long) +0 30 2 2 8 0 0 4 0 0 +fn=MemoryPageLocker::Unlock(void const*, unsigned long) +0 30 4 3 8 0 0 4 0 0 +fn=MilliSleep(long) +0 13 1 1 4 0 0 3 0 0 +fn=NetworkIdFromCommandLine() +0 45 4 4 9 0 0 14 0 0 +fn=OPENSSL_cleanse +0 60133 34 6 818 0 0 10731 48 42 +fn=OPENSSL_cpuid_setup +0 31 4 4 7 1 1 8 1 1 +fn=OPENSSL_ia32_cpuid +0 58 5 5 1 0 0 0 0 0 +fn=OPENSSL_init +0 11 2 2 4 1 0 1 0 0 +fn=OPENSSL_no_config +0 3 1 1 1 0 0 1 1 1 +fn=OpenSSL_version_num +0 3 1 1 1 0 0 0 0 0 +fn=Params() +0 143 10 4 55 1 1 11 0 0 +fn=Params(CBaseChainParams::Network) +0 17 2 2 4 0 0 1 0 0 +fn=ParseHex(char const*) +0 17990 42 7 4890 29 6 2020 10 1 +fn=ParseParameters(int, char const* const*) +0 42 5 5 12 2 0 17 0 0 +fn=PrepareShutdown() +0 144 24 16 19 6 1 44 1 1 +fn=RAND_SSLeay +0 3 1 1 1 0 0 0 0 0 +fn=RAND_add +0 100 3 1 20 0 0 20 0 0 +fn=RAND_bytes +0 13122 20 4 2187 10 1 2187 0 0 +fn=RAND_cleanup +0 12 2 2 1 1 0 2 0 0 +fn=RAND_get_rand_method +0 3683 12 3 1471 9 2 4 0 0 +fn=RAND_poll +0 175 10 10 14 2 0 80 0 0 +fn=RAND_set_rand_method +0 10 1 1 3 0 0 2 0 0 +fn=RaiseFileDescriptorLimit(int) +0 26 2 2 7 0 0 4 0 0 +fn=RandAddSeed() +0 26 2 2 8 1 1 6 0 0 +fn=ReadConfigFile(std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >&, std::map, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >&) +0 1650 46 39 412 4 0 358 4 0 +fn=RenameThread(char const*) +0 16 2 2 3 0 0 1 0 0 +fn=SHA1_Final +0 195485 61 12 18300 0 0 48216 0 0 +fn=SHA1_Init +0 18300 24 4 3050 8 2 10675 6 3 +fn=SHA1_Update +0 294738 53 12 65706 0 0 56965 0 0 +fn=SelectBaseParams(CBaseChainParams::Network) +0 18 2 2 4 0 0 2 1 0 +fn=SelectParamsFromCommandLine() +0 23 3 2 5 0 0 6 1 0 +fn=SetupEnvironment() +0 33 5 3 6 1 0 10 0 0 +fn=SetupNetworking() +0 11 2 2 4 0 0 1 0 0 +fn=Shutdown() +0 51 9 7 10 1 1 13 0 0 +fn=SoftSetArg(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&) +0 32 1 1 6 0 0 6 0 0 +fn=SoftSetBoolArg(std::__cxx11::basic_string, std::allocator > const&, bool) +0 30 3 3 7 0 0 5 0 0 +fn=StopHTTPRPC() +0 34 3 3 8 1 1 7 0 0 +fn=StopHTTPServer() +0 38 6 6 13 1 1 10 0 0 +fn=StopNode() +0 29 5 4 10 2 2 7 0 0 +fn=StopREST() +0 187 4 4 24 3 3 41 0 0 +fn=StopRPC() +0 28 3 3 7 2 2 9 1 1 +fn=StopTorControl() +0 18 2 2 8 1 0 4 0 0 +fn=SupplyCache::~SupplyCache() +0 26 3 3 8 3 3 3 0 0 +fn=UniValue::~UniValue() +0 33 4 3 12 1 1 4 0 0 +fn=UnregisterAllValidationInterfaces() +0 225 21 21 68 29 29 30 0 0 +fn=UnregisterHTTPHandler(std::__cxx11::basic_string, std::allocator > const&, bool) +0 225 2 2 99 0 0 63 0 0 +fn=UnregisterNodeSignals(CNodeSignals&) +0 186 19 19 50 19 18 22 0 0 +fn=_GLOBAL__sub_I__Z10BaseParamsv +0 84 9 9 7 0 0 33 4 4 +fn=_GLOBAL__sub_I__Z10CastToBoolRKSt6vectorIhSaIhEE +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__Z10DecryptAES7uint256S_RS_ +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__Z11CLIENT_NAMEB5cxx11 +0 39 5 5 6 1 0 9 0 0 +fn=_GLOBAL__sub_I__Z11FormatMoneyB5cxx11RKlb +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z11HandleErrorRKN7leveldb6StatusE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z11MurmurHash3jRKSt6vectorIhSaIhEE +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__Z11ParseScriptNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__Z11RandAddSeedv +0 65 6 6 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z11getpoolinfoRK8UniValueb +0 75 8 8 9 0 0 37 2 2 +fn=_GLOBAL__sub_I__Z12DecodeBase58PKcRSt6vectorIhSaIhEE +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__Z12FormatScriptB5cxx11RK7CScript +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z12StartHTTPRPCv +0 77 7 7 12 0 0 35 3 3 +fn=_GLOBAL__sub_I__Z12budgetToJSONP15CBudgetProposalR8UniValue +0 75 9 9 9 0 0 37 2 2 +fn=_GLOBAL__sub_I__Z12noui_connectv +0 15 2 2 4 1 0 2 0 0 +fn=_GLOBAL__sub_I__Z13GetDifficultyPK11CBlockIndex +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__Z13GetTimeOffsetv +0 71 7 7 9 0 0 33 2 2 +fn=_GLOBAL__sub_I__Z14GetMainSignalsv +0 15 2 2 3 0 0 2 0 0 +fn=_GLOBAL__sub_I__Z14JSONRPCRequestRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERK8UniValueS9_ +0 32 3 3 6 0 0 7 0 0 +fn=_GLOBAL__sub_I__Z14SanitizeStringRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +0 15 2 2 4 0 0 2 0 0 +fn=_GLOBAL__sub_I__Z15WaitForShutdownPN5boost12thread_groupE +0 84 10 9 11 3 0 37 2 1 +fn=_GLOBAL__sub_I__Z15handle_progressPvllll +0 15 2 2 4 0 0 2 0 0 +fn=_GLOBAL__sub_I__Z16DecodeDumpStringRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +0 70 8 8 11 0 0 33 2 2 +fn=_GLOBAL__sub_I__Z16GetNetworkHashPSii +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z16SignBlockWithKeyR6CBlockRK4CKey +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z18GetMainCheckpointsB5cxx11v +0 69 7 7 8 0 0 35 2 2 +fn=_GLOBAL__sub_I__Z18ScriptPubKeyToJSONRK7CScriptR8UniValueb +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z18getconnectioncountRK8UniValueb +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z19DEFAULT_TOR_CONTROLB5cxx11 +0 97 10 10 12 1 0 39 2 2 +fn=_GLOBAL__sub_I__Z19GetNextWorkRequiredPK11CBlockIndexPK12CBlockHeader +0 65 6 6 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__Z20LoadInvalidOutPointsB5cxx11v +0 79 9 9 8 0 0 41 3 3 +fn=_GLOBAL__sub_I__Z20getNumberOfCoinsUsedRKSt3mapIN11libzerocoin16CoinDenominationElSt4lessIS1_ESaISt4pairIKS1_lEEE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z22BlockToMintValueVectorRK6CBlockN11libzerocoin16CoinDenominationERSt6vectorI7CBigNumSaIS5_EE +0 65 6 6 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z5Sign1RK6CKeyIDRK9CKeyStore7uint256iR7CScript +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z7GetTimev +0 23 2 2 8 0 0 4 0 0 +fn=_GLOBAL__sub_I__Z7getinfoRK8UniValueb +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__Z8HaveKeysRKSt6vectorIS_IhSaIhEESaIS1_EERK9CKeyStore +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__Z9GetOpName10opcodetype +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__Z9StartRESTv +0 70 8 8 12 1 0 32 1 1 +fn=_GLOBAL__sub_I__ZN10CSchedulerC2Ev +0 14 1 1 6 0 0 1 0 0 +fn=_GLOBAL__sub_I__ZN11Checkpoints8fEnabledE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN11libzerocoin10CommitmentC2EPKNS_18IntegerGroupParamsERK7CBigNum +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZN11libzerocoin10PublicCoinC2EPKNS_14ZerocoinParamsE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN11libzerocoin11AccumulatorC2EPKNS_25AccumulatorAndProofParamsENS_16CoinDenominationE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN11libzerocoin14ZerocoinParamsC2E7CBigNumj +0 59 7 7 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZN11libzerocoin15CalculateParamsERNS_14ZerocoinParamsE7CBigNumNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZN11libzerocoin25IntToZerocoinDenominationEl +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZN11libzerocoin27AccumulatorProofOfKnowledgeC2EPKNS_25AccumulatorAndProofParamsE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN11libzerocoin32SerialNumberSignatureOfKnowledgeC2EPKNS_14ZerocoinParamsE +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__ZN11libzerocoin9CoinSpendC2EPKNS_14ZerocoinParamsES3_RKNS_11PrivateCoinERNS_11AccumulatorERKjRKNS_18AccumulatorWitnessERK7uint256RKNS_9SpendTypeE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN12CBloomFilterC2Ejdjh +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZN12CCoinsViewDBC2Embb +0 70 8 8 12 0 0 32 1 1 +fn=_GLOBAL__sub_I__ZN12CMerkleBlockC2ERK6CBlockR12CBloomFilter +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZN14AccumulatorMapC2EPN11libzerocoin14ZerocoinParamsE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN14CMessageHeaderC2Ev +0 65 8 8 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__ZN14CZUnigridStakeC2ERKN11libzerocoin9CoinSpendE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN15CTxMemPoolEntryC2Ev +0 65 8 8 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN15CzUNIGRIDWalletC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN16CzUNIGRIDTrackerC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN17CActiveGridnode12ManageStatusEv +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__ZN18CDeterministicMintC2Ev +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN4CKey5CheckEPKh +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZN6CChain6SetTipEP11CBlockIndex +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN8CCrypter20SetKeyFromPassphraseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcE16secure_allocatorIcEEERKSt6vectorIhSaIhEEjj +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN8CFeeRateC2ERKlm +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__ZN8CSporkDBC2Embb +0 65 8 8 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN9BSArchiveC2EP8_IO_FILESt8functionIFvdEE +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__ZN9CMintPoolC2Ev +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZN9CWalletDB9WriteNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ +0 70 8 8 12 0 0 32 2 2 +fn=_GLOBAL__sub_I__ZN9RPCServer9OnStartedEN5boost8functionIFvvEEE +0 1602 162 162 14 2 0 727 38 38 +fn=_GLOBAL__sub_I__ZNK12CBlockHeader7GetHashEv +0 65 7 7 9 1 0 31 2 2 +fn=_GLOBAL__sub_I__ZNK12CChainParams15Zerocoin_ParamsEb +0 10 2 2 3 0 0 1 0 0 +fn=_GLOBAL__sub_I__ZNK17CScriptCompressor9IsToKeyIDER6CKeyID +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZNK34CachingTransactionSignatureChecker15VerifySignatureERKSt6vectorIhSaIhEERK7CPubKeyRK7uint256 +0 70 8 8 12 2 0 32 2 2 +fn=_GLOBAL__sub_I__ZNK6CCoins12CalcMaskSizeERjS0_ +0 59 7 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZNK7CPubKey6VerifyERK7uint256RKSt6vectorIhSaIhEE +0 59 6 6 8 0 0 29 1 1 +fn=_GLOBAL__sub_I__ZNK9CAddrInfo14GetTriedBucketERK7uint256 +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZNK9CKeyStore9GetPubKeyERK6CKeyIDR7CPubKey +0 65 7 7 9 0 0 31 2 2 +fn=_GLOBAL__sub_I__ZNK9CMintMetaltERKS_ +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I__ZNK9COutPoint8ToStringB5cxx11Ev +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I_budget +0 181 20 20 11 0 0 111 12 12 +fn=_GLOBAL__sub_I_cmdline.cpp +0 9 1 1 1 0 0 1 0 0 +fn=_GLOBAL__sub_I_config_file.cpp +0 9 1 1 1 0 0 1 0 0 +fn=_GLOBAL__sub_I_convert.cpp +0 16 1 1 1 0 0 3 0 0 +fn=_GLOBAL__sub_I_cs_main +0 377 43 43 14 1 0 194 25 25 +fn=_GLOBAL__sub_I_cs_supplycache +0 71 8 8 9 0 0 33 2 2 +fn=_GLOBAL__sub_I_cxx_db.cpp +0 8 1 1 2 0 0 2 0 0 +fn=_GLOBAL__sub_I_cxx_dbc.cpp +0 8 1 1 2 0 0 2 0 0 +fn=_GLOBAL__sub_I_cxx_dbt.cpp +0 8 1 1 2 0 0 2 0 0 +fn=_GLOBAL__sub_I_cxx_env.cpp +0 8 1 1 2 0 0 2 0 0 +fn=_GLOBAL__sub_I_cxx_except.cpp +0 8 1 1 2 0 0 2 0 0 +fn=_GLOBAL__sub_I_cxx_lock.cpp +0 8 1 1 2 0 0 2 0 0 +fn=_GLOBAL__sub_I_cxx_mpool.cpp +0 8 1 1 2 0 0 2 0 0 +fn=_GLOBAL__sub_I_cxx_txn.cpp +0 8 1 1 2 0 0 2 0 0 +fn=_GLOBAL__sub_I_eventHTTP +0 96 11 11 11 0 0 45 3 3 +fn=_GLOBAL__sub_I_fDiscover +0 317 36 36 14 1 0 163 17 15 +fn=_GLOBAL__sub_I_fGridnode +0 154 17 17 12 0 0 69 7 7 +fn=_GLOBAL__sub_I_fTestNet +0 10 2 2 3 0 0 1 0 0 +fn=_GLOBAL__sub_I_mapAccumulatorValues +0 82 9 9 9 0 0 41 3 3 +fn=_GLOBAL__sub_I_mapAlerts +0 85 9 9 11 0 0 39 2 2 +fn=_GLOBAL__sub_I_mapSeenGridnodeScanningErrors +0 85 10 10 9 0 0 43 3 3 +fn=_GLOBAL__sub_I_mapTxLockReq +0 125 14 14 9 0 0 67 7 7 +fn=_GLOBAL__sub_I_GridnodeConfig +0 72 8 8 9 0 0 35 2 2 +fn=_GLOBAL__sub_I_GridnodePayments +0 116 13 13 9 0 0 60 5 5 +fn=_GLOBAL__sub_I_GridnodeSync +0 81 9 9 9 0 0 39 2 2 +fn=_GLOBAL__sub_I_mnodeman +0 71 7 7 9 0 0 33 2 2 +fn=_GLOBAL__sub_I_nConnectTimeout +0 113 9 9 11 1 0 48 4 4 +fn=_GLOBAL__sub_I_nLastBlockTx +0 79 9 9 12 2 0 41 4 4 +fn=_GLOBAL__sub_I_nMaxDatacarrierBytes +0 65 7 7 9 0 0 31 1 1 +fn=_GLOBAL__sub_I_nWalletDBUpdated +0 75 8 8 11 0 0 33 2 2 +fn=_GLOBAL__sub_I_nWalletUnlockTime +0 71 7 7 9 0 0 33 2 2 +fn=_GLOBAL__sub_I_obfuScationPool +0 192 22 21 26 0 0 110 7 7 +fn=_GLOBAL__sub_I_operations.cpp +0 22 3 3 4 1 0 12 2 2 +fn=_GLOBAL__sub_I_payTxFee +0 93 10 10 11 0 0 47 5 5 +fn=_GLOBAL__sub_I_pwalletMain +0 128 14 14 13 0 0 62 6 6 +fn=_GLOBAL__sub_I_sporkManager +0 106 12 12 9 0 0 56 5 5 +fn=_GLOBAL__sub_I_thread.cpp +0 14 1 1 6 0 0 1 0 0 +fn=_GLOBAL__sub_I_univalue.cpp +0 16 2 2 0 0 0 10 2 2 +fn=_GLOBAL__sub_I_value_semantic.cpp +0 10 1 1 1 1 0 1 0 0 +fn=_Unwind_DeleteException +0 7 1 1 1 0 0 0 0 0 +fn=_Unwind_Find_FDE +0 294 3 3 84 1 1 112 0 0 +fn=_Unwind_GetCFA +0 12 1 1 8 0 0 0 0 0 +fn=_Unwind_GetIPInfo +0 21 1 1 9 0 0 3 0 0 +fn=_Unwind_GetLanguageSpecificData +0 9 1 1 6 0 0 0 0 0 +fn=_Unwind_GetRegionStart +0 9 0 0 6 0 0 0 0 0 +fn=_Unwind_RaiseException +0 204 15 15 62 1 0 55 0 0 +fn=_Unwind_SetGR +0 34 1 1 10 0 0 2 0 0 +fn=_Unwind_SetIP +0 3 0 0 1 0 0 1 0 0 +fn=_ZNSt7codecvtIDiDu11__mbstate_tED0Ev +0 14 0 0 2 0 0 4 0 0 +fn=_ZNSt7codecvtIDiDu11__mbstate_tED1Ev +0 10 0 0 0 0 0 2 0 0 +fn=_ZNSt7codecvtIDsDu11__mbstate_tED0Ev +0 14 4 4 2 0 0 4 0 0 +fn=_ZNSt7codecvtIDsDu11__mbstate_tED1Ev +0 10 2 2 0 0 0 2 0 0 +fn=_[abi:cxx11](char const*) +0 115 5 5 27 1 1 27 0 0 +fn=__cpu_indicator_init +0 61 7 7 6 2 2 5 0 0 +fn=__cxa_allocate_exception +0 35 2 2 2 0 0 19 1 1 +fn=__cxa_begin_catch +0 28 2 2 7 1 0 5 0 0 +fn=__cxa_end_catch +0 20 2 2 4 0 0 2 0 0 +fn=__cxa_free_exception +0 9 1 1 2 1 1 0 0 0 +fn=__cxa_get_globals +0 14 1 1 2 0 0 2 0 0 +fn=__cxa_get_globals_fast +0 7 1 1 1 0 0 1 0 0 +fn=__cxa_guard_acquire +0 190 14 4 60 2 0 20 0 0 +fn=__cxa_guard_release +0 80 7 2 40 0 0 0 0 0 +fn=__cxa_init_primary_exception +0 17 1 1 2 0 0 10 0 0 +fn=__cxa_throw +0 18 2 2 1 1 1 7 0 0 +fn=__cxxabiv1::__class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const +0 19 2 2 7 0 0 4 0 0 +fn=__cxxabiv1::__si_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const +0 7918 25 6 2354 1 0 1926 1 0 +fn=__cxxabiv1::__vmi_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const +0 7973 77 14 2856 9 3 2023 17 1 +fn=__db_env_destroy +0 301 3 3 4 0 0 270 24 24 +fn=__db_isbigendian +0 3 1 1 1 0 0 0 0 0 +fn=__dynamic_cast +0 17316 37 8 6327 61 15 3663 6 1 +fn=__env_close +0 47 8 8 14 3 3 8 0 0 +fn=__env_close_pp +0 40 6 6 12 4 4 7 0 0 +fn=__env_ref_decrement +0 6 3 3 2 0 0 0 0 0 +fn=__env_refresh +0 103 15 15 26 1 1 18 1 0 +fn=__gnu_cxx::__enable_if::__value, bool>::__type std::operator==(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&) +0 22 3 3 8 0 0 2 0 0 +fn=__gnu_cxx::__normal_iterator, std::allocator > const*, std::vector, std::allocator >, std::allocator, std::allocator > > > > std::__find_if<__gnu_cxx::__normal_iterator, std::allocator > const*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, __gnu_cxx::__ops::_Iter_equals_val, std::allocator > const> >(__gnu_cxx::__normal_iterator, std::allocator > const*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, __gnu_cxx::__normal_iterator, std::allocator > const*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, __gnu_cxx::__ops::_Iter_equals_val, std::allocator > const>, std::random_access_iterator_tag) +0 38 4 4 9 0 0 6 0 0 +fn=__gnu_cxx::stdio_sync_filebuf >::sync() +0 9 1 1 3 2 2 0 0 0 +fn=__gnu_cxx::stdio_sync_filebuf >::sync() +0 9 0 0 3 2 2 0 0 0 +fn=__gxx_personality_v0 +0 531 20 20 106 0 0 113 0 0 +fn=__libc_csu_init +0 867 6 2 127 21 0 127 0 0 +fn=__lock_env_create +0 16 2 2 2 0 0 5 0 0 +fn=__lock_env_destroy +0 5 2 2 2 1 1 0 0 0 +fn=__log_env_create +0 5 1 1 1 0 0 2 0 0 +fn=__log_env_destroy +0 2 1 1 1 0 0 0 0 0 +fn=__memp_env_create +0 6 2 2 1 0 0 3 0 0 +fn=__memp_env_destroy +0 2 1 1 1 0 0 0 0 0 +fn=__mutex_free +0 24 1 1 8 0 0 0 0 0 +fn=__os_calloc +0 44 2 2 10 0 0 10 0 0 +fn=__os_cpu_count +0 9 2 2 1 0 0 1 0 0 +fn=__os_free +0 18 1 1 2 1 1 0 0 0 +fn=__os_id +0 18 2 2 3 0 0 4 0 0 +fn=__os_malloc +0 60 3 3 12 1 1 14 0 0 +fn=__static_initialization_and_destruction_0(int, int) +0 160 9 9 40 0 0 40 0 0 +fn=__static_initialization_and_destruction_0(int, int) [clone .constprop.0] +0 1065 57 53 166 6 0 295 7 4 +fn=__tcf_0 +0 1682 2 2 276 169 169 49 0 0 +fn=__txn_env_create +0 4 1 1 1 0 0 1 0 0 +fn=__txn_env_destroy +0 2 1 1 1 0 0 0 0 0 +fn=_gnutls_global_init_skip +0 6 2 2 2 0 0 0 0 0 +fn=_gnutls_supplemental_deinit +0 16 3 3 8 0 0 6 0 0 +fn=_start +0 12 1 1 2 1 0 3 0 0 +fn=asn1_array2tree +0 27966 13 13 4929 232 53 3106 0 0 +fn=asn1_check_version +0 13 2 2 2 0 0 2 0 0 +fn=asn1_delete_structure +0 10 1 1 0 0 0 0 0 0 +fn=asn1_find_node +0 57549 9 9 15916 92 0 1729 2 0 +fn=atoi(std::__cxx11::basic_string, std::allocator > const&) +0 14 1 1 5 0 0 2 0 0 +fn=atoi64(std::__cxx11::basic_string, std::allocator > const&) +0 13 1 1 4 0 0 1 0 0 +fn=base_uint<256u>::SetHex(char const*) +0 24974 40 5 3997 0 0 3986 0 0 +fn=base_uint<256u>::SetHex(std::__cxx11::basic_string, std::allocator > const&) +0 275 8 1 100 0 0 25 0 0 +fn=base_uint<256u>::base_uint(std::__cxx11::basic_string, std::allocator > const&) +0 250 16 2 75 0 0 25 0 0 +fn=base_uint<256u>::operator>>=(unsigned int) +0 1015 20 4 185 0 0 75 0 0 +fn=blake64 +0 26210 1860 186 4210 0 0 2390 81 23 +fn=blake64_close +0 1260 80 8 240 0 0 240 10 2 +fn=bmw64 +0 594 55 5 143 0 0 121 0 0 +fn=bmw64_close +0 2178 66 6 396 0 0 473 1 0 +fn=bool (anonymous namespace)::sanity_test_memcpy<1025u>() +0 9762 4 4 1544 1 1 1539 11 9 +fn=bool boost::interprocess::ipcdetail::try_based_timed_lock(boost::interprocess::file_lock&, boost::posix_time::ptime const&) +0 702679 23 23 93897 2 2 50829 0 0 +fn=bool std::has_facet >(std::locale const&) +0 22 1 1 9 0 0 3 0 0 +fn=bool std::has_facet >(std::locale const&) +0 836 17 4 342 3 0 114 0 0 +fn=bool std::has_facet >(std::locale const&) +0 88 2 2 36 2 0 12 0 0 +fn=bool std::has_facet > > >(std::locale const&) +0 836 12 2 342 5 1 114 0 0 +fn=bool std::has_facet > > >(std::locale const&) +0 88 1 1 36 0 0 12 0 0 +fn=bool std::has_facet > > >(std::locale const&) +0 836 22 4 342 9 2 114 0 0 +fn=bool std::has_facet > > >(std::locale const&) +0 88 2 2 36 1 0 12 0 0 +fn=boost::assign_detail::generic_list::type, boost::assign_detail::assign_decay::type> > boost::assign::map_list_of(int const&, uint256 const&) +0 534 9 9 117 0 0 141 3 1 +fn=boost::assign_detail::generic_list::type, boost::assign_detail::assign_decay::type> > boost::assign::map_list_of(int const&, unsigned int const&) +0 100 9 9 28 0 0 35 0 0 +fn=boost::chrono::steady_clock::now() +0 15 2 2 6 0 0 2 0 0 +fn=boost::condition_variable::condition_variable() +0 294 11 5 49 0 0 63 0 0 +fn=boost::condition_variable::~condition_variable() +0 56 2 2 10 0 0 8 0 0 +fn=boost::date_time::c_time::gmtime(long const*, tm*) +0 380 23 4 140 0 0 100 0 0 +fn=boost::date_time::counted_time_rep::counted_time_rep(boost::gregorian::date const&, boost::posix_time::time_duration const&) +0 36 4 4 6 0 0 3 0 0 +fn=boost::date_time::counted_time_rep::date() const +0 272 20 5 20 0 0 20 0 0 +fn=boost::date_time::counted_time_system >::get_time_of_day(boost::date_time::counted_time_rep const&) +0 120 12 3 20 0 0 8 0 0 +fn=boost::date_time::counted_time_system >::subtract_times(boost::date_time::counted_time_rep const&, boost::date_time::counted_time_rep const&) +0 570 12 6 114 0 0 38 0 0 +fn=boost::date_time::date_facet > >::date_facet(char const*, boost::date_time::period_formatter > >, boost::date_time::special_values_formatter > >, boost::date_time::date_generator_formatter > >, unsigned long) +0 244 22 6 36 0 0 104 2 1 +fn=boost::date_time::date_facet > >::do_put_tm(std::ostreambuf_iterator >, std::ios_base&, char, tm const&, std::__cxx11::basic_string, std::allocator >) const +0 284 24 6 108 0 0 64 0 0 +fn=boost::date_time::date_facet > >::~date_facet() +0 172 12 3 28 1 0 44 0 0 +fn=boost::date_time::date_generator_formatter > >::date_generator_formatter() +0 472 36 10 72 0 0 116 0 0 +fn=boost::date_time::gregorian_calendar_base, unsigned int>::from_day_number(unsigned int) +0 1008 20 5 80 0 0 48 1 0 +fn=boost::date_time::microsec_clock::create_time(tm* (*)(long const*, tm*)) +0 2360 72 22 340 3 2 160 0 0 +fn=boost::date_time::period_formatter > >::period_formatter(boost::date_time::period_formatter > > const&) +0 416 12 3 144 0 0 120 4 2 +fn=boost::date_time::period_formatter > >::~period_formatter() +0 348 11 3 108 0 0 24 0 0 +fn=boost::date_time::time_facet > >::put(std::ostreambuf_iterator >, std::ios_base&, char, boost::posix_time::ptime const&) const +0 1016 111 29 172 4 2 248 4 2 +fn=boost::date_time::time_facet > >::~time_facet() +0 92 6 2 20 0 0 16 0 0 +fn=boost::detail::(anonymous namespace)::create_current_thread_tls_key() +0 4 1 1 0 0 0 0 0 0 +fn=boost::detail::function::function_invoker3, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), bool, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int>::invoke(boost::detail::function::function_buffer&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int) +0 15 2 2 4 1 1 1 0 0 +fn=boost::detail::get_current_thread_data() +0 39 4 2 4 0 0 6 0 0 +fn=boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*) +0 35 3 3 8 0 0 10 0 0 +fn=boost::detail::sp_counted_base::release() +0 3586 17 6 1793 208 176 423 1 0 +fn=boost::detail::sp_counted_base::weak_release() +0 288 3 3 128 4 3 16 0 0 +fn=boost::detail::sp_counted_impl_p >::dispose() +0 37 4 4 9 2 2 8 0 0 +fn=boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p >::dispose() +0 37 4 4 9 2 2 8 0 0 +fn=boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> >::dispose() +0 37 4 4 10 3 0 6 0 0 +fn=boost::detail::sp_counted_impl_p >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> >::dispose() +0 37 3 3 10 3 2 6 0 0 +fn=boost::detail::sp_counted_impl_p >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 2 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 2 2 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 3 3 6 2 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 2 2 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 88 2 2 24 4 3 16 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 44 1 1 12 0 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 3 3 6 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 2 2 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 44 2 2 12 2 2 8 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 22 2 2 6 0 0 2 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 3 3 6 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 2 2 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 0 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 0 0 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 0 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 44 2 2 12 2 1 8 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 22 1 1 6 0 0 2 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 0 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 2 2 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 66 3 3 18 3 3 12 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 33 2 1 9 0 0 3 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 22 2 2 6 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 3 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 41 3 3 16 4 4 7 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 3 3 7 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 41 3 3 16 6 4 7 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex> >::dispose() +0 25 1 1 7 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::invocation_state>::dispose() +0 25 3 3 7 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 3 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 41 4 4 16 4 4 7 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 1 1 7 3 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 0 0 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 41 4 3 16 5 5 7 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex> >::dispose() +0 25 3 3 7 2 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::invocation_state>::dispose() +0 55 4 4 26 4 4 7 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 100 3 3 28 8 5 16 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 44 1 1 12 0 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 100 3 3 28 3 2 16 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 44 1 1 12 0 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 2 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 2 2 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 41 3 3 16 4 4 7 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 41 2 2 16 4 3 7 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 41 4 4 16 5 4 7 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 50 2 2 14 3 3 8 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 22 1 1 6 0 0 2 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 50 2 2 14 1 1 8 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 22 1 1 6 0 0 2 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 2 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 25 2 2 7 0 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 2 2 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 25 2 2 7 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 0 0 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 25 3 3 7 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 50 3 3 14 4 1 8 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 22 1 1 6 0 0 2 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 50 2 2 14 0 0 8 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 22 1 1 6 0 0 2 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 3 3 7 1 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 2 2 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 41 4 4 16 4 3 7 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 25 1 1 7 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex> >::dispose() +0 25 2 2 7 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex>::invocation_state>::dispose() +0 25 3 3 7 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex> >::dispose() +0 25 3 3 7 3 3 4 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex>::invocation_state>::dispose() +0 25 2 2 7 0 0 4 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 75 3 3 21 6 4 12 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 33 1 1 9 0 0 3 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 75 5 3 21 3 1 12 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 33 2 1 9 0 0 3 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +0 25 2 2 7 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +0 25 3 3 7 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p >::dispose() +0 14 2 2 4 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p::dispose() +0 588 2 2 140 7 7 84 0 0 +fn=boost::detail::sp_counted_impl_p::~sp_counted_impl_p() +0 308 1 1 84 0 0 28 0 0 +fn=boost::detail::sp_counted_impl_p >::dispose() +0 42 2 2 12 2 2 3 0 0 +fn=boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +0 33 2 2 9 0 0 3 0 0 +fn=boost::detail::sp_counted_impl_p >::dispose() +0 14 1 1 4 1 1 1 0 0 +fn=boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > > >::dispose() +0 14 1 1 4 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p >::dispose() +0 308 1 1 88 7 7 22 0 0 +fn=boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +0 242 1 1 66 0 0 22 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> > >::dispose() +0 34 4 4 11 1 0 5 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> > >::~sp_counted_impl_p() +0 11 2 2 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&), boost::function, std::allocator > const&)> > >::dispose() +0 32 3 3 10 1 1 4 0 0 +fn=boost::detail::sp_counted_impl_p, std::allocator > const&), boost::function, std::allocator > const&)> > >::~sp_counted_impl_p() +0 11 1 1 3 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_pd::dispose() +0 10 1 1 4 0 0 1 0 0 +fn=boost::detail::sp_counted_impl_pd::~sp_counted_impl_pd() +0 11 1 1 3 0 0 1 0 0 +fn=boost::exception_detail::bad_alloc_::~bad_alloc_() +0 52 3 3 14 0 0 14 0 0 +fn=boost::exception_detail::bad_exception_::~bad_exception_() +0 52 2 2 14 0 0 14 0 0 +fn=boost::exception_detail::copy_boost_exception(boost::exception*, boost::exception const*) +0 74 3 3 30 0 0 20 0 0 +fn=boost::exception_ptr boost::exception_detail::get_static_exception_object() +0 121 11 11 26 1 1 54 1 1 +fn=boost::exception_ptr boost::exception_detail::get_static_exception_object() +0 121 11 11 26 0 0 54 0 0 +fn=boost::exception_ptr::~exception_ptr() +0 92 3 3 44 7 6 10 0 0 +fn=boost::filesystem::detail::create_directories(boost::filesystem::path const&, boost::system::error_code*) +0 120 14 14 36 2 1 24 0 0 +fn=boost::filesystem::detail::dot_dot_path() +0 30 1 1 4 1 1 7 0 0 +fn=boost::filesystem::detail::dot_path() +0 29 2 2 4 1 1 6 0 0 +fn=boost::filesystem::detail::file_size(boost::filesystem::path const&, boost::system::error_code*) +0 114 18 6 39 0 0 24 0 0 +fn=boost::filesystem::detail::lex_compare(boost::filesystem::path::iterator, boost::filesystem::path::iterator, boost::filesystem::path::iterator, boost::filesystem::path::iterator) +0 248 7 7 88 0 0 44 0 0 +fn=boost::filesystem::detail::remove(boost::filesystem::path const&, boost::system::error_code*) +0 50 6 6 14 1 0 9 0 0 +fn=boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*) +0 145 12 12 38 0 0 36 0 0 +fn=boost::filesystem::directory_iterator::~directory_iterator() +0 7 1 1 3 1 1 1 0 0 +fn=boost::filesystem::operator/(boost::filesystem::path const&, boost::filesystem::path const&) +0 29 3 3 9 0 0 7 0 0 +fn=boost::filesystem::path::begin() const +0 880 9 9 188 0 0 152 0 0 +fn=boost::filesystem::path::compare(boost::filesystem::path const&) const +0 272 5 5 68 0 0 84 0 0 +fn=boost::filesystem::path::extension() const +0 71 7 7 12 0 0 17 1 1 +fn=boost::filesystem::path::filename() const +0 272 17 17 64 0 0 52 0 0 +fn=boost::filesystem::path::imbue(std::locale const&) +0 60 6 3 11 2 1 12 0 0 +fn=boost::filesystem::path::operator/=(boost::filesystem::path const&) +0 578 37 12 186 0 0 103 0 0 +fn=boost::filesystem::path::root_directory() const +0 66 4 4 22 0 0 16 0 0 +fn=boost::filesystem::path::stem() const +0 88 11 11 17 0 0 21 0 0 +fn=boost::filesystem::path::~path() +0 58 4 2 18 3 0 4 0 0 +fn=boost::gregorian::date::date(boost::date_time::special_values) +0 20 2 2 5 1 1 2 0 0 +fn=boost::gregorian::date::date(boost::gregorian::greg_year, boost::gregorian::greg_month, boost::gregorian::greg_day) +0 1701 47 10 216 3 2 135 1 0 +fn=boost::gregorian::to_tm(boost::gregorian::date const&) +0 528 42 11 52 0 0 100 1 1 +fn=boost::interprocess::file_lock::file_lock(char const*) +0 23 2 2 7 0 0 6 0 0 +fn=boost::interprocess::file_lock::~file_lock() +0 14 2 2 5 0 0 2 0 0 +fn=boost::mutex::unlock() +0 40 4 2 10 0 0 6 0 0 +fn=boost::program_options::detail::(anonymous namespace)::trim_ws(std::__cxx11::basic_string, std::allocator > const&) +0 2311 6 6 443 0 0 477 0 0 +fn=boost::program_options::detail::basic_config_file_iterator::basic_config_file_iterator(std::istream&, std::set, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > > > const&, bool) +0 39 4 4 8 0 0 15 0 0 +fn=boost::program_options::detail::basic_config_file_iterator::getline(std::__cxx11::basic_string, std::allocator >&) +0 752 9 5 240 1 0 153 0 0 +fn=boost::program_options::detail::common_config_file_iterator::add_option(char const*) +0 67 7 7 19 0 0 17 0 0 +fn=boost::program_options::detail::common_config_file_iterator::allowed_option(std::__cxx11::basic_string, std::allocator > const&) const +0 957 6 6 253 0 0 132 0 0 +fn=boost::program_options::detail::common_config_file_iterator::common_config_file_iterator(std::set, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > > > const&, bool) +0 91 7 7 15 0 0 38 0 0 +fn=boost::program_options::detail::common_config_file_iterator::get() +0 3630 52 36 790 1 0 841 0 0 +fn=boost::program_options::detail::utf8_codecvt_facet::utf8_codecvt_facet(unsigned long) +0 8 2 2 2 0 0 3 0 0 +fn=boost::program_options::detail::utf8_codecvt_facet::~utf8_codecvt_facet() +0 4 1 1 0 0 0 1 1 1 +fn=boost::program_options::to_internal(std::__cxx11::basic_string, std::allocator > const&) +0 500 7 4 130 0 0 126 0 0 +fn=boost::recursive_mutex::recursive_mutex() +0 1406 29 8 259 0 0 296 1 0 +fn=boost::recursive_mutex::unlock() +0 160 7 2 40 0 0 24 0 0 +fn=boost::scoped_ptr::~scoped_ptr() +0 15 3 3 6 1 0 2 0 0 +fn=boost::shared_mutex::state_data::can_lock_shared() const +0 14 2 2 6 0 0 1 0 0 +fn=boost::shared_ptr::shared_ptr(boost::signals2::mutex*) +0 377 6 3 91 0 0 130 0 0 +fn=boost::signals2::detail::auto_buffer, boost::signals2::detail::store_n_objects<10u>, boost::signals2::detail::default_grow_policy, std::allocator > >::auto_buffer_destroy() +0 272 12 6 80 0 0 32 0 0 +fn=boost::signals2::detail::auto_buffer, boost::signals2::detail::foreign_void_shared_ptr>, boost::signals2::detail::store_n_objects<10u>, boost::signals2::detail::default_grow_policy, std::allocator, boost::signals2::detail::foreign_void_shared_ptr> > >::auto_buffer_destroy() +0 34 2 2 10 0 0 4 0 0 +fn=boost::signals2::detail::connection_body >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex>::lock() +0 32 2 1 10 2 1 4 0 0 +fn=boost::signals2::detail::connection_body >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex>::unlock() +0 32 4 2 10 0 0 4 0 0 +fn=boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +0 43 5 5 13 0 0 16 0 0 +fn=boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +0 43 6 6 13 0 0 16 1 1 +fn=boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +0 43 6 6 13 0 0 16 0 0 +fn=boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +0 43 6 6 13 0 0 16 0 0 +fn=boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +0 86 6 6 26 0 0 32 1 1 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 131 12 12 20 0 0 59 1 1 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 131 12 12 20 0 0 59 1 1 +fn=boost::signals2::detail::signal_impl, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::nolock_cleanup_connections_from(boost::signals2::detail::garbage_collecting_lock&, bool, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > const&, unsigned int) const +0 116 9 9 39 2 2 22 0 0 +fn=boost::signals2::detail::signal_impl, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::nolock_force_unique_connection_list(boost::signals2::detail::garbage_collecting_lock&) +0 55 6 6 19 2 0 11 0 0 +fn=boost::signals2::detail::signal_impl, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::operator()(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int) +0 196 23 20 58 8 4 52 2 0 +fn=boost::signals2::detail::signal_impl, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::signal_impl(boost::signals2::last_value const&, std::less const&) +0 122 11 11 19 0 0 53 1 1 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 131 12 12 20 0 0 59 1 1 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 131 12 12 20 0 0 59 2 0 +fn=boost::signals2::detail::signal_impl, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::nolock_cleanup_connections_from(boost::signals2::detail::garbage_collecting_lock&, bool, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > const&, unsigned int) const +0 90 6 5 30 0 0 20 0 0 +fn=boost::signals2::detail::signal_impl, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::operator()(char const*) +0 316 23 20 86 4 4 88 0 0 +fn=boost::signals2::detail::signal_impl, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value, std::allocator > > const&, std::less const&) +0 122 12 12 19 0 0 53 0 0 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::nolock_cleanup_connections_from(boost::signals2::detail::garbage_collecting_lock&, bool, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > const&, unsigned int) const +0 47 4 4 16 0 0 11 0 0 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::operator()() +0 130 14 14 38 3 3 41 0 0 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 372 24 12 57 0 0 162 2 2 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 262 12 12 40 0 0 118 0 0 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 124 12 12 19 0 0 54 0 0 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 248 24 12 38 0 0 108 1 1 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 131 12 12 20 0 0 59 0 0 +fn=boost::signals2::detail::signal_impl, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex>::nolock_cleanup_connections_from(boost::signals2::detail::garbage_collecting_lock&, bool, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > const&, unsigned int) const +0 47 4 4 16 0 0 11 0 0 +fn=boost::signals2::detail::signal_impl, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex>::nolock_force_unique_connection_list(boost::signals2::detail::garbage_collecting_lock&) +0 55 6 6 19 2 0 11 0 0 +fn=boost::signals2::detail::signal_impl, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 124 12 12 19 0 0 54 0 0 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::disconnect_all_slots() +0 96 5 5 34 6 6 20 0 0 +fn=boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 124 11 11 19 0 0 54 1 1 +fn=boost::signals2::detail::slot_call_iterator_t, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int>, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> >::lock_next_callable() const +0 175 15 10 74 5 3 42 1 0 +fn=boost::signals2::detail::slot_call_iterator_t, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> >::lock_next_callable() const +0 52 3 3 24 0 0 14 0 0 +fn=boost::signals2::detail::slot_call_iterator_t, std::allocator >, char const*>, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> >::lock_next_callable() const +0 104 5 4 48 0 0 28 0 0 +fn=boost::signals2::mutex::lock() +0 130 4 2 40 0 0 20 0 0 +fn=boost::signals2::mutex::unlock() +0 130 4 2 40 0 0 20 0 0 +fn=boost::system::error_category::failed(int) const +0 12 1 1 4 0 0 1 0 0 +fn=boost::system::system_category() +0 35 3 3 7 1 1 7 0 0 +fn=boost::this_thread::disable_interruption::disable_interruption() +0 9 1 1 2 0 0 3 0 0 +fn=boost::this_thread::disable_interruption::~disable_interruption() +0 8 1 1 2 0 0 2 0 0 +fn=boost::this_thread::interruption_enabled() +0 9 1 1 1 0 0 1 0 0 +fn=boost::this_thread::interruption_point() +0 11 1 1 4 0 0 4 0 0 +fn=boost::thread::detach() +0 32 3 3 12 2 1 8 0 0 +fn=boost::thread::hardware_concurrency() +0 9 2 2 1 0 0 1 0 0 +fn=boost::thread::thread() +0 8 1 1 2 0 0 2 0 0 +fn=boost::thread::~thread() +0 38 2 2 14 0 0 8 0 0 +fn=boost::thread_detail::commit_once_region(boost::once_flag&) +0 69 6 4 6 0 0 15 0 0 +fn=boost::thread_detail::enter_once_region(boost::once_flag&) +0 219 17 6 66 7 2 42 0 0 +fn=boost::thread_group::~thread_group() +0 83 6 6 11 0 0 13 0 0 +fn=boost::unique_lock::lock() +0 120 6 2 36 0 0 24 1 0 +fn=boost::unordered::unordered_map, std::allocator > >::~unordered_map() +0 20 3 3 8 0 0 3 0 0 +fn=compress_big +0 36520 1122 102 7898 19 3 2046 0 0 +fn=convertSeed6(std::vector >&, SeedSpec6 const*, unsigned int) +0 25382 36 6 7880 207 56 7940 501 280 +fn=db_env_create +0 424 44 44 14 0 0 196 0 0 +fn=default_malloc_ex +0 1574 9 2 787 0 0 0 0 0 +fn=ecdsa_signature_parse_der_lax(secp256k1_context_struct const*, secp256k1_ecdsa_signature*, unsigned char const*, unsigned long) +0 187 14 14 27 0 0 22 0 0 +fn=engine_table_select +0 30520 33 6 12208 10 3 6104 2 1 +fn=final +0 7625 10 2 1525 0 0 0 0 0 +fn=glibc_sanity_test() +0 31 2 2 4 0 0 18 1 1 +fn=glibcxx_sanity_test() +0 2554 8 7 512 4 3 712 0 0 +fn=groestl_big_close +0 100342 707 101 33121 0 0 4631 0 0 +fn=groestl_big_core +0 190927 1365 195 65956 1222 257 5797 4 2 +fn=init +0 4575 9 2 1525 0 0 0 0 0 +fn=int LogPrint(char const*, char const*, long const&) [clone .constprop.0] +0 46 4 2 14 0 0 10 0 0 +fn=int LogPrint, std::allocator > >(char const*, char const*, std::__cxx11::basic_string, std::allocator > const&) +0 44 4 1 14 0 0 10 0 0 +fn=int LogPrint, std::allocator > >(char const*, char const*, std::__cxx11::basic_string, std::allocator > const&) [clone .constprop.0] +0 46 4 4 14 0 0 10 0 0 +fn=jh_close +0 1690 156 10 533 0 0 559 0 0 +fn=jh_core +0 257738 12499 548 20384 0 0 15158 0 0 +fn=keccak_core +0 49528 1036 148 10752 13 3 6512 0 0 +fn=ldap_int_tls_destroy +0 32 5 5 11 2 2 1 0 0 +fn=limitedmap::~limitedmap() +0 18 2 2 6 2 2 3 0 0 +fn=locking_callback(int, int, char const*, int) +0 658 10 6 196 6 2 84 0 0 +fn=main +0 23 5 4 6 0 0 6 0 0 +fn=nonce_function_rfc6979 +0 69 5 5 13 0 0 26 0 0 +fn=noui_ThreadSafeMessageBox(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int) +0 186 20 17 49 3 1 50 0 0 +fn=noui_connect() +0 380 44 44 90 7 0 142 2 1 +fn=operator delete(void*) +0 3770 16 2 0 0 0 0 0 0 +fn=operator delete(void*, unsigned long) +0 680 2 0 0 0 0 0 0 0 +fn=operator delete[](void*) +0 246 3 2 0 0 0 0 0 0 +fn=operator new(unsigned long) +0 20746 24 2 3772 0 0 3772 0 0 +fn=operator new[](unsigned long) +0 246 7 2 0 0 0 0 0 0 +fn=sanity_test_range_fmt() +0 20 1 1 1 0 0 8 0 0 +fn=sanity_test_range_fmt() [clone .cold] +0 18 2 2 7 2 0 2 0 0 +fn=secp256k1_context_create +0 704744 26 22 49211 9 4 147538 5 3 +fn=secp256k1_context_destroy +0 20 1 1 4 2 0 4 0 0 +fn=secp256k1_context_randomize +0 10 2 2 2 0 0 1 0 0 +fn=secp256k1_ec_pubkey_create +0 103 8 8 27 1 1 32 3 1 +fn=secp256k1_ec_pubkey_parse +0 63 6 6 13 0 0 15 0 0 +fn=secp256k1_ec_pubkey_serialize +0 128 9 9 20 0 0 25 0 0 +fn=secp256k1_ec_seckey_verify +0 26 3 3 9 0 0 2 0 0 +fn=secp256k1_ecdsa_sig_sign +0 174 15 15 28 1 0 56 1 0 +fn=secp256k1_ecdsa_sig_verify +0 115 9 9 31 0 0 31 3 3 +fn=secp256k1_ecdsa_sign +0 117 10 10 35 2 0 25 2 0 +fn=secp256k1_ecdsa_signature_normalize +0 75 6 6 16 0 0 11 0 0 +fn=secp256k1_ecdsa_signature_parse_compact +0 96 4 4 28 0 0 24 0 0 +fn=secp256k1_ecdsa_signature_serialize_der +0 175 12 12 26 0 0 33 2 0 +fn=secp256k1_ecdsa_verify +0 94 6 6 18 1 0 13 0 0 +fn=secp256k1_ecmult_gen +0 193768 50 26 35400 4105 2051 4692 4 4 +fn=secp256k1_ecmult_gen_blind +0 589 45 27 122 8 3 134 5 0 +fn=secp256k1_ecmult_odd_multiples_table.constprop.1 +0 162 9 9 30 0 0 42 8 8 +fn=secp256k1_ecmult_strauss_wnaf.isra.0.constprop.0 +0 15313 58 57 3804 32 0 1755 7 7 +fn=secp256k1_ecmult_wnaf.constprop.0 +0 3880 6 6 159 0 0 332 5 5 +fn=secp256k1_fe_get_b32 +0 198 10 5 70 0 0 64 1 0 +fn=secp256k1_fe_inv +0 109485 173 159 6570 0 0 5931 1 0 +fn=secp256k1_fe_mul_inner +0 43153128 37 26 8390886 42698 10329 2796962 38941 38935 +fn=secp256k1_fe_normalize +0 142 4 4 16 0 0 14 0 0 +fn=secp256k1_fe_normalize_var +0 168 7 3 24 0 0 15 0 0 +fn=secp256k1_fe_normalize_weak +0 985830 7 4 197166 0 0 164305 0 0 +fn=secp256k1_fe_normalizes_to_zero +0 31529 15 8 4614 0 0 0 0 0 +fn=secp256k1_fe_normalizes_to_zero_var +0 246675 2 2 49335 0 0 0 0 0 +fn=secp256k1_fe_set_b32 +0 180 6 6 52 0 0 10 0 0 +fn=secp256k1_fe_sqr_inner +0 11442312 28 20 1157853 0 0 953526 26 21 +fn=secp256k1_ge_set_xo_var +0 36678 86 86 2222 0 0 1998 0 0 +fn=secp256k1_ge_to_storage +0 2867550 21 10 327720 22401 10241 278562 16385 16385 +fn=secp256k1_gej_add_ge +0 134400 135 78 36608 1 1 29184 13 13 +fn=secp256k1_gej_add_ge_var +0 3811520 42 42 1248560 0 0 919960 26631 26631 +fn=secp256k1_gej_double_var.part.0 +0 42752 28 28 13568 1 1 9472 3 3 +fn=secp256k1_gej_eq_x_var +0 115 8 8 17 0 0 6 0 0 +fn=secp256k1_hmac_sha256_initialize.constprop.0 +0 1197 14 10 210 3 2 525 6 0 +fn=secp256k1_pubkey_load +0 75 5 5 13 0 0 15 0 0 +fn=secp256k1_rfc6979_hmac_sha256_generate.constprop.0 +0 1492 80 54 210 0 0 260 0 0 +fn=secp256k1_rfc6979_hmac_sha256_initialize +0 2013 142 100 285 6 3 328 5 0 +fn=secp256k1_scalar_add +0 615 19 13 85 1 0 70 2 2 +fn=secp256k1_scalar_get_b32 +0 420 13 9 165 0 0 160 0 0 +fn=secp256k1_scalar_inverse +0 4704 38 38 60 0 0 1192 3 3 +fn=secp256k1_scalar_mul_512 +0 8970 7 7 1170 1 0 1092 2 2 +fn=secp256k1_scalar_reduce_512 +0 137240 14 14 13432 0 0 10512 9 9 +fn=secp256k1_scalar_set_b32 +0 1194 18 9 130 2 0 167 2 1 +fn=secp256k1_scalar_sqr_512 +0 48070 4 4 4554 0 0 6072 2 2 +fn=secp256k1_sha256_finalize +0 6301 36 27 1044 3 2 1192 0 0 +fn=secp256k1_sha256_transform +0 305100 421 334 17280 0 0 6300 6 1 +fn=secp256k1_sha256_write +0 424 11 6 112 2 1 102 0 0 +fn=sha1_block_data_order +0 27378 10 2 6084 11 1 0 0 0 +fn=sha1_block_data_order_avx +0 3075462 522 102 322452 19 4 85176 4 1 +fn=skein_big_close +0 23940 730 73 2280 0 0 950 0 0 +fn=skein_big_core +0 310 30 3 80 0 0 110 0 0 +fn=sph_blake512 +0 20 0 0 0 0 0 0 0 0 +fn=sph_blake512_addbits_and_close +0 80 0 0 10 0 0 20 0 0 +fn=sph_blake512_close +0 50 10 1 0 0 0 0 0 0 +fn=sph_blake512_init +0 340 30 3 140 12 3 180 10 2 +fn=sph_bmw512 +0 22 0 0 0 0 0 0 0 0 +fn=sph_bmw512_addbits_and_close +0 88 0 0 11 0 0 22 0 0 +fn=sph_bmw512_close +0 55 11 1 0 0 0 0 0 0 +fn=sph_bmw512_init +0 440 33 3 198 16 3 220 7 0 +fn=sph_groestl512 +0 22 0 0 0 0 0 0 0 0 +fn=sph_groestl512_close +0 66 7 1 0 0 0 0 0 0 +fn=sph_groestl512_init +0 6424 14 2 11 0 0 1606 6 0 +fn=sph_jh512 +0 26 13 1 0 0 0 0 0 0 +fn=sph_jh512_close +0 91 13 0 0 0 0 0 0 0 +fn=sph_jh512_init +0 260 39 3 117 12 2 130 11 2 +fn=sph_keccak512 +0 24 7 1 0 0 0 0 0 0 +fn=sph_keccak512_addbits_and_close +0 1808 42 6 184 0 0 432 0 0 +fn=sph_keccak512_close +0 40 7 1 0 0 0 0 0 0 +fn=sph_keccak512_init +0 904 21 3 8 0 0 264 6 0 +fn=sph_skein512 +0 20 0 0 0 0 0 0 0 0 +fn=sph_skein512_addbits_and_close +0 80 0 0 10 0 0 20 0 0 +fn=sph_skein512_close +0 50 10 1 0 0 0 0 0 0 +fn=sph_skein512_init +0 400 30 3 20 0 0 200 8 2 +fn=ssh_threads_get_default +0 3 1 1 1 0 0 0 0 0 +fn=ssleay_rand_add +0 20 2 1 0 0 0 0 0 0 +fn=ssleay_rand_add.part.0 +0 1485 33 18 333 3 3 191 0 0 +fn=ssleay_rand_bytes +0 252135 320 74 54489 21 3 51713 1 0 +fn=ssleay_rand_cleanup +0 16 2 2 1 0 0 7 1 0 +fn=ssleay_rand_nopseudo_bytes +0 2916 10 2 0 0 0 0 0 0 +fn=std::_Deque_base >::~_Deque_base() +0 576 18 3 198 0 0 90 0 0 +fn=std::_Deque_base, std::allocator > >::_M_initialize_map(unsigned long) +0 450 5 5 72 0 0 114 0 0 +fn=std::_Deque_base, std::allocator > >::~_Deque_base() +0 192 3 3 66 0 0 30 0 0 +fn=std::_Deque_base, std::allocator > >::_M_initialize_map(unsigned long) +0 124 4 4 24 0 0 38 1 0 +fn=std::_Deque_base, std::allocator > >::~_Deque_base() +0 64 2 2 22 0 0 10 0 0 +fn=std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 18 3 3 7 0 0 4 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 18 2 2 7 0 0 4 0 0 +fn=std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 40 2 2 16 0 0 10 0 0 +fn=std::_Rb_tree, (anonymous namespace)::CBlockIndexWorkComparator, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 15 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 16 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 20 3 3 8 0 0 5 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 16 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 96 4 2 36 0 0 18 0 0 +fn=std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 16 3 3 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 48 6 2 18 0 0 9 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree > >, std::pair > > const, boost::function >, std::_Select1st > > const, boost::function > >, std::less > > >, std::allocator > > const, boost::function > > >::_M_erase(std::_Rb_tree_node > > const, boost::function > >*) +0 18 3 3 7 0 0 4 0 0 +fn=std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 16 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 21 2 2 9 0 0 6 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 66 8 3 27 0 0 18 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 18 2 2 7 0 0 4 0 0 +fn=std::_Rb_tree, std::allocator > > >, std::_Select1st, std::allocator > > > >, std::less, std::allocator, std::allocator > > > > >::_M_erase(std::_Rb_tree_node, std::allocator > > > >*) +0 18 2 2 7 0 0 4 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 402 1 1 130 10 10 79 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 42 2 2 14 0 0 8 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_get_insert_unique_pos(int const&) +0 23 3 3 8 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_node(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node >*) +0 26 2 2 7 0 0 4 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 3 3 6 0 0 3 0 0 +fn=std::_Rb_tree > >, std::_Select1st > > >, std::less, std::allocator > > > >::_M_erase(std::_Rb_tree_node > > >*) +0 16 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_erase(std::_Rb_tree_node, std::allocator > >*) +0 189 3 3 65 0 0 38 0 0 +fn=std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_get_insert_unique_pos(std::__cxx11::basic_string, std::allocator > const&) +0 34 5 5 13 0 0 9 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, CRPCCommand const*>, std::_Select1st, std::allocator > const, CRPCCommand const*> >, std::less, std::allocator > >, std::allocator, std::allocator > const, CRPCCommand const*> > >::_M_erase(std::_Rb_tree_node, std::allocator > const, CRPCCommand const*> >*) +0 4319 2 2 1337 116 116 848 1 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, CRPCCommand const*>, std::_Select1st, std::allocator > const, CRPCCommand const*> >, std::less, std::allocator > >, std::allocator, std::allocator > const, CRPCCommand const*> > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator, std::allocator > const, CRPCCommand const*> >, std::__cxx11::basic_string, std::allocator > const&) +0 6629 5 5 1458 0 0 1176 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, CRPCCommand const*>, std::_Select1st, std::allocator > const, CRPCCommand const*> >, std::less, std::allocator > >, std::allocator, std::allocator > const, CRPCCommand const*> > >::_M_get_insert_unique_pos(std::__cxx11::basic_string, std::allocator > const&) +0 35 4 4 14 0 0 9 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, Db*>, std::_Select1st, std::allocator > const, Db*> >, std::less, std::allocator > >, std::allocator, std::allocator > const, Db*> > >::_M_erase(std::_Rb_tree_node, std::allocator > const, Db*> >*) +0 18 3 3 7 0 0 4 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, boost::shared_ptr >, std::_Select1st, std::allocator > const, boost::shared_ptr > >, std::less, std::allocator > >, std::allocator, std::allocator > const, boost::shared_ptr > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, boost::shared_ptr > >*) +0 40 6 3 16 0 0 10 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, int>, std::_Select1st, std::allocator > const, int> >, std::less, std::allocator > >, std::allocator, std::allocator > const, int> > >::_M_erase(std::_Rb_tree_node, std::allocator > const, int> >*) +0 18 3 3 7 0 0 4 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >*) +0 293 6 6 91 7 4 52 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::__cxx11::basic_string, std::allocator > const&) +0 277 10 5 73 0 0 52 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_get_insert_unique_pos(std::__cxx11::basic_string, std::allocator > const&) +0 34 4 4 13 0 0 9 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_insert_node(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >*) +0 218 3 3 57 0 0 40 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::find(std::__cxx11::basic_string, std::allocator > const&) const +0 5872 21 12 1585 13 6 749 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >*) +0 447 5 5 133 17 14 81 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::__cxx11::basic_string, std::allocator > const&) +0 277 9 5 73 0 0 52 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_unique_pos(std::__cxx11::basic_string, std::allocator > const&) +0 34 4 4 13 0 0 9 0 0 +fn=std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_insert_node(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >*) +0 182 6 2 48 0 0 33 0 0 +fn=std::_Rb_tree, std::pair, std::_Identity >, std::less >, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 1 1 6 0 0 3 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 3 3 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 5 5 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >*) +0 58 5 5 20 1 0 11 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > > >::_M_get_insert_unique_pos(std::pair > const&) +0 24 5 5 8 0 0 3 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 3 3 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 3 3 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > > >*) +0 32 4 4 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 128 8 4 48 0 0 24 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 3 3 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 5 5 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 5 5 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 64 5 5 24 0 0 12 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 3 3 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 5 5 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 5 5 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 64 8 5 24 0 0 12 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 4 4 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 5 5 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >*) +0 58 3 3 20 1 0 11 1 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > > >::_M_get_insert_unique_pos(std::pair > const&) +0 24 5 5 8 0 0 3 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > > >*) +0 32 4 4 12 0 0 6 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 96 5 3 36 0 0 18 0 0 +fn=std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 3 3 12 0 0 6 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 18 2 2 7 0 0 4 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 100 15 6 40 0 0 25 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 60 8 4 24 0 0 15 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 108 5 1 42 0 0 24 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 18 3 3 7 0 0 4 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 120 19 8 50 0 0 35 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 72 9 3 30 0 0 21 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 108 8 2 42 0 0 24 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 60 6 2 24 0 0 15 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 54 3 2 21 0 0 12 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 54 3 1 21 0 0 12 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 22 2 2 9 0 0 6 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 44 3 3 18 0 0 12 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 18 2 2 7 0 0 4 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 44 1 1 18 0 0 12 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 22 2 2 9 0 0 6 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 22 3 3 9 0 0 6 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 304 5 4 114 0 0 57 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 64 3 2 24 0 0 12 0 0 +fn=std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*) +0 16 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree > >, std::_Select1st > > >, std::less, std::allocator > > > >::_M_erase(std::_Rb_tree_node > > >*) +0 15 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_erase(std::_Rb_tree_node, std::allocator > > >*) +0 36 2 2 14 0 0 8 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 48 6 2 18 0 0 9 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 18 1 1 7 0 0 4 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 2 2 6 0 0 3 0 0 +fn=std::_Rb_tree_decrement(std::_Rb_tree_node_base const*) +0 110 16 2 55 0 0 0 0 0 +fn=std::_Rb_tree_decrement(std::_Rb_tree_node_base*) +0 2402 5 2 839 0 0 0 0 0 +fn=std::_Rb_tree_increment(std::_Rb_tree_node_base const*) +0 16 2 1 7 0 0 0 0 0 +fn=std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) +0 8475 48 16 2177 0 0 2040 0 0 +fn=std::_Rb_tree_iterator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_emplace_hint_unique, std::allocator > const&>, std::tuple<> >(std::_Rb_tree_const_iterator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::piecewise_construct_t const&, std::tuple, std::allocator > const&>&&, std::tuple<>&&) +0 357 14 4 84 0 0 98 4 4 +fn=std::_Rb_tree_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_emplace_hint_unique, std::allocator > const&>, std::tuple<> >(std::_Rb_tree_const_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::piecewise_construct_t const&, std::tuple, std::allocator > const&>&&, std::tuple<>&&) +0 288 3 3 66 0 0 78 3 3 +fn=std::_Rb_tree_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_emplace_hint_unique, std::allocator >&&>, std::tuple<> >(std::_Rb_tree_const_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::piecewise_construct_t const&, std::tuple, std::allocator >&&>&&, std::tuple<>&&) +0 60 6 6 14 0 0 18 0 0 +fn=std::_Rb_tree_node, std::allocator > >* std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_copy, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_Alloc_node>(std::_Rb_tree_node, std::allocator > > const*, std::_Rb_tree_node_base*, std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_Alloc_node&) +0 48 4 4 15 0 0 14 1 0 +fn=std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) +0 82 18 17 26 2 0 6 0 0 +fn=std::_V2::error_category::~error_category() +0 6 0 0 3 0 0 0 0 0 +fn=std::__basic_file::__basic_file(pthread_mutex_t*) +0 4 1 1 1 0 0 2 0 0 +fn=std::__basic_file::close() +0 25 1 1 6 0 0 6 0 0 +fn=std::__basic_file::fd() +0 6 0 0 2 0 0 0 0 0 +fn=std::__basic_file::is_open() const +0 24 1 0 12 0 0 0 0 0 +fn=std::__basic_file::open(char const*, std::_Ios_Openmode, int) +0 27 2 2 4 0 0 8 0 0 +fn=std::__basic_file::xsgetn(char*, long) +0 52 2 2 10 0 0 12 0 0 +fn=std::__basic_file::~__basic_file() +0 2 0 0 0 0 0 0 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >::_M_clear() +0 72 5 5 31 2 1 15 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > >::_M_clear() +0 46 6 6 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 184 12 6 80 0 0 48 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 3 3 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 92 4 4 40 0 0 24 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 92 7 4 40 0 0 24 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 6 6 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 3 3 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >::_M_clear() +0 72 5 5 31 2 2 15 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > >::_M_clear() +0 46 6 6 20 0 0 12 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 138 7 4 60 0 0 36 0 0 +fn=std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 4 4 20 0 0 12 0 0 +fn=std::__cxx11::basic_ostringstream, std::allocator >::basic_ostringstream() +0 348 30 5 54 7 3 186 0 0 +fn=std::__cxx11::basic_ostringstream, std::allocator >::~basic_ostringstream() +0 87 8 3 18 1 1 27 0 0 +fn=std::__cxx11::basic_string, std::allocator > std::operator+, std::allocator >(std::__cxx11::basic_string, std::allocator >&&, std::__cxx11::basic_string, std::allocator >&&) +0 43 4 4 12 0 0 9 1 1 +fn=std::__cxx11::basic_string, std::allocator > tinyformat::format(char const*, char const (&) [9]) +0 204 16 16 42 0 0 64 2 0 +fn=std::__cxx11::basic_string, std::allocator > tinyformat::format, std::allocator >>(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&) +0 119 11 11 23 2 2 52 0 0 +fn=std::__cxx11::basic_string, std::allocator >::_M_append(char const*, unsigned long) +0 2425 30 6 565 0 0 425 0 0 +fn=std::__cxx11::basic_string, std::allocator >::_M_assign(std::__cxx11::basic_string, std::allocator > const&) +0 1189 14 8 347 0 0 242 0 0 +fn=std::__cxx11::basic_string, std::allocator >::_M_create(unsigned long&, unsigned long) +0 4744 43 4 385 0 0 31 0 0 +fn=std::__cxx11::basic_string, std::allocator >::_M_erase(unsigned long, unsigned long) +0 38 4 2 10 0 0 8 0 0 +fn=std::__cxx11::basic_string, std::allocator >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) +0 3962 134 12 991 0 0 869 0 0 +fn=std::__cxx11::basic_string, std::allocator >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) +0 4790 128 12 917 2 1 796 0 0 +fn=std::__cxx11::basic_string, std::allocator >::_M_replace_aux(unsigned long, unsigned long, unsigned long, char) +0 152 12 4 29 0 0 26 0 0 +fn=std::__cxx11::basic_string, std::allocator >::basic_string(char const*, std::allocator const&) [clone .isra.0] +0 14053 72 44 3048 0 0 3269 82 79 +fn=std::__cxx11::basic_string, std::allocator >::compare(char const*) const +0 336 6 4 84 0 0 72 0 0 +fn=std::__cxx11::basic_string, std::allocator >::compare(std::__cxx11::basic_string, std::allocator > const&) const +0 5945 4 2 2044 0 0 876 0 0 +fn=std::__cxx11::basic_string, std::allocator >::find(char const*, unsigned long, unsigned long) const +0 5031 17 7 408 0 0 670 0 0 +fn=std::__cxx11::basic_string, std::allocator >::find(char, unsigned long) const +0 506 2 2 110 0 0 66 0 0 +fn=std::__cxx11::basic_string, std::allocator >::find_first_not_of(char const*, unsigned long, unsigned long) const +0 924 5 3 297 0 0 198 0 0 +fn=std::__cxx11::basic_string, std::allocator >::find_last_not_of(char const*, unsigned long, unsigned long) const +0 1056 4 3 264 0 0 165 0 0 +fn=std::__cxx11::basic_string, std::allocator >::find_last_of(char const*, unsigned long, unsigned long) const +0 404 6 6 66 0 0 54 0 0 +fn=std::__cxx11::basic_string, std::allocator >::operator=(std::__cxx11::basic_string, std::allocator >&&) +0 576 20 8 148 1 0 152 0 0 +fn=std::__cxx11::basic_string, std::allocator >::reserve(unsigned long) +0 611 44 8 143 0 0 104 1 0 +fn=std::__cxx11::basic_string, std::allocator >::resize(unsigned long, char) +0 39 8 4 6 0 0 2 0 0 +fn=std::__cxx11::basic_string, std::allocator >::rfind(char, unsigned long) const +0 52 2 2 14 0 0 0 0 0 +fn=std::__cxx11::basic_string, std::allocator >::swap(std::__cxx11::basic_string, std::allocator >&) +0 242 15 2 77 0 0 66 0 0 +fn=std::__cxx11::basic_string, std::allocator >::~basic_string() +0 125 1 1 35 15 12 0 0 0 +fn=std::__cxx11::basic_stringbuf, std::allocator >::_M_pbump(char*, char*, long) +0 230 17 2 23 0 0 69 0 0 +fn=std::__cxx11::basic_stringbuf, std::allocator >::_M_sync(char*, unsigned long, unsigned long) +0 363 28 4 73 0 0 62 0 0 +fn=std::__cxx11::basic_stringbuf, std::allocator >::overflow(int) +0 1640 92 9 562 0 0 318 2 2 +fn=std::__cxx11::basic_stringbuf, std::allocator >::str() const +0 234 14 2 63 0 0 63 1 0 +fn=std::__cxx11::basic_stringstream, std::allocator >::basic_stringstream() +0 272 24 6 32 2 1 140 0 0 +fn=std::__cxx11::collate::~collate() +0 26 4 4 4 2 1 8 0 0 +fn=std::__cxx11::collate::~collate() +0 26 2 2 4 2 1 8 0 0 +fn=std::__cxx11::list >::~list() +0 17 1 1 7 0 0 3 0 0 +fn=std::__cxx11::list >::~list() +0 17 2 2 7 1 1 3 0 0 +fn=std::__cxx11::messages::messages(__locale_struct*, char const*, unsigned long) +0 90 6 3 12 2 0 34 0 0 +fn=std::__cxx11::messages::messages(unsigned long) +0 20 2 2 4 1 0 8 1 1 +fn=std::__cxx11::messages::~messages() +0 60 6 6 10 1 1 16 0 0 +fn=std::__cxx11::messages::messages(__locale_struct*, char const*, unsigned long) +0 90 6 3 12 0 0 34 0 0 +fn=std::__cxx11::messages::messages(unsigned long) +0 20 2 2 4 0 0 8 0 0 +fn=std::__cxx11::messages::~messages() +0 60 4 4 10 0 0 16 0 0 +fn=std::__cxx11::money_get > >::~money_get() +0 20 2 2 4 2 1 6 0 0 +fn=std::__cxx11::money_get > >::~money_get() +0 20 4 4 4 1 1 6 0 0 +fn=std::__cxx11::money_put > >::~money_put() +0 20 2 2 4 1 1 6 0 0 +fn=std::__cxx11::money_put > >::~money_put() +0 20 0 0 4 2 1 6 0 0 +fn=std::__cxx11::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 487 41 20 110 3 1 167 2 1 +fn=std::__cxx11::moneypunct::~moneypunct() +0 112 10 9 38 9 5 20 0 0 +fn=std::__cxx11::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 503 41 20 112 0 0 169 2 1 +fn=std::__cxx11::moneypunct::~moneypunct() +0 112 8 8 38 9 5 20 0 0 +fn=std::__cxx11::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 527 44 21 99 3 0 183 3 1 +fn=std::__cxx11::moneypunct::~moneypunct() +0 118 10 9 38 5 2 24 0 0 +fn=std::__cxx11::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 527 46 22 99 0 0 183 4 2 +fn=std::__cxx11::moneypunct::~moneypunct() +0 118 8 8 38 4 1 24 0 0 +fn=std::__cxx11::numpunct::_M_initialize_numpunct(__locale_struct*) +0 588 25 10 165 6 2 139 3 2 +fn=std::__cxx11::numpunct::~numpunct() +0 76 8 6 22 8 4 16 0 0 +fn=std::__cxx11::numpunct::_M_initialize_numpunct(__locale_struct*) +0 498 18 9 91 1 0 136 6 5 +fn=std::__cxx11::numpunct::~numpunct() +0 76 6 5 22 6 2 16 0 0 +fn=std::__cxx11::time_get > >::~time_get() +0 20 4 4 4 1 0 6 0 0 +fn=std::__cxx11::time_get > >::~time_get() +0 20 4 4 4 2 1 6 0 0 +fn=std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*) +0 816 2 2 306 0 0 408 0 0 +fn=std::__detail::_List_node_base::_M_unhook() +0 600 1 1 300 0 0 200 0 0 +fn=std::__moneypunct_cache::~__moneypunct_cache() +0 66 6 6 12 1 1 14 0 0 +fn=std::__moneypunct_cache::~__moneypunct_cache() +0 66 4 4 12 1 0 14 0 0 +fn=std::__moneypunct_cache::~__moneypunct_cache() +0 66 6 6 12 1 0 14 0 0 +fn=std::__moneypunct_cache::~__moneypunct_cache() +0 66 4 4 12 3 1 14 0 0 +fn=std::__numpunct_cache::~__numpunct_cache() +0 66 6 6 12 3 2 14 0 0 +fn=std::__numpunct_cache::~__numpunct_cache() +0 66 4 4 12 2 1 14 0 0 +fn=std::__throw_out_of_range_fmt(char const*, ...) +0 55 6 6 2 0 0 18 0 0 +fn=std::__timepunct const& std::use_facet >(std::locale const&) +0 480 8 2 216 5 2 72 0 0 +fn=std::__timepunct::_M_initialize_timepunct(__locale_struct*) +0 722 72 38 204 0 0 354 12 6 +fn=std::__timepunct::_M_put(char*, unsigned long, char const*, tm const*) const +0 312 4 1 72 0 0 48 0 0 +fn=std::__timepunct::__timepunct(__locale_struct*, char const*, unsigned long) +0 92 8 3 14 2 0 34 0 0 +fn=std::__timepunct::__timepunct(std::__timepunct_cache*, unsigned long) +0 23 2 2 4 0 0 9 1 1 +fn=std::__timepunct::~__timepunct() +0 70 6 6 16 4 1 18 0 0 +fn=std::__timepunct::_M_initialize_timepunct(__locale_struct*) +0 718 72 38 201 0 0 351 12 6 +fn=std::__timepunct::__timepunct(__locale_struct*, char const*, unsigned long) +0 92 6 3 14 2 0 34 1 0 +fn=std::__timepunct::__timepunct(std::__timepunct_cache*, unsigned long) +0 23 2 2 4 1 0 9 0 0 +fn=std::__timepunct::~__timepunct() +0 70 4 4 16 6 3 18 0 0 +fn=std::__timepunct_cache::~__timepunct_cache() +0 24 4 4 2 0 0 6 0 0 +fn=std::__timepunct_cache::~__timepunct_cache() +0 24 4 4 2 0 0 6 0 0 +fn=std::bad_alloc::~bad_alloc() +0 15 4 4 3 1 0 3 0 0 +fn=std::bad_exception::~bad_exception() +0 15 1 0 3 2 0 3 0 0 +fn=std::basic_filebuf >::_M_allocate_internal_buffer() +0 13 2 2 5 0 0 4 0 0 +fn=std::basic_filebuf >::_M_destroy_internal_buffer() +0 20 2 2 5 0 0 8 0 0 +fn=std::basic_filebuf >::_M_terminate_output() +0 29 4 4 13 0 0 7 0 0 +fn=std::basic_filebuf >::basic_filebuf() +0 58 7 7 8 0 0 36 0 0 +fn=std::basic_filebuf >::close() +0 50 4 4 11 0 0 20 0 0 +fn=std::basic_filebuf >::open(char const*, std::_Ios_Openmode) +0 47 4 4 7 0 0 18 0 0 +fn=std::basic_filebuf >::underflow() +0 126 12 9 46 1 0 32 0 0 +fn=std::basic_ios >::_M_cache_locale(std::locale const&) +0 1178 28 6 114 0 0 418 0 0 +fn=std::basic_ios >::clear(std::_Ios_Iostate) +0 28 1 1 12 0 0 4 0 0 +fn=std::basic_ios >::imbue(std::locale const&) +0 216 12 3 52 2 1 60 0 0 +fn=std::basic_ios >::init(std::basic_streambuf >*) +0 782 39 6 102 0 0 306 0 0 +fn=std::basic_ios >::widen(char) const +0 64 4 1 24 4 0 8 0 0 +fn=std::basic_ios >::_M_cache_locale(std::locale const&) +0 124 3 3 12 0 0 44 0 0 +fn=std::basic_ios >::init(std::basic_streambuf >*) +0 92 2 2 12 0 0 40 0 0 +fn=std::basic_istream >& std::getline, std::allocator >(std::basic_istream >&, std::__cxx11::basic_string, std::allocator >&, char) +0 1196 26 11 356 1 0 210 0 0 +fn=std::basic_ostream >& boost::posix_time::operator<< >(std::basic_ostream >&, boost::posix_time::ptime const&) +0 428 35 9 132 3 1 96 0 0 +fn=std::basic_ostream >& std::__ostream_insert >(std::basic_ostream >&, char const*, long) +0 1288 34 5 552 1 0 276 0 0 +fn=std::basic_ostream >::flush() +0 45 2 2 21 10 10 6 0 0 +fn=std::basic_streambuf >::imbue(std::locale const&) +0 8 4 1 4 0 0 0 0 0 +fn=std::basic_streambuf >::xsputn(char const*, long) +0 2991 30 3 793 6 3 470 0 0 +fn=std::codecvt const& std::use_facet >(std::locale const&) +0 20 2 2 9 0 0 3 0 0 +fn=std::codecvt::codecvt(__locale_struct*, unsigned long) +0 36 2 1 6 2 0 12 0 0 +fn=std::codecvt::codecvt(unsigned long) +0 18 2 2 4 0 0 6 2 2 +fn=std::codecvt::do_always_noconv() const +0 6 1 1 2 0 0 0 0 0 +fn=std::codecvt::~codecvt() +0 58 6 6 12 3 1 16 0 0 +fn=std::codecvt::~codecvt() +0 24 8 8 2 0 0 6 0 0 +fn=std::codecvt::~codecvt() +0 24 8 8 2 0 0 6 0 0 +fn=std::codecvt::codecvt(__locale_struct*, unsigned long) +0 36 4 2 6 2 0 12 1 0 +fn=std::codecvt::codecvt(unsigned long) +0 36 2 1 8 1 0 12 2 2 +fn=std::codecvt::~codecvt() +0 76 4 3 16 1 1 21 0 0 +fn=std::collate::~collate() +0 26 4 4 4 0 0 8 0 0 +fn=std::collate::~collate() +0 26 4 4 4 0 0 8 0 0 +fn=std::ctype const& std::use_facet >(std::locale const&) +0 1620 18 4 729 10 5 243 1 0 +fn=std::ctype::_M_widen_init() const +0 1087 7 6 26 1 0 278 5 0 +fn=std::ctype::ctype(__locale_struct*, unsigned short const*, bool, unsigned long) +0 240 10 4 16 2 0 160 17 8 +fn=std::ctype::ctype(unsigned short const*, bool, unsigned long) +0 116 4 4 8 2 0 79 9 9 +fn=std::ctype::do_tolower(char) const +0 70 2 2 42 4 2 0 0 0 +fn=std::ctype::do_widen(char) const +0 3 1 0 1 0 0 0 0 0 +fn=std::ctype::~ctype() +0 40 4 4 8 2 1 10 0 0 +fn=std::ctype const& std::use_facet >(std::locale const&) +0 80 2 2 36 0 0 12 0 0 +fn=std::ctype::_M_convert_to_wmask(unsigned short) const +0 438 18 6 36 0 0 0 0 0 +fn=std::ctype::_M_initialize_ctype() +0 8199 12 4 15 0 0 2430 58 39 +fn=std::ctype::ctype(__locale_struct*, unsigned long) +0 42 4 2 6 0 0 16 1 1 +fn=std::ctype::ctype(unsigned long) +0 20 2 2 3 0 0 7 1 1 +fn=std::ctype::~ctype() +0 42 4 4 8 2 1 12 0 0 +fn=std::deque, std::allocator >, std::allocator, std::allocator > > >::~deque() +0 51 6 6 20 1 1 8 0 0 +fn=std::deque, std::allocator > >::~deque() +0 32 2 2 11 3 3 5 0 0 +fn=std::error_category::error_category() +0 10 2 2 4 1 0 2 0 0 +fn=std::error_category::~error_category() +0 4 0 0 2 0 0 0 0 0 +fn=std::exception::~exception() +0 14 2 2 7 0 0 0 0 0 +fn=std::future_category() +0 18 3 3 2 1 0 3 0 0 +fn=std::get_terminate() +0 4 1 1 2 0 0 0 0 0 +fn=std::get_unexpected() +0 4 1 1 2 1 1 0 0 0 +fn=std::ios_base::Init::Init() +0 2500 46 32 1013 21 0 745 15 13 +fn=std::ios_base::Init::~Init() +0 896 3 3 398 7 1 6 0 0 +fn=std::ios_base::_M_call_callbacks(std::ios_base::event) +0 187 20 4 85 0 0 51 0 0 +fn=std::ios_base::_M_dispose_callbacks() +0 169 9 2 65 0 0 52 0 0 +fn=std::ios_base::_M_init() +0 988 20 4 228 0 0 342 0 0 +fn=std::ios_base::imbue(std::locale const&) +0 100 8 2 20 0 0 28 0 0 +fn=std::ios_base::ios_base() +0 1239 43 8 21 1 1 546 34 26 +fn=std::ios_base::~ios_base() +0 221 16 4 39 1 0 52 0 0 +fn=std::istream::sentry::sentry(std::istream&, bool) +0 330 3 3 106 0 0 71 0 0 +fn=std::locale::_Impl::_Impl(char const*, unsigned long) +0 1896 83 41 414 77 0 564 2 1 +fn=std::locale::_Impl::_Impl(std::locale::_Impl const&, unsigned long) +0 5012 32 8 2344 95 41 516 27 10 +fn=std::locale::_Impl::_Impl(unsigned long) +0 691 65 65 84 30 1 432 50 50 +fn=std::locale::_Impl::_M_install_facet(std::locale::id const*, std::locale::facet const*) +0 40768 67 20 11724 4 0 1288 21 11 +fn=std::locale::_Impl::~_Impl() +0 7422 33 13 2740 216 103 166 0 0 +fn=std::locale::classic() +0 30 10 4 5 0 0 5 0 0 +fn=std::locale::facet::_S_clone_c_locale(__locale_struct*&) +0 84 1 1 28 0 0 0 0 0 +fn=std::locale::facet::_S_create_c_locale(__locale_struct*&, char const*, __locale_struct*) +0 30 2 1 6 0 0 9 0 0 +fn=std::locale::facet::_S_destroy_c_locale(__locale_struct*&) +0 363 4 2 100 9 5 66 0 0 +fn=std::locale::facet::_S_get_c_locale() +0 528 5 2 192 3 0 96 0 0 +fn=std::locale::facet::_S_get_c_name() +0 93 3 1 31 0 0 0 0 0 +fn=std::locale::facet::~facet() +0 258 5 2 129 0 0 0 0 0 +fn=std::locale::id::_M_id() const +0 3519 6 2 1271 55 9 0 0 0 +fn=std::locale::locale() +0 1377 22 4 486 0 0 486 3 2 +fn=std::locale::locale(char const*) +0 1786 60 29 514 14 1 342 6 2 +fn=std::locale::locale(std::locale const&) +0 221 5 1 117 0 0 26 1 0 +fn=std::locale::locale(std::locale::_Impl*) +0 3 1 1 1 0 0 1 0 0 +fn=std::locale::locale > > >(std::locale const&, boost::date_time::time_facet > >*) +0 168 8 3 56 0 0 44 0 0 +fn=std::locale::operator=(std::locale const&) +0 867 16 5 327 1 0 96 0 0 +fn=std::locale::~locale() +0 972 13 3 471 3 1 105 0 0 +fn=std::logic_error::logic_error(char const*) +0 49 5 5 10 1 1 13 0 0 +fn=std::logic_error::~logic_error() +0 30 4 4 10 3 0 4 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > >, std::less, std::allocator, std::allocator > > > > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > > boost::assign_detail::converter >, std::_Deque_iterator, std::pair&, std::pair*> >::convert, std::allocator > > >(std::map, std::allocator > > const*, boost::assign_detail::default_type_tag) const [clone .isra.0] +0 96 2 2 39 0 0 33 0 0 +fn=std::map, std::allocator > >::map, std::pair&, std::pair*> >(std::_Deque_iterator, std::pair&, std::pair*>, std::_Deque_iterator, std::pair&, std::pair*>) +0 1347 8 8 301 0 0 193 6 6 +fn=std::map, std::allocator > >::~map() +0 33 2 2 12 3 3 3 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator >, boost::shared_ptr, std::less, std::allocator > >, std::allocator, std::allocator > const, boost::shared_ptr > > >::~map() +0 11 1 1 4 0 0 1 0 0 +fn=std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::operator[](std::__cxx11::basic_string, std::allocator > const&) +0 588 5 5 154 0 0 106 0 0 +fn=std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::~map() +0 11 1 1 4 1 0 1 0 0 +fn=std::map, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::operator[](std::__cxx11::basic_string, std::allocator >&&) +0 243 6 6 60 0 0 36 0 0 +fn=std::map, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 0 0 4 0 0 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 22 1 1 8 2 2 2 0 0 +fn=std::map, std::allocator > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 121 2 1 44 10 10 11 0 0 +fn=std::map, std::allocator > >::~map() +0 44 2 1 16 4 4 4 0 0 +fn=std::map >, std::less, std::allocator > > > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator >, std::less, std::allocator, std::allocator > > > >::~map() +0 11 1 1 4 0 0 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 2 2 4 1 1 1 0 0 +fn=std::map, std::allocator > >::~map() +0 11 1 1 4 1 1 1 0 0 +fn=std::messages::messages(__locale_struct*, char const*, unsigned long) +0 90 8 3 12 0 0 34 0 0 +fn=std::messages::messages(unsigned long) +0 20 2 2 4 0 0 8 1 1 +fn=std::messages::~messages() +0 60 2 2 10 0 0 16 0 0 +fn=std::messages::messages(__locale_struct*, char const*, unsigned long) +0 90 6 3 12 0 0 34 0 0 +fn=std::messages::messages(unsigned long) +0 20 2 2 4 0 0 8 0 0 +fn=std::messages::~messages() +0 60 4 4 10 0 0 16 0 0 +fn=std::money_base::_S_construct_pattern(char, char, char) +0 1120 10 4 64 0 0 32 0 0 +fn=std::money_get > >::~money_get() +0 20 2 2 4 2 1 6 0 0 +fn=std::money_get > >::~money_get() +0 20 2 2 4 2 0 6 0 0 +fn=std::money_put > >::~money_put() +0 20 2 2 4 1 0 6 0 0 +fn=std::money_put > >::~money_put() +0 20 2 2 4 1 0 6 0 0 +fn=std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 487 40 19 110 0 0 167 2 1 +fn=std::moneypunct::~moneypunct() +0 118 11 11 42 10 4 24 0 0 +fn=std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 503 43 21 112 0 0 169 2 1 +fn=std::moneypunct::~moneypunct() +0 118 6 6 42 10 6 24 0 0 +fn=std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 527 45 21 99 0 0 183 4 2 +fn=std::moneypunct::~moneypunct() +0 128 10 10 40 4 3 26 0 0 +fn=std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 527 48 23 99 0 0 183 3 1 +fn=std::moneypunct::~moneypunct() +0 128 10 10 40 6 2 26 0 0 +fn=std::multimap, std::allocator > >::~multimap() +0 11 1 1 4 1 1 1 0 0 +fn=std::num_get > > const& std::use_facet > > >(std::locale const&) +0 760 14 2 342 0 0 114 0 0 +fn=std::num_get > >::~num_get() +0 20 4 4 4 2 1 6 0 0 +fn=std::num_get > > const& std::use_facet > > >(std::locale const&) +0 80 1 1 36 0 0 12 0 0 +fn=std::num_get > >::~num_get() +0 20 2 2 4 1 1 6 0 0 +fn=std::num_put > > const& std::use_facet > > >(std::locale const&) +0 760 25 4 342 0 0 114 0 0 +fn=std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, long) const +0 54 4 1 0 0 0 0 0 0 +fn=std::num_put > >::~num_put() +0 20 0 0 4 2 1 6 0 0 +fn=std::num_put > > const& std::use_facet > > >(std::locale const&) +0 80 2 2 36 0 0 12 0 0 +fn=std::num_put > >::~num_put() +0 20 2 2 4 2 1 6 0 0 +fn=std::numpunct::_M_initialize_numpunct(__locale_struct*) +0 588 22 10 165 0 0 139 4 2 +fn=std::numpunct::~numpunct() +0 86 7 6 26 6 4 20 0 0 +fn=std::numpunct::_M_initialize_numpunct(__locale_struct*) +0 498 22 9 91 0 0 136 4 2 +fn=std::numpunct::~numpunct() +0 86 8 8 26 4 2 20 0 0 +fn=std::ostream& std::ostream::_M_insert(long) +0 1074 24 6 430 2 1 170 0 0 +fn=std::ostream::flush() +0 45 1 1 21 10 10 6 0 0 +fn=std::ostream::operator<<(int) +0 198 4 1 54 0 0 0 0 0 +fn=std::ostream::sentry::sentry(std::ostream&) +0 1050 14 2 350 1 0 250 1 1 +fn=std::ostream::write(char const*, long) +0 387 10 3 162 1 1 63 1 1 +fn=std::ostreambuf_iterator > std::num_put > >::_M_insert_int(std::ostreambuf_iterator >, std::ios_base&, char, long) const +0 1764 28 7 342 0 0 324 0 0 +fn=std::out_of_range::out_of_range(char const*) +0 9 1 1 3 1 1 3 0 0 +fn=std::out_of_range::~out_of_range() +0 5 2 2 1 1 0 1 0 0 +fn=std::pair, std::allocator > >, bool> std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_insert_unique, std::allocator > >(std::__cxx11::basic_string, std::allocator >&&) +0 59 5 5 14 0 0 16 1 0 +fn=std::pair, std::allocator > >, bool> std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_insert_unique, std::allocator > const&>(std::__cxx11::basic_string, std::allocator > const&) +0 55 7 7 17 0 0 12 1 1 +fn=std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >, bool> std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > > >::_M_insert_unique > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >(std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >&&) +0 49 4 4 13 0 0 12 1 0 +fn=std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >, bool> std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > > >::_M_insert_unique > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >(std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >&&) +0 49 4 4 13 0 0 12 0 0 +fn=std::pair >, bool> std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_emplace_unique >(std::pair&&) +0 92 11 11 28 0 0 20 3 2 +fn=std::set, std::allocator >::~set() +0 11 1 1 4 1 1 1 0 0 +fn=std::set >::~set() +0 11 2 2 4 1 1 1 0 0 +fn=std::set, std::allocator >::~set() +0 11 1 1 4 1 1 1 0 0 +fn=std::set, std::allocator >::~set() +0 11 2 2 4 1 1 1 0 0 +fn=std::set, std::allocator >::~set() +0 11 2 2 4 1 1 1 0 0 +fn=std::set, std::allocator >::~set() +0 11 2 2 4 1 1 1 0 0 +fn=std::set, std::less >, std::allocator > >::~set() +0 11 1 1 4 1 1 1 0 0 +fn=std::string::_Rep::_M_destroy(std::allocator const&) +0 2 1 1 0 0 0 0 0 0 +fn=std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator const&) +0 22 3 3 2 0 0 4 0 0 +fn=std::time_get > >::~time_get() +0 20 2 2 4 0 0 6 0 0 +fn=std::time_get > >::~time_get() +0 20 4 4 4 0 0 6 0 0 +fn=std::time_put > > const& std::use_facet > > >(std::locale const&) +0 80 8 2 36 6 2 12 0 0 +fn=std::time_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, tm const*, char, char) const +0 1584 15 4 408 2 0 384 0 0 +fn=std::time_put > >::put(std::ostreambuf_iterator >, std::ios_base&, char, tm const*, char const*, char const*) const +0 1736 25 7 482 7 3 222 0 0 +fn=std::time_put > >::~time_put() +0 20 2 2 4 1 1 6 0 0 +fn=std::time_put > >::~time_put() +0 20 0 0 4 0 0 6 0 0 +fn=std::type_info::__is_pointer_p() const +0 3 1 1 1 0 0 0 0 0 +fn=std::vector<(anonymous namespace)::ListenSocket, std::allocator<(anonymous namespace)::ListenSocket> >::~vector() +0 13 2 2 5 0 0 1 0 0 +fn=std::vector >::_M_default_append(unsigned long) +0 551 9 9 17 0 0 313 31 31 +fn=std::vector >::~vector() +0 13 2 2 5 1 1 1 0 0 +fn=std::vector >::~vector() +0 22 4 4 9 0 0 4 0 0 +fn=std::vector >::~vector() +0 26 3 3 11 1 1 6 0 0 +fn=std::vector >::~vector() +0 13 1 1 5 0 0 1 0 0 +fn=std::vector >::~vector() +0 22 2 2 9 1 1 4 0 0 +fn=std::vector >::~vector() +0 26 3 3 10 0 0 2 0 0 +fn=std::vector >::_M_default_append(unsigned long) +0 368 36 9 68 0 0 96 1 0 +fn=std::vector >::~vector() +0 132 6 6 54 0 0 24 0 0 +fn=std::vector >::_M_default_append(unsigned long) +0 344 32 8 72 0 0 72 3 0 +fn=std::vector >::~vector() +0 88 6 6 36 2 2 16 0 0 +fn=std::vector >::~vector() +0 22 4 4 9 1 0 4 0 0 +fn=std::vector >::~vector() +0 13 2 2 5 1 0 1 0 0 +fn=std::vector >::~vector() +0 13 2 2 5 0 0 1 0 0 +fn=std::vector >::~vector() +0 1235 2 2 380 87 81 95 0 0 +fn=std::vector >::~vector() +0 1235 2 2 380 29 25 95 0 0 +fn=std::vector >::~vector() +0 13 2 2 5 0 0 1 0 0 +fn=std::vector, std::allocator >, std::allocator, std::allocator > > >::vector(std::vector, std::allocator >, std::allocator, std::allocator > > > const&) +0 1808 19 5 400 0 0 416 20 8 +fn=std::vector, std::allocator >, std::allocator, std::allocator > > >::~vector() +0 2006 11 2 513 1 0 164 0 0 +fn=std::vector >::_M_default_append(unsigned long) +0 248 11 11 28 2 2 56 3 3 +fn=std::vector >::_M_default_append(unsigned long) +0 272 20 5 60 0 0 48 0 0 +fn=std::vector >::_M_insert_rval(__gnu_cxx::__normal_iterator > >, unsigned char&&) +0 556 8 2 228 0 0 100 0 0 +fn=std::vector >::operator=(std::vector > const&) +0 1376 27 8 416 0 0 224 0 0 +fn=tinyformat::detail::FormatIterator::printFormatStringLiteral(std::ostream&, char const*) +0 386 10 3 81 2 2 20 1 1 +fn=tinyformat::detail::FormatIterator::streamStateFromFormat(std::ostream&, unsigned int&, char const*, int, int) +0 400 24 8 120 3 1 60 1 1 +fn=tinyformat::detail::FormatIterator::~FormatIterator() +0 96 9 3 51 0 0 24 0 0 +fn=uint256 HashQuark(char*, char*) +0 12689 216 28 1885 0 0 2376 36 6 +fn=unsigned long ReadCompactSize(CDataStream&) +0 399 12 4 133 0 0 76 0 0 +fn=unwrap(DbEnv*) +0 17 2 2 7 1 1 3 0 0 +fn=update +0 18324 0 0 6108 0 0 0 0 0 +fn=void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) [clone .isra.0] +0 54 4 4 22 2 2 14 0 0 +fn=void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +0 33 3 3 12 1 1 11 0 0 +fn=void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +0 30 3 3 12 2 2 8 0 0 +fn=void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +0 60 4 4 24 1 1 16 0 0 +fn=void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +0 31 2 2 12 0 0 9 0 0 +fn=void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) [clone .isra.0] +0 58 3 3 24 1 1 16 0 0 +fn=void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +0 31 3 3 12 0 0 9 0 0 +fn=void Serialize_impl, CTxIn>(CHashWriter&, std::vector > const&, int, int, CTxIn const&) [clone .isra.0] +0 184 12 3 56 0 0 40 0 0 +fn=void Serialize_impl, CTxOut>(CHashWriter&, std::vector > const&, int, int, CTxOut const&) [clone .isra.0] +0 168 12 3 56 0 0 36 0 0 +fn=void Serialize_impl >(CHashWriter&, std::vector > const&, int, int, unsigned char const&) [clone .isra.0] +0 192 8 2 72 0 0 32 0 0 +fn=void Unserialize >(CDataStream&, std::vector >&, int, int) +0 41 5 5 13 0 0 13 1 0 +fn=void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) [clone .isra.0] +0 74 3 3 24 0 0 28 0 0 +fn=void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +0 47 5 5 12 0 0 21 0 0 +fn=void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +0 44 5 5 12 0 0 17 0 0 +fn=void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +0 86 5 5 24 0 0 32 0 0 +fn=void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +0 47 6 6 12 0 0 21 0 0 +fn=void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +0 47 4 4 12 0 0 21 0 0 +fn=void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +0 86 5 5 24 0 0 32 0 0 +fn=void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +0 42 5 5 12 0 0 16 0 0 +fn=void WriteCompactSize(CDataStream&, unsigned long) +0 456 15 5 133 0 0 95 0 0 +fn=void WriteCompactSize(CHashWriter&, unsigned long) +0 320 16 4 80 0 0 64 0 0 +fn=void boost::algorithm::find_format_all, std::allocator >, boost::algorithm::detail::first_finderF, boost::algorithm::detail::const_formatF > >(std::__cxx11::basic_string, std::allocator >&, boost::algorithm::detail::first_finderF, boost::algorithm::detail::const_formatF >) +0 2120 10 3 456 0 0 32 0 0 +fn=void boost::signals2::detail::connection_body_base::dec_slot_refcount(boost::signals2::detail::garbage_collecting_lock&) const +0 25 2 2 9 0 0 6 0 0 +fn=void boost::this_thread::sleep_for >(boost::chrono::duration > const&) +0 164 18 18 24 0 0 36 0 0 +fn=void std::__cxx11::basic_string, std::allocator >::_M_construct, __gnu_cxx::__normal_iterator, std::allocator > >, boost::use_default, boost::use_default> >(boost::iterators::transform_iterator, __gnu_cxx::__normal_iterator, std::allocator > >, boost::use_default, boost::use_default>, boost::iterators::transform_iterator, __gnu_cxx::__normal_iterator, std::allocator > >, boost::use_default, boost::use_default>, std::input_iterator_tag) +0 332 10 10 118 2 0 78 0 0 +fn=void std::__cxx11::basic_string, std::allocator >::_M_construct(char const*, char const*, std::forward_iterator_tag) +0 12889 36 6 3148 1 0 2668 13 13 +fn=void std::__cxx11::basic_string, std::allocator >::_M_construct(char*, char*, std::forward_iterator_tag) +0 10910 58 8 2681 0 0 2469 0 0 +fn=void std::__cxx11::basic_string, std::allocator >::_M_construct(char*, char*, std::forward_iterator_tag) [clone .constprop.0] +0 4564 23 8 1142 0 0 933 1 0 +fn=void std::deque, std::allocator > >::emplace_back >(std::pair&&) +0 1050 3 3 294 0 0 238 7 7 +fn=void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CAddress const&) +0 13304 32 8 3704 0 0 3700 781 584 +fn=void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CDNSSeedData&&) +0 2584 52 13 628 2 0 824 32 12 +fn=void std::vector >::emplace_back(CDNSSeedData&&) +0 568 16 4 184 1 0 136 7 2 +fn=void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CTransaction&&) +0 284 32 8 64 0 0 64 0 0 +fn=void std::vector >::_M_range_insert(__gnu_cxx::__normal_iterator > >, char const*, char const*, std::forward_iterator_tag) +0 3805 32 12 798 1 0 689 2 1 +fn=void std::vector, std::allocator >, std::allocator, std::allocator > > >::_M_realloc_insert, std::allocator > >(__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::__cxx11::basic_string, std::allocator >&&) +0 1184 36 9 248 0 0 280 7 1 +fn=void std::vector, std::allocator >, std::allocator, std::allocator > > >::_M_realloc_insert, std::allocator > const&>(__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::__cxx11::basic_string, std::allocator > const&) +0 1000 26 10 220 0 0 231 3 0 +fn=void std::vector, std::allocator >, std::allocator, std::allocator > > >::emplace_back, std::allocator > >(std::__cxx11::basic_string, std::allocator >&&) +0 1212 16 4 420 0 0 264 10 4 +fn=void std::vector >::_M_range_insert<__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::forward_iterator_tag) +0 1232 40 10 268 0 0 240 0 0 +fn=void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, unsigned char&&) +0 2112 24 6 512 0 0 512 3 1 +fn=void std::vector >::emplace_back(unsigned char&&) +0 304 12 3 112 0 0 24 0 0 +fn=void tinyformat::detail::FormatIterator::accept(char const (&) [16]) +0 63 5 5 17 0 0 14 1 1 +fn=void tinyformat::detail::FormatIterator::accept(char const (&) [9]) +0 63 5 5 17 0 0 14 0 0 +fn=void tinyformat::detail::FormatIterator::accept, std::allocator > >(std::__cxx11::basic_string, std::allocator > const&) +0 177 6 5 54 0 0 39 0 0 +fn=void tinyformat::format(std::ostream&, char const*, char const (&) [16]) +0 167 6 6 38 3 1 20 0 0 +fn=void tinyformat::format, std::allocator >>(std::ostream&, char const*, std::__cxx11::basic_string, std::allocator > const&) +0 323 6 6 64 2 2 20 0 0 +summary: 88467432 44717 13895 17140934 372142 70555 7657196 113368 107545 diff --git a/daemon/callgrind.out.140828 b/daemon/callgrind.out.140828 new file mode 100644 index 000000000000..8851f7623f32 --- /dev/null +++ b/daemon/callgrind.out.140828 @@ -0,0 +1,59896 @@ +# callgrind format +version: 1 +creator: callgrind-3.15.0 +pid: 140828 +cmd: ./unigridd +part: 1 + + +desc: I1 cache: +desc: D1 cache: +desc: LL cache: + +desc: Timerange: Basic block 0 - 5855186 +desc: Trigger: Program termination + +positions: line +events: Ir +summary: 88412458 + + +ob=(4) /usr/lib/x86_64-linux-gnu/libm-2.31.so +fl=(114) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/s_sinf.c +fn=(326) sinf +26 1 +fi=(383) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/ifunc-fma.h ++4 1 +-1 1 ++1 2 +-1 3 +fe=(114) +-3 1 + +fl=(107) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/s_sincosf.c +fn=(312) sincosf +26 1 +fi=(383) ++4 1 +-1 1 ++1 2 +-1 3 +fe=(107) +-3 1 + +fl=(148) ??? +fn=(8404) 0x000000000000d3d0 +0 5 + +fn=(462) 0x000000000000d480 +0 12 + +fn=(8394) 0x000000000000d440 +0 9 +cob=(2) ??? +cfi=(18) ??? +cfn=(8400) 0x0000000004acb1f0 +calls=1 0 +0 143 +0 1 +cfn=(8404) +calls=1 0 +0 5 +0 3 + +fl=(106) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_logf.c +fn=(310) logf@@GLIBC_2.27 +27 1 +fi=(383) ++3 1 +-1 1 ++1 2 +-1 3 +fe=(106) +-2 1 + +fl=(105) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/s_sin.c +fn=(334) sin +27 1 +fi=(384) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/ifunc-avx-fma4.h ++6 5 +-1 2 +fe=(105) +-5 1 + +fn=(308) cos +34 1 +fi=(384) +-1 5 +-1 2 +fe=(105) ++2 1 + +fl=(110) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_log2f.c +fn=(318) log2f@@GLIBC_2.27 +27 1 +fi=(383) ++3 1 +-1 1 ++1 2 +-1 3 +fe=(110) +-2 1 + +fl=(103) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_exp.c +fn=(304) __exp_finite@GLIBC_2.15 +27 1 +fi=(384) ++6 5 +-1 2 +fe=(103) +-5 1 + +fl=(108) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_powf.c +fn=(314) powf@@GLIBC_2.27 +30 2 +fi=(383) +-1 1 ++1 2 +-1 3 +fe=(108) ++1 1 + +fl=(112) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_asin.c +fn=(328) __asin_finite@GLIBC_2.15 +27 1 +fi=(113) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/ifunc-fma4.h ++5 5 +-1 2 +fe=(112) +-4 1 + +fn=(322) __acos_finite@GLIBC_2.15 +35 1 +fi=(113) +-3 5 +-1 2 ++4 1 +fe=(112) + +fl=(115) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_exp2f.c +fn=(330) exp2f@@GLIBC_2.27 +27 1 +fi=(383) ++3 1 +-1 1 ++1 2 +-1 3 +fe=(115) +-2 1 + +fl=(111) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_log.c +fn=(320) __log_finite@GLIBC_2.15 +27 1 +fi=(384) ++6 5 +-1 2 +fe=(111) +-5 1 + +fl=(102) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/s_cosf.c +fn=(302) cosf +26 1 +fi=(383) ++4 1 +-1 1 ++1 2 +-1 3 +fe=(102) +-3 1 + +fl=(109) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_pow.c +fn=(316) __pow_finite@GLIBC_2.15 +27 1 +fi=(113) ++5 5 +-1 2 +fe=(109) +-4 1 + +fl=(116) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_atan2.c +fn=(332) __atan2_finite@GLIBC_2.15 +26 1 +fi=(384) ++7 5 +-1 2 +fe=(116) + +ob=(10) /usr/lib/x86_64-linux-gnu/libresolv-2.31.so +fl=(154) ??? +fn=(512) 0x00000000000047e0 +0 12 + +fn=(8302) 0x0000000000004730 +0 5 + +fn=(8292) 0x00000000000047a0 +0 9 +cob=(2) +cfi=(18) +cfn=(8298) 0x00000000058f23a0 +calls=1 0 +0 143 +0 1 +cfn=(8302) +calls=1 0 +0 5 +0 3 + +ob=(4) +fl=(116) +fn=(332) +26 1 + +fl=(104) /build/glibc-sMfBJT/glibc-2.31/math/../sysdeps/x86_64/fpu/multiarch/e_expf.c +fn=(306) expf@@GLIBC_2.27 +27 1 +fi=(383) ++3 1 +-1 1 ++1 2 +-1 3 +fe=(104) +-2 1 + +ob=(43) /usr/lib/x86_64-linux-gnu/libssh.so.4.8.4 +fl=(216) ??? +fn=(1656) 0x000000000001f240 +0 17 +cfn=(1662) 0x0000000000037740 +calls=1 0 +0 25 +0 3 +cfn=(1684) 0x0000000000040720 +calls=1 0 +0 200 +0 3 +cfn=(1716) 0x000000000001dfc0 +calls=1 0 +0 65428 +0 3 +cfn=(1822) 0x0000000000036440 +calls=1 0 +0 12 +0 1 + +fn=(7476) 0x000000000000f560 +0 5 + +fn=(1668) ssh_threads_get_default +0 3 + +fn=(1674) 0x000000000003bce0 +0 3 + +fn=(1822) +0 6 +cfn=(1826) 0x0000000000032e30 +calls=1 0 +0 2 +0 4 + +fn=(7444) 0x0000000000040870 +0 6 + +fn=(1654) 0x000000000000f520 +0 4 +cfn=(1656) +calls=1 0 +0 65692 +0 4 + +fn=(7454) 0x0000000000032e40 +0 2 + +fn=(1662) +0 10 +cfn=(1674) +calls=1 0 +0 3 +0 6 +cfn=(1668) +calls=1 0 +0 3 +0 3 + +fn=(7396) 0x000000000001e110 +0 5 +cob=(2) +cfi=(18) +cfn=(7404) 0x0000000004eb7990 +calls=1 0 +0 363 +0 5 +cob=(2) +cfi=(18) +cfn=(7404) +calls=1 0 +0 444 +0 5 +cob=(2) +cfi=(18) +cfn=(7404) +calls=1 0 +0 473 +0 5 +cob=(2) +cfi=(18) +cfn=(7404) +calls=1 0 +0 684 +0 5 +cob=(2) +cfi=(18) +cfn=(7404) +calls=1 0 +0 953 +0 9 + +fn=(7466) 0x000000000000f5d0 +0 9 +cob=(2) +cfi=(18) +cfn=(7472) 0x0000000004eb7280 +calls=1 0 +0 157 +0 1 +cfn=(7476) +calls=1 0 +0 5 +0 3 + +fn=(1648) 0x000000000000f610 +0 12 + +fn=(1684) +0 6 +cob=(2) +cfi=(18) +cfn=(1688) 0x0000000004eb7800 +calls=1 0 +0 5 +0 155 +cfn=(1708) 0x000000000003aac0 +calls=1 0 +0 3 +0 31 + +fn=(1708) +0 3 + +fn=(7394) 0x000000000000f4f0 +0 3 +cfn=(7396) +calls=1 0 +0 2951 +0 1 +cfn=(7444) +calls=1 0 +0 6 +0 1 +cfn=(7450) 0x0000000000036480 +calls=1 0 +0 10 +0 1 +cfn=(7460) 0x00000000000377a0 +calls=1 0 +0 4 +0 3 + +fn=(7450) +0 5 +cfn=(7454) +calls=1 0 +0 2 +0 3 + +fn=(1716) +0 11 +cob=(2) +cfi=(18) +cfn=(1720) 0x0000000004eb7c30 +calls=1 0 +0 97 +0 6 +cob=(2) +cfi=(18) +cfn=(1736) 0x0000000004eb7610 +calls=1 0 +0 157 +0 3 +cob=(2) +cfi=(18) +cfn=(1720) +calls=1 0 +0 96 +0 7 +cob=(2) +cfi=(18) +cfn=(1772) 0x0000000004eb7640 +calls=1 0 +0 1580 +0 3 +cob=(2) +cfi=(18) +cfn=(1720) +calls=1 0 +0 96 +0 7 +cob=(2) +cfi=(18) +cfn=(1772) +calls=1 0 +0 2829 +0 3 +cob=(2) +cfi=(18) +cfn=(1720) +calls=1 0 +0 96 +0 7 +cob=(2) +cfi=(18) +cfn=(1772) +calls=1 0 +0 5304 +0 3 +cob=(2) +cfi=(18) +cfn=(1720) +calls=1 0 +0 96 +0 7 +cob=(2) +cfi=(18) +cfn=(1772) +calls=1 0 +0 55018 + +ob=(23) /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.7 +fl=(188) ??? +fn=(8048) 0x0000000000001080 +0 5 + +fn=(762) 0x0000000000001130 +0 12 + +fn=(8038) 0x00000000000010f0 +0 9 +cob=(2) +cfi=(18) +cfn=(8044) 0x000000000596f050 +calls=1 0 +0 150 +0 1 +cfn=(8048) +calls=1 0 +0 5 +0 3 + +ob=(43) +fl=(216) +fn=(1716) +0 2 + +fn=(1826) +0 2 + +fn=(7460) +0 4 + +ob=(7) /usr/lib/x86_64-linux-gnu/libdl-2.31.so +fl=(381) /build/glibc-sMfBJT/glibc-2.31/dlfcn/dlerror.c +fn=(8356) check_free +194 3 ++1 1 +-1 3 ++1 2 ++18 6 + +fn=(8354) fini +219 1 ++1 2 +cfn=(8356) +calls=1 -26 +* 15 + +fl=(149) ??? +fn=(8368) 0x0000000000001230 +0 5 + +fn=(472) 0x00000000000012e0 +0 12 + +fn=(8358) 0x00000000000012a0 +0 9 +cob=(2) +cfi=(18) +cfn=(8364) 0x00000000057c5140 +calls=1 0 +0 143 +0 1 +cfn=(8368) +calls=1 0 +0 5 +0 3 + +fl=(150) /build/glibc-sMfBJT/glibc-2.31/dlfcn/dlfcn.c +fn=(478) init +28 1 ++1 1 ++1 1 ++1 1 + +ob=(21) /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0 +fl=(165) ??? +fn=(930) asn1_check_version +0 7 +cob=(2) +cfi=(18) +cfn=(932) 0x0000000005aca290 +calls=1 0 +0 37 +0 6 + +fn=(8094) 0x0000000000003510 +0 9 +cob=(2) +cfi=(18) +cfn=(8100) 0x0000000005aca260 +calls=1 0 +0 143 +0 1 +cfn=(8104) 0x00000000000034a0 +calls=1 0 +0 5 +0 3 + +fn=(942) asn1_array2tree +0 7536 +cfn=(944) 0x000000000000b600 +calls=596 0 +0 262649 +0 3324 +cfn=(964) 0x000000000000bbd0 +calls=470 0 +0 73539 +0 2571 +cob=(2) +cfi=(18) +cfn=(970) 0x0000000005aca2e0 +calls=261 0 +0 5419 +0 1044 +cfn=(994) 0x000000000000b920 +calls=261 0 +0 26195 +0 5688 +cfn=(1006) 0x000000000000bd60 +calls=229 0 +0 5167 +0 7400 +cfn=(988) 0x000000000000bc90 +calls=365 0 +0 3285 +0 369 +cfn=(1024) 0x000000000000c630 +calls=2 0 +0 128811 +0 14 +cfn=(1198) 0x000000000000bdc0 +calls=2 0 +0 64758 +0 6 +cfn=(1108) 0x000000000000bf30 +calls=2 0 +0 12712 +0 6 +cfn=(1140) 0x000000000000c050 +calls=2 0 +0 26921 +0 8 + +fn=(964) +0 6580 +cfn=(968) 0x000000000000b550 +calls=470 0 +0 28519 +0 38440 + +fn=(988) +0 3285 + +fn=(1108) +0 6513 +cfn=(1010) 0x000000000000b5e0 +calls=177 0 +0 2319 +0 1770 +cfn=(1010) +calls=52 0 +0 1932 +0 178 + +fn=(1064) 0x000000000000b4c0 +0 2926 +cob=(2) +cfi=(18) +cfn=(970) +calls=266 0 +0 5124 +0 798 +cob=(2) +cfi=(18) +cfn=(970) +calls=266 0 +0 4788 +0 3458 +cob=(2) +cfi=(18) +cfn=(976) 0x0000000005aca3c0 +calls=266 0 +0 4402 + +fn=(1076) asn1_find_node +0 3591 +cob=(2) +cfi=(18) +cfn=(1078) 0x0000000005aca300 +calls=133 0 +0 3236 +0 28929 +cob=(2) +cfi=(18) +cfn=(1086) 0x0000000005aca390 +calls=133 0 +0 3263 +0 2660 +cob=(2) +cfi=(18) +cfn=(1078) +calls=133 0 +0 3192 +0 1862 +cob=(2) +cfi=(18) +cfn=(1080) 0x0000000005aca3a0 +calls=133 0 +0 2793 +0 5658 +cob=(2) +cfi=(18) +cfn=(1086) +calls=133 0 +0 3591 +0 1197 +cfn=(968) +calls=133 0 +0 7626 +0 13652 + +fn=(1140) +0 44 +cfn=(968) +calls=2 0 +0 120 +0 8277 +cfn=(1010) +calls=229 0 +0 4251 +0 8813 +cfn=(1010) +calls=229 0 +0 4251 +0 1165 + +fn=(7722) 0x000000000000bcd0 +0 7339 +cob=(2) +cfi=(18) +cfn=(1202) 0x0000000005aca280 +calls=74 0 +0 7696 +0 2980 +cob=(2) +cfi=(18) +cfn=(1202) +calls=596 0 +0 86661 + +fn=(8104) +0 5 + +fn=(968) +0 8118 +cob=(2) +cfi=(18) +cfn=(970) +calls=738 0 +0 14625 +0 5166 +cob=(2) +cfi=(18) +cfn=(976) +calls=738 0 +0 11170 +0 5166 + +fn=(1010) +0 17004 + +fn=(1198) +0 18 +cob=(2) +cfi=(18) +cfn=(1202) +calls=2 0 +0 168 +0 1782 +cob=(2) +cfi=(18) +cfn=(1202) +calls=594 0 +0 61594 +0 1196 + +fn=(7700) asn1_delete_structure +0 9566 +cfn=(1006) +calls=594 0 +0 7722 +0 7493 +cfn=(7722) +calls=594 0 +0 104376 +0 610 +cfn=(7722) +calls=2 0 +0 300 +0 6 +cfn=(1006) +calls=2 0 +0 22 +0 20 + +fn=(944) +0 5364 +cob=(2) +cfi=(18) +cfn=(946) 0x0000000005aca380 +calls=596 0 +0 147183 +0 2980 +cob=(2) +cfi=(18) +cfn=(958) 0x0000000005aca3e0 +calls=596 0 +0 99970 +0 7152 + +fn=(994) +0 6081 +cob=(2) +cfi=(18) +cfn=(976) +calls=187 0 +0 3329 +0 296 +cob=(2) +cfi=(18) +cfn=(976) +calls=74 0 +0 966 +0 1975 +cob=(2) +cfi=(18) +cfn=(958) +calls=74 0 +0 13252 +0 296 + +fn=(622) 0x0000000000003550 +0 12 + +fn=(1006) +0 12911 + +fn=(1024) +0 6234 +cfn=(968) +calls=133 0 +0 7980 +0 532 +cfn=(1064) +calls=133 0 +0 10906 +0 532 +cfn=(1064) +calls=133 0 +0 10590 +0 399 +cfn=(1076) +calls=133 0 +0 81250 +0 4042 +cfn=(1010) +calls=177 0 +0 2319 +0 1770 +cfn=(1010) +calls=52 0 +0 1932 +0 325 + +ob=(39) /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2 +fl=(212) ??? +fn=(7554) 0x000000000000d240 +0 5 + +fn=(1558) 0x000000000000d2f0 +0 12 + +fn=(7538) 0x000000000000d180 +0 17 + +fn=(7544) 0x000000000000d2b0 +0 9 +cob=(2) +cfi=(18) +cfn=(7550) 0x00000000052a10c0 +calls=1 0 +0 157 + +ob=(41) /usr/lib/x86_64-linux-gnu/libssl.so.1.1 +fl=(214) ??? +fn=(7512) 0x000000000001f770 +0 4 + +ob=(39) +fl=(212) +fn=(7544) +0 1 +cfn=(7554) +calls=1 0 +0 5 + +ob=(41) +fl=(214) +fn=(7512) +0 1 + +fn=(1628) 0x000000000001f820 +0 12 + +fn=(7502) 0x000000000001f7e0 +0 9 +cob=(2) +cfi=(18) +cfn=(7508) 0x0000000004f47bc0 +calls=1 0 +0 157 +0 1 +cfn=(7512) +calls=1 0 +0 5 +0 3 + +ob=(39) +fl=(212) +fn=(7544) +0 3 + +ob=(46) /usr/lib/x86_64-linux-gnu/libgcc_s.so.1 +fl=(219) ??? +fn=(1904) 0x0000000000003d10 +0 12 + +fn=(5796) _Unwind_SetIP +0 3 + +fn=(5430) 0x000000000000ef60 +0 3648 + +fn=(5870) _Unwind_DeleteException +0 7 +cob=(47) /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28 +cfi=(220) ??? +cfn=(5872) 0x00000000000aa5d0 +calls=1 0 +0 2606 + +fn=(5298) 0x00000000000119d0 +0 750 + +fn=(5748) _Unwind_GetCFA +0 12 + +fn=(5790) _Unwind_SetGR +0 34 + +fn=(5228) _Unwind_Find_FDE +0 154 +cob=(2) +cfi=(18) +cfn=(5230) 0x0000000004c10320 +calls=7 0 +0 8558 +0 140 + +fn=(5514) 0x0000000000010590 +0 1830 + +fn=(7340) 0x0000000000003cd0 +0 9 +cob=(2) +cfi=(18) +cfn=(7346) 0x0000000004c10300 +calls=1 0 +0 157 +0 1 +cfn=(7350) 0x0000000000003c60 +calls=1 0 +0 5 +0 3 + +fn=(1864) __cpu_indicator_init +0 45 +cfn=(1866) 0x00000000000036d0 +calls=1 0 +0 105 +0 16 + +fn=(5504) 0x000000000000e9f0 +0 19 + +fn=(5602) 0x000000000000ed80 +0 396 + +fn=(5750) 0x0000000000010b50 +0 23 +cfn=(5214) 0x000000000000f800 +calls=2 0 +0 3109 +0 4 +cfn=(5214) +calls=1 0 +0 1366 +0 9 +cob=(2) +cfi=(18) +cfn=(5744) 0x0000000004c10410 +calls=3 0 +0 15 +0 47 +cob=(47) +cfi=(220) +cfn=(5638) __gxx_personality_v0 +calls=2 0 +0 2051 +0 16 +cfn=(5514) +calls=2 0 +0 720 +0 49 + +fn=(1866) +0 105 + +fn=(5802) 0x000000000000ea70 +0 372 + +fn=(5848) 0x0000000000010f40 +0 2 + +fn=(5214) +0 497 +cob=(2) +cfi=(18) +cfn=(5222) 0x0000000004c10510 +calls=7 0 +0 9651 +0 77 +cob=(2) +cfi=(18) +cfn=(5350) 0x0000000004c103c0 +calls=7 0 +0 134 +0 517 +cfn=(5430) +calls=7 0 +0 1450 +0 245 +cfn=(5430) +calls=7 0 +0 2198 +0 300 +cfn=(5602) +calls=4 0 +0 200 +0 32 +cfn=(5602) +calls=4 0 +0 196 +0 12 + +fn=(5236) 0x00000000000125f0 +0 2597 +cfn=(5298) +calls=7 0 +0 210 +0 143 +cfn=(5298) +calls=7 0 +0 210 +0 1116 +cfn=(5348) 0x0000000000011b20 +calls=7 0 +0 1502 +0 112 +cfn=(5298) +calls=7 0 +0 210 +0 208 + +fn=(5644) _Unwind_GetLanguageSpecificData +0 9 + +fn=(5674) _Unwind_GetIPInfo +0 21 + +fn=(5206) _Unwind_RaiseException +0 20 +cfn=(5208) 0x00000000000109d0 +calls=1 0 +0 6848 +0 34 +cfn=(5214) +calls=1 0 +0 2269 +0 6 +cfn=(5214) +calls=2 0 +0 3273 +0 33 +cob=(47) +cfi=(220) +cfn=(5638) +calls=2 0 +0 3724 +0 12 +cfn=(5514) +calls=2 0 +0 720 +0 39 +cob=(2) +cfi=(18) +cfn=(5744) +calls=1 0 +0 782 +0 38 +cfn=(5750) +calls=1 0 +0 7409 +0 5 +cfn=(5802) +calls=1 0 +0 372 +0 4 +cfn=(5848) +calls=1 0 +0 2 +0 13 + +fn=(5654) _Unwind_GetRegionStart +0 9 + +fn=(5208) +0 49 +cfn=(5214) +calls=1 0 +0 5492 +0 7 +cob=(2) +cfi=(18) +cfn=(5500) 0x0000000004c104d0 +calls=1 0 +0 887 +0 16 +cfn=(5514) +calls=1 0 +0 390 +0 7 + +fn=(5348) +0 49 +cob=(2) +cfi=(18) +cfn=(5350) +calls=7 0 +0 1015 +0 250 +cfn=(5298) +calls=4 0 +0 120 +0 68 + +fn=(7350) +0 5 + +ob=(1) /usr/lib/x86_64-linux-gnu/ld-2.31.so +fl=(33) /build/glibc-sMfBJT/glibc-2.31/elf/dl-debug.c +fn=(100) _dl_debug_state +73 2 ++1 2 + +fn=(96) _dl_debug_initialize +46 49 ++3 98 ++5 96 ++5 2 +-1 1 ++1 2 ++1 2 +-1 1 ++5 1 +-14 49 ++4 98 ++3 1 ++1 50 + +fl=(22) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/strcmp.S +fn=(58) strcmp +111 28954 ++33 28954 ++1 28954 ++2 28954 ++1 28954 ++21 28954 ++1 28954 ++1 25128 ++1 25128 ++1 20112 ++1 20112 ++1 20112 ++1 20112 ++21 20112 ++1 20112 ++1 20112 ++1 20112 ++1 20112 ++1 20112 ++1 20112 ++5 2208 ++1 6624 ++9 2208 ++1 2208 ++1 2208 ++1 2208 ++1 2208 ++1 2208 ++1 2208 ++1 2208 +-7 8842 ++1 8842 ++1 8842 ++1 8842 ++1 8842 ++1 8842 ++1 8842 ++1 8842 ++1 9583 ++1 6418 ++1 6418 ++1 6418 ++2 6418 ++1 6418 ++1 6418 ++1 6418 ++1 6418 ++1 6418 +-5 3165 ++1 3165 ++1 3165 ++1 3165 ++1 3165 ++1 3165 ++10 1467 ++1 1467 ++1 1467 ++2 1467 ++6 1467 ++1 1467 ++1 1467 ++1 1467 ++1 1467 ++5 1467 ++2 1072 ++1 1072 ++1 2144 ++8 1072 ++1 1072 ++3 1072 ++1 1072 ++1 1072 ++1 1072 ++1 1072 ++1 1072 +-9 30 ++1 30 ++3 30 ++1 30 ++1 30 ++1 30 ++1 30 ++1 30 ++6 113 ++1 113 ++1 113 ++3 113 ++1 113 ++1 113 ++1 113 ++1 113 ++1 113 ++5 30 ++1 30 ++9 288 ++1 288 ++1 288 ++1 288 ++1 288 ++2 288 ++1 288 ++1 288 ++1 288 ++1 288 ++1 288 ++1 288 ++1 146 ++3 146 ++1 146 ++1 146 ++6 146 ++1 146 ++1 292 ++4 146 ++1 146 ++3 146 ++1 146 ++1 146 ++3 146 ++1 146 ++1 146 ++6 146 ++1 146 ++1 146 ++1 146 ++1 146 ++1 146 ++6 7 ++1 7 ++2 7 ++1 7 ++2 7 ++1 7 ++1 7 ++3 7 ++1 7 ++1 7 ++6 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++48 408 ++1 408 ++1 408 ++1 408 ++1 408 ++2 408 ++1 408 ++1 408 ++1 408 ++1 408 ++1 408 ++1 408 ++1 207 ++3 207 ++1 207 ++1 207 ++6 207 ++1 207 ++1 414 ++4 207 ++1 207 ++3 207 ++1 207 ++1 207 ++3 207 ++1 207 ++1 207 ++6 207 ++1 207 ++1 207 ++1 207 ++1 207 ++1 207 ++7 12 ++1 12 ++2 12 ++1 12 ++2 12 ++1 12 ++1 12 ++3 12 ++1 12 ++1 12 ++6 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++41 519 ++1 519 ++1 519 ++1 519 ++1 519 ++2 519 ++1 519 ++1 519 ++1 519 ++1 519 ++1 519 ++1 519 ++1 371 ++4 371 ++1 371 ++1 371 ++6 371 ++1 371 ++1 742 ++4 371 ++1 371 +-1 8 ++1 8 ++3 379 ++1 379 ++1 379 ++3 379 ++1 379 ++1 379 ++6 379 ++1 379 ++1 379 ++1 379 ++1 379 ++1 379 ++7 52 ++1 52 ++2 52 ++1 52 ++2 52 ++1 52 ++1 52 ++3 52 ++1 52 ++1 52 ++6 52 ++1 52 ++1 52 ++1 52 ++1 52 ++1 52 ++7 8 ++1 8 ++1 8 ++4 1 ++1 1 ++1 1 ++1 1 ++7 1 ++1 1 ++1 1 ++16 341 ++1 341 ++1 341 ++1 341 ++1 341 ++2 341 ++1 341 ++1 341 ++1 341 ++1 341 ++1 341 ++1 341 ++1 150 ++4 150 ++1 150 ++1 150 ++6 150 ++1 150 ++1 300 ++4 150 ++1 150 +-1 6 ++1 6 ++3 150 ++1 150 ++1 150 ++3 150 ++1 150 ++1 150 ++6 150 ++1 150 ++1 150 ++1 150 ++1 150 ++1 150 ++7 32 ++1 32 ++2 32 ++1 32 ++2 32 ++1 32 ++1 32 ++3 32 ++1 32 ++1 32 ++6 32 ++1 32 ++1 32 ++1 32 ++1 32 ++1 32 ++7 6 ++1 6 ++1 6 ++4 6 ++1 6 ++1 6 ++1 6 ++13 6 ++1 6 ++1 6 ++1 6 ++9 478 ++1 478 ++1 478 ++1 478 ++1 478 ++2 478 ++1 478 ++1 478 ++1 478 ++1 478 ++1 478 ++1 478 ++1 219 ++4 219 ++1 219 ++1 219 ++6 219 ++1 219 ++1 438 ++4 219 ++1 219 +-1 3 ++1 3 ++3 221 ++1 221 ++1 221 ++3 221 ++1 221 ++1 221 ++6 221 ++1 221 ++1 221 ++1 221 ++1 221 ++1 221 ++7 32 ++1 32 ++2 32 ++1 32 ++2 32 ++1 32 ++1 32 ++3 32 ++1 32 ++1 32 ++6 32 ++1 32 ++1 32 ++1 32 ++1 32 ++1 32 ++7 3 ++1 3 ++1 3 ++4 2 ++1 2 ++1 2 ++1 2 ++7 1 ++1 1 ++1 1 ++4 1 ++1 1 ++1 1 ++1 1 ++9 360 ++1 360 ++1 360 ++1 360 ++1 360 ++2 360 ++1 360 ++1 360 ++1 360 ++1 360 ++1 360 ++1 360 ++1 194 ++4 194 ++1 194 ++1 194 ++6 194 ++1 194 ++1 388 ++4 194 ++1 194 +-1 6 ++1 6 ++3 199 ++1 199 ++1 199 ++3 199 ++1 199 ++1 199 ++6 199 ++1 199 ++1 199 ++1 199 ++1 199 ++1 199 ++7 41 ++1 41 ++2 41 ++1 41 ++2 41 ++1 41 ++1 41 ++3 41 ++1 41 ++1 41 ++6 41 ++1 41 ++1 41 ++1 41 ++1 41 ++1 41 ++7 6 ++1 6 ++1 6 ++4 1 ++1 1 ++1 1 ++1 1 ++13 1 ++1 1 ++1 1 ++1 1 ++9 578 ++1 578 ++1 578 ++1 578 ++1 578 ++2 578 ++1 578 ++1 578 ++1 578 ++1 578 ++1 578 ++1 578 ++1 262 ++4 262 ++1 262 ++1 262 ++6 262 ++1 262 ++1 524 ++4 262 ++1 262 +-1 6 ++1 6 ++3 265 ++1 265 ++1 265 ++3 265 ++1 265 ++1 265 ++6 265 ++1 265 ++1 265 ++1 265 ++1 265 ++1 265 ++7 29 ++1 29 ++2 29 ++1 29 ++2 28 ++1 28 ++1 28 ++3 28 ++1 28 ++1 28 ++6 28 ++1 28 ++1 28 ++1 28 ++1 28 ++1 28 ++7 6 ++1 6 ++1 6 ++4 10 ++1 10 ++1 10 ++1 10 ++7 6 ++1 6 ++1 6 ++4 4 ++1 4 ++1 4 ++1 4 ++9 457 ++1 457 ++1 457 ++1 457 ++1 457 ++2 457 ++1 457 ++1 457 ++1 457 ++1 457 ++1 457 ++1 457 ++1 333 ++4 333 ++1 333 ++1 333 ++6 333 ++1 333 ++1 666 ++4 333 ++1 333 +-1 11 ++1 11 ++3 343 ++1 343 ++1 343 ++3 343 ++1 343 ++1 343 ++6 343 ++1 343 ++1 343 ++1 343 ++1 343 ++1 343 ++7 68 ++1 68 ++2 68 ++1 68 ++2 68 ++1 68 ++1 68 ++3 68 ++1 68 ++1 68 ++6 68 ++1 68 ++1 68 ++1 68 ++1 68 ++1 68 ++7 11 ++1 11 ++1 11 ++4 5 ++1 5 ++1 5 ++1 5 ++7 4 ++1 4 ++1 4 ++4 1 ++1 1 ++1 1 ++1 1 ++9 550 ++1 550 ++1 550 ++1 550 ++1 550 ++2 550 ++1 550 ++1 550 ++1 550 ++1 550 ++1 550 ++1 550 ++1 313 ++4 313 ++1 313 ++1 313 ++6 313 ++1 313 ++1 626 ++4 313 ++1 313 +-1 9 ++1 9 ++3 321 ++1 321 ++1 321 ++3 321 ++1 321 ++1 321 ++6 321 ++1 321 ++1 321 ++1 321 ++1 321 ++1 321 ++7 56 ++1 56 ++2 56 ++1 56 ++2 56 ++1 56 ++1 56 ++3 56 ++1 56 ++1 56 ++6 56 ++1 56 ++1 56 ++1 56 ++1 56 ++1 56 ++7 9 ++1 9 ++1 9 ++4 3 ++1 3 ++1 3 ++1 3 ++7 2 ++1 2 ++1 2 ++4 1 ++1 1 ++1 1 ++1 1 ++9 701 ++1 701 ++1 701 ++1 701 ++1 701 ++2 701 ++1 701 ++1 701 ++1 701 ++1 701 ++1 701 ++1 701 ++1 366 ++4 366 ++1 366 ++1 366 ++6 366 ++1 366 ++1 732 ++4 366 ++1 366 +-1 15 ++1 15 ++3 380 ++1 380 ++1 380 ++3 380 ++1 380 ++1 380 ++6 380 ++1 380 ++1 380 ++1 380 ++1 380 ++1 380 ++7 57 ++1 57 ++2 57 ++1 57 ++2 57 ++1 57 ++1 57 ++3 57 ++1 57 ++1 57 ++6 57 ++1 57 ++1 57 ++1 57 ++1 57 ++1 57 ++7 15 ++1 15 ++1 15 ++4 4 ++1 4 ++1 4 ++1 4 ++7 3 ++1 3 ++1 3 ++4 1 ++1 1 ++1 1 ++1 1 ++9 724 ++1 724 ++1 724 ++1 724 ++1 724 ++2 724 ++1 724 ++1 724 ++1 724 ++1 724 ++1 724 ++1 724 ++1 299 ++4 299 ++1 299 ++1 299 ++6 299 ++1 299 ++1 598 ++4 299 ++1 299 +-1 8 ++1 8 ++3 307 ++1 307 ++1 307 ++3 307 ++1 307 ++1 307 ++6 307 ++1 307 ++1 307 ++1 307 ++1 307 ++1 307 ++7 40 ++1 40 ++2 40 ++1 40 ++2 40 ++1 40 ++1 40 ++3 40 ++1 40 ++1 40 ++6 40 ++1 40 ++1 40 ++1 40 ++1 40 ++1 40 ++7 8 ++1 8 ++1 8 ++4 2 ++1 2 ++1 2 ++1 2 ++7 2 ++1 2 ++1 2 ++16 901 ++1 901 ++1 901 ++1 901 ++1 901 ++2 901 ++1 901 ++1 901 ++1 901 ++1 901 ++1 901 ++1 901 ++1 369 ++4 369 ++1 369 ++1 369 ++6 369 ++1 369 ++1 738 ++4 369 ++1 369 +-1 7 ++1 7 ++3 375 ++1 375 ++1 375 ++3 375 ++1 375 ++1 375 ++6 375 ++1 375 ++1 375 ++1 375 ++1 375 ++1 375 ++7 51 ++1 51 ++2 51 ++1 51 ++2 51 ++1 51 ++1 51 ++3 51 ++1 51 ++1 51 ++6 51 ++1 51 ++1 51 ++1 51 ++1 51 ++1 51 ++7 7 ++1 7 ++1 7 ++4 1 ++1 1 ++1 1 ++1 1 ++13 1 ++1 1 ++1 1 ++1 1 ++9 939 ++1 939 ++1 939 ++1 939 ++1 939 ++2 939 ++1 939 ++1 939 ++1 939 ++1 939 ++1 939 ++1 939 ++1 635 ++4 635 ++1 635 ++1 635 ++6 635 ++1 635 ++1 1270 ++4 635 ++1 635 +-1 17 ++1 17 ++3 652 ++1 652 ++1 652 ++3 652 ++1 652 ++1 652 ++6 652 ++1 652 ++1 652 ++1 652 ++1 652 ++1 652 ++7 51 ++1 51 ++2 51 ++1 51 ++2 51 ++1 51 ++1 51 ++3 51 ++1 51 ++1 51 ++6 51 ++1 51 ++1 51 ++1 51 ++1 51 ++1 51 ++7 17 ++1 17 ++1 17 ++4 4 ++1 4 ++1 4 ++1 4 ++7 4 ++1 4 ++1 4 ++16 1284 ++1 1284 ++1 1284 ++1 1284 ++1 1284 ++2 1284 ++1 1284 ++1 1284 ++1 1284 ++1 1284 ++1 1284 ++1 1284 ++1 344 ++4 344 ++1 344 ++1 344 ++6 344 ++1 344 ++1 688 ++4 344 ++1 344 +-1 13 ++1 13 ++3 357 ++1 357 ++1 357 ++3 357 ++1 357 ++1 357 ++6 357 ++1 357 ++1 357 ++1 357 ++1 357 ++1 357 ++7 62 ++1 62 ++2 62 ++1 62 ++2 62 ++1 62 ++1 62 ++3 62 ++1 62 ++1 62 ++6 62 ++1 62 ++1 62 ++1 62 ++1 62 ++1 62 ++7 13 ++1 13 ++1 13 ++4 3 ++1 3 ++1 3 ++1 3 ++7 3 ++1 3 ++1 3 ++16 1055 ++1 1055 ++1 1055 ++1 1055 ++1 1055 ++2 1055 ++1 1055 ++1 1055 ++1 1055 ++1 1055 ++1 1055 ++1 1055 ++2 695 ++4 695 ++1 695 ++1 695 ++6 695 ++1 695 ++2 1390 ++4 695 ++1 695 +-1 16 ++1 16 ++3 711 ++1 711 ++1 711 ++3 711 ++1 711 ++1 711 ++6 711 ++1 711 ++1 711 ++1 711 ++1 711 ++1 711 ++7 70 ++1 70 ++2 70 ++1 70 ++2 70 ++1 70 ++1 70 ++3 70 ++1 70 ++1 70 ++6 70 ++1 70 ++1 70 ++1 70 ++1 70 ++1 70 ++7 16 ++1 16 ++1 16 ++4 3 ++1 3 ++1 3 ++1 3 ++7 3 ++1 3 ++1 3 ++11 16 ++1 16 ++1 16 ++1 32 ++4 16 ++2 16 ++1 16 ++1 16 ++1 16 +-5 5959 ++2 5959 ++1 5959 ++1 5959 ++1 5959 +-3 5075 ++1 5075 ++1 5075 ++1 5075 ++1 12836 ++5 6418 ++6 6418 ++1 6418 ++8 6418 ++1 6418 +-16 22536 ++6 22536 ++1 22536 ++8 22536 ++1 22536 + +fl=(14) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/../strlen.S +fn=(30) strlen +41 238 ++38 238 ++1 238 ++1 238 ++1 238 ++1 238 ++1 238 ++1 238 ++2 238 ++2 238 ++31 236 ++1 236 ++1 236 ++1 236 ++1 236 ++1 71 ++2 71 ++4 165 ++1 165 ++1 165 ++1 165 ++1 165 ++1 165 ++1 165 ++1 165 ++1 165 ++1 165 ++1 165 ++1 165 ++5 1314 ++4 2 ++1 28 ++1 14 ++15 1 ++1 1 ++1 2 ++51 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 +-7 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++16 4 ++2 4 ++1 56 ++2 4 ++1 4 ++1 4 ++2 4 + +fl=(181) /build/glibc-sMfBJT/glibc-2.31/elf/dl-open.c +fn=(722) _dl_find_dso_for_object +201 9 ++4 3 ++1 4 ++1 32 ++1 2 +-2 21 ++5 2 ++4 7 + +fl=(54) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/pread64_nocancel.c +fn=(174) __pread64_nocancel +29 16 ++1 32 ++1 8 + +fl=(15) /build/glibc-sMfBJT/glibc-2.31/elf/../misc/sbrk.c +fn=(32) sbrk +32 5 ++8 6 ++4 2 ++16 5 + +fl=(35) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/strcspn.S +fn=(104) strcspn +28 1 ++2 1 ++7 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++1 33 ++3 3 ++7 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++9 3 ++12 1 ++2 1 ++1 1 ++1 1 +-4 16 ++2 16 ++1 16 ++1 16 ++2 16 ++1 16 ++1 16 ++2 16 ++1 16 ++1 16 ++2 16 ++1 16 ++1 16 ++6 1 ++7 1 ++4 1 + +fl=(26) /build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/unix/syscall-template.S +fn=(70) uname +78 5 ++1 1 + +fl=(8) /build/glibc-sMfBJT/glibc-2.31/elf/dl-tunables.c +fn=(14) __GI___tunables_init +287 9 +-9 5 +67 191 ++6 62 +-3 62 ++3 5552 ++4 124 ++5 124 +fi=(9) /build/glibc-sMfBJT/glibc-2.31/elf/dl-tunables.h ++37 62 +fe=(8) +-37 248 +fi=(9) ++38 38 +-1 133 ++1 38 +-1 62 ++1 124 +fe=(8) +328 248 +-12 8060 +fi=(9) +119 3348 ++1 1188 +-1 774 ++1 1188 +fe=(8) +310 6448 +70 62 +-3 124 +362 8 + +fn=(26) __tunable_get_val +368 71 ++3 426 ++9 71 +-9 278 ++9 9 ++17 355 ++2 71 +-9 62 ++1 62 + +fl=(1) ??? +fn=(0) 0x0000000000001100 +0 2 +cfi=(2) /build/glibc-sMfBJT/glibc-2.31/elf/rtld.c +cfn=(2) _dl_start +calls=1 463 +0 12762632 +0 14 +cfi=(126) /build/glibc-sMfBJT/glibc-2.31/elf/dl-init.c +cfn=(368) _dl_init +calls=1 79 +0 812791 +0 3 +cob=(50) /home/marcus/Documents/unigrid/daemon/daemon/unigridd +cfi=(225) ??? +cfn=(2126) _start +calls=1 0 +0 74837016 + +fl=(7) /build/glibc-sMfBJT/glibc-2.31/elf/../elf/dl-sysdep.c +fn=(360) _dl_sysdep_start_cleanup +258 1 ++1 1 + +fn=(12) _dl_sysdep_start +89 9 ++25 1 +-1 1 ++1 196 ++6 1 +-3 1 ++1 1 +-4 1 ++3 1 ++3 8 +-29 1 +-1 2 ++30 20 ++1 108 ++61 1 ++1 1 +-1 1 ++1 1 +-63 75 ++34 1 +-34 2 ++35 1 +-35 2 ++46 1 +-46 1 ++47 1 +-1 1 +-46 3 ++40 1 +-40 1 ++41 1 +-1 1 +-40 3 ++37 1 +-37 2 ++38 1 +-38 3 ++13 1 +-13 2 ++14 1 +-14 2 ++10 1 +-10 2 ++11 1 +-11 2 ++7 1 +-7 4 ++4 1 +-4 4 +223 1 +cfi=(8) +cfn=(14) +calls=1 +64 +* 28282 +fi=(10) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/dl-sysdep.c +36 2 +cfi=(11) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/x86_64/brk.c +cfn=(20) brk +calls=1 -8 +* 10 +fi=(12) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/cpu-features.c +322 1 +-13 1 ++13 1 +-12 1 ++1 1 ++11 1 ++3 6 +476 3 ++1 1 ++3 2 ++1 1 ++6 1 ++6 1 +-5 1 ++5 1 +-3 1 ++3 1 +-4 1 ++4 1 +cfi=(8) +cfn=(26) +calls=1 368 +* 18 ++2 4 +cfi=(8) +cfn=(26) +calls=1 368 +* 20 +* 1 ++2 3 +-2 1 ++2 1 +cfi=(8) +cfn=(26) +calls=1 368 +* 20 +* 1 ++2 3 +-2 1 ++2 1 +cfi=(8) +cfn=(26) +calls=1 368 +* 20 +* 1 ++12 1 +-1 1 +-11 1 ++12 1 ++47 4 +cfi=(8) +cfn=(26) +calls=1 368 +* 18 ++2 4 +cfi=(8) +cfn=(26) +calls=1 368 +* 18 +fi=(13) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/x86/cpu-features.c +28 6 +fe=(7) +234 3 ++1 1 +cfi=(14) +cfn=(30) +calls=1 41 +* 17 +* 1 ++2 2 +cfi=(15) +cfn=(32) +calls=1 32 +* 18 +* 3 ++12 3 ++3 5 +cfi=(2) +cfn=(34) dl_main +calls=1 1090 +* 12732347 ++1 1 ++1 8 +fi=(12) +515 3 ++28 2 +-9 3 ++2 4 ++1 2 ++2 4 ++1 2 +331 6 +cfn=(24) get_common_indices.constprop.0 +calls=1 71 +* 99 +49 4 ++1 2 ++1 6 ++5 2 ++1 6 ++5 2 ++1 6 +336 7 ++89 4 +-96 1 ++96 2 +-99 1 ++12 10 ++38 2 ++14 1 ++10 5 ++14 2 ++1 1 +fe=(7) + +fl=(30) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S +fn=(80) memset +108 153 ++1 765 ++6 153 ++1 153 ++1 129 ++1 129 ++2 29 ++1 29 ++2 29 ++65 100 ++1 100 ++1 34 ++1 34 ++1 34 ++1 34 ++3 35 ++3 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++2 682 ++1 682 ++1 682 ++1 682 ++1 682 ++1 682 ++1 682 ++1 65 ++15 24 ++1 24 ++1 24 ++1 6 ++1 6 ++1 2 ++1 2 ++24 18 ++1 18 ++2 18 ++3 4 ++1 4 ++2 4 ++3 2 ++1 2 ++2 2 + +fl=(40) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/read_nocancel.c +fn=(126) __read_nocancel +25 47 ++1 188 ++1 47 + +fl=(10) +fn=(68) _dl_discover_osversion +46 5 ++2 3 ++85 5 +-45 2 +cfi=(26) +cfn=(70) +calls=1 -10 +* 6 ++15 1 +-15 2 ++20 1 +-1 1 ++3 12 ++4 3 +-2 6 ++2 10 ++2 1 ++1 2 +-3 4 ++7 3 +-1 3 ++4 3 +-2 3 ++2 10 ++5 2 + +fl=(60) /build/glibc-sMfBJT/glibc-2.31/elf/dl-reloc.c +fn=(200) _dl_relocate_object +148 539 ++15 49 +-15 98 ++15 49 ++1 245 ++6 98 ++6 245 +-18 44 ++22 44 ++7 196 ++40 49 +fi=(5) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86_64/dl-machine.h +76 49 +fe=(60) +227 98 +fi=(5) +76 145 ++6 42 ++4 63 ++14 21 +-8 21 ++8 42 ++20 42 ++11 84 +fe=(60) +255 1739 +-96 21 +fi=(5) +481 63 +fe=(60) +159 42 ++96 21 +fi=(4) /build/glibc-sMfBJT/glibc-2.31/elf/do-rel.h +48 21 +fe=(60) +255 21 +fi=(4) +47 21 ++11 21 +-11 42 ++11 42 +fe=(60) +255 28 +-96 28 +fi=(5) +481 84 +fe=(60) +159 56 ++96 28 +fi=(4) +48 28 +fe=(60) +255 28 +fi=(4) +47 28 ++11 28 +-11 56 ++11 56 +fe=(60) +255 49 +fi=(4) +48 49 +fe=(60) +255 49 +fi=(4) +47 49 ++11 49 +-11 98 ++11 98 +-7 21 +-1 42 ++11 42 +fi=(5) +552 4276 ++4 4276 ++3 6414 ++1 2138 +fi=(4) +61 6576 ++2 8776 ++2 170 +-4 6 ++13 42 ++1 14 ++1 112 +fi=(5) +552 56 ++25 112 ++2 56 +cob=(4) +cfi=(105) +cfn=(334) +calls=1 27 +* 9 +cob=(4) +cfi=(116) +cfn=(332) +calls=1 26 +* 9 +cob=(4) +cfi=(115) +cfn=(330) +calls=1 27 +* 9 +cob=(4) +cfi=(112) +cfn=(328) +calls=1 27 +* 9 +cob=(4) +cfi=(114) +cfn=(326) +calls=1 26 +* 9 +cob=(4) +cfi=(112) +cfn=(322) +calls=1 35 +* 9 +cob=(4) +cfi=(111) +cfn=(320) +calls=1 27 +* 9 +cob=(4) +cfi=(110) +cfn=(318) +calls=1 27 +* 9 +cob=(4) +cfi=(109) +cfn=(316) +calls=1 27 +* 9 +cob=(4) +cfi=(108) +cfn=(314) +calls=1 30 +* 9 +cob=(4) +cfi=(107) +cfn=(312) +calls=1 26 +* 9 +cob=(4) +cfi=(106) +cfn=(310) +calls=1 27 +* 9 +cob=(4) +cfi=(105) +cfn=(308) +calls=1 34 +* 9 +cob=(4) +cfi=(104) +cfn=(306) +calls=1 27 +* 9 +cob=(4) +cfi=(103) +cfn=(304) +calls=1 27 +* 9 +cob=(4) +cfi=(102) +cfn=(302) +calls=1 26 +* 9 +cob=(3) /usr/lib/x86_64-linux-gnu/libc-2.31.so +cfi=(101) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncase_l.c +cfn=(298) strncasecmp_l +calls=1 31 +* 6 +cob=(3) +cfi=(100) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strchrnul.c +cfn=(296) strchrnul +calls=1 31 +* 10 +cob=(3) +cfi=(98) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wmemcmp.c +cfn=(292) wmemcmp +calls=1 29 +* 13 +cob=(3) +cfi=(97) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/stpcpy.c +cfn=(290) stpcpy +calls=1 33 +* 9 +cob=(3) +cfi=(96) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/stpncpy.c +cfn=(288) stpncpy +calls=1 31 +* 9 +cob=(3) +cfi=(95) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strspn.c +cfn=(286) strspn +calls=1 29 +* 7 +cob=(3) +cfi=(94) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcslen.c +cfn=(284) wcslen +calls=1 29 +* 10 +cob=(3) +cfi=(93) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memchr.c +cfn=(282) memchr +calls=1 29 +* 10 +cob=(3) +cfi=(92) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcasecmp_l.c +cfn=(280) strcasecmp_l +calls=1 31 +* 6 +cob=(3) +cfi=(91) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memrchr.c +cfn=(278) memrchr +calls=1 29 +* 10 +cob=(3) +cfi=(90) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strlen.c +cfn=(276) strlen +calls=1 29 +* 10 +cob=(3) +cfi=(89) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strchr.c +cfn=(274) index +calls=1 49 +* 9 +cob=(3) +cfi=(88) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strpbrk.c +cfn=(272) strpbrk +calls=1 29 +* 7 +cob=(3) +cfi=(87) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcscpy.c +cfn=(270) wcscpy +calls=1 43 +* 7 +cob=(3) +cfi=(85) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wmemset.c +cfn=(266) wmemset +calls=2 31 +* 34 +cob=(3) +cfi=(84) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcsnlen.c +cfn=(264) wcsnlen +calls=1 49 +* 9 +cob=(3) +cfi=(83) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memcpy.c +cfn=(260) memcpy@@GLIBC_2.14 +calls=1 29 +* 17 +cob=(3) +cfi=(82) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcpy.c +cfn=(258) strcpy +calls=1 29 +* 9 +cob=(3) +cfi=(81) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncase.c +cfn=(256) strncasecmp +calls=1 31 +* 6 +cob=(3) +cfi=(80) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcspn.c +cfn=(254) strcspn +calls=1 29 +* 7 +cob=(3) +cfi=(79) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strnlen.c +cfn=(252) strnlen +calls=2 31 +* 20 +cob=(3) +cfi=(78) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcschr.c +cfn=(250) wcschr +calls=2 31 +* 20 +cob=(3) +cfi=(76) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memset.c +cfn=(246) memset +calls=1 29 +* 19 +cob=(3) +cfi=(75) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcmp.c +cfn=(244) strcmp +calls=1 53 +* 9 +cob=(3) +cfi=(74) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncmp.c +cfn=(242) strncmp +calls=1 54 +* 9 +cob=(3) +cfi=(72) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memcmp.c +cfn=(238) bcmp +calls=1 29 +* 13 +cob=(3) +cfi=(71) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/mempcpy.c +cfn=(234) mempcpy +calls=1 33 +* 17 +cob=(3) +cfi=(70) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wcscmp.c +cfn=(232) wcscmp +calls=1 30 +* 10 +cob=(3) +cfi=(69) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/wmemchr.c +cfn=(230) wmemchr +calls=2 31 +* 20 +cob=(3) +cfi=(68) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/rawmemchr.c +cfn=(228) rawmemchr +calls=1 31 +* 10 +cob=(3) +cfi=(67) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strrchr.c +cfn=(226) rindex +calls=1 28 +* 10 +cob=(3) +cfi=(66) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcat.c +cfn=(224) strcat +calls=1 29 +* 9 +cob=(3) +cfi=(65) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcasecmp.c +cfn=(222) strcasecmp +calls=1 31 +* 6 +cob=(3) +cfi=(64) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncpy.c +cfn=(220) strncpy +calls=1 29 +* 9 +cob=(3) +cfi=(62) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memmove.c +cfn=(216) memmove +calls=2 29 +* 34 +-27 56 ++28 56 +fi=(4) +75 170 +fe=(60) +255 392 ++3 196 ++24 49 ++3 98 ++17 147 ++2 392 +177 98 ++3 81 +fi=(4) +-96 77 +-1 77 ++3 77 +-3 77 ++3 77 ++12 77 +-12 77 ++12 154 ++10 150 ++10 87 ++3 152 ++3 152 +-73 48 +-1 48 +fi=(5) +491 144 +fi=(4) +127 43616 ++9 21808 ++1 10904 +-1 21808 ++1 10904 ++2 10904 +-2 10904 ++2 21808 +-1 21808 +fi=(5) +276 21808 ++21 21808 ++4 21808 ++7 43616 +fi=(61) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/generic/ldsodefs.h +126 32646 +fi=(5) +308 128906 +fi=(4) +138 7899 +fi=(5) +308 7899 +fi=(4) +138 7899 +fi=(5) +308 7899 +fi=(4) +138 7899 +fi=(5) +308 15798 +fi=(4) +138 37 +fi=(5) +308 37 +fi=(4) +138 37 +fi=(5) +308 37 +fi=(4) +138 37 +fi=(5) +308 95306 +cfi=(6) /build/glibc-sMfBJT/glibc-2.31/elf/dl-lookup.c +cfn=(208) _dl_lookup_symbol_x +calls=7936 841 +* 9820735 +* 47616 ++1 32646 ++24 64740 +457 32502 ++1 10834 +fi=(4) +124 32712 ++19 240 +fi=(5) +367 14 ++1 28 ++61 72 ++4 96 ++5 24 ++9 24 +-9 48 ++9 48 +-72 6 ++11 2 +-9 4 ++9 4 +497 111 ++4 222 +cfi=(20) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S +cfn=(48) memcpy +calls=37 127 +* 673 ++2 111 ++1 37 +fi=(4) +111 198 ++1 48 +fi=(5) +536 48 +fi=(4) +112 48 +fi=(5) +536 96 +fi=(4) +112 47693 +fi=(5) +536 47693 +fi=(4) +112 47693 +fi=(5) +536 95386 ++5 95482 ++1 47741 +fi=(4) +111 47741 +fi=(5) +542 95482 +fi=(4) +111 95482 ++7 144 +-67 1 +160 5 ++2 20 ++9 15 +-1 30 +fi=(5) +276 10 ++21 10 ++4 10 ++7 20 +fi=(61) +126 15 +fi=(5) +308 165 +cfi=(6) +cfn=(208) +calls=5 841 +* 9049 +* 35 ++1 15 ++24 74 +-24 10832 ++3 10766 +-3 10766 ++3 21532 ++2 1710 ++3 684 ++1 1026 ++1 684 ++4 342 ++7 342 +cob=(3) +cfi=(96) +cfn=(288) +calls=1 31 +* 9 +cob=(3) +cfi=(88) +cfn=(272) +calls=5 29 +* 35 +cob=(3) +cfi=(66) +cfn=(224) +calls=5 29 +* 45 +cob=(3) +cfi=(125) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strncat.c +cfn=(354) strncat +calls=5 29 +* 45 +cob=(3) +cfi=(97) +cfn=(290) +calls=5 33 +* 45 +cob=(3) +cfi=(82) +cfn=(258) +calls=9 29 +* 81 +cob=(3) +cfi=(124) /build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/memmove_chk.c +cfn=(350) __memmove_chk +calls=3 29 +* 51 +cob=(3) +cfi=(93) +cfn=(282) +calls=10 29 +* 100 +cob=(3) +cfi=(123) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strstr.c +cfn=(348) strstr +calls=13 44 +* 91 +cob=(3) +cfi=(81) +cfn=(256) +calls=11 31 +* 66 +cob=(3) +cfi=(79) +cfn=(252) +calls=4 31 +* 40 +cob=(3) +cfi=(65) +cfn=(222) +calls=14 31 +* 84 +cob=(3) +cfi=(64) +cfn=(220) +calls=11 29 +* 99 +cob=(3) +cfi=(121) /build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/memset_chk.c +cfn=(344) __memset_chk +calls=7 29 +* 133 +cob=(3) +cfi=(120) /build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/time.c +cfn=(342) time +calls=15 38 +* 105 +cob=(3) +cfi=(118) /build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/memcpy_chk.c +cfn=(338) __memcpy_chk +calls=14 29 +* 238 +cob=(3) +cfi=(75) +cfn=(244) +calls=20 53 +* 180 +cob=(3) +cfi=(80) +cfn=(254) +calls=10 29 +* 70 +cob=(3) +cfi=(76) +cfn=(246) +calls=16 29 +* 304 +cob=(3) +cfi=(117) /build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/gettimeofday.c +cfn=(336) gettimeofday +calls=10 41 +* 70 +cob=(3) +cfi=(100) +cfn=(296) +calls=2 31 +* 20 +cob=(3) +cfi=(62) +cfn=(216) +calls=22 29 +* 374 +cob=(3) +cfi=(83) +cfn=(260) +calls=24 29 +* 408 +cob=(3) +cfi=(72) +cfn=(238) +calls=23 29 +* 299 +cob=(3) +cfi=(95) +cfn=(286) +calls=8 29 +* 56 +cob=(3) +cfi=(67) +cfn=(226) +calls=15 28 +* 150 +cob=(3) +cfi=(89) +cfn=(274) +calls=19 49 +* 171 +cob=(3) +cfi=(90) +cfn=(276) +calls=26 29 +* 260 +cob=(3) +cfi=(74) +cfn=(242) +calls=15 54 +* 135 +* 684 ++3 684 +-25 13004 ++1 42976 +131 3 +fe=(60) +310 245 ++3 49 +-3 49 ++3 49 ++4 98 ++1 196 +cfi=(53) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/syscall-template.S +cfn=(170) mprotect +calls=49 78 +* 294 +* 98 +fi=(5) +124 84 +-2 42 +fe=(60) +255 81 +fi=(5) ++53 27656 +457 15 ++1 5 +fi=(4) +160 16 ++14 3 +fi=(5) +309 2 ++3 2 +-3 2 ++3 4 +-3 8 +-1 70570 +fe=(60) + +fl=(346) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86_64/tls_get_addr.S +fn=(5182) __tls_get_addr +29 4 ++1 4 ++1 4 ++2 4 ++1 4 ++1 4 ++3 4 ++1 4 ++4 4 ++1 4 ++1 4 ++1 4 + +fl=(130) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86_64/dl-trampoline.h +fn=(386) _dl_runtime_resolve_xsave +67 68 ++5 68 ++3 68 ++2 68 ++10 68 ++6 68 ++1 68 ++1 68 ++1 68 ++1 68 ++1 68 ++1 68 ++4 68 ++1 68 ++3 68 ++1 68 ++2 68 ++1 68 ++1 68 ++1 68 ++1 68 ++1 68 ++2 68 ++7 68 ++1 68 ++1 68 +cfi=(131) /build/glibc-sMfBJT/glibc-2.31/elf/../elf/dl-runtime.c +cfn=(388) _dl_fixup +calls=68 -60 +* 62333 ++1 68 ++5 68 ++1 68 ++1 68 ++2 68 ++1 68 ++1 68 ++1 68 ++1 68 ++1 68 ++1 68 ++2 68 ++2 68 ++4 68 ++3 68 + +fn=(387) _dl_runtime_resolve_xsave'2 +67 147 ++5 147 ++3 147 ++2 147 ++10 147 ++6 147 ++1 147 ++1 147 ++1 147 ++1 147 ++1 147 ++1 147 ++4 147 ++1 147 ++3 147 ++1 147 ++2 147 ++1 147 ++1 147 ++1 147 ++1 147 ++1 147 ++2 147 ++7 147 ++1 147 ++1 147 +cfi=(131) +cfn=(388) +calls=147 -60 +* 129343 ++1 147 ++5 147 ++1 147 ++1 147 ++2 147 ++1 147 ++1 147 ++1 147 ++1 147 ++1 147 ++1 147 ++2 147 ++2 147 ++4 147 ++3 147 + +fl=(17) /build/glibc-sMfBJT/glibc-2.31/elf/dl-object.c +fn=(38) _dl_new_object +59 528 ++3 48 +-3 96 ++3 96 ++15 188 +cfi=(14) +cfn=(30) +calls=47 -36 +* 1077 +* 235 ++12 188 +cob=(2) +cfi=(18) +cfn=(40) 0x00000000040010c0 +calls=47 -89 +* 2059 +* 4 +cob=(2) +cfi=(18) +cfn=(40) +calls=1 -89 +* 45 +* 48 ++3 96 ++4 48 ++5 48 +-6 48 ++6 48 +-5 48 ++5 48 +-5 48 ++5 48 +-1 48 ++1 48 +-1 48 ++1 48 +cfi=(20) +cfn=(48) +calls=48 +26 +* 547 +* 48 ++15 96 +-15 48 ++15 48 +-13 48 ++13 190 ++6 1 ++2 7 ++3 2 +-3 329 ++3 94 ++2 48 ++4 48 ++3 104 ++2 1 +-2 3 ++2 15 +-2 45 ++16 96 +-5 48 ++5 48 +-6 48 ++6 48 +-6 48 ++6 96 ++2 94 ++3 94 +-3 94 ++7 540 ++4 94 ++2 1 ++6 1 ++3 1 ++10 2 +-10 1 ++10 1 +-10 47 ++10 94 +-10 47 ++10 47 ++2 47 ++21 47 +-21 47 +cfi=(14) +cfn=(30) +calls=47 41 +* 1671 ++4 47 +-4 141 ++17 47 +-13 141 ++50 141 +cfi=(20) +cfn=(78) mempcpy +calls=47 114 +* 971 +* 47 ++5 94 ++1 94 +-1 1436 ++1 1436 ++2 94 ++3 47 ++3 47 ++4 432 +128 96 ++37 141 +-15 1 ++7 4 +-21 94 ++60 94 +cob=(2) +cfi=(18) +cfn=(44) 0x00000000040010a0 +calls=47 0 +* 1308 +* 47 ++1 188 +64 2 ++1 6 ++9 1 +-5 2 + +fn=(50) _dl_add_to_namespace_list +31 96 ++2 48 +-2 96 ++2 48 +-2 96 ++2 48 +cfi=(2) +cfn=(52) rtld_lock_default_lock_recursive +calls=48 801 +* 144 ++2 335 ++3 4700 ++2 47 ++2 47 ++4 47 ++4 47 ++1 47 +-5 94 ++1 94 ++1 47 ++3 47 +-3 47 ++3 47 +-1 47 +cfi=(2) +cfn=(54) rtld_lock_default_unlock_recursive +calls=47 807 +* 141 +-4 1 ++4 1 ++1 1 +-5 2 ++1 2 ++1 1 ++3 1 +-3 1 ++3 1 +-1 1 +cfi=(2) +cfn=(54) +calls=1 807 +* 3 +-5 2 + +fl=(47) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/access.c +fn=(146) access +25 1 ++2 7 ++4 1 + +fl=(27) /build/glibc-sMfBJT/glibc-2.31/elf/dl-load.c +fn=(86) expand_dynamic_string_token +378 14 +234 2 +378 2 +234 2 +378 2 +234 2 +cfi=(31) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/../strchr.S +cfn=(88) index +calls=2 23 +* 114 ++3 4 +403 2 +-11 2 ++11 12 +-11 2 +cfi=(32) /build/glibc-sMfBJT/glibc-2.31/string/strdup.c +cfn=(90) strdup +calls=2 40 +* 206 + +fn=(82) fillin_rpath +447 7 ++2 1 +-2 9 ++4 3 +cfi=(19) /build/glibc-sMfBJT/glibc-2.31/elf/dl-minimal.c +cfn=(84) strsep +calls=1 262 +* 240 +* 3 +cfi=(19) +cfn=(84) +calls=1 262 +* 8 +* 6 ++7 2 ++2 3 +cfn=(86) +calls=1 -82 +* 120 +* 1 ++4 2 ++5 2 +cfi=(14) +cfn=(30) +calls=1 41 +* 17 +* 1 ++1 2 ++7 5 ++9 17 ++1 8 ++57 2 +cob=(2) +cfi=(18) +cfn=(92) 0x0000000004001080 +calls=1 0 +* 7 +* 1 +-39 2 ++4 8 +cob=(2) +cfi=(18) +cfn=(44) +calls=1 0 +* 27 ++2 3 ++5 1 ++1 2 +-2 2 ++2 1 +cfi=(20) +cfn=(78) +calls=1 114 +* 13 ++1 1 ++2 1 +-3 1 ++1 1 ++2 1 ++6 4 ++1 10 ++1 4 +-1 2 ++1 4 +-1 6 ++3 1 ++1 1 +-1 1 ++1 1 ++8 1 +-1 1 ++4 3 +-60 4 ++23 2 ++43 1 ++3 9 +-15 2 + +fn=(128) _dl_map_object_from_fd +866 470 ++10 47 +-10 47 ++10 47 +-10 141 ++10 47 +cfi=(33) +cfn=(96) +calls=47 46 +* 423 +* 47 ++7 188 ++61 188 ++10 94 ++7 188 ++33 94 +877 47 +997 329 +cfi=(17) +cfn=(38) +calls=47 59 +* 17376 +* 47 ++1 94 ++11 94 ++5 47 +-5 47 ++1 47 ++5 47 +-5 47 ++1 47 ++2 47 +-2 47 ++2 94 ++1 141 ++20 94 +-2 47 ++2 799 ++8 47 +-8 47 ++8 47 +-8 47 ++8 141 ++90 47 +-96 47 ++96 47 +-97 47 +-5 94 +1132 94 +-89 3876 +fi=(41) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/posix/dl-fileid.h +37 188 +cfi=(42) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c +cfn=(132) _fxstat +calls=47 -4 +* 517 +* 94 +fe=(27) +901 94 +fi=(41) +40 94 ++1 47 +fe=(27) +901 47 +fi=(41) +40 47 +fe=(27) +901 3713 ++1 2350 +fi=(41) +49 4512 +fe=(27) +1417 423 +1018 9 +-98 94 +1066 940 ++5 1316 ++8 188 ++1 188 ++1 188 +-2 188 ++1 376 ++1 564 +-1 188 ++1 188 +-1 376 ++1 752 ++3 188 +-3 188 ++1 376 ++2 188 ++4 376 ++1 846 ++5 282 +-1 141 ++1 141 +-1 141 +-14 141 ++15 705 +-52 846 ++52 94 +-1 47 ++1 47 +-1 47 +-14 47 ++15 235 +-52 2244 +1157 94 +1010 94 +1170 94 ++10 188 +fi=(44) /build/glibc-sMfBJT/glibc-2.31/elf/./dl-map-segments.h +56 47 +fe=(27) +1180 94 +fi=(44) +56 94 +fe=(27) +1180 141 +fi=(44) +56 94 +-6 47 ++6 47 +-6 47 ++6 47 +cfi=(43) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/mmap64.c +cfn=(136) mmap +calls=47 -8 +* 940 +* 47 ++4 94 ++3 94 ++1 47 ++2 47 +-3 47 ++1 47 ++2 47 ++7 190 +cfi=(53) +cfn=(170) +calls=19 +5 +* 114 +* 38 ++7 47 ++2 47 +fi=(45) /build/glibc-sMfBJT/glibc-2.31/elf/./dl-load.h ++8 376 ++1 141 ++2 376 +fi=(44) ++11 752 ++6 47 ++2 47 +-2 47 ++1 47 ++2 94 +-1 94 ++3 94 ++5 94 ++3 94 ++8 329 +cfi=(30) +cfn=(80) +calls=47 -23 +* 5571 ++1 94 ++5 94 ++12 188 +-59 940 ++2 705 ++2 1128 +cfi=(43) +cfn=(136) +calls=141 -46 +* 2538 +* 282 +fe=(27) +1107 18 ++4 6 ++1 12 ++1 6 ++3 30 ++1 6 ++3 6 +-3 6 ++8 24 +-65 4 ++1 2 ++88 440 +cfi=(21) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/dl-prop.h +cfn=(134) _dl_process_pt_note +calls=88 153 +* 5268 +* 352 +1049 94 ++5 94 ++1 188 +-37 5 ++1 2 +-1 1 ++1 2 +cfi=(54) +cfn=(174) +calls=1 29 +* 7 +* 2 ++24 634 +1144 188 ++2 47 +-6 94 ++1 47 ++51 188 ++9 141 +fi=(3) /build/glibc-sMfBJT/glibc-2.31/elf/get-dynamic-info.h +42 47 ++6 47 +-2 47 ++2 94 ++15 47 ++5 47 ++3 47 +-2 47 +-2 47 +-3 94 +-1 1336 ++1 861 +-16 287 ++26 287 +-26 1657 ++26 1083 +-26 2166 ++2 2740 ++23 2166 +-8 235 ++3 188 ++3 188 ++1 188 ++9 94 ++20 146 ++1 188 ++1 188 ++1 188 ++2 188 ++5 187 ++1 187 ++1 188 ++5 141 ++5 92 ++7 94 ++1 141 ++18 141 ++5 60 ++2 60 ++2 60 ++2 60 ++3 141 ++2 84 ++1 56 ++9 56 ++5 56 ++3 94 +fe=(27) +1208 94 ++2 94 ++19 141 ++19 94 ++2 235 ++48 141 ++1 12 ++3 12 +cfi=(46) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/close_nocancel.c +cfn=(144) __GI___close_nocancel +calls=6 25 +* 36 +* 82 +cfi=(46) +cfn=(144) +calls=41 25 +* 246 +* 94 ++9 94 ++2 188 ++2 94 ++16 94 +cfi=(6) +cfn=(10) _dl_setup_hash +calls=47 961 +* 1128 ++4 94 ++1 94 ++17 94 ++4 47 ++5 47 +-5 47 ++5 47 ++10 94 ++9 94 ++1 24 ++5 6 +cfi=(34) /build/glibc-sMfBJT/glibc-2.31/elf/../elf/dl-tls.c +cfn=(172) _dl_next_tls_modid +calls=6 48 +* 42 +* 6 ++7 18 +cfi=(17) +cfn=(50) +calls=6 31 +* 656 +* 123 +cfi=(17) +cfn=(50) +calls=41 31 +* 5736 ++4 141 +fi=(45) +94 225 ++2 45 +-1 90 ++1 45 +-1 45 ++1 45 +-1 45 ++1 45 +-1 90 ++3 180 +fe=(27) +1354 4 +fi=(44) +141 96 +cfi=(43) +cfn=(136) +calls=12 -93 +* 216 ++3 24 +fe=(27) +1018 2 +fi=(3) +181 78 +-14 6 +-6 52 +fi=(41) +49 38 +fe=(27) + +fn=(72) _dl_init_paths +681 2 ++13 2 +-13 8 ++13 3 +cfi=(28) /build/glibc-sMfBJT/glibc-2.31/elf/dl-hwcaps.c +cfn=(74) _dl_important_hwcaps +calls=1 42 +* 747 ++5 1 +-5 1 ++5 1 +cob=(2) +cfi=(18) +cfn=(44) +calls=1 0 +* 27 +-1 1 ++2 2 ++7 2 ++1 4 +-1 3 ++4 4 +cob=(2) +cfi=(18) +cfn=(44) +calls=1 0 +* 27 +* 2 ++2 2 ++7 1 ++10 1 +-2 2 ++2 1 ++3 2 ++9 1 +-7 1 ++7 2 +-3 1 +-20 1 ++12 1 ++3 1 ++8 1 +-3 17 +cfi=(30) +cfn=(80) +calls=4 108 +* 52 ++3 18 +-14 9 ++14 3 +-12 6 ++4 3 ++4 3 +-7 3 ++3 3 ++1 3 +-2 3 ++5 3 ++1 3 +-4 3 ++4 3 ++14 1 +-11 1 ++6 1 ++1 1 ++5 2 ++2 4 ++2 3 ++38 5 +-19 1 +-2 1 ++2 2 ++21 2 +cfi=(14) +cfn=(30) +calls=1 41 +* 17 +* 10 +-7 2 ++7 9 +cfi=(20) +cfn=(48) +calls=1 127 +* 11 +* 1 ++5 4 +-1 2 ++2 56 +-1 57 ++5 1 +cob=(2) +cfi=(18) +cfn=(44) +calls=1 0 +* 27 +-1 1 ++1 1 ++1 2 ++6 6 +cfn=(82) +calls=1 447 +* 588 ++3 3 ++6 1 ++4 8 +-30 2 + +fn=(118) _dl_map_object +1927 1690 ++8 338 ++1 676 ++3 11030 ++5 23436 ++2 10044 +cfi=(38) /build/glibc-sMfBJT/glibc-2.31/elf/dl-misc.c +cfn=(120) _dl_name_match_p +calls=3348 282 +* 313373 +* 6696 ++4 6452 ++1 9678 ++3 2898 ++1 2898 ++1 2898 +-1 2898 ++1 2898 +cfi=(22) +cfn=(58) +calls=2898 111 +* 107742 +* 5796 +2238 1521 +1972 282 +-43 47 ++53 141 ++36 94 +-2 47 ++2 47 +cfi=(31) +cfn=(88) +calls=47 23 +* 1440 +* 94 +2169 2 +-1 3 +cfn=(86) +calls=1 378 +* 246 ++2 1 +-3 1 ++1 1 ++2 2 ++4 4 +cfn=(122) open_verify.constprop.1 +calls=1 1466 +* 285 +* 1 ++3 2 ++12 4 ++46 1 ++1 3 +-1 1 ++1 9 +cfn=(128) +calls=1 866 +* 1851 +-1 46 ++1 138 +-1 46 ++1 414 +cfn=(128) +calls=46 866 +* 102846 +* 141 +2022 92 +cfi=(14) +cfn=(30) +calls=46 41 +* 1016 +* 92 ++2 92 ++7 184 ++36 552 +cfn=(154) open_path +calls=46 1779 +* 13670 ++6 46 +-6 46 ++6 184 +659 46 +2074 46 +659 92 ++3 26 +2161 92 ++28 184 ++2 184 +2035 230 ++8 184 +-3 402 +659 134 +2041 134 +659 268 ++3 26 ++3 39 ++3 13 ++1 13 +2082 46 ++14 92 ++2 138 ++4 92 +cfi=(50) /build/glibc-sMfBJT/glibc-2.31/elf/dl-cache.c +cfn=(160) _dl_load_cache_lookup +calls=46 187 +* 60512 +* 46 ++2 92 ++4 92 ++8 138 ++23 276 +cfn=(156) open_verify.constprop.0 +calls=46 1466 +* 13076 ++4 92 +-4 46 ++4 46 ++1 92 +-89 184 ++1 368 +659 46 +2057 46 +659 92 +2066 92 ++1 92 +665 39 ++3 13 ++1 13 + +fn=(150) _dl_dst_count +231 336 ++3 168 +-3 336 ++7 168 +-7 336 ++3 168 +cfi=(31) +cfn=(88) +calls=168 23 +* 4896 ++3 336 ++20 1176 + +fn=(122) +1466 1 ++70 1 +-70 4 ++70 1 +-70 6 ++70 1 +cfi=(39) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/open64_nocancel.c +cfn=(124) __open_nocancel +calls=1 34 +* 19 +* 1 ++2 2 ++11 2 ++6 1 +-6 1 ++1 2 ++5 5 +cfi=(40) +cfn=(126) +calls=1 25 +* 6 ++2 2 ++2 3 ++2 2 ++6 2 ++16 9 +1761 2 +cob=(2) +cfi=(18) +cfn=(92) +calls=1 0 +* 7 ++4 9 +1583 7 ++74 2 ++5 2 ++2 4 ++6 2 ++6 1 ++1 1 +-1 3 ++1 1 +-1 1 ++1 2 ++1 2 ++20 4 +1543 2 +1698 66 ++1 28 ++1 8 ++4 8 ++17 4 ++8 12 ++3 18 ++3 2 +-4 2 ++4 4 ++6 4 +-36 6 + +fn=(154) +1779 368 ++1 46 +-1 276 ++1 46 ++6 92 ++5 782 +-7 46 +1443 92 +1791 46 +-8 46 ++8 92 ++3 92 ++9 276 ++7 138 ++1 46 +-1 46 +cfi=(20) +cfn=(78) +calls=46 114 +* 598 +-12 46 ++12 46 ++55 92 +-22 368 +-32 297 ++3 368 +-3 368 ++3 368 ++4 371 +cfi=(20) +cfn=(78) +calls=53 114 +* 739 +* 212 +cfi=(20) +cfn=(78) +calls=53 114 +* 689 ++3 106 ++3 159 ++3 318 +cfn=(156) +calls=53 1466 +* 2809 +* 53 ++2 159 ++2 16 ++62 46 ++27 414 +1811 945 ++85 368 ++7 92 +-2 92 ++2 92 ++3 138 +-51 180 ++2 90 +-46 106 ++25 16 ++1 56 ++6 16 ++2 24 +-2 16 ++2 8 +cfi=(49) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/wordsize-64/xstat.c +cfn=(158) _xstat +calls=8 33 +* 109 +* 8 ++3 8 +-3 16 ++1 1 ++2 1 +-2 1 ++2 23 +-57 92 + +fn=(156) +1466 1089 ++39 297 ++31 396 +cfi=(39) +cfn=(124) +calls=99 34 +* 2040 +* 99 ++2 198 ++11 92 ++6 46 +-6 46 ++1 92 ++5 230 +cfi=(40) +cfn=(126) +calls=46 25 +* 276 ++2 92 ++2 138 ++2 92 ++6 92 ++16 414 +-65 53 +1765 891 +1583 322 ++74 92 ++5 92 ++2 184 ++6 92 ++6 46 ++1 46 +-1 138 ++1 46 +-1 46 ++1 92 ++1 90 ++20 184 +1543 92 +1698 2868 ++1 1224 ++1 344 ++4 344 ++6 6 ++1 48 ++10 21 +cfi=(54) +cfn=(174) +calls=3 29 +* 21 +* 101 ++8 546 ++15 10 ++6 15 +-3 5 ++1 5 ++3 5 +-3 10 ++1 5 +-1 5 +-1 5 ++4 10 +1583 12 +1761 92 +cob=(2) +cfi=(18) +cfn=(92) +calls=46 0 +* 322 +* 46 +-29 774 ++3 86 +-4 86 ++4 172 ++5 5 ++1 172 +-60 15 ++1 2 +-1 1 ++1 3 +cfi=(54) +cfn=(174) +calls=1 29 +* 7 +* 8 ++23 249 + +fl=(2) +fn=(184) version_check_doit +639 3 ++2 4 +cfi=(58) /build/glibc-sMfBJT/glibc-2.31/elf/dl-version.c +cfn=(186) _dl_check_all_versions +calls=1 362 +* 379208 +* 2 ++4 2 + +fn=(52) +801 169 ++1 169 ++1 169 + +fn=(2) +463 10 +66 3 +fi=(5) +-7 1 +fe=(2) ++7 1 +fi=(3) +-18 1 +fi=(5) ++11 2 +fe=(2) +507 1 +-3 1 +fi=(3) +48 2 ++15 1 ++5 1 ++3 1 ++1 1 ++1 1 +-4 1 +-2 1 +-3 2 +-1 20 ++1 12 +-16 4 ++26 4 +-26 8 ++2 36 ++23 13 +-25 13 ++26 13 +-26 27 ++26 1 +-26 2 ++33 2 ++20 4 ++1 4 ++1 4 ++1 4 ++2 4 ++5 4 ++1 4 ++1 4 ++5 3 ++5 2 ++7 3 ++1 3 ++8 3 ++3 3 ++4 2 ++1 2 +fe=(2) +518 2 ++7 1 +66 1 +430 1 +66 3 +430 1 +cfi=(6) +cfn=(10) +calls=1 961 +* 24 ++1 1 ++18 2 +-18 1 ++1 2 ++1 2 ++1 2 ++9 1 ++6 1 +cfi=(7) +cfn=(12) +calls=1 89 +* 12761548 +* 1 ++2 2 ++99 9 +fi=(3) +65 5 ++3 4 +fe=(2) +523 25 +fi=(4) +84 1 +-1 1 ++28 3 ++1 2 +fi=(5) +541 2 +fi=(4) +112 82 +fi=(5) +541 82 ++1 42 +fi=(4) +111 42 +fi=(5) +542 84 +fi=(4) +111 84 ++5 2 +fi=(5) +421 1 +fi=(4) +124 2 +fi=(5) +333 18 +fi=(4) +124 27 ++12 9 ++3 9 +-3 9 +fi=(5) +301 9 +fi=(4) +139 9 +-3 9 ++1 18 +fi=(5) +301 18 ++8 90 ++3 18 ++21 45 +fi=(3) +71 4 ++1 3 ++1 2 +fi=(5) +353 18 ++1 9 +fe=(2) + +fn=(116) map_doit +606 2 ++2 1 +-2 1 ++2 1 ++1 2 +-1 2 ++1 3 +cfi=(27) +cfn=(118) +calls=1 1927 +* 2754 +* 1 ++2 2 + +fn=(34) +1090 2 ++12 1 +-12 10 ++12 1 ++4 2 +-16 1 ++22 1 +-22 1 ++16 1 ++6 1 +-6 1 +2533 1 ++7 1 +1106 1 +2535 1 +-2 1 ++7 3 +1106 1 +2540 1 +-4 1 ++4 1 ++2 4 +cfi=(16) /build/glibc-sMfBJT/glibc-2.31/elf/dl-environ.c +cfn=(36) _dl_next_ld_env_entry +calls=1 28 +* 61 +* 4 +cfi=(16) +cfn=(36) +calls=2 28 +* 364 +* 9 ++4 6 +-2 2 ++2 42 ++1 19 +-1 57 ++9 12 +2704 3 ++32 3 +1122 3 +2631 3 ++1 3 +-56 2 ++7 2 +1330 7 +cfi=(17) +cfn=(38) +calls=1 59 +* 231 +* 1 ++2 2 ++1 1 ++1 1 ++5 2 +-5 1 ++1 2 ++4 1 +cfi=(17) +cfn=(50) +calls=1 31 +* 35 ++1 2 +1099 1 +1369 1 +-5 1 +-2 1 ++4 1 ++3 1 +-5 1 ++5 5 ++56 1 +1096 1 +1425 1 +-15 2 +-22 1 ++22 1 ++15 3 +-55 89 +-1 18 +1478 7 ++3 2 ++2 2 ++2 3 ++13 3 ++3 2 +-2 1 ++2 1 +-2 2 +cfi=(22) +cfn=(58) +calls=1 111 +* 25 +* 2 ++7 1 ++3 1 +-5 1 ++3 1 ++2 1 ++1 2 ++4 2 ++2 2 +fi=(3) +33 1 ++9 2 ++6 1 +-2 1 ++2 2 ++15 1 ++5 1 ++4 1 +-1 1 +-2 1 +-5 2 +-1 24 ++1 15 +-16 5 ++26 5 +-26 10 ++2 62 ++23 26 +-25 26 ++26 26 +-26 52 ++33 3 ++20 3 ++1 4 ++1 4 ++1 4 ++2 4 ++5 4 ++1 4 ++1 4 ++5 3 ++5 2 ++7 2 ++1 3 ++18 3 ++5 2 ++2 2 ++2 2 ++2 2 ++3 3 ++2 3 ++1 2 ++9 2 ++5 2 ++3 2 +fe=(2) +1521 2 +cfi=(6) +cfn=(10) +calls=1 961 +* 24 ++3 2 +fi=(23) /build/glibc-sMfBJT/glibc-2.31/elf/./setup-vdso.h +24 2 +fi=(21) ++35 4 +fe=(2) +1398 1 +-9 1 ++27 1 +-27 1 ++2 1 +-3 1 ++10 2 +-19 2 +-10 1 ++10 1 +-10 2 ++56 8 +-1 4 ++1 4 +-1 4 ++2 8 ++1 1 ++3 2 ++1 2 +-1 6 ++1 6 ++1 4 ++1 10 ++1 1 +-65 3 ++5 2 +-5 1 ++5 1 +-5 2 ++1 10 ++95 2 +-96 1 ++96 2 +-96 3 +fi=(24) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/dl-vdso.h +40 1 ++1 2 +fi=(25) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/dl-vdso-setup.h ++4 1 +fe=(2) +1549 2 +cfi=(10) +cfn=(68) +calls=1 46 +* 88 +* 8 +fi=(3) +65 5 +fe=(2) +1461 1 +-92 1 ++92 1 +-92 2 +fi=(3) +68 4 ++3 4 ++1 4 +fe=(2) +1554 2 +cfi=(27) +cfn=(72) +calls=1 681 +* 1823 ++3 3 +cfi=(33) +cfn=(96) +calls=1 46 +* 18 ++7 1 +-7 1 ++2 1 ++5 1 ++4 1 ++3 1 +-3 3 ++1 2 ++3 1 ++5 1 +-7 1 ++7 1 ++18 2 ++1 2 ++5 1 +-3 2 ++2 1 ++1 2 ++5 3 ++1 5 +-1 2 ++15 3 ++1 1 +-2 1 ++2 3 ++18 1 +cfi=(34) +cfn=(98) _dl_count_modids +calls=1 108 +* 6 +* 1 ++8 3 ++3 2 ++4 3 ++5 2 ++1 1 +cfi=(33) +cfn=(100) +calls=1 73 +* 2 ++1 1 ++4 3 ++16 3 ++2 1 ++2 2 ++8 2 ++15 3 +cfi=(47) +cfn=(146) +calls=1 25 +* 9 +* 2 ++76 4 +66 1 +1805 1 +66 2 +1805 1 +66 1 +1805 6 +cfi=(48) /build/glibc-sMfBJT/glibc-2.31/elf/dl-deps.c +cfn=(148) _dl_map_object_deps +calls=1 159 +* 811256 +73 1 +1810 1 +73 2 ++9 2 +1810 2 ++1 5 +-1 4 ++1 96 +-1 192 ++4 3 ++1 3 ++1 1 ++2 3 ++1 4 +-1 57 ++1 80 ++12 1 ++1 1 +-1 2 ++1 2 ++2 1 ++2 4 ++2 1 +-4 1 ++5 1 +-1 2 ++14 2 ++1 2 ++1 3 ++2 2 ++1 1 +-28 2 +1609 2 ++6 1 +-6 2 ++6 1 +-37 6 +fi=(3) +181 3 +-20 2 +fe=(2) +1567 4 +1865 1 ++1 1 +-1 1 ++2 4 +-2 3 ++2 1 +cfi=(36) /build/glibc-sMfBJT/glibc-2.31/elf/dl-error-skeleton.c +cfn=(182) _dl_receive_error +calls=1 238 +* 379236 ++10 1 ++1 1 +-1 1 ++1 1 ++3 2 +817 1 +fi=(385) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/unix/sysv/linux/dl-osinfo.h +64 2 +fe=(2) +819 1 +fi=(385) +77 1 +fe=(2) +828 1 ++7 1 +-5 1 +1886 3 +2116 3 ++60 1 ++6 1 +-10 1 ++10 1 +-6 1 ++9 2 ++8 1 +fi=(21) +33 3 +cfi=(59) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/dl-cet.c +cfn=(196) _dl_cet_check +calls=1 343 +* 31 +fe=(2) +2239 3 ++3 1 +66 2 +2246 1 +66 2 +2247 151 ++2 98 ++5 98 ++2 98 ++6 49 ++2 98 ++1 384 +cfi=(60) +cfn=(200) +calls=48 148 +* 11522660 ++4 110 ++1 18 +cfi=(34) +cfn=(300) _dl_add_to_slotinfo +calls=6 887 +* 168 +* 6 ++13 4 ++2 1 ++7 3 +cfi=(34) +cfn=(358) _dl_allocate_tls_init +calls=1 437 +* 560 ++3 2 +-37 1 ++1 1 +-3 2 +73 3 ++1 1 +2278 1 +74 1 +2278 1 +1829 3 +2304 3 ++2 2 ++24 1 +cfi=(7) +cfn=(360) +calls=1 258 +* 2 ++4 3 ++21 3 +cfi=(33) +cfn=(96) +calls=1 46 +* 9 ++1 1 +-1 1 ++2 1 +cfi=(33) +cfn=(100) +calls=1 73 +* 2 ++1 1 ++4 1 +cfi=(50) +cfn=(362) _dl_unload_cache +calls=1 348 +* 17 ++5 8 +2583 4 ++2 2 ++1 1 ++46 2 ++2 2 ++1 1 +fi=(25) +30 5 ++3 1 ++3 1 ++3 1 +fi=(24) ++16 2 +fe=(2) ++11 1 +2319 1 ++1 3 +66 3 +2320 2 +cfi=(60) +cfn=(200) +calls=1 148 +* 8653 +73 3 ++9 3 +1879 1 +cfn=(190) init_tls +calls=1 699 +* 1076 +* 2 +66 1 +1690 1 +66 2 +1690 1 +66 1 +1690 2 +cfn=(102) handle_preload_list +calls=1 858 +* 3223 +* 1 +73 3 ++9 3 +1789 17 ++1 1 +-1 1 ++4 3 ++1 1 ++1 2 ++1 2 +-7 2 + +fn=(54) +807 169 ++1 169 ++1 169 + +fn=(102) +858 10 ++5 5 +-4 1 ++10 2 +-3 3 +cfi=(35) +cfn=(104) +calls=1 28 +* 273 +* 1 ++1 3 ++9 1 +168 1 +878 2 +168 2 +880 2 +780 2 +-10 1 ++8 1 ++2 2 +-6 1 ++6 1 +-5 1 ++1 1 ++4 1 +cob=(2) +cfi=(18) +cfn=(106) 0x00000000040010f0 +calls=1 0 +* 2855 ++1 3 ++8 4 ++74 2 ++21 9 +-15 4 +cfi=(20) +cfn=(48) +calls=1 127 +* 27 ++1 2 + +fn=(190) +699 1 ++2 1 ++4 1 +-4 1 ++4 1 ++11 1 +-1 3 +cob=(2) +cfi=(18) +cfn=(40) +calls=1 0 +* 38 +-4 1 ++15 1 +-12 1 ++6 1 +-9 1 ++11 1 ++4 1 ++2 3 +-1 2 ++3 147 ++4 6 ++2 6 +-2 6 +-5 18 +-1 12 ++10 2 ++3 1 +cfi=(34) +cfn=(192) _dl_determine_tlsoffset +calls=1 135 +* 238 ++7 1 +cfi=(34) +cfn=(194) _dl_allocate_tls_storage +calls=1 332 +* 434 +* 1 ++1 2 ++6 1 ++3 1 +-3 1 ++3 6 ++6 1 +-3 1 ++3 2 +-35 43 +-1 87 + +fl=(34) +fn=(300) +887 48 ++6 6 ++3 6 ++1 6 ++4 18 ++41 12 ++3 24 +-1 6 ++1 6 ++2 36 + +fn=(192) +135 4 ++6 1 +-6 2 ++6 2 ++3 2 ++36 3 ++2 1 +-2 1 +-2 1 +-40 1 +-1 1 +-1 2 ++69 12 ++3 6 +-3 6 ++3 6 +-3 24 ++2 12 ++4 3 ++6 1 +-12 1 +-25 6 ++37 5 +-12 5 +-25 30 ++2 12 ++3 6 +-1 6 ++5 12 +-5 6 ++1 6 +-1 6 ++3 12 ++2 18 ++12 6 ++20 1 ++52 2 +-1 1 +-51 1 ++52 2 +-52 1 ++52 2 + +fn=(392) _dl_get_tls_static_info +308 1 ++1 2 ++1 2 ++1 1 + +fn=(98) +108 1 ++5 2 ++1 1 ++15 2 + +fn=(358) +437 9 ++1 2 ++4 1 ++6 1 +-6 1 ++6 2 ++12 1 +-15 1 +-1 2 ++21 5 ++9 18 ++1 12 ++6 18 ++3 6 +-2 6 ++6 6 +-6 6 ++2 12 ++4 6 +-4 18 ++3 12 ++4 12 ++1 24 ++2 12 ++1 12 ++12 6 +-3 6 ++3 12 +cfi=(20) +cfn=(78) +calls=6 114 +* 83 +* 30 +cfi=(30) +cfn=(80) +calls=6 108 +* 162 +* 6 +-42 18 ++6 21 ++50 2 ++3 9 + +fn=(5274) _dl_tls_get_addr_soft +845 2 ++1 6 ++4 2 ++1 6 ++24 4 +-27 8 + +fn=(172) +48 6 ++3 24 ++48 6 ++4 6 + +fn=(194) +332 2 ++13 1 +-13 2 ++2 1 ++12 2 +cob=(2) +cfi=(18) +cfn=(44) +calls=1 0 +* 67 ++1 3 ++8 2 +-69 1 ++69 2 ++1 1 ++4 297 ++19 1 +-94 2 ++1 2 +cob=(2) +cfi=(18) +cfn=(40) +calls=1 0 +* 38 ++1 2 ++3 1 ++6 2 ++89 5 + +fl=(37) /build/glibc-sMfBJT/glibc-2.31/setjmp/../sysdeps/x86_64/setjmp.S +fn=(114) __sigsetjmp +30 169 ++2 169 ++9 169 ++1 338 ++1 169 ++4 169 ++1 169 ++1 169 ++1 169 ++1 169 ++2 338 ++2 169 ++1 169 ++1 169 ++2 338 ++2 169 ++8 169 ++3 169 ++1 169 ++7 169 ++1 169 + +fl=(50) +fn=(168) _dl_cache_libcmp +141 449 ++1 1936 ++2 10320 ++20 5008 ++2 5000 ++5 4214 +-1 2107 ++1 2107 +-29 4214 ++32 138 +-28 152 ++6 72 ++2 72 +-2 72 ++1 144 +-1 72 ++2 224 ++1 24 +-1 32 ++1 3 +-1 4 ++2 216 +-3 72 ++3 80 ++1 24 +-1 32 ++1 3 +-1 4 ++2 144 ++1 6 ++6 4 ++10 4 +-8 786 +-5 8 + +fn=(362) +348 1 ++1 4 +-1 1 ++3 2 +cfi=(53) +cfn=(364) munmap +calls=1 78 +* 6 ++1 1 ++2 2 + +fn=(160) +187 460 ++8 92 ++3 138 ++66 135 ++6 230 ++11 46 +-2 46 +fi=(52) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/dl-procinfo.h +39 92 ++3 138 +cfi=(22) +cfn=(58) +calls=46 +69 +* 1150 +* 184 +fe=(50) +285 184 +cfi=(8) +cfn=(26) +calls=46 +83 +* 920 +* 92 ++8 92 ++15 5250 +cfn=(168) +calls=403 141 +* 33698 +* 2786 +cfn=(168) +calls=46 141 +* 4049 +* 276 +-14 46 +-1 92 ++1 92 +-1 92 ++15 1012 ++16 92 ++4 92 ++8 138 +cfi=(14) +cfn=(30) +calls=46 41 +* 1608 +* 598 ++1 92 +-1 46 ++1 46 +cfi=(20) +cfn=(48) +calls=46 127 +* 850 +* 46 ++1 46 +cfi=(32) +cfn=(90) +calls=46 40 +* 4558 ++1 368 +-3 92 +201 4 +cfi=(38) +cfn=(162) _dl_sysdep_read_whole_file +calls=1 44 +* 99 +* 1 ++8 5 ++1 8 ++3 1 +fi=(51) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/generic/dl-cache.h +-60 5 +fe=(50) +320 322 +218 1 ++1 2 + +fl=(6) +fn=(210) do_lookup_x +368 65248 ++1 8156 +-1 48936 ++48 8156 ++35 24468 +-65 8156 +-11 8156 ++41 8156 +-30 16312 ++65 16312 +-51 386673 ++4 128891 ++4 128891 +-3 128891 ++3 257782 ++1 386673 ++3 128891 ++1 257782 ++7 257782 +-3 257782 +-2 128891 ++5 386673 ++3 902237 +571 362739 +379 257856 ++3 257856 ++4 258176 ++4 257782 ++4 257782 ++88 16030 +fi=(61) +126 24045 +fe=(6) +533 16030 ++3 54102 ++16 39470 ++2 16030 +427 46143 +-1 30762 ++2 30762 ++2 13650 ++6 40950 +-6 13650 ++6 122850 ++7 55755 +-10 132960 ++3 8284 +-1 16568 ++1 16568 +-1 8284 ++2 16568 +-1 99408 +cfn=(212) check_match +calls=8284 75 +* 1068758 ++4 25406 +574 141 ++1 65248 +-35 7332 +227 242 +-1 121 ++3 242 +-2 121 ++2 242 ++2 121 +-2 363 +cfi=(2) +cfn=(52) +calls=121 801 +* 363 ++2 121 ++1 121 ++1 242 +-2 121 ++2 121 ++2 240 ++1 120 +-1 360 ++1 120 +-1 120 ++1 240 +-1 360 ++1 240 +-1 1244 ++24 448 ++3 143 ++1 429 +-24 1052 ++1 78 +cfi=(22) +cfn=(58) +calls=39 111 +* 2753 +* 78 ++2 195 ++10 39 ++1 156 ++2 156 +cfi=(2) +cfn=(54) +calls=39 807 +* 117 ++1 39 +474 11294 ++2 16 +267 1215 ++61 660 +179 3 ++1 9 +-3 8 ++10 1 +-2 1 +-1 1 ++1 1 ++2 1 +-2 1 +347 7 ++5 4 +cfi=(2) +cfn=(54) +calls=1 807 +* 3 +-5 567 ++5 324 +cfi=(2) +cfn=(54) +calls=81 807 +* 243 ++2 328 +181 514 +-2 86 ++1 258 +-3 334 ++8 162 +-1 81 ++1 81 ++2 81 +-2 81 +336 324 +-72 142 ++46 2 ++9 4 +cob=(2) +cfi=(18) +cfn=(40) +calls=1 0 +* 38 +* 1 ++1 2 ++3 1 ++1 2 +-6 1 ++7 1 +-1 1 ++1 1 +-7 1 ++7 33884 +-51 8 +cfi=(38) +cfn=(356) _dl_higher_prime_number +calls=2 +26 +* 159 ++2 4 +-2 2 ++2 2 +cob=(2) +cfi=(18) +cfn=(40) +calls=2 0 +* 76 +* 2 ++1 4 ++7 296 ++1 276 ++1 140 +175 70 +286 140 +175 70 +286 70 +175 70 ++1 70 +-1 70 ++1 210 ++1 444 ++2 14 ++1 42 +-3 168 ++8 70 +-1 70 ++1 70 ++2 70 +-2 70 ++3 70 +-7 12 +290 18 +cfi=(19) +cfn=(94) free +calls=2 109 +* 10 ++1 2 ++2 2 +-19 2 ++20 4 +-3 2 ++2 2 ++1 56069 + +fn=(208) +841 81560 +582 8156 +841 32624 +582 24468 +-1 16312 ++2 8156 +-1 8156 ++1 24468 +-1 24468 ++1 186224 +-1 186224 ++1 558672 +-1 566828 +847 8156 +-4 8156 ++1 8156 ++7 8156 +-8 8156 ++1 8156 ++7 23352 ++3 40780 ++6 16312 +-7 48936 ++7 846 ++1 106028 +cfn=(210) +calls=8156 368 +* 7708828 +* 32483 ++5 16312 ++24 64120 ++40 32060 ++14 24045 ++3 32060 ++5 8015 ++2 73404 +-86 846 ++17 141 ++1 282 ++59 2 + +fn=(212) +75 107692 ++3 16568 ++13 32824 +-13 32824 ++13 16412 ++3 37052 +cfi=(22) +cfn=(58) +calls=5200 +17 +* 294894 +* 10400 ++4 8126 ++1 16252 ++2 15418 ++19 15418 ++1 61672 ++2 226 ++1 4 ++36 8007 ++7 48042 +-18 834 ++2 834 ++1 417 +-1 834 ++1 1251 +-1 834 ++4 16 ++1 56 ++2 24 ++2 8 ++7 48 +-7 191 ++7 1614 +-45 22788 +cfi=(22) +cfn=(58) +calls=7596 -11 +* 301518 +* 15192 +-44 312 ++82 156 + +fn=(10) +961 49 ++3 147 ++2 49 ++2 98 ++2 49 +-1 49 ++3 147 ++1 49 ++4 49 +-3 49 ++7 49 +-7 49 ++3 49 +-1 49 ++3 49 ++2 49 +-7 49 ++7 49 ++5 49 + +fl=(11) +fn=(20) +28 1 ++3 5 ++2 2 ++6 1 ++1 1 + +fl=(32) +fn=(90) +40 240 ++1 48 +cfi=(14) +cfn=(30) +calls=48 * +* 1716 +* 48 ++1 96 +cob=(2) +cfi=(18) +cfn=(44) +calls=48 -42 +* 1296 ++2 96 ++4 48 +-1 144 ++1 96 +-1 48 +cfi=(20) +cfn=(48) +calls=48 +80 +* 888 + +fl=(46) +fn=(144) +25 48 ++1 192 ++1 48 + +fl=(28) +fn=(74) +42 6 ++1 1 +-1 5 ++1 1 +-1 1 ++1 1 +-1 1 ++1 2 +-1 1 ++1 1 +cfi=(8) +cfn=(26) +calls=1 368 +* 20 +* 1 ++2 1 ++1 2 +-1 1 ++1 1 ++9 1 +-12 1 ++12 4 ++1 6 ++1 1 +-1 2 +-1 12 ++10 3 +193 3 ++2 1 ++1 2 ++1 4 ++3 1 ++1 1 +-1 1 ++4 2 ++3 5 ++4 7 ++1 2 ++2 2 ++1 2 ++1 2 +-1 1 ++1 1 +-1 2 ++9 2 ++6 10 ++1 2 +-1 1 ++1 2 +cob=(2) +cfi=(18) +cfn=(44) +calls=1 0 +* 27 ++1 4 +-1 1 ++1 1 ++31 10 ++3 4 ++7 3 ++10 9 +-4 2 +-3 1 ++3 1 +cfi=(20) +cfn=(78) +calls=1 114 +* 17 +* 2 +-3 1 ++3 1 +cfi=(20) +cfn=(78) +calls=1 114 +* 17 ++3 2 +-3 6 ++3 4 ++1 12 ++1 5 +cfi=(20) +cfn=(78) +calls=1 114 +* 15 +* 2 +-2 2 ++5 6 +cfi=(20) +cfn=(78) +calls=2 114 +* 30 +* 4 ++2 6 +-7 3 ++13 1 +-1 1 ++1 2 +-1 2 ++1 7 +-1 7 ++1 14 +-1 18 ++5 9 ++4 4 +-4 12 ++4 44 ++1 24 +-1 24 ++1 24 +-1 24 +-1 24 ++4 9 ++3 1 ++2 2 +-1 1 +-1 1 ++2 1 +-2 1 ++2 3 +-1 1 ++1 2 ++2 6 ++1 2 ++3 2 +-6 5 ++13 7 ++1 1 +-1 2 ++3 2 +-3 3 ++1 3 +-1 6 ++3 6 ++3 3 ++3 9 +148 7 ++1 1 +-1 2 ++37 3 ++5 2 +-5 1 ++5 5 +-4 10 +fi=(29) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86/dl-hwcap.h +57 6 +fe=(28) +188 1 ++1 1 +cfi=(14) +cfn=(30) +calls=1 41 +* 17 ++1 5 +-5 1 ++4 1 ++1 1 +-5 5 +-37 10 ++37 2 +316 1 ++1 2 +-6 6 +-94 4 +-2 3 + +fl=(126) +fn=(370) call_init.part.0 +28 392 ++8 49 +-8 49 ++11 49 +-3 98 ++3 147 ++5 144 ++5 94 ++9 282 +cob=(2) +cfi=(18) +cfn=(2114) 0x0000000004831000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(2104) 0x0000000004858000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1910) 0x0000000004972000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1860) 0x0000000004c10000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1850) 0x0000000004e44000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1840) 0x0000000004e8e000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1644) 0x0000000004eb6000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1634) 0x0000000004f19000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1624) 0x0000000004f46000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1564) 0x0000000005037000 +calls=1 -58 +* 550 +cob=(2) +cfi=(18) +cfn=(1554) 0x00000000052a0000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1544) 0x00000000052ef000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1534) 0x000000000533b000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1524) 0x000000000534a000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(1514) 0x0000000005359000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(868) 0x0000000005526000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(858) 0x0000000004e6a000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(848) 0x0000000005385000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(838) 0x00000000056d4000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(828) 0x000000000570d000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(818) 0x0000000005748000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(808) 0x00000000057ec000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(798) 0x00000000058ab000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(788) 0x00000000058e2000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(778) 0x000000000590f000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(768) 0x0000000005936000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(758) 0x000000000596f000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(628) 0x00000000059bc000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(618) 0x0000000005aca000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(608) 0x0000000005ae1000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(598) 0x0000000005ae9000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(588) 0x0000000005b0d000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(578) 0x0000000005c81000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(568) 0x0000000005cd7000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(558) 0x0000000005c8c000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(548) 0x0000000005c33000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(538) 0x0000000005cb8000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(528) 0x0000000005b9f000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(518) 0x0000000005c6b000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(508) 0x00000000058f2000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(490) 0x00000000058da000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(480) 0x0000000005d23000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(468) 0x00000000057c5000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(458) 0x0000000004acb000 +calls=1 -58 +* 7 +cob=(2) +cfi=(18) +cfn=(448) 0x0000000005e42000 +calls=1 -58 +* 7 +cob=(3) +cfi=(140) /build/glibc-sMfBJT/glibc-2.31/csu/init-first.c +cfn=(428) _init +calls=1 -6 +* 109 +cob=(2) +cfi=(18) +cfn=(372) 0x0000000004c2e000 +calls=1 -58 +* 5734 +* 47 ++4 94 ++6 47 ++2 94 +-2 94 ++3 235 ++1 188 +cob=(49) /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_core-amd64-linux.so +cfi=(224) ??? +cfn=(2118) 0x0000000000001120 +calls=1 -72 +* 12 +cob=(48) /usr/lib/x86_64-linux-gnu/libcurl.so.4.6.0 +cfi=(223) ??? +cfn=(2108) 0x0000000000010ab0 +calls=1 -72 +* 12 +cob=(47) +cfi=(220) +cfn=(1914) 0x00000000000a71d0 +calls=1 -72 +* 12 +cob=(46) +cfi=(219) +cfn=(1864) +calls=1 -72 +* 166 +cob=(45) /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.19.0 +cfi=(218) ??? +cfn=(1854) 0x00000000000052a0 +calls=1 -72 +* 12 +cob=(44) /usr/lib/x86_64-linux-gnu/librtmp.so.1 +cfi=(217) ??? +cfn=(1844) 0x0000000000005e30 +calls=1 -72 +* 12 +cob=(43) +cfi=(216) +cfn=(1648) +calls=1 -72 +* 12 +cob=(42) /usr/lib/x86_64-linux-gnu/libpsl.so.5.3.2 +cfi=(215) ??? +cfn=(1638) 0x0000000000002470 +calls=1 -72 +* 12 +cob=(41) +cfi=(214) +cfn=(1628) +calls=1 -72 +* 12 +cob=(40) /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 +cfi=(213) ??? +cfn=(1618) 0x00000000000790d0 +calls=1 -72 +* 12 +cob=(39) +cfi=(212) +cfn=(1558) +calls=1 -72 +* 12 +cob=(38) /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.10.12 +cfi=(211) ??? +cfn=(1548) 0x000000000000ef70 +calls=1 -72 +* 12 +cob=(37) /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.10.12 +cfi=(210) ??? +cfn=(1538) 0x0000000000003470 +calls=1 -72 +* 12 +cob=(36) /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.7 +cfi=(209) ??? +cfn=(1528) 0x0000000000001220 +calls=1 -72 +* 12 +cob=(35) /usr/lib/x86_64-linux-gnu/libz.so.1.2.11 +cfi=(208) ??? +cfn=(1518) 0x0000000000002330 +calls=1 -72 +* 12 +cob=(34) /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0 +cfi=(199) ??? +cfn=(872) 0x0000000000030650 +calls=1 -72 +* 12 +cob=(33) /usr/lib/x86_64-linux-gnu/libidn2.so.0.3.6 +cfi=(198) ??? +cfn=(862) 0x0000000000002550 +calls=1 -72 +* 12 +cob=(32) /usr/lib/x86_64-linux-gnu/libunistring.so.2.1.0 +cfi=(197) ??? +cfn=(852) 0x00000000000109f0 +calls=1 -72 +* 12 +cob=(31) /usr/lib/x86_64-linux-gnu/libhogweed.so.5.0 +cfi=(196) ??? +cfn=(842) 0x00000000000076f0 +calls=1 -72 +* 12 +cob=(30) /usr/lib/x86_64-linux-gnu/libnettle.so.7.0 +cfi=(195) ??? +cfn=(832) 0x00000000000091c0 +calls=1 -72 +* 12 +cob=(29) /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.0 +cfi=(194) ??? +cfn=(822) 0x000000000000a2f0 +calls=1 -72 +* 12 +cob=(28) /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3 +cfi=(193) ??? +cfn=(812) 0x0000000000024150 +calls=1 -72 +* 12 +cob=(27) /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1 +cfi=(192) ??? +cfn=(802) 0x00000000000045b0 +calls=1 -72 +* 12 +cob=(26) /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1 +cfi=(191) ??? +cfn=(792) 0x0000000000003700 +calls=1 -72 +* 12 +cob=(25) /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25 +cfi=(190) ??? +cfn=(782) 0x0000000000003930 +calls=1 -72 +* 12 +cob=(24) /usr/lib/x86_64-linux-gnu/libgssapi.so.3.0.0 +cfi=(189) ??? +cfn=(772) 0x000000000000f810 +calls=1 -72 +* 12 +cob=(23) +cfi=(188) +cfn=(762) +calls=1 -72 +* 12 +cob=(22) /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.3.0 +cfi=(166) ??? +cfn=(632) 0x000000000002bcd0 +calls=1 -72 +* 12 +cob=(21) +cfi=(165) +cfn=(622) +calls=1 -72 +* 12 +cob=(20) /usr/lib/x86_64-linux-gnu/libkeyutils.so.1.8 +cfi=(164) ??? +cfn=(612) 0x00000000000022f0 +calls=1 -72 +* 12 +cob=(19) /usr/lib/x86_64-linux-gnu/libheimntlm.so.0.1.0 +cfi=(163) ??? +cfn=(602) 0x0000000000003710 +calls=1 -72 +* 12 +cob=(18) /usr/lib/x86_64-linux-gnu/libkrb5.so.26.0.0 +cfi=(162) ??? +cfn=(592) 0x000000000001f4c0 +calls=1 -72 +* 12 +cob=(17) /usr/lib/x86_64-linux-gnu/libffi.so.7.1.0 +cfi=(161) ??? +cfn=(582) 0x0000000000002340 +calls=1 -72 +* 12 +cob=(16) /usr/lib/x86_64-linux-gnu/libhx509.so.5.0.0 +cfi=(160) ??? +cfn=(572) 0x00000000000130c0 +calls=1 -72 +* 12 +cob=(15) /usr/lib/x86_64-linux-gnu/libwind.so.0.0.0 +cfi=(159) ??? +cfn=(562) 0x0000000000001230 +calls=1 -72 +* 12 +cob=(14) /usr/lib/x86_64-linux-gnu/libhcrypto.so.4.1.0 +cfi=(158) ??? +cfn=(552) 0x0000000000007b20 +calls=1 -72 +* 12 +cob=(13) /usr/lib/x86_64-linux-gnu/libheimbase.so.1.0.0 +cfi=(157) ??? +cfn=(542) 0x00000000000036a0 +calls=1 -72 +* 12 +cob=(12) /usr/lib/x86_64-linux-gnu/libasn1.so.8.0.0 +cfi=(156) ??? +cfn=(532) 0x000000000001a470 +calls=1 -72 +* 12 +cob=(11) /usr/lib/x86_64-linux-gnu/libroken.so.18.1.0 +cfi=(155) ??? +cfn=(522) 0x0000000000006140 +calls=1 -72 +* 12 +cob=(10) +cfi=(154) +cfn=(512) +calls=1 -72 +* 12 +cob=(9) /usr/lib/x86_64-linux-gnu/libcom_err.so.2.1 +cfi=(152) ??? +cfn=(494) 0x0000000000002590 +calls=1 -72 +* 12 +cob=(8) /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6 +cfi=(151) ??? +cfn=(484) 0x000000000000e870 +calls=1 -72 +* 12 +cob=(7) +cfi=(149) +cfn=(472) +calls=1 -72 +* 12 +cob=(4) +cfi=(148) +cfn=(462) +calls=1 -72 +* 12 +cob=(6) /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0 +cfi=(147) ??? +cfn=(452) 0x00000000000020f0 +calls=1 -72 +* 12 +cob=(3) +cfi=(144) /build/glibc-sMfBJT/glibc-2.31/libio/vtables.c +cfn=(438) check_stdfiles_vtables +calls=1 +11 +* 12 +cob=(5) /usr/lib/x86_64-linux-gnu/libpthread-2.31.so +cfi=(138) ??? +cfn=(420) 0x0000000000006bc0 +calls=1 -72 +* 12 +* 76 +cob=(47) +cfi=(220) +cfn=(2098) 0x00000000000a70c0 +calls=1 -72 +* 237 +cob=(47) +cfi=(220) +cfn=(2072) 0x00000000000a7000 +calls=1 -72 +* 50 +cob=(47) +cfi=(220) +cfn=(2046) 0x00000000000a6f40 +calls=1 -72 +* 50 +cob=(47) +cfi=(220) +cfn=(2028) 0x00000000000a6ec0 +calls=1 -72 +* 34 +cob=(47) +cfi=(220) +cfn=(2010) 0x00000000000a6e40 +calls=1 -72 +* 34 +cob=(47) +cfi=(220) +cfn=(2006) 0x00000000000a6e00 +calls=1 -72 +* 159 +cob=(47) +cfi=(220) +cfn=(2004) 0x00000000000a6bf0 +calls=1 -72 +* 52 +cob=(47) +cfi=(220) +cfn=(1978) 0x00000000000a6ae0 +calls=1 -72 +* 74 +cob=(47) +cfi=(220) +cfn=(1968) 0x00000000000a6a60 +calls=1 -72 +* 1459 +cob=(47) +cfi=(220) +cfn=(1946) 0x00000000000a6a40 +calls=1 -72 +* 2392 +cob=(47) +cfi=(220) +cfn=(1920) 0x00000000000a69b0 +calls=1 -72 +* 1928 +cob=(46) +cfi=(219) +cfn=(1904) +calls=1 -72 +* 12 +cob=(43) +cfi=(216) +cfn=(1654) +calls=1 -72 +* 65700 +cob=(34) +cfi=(199) +cfn=(878) 0x0000000000030520 +calls=1 -72 +* 647575 +cob=(22) +cfi=(166) +cfn=(638) 0x000000000002bc10 +calls=1 -72 +* 80507 +cob=(9) +cfi=(152) +cfn=(500) 0x00000000000024b0 +calls=1 -72 +* 22 +cob=(7) +cfi=(150) +cfn=(478) +calls=1 -44 +* 4 +cob=(3) +cfi=(145) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86/cacheinfo.c +cfn=(440) init_cacheinfo +calls=1 488 +* 1691 +cob=(5) +cfi=(139) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/x86/elision-conf.c +cfn=(426) elision_init +calls=1 +33 +* 142 +-1 198 ++3 294 +-29 3 +-5 3 + +fn=(368) +79 12 ++1 1 ++1 1 ++3 3 ++8 2 ++25 1 ++1 5 ++1 2 +-89 2 ++89 96 +-89 288 +cfn=(370) +calls=48 -2 +* 806270 ++88 147 ++7 8 +-95 3 +cfn=(370) +calls=1 -2 +* 5948 ++57 2 + +fl=(16) +fn=(36) +28 3 ++1 3 ++3 70 ++13 60 +-13 120 ++2 124 ++1 36 ++5 2 +-3 2 ++3 2 ++2 2 ++7 1 + +fl=(43) +fn=(136) +48 213 ++3 426 +-3 852 ++6 426 ++5 1278 ++2 639 +-7 120 + +fl=(53) +fn=(170) +78 340 ++1 68 + +fn=(364) +78 5 ++1 1 + +fl=(49) +fn=(158) +33 32 ++1 16 ++1 32 ++4 1 +-4 28 + +fl=(57) /build/glibc-sMfBJT/glibc-2.31/elf/dl-sort-maps.c +fn=(180) _dl_sort_maps +28 26 ++2 4 ++4 38 ++1 6 +-1 2 ++1 4 +cfi=(30) +cfn=(80) +calls=2 +73 +* 68 +* 16 +-2 8 ++6 8 ++3 2 +-3 4 ++1 6 ++2 2 +-3 496 ++3 124 +-3 248 ++1 372 ++2 124 ++12 624 ++2 372 ++1 248 +-1 7338 ++1 4892 ++33 5080 +-36 10160 ++61 570 ++7 16 +-63 37770 ++1 30492 ++6 30 +-1 90 ++1 60 +-1 60 ++1 30 +-1 90 +cfi=(20) +cfn=(48) +calls=30 +62 +* 1206 ++4 60 +-2 30 ++2 180 ++8 210 ++41 564 +cfi=(30) +cfn=(80) +calls=94 -10 +* 2010 +* 282 +-34 180 +cfi=(20) +cfn=(48) +calls=30 +43 +* 502 ++1 90 ++2 30 +-2 30 ++2 30 ++3 3810 +-44 252 + +fl=(378) /build/glibc-sMfBJT/glibc-2.31/elf/dl-fini.c +fn=(7228) _dl_fini +30 9 ++20 3 +-3 6 ++3 4 ++3 2 +cob=(5) +cfi=(180) /build/glibc-sMfBJT/glibc-2.31/nptl/../nptl/pthread_mutex_lock.c +cfn=(714) pthread_mutex_lock +calls=1 +11 +* 35 ++2 1 ++3 2 ++2 6 ++8 2 +-3 1 ++3 15 ++5 2 ++2 98 ++2 98 ++2 98 ++1 49 ++1 49 ++4 49 +-12 147 ++14 6 ++1 4 ++6 3 +cfi=(57) +cfn=(180) +calls=1 -66 +* 56504 ++10 2 +cob=(5) +cfi=(182) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutex_unlock.c +cfn=(724) pthread_mutex_unlock +calls=1 356 +* 31 ++5 6 ++2 1 ++2 3 +-2 48 ++2 144 ++3 98 ++3 147 ++4 94 ++11 47 ++1 47 +-1 47 ++2 47 +-2 47 ++2 47 +-2 47 ++3 235 ++1 47 +cob=(6) +cfi=(147) +cfn=(8412) 0x00000000000020b0 +calls=1 0 +* 161 +cob=(4) +cfi=(148) +cfn=(8394) +calls=1 0 +* 161 +cob=(5) +cfi=(138) +cfn=(8376) 0x0000000000006b80 +calls=1 0 +* 161 +cob=(7) +cfi=(381) +cfn=(8354) +calls=1 +81 +* 18 +cob=(8) +cfi=(151) +cfn=(8336) 0x000000000000e830 +calls=1 0 +* 161 +cob=(9) +cfi=(152) +cfn=(8310) 0x0000000000002480 +calls=1 0 +* 12 +cob=(10) +cfi=(154) +cfn=(8292) +calls=1 0 +* 161 +cob=(11) +cfi=(155) +cfn=(8274) 0x0000000000006100 +calls=1 0 +* 161 +cob=(12) +cfi=(156) +cfn=(8256) 0x000000000001a430 +calls=1 0 +* 161 +cob=(13) +cfi=(157) +cfn=(8238) 0x0000000000003660 +calls=1 0 +* 161 +cob=(14) +cfi=(158) +cfn=(8220) 0x0000000000007ae0 +calls=1 0 +* 161 +cob=(15) +cfi=(159) +cfn=(8202) 0x00000000000011f0 +calls=1 0 +* 161 +cob=(16) +cfi=(160) +cfn=(8184) 0x0000000000013080 +calls=1 0 +* 161 +cob=(17) +cfi=(161) +cfn=(8166) 0x0000000000002300 +calls=1 0 +* 160 +cob=(18) +cfi=(162) +cfn=(8148) 0x000000000001f480 +calls=1 0 +* 161 +cob=(19) +cfi=(163) +cfn=(8130) 0x00000000000036d0 +calls=1 0 +* 161 +cob=(20) +cfi=(164) +cfn=(8112) 0x00000000000022b0 +calls=1 0 +* 161 +cob=(21) +cfi=(165) +cfn=(8094) +calls=1 0 +* 161 +cob=(22) +cfi=(166) +cfn=(8056) 0x000000000002bbf0 +calls=1 0 +* 289 +cob=(23) +cfi=(188) +cfn=(8038) +calls=1 0 +* 168 +cob=(24) +cfi=(189) +cfn=(8020) 0x000000000000f7d0 +calls=1 0 +* 168 +cob=(25) +cfi=(190) +cfn=(8002) 0x00000000000038f0 +calls=1 0 +* 168 +cob=(26) +cfi=(191) +cfn=(7980) 0x0000000000003600 +calls=1 0 +* 5 +cob=(27) +cfi=(192) +cfn=(7958) 0x00000000000044d0 +calls=1 0 +* 5 +cob=(28) +cfi=(193) +cfn=(7932) 0x0000000000024060 +calls=1 0 +* 5 +cob=(29) +cfi=(194) +cfn=(7914) 0x000000000000a2b0 +calls=1 0 +* 167 +cob=(30) +cfi=(195) +cfn=(7896) 0x0000000000009180 +calls=1 0 +* 167 +cob=(31) +cfi=(196) +cfn=(7878) 0x00000000000076b0 +calls=1 0 +* 167 +cob=(32) +cfi=(197) +cfn=(7860) 0x00000000000109b0 +calls=1 0 +* 168 +cob=(33) +cfi=(198) +cfn=(7842) 0x0000000000002510 +calls=1 0 +* 168 +cob=(34) +cfi=(199) +cfn=(7644) 0x00000000000304d0 +calls=1 0 +* 133774 +cob=(35) +cfi=(208) +cfn=(7626) 0x00000000000022f0 +calls=1 0 +* 175 +cob=(36) +cfi=(209) +cfn=(7608) 0x00000000000011e0 +calls=1 0 +* 175 +cob=(37) +cfi=(210) +cfn=(7590) 0x0000000000003430 +calls=1 0 +* 175 +cob=(38) +cfi=(211) +cfn=(7562) 0x000000000000ee40 +calls=1 0 +* 54 +cob=(39) +cfi=(212) +cfn=(7538) +calls=1 0 +* 17 +cob=(40) +cfi=(213) +cfn=(7520) 0x0000000000079090 +calls=1 0 +* 174 +cob=(41) +cfi=(214) +cfn=(7502) +calls=1 0 +* 175 +cob=(42) +cfi=(215) +cfn=(7484) 0x0000000000002430 +calls=1 0 +* 175 +cob=(43) +cfi=(216) +cfn=(7394) +calls=1 0 +* 2980 +cob=(44) +cfi=(217) +cfn=(7376) 0x0000000000005df0 +calls=1 0 +* 175 +cob=(45) +cfi=(218) +cfn=(7358) 0x0000000000005260 +calls=1 0 +* 175 +cob=(46) +cfi=(219) +cfn=(7340) +calls=1 0 +* 175 +cob=(47) +cfi=(220) +cfn=(7294) 0x00000000000a7190 +calls=1 0 +* 2014 +cob=(48) +cfi=(223) +cfn=(7276) 0x0000000000010a70 +calls=1 0 +* 175 +cob=(49) +cfi=(224) +cfn=(7258) 0x00000000000010e0 +calls=1 0 +* 175 +cob=(50) +cfi=(225) +cfn=(7230) 0x0000000000118020 +calls=1 0 +* 174 +* 11 +cob=(7) +cfi=(149) +cfn=(8358) +calls=1 0 +* 161 +cob=(9) +cfi=(152) +cfn=(8318) 0x0000000000002550 +calls=1 0 +* 161 +cob=(22) +cfi=(166) +cfn=(8076) 0x000000000002bc90 +calls=1 0 +* 186 +cob=(26) +cfi=(191) +cfn=(7984) 0x00000000000036c0 +calls=1 0 +* 168 +cob=(27) +cfi=(192) +cfn=(7962) 0x0000000000004570 +calls=1 0 +* 168 +cob=(28) +cfi=(193) +cfn=(7940) 0x0000000000024110 +calls=1 0 +* 168 +cob=(28) +cfi=(193) +cfn=(7936) 0x0000000000023fd0 +calls=1 0 +* 5 +cob=(34) +cfi=(199) +cfn=(7824) 0x0000000000030610 +calls=1 0 +* 192 +cob=(38) +cfi=(211) +cfn=(7572) 0x000000000000ef30 +calls=1 0 +* 175 +cob=(39) +cfi=(212) +cfn=(7544) +calls=1 0 +* 175 +cob=(43) +cfi=(216) +cfn=(7466) +calls=1 0 +* 175 +-1 279 ++5 94 ++1 141 +cob=(2) +cfi=(18) +cfn=(8428) 0x0000000005e56c80 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8410) 0x0000000004b71f18 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8392) 0x0000000004c3e4d8 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8374) 0x00000000057c617c +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8352) 0x0000000005e029b4 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8334) 0x00000000058db0cc +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8308) 0x000000000590111c +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8290) 0x0000000005c77d84 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8272) 0x0000000005c090f0 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8254) 0x0000000005cc030c +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8236) 0x0000000005c51f38 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8218) 0x0000000005c8db3c +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8200) 0x0000000005cff9a0 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8182) 0x0000000005c86a48 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8164) 0x0000000005b5d4bc +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8146) 0x0000000005aec8e0 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8128) 0x0000000005ae21fc +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8110) 0x0000000005ad58a4 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8092) 0x0000000005a551b0 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8054) 0x000000000596f380 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8036) 0x000000000595e0a4 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8018) 0x0000000005920618 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(8000) 0x00000000058e8174 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7978) 0x00000000058c6100 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7956) 0x000000000584c8cc +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7930) 0x00000000057a7ea4 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7912) 0x000000000572a7e0 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7894) 0x00000000056e3fe0 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7876) 0x00000000053ba450 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7858) 0x0000000004e6e1b4 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7840) 0x000000000564713c +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7642) 0x0000000005369f3c +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7624) 0x0000000005351048 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7606) 0x00000000053425ac +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7588) 0x0000000005322d20 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7560) 0x00000000052d1e30 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7536) 0x00000000051d1eb0 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7518) 0x0000000004f94bac +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7500) 0x0000000004f1adc8 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7482) 0x0000000004ef6c48 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7392) 0x0000000004e9e010 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7374) 0x0000000004e56c88 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7356) 0x0000000004c21048 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7338) 0x0000000004a62454 +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7292) 0x00000000048bb94c +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7274) 0x000000000483129c +calls=1 0 +* 4 +cob=(2) +cfi=(18) +cfn=(7256) 0x0000000000877ec8 +calls=1 0 +* 4 ++6 294 ++19 49 +-59 149 ++11 6 +-26 7 ++80 6 ++6 2 ++7 8 + +fl=(19) +fn=(42) calloc +92 202 ++4 101 ++4 101 +-1 202 ++1 202 ++3 101 +cob=(2) +cfi=(18) +cfn=(44) +calls=101 0 +* 3086 + +fn=(84) +262 2 ++3 4 ++2 2 ++1 4 ++4 33 ++7 84 +-2 56 ++13 1 ++4 4 +-22 14 ++15 14 +-15 30 + +fn=(46) malloc +49 1250 ++1 1000 ++11 500 ++3 250 +-3 250 ++3 1452 ++18 250 ++1 250 ++2 1000 +-16 48 ++1 24 ++2 12 ++1 84 +cfi=(43) +cfn=(136) +calls=12 -25 +* 240 +* 12 ++2 24 ++2 24 ++2 40 +-23 1 +-1 1 ++1 1 ++1 2 +-2 4 ++24 8 + +fn=(94) +109 50 ++2 200 + +fl=(20) +fn=(78) +114 211 ++1 211 ++1 211 ++1 211 ++17 211 ++1 211 ++1 69 ++1 69 ++5 25 ++1 25 ++1 25 ++1 25 ++5 25 +280 142 ++1 142 ++1 58 ++1 58 ++1 53 ++1 53 ++1 51 ++4 51 ++22 84 ++1 84 ++1 84 ++1 84 ++1 84 ++3 5 ++1 5 ++1 5 ++1 5 ++1 5 ++3 2 ++1 2 ++1 2 ++1 2 ++1 2 ++10 44 ++1 44 ++1 44 ++1 44 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 ++3 43 ++1 43 ++1 43 ++1 43 ++1 43 ++1 43 ++1 43 ++1 43 ++2 43 + +fn=(48) +127 336 ++1 336 ++6 336 ++1 336 ++1 287 ++1 287 ++5 112 ++1 112 ++1 112 ++1 112 ++5 112 +280 49 ++1 49 ++1 7 ++1 7 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 ++22 42 ++1 42 ++1 42 ++1 42 ++1 42 ++3 6 ++1 6 ++1 6 ++1 6 ++1 6 ++17 175 ++1 175 ++1 161 ++1 161 ++2 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++1 37 ++2 37 ++3 124 ++1 124 ++1 124 ++1 124 ++1 124 ++1 124 ++1 124 ++1 124 ++2 124 ++3 14 ++1 14 ++2 14 ++3 14 ++1 14 ++1 14 ++1 14 ++1 14 ++2 14 ++1 14 ++3 14 ++1 14 ++2 14 ++2 14 ++2 14 ++2 14 ++8 14 ++1 14 ++1 14 ++1 14 ++1 14 ++1 14 ++1 14 ++1 14 ++1 14 ++1 14 ++1 14 ++1 14 ++1 14 +-12 34 ++1 34 ++1 34 ++1 34 ++1 34 ++1 34 ++1 34 ++1 34 ++1 34 ++1 34 ++1 34 ++1 34 ++1 34 ++2 14 ++1 14 ++1 14 ++1 14 ++2 14 ++2 14 + +fl=(21) +fn=(134) +153 880 ++4 88 ++2 352 +53 170 ++6 92 +160 40 +-98 40 ++5 80 ++89 41 +-89 41 ++89 82 +-89 82 ++70 164 +-1 41 +-69 123 ++3 123 ++1 82 ++1 82 ++4 123 ++4 123 ++3 123 ++1 82 ++4 41 ++1 82 ++11 41 ++1 164 ++5 82 +-13 82 ++1 41 ++3 85 ++66 6 ++16 82 ++3 88 ++1 704 +-19 45 ++6 9 +-6 3 ++6 6 +cfi=(54) +cfn=(174) +calls=3 29 +* 21 +* 6 +53 6 ++6 2 ++3 1 ++5 2 ++75 205 ++1 41 ++1 82 ++1 82 +-32 82 ++3 82 ++4 41 + +fl=(31) +fn=(88) +23 217 ++1 217 ++1 217 ++1 217 ++1 217 ++1 217 ++1 217 ++1 217 ++1 217 ++1 216 ++1 216 ++1 216 ++1 216 ++1 216 ++1 216 ++1 216 ++1 216 ++1 216 ++1 169 ++4 169 ++1 169 ++1 169 ++1 169 ++2 169 ++4 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 51 ++5 2 ++1 2 ++3 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++2 2 ++1 2 ++2 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++2 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++3 2 ++4 2 ++1 2 ++1 2 ++1 2 ++2 2 +-9 46 ++4 46 ++1 46 ++1 46 ++1 46 ++2 46 ++4 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 + +fl=(55) /build/glibc-sMfBJT/glibc-2.31/malloc/scratch_buffer_set_array_size.c +fn=(176) __libc_scratch_buffer_set_array_size +30 47 ++4 47 +-4 47 ++1 47 ++3 47 +-3 47 +-1 47 ++5 47 +-5 94 ++5 47 ++11 47 +-1 94 ++18 188 + +fl=(12) +fn=(24) +71 2 ++4 4 ++3 3 ++4 2 +-4 1 ++4 1 +-4 1 ++3 1 ++1 1 ++1 4 ++1 4 ++1 3 ++1 2 ++7 2 ++1 3 ++6 1 +-6 4 ++6 1 ++1 7 ++7 3 ++4 2 ++2 4 +225 2 ++4 3 ++1 2 ++3 1 +-1 1 ++4 1 ++2 1 +-2 1 ++5 2 ++50 3 +118 2 ++3 4 ++3 2 ++8 1 +-5 3 ++8 2 ++2 2 ++2 3 ++4 2 ++4 2 ++7 3 + +fl=(48) +fn=(152) openaux +61 504 ++7 168 +-4 336 ++1 168 +-1 1344 +cfi=(27) +cfn=(118) +calls=168 1927 +* 712396 +* 168 ++5 336 + +fn=(148) +159 2 ++1 3 +-1 2 ++1 1 +-1 1 ++1 1 +-1 5 ++1 3 +-1 1 ++1 1 +-1 1 ++1 7 +-15 1 ++15 2 +-8 1 +-6 1 +-1 1 ++15 1 +-16 1 ++8 3 +-6 1 ++6 1 ++24 3 +-28 3 +-2 1 ++31 1 +-33 2 ++2 5 +-1 4 ++7 4 ++24 7 ++4 1 +fi=(56) /build/glibc-sMfBJT/glibc-2.31/elf/../include/scratch_buffer.h +77 3 +fe=(48) +198 1 +fi=(56) +78 1 +fe=(48) +200 2 ++87 1 +-89 1 ++4 1 ++7 1 ++4 4 +-4 48 ++4 192 ++11 102 +-18 2 ++18 4 +433 147 ++2 47 ++3 47 +-3 94 ++3 94 +cob=(2) +cfi=(18) +cfn=(44) +calls=47 0 +* 1308 +* 47 ++1 94 ++6 47 ++1 235 +cfi=(20) +cfn=(48) +calls=47 127 +* 693 ++1 235 +cfi=(20) +cfn=(48) +calls=47 127 +* 693 ++4 47 +-1 47 ++5 196 +202 144 +458 144 +-1 49 ++1 98 +199 3 ++27 47 ++11 47 +-5 47 +-6 94 ++5 47 ++2 94 ++1 94 ++3 188 ++66 47 +-97 47 ++97 47 +-66 47 ++66 94 +-65 141 ++6 188 +cfi=(27) +cfn=(150) +calls=47 -13 +* 2310 +* 484 +cfi=(27) +cfn=(150) +calls=121 -13 +* 5610 +* 504 ++4 504 +-2 168 ++2 168 +cob=(2) +cfi=(18) +cfn=(110) 0x0000000004001090 +calls=168 0 +* 725668 ++1 336 ++9 168 ++2 336 ++5 235 ++6 47 ++2 47 +-8 94 ++3 47 ++1 47 ++1 47 ++1 47 ++4 235 ++4 504 ++1 486 +-43 5524 ++1 2668 ++44 3639 +-38 336 +fi=(56) +85 3 +fe=(48) +464 6 ++1 1 ++3 5 ++11 4 +cob=(2) +cfi=(18) +cfn=(44) +calls=1 0 +* 27 +* 1 ++2 2 ++5 6 ++1 1 ++2 4 ++2 1 ++4 3 ++4 2 +-10 3 ++2 48 ++4 144 ++4 96 +-10 144 ++13 2 ++51 3 ++2 1 +-1 1 ++1 2 ++35 5 +cfi=(20) +cfn=(48) +calls=1 127 +* 95 ++4 5 +cfi=(57) +cfn=(180) +calls=1 28 +* 52442 ++3 1 ++2 1 ++1 1 +-1 1 ++2 2 ++7 3 ++3 3 ++3 8 +214 340 ++3 47 +fi=(56) +-86 141 +cfi=(55) +cfn=(176) +calls=47 30 +* 846 +fe=(48) ++86 94 ++4 141 +-61 2 +380 96 + +fl=(58) +fn=(186) +362 6 ++4 5 +-2 2 ++4 294 +cfn=(188) _dl_check_map_versions +calls=49 156 +* 378551 +-2 49 ++2 196 +-2 98 ++5 7 + +fn=(188) +156 392 ++15 49 +-15 98 ++15 98 ++2 49 ++3 98 +-3 49 ++2 49 ++1 49 +-1 49 ++3 98 ++3 94 +-16 47 +-8 47 ++28 47 +-4 47 ++4 282 ++16 47 +37 94 +201 47 +37 235 +201 98 +37 196 +201 98 +37 490 ++1 2779 +-1 5558 ++2 8772 +cfi=(38) +cfn=(120) +calls=2924 282 +* 268286 +* 5848 +209 435 ++5 145 +-71 290 ++71 290 +-71 435 ++79 145 +-2 145 +-2 290 ++4 145 +-4 870 ++4 250 +-2 250 +-2 500 ++4 250 +-4 1645 +57 87 ++8 87 +-8 1098 ++8 1098 ++6 1185 ++16 395 ++1 790 ++2 395 ++5 2765 ++14 6708 ++12 8877 ++4 2959 +-30 5918 +225 1580 ++3 1185 ++5 250 +-11 250 +111 395 ++3 1580 +cfi=(22) +cfn=(58) +calls=395 -3 +* 17085 +* 1725 +237 580 ++5 196 +-44 98 ++1 98 ++11 47 ++41 188 ++3 152 ++10 224 +-7 896 ++3 672 +-3 152 ++3 114 ++8 96 ++89 441 +165 2 ++86 2 +-94 2 ++94 3 ++23 192 +cob=(2) +cfi=(18) +cfn=(40) +calls=48 0 +* 1903 +-1 48 ++1 48 ++1 96 ++13 48 +-3 48 ++3 96 ++2 144 ++3 188 ++4 435 ++7 395 ++1 395 +-1 790 ++1 395 +-1 395 ++1 395 ++1 395 +-2 395 ++2 790 ++1 1185 ++3 1185 ++5 250 +-15 250 ++2 250 +-2 250 ++2 250 +-2 250 ++2 500 +-2 145 ++2 145 +-2 145 ++2 145 +-2 145 ++2 290 ++16 435 ++5 98 +-28 98 ++33 144 ++3 152 ++4 224 ++6 224 ++1 224 ++1 224 +-1 672 ++1 224 +-1 224 ++1 224 ++1 224 ++3 672 ++4 224 +-14 524 ++10 114 + +fl=(36) +fn=(108) _dl_catch_error +225 10 ++2 2 +cob=(2) +cfi=(18) +cfn=(110) +calls=1 0 +* 2830 ++1 2 ++1 1 ++1 1 +-1 1 ++1 1 ++2 5 + +fn=(112) _dl_catch_exception +175 1352 ++3 338 ++22 169 +-1 169 ++7 338 +-6 169 ++3 338 ++3 169 +cfi=(37) +cfn=(114) +calls=169 30 +* 4056 +* 676 ++2 507 +cfi=(48) +cfn=(152) +calls=168 61 +* 715420 +cfi=(2) +cfn=(116) +calls=1 606 +* 2769 ++2 169 +-1 169 ++1 169 +-1 169 ++1 338 ++9 676 + +fn=(182) +238 6 ++1 1 ++1 1 ++3 1 ++1 1 ++2 1 +cfi=(2) +cfn=(184) +calls=1 639 +* 379219 ++2 1 ++1 1 ++1 4 + +fl=(131) +fn=(388) +66 645 ++6 430 +-6 215 ++3 430 ++3 645 +-4 215 ++5 215 ++2 215 +-2 1075 ++2 215 +-2 215 ++2 215 ++5 430 ++4 430 ++4 645 ++4 430 ++1 860 +-7 860 ++16 215 +-1 215 ++1 430 ++10 2150 +cfi=(6) +cfn=(208) +calls=215 841 +* 174320 +* 215 ++4 1075 ++10 1935 ++7 215 ++8 860 ++4 645 +fi=(5) ++97 215 +fe=(131) +-93 645 +fi=(238) /build/glibc-sMfBJT/glibc-2.31/elf/../sysdeps/x86_64/dl-irel.h +32 11 +cob=(3) +cfi=(62) +cfn=(216) +calls=1 -3 +* 17 +cob=(3) +cfi=(70) +cfn=(232) +calls=1 -2 +* 10 +cob=(3) +cfi=(94) +cfn=(284) +calls=1 -3 +* 10 +cob=(3) +cfi=(89) +cfn=(274) +calls=1 +17 +* 9 +cob=(3) +cfi=(93) +cfn=(282) +calls=1 -3 +* 10 +cob=(3) +cfi=(76) +cfn=(246) +calls=1 -3 +* 19 +cob=(3) +cfi=(90) +cfn=(276) +calls=2 -3 +* 20 +cob=(3) +cfi=(83) +cfn=(260) +calls=1 -3 +* 17 +cob=(3) +cfi=(72) +cfn=(238) +calls=1 -3 +* 13 +cob=(3) +cfi=(75) +cfn=(244) +calls=1 +21 +* 9 +* 11 +fe=(131) + +fl=(39) +fn=(124) +34 101 ++3 101 +-3 303 ++3 606 ++8 707 ++2 48 +-2 159 ++2 53 + +fl=(38) +fn=(162) +44 2 ++3 1 +-3 6 ++3 1 +-3 1 ++3 1 +cfi=(39) +cfn=(124) +calls=1 -13 +* 19 ++1 2 ++23 7 +-21 5 +cfi=(42) +cfn=(132) +calls=1 -17 +* 11 +* 2 ++2 2 ++3 2 ++13 2 +cfi=(46) +cfn=(144) +calls=1 -43 +* 6 +* 1 +-11 6 +cfi=(43) +cfn=(136) +calls=1 -9 +* 20 +* 2 + +fn=(120) +282 37632 ++1 12544 +cfi=(22) +cfn=(58) +calls=6272 111 +* 193731 +* 6272 ++1 6272 +-1 12544 ++3 6272 ++2 12544 ++4 6240 +-4 12480 ++1 19521 +cfi=(22) +cfn=(58) +calls=6507 111 +* 211233 +* 13014 +-5 267 ++11 7073 +-1 6005 ++1 18015 + +fn=(356) +300 2 ++38 2 +-1 2 ++3 2 ++2 80 ++1 37 +-3 24 ++18 2 ++1 2 +-15 6 + +fl=(59) +fn=(198) dl_cet_check +97 7 ++3 1 +-1 1 ++4 1 +-4 1 ++3 1 ++4 2 ++1 2 +-1 2 ++6 1 ++5 2 +326 8 + +fn=(196) +343 1 ++1 1 +cfn=(198) +calls=1 97 +* 29 + +fl=(42) +fn=(132) +33 192 ++1 96 ++1 192 ++4 48 + +ob=(3) +fl=(71) +fn=(234) +33 1 +fi=(63) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-memmove.h ++12 3 +-1 2 ++5 2 +-1 2 ++12 2 ++2 5 +fe=(71) + +fl=(329) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/syscall-template.S +fn=(4840) umask +59 3 ++1 1 + +fl=(230) /build/glibc-sMfBJT/glibc-2.31/locale/uselocale.c +fn=(2294) uselocale +30 22 ++1 66 ++2 44 ++3 44 ++1 22 ++28 66 ++1 66 ++2 66 ++4 66 ++1 22 + +fl=(357) /build/glibc-sMfBJT/glibc-2.31/debug/fprintf_chk.c +fn=(6180) __fprintf_chk +25 60 ++3 10 ++4 5 +-4 5 ++4 5 ++1 5 +-1 5 +-4 5 ++4 15 ++1 5 +cfi=(358) /build/glibc-sMfBJT/glibc-2.31/stdio-common/vfprintf-internal.c +cfn=(6182) __vfprintf_internal +calls=5 1289 +* 4318 ++4 25 + +fl=(65) +fn=(222) +31 15 +fi=(386) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-strcasecmp.h ++1 60 +fe=(65) +-1 15 + +fl=(79) +fn=(252) +31 6 +fi=(387) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-avx2.h ++1 18 +-2 30 +fe=(79) ++1 6 + +fl=(142) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strrchr-avx2.S +fn=(434) __strrchr_avx2 +42 1 ++1 1 ++1 1 ++2 1 ++1 1 ++3 1 ++1 1 ++1 1 ++33 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++3 1 ++1 1 ++9 1 ++1 1 ++3 1 ++1 2 ++4 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++32 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++6 1 ++1 1 ++1 1 ++1 1 + +fl=(170) /build/glibc-sMfBJT/glibc-2.31/locale/newlocale.c +fn=(680) newlocale +44 84 ++12 15 ++4 6 ++4 12 ++3 18 ++6 16 ++7 60 ++7 4 +268 5 ++2 20 +-1 5 ++5 10 +-1 5 ++5 72 +76 4 +-2 16 ++5 6 ++4 90 ++22 3 +-3 3 ++1 3 ++2 3 +cfi=(168) /build/glibc-sMfBJT/glibc-2.31/stdlib/getenv.c +cfn=(658) getenv +calls=3 -71 +* 1380 +* 2 +-3 2 ++1 2 ++2 2 +cfi=(168) +cfn=(658) +calls=2 -71 +* 920 ++1 10 ++16 10 +-1 60 ++1 5 +cob=(2) +cfi=(18) +cfn=(686) 0x0000000004c6d470 +calls=5 0 +* 128 +* 10 ++3 4 +cob=(2) +cfi=(18) +cfn=(660) 0x0000000004c6d460 +calls=2 0 +* 138 +* 40 +cob=(2) +cfi=(18) +cfn=(910) 0x0000000004c6d4d0 +calls=2 0 +* 124 +fi=(300) /build/glibc-sMfBJT/glibc-2.31/locale/localeinfo.h ++81 2 +fe=(170) +-73 2 +-8 2 +fi=(300) ++81 8 +fe=(170) +-73 4 +fi=(300) ++73 6 +fe=(170) +-73 4 +fi=(300) ++73 6 +fe=(170) +-73 4 +fi=(300) ++73 6 +fe=(170) +-73 4 +fi=(300) ++73 6 +fe=(170) +-73 4 +fi=(300) ++73 6 +fe=(170) +-73 4 +fi=(300) ++73 6 +fe=(170) +-73 4 +fi=(300) ++73 4 +fe=(170) +-73 4 +fi=(300) ++73 14 +fe=(170) +-73 4 +fi=(300) ++73 6 +fe=(170) +-73 4 +fi=(300) ++73 6 +fe=(170) +-73 2 +fi=(300) ++73 4 +fe=(170) +-79 2 ++6 4 +-4 2 ++5 8 +cob=(2) +cfi=(18) +cfn=(2326) 0x0000000004c6d590 +calls=2 0 +* 54 +* 6 +-3 4 ++12 2 ++1 2 +-2 2 ++1 2 ++1 2 +cob=(2) +cfi=(18) +cfn=(686) +calls=2 0 +* 59 +-1 22 ++1 22 +-2 22 ++1 22 ++1 22 +cob=(2) +cfi=(18) +cfn=(686) +calls=22 0 +* 589 ++1 48 ++3 22 ++1 22 +-20 66 +cob=(2) +cfi=(18) +cfn=(686) +calls=22 0 +* 589 +* 6 +cob=(2) +cfi=(18) +cfn=(686) +calls=2 0 +* 52 +* 72 ++4 360 +-76 6 ++17 8 ++82 6 ++6 40 +cob=(5) +cfi=(173) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_rwlock_wrlock.c +cfn=(690) pthread_rwlock_wrlock +calls=5 24 +* 217 +-35 5 ++63 15 +-63 5 ++63 157 ++2 48 +cob=(2) +cfi=(18) +cfn=(660) +calls=48 0 +* 1012 +* 144 +-26 156 ++2 130 ++2 266 +cfi=(175) /build/glibc-sMfBJT/glibc-2.31/locale/findlocale.c +cfn=(694) _nl_find_locale +calls=38 -66 +* 36378 ++3 76 +-3 38 ++3 38 ++14 152 +-21 25 ++34 4 +cob=(2) +cfi=(18) +cfn=(700) 0x0000000004c6d310 +calls=1 0 +* 76512 +* 16 +cob=(2) +cfi=(18) +cfn=(700) +calls=4 0 +* 464 ++1 10 ++6 30 ++26 8 ++3 2 ++2 2 +-2 2 ++2 4 ++16 24 ++1 72 +cob=(2) +cfi=(18) +cfn=(3860) 0x0000000004c6d3b0 +calls=24 0 +* 706 +* 48 +-25 72 ++1 104 ++15 48 ++3 22 ++1 22 +-1 22 ++1 44 +-20 4 ++29 4 +cob=(2) +cfi=(18) +cfn=(3526) 0x0000000004c6d330 +calls=2 0 +* 170 +* 2 ++4 45 +cob=(5) +cfi=(187) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_rwlock_unlock.c +cfn=(748) pthread_rwlock_unlock +calls=5 31 +* 200 +* 10 +134 16 +cob=(2) +cfi=(18) +cfn=(2326) +calls=4 0 +* 110 +* 40 +cob=(2) +cfi=(18) +cfn=(2326) +calls=6 0 +* 162 +* 14 +-3 4 ++3 16 +cob=(2) +cfi=(18) +cfn=(2326) +calls=4 0 +* 96 +* 10 +-3 4 ++3 16 +cob=(2) +cfi=(18) +cfn=(2326) +calls=4 0 +* 110 +* 10 +-3 4 ++3 16 +cob=(2) +cfi=(18) +cfn=(2326) +calls=4 0 +* 110 +* 10 +-3 4 ++3 8 +cob=(2) +cfi=(18) +cfn=(2326) +calls=2 0 +* 58 +* 6 +-3 4 ++3 8 +cob=(2) +cfi=(18) +cfn=(2326) +calls=2 0 +* 58 +* 6 +-3 4 ++3 8 +cob=(2) +cfi=(18) +cfn=(2326) +calls=2 0 +* 46 +* 6 +-3 4 ++3 8 +cob=(2) +cfi=(18) +cfn=(2326) +calls=2 0 +* 58 +* 6 +-3 4 ++3 8 +cob=(2) +cfi=(18) +cfn=(2326) +calls=2 0 +* 58 +* 6 +-3 4 ++3 8 +cob=(2) +cfi=(18) +cfn=(2326) +calls=2 0 +* 58 +* 6 +-3 13 ++85 186 ++2 24 ++1 24 +cob=(2) +cfi=(18) +cfn=(3860) +calls=24 0 +* 684 +* 24 +-4 117 ++7 96 + +fl=(92) +fn=(280) +31 1 +fi=(386) ++1 4 +fe=(92) +-1 1 + +fl=(200) /build/glibc-sMfBJT/glibc-2.31/stdlib/secure-getenv.c +fn=(888) secure_getenv +28 6 ++1 30 +cfi=(168) +cfn=(658) +calls=6 +5 +* 3455 + +fl=(68) +fn=(228) +31 1 +fi=(387) ++1 3 +-2 5 +fe=(68) ++1 1 + +fl=(168) +fn=(658) +34 376 ++5 376 ++3 141 ++49 423 +-56 47 +cob=(2) +cfi=(18) +cfn=(660) +calls=47 -35 +* 958 ++38 47 +-6 47 +-32 47 ++37 47 ++3 9390 ++9 5472 +cob=(2) +cfi=(18) +cfn=(682) 0x0000000004c6d580 +calls=195 -84 +* 6324 +* 390 ++1 44 ++1 44 + +fl=(234) /build/glibc-sMfBJT/glibc-2.31/elf/dl-profstub.c +fn=(2310) _dl_mcount_wrapper_check +37 400 ++1 400 +-1 400 ++1 800 ++2 400 + +fl=(376) /build/glibc-sMfBJT/glibc-2.31/stdlib/cxa_thread_atexit_impl.c +fn=(6560) __call_tls_dtors +145 4 ++1 4 ++18 4 + +fl=(340) /build/glibc-sMfBJT/glibc-2.31/intl/gettext.c +fn=(5130) gettext +54 2 ++1 3 +cfi=(341) /build/glibc-sMfBJT/glibc-2.31/intl/dcgettext.c +cfn=(5132) dcgettext +calls=1 -9 +* 624 + +fl=(274) /build/glibc-sMfBJT/glibc-2.31/libio/iofopen.c +fn=(3532) fopen@@GLIBC_2.2.5 +85 60 +-20 10 ++20 20 +-20 10 +cob=(2) +cfi=(18) +cfn=(700) +calls=10 -65 +* 772 ++2 30 ++3 10 ++2 20 +-2 10 ++2 50 +cfi=(275) /build/glibc-sMfBJT/glibc-2.31/libio/genops.c +cfn=(3534) _IO_no_init +calls=10 563 +* 530 ++1 10 ++1 10 +-1 10 ++1 10 +cfi=(276) /build/glibc-sMfBJT/glibc-2.31/libio/fileops.c +cfn=(3538) _IO_new_file_init_internal +calls=10 +33 +* 1320 ++1 50 +cfi=(276) +cfn=(3548) _IO_file_fopen@@GLIBC_2.2.5 +calls=10 214 +* 2223 +* 20 +-38 20 ++50 70 + +fl=(298) /build/glibc-sMfBJT/glibc-2.31/setjmp/../sysdeps/x86_64/setjmp.S +fn=(3776) __sigsetjmp +30 1 ++2 1 ++9 1 ++1 2 ++1 1 ++4 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 2 ++2 1 ++1 1 ++1 1 ++2 2 ++2 1 ++5 1 ++1 1 ++17 1 +cfi=(299) /build/glibc-sMfBJT/glibc-2.31/setjmp/sigjmp.c +cfn=(3778) __sigjmp_save +calls=1 -56 +* 9 + +fl=(312) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/wcsmbsload.c +fn=(3962) __wcsmbs_load_conv +153 20 ++2 2 +-2 6 ++2 14 +cob=(5) +cfi=(173) +cfn=(690) +calls=2 24 +* 80 ++4 4 ++9 6 +cob=(2) +cfi=(18) +cfn=(2846) 0x0000000004c6d550 +calls=2 0 +* 448 +* 2 ++1 4 ++11 10 +-7 2 ++7 234 +-88 16 +cfi=(313) /build/glibc-sMfBJT/glibc-2.31/iconv/gconv_db.c +cfn=(3964) __gconv_find_transform +calls=2 722 +* 2355 +* 4 ++20 8 ++8 2 ++66 2 ++2 4 +-96 12 +cfi=(313) +cfn=(3964) +calls=2 722 +* 1720 +* 4 ++20 8 ++8 2 ++69 2 ++6 4 ++13 2 +-1 2 ++1 2 ++4 16 +cob=(5) +cfi=(187) +cfn=(748) +calls=2 31 +* 80 ++1 22 +-33 20 + +fl=(75) +fn=(244) +53 22 +-12 66 +-2 22 ++2 22 +-2 44 ++14 22 + +fl=(134) /build/glibc-sMfBJT/glibc-2.31/nptl/register-atfork.c +fn=(406) __register_atfork +39 18 ++1 9 +fi=(135) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/x86/lowlevellock.h ++7 6 +fe=(134) +-5 6 +fi=(136) /build/glibc-sMfBJT/glibc-2.31/nptl/../malloc/dynarray-skeleton.c +195 1 +fe=(134) +45 1 +fi=(136) +197 2 +fe=(134) +45 1 +fi=(136) +195 1 +319 1 ++1 1 +-1 1 +-1 1 ++2 1 +fe=(134) +49 2 +fi=(136) +319 2 ++1 2 +-1 2 +-1 2 ++2 2 +fe=(134) +49 4 ++2 3 ++2 3 ++1 3 +-3 6 ++7 12 ++2 6 ++1 3 +-1 3 ++1 6 +fi=(136) +216 2 +357 6 ++4 4 +fe=(134) + +fn=(7242) __unregister_atfork +79 141 ++1 141 +fi=(135) +-33 94 +fe=(134) ++35 47 +-14 94 +fi=(136) +250 47 +fe=(134) +68 232 +fi=(136) +239 91 +fe=(134) +68 182 +fi=(136) +250 93 +fe=(134) +71 186 +fi=(136) +270 2 +fe=(134) +91 2 +fi=(136) +270 4 +fe=(134) +92 6 ++10 6 +fi=(136) +423 4 +fe=(134) +102 6 +fi=(136) +421 4 +fe=(134) +102 6 ++4 188 ++1 94 +-5 4 + +fl=(205) /build/glibc-sMfBJT/glibc-2.31/stdlib/../sysdeps/unix/sysv/linux/getrandom.c +fn=(1228) getrandom +29 1 ++1 7 ++1 1 + +fl=(310) /build/glibc-sMfBJT/glibc-2.31/locale/duplocale.c +fn=(3886) duplocale +34 60 ++2 30 +-2 210 ++2 60 ++5 60 ++8 30 +-8 30 ++8 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 540 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 600 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 600 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 720 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 660 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 540 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 540 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 600 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 720 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 600 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 540 +* 30 +-1 90 ++1 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -50 +* 540 +* 30 ++3 60 +cob=(2) +cfi=(18) +cfn=(700) +calls=30 -53 +* 3922 +* 30 ++2 60 ++5 30 +-3 30 ++3 210 +cob=(5) +cfi=(173) +cfn=(690) +calls=30 -36 +* 1200 +* 30 +-15 60 ++28 360 ++1 720 +cob=(2) +cfi=(18) +cfn=(3860) +calls=360 -74 +* 10620 +* 360 +-12 1080 ++1 780 ++2 360 ++1 360 +-1 360 ++1 720 ++3 1080 ++10 30 ++2 30 +-2 30 ++2 30 ++3 210 +cob=(5) +cfi=(187) +cfn=(748) +calls=30 -53 +* 1200 ++4 270 + +fl=(379) /build/glibc-sMfBJT/glibc-2.31/stdlib/cxa_finalize.c +fn=(7238) __cxa_finalize +30 423 ++3 47 +fi=(222) /build/glibc-sMfBJT/glibc-2.31/stdlib/../sysdeps/unix/sysv/linux/x86/lowlevellock.h ++14 47 +fe=(379) +-14 94 +fi=(222) ++14 94 ++4 47 +fe=(379) +-15 141 ++4 282 ++1 752 +-1 1104 ++1 768 ++2 8 ++36 8 +-3 8 +-31 8 ++34 16 ++3 32 ++1 24 +cob=(47) +cfi=(220) +cfn=(7328) 0x00000000000a82a0 +calls=1 -83 +* 8 +cob=(47) +cfi=(220) +cfn=(7320) 0x00000000000a8260 +calls=1 -83 +* 797 +cob=(47) +cfi=(220) +cfn=(7318) 0x00000000000d48e0 +calls=1 -83 +* 8 +cob=(47) +cfi=(220) +cfn=(7316) 0x00000000000d6cf0 +calls=1 -83 +* 8 +cob=(47) +cfi=(220) +cfn=(7308) 0x00000000000d6cb0 +calls=1 -83 +* 835 +cob=(47) +cfi=(220) +cfn=(7306) 0x0000000000170580 +calls=1 -83 +* 2 +cob=(47) +cfi=(220) +cfn=(7304) 0x0000000000170590 +calls=1 -83 +* 2 +cob=(47) +cfi=(220) +cfn=(7302) 0x00000000001705a0 +calls=1 -83 +* 2 ++1 24 +fi=(222) +-37 16 +fe=(379) ++41 16 +-48 25 +-4 141 ++58 188 ++4 282 +-4 141 ++12 94 ++1 94 +cfi=(134) +cfn=(7242) +calls=47 -28 +* 1674 ++2 188 ++1 376 + +fl=(133) /build/glibc-sMfBJT/glibc-2.31/nptl/libc_pthread_init.c +fn=(404) __libc_pthread_init +43 2 ++5 1 +-5 1 ++5 1 +-3 1 ++3 3 +cfi=(134) +cfn=(406) +calls=1 -9 +* 41 ++19 3 ++3 3 ++1 1 +-4 3 ++3 123 ++1 41 +-4 123 ++12 2 +-6 1 ++6 1 + +fl=(319) /build/glibc-sMfBJT/glibc-2.31/iconv/gconv_builtin.c +fn=(3982) __gconv_get_builtin_trans +63 8 ++4 4 +-4 4 ++4 302 ++5 4 ++2 4 +-2 12 ++7 4 +-5 4 ++5 4 +-3 4 ++3 4 ++1 4 ++5 4 +-13 4 ++7 4 ++2 4 ++1 4 +-3 8 ++2 4 +-2 16 ++6 4 +-19 8 + +fl=(347) /build/glibc-sMfBJT/glibc-2.31/elf/dl-iteratephdr.c +fn=(5234) dl_iterate_phdr +34 63 ++6 7 +-6 7 ++6 7 +-6 21 ++6 7 +cob=(5) +cfi=(180) +cfn=(714) +calls=7 +24 +* 245 ++9 7 +-4 7 ++3 7 ++1 21 ++14 73 ++2 45 ++1 15 ++5 15 +-5 15 ++1 30 ++1 30 ++1 30 ++1 30 ++2 30 ++1 30 ++1 4 +cob=(1) +cfi=(34) +cfn=(5274) +calls=2 845 +* 28 +* 2 ++1 10 +cob=(46) +cfi=(219) +cfn=(5236) +calls=2 -75 +* 814 +* 65 +cob=(46) +cfi=(219) +cfn=(5236) +calls=13 -75 +* 5494 ++1 37 ++6 14 +cob=(5) +cfi=(182) +cfn=(724) +calls=7 356 +* 217 ++3 84 +-39 14 + +fl=(169) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strlen-avx2.S +fn=(662) __strlen_avx2 +42 2939 ++13 2939 ++1 2939 ++1 2939 ++3 2939 ++1 2939 ++1 2939 ++3 1926 ++1 1926 ++1 1926 ++8 1926 ++4 38 ++1 38 ++1 38 ++9 38 ++4 1013 ++1 1013 ++1 1013 ++1 1013 ++2 1013 ++1 1013 ++1 1013 ++1 687 ++6 687 ++1 687 ++1 687 ++4 687 ++1 687 ++16 326 ++10 326 ++1 326 ++1 326 ++1 326 +-3 38 ++1 38 ++1 38 ++1 38 ++2 35 ++1 35 ++1 35 ++1 35 ++2 18 ++1 18 ++1 18 ++1 18 ++2 16 ++1 16 ++1 16 ++1 16 ++2 16 ++8 16 ++1 16 ++1 32 ++10 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++2 16 ++1 16 ++1 16 ++1 16 +335 2217 ++1 2217 ++1 2217 ++4 2217 ++1 2217 ++4 17 ++1 17 ++1 17 ++1 17 ++4 17 ++1 17 ++4 2 ++1 2 ++1 2 ++1 2 ++4 2 ++1 2 ++4 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++2 16 ++1 16 ++1 16 ++1 16 ++4 16 ++1 16 + +fn=(4008) __strnlen_avx2 +42 16 ++3 16 ++1 16 ++7 16 ++2 16 ++1 16 ++1 16 ++3 16 ++1 16 ++1 16 ++3 16 ++1 16 ++1 16 ++3 16 +261 16 ++2 16 ++1 16 ++1 16 ++1 16 ++4 16 ++1 16 + +fl=(176) /build/glibc-sMfBJT/glibc-2.31/malloc/malloc.c +fn=(1204) free +3087 8102 ++5 8102 ++1 8102 ++6 8102 ++5 4045 +-2 4045 ++2 8090 ++18 12123 ++2 12123 ++1 4041 ++1 4041 +-1 4041 +cfn=(1206) _int_free +calls=4041 4155 +* 329067 +-17 12 ++2 12 ++8 4 ++8 4 +-8 4 +cfn=(4984) munmap_chunk +calls=4 2809 +* 156 ++8 12 +-15 8 ++2 2 ++1 2 +-1 2 ++1 2 ++1 4 + +fn=(1206) +4155 44451 ++10 12123 ++6 20205 ++1 8082 ++4 16164 ++8 20205 +-1 8082 ++1 8082 ++3 3999 ++6 7998 ++13 19995 ++14 5080 ++11 7340 ++2 5505 +1875 5505 +4254 1835 ++1 1835 ++4 5505 ++2 5505 ++4 3670 ++2 1835 ++1 1835 ++18 7304 +4428 44451 +4295 1410 ++3 705 ++3 2115 ++7 705 +-4 705 ++4 1410 ++3 1410 ++5 2115 ++3 1410 ++1 1410 ++1 1410 +1875 2115 +4327 1410 ++1 167 ++2 167 +-1 167 ++2 668 ++2 334 +cfn=(3220) unlink_chunk.isra.0 +calls=167 1451 +* 3223 ++3 1410 ++5 1396 ++4 557 ++9 557 +-1 557 ++2 1114 +-1 141 +-1 141 ++2 282 ++2 2792 ++2 1396 ++5 698 ++1 698 ++2 2094 ++1 698 ++30 1410 ++20 2115 +2924 3002 ++4 1501 +-2 3002 ++1 1501 ++1 1501 +4209 1501 +4361 303 ++38 21 ++3 21 +-23 7 ++1 21 ++1 14 +-39 141 ++1 141 +-1 141 +cfn=(3220) +calls=141 1451 +* 2618 ++1 141 +-30 2115 +-2 1410 ++89 2 +cfn=(1812) malloc_consolidate +calls=1 +41 +* 2224 +* 1 ++4 35 + +fn=(4984) +2809 4 ++2 4 +-1 4 ++1 4 +-1 4 ++1 4 ++2 8 ++4 8 ++4 8 ++7 4 +-8 4 ++9 4 +-8 4 ++1 4 ++6 12 ++1 16 ++3 4 ++1 12 ++5 4 ++1 4 +-1 4 +cfi=(339) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/syscall-template.S +cfn=(4986) munmap +calls=4 78 +* 24 +-21 8 + +fn=(948) calloc +3366 1262 ++10 631 +-10 2524 ++10 5048 ++8 1262 ++1 1262 ++9 1893 ++2 1893 ++10 631 ++1 1893 ++21 1893 +cfn=(738) _int_malloc +calls=631 1208 +* 88002 +* 631 ++2 3155 ++3 1893 ++14 1262 ++6 2524 ++52 4417 +-44 631 ++3 1262 ++11 631 ++2 1262 ++2 1262 ++5 21 ++2 21 +-2 21 ++3 42 ++2 21 ++2 42 +-61 3155 ++20 631 ++14 3140 ++16 1830 +cob=(2) +cfi=(18) +cfn=(950) 0x0000000004c6d560 +calls=610 0 +* 19560 +* 1220 + +fn=(3220) +1451 362 ++2 1810 ++3 362 ++1 362 ++2 1448 ++3 362 ++1 362 ++1 1009 ++2 70 ++1 105 ++3 70 ++14 35 ++1 70 ++3 724 + +fn=(738) +1208 4214 +3513 2107 +1210 2107 +3513 16856 +1210 4214 +3553 30 ++24 30 ++61 2032 ++2 2032 +-2 2032 ++2 4064 ++2 69 ++1 138 ++6 69 +-4 69 ++1 69 ++1 69 ++2 138 ++7 276 +-1 138 ++1 207 ++5 1833 ++1 952 ++4 473 ++1 473 ++1 946 +2926 473 +3670 473 +2920 473 ++8 473 +3671 473 +2924 473 ++2 473 +-6 473 ++9 473 +-1 473 ++1 473 +1210 4184 +3553 4184 +1637 4184 +3577 4184 ++58 1604 ++62 1726 ++1 153 ++1 20 +cfn=(1812) +calls=10 4441 +* 21431 +* 10 +3577 30 +1210 30 +3582 30 ++2 30 +-2 2580 ++2 2580 +-4 24 ++6 96 ++1 24 ++5 48 ++1 48 ++7 96 +-1 48 ++1 48 ++5 120 ++4 135 +2924 135 +-4 270 ++6 540 +-6 135 ++8 540 +3605 405 ++1 423 ++2 540 +-19 6096 +1868 93 +3678 93 +1868 186 +4147 26759 +3637 5889 ++3 21593 ++77 1963 ++1 1963 +-1 3926 +-1 3926 ++2 3926 +-1 51 ++1 51 +-1 102 +-1 102 ++2 102 +-2 6039 ++6 4026 ++73 6039 +-67 6039 +-6 2 ++73 3 +-67 3 +3892 250 +-91 250 ++91 500 +-91 250 +-74 250 ++74 500 +-42 1500 +-28 500 ++1 250 ++2 500 +-3 1244 ++1 622 ++2 1244 ++1 2616 ++2 872 ++1 3488 ++2 3488 +-10 872 ++12 1744 ++1 1744 ++2 1744 ++11 2184 ++31 669 ++1 669 ++4 1338 ++29 1330 ++2 1258 ++1 1887 ++1 629 +-1 629 ++57 629 ++2 1258 +-2 1258 ++2 629 ++7 629 +-9 1887 ++9 629 +-7 629 ++1 629 ++1 629 ++6 1258 +-10 36 ++2 72 +-2 72 ++2 36 ++7 36 +-9 108 ++9 36 +-7 36 ++1 36 ++1 36 ++6 72 +3728 8 ++66 4 ++1 4 +-1 4 ++1 8 ++5 12 ++1 20 ++28 305 ++1 108 ++1 36 +-1 36 ++4 72 ++66 1995 +3728 1995 +3917 3614 ++2 153 ++3 51 +-3 51 ++3 102 ++68 3614 ++1 1807 ++1 1807 +-1 1807 ++1 1807 ++1 3614 ++1 5421 ++5 3778 ++16 396 ++2 792 +-4 940 ++8 74 ++3 148 ++2 39 ++1 39 ++1 39 +-2 156 +-27 39 +2926 4 ++2 4 +-4 4 ++2 8 +3805 4 +2927 4 ++1 4 +3805 4 +3697 20 +3878 180 +3757 440 ++1 416 ++5 609 +-1 203 ++1 406 ++1 406 +-1 203 ++2 203 ++1 609 ++1 406 ++2 364 ++4 182 ++6 182 +-6 1274 ++2 546 ++1 182 +1868 546 +3773 21 ++6 21 +-6 147 ++2 63 ++1 21 +1868 63 +4003 5409 ++3 7124 +-3 5277 ++3 6972 +-3 3472 ++3 5019 ++97 1772 ++1 3544 ++2 3544 ++3 5323 ++17 21 +-93 105 ++3 70 ++2 35 ++3 70 +-3 35 ++3 70 +cfn=(3220) +calls=35 1451 +* 968 ++3 140 ++15 34 +-5 34 ++6 68 ++3 136 ++1 34 ++1 34 ++3 68 ++1 19 ++1 68 ++2 44 ++3 176 ++2 66 ++1 22 +1868 22 +4081 22 +1868 44 +4075 96 ++2 36 ++1 12 +1868 12 +4081 12 +1868 25 +4081 1 +1868 2 +4006 29 ++2 116 ++1 58 +-1 8 ++1 4 ++38 1 +-1 1 ++1 2 +-41 4 +4114 1765 +-3 1765 ++1 3530 ++2 1765 +-1 1765 ++1 1765 ++2 1765 ++3 1765 +-5 8825 ++2 1765 +1868 5299 +2936 12 ++1 8 ++1 4 ++1 4 +3908 4 +4141 28 +cfn=(740) sysmalloc +calls=7 2255 +* 908 +* 7 ++1 14 +1868 21 + +fn=(1812) +4441 11 ++17 11 +-17 33 ++28 11 +-28 44 ++15 11 ++2 11 ++13 22 ++1 22 +-1 198 ++1 198 ++58 330 ++1 88 +-31 1264 ++4 632 ++2 632 ++1 632 ++1 632 ++2 1264 ++5 632 ++2 632 +-2 632 ++2 632 +-2 632 ++2 632 ++1 632 ++9 1890 +-52 1878 ++1 2504 +-1 18 ++1 24 ++8 632 +-3 632 ++3 632 ++1 632 ++1 1264 ++2 1264 ++1 19 ++2 19 +-1 19 ++2 76 ++2 57 +cfn=(3220) +calls=19 1451 +* 342 +* 19 ++3 1264 + +fn=(704) malloc +3023 3458 ++8 3458 +-8 13832 ++8 3458 ++1 6916 +1208 6914 ++2 13828 +3044 13828 ++3 6914 ++9 4422 ++2 4422 +cfn=(738) +calls=1474 1208 +* 283316 +* 1474 ++1 10310 ++23 17285 +1210 13064 +3048 3421 ++1 10263 +2936 1983 ++2 1983 +-2 1983 ++1 3966 ++1 1983 ++1 1983 +3051 1983 +-18 1 ++49 3 +-49 1 +cfi=(177) /build/glibc-sMfBJT/glibc-2.31/malloc/hooks.c +cfn=(706) malloc_hook_ini +calls=1 29 +* 76495 + +fn=(734) tcache_init.part.0 +2981 1 +-9 1 ++9 6 +fi=(183) /build/glibc-sMfBJT/glibc-2.31/malloc/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +47 2 +fe=(176) +2982 3 +cfn=(738) +calls=1 1208 +* 362 +* 1 ++1 2 ++8 4 ++7 2 ++2 1 ++1 2 +-1 1 ++1 86 ++3 2 + +fn=(740) +2255 56 ++20 14 ++11 14 ++1 27 +fi=(178) /build/glibc-sMfBJT/glibc-2.31/malloc/arena.c +536 9 +fe=(176) +2302 12 ++66 3 ++1 9 ++1 3 ++9 22 ++6 9 ++3 9 +2705 6 ++1 3 ++5 6 ++3 6 ++2 6 ++1 3 +-1 3 ++2 9 ++1 3 ++1 3 ++2 3 +-3 6 ++1 3 ++8 63 +2288 12 ++14 16 ++6 8 ++19 12 ++16 4 +-1 4 ++1 8 ++5 12 ++1 20 ++3 12 ++1 20 ++96 27 ++11 3 ++8 9 ++2 15 +cfi=(184) /build/glibc-sMfBJT/glibc-2.31/malloc/morecore.c +cfn=(742) __default_morecore +calls=3 46 +* 158 +* 3 ++1 3 ++3 12 ++3 6 ++1 6 ++46 20 ++2 2 ++6 4 +-6 1 ++6 6 ++1 10 +-8 2 +2661 1 +-1 1 ++1 3 ++1 1 ++11 2 +2535 4 ++40 3 ++22 1 ++1 1 +-1 1 ++1 5 ++2 2 ++1 2 +cfi=(184) +cfn=(742) +calls=1 46 +* 27 ++12 2 ++8 2 ++1 9 +2310 28 +cfi=(305) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/mmap64.c +cfn=(3852) mmap +calls=4 48 +* 80 ++2 8 + +fl=(326) /build/glibc-sMfBJT/glibc-2.31/locale/freelocale.c +fn=(4200) freelocale +33 33 ++4 99 ++4 33 +-8 66 ++8 231 +cob=(5) +cfi=(173) +cfn=(690) +calls=33 -17 +* 1337 ++3 1188 ++5 264 +cob=(5) +cfi=(187) +cfn=(748) +calls=33 -18 +* 1320 ++3 33 ++1 33 +-1 33 +cob=(2) +cfi=(18) +cfn=(3526) +calls=33 -52 +* 5981 + +fl=(87) +fn=(270) +43 1 +-6 5 ++6 1 + +fl=(345) /build/glibc-sMfBJT/glibc-2.31/misc/tsearch.c +fn=(5144) tfind +373 6 ++4 2 ++6 6 ++12 1 +-17 1 ++17 6 + +fl=(282) /build/glibc-sMfBJT/glibc-2.31/libio/filedoalloc.c +fn=(3564) _IO_file_doallocate +78 63 ++6 28 +fi=(283) /build/glibc-sMfBJT/glibc-2.31/libio/libioP.h +941 21 ++2 14 ++1 14 +fe=(282) +84 21 +cfi=(276) +cfn=(3566) _IO_file_stat +calls=7 1147 +* 112 +* 14 ++2 28 ++11 28 ++4 14 +cob=(2) +cfi=(18) +cfn=(700) +calls=7 0 +* 10342 +* 7 ++1 14 ++2 28 +cfi=(275) +cfn=(3568) _IO_setb +calls=7 329 +* 175 ++1 7 ++1 56 + +fl=(330) /build/glibc-sMfBJT/glibc-2.31/signal/sigempty.c +fn=(4844) sigemptyset +25 4 ++1 4 ++6 48 ++3 2 + +fl=(84) +fn=(264) +49 1 +-9 3 +-2 1 ++2 1 +-2 2 ++11 1 + +fl=(172) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strchr-avx2.S +fn=(688) __strchr_avx2 +44 379 ++1 379 ++2 379 ++1 379 ++1 379 ++2 379 ++1 379 ++1 379 ++4 326 ++1 326 ++1 326 ++1 326 ++1 326 ++1 326 ++1 326 ++3 4 ++1 4 ++1 4 ++2 4 ++4 53 ++1 53 ++1 53 ++1 53 ++1 53 ++1 53 ++1 53 ++2 53 ++1 53 ++1 53 ++2 42 ++1 42 ++4 42 ++1 42 ++1 42 ++1 42 ++2 42 ++1 42 ++4 11 ++5 11 ++1 11 ++1 11 ++1 11 ++1 11 ++1 11 ++1 11 +-6 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++1 4 ++72 337 ++4 337 ++1 337 ++1 337 ++1 337 ++2 337 ++1 337 + +fn=(3844) __strchrnul_avx2 +44 13 ++1 13 ++2 13 ++1 13 ++1 13 ++2 13 ++1 13 ++1 13 ++4 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++11 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++17 1 ++5 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++72 13 ++2 13 ++7 13 ++1 13 + +fl=(179) /build/glibc-sMfBJT/glibc-2.31/elf/dl-addr.c +fn=(712) _dl_addr +126 7 ++2 1 +-2 4 ++5 1 +-5 1 ++5 2 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 -67 +* 35 ++2 2 +cob=(2) +cfi=(18) +cfn=(716) 0x0000000004c6d510 +calls=1 0 +* 1619 ++2 2 +30 4 ++4 2 ++5 1 ++6 1 +-7 1 ++2 2 ++2 1 +-2 1 ++2 2 ++3 2 ++4 5 +-5 4 ++5 4043 ++2 1010 ++1 2020 +-1 1 ++1 2 ++2 2757 ++10 9308 ++1 14980 ++5 7074 +-10 7074 ++1 14148 ++2 7043 ++37 2 ++1 1 ++1 3 ++3 2 ++36 2 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +* 31 ++3 9 +-79 2016 ++52 1 ++21 1 +-21 2 + +fl=(253) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/close_nocancel.c +fn=(2826) __close_nocancel +25 12 ++1 48 ++1 12 + +fl=(89) +fn=(274) +49 21 +-9 63 +-2 21 ++2 21 +-2 42 ++11 21 + +fl=(291) /build/glibc-sMfBJT/glibc-2.31/malloc/alloc_buffer_alloc_array.c +fn=(3600) __libc_alloc_buffer_alloc_array +25 6 ++1 6 ++4 6 +-2 18 ++2 36 ++1 6 ++1 6 ++2 36 ++4 6 +-3 18 ++10 6 + +fl=(125) +fn=(354) +29 5 +fi=(388) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-strcpy.h ++7 15 +-2 5 ++2 5 +-2 10 +fe=(125) +-5 5 + +fl=(235) /build/glibc-sMfBJT/glibc-2.31/iconv/gconv_simple.c +fn=(2312) __gconv_btwoc_ascii +50 384 ++2 1536 ++3 384 + +fl=(322) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/mbsrtowcs_l.c +fn=(4002) __mbsrtowcs_l +42 128 ++15 16 +-15 96 +fi=(323) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/wcsmbsload.h ++28 16 +fe=(322) +-18 16 ++1 16 ++1 16 +fi=(323) ++16 32 +fe=(322) +-10 16 ++3 16 +-2 16 ++2 16 ++5 48 ++4 16 +-4 16 ++39 64 ++1 32 ++4 64 ++11 32 ++2 32 +-9 32 +cob=(2) +cfi=(18) +cfn=(4006) 0x0000000004c6d350 +calls=16 0 +* 368 ++2 16 +-2 16 ++2 16 +cfi=(234) +cfn=(2310) +calls=16 -81 +* 96 +* 144 +cfi=(324) /build/glibc-sMfBJT/glibc-2.31/iconv/../iconv/skeleton.c +cfn=(4010) __gconv_transform_utf8_internal +calls=16 399 +* 2032 ++2 96 ++12 16 ++2 48 +-2 16 ++2 16 ++4 32 ++1 48 ++2 32 ++1 64 ++1 16 ++1 112 ++6 32 ++5 80 ++8 192 +fi=(323) +-91 1 ++1 1 +-1 2 ++2 3 +cfi=(312) +cfn=(3962) +calls=1 +79 +* 2234 +* 2 ++2 1 +fe=(322) + +fl=(72) +fn=(238) +29 25 +fi=(73) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-memcmp.h ++3 25 ++1 75 +-1 50 ++2 75 ++1 50 +fe=(72) +-6 25 + +fl=(321) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/mbsrtowcs.c +fn=(4000) mbsrtowcs +28 16 ++1 96 +cfi=(322) +cfn=(4002) +calls=16 +13 +* 6468 + +fl=(353) /build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/clock_nanosleep.c +fn=(5966) clock_nanosleep@@GLIBC_2.17 +62 17496 ++3 9720 ++2 7776 ++11 17496 ++2 3888 ++37 9720 ++2 17496 + +fl=(337) /build/glibc-sMfBJT/glibc-2.31/libio/iosetvbuf.c +fn=(4896) setvbuf +35 9 ++3 1 +-3 1 ++3 8 +fi=(278) /build/glibc-sMfBJT/glibc-2.31/libio/../sysdeps/unix/sysv/linux/x86/lowlevellock.h ++9 1 +fe=(337) +-9 2 +fi=(278) ++9 1 +fe=(337) +-9 4 ++1 2 +fi=(283) +884 2 ++1 10 +fe=(337) +95 7 +-23 1 ++1 2 ++1 2 ++2 2 + +fl=(372) /build/glibc-sMfBJT/glibc-2.31/libio/iofread.c +fn=(6362) fread +31 30 ++1 6 +-1 6 ++1 6 +-1 12 ++4 18 ++2 78 +fi=(278) ++10 12 +fe=(372) +-10 18 ++1 24 +cfi=(275) +cfn=(3558) _IO_sgetn +calls=6 409 +* 10476 +* 6 +fi=(283) +884 12 ++1 60 +fe=(372) +40 12 ++1 54 +-1 12 + +fl=(269) /build/glibc-sMfBJT/glibc-2.31/time/gmtime.c +fn=(3518) gmtime_r +25 4622 ++1 4622 +-1 4622 ++1 9244 +cfi=(270) /build/glibc-sMfBJT/glibc-2.31/time/tzset.c +cfn=(3520) __tz_convert +calls=4622 568 +* 1648778 + +fl=(66) +fn=(224) +29 6 +fi=(388) ++7 18 +-2 6 ++2 6 +-2 12 +fe=(66) +-5 6 + +fl=(354) /build/glibc-sMfBJT/glibc-2.31/libio/setbuf.c +fn=(6052) setbuf +32 1 ++1 2 +cfi=(355) /build/glibc-sMfBJT/glibc-2.31/libio/iosetbuffer.c +cfn=(6054) setbuffer +calls=1 -2 +* 238 + +fl=(62) +fn=(216) +29 25 +fi=(63) ++16 75 +-1 50 ++5 50 +-1 50 ++12 50 ++2 125 +fe=(62) + +fl=(375) /build/glibc-sMfBJT/glibc-2.31/stdlib/exit.c +fn=(6558) __run_exit_handlers +40 11 ++5 3 ++11 3 +fi=(222) +-9 1 +fe=(375) ++9 17 +fi=(222) +-9 15 +fe=(375) ++9 30 +fi=(222) +-9 16 +fe=(375) ++12 16 ++2 33 ++16 16 ++35 469 +fi=(222) +-65 469 +fe=(375) ++65 938 +fi=(222) +-65 469 +fe=(375) ++67 938 +-44 1452 ++2 469 ++1 469 +-1 469 ++4 1876 ++1 3752 ++29 461 ++2 461 +-5 461 ++5 461 +-2 922 ++2 461 +cob=(1) +cfi=(378) +cfn=(7228) +calls=1 -78 +* 206533 +cob=(50) +cfi=(225) +cfn=(7192) boost::exception_ptr::~exception_ptr() +calls=4 0 +* 652 +cob=(50) +cfi=(225) +cfn=(7082) CClientUIInterface::~CClientUIInterface() +calls=1 0 +* 16252 +cob=(50) +cfi=(225) +cfn=(7078) SupplyCache::~SupplyCache() +calls=1 0 +* 66 +cob=(50) +cfi=(225) +cfn=(7076) boost::scoped_ptr::~scoped_ptr() +calls=1 0 +* 15 +cob=(50) +cfi=(225) +cfn=(7074) boost::unordered::unordered_map, std::allocator > >::~unordered_map() +calls=1 0 +* 20 +cob=(50) +cfi=(225) +cfn=(7072) std::map, std::allocator > >::~map() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(7068) std::set, std::less >, std::allocator > >::~set() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(7064) std::map, std::allocator > >::~map() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(7062) CChain::~CChain() +calls=1 0 +* 13 +cob=(50) +cfi=(225) +cfn=(7060) AnnotatedMixin::~AnnotatedMixin() +calls=1 0 +* 33 +cob=(50) +cfi=(225) +cfn=(7052) CTxMemPool::~CTxMemPool() +calls=1 0 +* 8641 +cob=(50) +cfi=(225) +cfn=(7050) std::map, std::allocator > >::~map() +calls=1 0 +* 33 +cob=(50) +cfi=(225) +cfn=(7048) std::map, std::allocator >, std::less, std::allocator, std::allocator > > > >::~map() +calls=1 0 +* 29 +cob=(50) +cfi=(225) +cfn=(7046) CScript::~CScript() +calls=1 0 +* 13 +cob=(50) +cfi=(225) +cfn=(7042) std::set >::~set() +calls=1 0 +* 26 +cob=(50) +cfi=(225) +cfn=(7038) std::multimap, std::allocator > >::~multimap() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(7036) std::vector >::~vector() +calls=1 0 +* 13 +cob=(50) +cfi=(225) +cfn=(7032) std::map >, std::less, std::allocator > > > >::~map() +calls=1 0 +* 26 +cob=(50) +cfi=(225) +cfn=(7028) std::set, std::allocator >::~set() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(7024) std::set, std::allocator >::~set() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(7020) std::map, std::allocator > >::~map() +calls=1 0 +* 32 +cob=(50) +cfi=(225) +cfn=(7016) std::map, std::allocator > >::~map() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(7012) std::map, std::allocator > >::~map() +calls=1 0 +* 29 +cob=(50) +cfi=(225) +cfn=(7010) CCheckQueue::~CCheckQueue() +calls=1 0 +* 149 +cob=(50) +cfi=(225) +cfn=(7004) CMainCleanup::~CMainCleanup() +calls=1 0 +* 72 +cob=(50) +cfi=(225) +cfn=(7000) std::map, std::allocator > >::~map() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(6998) std::vector<(anonymous namespace)::ListenSocket, std::allocator<(anonymous namespace)::ListenSocket> >::~vector() +calls=1 0 +* 13 +cob=(50) +cfi=(225) +cfn=(6992) CAddrMan::~CAddrMan() +calls=1 0 +* 120 +cob=(50) +cfi=(225) +cfn=(6990) std::vector >::~vector() +calls=1 0 +* 13 +cob=(50) +cfi=(225) +cfn=(6986) std::map, std::allocator > >::~map() +calls=1 0 +* 31 +cob=(50) +cfi=(225) +cfn=(6984) std::deque, std::allocator > >::~deque() +calls=1 0 +* 226 +cob=(50) +cfi=(225) +cfn=(6978) limitedmap::~limitedmap() +calls=1 0 +* 50 +cob=(50) +cfi=(225) +cfn=(6976) std::deque, std::allocator >, std::allocator, std::allocator > > >::~deque() +calls=1 0 +* 245 +cob=(50) +cfi=(225) +cfn=(6972) std::set, std::allocator >::~set() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(6082) std::vector, std::allocator >, std::allocator, std::allocator > > >::~vector() +calls=1 0 +* 22 +cob=(50) +cfi=(225) +cfn=(6970) boost::condition_variable::~condition_variable() +calls=2 0 +* 130 +cob=(50) +cfi=(225) +cfn=(6904) CNodeSignals::~CNodeSignals() +calls=1 0 +* 7312 +cob=(50) +cfi=(225) +cfn=(6900) std::map, std::allocator > >::~map() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(6898) std::__cxx11::list >::~list() +calls=1 0 +* 17 +cob=(50) +cfi=(225) +cfn=(6896) CNetCleanup::~CNetCleanup() +calls=1 0 +* 44 +cob=(50) +cfi=(225) +cfn=(6894) std::vector >::~vector() +calls=1 0 +* 13 +cob=(50) +cfi=(225) +cfn=(6892) std::map, std::allocator >, boost::shared_ptr, std::less, std::allocator > >, std::allocator, std::allocator > const, boost::shared_ptr > > >::~map() +calls=1 0 +* 31 +cob=(50) +cfi=(225) +cfn=(6878) CRPCSignals::~CRPCSignals() +calls=1 0 +* 5852 +cob=(50) +cfi=(225) +cfn=(6876) __tcf_0 +calls=1 0 +* 6604 +cob=(50) +cfi=(225) +cfn=(6872) CRPCTable::~CRPCTable() +calls=1 0 +* 23483 +cob=(50) +cfi=(225) +cfn=(6760) CMainSignals::~CMainSignals() +calls=1 0 +* 13153 +cob=(50) +cfi=(225) +cfn=(6756) std::map, std::allocator > >::~map() +calls=1 0 +* 29 +cob=(50) +cfi=(225) +cfn=(6754) std::vector >::~vector() +calls=2 0 +* 26 +cob=(50) +cfi=(225) +cfn=(6752) std::vector >::~vector() +calls=1 0 +* 22 +cob=(50) +cfi=(225) +cfn=(6750) std::vector >::~vector() +calls=1 0 +* 13 +cob=(50) +cfi=(225) +cfn=(6746) boost::thread::~thread() +calls=2 0 +* 70 +cob=(50) +cfi=(225) +cfn=(6742) std::map, std::allocator > >::~map() +calls=1 0 +* 29 +cob=(50) +cfi=(225) +cfn=(6740) std::__cxx11::list >::~list() +calls=1 0 +* 17 +cob=(50) +cfi=(225) +cfn=(6736) std::map, std::allocator > >, std::less, std::allocator, std::allocator > > > > >::~map() +calls=1 0 +* 29 +cob=(50) +cfi=(225) +cfn=(6732) std::map, std::allocator > >::~map() +calls=3 0 +* 1933 +cob=(50) +cfi=(225) +cfn=(6730) CMainParams::~CMainParams() +calls=1 0 +* 3803 +cob=(50) +cfi=(225) +cfn=(6728) CTestNetParams::~CTestNetParams() +calls=1 0 +* 2490 +cob=(50) +cfi=(225) +cfn=(6726) CRegTestParams::~CRegTestParams() +calls=1 0 +* 2334 +cob=(50) +cfi=(225) +cfn=(6724) CUnitTestParams::~CUnitTestParams() +calls=1 0 +* 2270 +cob=(50) +cfi=(225) +cfn=(6720) std::set, std::allocator >::~set() +calls=1 0 +* 29 +cob=(50) +cfi=(225) +cfn=(6716) std::set, std::allocator >::~set() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(6714) CSporkManager::~CSporkManager() +calls=1 0 +* 20 +cob=(50) +cfi=(225) +cfn=(6710) std::map, std::allocator > >::~map() +calls=1 0 +* 29 +cob=(50) +cfi=(225) +cfn=(6706) std::map, std::allocator > >::~map() +calls=1 0 +* 29 +cob=(50) +cfi=(225) +cfn=(6704) UniValue::~UniValue() +calls=1 0 +* 33 +cob=(50) +cfi=(225) +cfn=(6702) CBaseMainParams::~CBaseMainParams() +calls=1 0 +* 14 +cob=(50) +cfi=(225) +cfn=(6700) CBaseTestNetParams::~CBaseTestNetParams() +calls=1 0 +* 14 +cob=(50) +cfi=(225) +cfn=(6698) CBaseRegTestParams::~CBaseRegTestParams() +calls=1 0 +* 14 +cob=(50) +cfi=(225) +cfn=(6696) CBaseUnitTestParams::~CBaseUnitTestParams() +calls=1 0 +* 14 +cob=(50) +cfi=(225) +cfn=(6694) std::vector >::~vector() +calls=1 0 +* 13 +cob=(50) +cfi=(225) +cfn=(6692) std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::~map() +calls=1 0 +* 1187 +cob=(50) +cfi=(225) +cfn=(6690) std::map, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::~map() +calls=1 0 +* 2434 +cob=(50) +cfi=(225) +cfn=(6682) CInit::~CInit() +calls=1 0 +* 6827 +cob=(50) +cfi=(225) +cfn=(6680) CObfuscationPool::~CObfuscationPool() +calls=1 0 +* 183 +cob=(50) +cfi=(225) +cfn=(6678) std::vector >::~vector() +calls=1 0 +* 22 +cob=(50) +cfi=(225) +cfn=(3502) std::vector >::~vector() +calls=1 0 +* 22 +cob=(50) +cfi=(225) +cfn=(6674) std::map, std::allocator > >::~map() +calls=1 0 +* 33 +cob=(50) +cfi=(225) +cfn=(6672) CActiveGridnode::~CActiveGridnode() +calls=1 0 +* 42 +cob=(50) +cfi=(225) +cfn=(6634) CDBEnv::~CDBEnv() +calls=1 0 +* 926 +cob=(50) +cfi=(225) +cfn=(6630) std::map, std::allocator > >::~map() +calls=2 0 +* 66 +cob=(50) +cfi=(225) +cfn=(6626) std::map, std::allocator > >::~map() +calls=1 0 +* 29 +cob=(50) +cfi=(225) +cfn=(6622) std::map, std::allocator > >::~map() +calls=1 0 +* 33 +cob=(50) +cfi=(225) +cfn=(6618) std::map, std::allocator > >::~map() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(6614) std::map, std::allocator > >::~map() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(6612) CBudgetManager::~CBudgetManager() +calls=1 0 +* 237 +cob=(50) +cfi=(225) +cfn=(6608) std::map, std::allocator > >::~map() +calls=4 0 +* 108 +cob=(50) +cfi=(225) +cfn=(6606) std::vector >::~vector() +calls=1 0 +* 22 +cob=(50) +cfi=(225) +cfn=(6604) std::vector >::~vector() +calls=1 0 +* 26 +cob=(50) +cfi=(225) +cfn=(6602) CGridnodePayments::~CGridnodePayments() +calls=1 0 +* 77 +cob=(50) +cfi=(225) +cfn=(6600) CGridnodeSync::~CGridnodeSync() +calls=1 0 +* 69 +cob=(50) +cfi=(225) +cfn=(6598) CGridnodeConfig::~CGridnodeConfig() +calls=1 0 +* 22 +cob=(50) +cfi=(225) +cfn=(6458) CGridnodeMan::~CGridnodeMan() +calls=1 0 +* 165 +cob=(50) +cfi=(225) +cfn=(6594) std::map, std::allocator > >::~map() +calls=1 0 +* 160 +cob=(50) +cfi=(225) +cfn=(6592) std::map, std::allocator > >::~map() +calls=11 0 +* 297 +cob=(50) +cfi=(225) +cfn=(6588) std::map, std::allocator > >::~map() +calls=1 0 +* 27 +cob=(50) +cfi=(225) +cfn=(6586) std::vector >::~vector() +calls=95 0 +* 11400 +cob=(50) +cfi=(225) +cfn=(6584) std::vector >::~vector() +calls=95 0 +* 11400 +cob=(50) +cfi=(225) +cfn=(6582) boost::filesystem::directory_iterator::~directory_iterator() +calls=1 0 +* 7 +cob=(47) +cfi=(220) +cfn=(6580) std::__cxx11::basic_string, std::allocator >::~basic_string() +calls=20 0 +* 665 +cob=(50) +cfi=(225) +cfn=(6576) boost::program_options::detail::utf8_codecvt_facet::~utf8_codecvt_facet() +calls=1 0 +* 61 +cob=(47) +cfi=(220) +cfn=(6574) std::ios_base::Init::~Init() +calls=98 0 +* 3999 +cob=(47) +cfi=(220) +cfn=(2590) std::locale::~locale() +calls=1 0 +* 19428 +cob=(50) +cfi=(225) +cfn=(6570) LockedPageManager::~LockedPageManager() +calls=1 0 +* 53 +cob=(50) +cfi=(225) +cfn=(6568) boost::filesystem::path::~path() +calls=4 0 +* 272 +cob=(50) +cfi=(225) +cfn=(6566) boost::interprocess::file_lock::~file_lock() +calls=1 0 +* 24 +cob=(50) +cfi=(225) +cfn=(6564) CCriticalSection::~CCriticalSection() +calls=26 0 +* 858 ++1 461 ++11 30 ++1 30 ++3 28 +cob=(2) +cfi=(18) +cfn=(3526) +calls=14 0 +* 1855 ++2 75 +-61 1 ++1 4 ++63 2 ++1 10 +cfi=(275) +cfn=(8430) _IO_cleanup +calls=1 863 +* 302 +* 3 ++2 2 +cfi=(382) /build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/unix/sysv/linux/_exit.c +cfn=(8442) _Exit +calls=1 27 +* 6 +-86 1 +cfi=(376) +cfn=(6560) +calls=1 +99 +* 12 +* 1 + +fn=(6556) exit +138 3 ++1 3 +-1 1 ++1 1 +cfn=(6558) +calls=1 -99 +* 382793 + +fl=(70) +fn=(232) +30 2 +fi=(389) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/ifunc-avx2.h ++2 6 +-2 12 +fe=(70) + +fl=(120) +fn=(3010) time_syscall +31 733 ++1 2932 ++1 733 + +fn=(342) +38 15 +fi=(390) /build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/dl-vdso.h ++2 30 ++1 30 +fe=(120) +-3 30 + +fl=(141) /build/glibc-sMfBJT/glibc-2.31/misc/init-misc.c +fn=(430) __init_misc +30 1 ++1 2 +-1 4 ++1 3 ++2 3 +cob=(2) +cfi=(18) +cfn=(432) 0x0000000004c6d5e0 +calls=1 -33 +* 45 ++4 5 ++1 3 ++2 4 + +fl=(226) /build/glibc-sMfBJT/glibc-2.31/csu/../csu/libc-start.c +fn=(2128) (below main) +137 11 ++4 1 +-4 3 ++4 3 ++96 2 ++1 3 +cfi=(221) /build/glibc-sMfBJT/glibc-2.31/stdlib/cxa_atexit.c +cfn=(1936) __cxa_atexit +calls=1 69 +* 72 ++22 4 ++3 2 ++1 5 +cob=(50) +cfi=(225) +cfn=(2130) __libc_csu_init +calls=1 0 +* 6408918 ++4 4 ++15 2 ++12 2 +cfi=(297) /build/glibc-sMfBJT/glibc-2.31/setjmp/../sysdeps/x86_64/bsd-_setjmp.S +cfn=(3774) _setjmp +calls=1 28 +* 34 +* 1 ++1 2 ++5 2 ++1 2 ++3 2 ++3 6 +cob=(50) +cfi=(225) +cfn=(3780) main +calls=1 0 +* 68045120 ++34 2 +cfi=(375) +cfn=(6556) +calls=1 138 +* 382801 + +fl=(185) /build/glibc-sMfBJT/glibc-2.31/misc/sbrk.c +fn=(744) sbrk +32 12 ++8 4 +-8 8 ++8 21 ++4 8 ++4 18 ++12 5 +-19 2 +cfi=(186) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/x86_64/brk.c +cfn=(746) brk +calls=1 -13 +* 11 +* 4 ++15 6 +cfi=(186) +cfn=(746) +calls=3 -28 +* 33 +* 6 ++4 15 + +fl=(265) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/poll.c +fn=(2940) poll +27 1 ++2 7 ++14 1 + +fl=(377) /build/glibc-sMfBJT/glibc-2.31/libio/iofflush.c +fn=(7214) fflush +32 6 ++1 12 +-1 24 ++7 60 +fi=(278) ++8 12 +fe=(377) +-8 18 ++1 6 +fi=(283) +941 18 ++2 12 ++1 12 +fe=(377) +40 12 +cfi=(276) +cfn=(6062) _IO_file_sync@@GLIBC_2.2.5 +calls=6 793 +* 108 +* 24 +fi=(283) +884 12 ++1 60 +fe=(377) +44 30 + +fl=(243) /build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/clock_gettime.c +fn=(2800) clock_gettime@@GLIBC_2.17 +31 4128 ++7 7568 ++35 2752 + +fl=(313) +fn=(3964) +722 64 ++6 4 +cfi=(314) /build/glibc-sMfBJT/glibc-2.31/iconv/gconv_conf.c +cfn=(3966) __gconv_load_conf +calls=4 617 +* 715 ++3 12 +fi=(317) /build/glibc-sMfBJT/glibc-2.31/iconv/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +47 8 +fe=(313) +733 24 +cfi=(315) /build/glibc-sMfBJT/glibc-2.31/iconv/gconv_cache.c +cfn=(3976) __gconv_lookup_cache +calls=4 248 +* 3172 +* 4 ++1 8 ++3 16 ++42 48 + +fl=(98) +fn=(292) +29 1 +fi=(99) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/ifunc-memcmp.h ++3 1 ++1 3 +-1 2 ++2 3 ++1 2 +fe=(98) +-6 1 + +fl=(90) +fn=(276) +29 29 +fi=(387) ++3 87 +-2 145 +fe=(90) +-1 29 + +fl=(143) /build/glibc-sMfBJT/glibc-2.31/ctype/ctype-info.c +fn=(436) __ctype_init +29 1 ++2 7 ++2 4 ++2 4 ++1 1 + +fl=(184) +fn=(742) +46 8 ++1 4 +cfi=(185) +cfn=(744) +calls=4 -15 +* 153 ++2 12 ++3 8 + +fl=(76) +fn=(246) +29 18 +fi=(77) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-memset.h ++13 90 ++4 36 +-1 36 ++12 72 ++2 90 +fe=(76) + +fl=(186) +fn=(746) +28 4 ++3 24 ++2 8 ++6 4 ++1 4 + +fl=(349) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/fcntl64.c +fn=(5950) fcntl +38 27612 ++4 23010 ++6 18408 ++3 4602 +cfi=(350) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/fcntl_nocancel.c +cfn=(5952) __fcntl64_nocancel_adjusted +calls=4602 * +* 96642 ++1 23010 + +fl=(293) /build/glibc-sMfBJT/glibc-2.31/libio/iofclose.c +fn=(3604) fclose@@GLIBC_2.2.5 +34 45 ++14 27 +fi=(283) +884 18 ++1 27 +fe=(293) +57 9 +fi=(283) +941 27 ++2 18 ++1 18 +fe=(293) +57 27 +cfi=(276) +cfn=(3618) _IO_file_finish@@GLIBC_2.2.5 +calls=9 169 +* 261 ++1 27 +fi=(283) +856 36 ++1 36 ++6 18 +cob=(2) +cfi=(18) +cfn=(3526) +calls=9 0 +* 765 +fe=(293) +76 45 +-27 9 +cfi=(275) +cfn=(3606) _IO_un_link +calls=9 +4 +* 1136 ++2 83 +fi=(278) +-4 16 +fe=(293) ++4 32 ++1 36 ++1 18 +cfi=(276) +cfn=(3612) _IO_file_close_it@@GLIBC_2.2.5 +calls=9 +76 +* 2209 +* 36 +fi=(283) +885 48 +fe=(293) +71 18 + +fl=(64) +fn=(220) +29 12 +fi=(388) ++7 36 +-2 12 ++2 12 +-2 24 +fe=(64) +-5 12 + +fl=(80) +fn=(254) +29 11 +fi=(391) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/ifunc-sse4_2.h ++1 55 +fe=(80) +-1 11 + +fl=(362) /build/glibc-sMfBJT/glibc-2.31/libio/iofwrite.c +fn=(6206) fwrite +31 35 ++1 7 +-1 7 ++1 7 +-1 14 ++4 21 ++2 91 +fi=(278) ++10 14 +fe=(362) +-10 21 ++1 24 ++1 3 +fi=(283) +941 9 ++2 6 ++1 6 +fe=(362) +39 4 +fi=(283) +941 12 ++2 8 ++1 8 +fe=(362) +39 28 +cfi=(276) +cfn=(6192) _IO_file_xsputn@@GLIBC_2.2.5 +calls=7 1198 +* 2372 +* 14 +fi=(283) +884 21 ++1 56 +fe=(362) +45 14 ++1 7 ++3 63 +-11 8 + +fl=(78) +fn=(250) +31 2 +fi=(389) ++1 6 +-2 10 +fe=(78) ++1 2 + +fl=(203) /build/glibc-sMfBJT/glibc-2.31/string/strverscmp.c +fn=(934) strverscmp +43 1 ++25 2 ++3 1 ++1 1 +-1 1 ++1 1 ++2 1 +-3 1 ++3 7 ++3 3 ++11 13 ++2 2 ++15 1 + +fl=(207) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/wordsize-64/xstat.c +fn=(1494) _xstat +33 28 ++1 14 ++1 28 ++4 6 +-4 5 + +fl=(275) +fn=(3558) +409 36 +fi=(283) +941 54 +fe=(275) +409 18 ++2 18 +fi=(283) +943 36 ++1 36 +fe=(275) +411 18 ++1 36 +-1 18 +cfi=(276) +cfn=(3560) _IO_file_xsgetn +calls=18 1273 +* 11942 + +fn=(3588) _IO_unsave_markers +960 20 ++2 10 +-2 10 ++2 10 ++5 30 ++2 20 + +fn=(8432) _IO_flush_all_lockp +686 12 ++5 11 +cob=(5) +cfi=(277) /build/glibc-sMfBJT/glibc-2.31/nptl/cleanup_defer_compat.c +cfn=(3542) _pthread_cleanup_push_defer +calls=1 25 +* 17 ++1 6 +fi=(278) +47 2 +fe=(275) +692 2 ++3 1 +-8 1 ++5 2 ++3 2 +fi=(283) +941 3 +fe=(275) +699 2 ++10 8 ++2 4 +-16 12 ++2 4 ++1 8 ++3 30 ++14 8 ++1 9 +cob=(5) +cfi=(277) +cfn=(3546) _pthread_cleanup_pop_restore +calls=1 62 +* 10 ++4 12 + +fn=(3536) _IO_old_init +531 10 ++3 10 +-2 10 ++1 10 +-1 10 ++2 20 ++16 10 +-11 10 ++5 10 ++6 10 ++5 10 +-16 60 ++16 20 ++1 20 ++2 10 + +fn=(3562) _IO_doallocbuf +343 8 ++1 16 +-1 24 ++3 35 ++1 7 +fi=(283) +941 21 ++2 14 ++1 14 +fe=(275) +347 14 +cfi=(282) +cfn=(3564) +calls=7 78 +* 10986 +* 14 +-10 1 +-5 2 ++5 1 +-5 2 ++18 32 +-1 2 +-19 1 + +fn=(3568) +329 96 ++1 32 +-1 32 ++1 46 ++5 16 +-3 16 ++3 64 +-3 32 ++2 16 ++4 64 +-7 7 +cob=(2) +cfi=(18) +cfn=(3526) +calls=7 0 +* 908 +* 14 + +fn=(3570) __underflow +269 25 ++1 19 ++5 25 ++3 10 ++2 10 ++6 10 ++7 5 +fi=(283) +941 15 ++2 10 ++1 10 +fe=(275) +293 5 ++1 5 +-1 5 ++1 10 +-1 5 +cfi=(276) +cfn=(3572) _IO_file_underflow@@GLIBC_2.2.5 +calls=5 462 +* 488 +-2 15 +-21 2 + +fn=(6188) _IO_default_xsputn +371 20 ++3 40 +-3 105 +fi=(283) +941 15 +fe=(275) +371 15 +fi=(283) +941 15 +fe=(275) +371 15 +fi=(283) +941 15 +fe=(275) +371 30 ++18 22 ++8 15 ++2 30 +-20 60 ++2 15 ++1 30 ++2 30 ++2 12 +cob=(2) +cfi=(18) +cfn=(3848) 0x0000000004c6d5a0 +calls=4 0 +* 84 ++1 4 +-1 4 ++1 8 ++17 15 +-11 15 ++11 105 +-11 77 ++1 8 +-1 8 ++1 8 +-1 8 ++1 8 +-1 12 ++1 8 +-1 8 ++2 49 ++9 5 +-11 14 ++1 14 +-1 21 ++1 10 +-1 22 + +fn=(3620) _IO_default_finish +601 27 ++2 27 ++6 27 ++3 27 +54 18 +624 18 + +fn=(6060) _IO_default_setbuf +452 4 +fi=(283) +941 2 +fe=(275) +452 4 +fi=(283) +941 2 +fe=(275) +452 2 +fi=(283) +941 2 +fe=(275) +452 8 ++1 2 +fi=(283) +943 4 ++1 4 +fe=(275) +453 4 +cfi=(276) +cfn=(6062) +calls=2 793 +* 36 +* 4 ++2 4 ++7 2 +-7 4 ++11 2 ++1 2 +-1 6 ++2 12 +-11 2 ++1 4 +-1 2 +330 6 ++2 4 ++5 2 +-5 2 ++5 2 +-5 2 ++5 2 + +fn=(3540) _IO_link_in +87 160 ++1 60 ++4 10 +-2 30 ++2 20 ++1 60 +fi=(278) +-46 20 +fe=(275) ++46 20 ++2 10 +-1 10 +-1 20 ++2 70 +fi=(278) +-48 10 +fe=(275) ++48 20 +fi=(278) +-48 10 +fe=(275) ++48 20 ++2 10 +-2 20 ++3 10 +-1 10 ++3 140 ++1 10 ++1 80 ++1 80 +cob=(5) +cfi=(277) +cfn=(3546) +calls=10 -41 +* 100 ++3 160 +-14 70 +cob=(5) +cfi=(277) +cfn=(3542) +calls=10 -67 +* 170 +* 10 + +fn=(3576) _IO_switch_to_get_mode +164 25 ++1 15 ++3 15 ++4 10 ++1 10 ++7 5 +-4 5 ++4 5 +-2 10 ++3 5 ++1 20 + +fn=(3608) __GI__IO_un_link.part.0 +52 45 ++6 9 +-6 27 ++6 81 +cob=(5) +cfi=(277) +cfn=(3542) +calls=9 -33 +* 153 ++1 54 +fi=(278) +-12 18 +fe=(275) ++12 18 ++2 9 +-1 9 +-1 9 ++2 9 +-2 9 ++2 58 +fi=(278) +-14 8 +fe=(275) ++14 16 +fi=(278) +-14 8 +fe=(275) ++14 16 ++2 16 +-2 24 ++2 16 ++2 27 ++1 9 ++8 18 ++2 114 ++1 8 ++1 24 +-1 1 ++1 48 ++1 72 +cob=(5) +cfi=(277) +cfn=(3546) +calls=9 -17 +* 90 ++3 72 +-19 3 ++13 2 + +fn=(3534) +563 100 ++1 10 +cfn=(3536) +calls=10 -33 +* 230 ++1 10 ++1 20 ++2 10 ++4 10 ++7 10 ++2 10 +-9 50 ++15 10 ++1 60 + +fn=(3606) +53 18 ++1 45 +cfn=(3608) +calls=9 -2 +* 1100 ++28 9 + +fn=(8430) +863 2 ++3 1 +-3 9 ++3 1 +cfn=(8432) +calls=1 686 +* 166 +-80 1 ++80 1 +-80 9 +cob=(5) +cfi=(277) +cfn=(3542) +calls=1 25 +* 17 ++1 6 +fi=(278) +47 2 +fe=(275) +787 2 ++3 1 +-3 2 ++3 2 +fi=(283) +941 2 +fe=(275) +807 1 +fi=(283) +941 1 +fe=(275) +807 2 ++31 4 +-48 12 ++9 12 ++2 6 ++30 2 ++11 8 ++1 8 +cob=(5) +cfi=(277) +cfn=(3546) +calls=1 62 +* 10 ++35 12 + +fl=(297) +fn=(3774) +28 1 ++2 1 ++2 1 +cfi=(298) +cfn=(3776) +calls=1 -2 +* 31 + +fl=(320) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/strlen-avx2.S +fn=(3994) __wcslen_avx2 +42 24 ++13 24 ++1 24 ++1 24 ++3 24 ++1 24 ++1 24 ++3 20 ++1 20 ++1 20 ++8 20 ++19 4 ++1 4 ++1 4 ++1 4 ++2 4 ++1 4 ++1 4 ++1 3 ++6 3 ++1 3 ++1 3 ++2 3 ++2 3 ++1 3 ++16 1 ++10 1 ++1 1 ++1 1 ++1 1 +335 21 ++1 21 ++1 21 ++2 21 ++2 21 ++1 21 + +fl=(67) +fn=(226) +28 16 +fi=(387) ++4 48 +-2 80 +fe=(67) +-2 16 + +fl=(239) /build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/unix/sysv/linux/x86/sysconf.c +fn=(2792) sysconf +32 19750 ++1 5925 +fi=(240) /build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/unix/sysv/linux/x86/../sysconf.c ++11 13813 +fe=(239) +-7 17775 +fi=(240) ++7 12 +fi=(241) /build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/posix/sysconf.c ++10 11850 +215 27 +cfi=(303) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/getpagesize.c +cfn=(3840) getpagesize +calls=27 27 +* 162 +* 54 +77 1945 +cfi=(351) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/getclktck.c +cfn=(5954) __getclktck +calls=1945 -48 +* 13615 +* 3890 +631 3 +cfi=(242) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/getsysstats.c +cfn=(2798) get_nprocs +calls=3 127 +* 660 +* 6 +fe=(239) + +fl=(301) /build/glibc-sMfBJT/glibc-2.31/string/memmem.c +fn=(3836) memmem +55 312 ++4 104 ++2 52 ++4 52 ++3 78 ++2 52 ++9 52 ++8 26 +-3 26 ++3 936 ++1 78 +-1 26 ++2 234 +-1 104 ++1 182 +-1 104 ++4 78 +-7 26 ++34 26 +-27 104 ++1 26 +-1 52 ++3 130 ++5 26 ++1 156 ++2 52 +-3 52 ++1 312 ++2 260 ++4 26 ++1 52 +-42 26 ++60 286 +-39 78 + +fl=(117) +fn=(336) +41 10 +fi=(390) +-1 20 ++1 20 +fe=(117) +* 20 + +fn=(3484) __gettimeofday_syscall +32 4623 ++1 9246 ++2 18492 ++1 4623 + +fl=(123) +fn=(348) +44 91 + +fl=(270) +fn=(3622) __tzstring +120 56 ++1 8 +cob=(2) +cfi=(18) +cfn=(660) +calls=8 0 +* 176 +-32 8 ++32 8 +-32 16 ++3 34 +-2 60 ++2 11 ++1 22 +-1 11 ++1 22 +cob=(2) +cfi=(18) +cfn=(2326) +calls=11 -93 +* 226 +* 22 +-4 48 ++9 6 +cob=(2) +cfi=(18) +cfn=(700) +calls=3 -98 +* 135 +* 3 ++1 6 ++4 3 ++1 9 +-2 3 ++2 6 +cob=(2) +cfi=(18) +cfn=(910) +calls=3 0 +* 55 ++1 3 ++3 3 ++14 49 +-24 2 +cob=(2) +cfi=(18) +cfn=(700) +calls=1 -98 +* 45 +* 1 ++1 2 ++4 1 ++1 3 +-2 1 ++2 2 +cob=(2) +cfi=(18) +cfn=(910) +calls=1 0 +* 19 ++1 1 ++17 2 +-12 1 ++12 5 + +fn=(3524) tzset_internal +372 23108 +-4 1 ++9 1 +-9 2 ++6 1 ++3 1 +cfi=(168) +cfn=(658) +calls=1 34 +* 429 +* 1 ++1 2 ++46 4 +-44 4621 ++21 1 +-4 1 ++1 1 ++3 1 +cob=(2) +cfi=(18) +cfn=(3526) +calls=1 0 +* 13 ++1 2 +cfi=(272) /build/glibc-sMfBJT/glibc-2.31/string/strdup.c +cfn=(3528) strdup +calls=1 40 +* 100 ++3 3 +-3 1 ++3 1 +cfi=(273) /build/glibc-sMfBJT/glibc-2.31/time/tzfile.c +cfn=(3530) __tzfile_read +calls=1 102 +* 7401 ++1 4 + +fn=(3520) +568 50842 ++4 13866 +fi=(271) /build/glibc-sMfBJT/glibc-2.31/time/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +47 9244 +fe=(270) +577 36976 +cfn=(3524) +calls=4622 372 +* 35700 ++2 13866 ++1 27732 +cfi=(273) +cfn=(3624) __tzfile_compute +calls=4622 +2 +* 152526 ++12 18488 ++2 9244 ++2 9244 ++7 18488 +cfi=(294) /build/glibc-sMfBJT/glibc-2.31/time/offtime.c +cfn=(3626) __offtime +calls=4622 30 +* 1160122 +* 9244 ++1 13866 ++5 4622 ++1 36976 +-11 4622 +-1 4622 ++2 4622 +-1 4622 ++1 9244 + +fl=(305) +fn=(3852) +48 6 ++3 12 +-3 24 ++6 12 ++5 36 ++2 18 +-7 12 + +fl=(314) +fn=(3968) __gconv_read_conf +539 12 ++3 3 ++4 1 +cfi=(315) +cfn=(3970) __gconv_load_cache +calls=1 49 +* 561 +* 2 ++3 2 ++55 11 + +fn=(3966) +617 4 ++1 36 +cob=(5) +cfi=(227) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_once.c +cfn=(2176) pthread_once +calls=4 136 +* 675 + +fl=(295) /build/glibc-sMfBJT/glibc-2.31/stdlib/random.c +fn=(3632) srand +209 3 ++1 3 +fi=(222) +47 2 +fe=(295) +211 3 +cfi=(296) /build/glibc-sMfBJT/glibc-2.31/stdlib/random_r.c +cfn=(3636) srandom_r +calls=1 -49 +* 6798 ++1 4 ++1 2 + +fl=(81) +fn=(256) +31 12 +fi=(386) ++1 48 +fe=(81) +-1 12 + +fl=(94) +fn=(284) +29 2 +fi=(389) ++3 6 +-2 10 +fe=(94) +-1 2 + +fl=(249) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/read_nocancel.c +fn=(2818) __read_nocancel +25 3 ++1 12 ++1 3 + +fl=(341) +fn=(5132) +46 2 ++1 4 +cfi=(342) /build/glibc-sMfBJT/glibc-2.31/intl/dcigettext.c +cfn=(5134) __dcigettext +calls=1 485 +* 618 + +fl=(88) +fn=(272) +29 6 +fi=(391) ++1 30 +fe=(88) +-1 6 + +fl=(145) +fn=(440) +488 8 ++14 6 +758 2 ++2 1 ++1 1 ++2 1 +-3 1 ++5 1 +-5 1 ++4 3 ++4 2 ++3 2 ++2 1 ++1 1 ++2 1 +-3 1 ++5 1 +-5 1 ++4 3 ++9 1 ++2 8 +-2 1 ++3 8 +500 1 ++4 1 +-4 1 ++4 1 +cfn=(442) handle_intel.constprop.0 +calls=1 259 +* 446 ++2 1 +-2 1 ++2 1 +cfn=(442) +calls=1 259 +* 487 ++5 1 +-5 1 ++5 1 +cfn=(442) +calls=1 259 +* 512 +* 1 ++8 2 +-9 1 ++20 1 ++5 3 ++4 2 ++8 6 ++3 4 ++6 2 +-6 9 ++6 6 ++3 26 ++14 2 ++4 1 ++3 1 ++1 1 +-4 1 ++3 1 +-3 1 ++3 1 ++6 4 +-39 6 +691 4 ++1 5 ++4 2 ++59 2 +564 2 ++4 1 ++1 1 +-1 2 ++1 1 ++23 2 ++8 2 ++2 1 +-2 6 ++2 4 +-2 1 ++4 1 ++23 2 +-25 2 ++2 6 ++2 6 ++3 2 ++1 8 ++2 4 ++3 2 ++5 1 ++2 2 ++1 1 ++1 1 +-2 2 ++1 1 ++1 1 ++27 2 ++1 2 ++2 1 +-1 1 ++1 1 +-24 2 ++3 1 ++1 2 ++3 1 ++2 4 ++1 1 ++5 2 + +fn=(444) intel_check_word.isra.0 +132 12 +-4 36 ++10 24 +-10 6 ++10 18 ++2 60 ++2 15 ++2 30 ++8 30 ++51 24 ++22 12 +fi=(146) /build/glibc-sMfBJT/glibc-2.31/string/../bits/stdlib-bsearch.h +28 12 +-1 12 ++4 24 ++1 12 +fe=(145) ++87 24 +fi=(146) +-88 18 ++1 9 +fe=(145) ++87 18 ++3 81 +fi=(146) +-93 192 ++2 120 ++1 60 +fe=(145) ++87 120 ++15 3 +255 36 +fi=(146) +37 15 +-8 36 +fe=(145) +164 9 ++3 9 +-6 13 ++3 4 ++9 4 ++23 5 +-32 15 ++3 15 ++4 14 ++2 28 ++2 14 ++2 10 ++4 3 ++2 6 ++2 3 ++2 3 +-1 3 +-1 3 ++2 6 +-2 3 ++3 9 +-2 9 ++2 6 +-10 6 + +ob=(34) +fl=(199) +fn=(880) _gnutls_global_init_skip +0 6 + +fn=(1276) 0x00000000000634e0 +0 9 + +fn=(1326) 0x0000000000077070 +0 599 +cob=(3) +cfi=(176) +cfn=(948) +calls=8 3366 +0 1776 +0 4 +cob=(3) +cfi=(176) +cfn=(948) +calls=1 3366 +0 222 +0 298 + +fn=(1370) 0x0000000000077300 +0 164 +cob=(3) +cfi=(176) +cfn=(948) +calls=4 3366 +0 888 +0 4 +cob=(3) +cfi=(176) +cfn=(948) +calls=1 3366 +0 222 +0 110 + +fn=(7666) 0x00000000001411d0 +0 2 + +fn=(7686) 0x0000000000051de0 +0 470 + +fn=(878) +0 3 +cfn=(880) +calls=1 0 +0 3 +0 6 +cob=(3) +cfi=(200) +cfn=(888) +calls=1 28 +0 580 +0 1 +0 5 +cfn=(894) 0x000000000005c6b0 +calls=1 0 +0 646975 +0 2 + +fn=(1384) 0x00000000000772b0 +0 164 +cob=(3) +cfi=(176) +cfn=(948) +calls=4 3366 +0 888 +0 4 +cob=(3) +cfi=(176) +cfn=(948) +calls=1 3366 +0 222 +0 110 + +fn=(1480) 0x000000000004b170 +0 11 +cob=(3) +cfi=(207) +cfn=(1494) +calls=1 33 +0 15 +0 1 +0 16 +cob=(3) +cfi=(200) +cfn=(888) +calls=1 28 +0 571 +0 1 +0 4 +cob=(3) +cfi=(200) +cfn=(888) +calls=1 28 +0 579 +0 1 +0 4 + +fn=(7834) 0x00000000000305a0 +0 5 + +fn=(872) +0 12 + +fn=(7644) +0 3 +cfn=(880) +calls=1 0 +0 3 +0 4 +cob=(3) +cfi=(200) +cfn=(888) +calls=1 28 +0 580 +0 1 +0 24 +cfn=(7662) 0x0000000000085050 +calls=1 0 +0 2 +0 1 +cfn=(7666) +calls=1 0 +0 2 +0 1 +cfn=(7670) 0x000000000006bb20 +calls=1 0 +0 41 +0 1 +cfn=(7686) +calls=1 0 +0 470 +0 2 +cob=(21) +cfi=(165) +cfn=(7700) +calls=1 0 +0 26594 +0 1 +0 2 +cob=(21) +cfi=(165) +cfn=(7700) +calls=1 0 +0 103521 +0 1 +0 1 +cfn=(7760) 0x0000000000077040 +calls=1 0 +0 2195 +0 1 +cfn=(7780) 0x0000000000063510 +calls=1 0 +0 8 +0 1 +cfn=(7784) 0x000000000011aa90 +calls=1 0 +0 2 +0 1 +cfn=(7788) _gnutls_supplemental_deinit +calls=1 0 +0 27 +0 1 +cfn=(7792) 0x000000000004b1d0 +calls=1 0 +0 16 +0 3 +cfn=(7802) 0x0000000000048470 +calls=1 0 +0 5 +0 3 +cfn=(7808) 0x00000000000629e0 +calls=1 0 +0 126 +0 2 +cfn=(7808) +calls=1 0 +0 126 +0 2 + +fn=(7760) +0 49 +cob=(3) +cfi=(176) +cfn=(1204) +calls=5 3087 +0 510 +0 5 +0 18 +cfn=(7762) 0x0000000000076fe0 +calls=1 0 +0 1030 +0 2 +cfn=(7762) +calls=1 0 +0 578 +0 3 + +fn=(7762) +0 130 +cob=(3) +cfi=(176) +cfn=(1204) +calls=14 3087 +0 1428 +0 14 +0 36 + +fn=(7780) +0 8 + +fn=(894) +0 27 +cob=(3) +cfi=(200) +cfn=(888) +calls=1 28 +0 596 +0 1 +0 6 +cob=(3) +cfi=(201) /build/glibc-sMfBJT/glibc-2.31/intl/bindtextdom.c +cfn=(906) bindtextdomain +calls=1 319 +0 436 +0 1 +0 1 +cfn=(916) 0x00000000001411c0 +calls=1 0 +0 3 +0 3 +cfn=(922) 0x0000000000085040 +calls=1 0 +0 3 +0 4 +cob=(21) +cfi=(165) +cfn=(930) +calls=1 0 +0 50 +0 1 +0 7 +cob=(21) +cfi=(165) +cfn=(942) +calls=1 0 +0 538930 +0 1 +0 7 +cob=(21) +cfi=(165) +cfn=(942) +calls=1 0 +0 98492 +0 1 +0 4 +cfn=(1222) 0x000000000006bac0 +calls=1 0 +0 47 +0 4 +cfn=(1246) 0x0000000000051dd0 +calls=1 0 +0 3 +0 6 +cfn=(1252) 0x0000000000062950 +calls=1 0 +0 244 + +ob=(3) +fl=(145) +fn=(444) +179 2 +-15 1 ++7 2 ++2 4 + +fn=(442) +259 21 ++2 3 +-2 9 ++5 6 ++8 6 ++3 6 +-2 3 ++2 3 +-5 6 ++11 15 ++5 6 ++2 3 ++1 3 +-1 3 ++5 18 +cfn=(444) +calls=3 132 +* 960 ++2 6 ++3 21 +cfn=(444) +calls=3 132 +* 308 ++2 6 ++19 33 + +fl=(281) /build/glibc-sMfBJT/glibc-2.31/libio/iofread_u.c +fn=(3556) fread_unlocked +34 24 ++1 24 +-1 24 ++4 24 ++4 48 +-2 36 +cfi=(275) +cfn=(3558) +calls=12 409 +* 1736 ++1 36 ++1 60 + +fl=(311) /build/glibc-sMfBJT/glibc-2.31/locale/nl_langinfo_l.c +fn=(3918) nl_langinfo_l +31 428 ++1 856 ++4 1712 +-3 428 ++10 428 +-1 856 ++16 428 +-20 428 ++23 856 ++5 856 + +fl=(264) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/wordsize-64/fxstat.c +fn=(2936) _fxstat +33 44 ++1 22 ++1 44 ++4 11 + +fl=(324) +fn=(4010) +399 160 ++6 16 +-6 112 ++1 16 ++2 16 +-2 16 ++1 32 ++4 32 ++12 32 ++94 16 ++2 16 ++6 16 ++37 16 +-42 16 +-1 16 +-2 16 ++2 32 ++6 16 +-6 16 ++6 16 +-1 16 ++1 32 ++37 64 +fi=(325) /build/glibc-sMfBJT/glibc-2.31/iconv/../iconv/loop.c +309 32 ++14 16 +-1 32 +-21 16 ++35 208 +-27 96 ++14 32 +-1 64 ++14 240 ++4 16 +fe=(324) +647 16 +fi=(325) +340 16 +fe=(324) +647 16 ++7 16 ++4 32 +813 192 +-24 80 +559 80 +665 32 +-4 16 ++4 32 ++2 16 + +fl=(333) /build/glibc-sMfBJT/glibc-2.31/signal/../sysdeps/posix/signal.c +fn=(4854) signal +30 1 ++4 5 +fi=(334) /build/glibc-sMfBJT/glibc-2.31/signal/../sysdeps/unix/sysv/linux/internal-signals.h ++12 1 +fe=(333) +-11 3 +cfn=(4858) __bsd_signal.part.0 +calls=1 -6 +* 130 + +fn=(4858) +29 6 ++12 2 ++4 20 +-2 2 ++2 1 +-2 2 ++1 5 ++1 1 +cfi=(335) /build/glibc-sMfBJT/glibc-2.31/signal/../nptl/sigaction.c +cfn=(4860) sigaction +calls=1 -22 +* 83 ++3 3 ++1 5 + +fl=(344) /build/glibc-sMfBJT/glibc-2.31/locale/localename.c +fn=(5142) __current_locale_name +24 2 ++1 8 ++1 2 + +fl=(96) +fn=(288) +31 2 +fi=(388) ++5 6 +-2 2 ++2 2 +-2 4 +fe=(96) +-3 2 + +fl=(251) /build/glibc-sMfBJT/glibc-2.31/stdlib/../stdlib/strtol_l.c +fn=(4874) ____strtol_l_internal +226 6 ++54 2 +-54 6 ++19 2 +-19 8 ++26 4 ++31 8 ++9 12 ++2 4 ++5 4 +-1 2 ++6 4 ++4 4 ++10 4 ++10 8 +-82 4 +434 10 ++16 2 ++10 6 +-10 2 ++10 2 ++12 4 +-5 4 ++5 4 ++1 12 +-41 8 ++2 16 ++2 12 ++28 12 ++3 8 ++11 4 ++5 6 ++6 4 +325 4 +492 6 +-2 4 ++17 10 ++18 16 + +fn=(2822) ____strtoul_l_internal +226 6 ++54 2 +-54 6 ++19 2 +-19 8 ++26 4 ++31 8 ++9 12 ++2 4 ++5 4 +-1 2 ++6 4 ++4 4 ++10 2 ++10 4 +-82 1 +373 3 ++1 3 ++60 6 ++16 2 ++10 6 +-10 2 ++10 2 ++12 4 +-5 2 ++5 2 ++1 6 +-41 4 ++2 8 ++2 12 ++7 4 ++17 6 ++4 6 ++3 4 ++11 4 ++5 6 ++1 2 ++12 4 ++11 10 ++18 16 +325 2 +-15 2 ++15 2 ++3 2 ++46 1 +-1 1 +246 1 +378 1 +-4 1 ++60 1 + +fl=(124) +fn=(350) +29 3 +fi=(119) /build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/ifunc-memmove.h ++16 9 +-1 6 ++5 6 +-1 6 ++12 6 ++2 15 +fe=(124) + +fl=(303) +fn=(3840) +27 27 ++1 108 ++2 27 + +fl=(248) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memchr-avx2.S +fn=(2814) __memchr_avx2 +40 359 ++3 359 ++1 359 ++2 358 ++2 358 ++9 358 ++3 358 ++1 358 ++1 358 ++3 171 ++1 171 ++1 171 ++3 171 ++2 41 ++1 41 ++6 2 ++1 2 ++1 2 ++4 2 ++2 2 ++1 2 ++2 1 ++4 187 ++1 187 ++1 187 ++1 187 ++2 187 ++1 187 ++1 187 ++1 105 ++3 105 ++1 105 ++2 99 ++1 99 ++1 99 ++1 99 ++8 82 ++1 82 ++3 82 ++1 82 ++3 11 ++3 11 ++1 11 ++6 4 ++1 4 ++1 4 ++1 4 ++60 9 ++1 9 ++2 1 ++1 1 ++1 1 ++1 1 ++26 8 ++1 8 ++1 8 ++1 8 ++2 8 ++1 8 ++1 8 ++12 130 ++2 130 ++1 130 ++1 110 ++1 110 ++1 110 ++37 144 ++2 144 ++1 144 +-1 1 ++1 1 ++5 5 ++1 5 ++1 5 ++1 5 + +fl=(231) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/wctob.c +fn=(2300) wctob +31 3072 ++9 1152 ++5 1152 ++37 3072 + +fl=(279) /build/glibc-sMfBJT/glibc-2.31/string/../string/strstr.c +fn=(3552) __GI_strstr +77 80 ++5 10 +-5 30 ++5 20 ++2 40 +cob=(2) +cfi=(18) +cfn=(686) +calls=10 -84 +* 264 +* 10 ++1 20 ++44 10 ++32 120 + +fl=(285) /build/glibc-sMfBJT/glibc-2.31/libio/fseek.c +fn=(3582) fseek +32 9 ++3 3 ++1 5 +cfi=(286) /build/glibc-sMfBJT/glibc-2.31/libio/ioseekoff.c +cfn=(3584) _IO_seekoff_unlocked +calls=1 -3 +* 118 +* 4 +fi=(283) +884 2 +fe=(285) +39 7 + +fl=(167) /build/glibc-sMfBJT/glibc-2.31/misc/getauxval.c +fn=(650) getauxval +25 1 ++7 1 +-1 2 ++5 2 ++5 60 ++1 30 ++1 2 + +fl=(202) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S +fn=(912) __memcpy_avx_unaligned_erms +225 9020 ++1 9020 ++6 9020 ++1 9020 ++1 283 ++1 283 ++3 201 ++1 201 ++1 201 ++1 201 ++2 201 ++1 201 ++33 8737 ++1 8737 ++2 4246 ++1 4246 ++1 1866 ++1 1866 ++1 512 ++1 512 ++1 108 ++1 107 ++1 107 ++2 108 ++14 4491 ++1 4491 ++1 4491 ++1 4491 ++1 4491 ++4 2380 ++1 2380 ++1 2380 ++1 2380 ++1 2380 ++3 1354 ++1 1354 ++1 1354 ++1 1354 ++1 1354 ++3 404 ++1 404 ++1 404 ++1 404 ++1 404 ++4 82 ++1 82 ++5 82 ++1 82 ++1 63 ++1 63 ++2 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++1 16 ++3 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++3 19 ++1 19 ++58 19 ++1 19 ++1 19 ++1 19 ++1 19 ++2 19 ++3 19 ++1 19 ++1 19 ++1 19 ++2 19 ++2 19 ++2 19 ++3 19 ++1 19 ++4 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++1 47 ++2 19 ++1 19 ++1 19 ++1 19 ++2 19 ++1 19 ++1 19 + +fn=(1082) __memcpy_chk_avx_unaligned_erms +219 133 ++1 133 ++1 266 ++4 133 ++1 133 ++6 133 ++1 133 ++44 133 ++1 133 ++2 133 ++1 133 ++1 133 ++1 133 ++36 133 ++1 133 ++1 133 ++1 133 ++1 133 + +fn=(3850) __mempcpy_avx_unaligned_erms +212 9 ++1 9 ++1 9 ++1 9 ++17 9 ++1 9 ++1 4 ++1 4 ++3 2 ++1 2 ++1 2 ++1 2 ++2 2 ++1 2 ++33 5 ++1 5 ++2 5 ++1 5 ++1 4 ++1 4 ++29 1 ++1 1 ++1 1 ++1 1 ++1 1 ++3 4 ++1 4 ++1 4 ++1 4 ++1 4 ++11 2 ++1 2 ++5 2 ++1 2 ++1 2 ++1 2 ++22 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 ++1 2 + +fl=(247) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/open64_nocancel.c +fn=(2808) __open_nocancel +34 8 ++3 4 +-3 24 ++3 24 ++8 28 ++2 20 + +fl=(374) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/wordsize-64/lxstat.c +fn=(6530) _lxstat +33 4 ++1 2 ++1 9 + +fl=(221) +fn=(1940) __new_exitfn +82 469 ++6 938 +-6 1876 ++11 1876 +-10 938 ++12 938 ++1 2340 +-1 938 +-2 1 ++10 1 +-10 3 ++13 936 ++25 454 ++1 908 +-1 908 ++7 454 ++5 454 +-4 454 ++4 1816 +-5 15 ++5 15 +-4 15 ++4 60 +-33 42 ++4 42 +cob=(2) +cfi=(18) +cfn=(2846) +calls=14 0 +* 7036 +* 14 ++1 28 ++2 14 ++1 14 ++7 14 +-1 14 ++1 15 +-1 1 ++1 1 + +fn=(1936) +69 2814 +-28 1407 ++2 469 +fi=(222) ++4 469 +fe=(221) +-4 938 +fi=(222) ++4 938 +fe=(221) +-3 938 +cfn=(1940) +calls=469 +38 +* 24042 ++2 938 ++10 469 +-3 469 ++5 469 +-5 938 ++3 469 +-1 469 ++1 469 ++3 1876 ++12 2345 + +fl=(69) +fn=(230) +31 2 +fi=(389) ++1 6 +-2 10 +fe=(69) ++1 2 + +fl=(85) +fn=(266) +31 2 +fi=(86) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/ifunc-wmemset.h ++1 4 +-2 2 ++2 6 +-2 4 ++5 2 +-1 2 ++1 2 +-1 6 +fe=(85) +-3 4 + +fl=(250) /build/glibc-sMfBJT/glibc-2.31/stdlib/../stdlib/strtol.c +fn=(4872) strtol +105 2 ++1 8 +cfi=(251) +cfn=(4874) +calls=2 226 +* 238 + +fn=(2820) strtoul +105 2 ++1 8 +cfi=(251) +cfn=(2822) +calls=2 226 +* 211 + +fl=(288) /build/glibc-sMfBJT/glibc-2.31/libio/ftello.c +fn=(3594) ftello +38 5 ++3 3 ++1 5 +cfi=(286) +cfn=(3584) +calls=1 -9 +* 68 +* 1 ++1 5 ++6 2 ++12 5 +fi=(289) /build/glibc-sMfBJT/glibc-2.31/libio/../libio/libioP.h +884 2 +fe=(288) + +fl=(261) /build/glibc-sMfBJT/glibc-2.31/posix/../sysdeps/unix/syscall-template.S +fn=(5960) sched_yield +78 13120 ++1 2624 + +fn=(2914) getpid +59 2193 ++1 731 + +fn=(3006) getuid +59 3 ++1 1 + +fl=(339) +fn=(4986) +78 20 ++1 4 + +fn=(6276) prctl +78 6 ++1 1 + +fn=(4966) munlock +78 10 ++1 2 + +fn=(4954) mlock +78 10 ++1 2 + +fl=(299) +fn=(3778) +28 3 ++2 2 +-1 1 ++5 3 + +fl=(82) +fn=(258) +29 10 +fi=(388) ++7 30 +-2 10 ++2 10 +-2 20 +fe=(82) +-5 10 + +fl=(118) +fn=(338) +29 14 +fi=(119) ++16 42 +-1 28 ++5 28 +-1 28 ++12 28 ++2 70 +fe=(118) + +fl=(132) /build/glibc-sMfBJT/glibc-2.31/resource/../sysdeps/unix/sysv/linux/getrlimit64.c +fn=(398) getrlimit +37 4 ++1 14 ++1 2 + +fl=(237) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memcmp-avx2-movbe.S +fn=(2328) __memcmp_avx2_movbe +59 2074 ++7 2074 ++1 2074 ++3 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++2 1 ++2 1 ++1 1 ++1 1 ++1 1 ++3 1 ++1 1 ++2 1 ++1 1 ++2 1 ++1 1 ++2 1 ++1 1 ++2 1 ++1 1 ++1 1 ++2 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 ++26 1118 ++10 1118 ++1 1118 ++1 1118 ++2 1118 ++1 1118 ++14 596 ++1 596 ++1 596 ++1 596 ++1 596 ++1 596 ++1 596 ++1 596 ++1 596 ++1 596 ++1 554 ++1 554 ++1 554 ++4 42 ++5 201 ++1 201 ++1 201 ++1 201 ++1 201 ++1 201 ++1 201 ++1 201 ++2 201 ++1 201 ++4 25 ++1 25 ++1 25 ++1 25 ++16 2073 ++1 2073 ++1 2048 ++1 2048 ++1 2048 ++1 1847 ++1 1847 ++2 1251 ++1 1251 ++2 1038 ++1 1038 ++1 1038 ++1 1038 ++1 1038 ++1 1038 ++2 108 ++1 108 ++1 108 ++1 108 ++1 108 ++1 108 ++1 108 ++1 108 ++1 70 ++5 213 ++1 213 ++1 213 ++1 213 ++1 213 ++3 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 66 ++1 63 + +fl=(242) +fn=(2798) +127 6 +fi=(244) /build/glibc-sMfBJT/glibc-2.31/misc/../include/time.h +326 3 +fe=(242) +127 12 +fi=(244) +326 3 +fe=(242) +127 3 +fi=(244) +326 3 +fe=(242) +127 15 +fi=(244) +326 3 +cfi=(243) +cfn=(2800) +calls=3 31 +* 63 ++1 9 +fe=(242) +132 3 ++2 6 +fi=(245) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/pthread/allocalim.h +27 2 +cfi=(246) /build/glibc-sMfBJT/glibc-2.31/nptl/alloca_cutoff.c +cfn=(2806) __libc_alloca_cutoff +calls=1 * +* 11 +fe=(242) +140 1 +-1 4 ++1 20 ++6 3 +-6 1 ++1 1 +-1 2 ++2 1 ++1 1 ++3 1 +cfi=(247) +cfn=(2808) +calls=1 34 +* 27 +* 2 ++3 2 ++2 6 +-3 1 ++3 1 +cfn=(2810) next_line +calls=1 -76 +* 123 +* 1 ++1 3 ++4 4 +cfi=(250) +cfn=(2820) +calls=1 -51 +* 107 ++1 1 +-1 1 ++1 2 ++7 1 +-1 1 ++1 1 ++11 1 ++3 1 +-3 3 ++3 6 ++1 1 +-1 5 +fi=(252) /build/glibc-sMfBJT/glibc-2.31/misc/../sysdeps/unix/sysv/linux/not-cancel.h +60 2 +cfi=(253) +cfn=(2826) +calls=1 -35 +* 6 +fe=(242) +185 2 ++38 1 ++2 2 ++3 36 +-62 1 ++1 4 +cfi=(250) +cfn=(2820) +calls=1 -62 +* 114 ++1 1 +-1 1 ++1 2 +-34 8 ++6 2 + +fn=(2810) +75 6 ++2 1 +-2 4 ++2 1 +-1 1 +-1 1 ++2 2 +-2 1 ++2 3 +cob=(2) +cfi=(18) +cfn=(2812) 0x0000000004c6d420 +calls=1 -77 +* 7 ++1 2 ++36 1 ++4 1 ++1 3 ++2 2 ++1 9 +-42 2 ++2 2 ++2 4 +cob=(2) +cfi=(18) +cfn=(2816) 0x0000000004c6d620 +calls=1 -84 +* 16 ++1 1 ++3 2 +-3 3 ++1 1 ++2 3 +cfi=(249) +cfn=(2818) +calls=1 -63 +* 6 ++1 2 ++3 1 ++2 1 +-2 1 ++2 2 +-2 1 ++2 3 +cob=(2) +cfi=(18) +cfn=(2812) +calls=1 -94 +* 25 ++1 2 + +fl=(276) +fn=(3578) _IO_file_read +1131 5 ++1 5 ++2 5 +-1 5 ++1 8 +cfi=(373) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/read.c +cfn=(6366) read +calls=3 25 +* 24 +-1 2 +cfi=(249) +cfn=(2818) +calls=2 25 +* 12 + +fn=(3550) _IO_file_open +183 20 ++3 10 +-3 70 ++2 20 ++4 9 +cfi=(328) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/open64.c +cfn=(4624) open +calls=9 37 +* 321 +* 9 ++1 20 ++3 20 ++3 10 +-4 10 ++1 40 ++3 20 ++3 2 +fi=(283) +941 6 ++2 4 ++1 4 +fe=(276) +199 8 +cfn=(3590) _IO_file_seek +calls=2 1140 +* 18 ++1 4 ++6 20 +cfi=(275) +cfn=(3540) +calls=10 87 +* 190 ++1 10 ++1 40 +-22 1 +cfi=(247) +cfn=(2808) +calls=1 34 +* 27 +* 2 + +fn=(3572) +462 5 ++4 15 +-4 40 ++7 10 ++6 15 ++3 10 ++12 10 +fi=(283) +885 25 +fe=(276) +506 10 +cfi=(275) +cfn=(3576) +calls=5 164 +* 125 ++11 5 +-5 10 +fi=(283) +943 5 +fe=(276) +512 5 +fi=(283) +943 5 +fe=(276) +512 15 +fi=(283) +944 10 +fe=(276) +517 20 +cfn=(3578) +calls=5 1131 +* 66 ++2 10 ++16 5 +-9 5 ++9 10 ++1 2 ++1 2 ++1 8 +-1 8 ++1 32 + +fn=(6058) _IO_file_setbuf@@GLIBC_2.2.5 +382 6 ++1 2 +cfi=(275) +cfn=(6060) +calls=2 +69 +* 138 +* 4 ++5 2 ++2 4 +-2 6 ++3 4 + +fn=(3538) +107 10 ++5 10 +-5 20 ++4 10 ++3 10 +cfi=(275) +cfn=(3540) +calls=10 -27 +* 1230 ++1 10 ++1 20 + +fn=(3566) +1147 14 ++1 21 +cfi=(264) +cfn=(2936) +calls=7 33 +* 77 + +fn=(3586) _IO_file_seekoff@@GLIBC_2.2.5 +901 24 ++8 5 ++5 3 ++1 3 ++2 1 ++1 2 ++25 2 +-25 2 ++12 2 ++17 3 ++2 3 ++86 2 +cfi=(275) +cfn=(3588) +calls=1 -75 +* 10 ++1 1 +fi=(283) +-93 2 ++1 2 +fe=(276) ++92 4 +cfn=(3590) +calls=1 1140 +* 9 ++1 2 ++2 2 ++1 1 ++2 1 +-1 3 ++14 22 +847 2 ++4 1 +-2 2 ++2 1 ++5 2 ++24 2 ++10 3 +-24 3 ++1 4 ++18 4 + +fn=(6194) _IO_file_overflow@@GLIBC_2.2.5 +732 60 ++1 48 ++7 57 ++35 20 +-32 11 ++12 10 ++9 20 ++5 10 ++2 5 +-2 5 ++2 5 +-2 10 ++2 5 ++1 5 +-3 20 ++3 20 ++1 2 ++2 4 ++13 12 +-12 12 ++1 12 ++11 24 +-12 12 +cfn=(6196) _IO_do_write@@GLIBC_2.2.5 +calls=12 424 +* 60 +-31 8 +cfi=(275) +cfn=(3562) +calls=4 343 +* 1169 ++1 24 + +fn=(3618) +169 45 ++1 18 ++7 9 +-1 18 ++1 18 +-1 9 +cfi=(275) +cfn=(3620) +calls=9 601 +* 144 + +fn=(3590) +1140 3 ++1 6 +cfi=(287) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/lseek64.c +cfn=(3592) lseek +calls=3 28 +* 18 + +fn=(6192) +1198 48 ++7 12 +-7 48 ++6 72 ++7 48 ++17 36 ++40 108 +-36 12 ++12 12 +fi=(283) +941 36 ++2 24 ++1 24 +fe=(276) +1244 36 +cfn=(6194) +calls=12 732 +* 1650 +* 24 ++6 24 ++1 48 ++2 24 ++11 36 ++1 12 +cfi=(275) +cfn=(6188) +calls=3 371 +* 193 +* 9 +434 45 ++7 4 +fi=(283) +944 18 +fe=(276) +449 45 +cfn=(6200) _IO_file_write@@GLIBC_2.2.5 +calls=9 1174 +* 414 ++1 9 +-1 9 ++1 45 ++2 9 ++4 9 +-4 27 ++1 18 ++3 18 +-2 9 +1257 18 +-1 18 +440 16 ++15 18 + +fn=(6200) +1174 84 ++2 72 ++5 12 +cfi=(361) /build/glibc-sMfBJT/glibc-2.31/io/../sysdeps/unix/sysv/linux/write.c +cfn=(6202) write +calls=12 25 +* 108 ++1 24 ++5 12 ++1 12 +-12 24 ++2 12 ++2 24 ++1 24 ++10 36 ++3 108 + +fn=(6196) +424 15 ++2 45 ++1 12 +-3 48 ++10 6 ++7 12 +fi=(283) +944 6 +fe=(276) +449 12 +cfn=(6200) +calls=3 1174 +* 138 +* 3 ++1 15 ++2 3 ++4 3 +-4 9 ++1 6 ++3 9 +-2 3 +-28 12 ++1 24 ++28 9 + +fn=(3560) +1273 180 ++7 18 +-7 18 ++7 18 ++11 18 +fi=(283) +941 54 +fe=(276) +1291 54 ++19 10 ++9 15 ++1 20 +-29 10 ++2 69 ++1 46 ++8 10 ++20 10 +cfi=(275) +cfn=(3570) +calls=5 269 +* 674 +* 10 ++39 162 +-78 12 ++5 8 +cfi=(275) +cfn=(3562) +calls=4 343 +* 10025 +* 4 ++8 54 +cob=(2) +cfi=(18) +cfn=(910) +calls=18 0 +* 389 ++1 54 + +fn=(6062) +793 40 ++5 32 ++2 8 ++1 16 ++11 16 ++4 32 + +fn=(3548) +214 110 ++9 20 ++2 74 +357 120 +225 9 ++23 172 +-9 2 +-2 2 ++1 4 ++43 40 +cfn=(3550) +calls=10 -98 +* 915 +* 10 ++3 20 ++3 30 +cfi=(279) +cfn=(3552) +calls=10 77 +* 604 +* 10 ++1 20 +-40 34 ++20 3 ++4 1 +-1 1 ++1 2 +-43 5 +-1 5 +-13 10 + +fn=(3612) +129 36 ++2 27 ++4 18 ++3 9 +-3 9 +-1 18 ++6 9 ++3 9 +-3 9 +cfi=(275) +cfn=(3588) +calls=9 960 +* 90 ++3 27 +fi=(283) +941 27 ++2 18 ++1 18 +fe=(276) +143 18 +cfn=(3614) _IO_file_close +calls=9 1165 +* 81 +* 9 ++3 27 ++8 45 +cfi=(275) +cfn=(3568) +calls=9 329 +* 1168 ++1 9 ++3 9 +-3 27 ++3 9 +cfi=(275) +cfn=(3606) +calls=9 53 +* 36 ++5 9 +-4 9 ++1 9 ++3 9 +-2 9 ++3 45 +-28 21 +cfn=(6196) +calls=3 424 +* 330 +* 6 + +fn=(3614) +1165 9 ++3 18 +cfi=(253) +cfn=(2826) +calls=9 25 +* 54 + +fl=(175) +fn=(694) +104 494 ++3 38 +-3 114 ++3 38 ++8 76 ++17 114 +cob=(2) +cfi=(18) +cfn=(696) 0x0000000004c6d570 +calls=38 0 +* 1189 +* 76 ++1 114 +cob=(2) +cfi=(18) +cfn=(696) +calls=38 0 +* 1441 +* 76 +-58 52 +cob=(2) +cfi=(18) +cfn=(660) +calls=26 -75 +* 536 +* 26 ++3 52 ++4 130 +cfi=(301) +cfn=(3836) +calls=26 -27 +* 4186 +* 52 ++3 52 ++2 26 ++1 104 ++8 104 +cob=(2) +cfi=(18) +cfn=(2812) +calls=26 -96 +* 633 +* 52 ++50 52 ++4 52 ++3 78 +cfi=(302) /build/glibc-sMfBJT/glibc-2.31/locale/loadarchive.c +cfn=(3838) _nl_load_locale_from_archive +calls=26 -19 +* 25827 +* 26 ++1 52 +325 456 +137 24 ++1 36 + +fl=(318) /build/glibc-sMfBJT/glibc-2.31/intl/hash-string.c +fn=(3980) __hash_string +32 8 ++6 32 ++3 8 +-3 32 ++2 8 ++1 16 ++2 24 +-3 44 ++1 88 ++2 132 ++2 24 ++1 12 +-8 164 + +fl=(361) +fn=(6202) +25 12 ++1 84 ++1 12 + +fl=(97) +fn=(290) +33 6 +fi=(388) ++3 18 +-2 6 ++2 6 +-2 12 +fe=(97) +-1 6 + +fl=(287) +fn=(3592) +28 3 ++8 12 ++2 3 + +fl=(304) /build/glibc-sMfBJT/glibc-2.31/intl/../intl/l10nflist.c +fn=(3846) _nl_normalize_codeset +311 8 ++12 4 ++1 10 ++5 2 +-16 2 +-1 4 ++12 40 ++4 8 +-2 8 ++3 16 +-6 30 ++9 8 +cob=(2) +cfi=(18) +cfn=(700) +calls=2 0 +* 82 ++2 6 ++9 24 +-2 24 ++1 30 ++2 16 +-3 2 ++4 4 +-4 4 ++6 2 ++4 10 + +fl=(309) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcpy-avx2.S +fn=(3862) __stpcpy_avx2 +50 409 ++6 409 ++7 409 ++2 409 ++1 409 ++1 409 ++2 181 ++1 181 ++2 181 ++1 181 ++1 181 ++14 181 ++1 181 ++2 32 ++1 32 ++7 32 ++1 32 +301 228 ++1 228 ++1 228 ++1 228 ++10 228 ++1 228 ++31 149 ++2 149 ++2 149 ++1 149 +-3 228 ++2 228 ++1 228 +-1 32 ++1 32 ++1 409 ++1 409 ++1 409 ++1 409 ++31 32 ++1 32 ++1 32 ++1 32 ++1 32 +610 409 ++1 409 ++1 409 ++1 409 ++2 409 ++8 409 ++1 409 + +fl=(294) +fn=(3626) +30 9244 ++4 4622 +-4 27732 ++4 27732 ++1 4622 +-1 4622 ++1 4622 ++2 9244 ++10 27732 ++13 4622 ++3 4622 ++4 4622 +-20 9244 ++5 4622 +-5 9244 ++1 9244 ++1 18488 ++1 4622 +-1 4622 ++1 9244 ++2 4622 +-2 9244 ++2 13866 +-2 4622 ++2 36976 ++3 4622 +-3 9244 ++8 4622 ++3 69330 ++4 180258 ++1 4622 +-1 4622 +-1 23110 ++1 4622 ++1 157148 ++1 4622 +-1 18488 +-2 4622 +-6 78574 ++11 4622 ++1 4622 +-1 4622 ++1 13866 +-30 13866 ++36 4622 ++1 13866 ++1 18488 ++2 4622 ++1 4622 ++2 4622 +-1 9244 ++2 32354 +-6 184880 + +fl=(144) +fn=(438) +83 1 ++1 4 ++1 3 ++1 3 ++2 1 + +fl=(178) +fn=(710) ptmalloc_init.part.0 +289 5 ++13 1 +-8 1 ++8 1 ++6 4 +fi=(176) +1795 3 ++3 4 +-3 2 ++3 504 +-3 252 ++11 1 +fe=(178) +313 2 +fi=(176) +1807 1 ++2 1 +fe=(178) +313 3 +cob=(2) +cfi=(18) +cfn=(728) 0x0000000004c6d450 +calls=1 0 +* 1501 ++1 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 22 ++1 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 21 ++1 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 22 ++1 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 22 ++1 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 21 ++1 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 22 ++1 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 22 ++2 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 22 ++1 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 22 ++1 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 22 ++3 4 +cob=(2) +cfi=(18) +cfn=(728) +calls=1 0 +* 22 ++69 2 ++1 2 ++3 1 ++1 6 +-98 5 +cfi=(179) +cfn=(712) +calls=1 126 +* 73230 +* 2 ++1 4 + +fl=(328) +fn=(4624) +37 18 ++3 9 +-3 72 ++3 34 ++8 90 ++2 63 +-7 10 ++1 5 +-1 15 ++2 5 + +fl=(201) +fn=(906) +319 2 +82 1 +319 1 +82 7 +cfn=(908) set_binding_values.part.0 +calls=1 -7 +* 422 +* 1 +322 2 + +fn=(908) +75 10 ++16 8 +cob=(5) +cfi=(173) +cfn=(690) +calls=1 -67 +* 57 ++4 5 +310 2 ++2 4 ++1 1 +-1 1 ++1 2 +-1 2 ++1 4 +-1 1 +cob=(5) +cfi=(187) +cfn=(748) +calls=1 31 +* 40 +189 5 ++12 2 +cob=(2) +cfi=(18) +cfn=(660) +calls=1 0 +* 18 +* 1 ++2 1 +-2 1 ++2 1 +cob=(2) +cfi=(18) +cfn=(700) +calls=1 0 +* 192 ++2 2 +-2 1 ++2 1 ++3 3 +cob=(2) +cfi=(18) +cfn=(910) +calls=1 0 +* 15 ++11 3 +cob=(2) +cfi=(18) +cfn=(696) +calls=1 0 +* 23 +* 1 +-3 1 ++3 2 ++19 1 ++1 1 ++6 2 ++28 3 ++3 1 ++1 2 +-7 2 + +fl=(350) +fn=(5952) +51 23010 ++1 9204 ++12 18408 ++1 23010 +-1 23010 + +fl=(336) /build/glibc-sMfBJT/glibc-2.31/signal/../sysdeps/unix/sysv/linux/sigaction.c +fn=(4864) __libc_sigaction +43 6 ++5 2 ++2 1 ++1 1 ++7 1 +-7 4 +-1 1 ++3 1 +-2 5 ++7 1 +-5 1 ++5 1 +-7 1 ++2 1 +-2 1 ++2 3 ++5 2 +-7 4 ++7 6 ++4 4 ++2 1 ++1 4 +-1 1 ++2 1 +-1 6 ++1 1 ++1 1 +-2 2 ++2 1 +-2 4 ++5 6 + +fl=(355) +fn=(6054) +31 9 ++2 9 +fi=(278) ++14 1 +fe=(355) +-14 2 +fi=(278) ++14 1 +fe=(355) +-14 4 ++4 1 +-3 1 ++2 3 +-2 1 +fi=(283) +941 2 ++2 1 +-2 1 ++2 1 ++1 2 +fe=(355) +37 4 +cfi=(276) +cfn=(6058) +calls=1 382 +* 82 ++1 6 ++2 5 +cfi=(276) +cfn=(6058) +calls=1 382 +* 84 +fi=(283) +884 2 ++1 10 +fe=(355) +42 6 + +fl=(204) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S +fn=(3340) __memset_chk_avx2_unaligned_erms +161 32 ++1 32 ++1 64 ++4 32 ++1 96 ++5 32 ++1 32 ++1 24 ++1 24 ++2 24 ++1 24 ++1 24 ++1 24 ++52 8 ++1 8 ++2 8 ++1 8 ++1 8 ++1 8 ++1 8 ++32 8 ++1 8 ++1 8 ++1 8 + +fn=(952) __memset_avx2_unaligned_erms +167 2203 ++1 6609 ++5 2203 ++1 2203 ++1 2159 ++1 2159 ++2 12 ++1 12 ++1 12 ++1 12 ++3 2147 ++1 2147 ++3 2147 ++1 2147 ++1 1528 ++1 1528 ++1 1528 ++1 1528 ++2 1528 ++1 1528 +-1 515 ++1 515 ++3 619 ++1 619 ++1 619 ++1 619 ++1 619 ++1 619 ++1 619 ++1 619 ++1 619 ++1 619 ++1 619 ++1 619 ++1 619 ++1 619 ++2 214 ++1 214 ++1 214 ++1 214 ++1 214 ++1 214 ++1 214 ++1 104 ++1 104 ++11 44 ++1 44 ++2 28 ++1 28 ++1 28 ++1 26 ++1 26 ++1 26 ++1 26 ++1 26 ++1 16 ++2 16 ++1 16 +-1 10 ++1 10 ++12 16 ++1 16 ++1 16 ++1 16 ++4 2 ++1 2 ++1 2 ++1 2 + +fl=(296) +fn=(3636) +162 1 ++8 2 ++2 1 ++1 2 ++7 2 +-4 1 ++4 2 ++1 2 ++5 1 ++1 7 ++5 8 ++2 1 +-1 2 ++1 2 ++2 2 ++1 2 +-10 2 ++5 232 ++2 29 +-1 58 ++1 58 ++2 58 ++1 58 +-10 58 ++13 1 ++1 1 +-1 2 ++3 1 +362 930 ++9 310 +-1 310 ++2 310 ++3 620 ++3 310 ++1 930 ++8 600 ++3 1200 +203 600 +390 40 +203 20 ++7 22 + +fl=(356) /build/glibc-sMfBJT/glibc-2.31/time/strftime_l.c +fn=(6166) __strftime_internal +471 192 ++5 24 +-5 216 ++2 48 ++71 48 ++10 48 ++6 24 +-31 24 ++31 48 +1336 72 +658 48 +-98 144 +1436 96 ++1 48 ++2 288 +558 96 ++17 24 +-1 24 +-12 48 +669 240 ++44 48 ++14 168 +-34 72 ++20 96 +960 60 +1348 48 ++2 24 +998 48 ++3 96 ++2 48 ++3 48 ++2 32 ++12 48 ++3 48 ++10 128 +cob=(2) +cfi=(18) +cfn=(950) +calls=16 0 +* 336 +* 48 ++1 32 ++1 48 ++5 480 +cob=(2) +cfi=(18) +cfn=(910) +calls=24 0 +* 432 +* 48 +713 8 +938 20 ++3 28 +713 8 +1080 20 ++3 28 +713 8 +1086 20 ++3 36 +713 8 +1133 20 ++3 28 +713 8 +1050 20 ++3 28 +713 8 +1265 20 ++21 8 ++3 40 +987 4 ++2 8 +-2 20 ++2 40 +-2 24 ++6 24 +-6 24 ++6 264 ++1 96 +-1 176 ++1 64 ++3 24 ++35 48 +669 24 +-97 48 + +fn=(6164) strftime_l +451 120 ++8 24 ++1 96 +cfn=(6166) +calls=24 +11 +* 5488 +* 48 ++2 120 + +fl=(358) +fn=(6184) buffered_vfprintf +2345 65 ++8 5 +-8 5 ++8 15 ++24 5 +-20 10 ++6 5 ++1 5 +-1 5 ++10 5 +-10 5 ++3 5 ++7 5 ++1 5 +-3 5 ++3 5 +-11 5 ++14 5 +cfn=(6183) __vfprintf_internal'2 +calls=5 1289 +* 2457 ++3 5 +-3 5 ++3 10 ++1 35 +fi=(360) /build/glibc-sMfBJT/glibc-2.31/stdio-common/../sysdeps/unix/sysv/linux/x86/lowlevellock.h +47 10 +fe=(358) +2381 10 ++12 10 +-12 5 ++12 20 ++2 5 +fi=(359) /build/glibc-sMfBJT/glibc-2.31/stdio-common/../libio/libioP.h +941 15 ++2 10 ++1 10 +fe=(358) +2395 15 +cfi=(276) +cfn=(6192) +calls=5 1198 +* 913 ++1 15 ++5 60 ++1 40 +cob=(5) +cfi=(277) +cfn=(3546) +calls=5 62 +* 50 ++3 55 +-25 35 +cob=(5) +cfi=(277) +cfn=(3542) +calls=5 25 +* 85 ++1 15 +-28 10 + +fn=(6182) +1289 80 ++31 15 ++8 17 ++4 25 ++11 15 +-15 6 +1745 60 +1346 25 +cfn=(6184) +calls=5 2345 +* 4065 +* 10 + +fn=(6183) +1289 80 ++31 15 ++8 15 ++4 25 ++11 15 ++11 10 +fi=(392) /build/glibc-sMfBJT/glibc-2.31/stdio-common/printf-parse.h +111 10 +fe=(358) +1354 10 +fi=(392) +111 5 +cob=(2) +cfi=(18) +cfn=(3842) 0x0000000004c6d390 +calls=5 0 +* 105 +fe=(358) +1369 10 +fi=(392) +111 5 +fe=(358) +1369 5 +fi=(359) +941 5 +fe=(358) +1373 5 +fi=(359) +941 10 ++2 5 +-2 10 ++2 10 ++1 10 +fe=(358) +1373 30 +cfi=(275) +cfn=(6188) +calls=5 371 +* 25 +* 20 ++4 5 +-4 5 ++4 10 ++4 40 +-57 5 +1687 5 +1358 5 +-8 5 +1687 45 +1423 42 +-3 6 +-5 6 ++8 6 +-11 12 +-1 6 ++12 6 +-13 6 ++13 6 +-14 6 +-1 18 +-1 6 +-1 12 +-1 6 +-1 6 +-1 6 +-1 6 ++17 6 +-3 6 ++4 12 +-92 10 +1741 10 ++1 15 ++3 60 +-40 6 ++2 12 ++8 6 +fi=(392) +111 30 +cob=(2) +cfi=(18) +cfn=(3842) +calls=6 0 +* 126 +fe=(358) +1719 12 +fi=(392) +111 6 +fe=(358) +1719 18 +fi=(359) +943 12 ++1 12 +fe=(358) +1719 42 +cfi=(275) +cfn=(6188) +calls=6 371 +* 359 +* 54 ++2 23 +-33 168 +fi=(359) +943 12 ++1 18 +fe=(358) +1688 30 +cfi=(275) +cfn=(6188) +calls=6 371 +* 422 +* 96 +cob=(2) +cfi=(18) +cfn=(660) +calls=6 0 +* 141 +* 6 + +fl=(74) +fn=(242) +54 16 +-13 48 +-2 16 ++2 16 +-2 32 ++15 16 + +fl=(95) +fn=(286) +29 9 +fi=(391) ++1 45 +fe=(95) +-1 9 + +fl=(315) +fn=(3976) +248 32 ++10 4 +-10 16 ++10 16 ++9 8 +-4 4 ++2 8 ++2 4 +cfn=(3978) find_module_idx +calls=4 145 +* 788 +* 8 ++1 32 +442 48 +273 12 +cfn=(3978) +calls=4 145 +* 788 +* 12 ++1 28 +-10 4 ++16 12 +-3 4 ++3 4 +-17 4 ++8 4 ++13 12 ++76 8 ++6 6 +cob=(2) +cfi=(18) +cfn=(700) +calls=2 0 +* 374 ++1 4 +-1 2 ++1 2 ++3 2 ++1 6 +-1 2 ++1 2 ++40 2 ++6 2 +-7 2 ++3 2 +-2 2 ++6 2 +-3 2 +-3 2 ++6 8 ++21 4 +-72 6 +cob=(2) +cfi=(18) +cfn=(700) +calls=2 0 +* 374 ++1 4 +-1 2 ++1 2 ++3 2 ++13 2 +-6 2 +-7 2 ++6 2 ++7 2 +-12 2 ++5 2 ++1 2 +-1 2 ++3 4 ++1 2 ++3 6 ++19 4 ++4 2 +-4 2 ++4 2 +-47 8 ++1 4 ++39 8 +cfi=(319) +cfn=(3982) +calls=2 63 +* 200 +* 4 ++36 6 +cfi=(319) +cfn=(3982) +calls=2 63 +* 222 +* 2 + +fn=(3978) +145 56 ++9 8 +-9 8 ++10 8 ++2 8 +-12 8 ++10 8 ++4 8 +cfi=(318) +cfn=(3980) +calls=8 32 +* 592 ++1 16 ++3 8 +-4 8 ++1 8 ++1 16 +-1 8 ++1 16 ++2 24 +-2 8 ++3 8 ++1 48 ++1 64 +cob=(2) +cfi=(18) +cfn=(696) +calls=16 0 +* 368 +* 32 ++6 8 ++1 48 +-9 96 ++4 24 ++9 64 + +fn=(3970) +49 2 ++7 1 +-7 5 ++7 1 +cfi=(168) +cfn=(658) +calls=1 -22 +* 425 +* 1 ++1 2 ++4 5 +cfi=(247) +cfn=(2808) +calls=1 -27 +* 27 +* 1 ++1 2 ++5 4 +cfi=(264) +cfn=(2936) +calls=1 -34 +* 11 +* 2 ++3 3 ++10 5 +-2 1 ++2 1 +cfi=(305) +cfn=(3852) +calls=1 -32 +* 20 +* 1 ++1 2 +fi=(316) /build/glibc-sMfBJT/glibc-2.31/iconv/../sysdeps/unix/sysv/linux/not-cancel.h +-21 2 +cfi=(253) +cfn=(2826) +calls=1 -35 +* 6 +fe=(315) ++53 1 ++1 2 ++1 4 ++1 3 ++1 3 ++2 1 +-1 2 ++3 3 ++1 1 ++17 1 +-17 2 ++18 8 + +fl=(93) +fn=(282) +29 12 +fi=(387) ++3 36 +-2 60 +fe=(93) +-1 12 + +fl=(121) +fn=(344) +29 7 +fi=(122) /build/glibc-sMfBJT/glibc-2.31/debug/../sysdeps/x86_64/multiarch/ifunc-memset.h ++13 35 ++4 14 +-1 14 ++12 28 ++2 35 +fe=(121) + +fl=(171) /build/glibc-sMfBJT/glibc-2.31/string/../sysdeps/x86_64/multiarch/strcmp-avx2.S +fn=(698) __strcmp_avx2 +79 525 ++13 525 ++1 525 ++2 525 ++1 525 ++1 525 ++1 525 ++1 525 ++2 297 ++1 297 ++1 297 ++1 297 ++1 297 ++1 297 ++1 297 ++1 294 ++18 294 ++1 294 ++1 294 ++2 294 ++1 294 ++4 3 ++24 3 ++1 3 ++1 3 ++3 3 ++1 3 ++72 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 +636 71 ++2 71 ++1 65 ++1 65 ++1 65 ++9 65 ++1 65 ++3 65 ++1 65 ++3 13 ++4 13 ++1 13 +-1 6 ++1 6 ++39 208 ++1 208 ++4 208 ++11 208 ++1 208 ++1 208 ++2 208 ++1 208 ++10 228 ++1 228 ++2 174 ++1 174 ++1 174 ++1 174 ++1 174 ++1 174 ++1 174 ++2 1 ++2 1 ++7 1 ++1 1 ++3 55 ++1 55 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++1 3 ++2 1 ++2 1 ++13 1 ++1 1 +-1 52 ++1 52 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++1 12 ++2 12 ++1 12 ++1 12 ++13 41 ++1 41 ++1 21 ++1 21 ++1 21 ++1 21 ++1 21 ++1 21 ++2 21 ++1 21 ++1 21 ++21 20 ++1 20 ++2 20 ++1 20 ++1 1 ++1 1 ++1 1 + +fn=(684) __strncmp_avx2 +79 197 ++3 197 ++1 197 ++1 197 ++6 197 ++2 197 ++1 197 ++2 197 ++1 197 ++1 197 ++1 197 ++1 197 ++2 134 ++1 134 ++1 134 ++1 134 ++1 134 ++1 134 ++1 134 ++1 134 ++4 134 ++1 134 ++13 118 ++1 118 ++1 118 ++2 118 ++1 118 +636 44 ++2 44 ++1 30 ++1 30 ++1 30 ++2 30 ++1 30 ++6 26 ++1 26 ++3 26 ++1 26 ++7 14 ++1 14 ++17 22 ++1 22 ++1 22 ++20 45 ++1 45 ++2 45 ++2 45 ++2 45 ++1 45 ++8 43 ++1 43 ++1 43 ++2 43 ++1 43 ++10 63 ++1 63 ++2 28 ++1 28 ++1 28 ++1 28 ++1 28 ++1 28 ++1 28 ++15 35 ++1 35 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 ++17 29 ++1 29 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++1 7 ++2 7 ++1 7 ++1 7 ++2 2 ++1 2 ++4 2 ++1 2 ++5 24 ++1 24 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 ++2 6 ++1 6 ++1 6 ++14 18 ++1 18 ++6 18 ++1 18 ++2 18 ++1 18 + +fl=(268) /build/glibc-sMfBJT/glibc-2.31/ctype/ctype.c +fn=(3192) isspace +34 5480 + +fn=(3196) tolower +45 30 ++1 120 ++1 15 + +fl=(342) +fn=(5134) +485 16 ++9 1 ++14 3 ++4 4 ++9 1 ++4 2 +-4 2 ++4 7 +cob=(5) +cfi=(343) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_rwlock_rdlock.c +cfn=(5136) pthread_rwlock_rdlock +calls=1 24 +* 42 ++3 8 +cob=(5) +cfi=(343) +cfn=(5136) +calls=1 24 +* 42 ++19 1 +-13 2 ++11 1 +-1 1 ++7 1 +-5 1 ++1 1 ++4 1 +cfi=(344) +cfn=(5142) +calls=1 24 +* 6 ++16 1 +-16 1 ++9 1 ++7 7 +cob=(5) +cfi=(343) +cfn=(5136) +calls=1 24 +* 29 ++2 4 +cfi=(345) +cfn=(5144) +calls=1 373 +* 22 ++2 1 +-2 1 ++2 7 +cob=(5) +cfi=(187) +cfn=(748) +calls=1 31 +* 38 ++2 3 ++28 4 ++15 2 +fi=(393) /build/glibc-sMfBJT/glibc-2.31/intl/../include/../locale/localeinfo.h +206 6 +fe=(342) +1539 1 +cfi=(344) +cfn=(5142) +calls=1 24 +* 6 ++29 1 +-29 1 ++29 3 +650 2 +cob=(2) +cfi=(18) +cfn=(660) +calls=1 0 +* 18 ++1 1 +-1 1 ++1 1 +cob=(2) +cfi=(18) +cfn=(660) +calls=1 0 +* 18 +* 16 ++4 2 +-4 1 ++4 1 +-4 1 ++4 1 +cob=(2) +cfi=(18) +cfn=(3860) +calls=1 0 +* 28 +* 5 +cob=(2) +cfi=(18) +cfn=(3848) +calls=1 0 +* 17 ++5 1 +-5 1 ++5 1 +cob=(2) +cfi=(18) +cfn=(660) +calls=1 0 +* 18 +* 20 ++9 3 ++2 2 ++25 4 +-89 1 +-6 3 ++2 3 +cob=(2) +cfi=(18) +cfn=(696) +calls=1 0 +* 23 ++1 2 +833 2 +cob=(2) +cfi=(18) +cfn=(3526) +calls=1 0 +* 13 ++2 8 +cob=(5) +cfi=(187) +cfn=(748) +calls=1 31 +* 38 ++2 8 +cob=(5) +cfi=(187) +cfn=(748) +calls=1 31 +* 38 ++15 3 ++4 6 ++1 12 +660 2 ++24 3 +-1 3 ++6 1 +-4 1 ++4 3 + +fl=(177) +fn=(706) +29 2 +fi=(178) +291 1 +fe=(177) +29 3 ++1 2 +fi=(178) +291 3 +cfn=(710) +calls=1 -2 +* 75822 +* 1 +fi=(176) +3032 2 +1208 2 ++2 4 +3044 4 ++12 3 ++2 3 +cfn=(738) +calls=1 1208 +* 136 +* 1 ++1 7 +fe=(177) +33 5 +fi=(176) +1210 4 +2978 4 +cfn=(734) +calls=1 +3 +* 476 ++69 2 ++1 5 ++1 3 +fe=(177) + +fl=(246) +fn=(2806) +27 1 ++1 9 ++7 1 + +fl=(272) +fn=(3528) +40 15 ++1 3 +cob=(2) +cfi=(18) +cfn=(660) +calls=3 -41 +* 66 +* 3 ++1 6 +cob=(2) +cfi=(18) +cfn=(700) +calls=3 -42 +* 135 ++2 6 ++4 3 +-1 9 ++1 6 +-1 3 +cob=(2) +cfi=(18) +cfn=(910) +calls=3 -47 +* 45 + +fl=(286) +fn=(3584) +33 2 ++1 4 +-1 8 ++10 7 ++16 2 +fi=(289) +941 6 ++2 4 ++1 4 +fe=(286) +59 2 ++1 2 +-1 2 ++1 4 +-1 2 +cfi=(276) +cfn=(3586) +calls=2 901 +* 135 +-16 2 + +fl=(351) +fn=(5954) +29 1945 ++1 9725 ++1 1945 + +fl=(100) +fn=(296) +31 3 +fi=(387) ++1 9 +-2 15 +fe=(100) ++1 3 + +fl=(232) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/btowc.c +fn=(2306) btowc +33 1536 ++5 768 +-5 5376 ++5 4608 ++5 1536 ++4 1152 +fi=(233) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/./wcsmbsload.h ++23 1152 +fe=(232) +-22 384 ++2 384 +-2 384 ++2 384 ++5 1536 ++3 768 +cfi=(234) +cfn=(2310) +calls=384 -21 +* 2304 +* 1152 +cfi=(235) +cfn=(2312) +calls=384 -8 +* 2304 ++41 6912 +fi=(233) +-27 129 ++1 129 +-1 258 ++2 2 +cfi=(312) +cfn=(3962) +calls=1 +79 +* 2885 +* 1 ++2 1 +fe=(232) + +fl=(273) +fn=(3530) +102 10 ++7 1 +-7 3 ++9 1 ++5 1 ++2 2 ++3 4 ++9 4 +484 11 +154 2 ++8 3 +cfi=(274) +cfn=(3532) +calls=1 -77 +* 668 +* 1 ++1 2 ++4 2 +cfi=(280) /build/glibc-sMfBJT/glibc-2.31/libio/fileno.c +cfn=(3554) fileno +calls=1 32 +* 7 +* 4 +cfi=(264) +cfn=(2936) +calls=1 33 +* 11 +* 3 +-27 2 ++30 3 +cob=(2) +cfi=(18) +cfn=(3526) +calls=1 0 +* 13 ++4 1 +-3 1 ++8 1 +-5 1 ++1 1 +-65 1 ++65 1 ++1 1 ++3 1 +-3 1 ++6 5 +cfi=(281) +cfn=(3556) +calls=1 34 +* 703 +* 5 +cfi=(281) +cfn=(3556) +calls=1 34 +* 250 +* 4 ++2 4 +fi=(284) /build/glibc-sMfBJT/glibc-2.31/time/../bits/byteswap.h +52 12 +fe=(273) +189 2 ++2 2 +fi=(284) +52 2 +fe=(273) +192 2 +fi=(284) +52 4 +fe=(273) +194 4 +fi=(284) +52 2 +fe=(273) +187 2 ++7 2 +fi=(284) +52 4 +fe=(273) +188 2 ++2 2 +-3 2 ++1 2 ++1 2 ++1 2 ++4 4 ++3 6 ++6 2 ++1 1 ++5 1 +-6 4 ++6 2 +cfi=(285) +cfn=(3582) +calls=1 32 +* 148 +-9 2 ++9 2 +474 1 ++1 2 +cob=(2) +cfi=(18) +cfn=(3526) +calls=1 0 +* 13 ++1 1 +243 1 +-25 2 ++53 1 +-2 1 ++2 1 +-2 5 ++6 2 +cob=(2) +cfi=(18) +cfn=(700) +calls=1 0 +* 351 +* 1 ++1 2 +fi=(290) /build/glibc-sMfBJT/glibc-2.31/time/../include/alloc_buffer.h +126 5 +fe=(273) +283 1 +-5 1 ++5 2 +-5 1 ++5 1 +-5 1 ++5 1 +cfi=(291) +cfn=(3600) +calls=1 25 +* 25 ++1 5 +cfi=(291) +cfn=(3600) +calls=1 25 +* 25 ++1 4 +-1 1 ++1 1 +cfi=(291) +cfn=(3600) +calls=1 25 +* 25 ++1 4 +-1 1 ++1 1 +cfi=(291) +cfn=(3600) +calls=1 25 +* 25 ++1 4 +-1 1 ++1 1 +cfi=(291) +cfn=(3600) +calls=1 25 +* 25 ++1 1 +-1 1 ++1 1 ++4 2 ++2 2 ++3 6 +cfi=(281) +cfn=(3556) +calls=1 34 +* 205 +* 3 ++3 4 +cfi=(281) +cfn=(3556) +calls=1 34 +* 102 +* 3 ++6 366 ++1 360 +-87 3 +cfi=(288) +cfn=(3594) +calls=1 38 +* 96 ++1 2 ++1 1 ++1 1 +-1 1 ++1 2 ++1 1 +-3 2 ++8 1 +-3 1 ++3 3 ++1 2 +-1 2 ++3 1 ++1 2 ++3 5 ++2 2 ++1 3 ++50 5 +cfi=(291) +cfn=(3600) +calls=1 25 +* 25 +* 2 ++21 2 ++14 3 +fi=(284) +73 3 +fe=(273) +325 1 +-1 2 +fi=(284) +73 357 +fe=(273) +325 119 +-1 238 +-81 2 ++89 5 +cfi=(281) +cfn=(3556) +calls=1 34 +* 95 +* 25 +cfi=(281) +cfn=(3556) +calls=5 34 +* 475 +* 12 +fi=(292) /build/glibc-sMfBJT/glibc-2.31/time/../include/stdio.h +-77 36 +fe=(273) ++82 12 ++2 18 +fi=(292) +-84 36 +fe=(273) ++86 18 ++3 6 +-16 12 ++16 6 +fi=(284) +52 12 +fe=(273) +345 6 +-17 6 ++20 6 +cfi=(281) +cfn=(3556) +calls=1 34 +* 91 +* 2 ++3 2 ++16 4 +fi=(292) +255 18 +fe=(273) +372 18 +-5 18 +fi=(292) +255 18 +fe=(273) +374 4 ++3 2 +fi=(292) +255 18 +fe=(273) +382 12 +-5 20 +fi=(292) +255 18 +fe=(273) +384 4 ++4 2 ++2 2 +fi=(292) +255 6 +fe=(273) +392 2 ++12 1 ++3 1 +-3 1 +cfi=(293) +cfn=(3604) +calls=1 34 +* 534 ++3 1 ++1 24 +cfi=(270) +cfn=(3622) +calls=6 120 +* 850 +* 12 +-1 20 ++7 2 ++2 1 ++11 1 +-13 1 ++2 4 ++2 4 ++1 8 ++2 4 ++4 6 +cfi=(270) +cfn=(3622) +calls=2 120 +* 244 +* 2 ++2 10 ++4 2 ++7 2 ++3 4 ++29 4 ++1 1 +-1 1 ++1 3 +-78 7 +cfi=(281) +cfn=(3556) +calls=1 34 +* 91 +* 2 ++4 3 ++4 4 ++55 1 +-8 1 +-2 1 ++10 1 +-9 1 ++9 3 +-9 1 ++1 1 ++3 4 ++2 1 ++1 2 ++7 4 ++3 3 +-13 4 ++5 7 ++11 8 +-8 2 +-1 2 + +fn=(3624) +582 50842 ++3 9244 +750 9244 ++4 23110 ++1 9244 ++3 4622 ++2 9244 ++20 36976 + +fl=(327) /build/glibc-sMfBJT/glibc-2.31/wcsmbs/../sysdeps/x86_64/multiarch/strcmp-avx2.S +fn=(4340) __wcscmp_avx2 +79 8 ++13 8 ++1 8 ++2 8 ++1 8 ++1 8 ++1 8 ++1 8 ++2 6 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 ++1 6 + +ob=(34) +fl=(199) +fn=(894) +0 5 +cfn=(1252) +calls=1 0 +0 244 +0 4 +cfn=(1276) +calls=1 0 +0 9 +0 4 +cfn=(1282) 0x0000000000078d20 +calls=1 0 +0 56 +0 4 +cfn=(1294) 0x000000000011aa70 +calls=1 0 +0 6560 +0 2 +cfn=(1476) 0x000000000011aa80 +calls=1 0 +0 3 +0 1 +cfn=(1480) +calls=1 0 +0 1203 +0 2 + +fn=(1222) +0 3 +cfn=(1224) 0x0000000000145e80 +calls=1 0 +0 38 +0 6 + +fn=(1252) +0 14 +cob=(2) +cfi=(18) +cfn=(1254) 0x00000000055273f8 +calls=2 0 +0 382 +0 12 +cob=(5) +cfi=(206) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutex_init.c +cfn=(1262) pthread_mutex_init +calls=2 53 +0 60 +0 2 +0 18 + +fn=(1282) +0 8 +cob=(3) +cfi=(134) +cfn=(406) +calls=1 39 +0 41 +0 1 +0 6 + +fn=(1476) +0 3 + +fn=(7792) +0 16 + +fn=(916) +0 3 + +fn=(922) +0 3 + +fn=(1246) +0 3 + +fn=(7788) +0 8 +cob=(3) +cfi=(176) +cfn=(1204) +calls=1 3087 +0 10 +0 1 +0 8 + +fn=(1224) +0 11 +cob=(3) +cfi=(205) +cfn=(1228) +calls=1 29 +0 9 +0 1 +0 17 + +fn=(1312) 0x0000000000137030 +0 26 + +fn=(7662) +0 2 + +fn=(7670) +0 16 +cob=(1) +cfi=(346) +cfn=(5182) +calls=1 29 +0 12 +0 1 +0 12 + +fn=(7784) +0 2 + +fn=(7808) +0 10 +cob=(5) +cfi=(370) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutex_destroy.c +cfn=(6336) pthread_mutex_destroy +calls=2 27 +0 24 +0 2 +0 4 +cob=(3) +cfi=(176) +cfn=(1204) +calls=2 3087 +0 204 +0 2 +0 6 + +fn=(1294) +0 15 +cob=(3) +cfi=(200) +cfn=(888) +calls=1 28 +0 585 +0 1 +0 24 +cfn=(1312) +calls=1 0 +0 26 +0 14 +cfn=(1326) +calls=1 0 +0 260 +0 7 +cfn=(1326) +calls=1 0 +0 270 +0 8 +cfn=(1326) +calls=1 0 +0 278 +0 7 +cfn=(1326) +calls=1 0 +0 286 +0 7 +cfn=(1326) +calls=1 0 +0 294 +0 13 +cfn=(1370) +calls=1 0 +0 260 +0 7 +cfn=(1370) +calls=1 0 +0 270 +0 7 +cfn=(1370) +calls=1 0 +0 278 +0 8 +cfn=(1384) +calls=1 0 +0 260 +0 7 +cfn=(1384) +calls=1 0 +0 270 +0 7 +cfn=(1384) +calls=1 0 +0 278 +0 2 + +ob=(3) +fl=(327) +fn=(4340) +108 6 ++8 6 ++1 6 ++1 6 ++1 6 ++2 7 ++1 7 ++1 7 ++7 7 ++1 7 +634 1 ++4 1 ++31 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++28 1 ++1 1 ++4 1 ++6 1 ++1 1 ++1 1 ++1 1 ++17 2 ++1 2 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++15 1 ++1 1 ++77 1 ++1 1 ++5 1 ++1 1 + +fl=(308) /build/glibc-sMfBJT/glibc-2.31/locale/loadlocale.c +fn=(3858) _nl_intern_locale_data +69 192 ++10 96 ++1 278 ++7 120 ++3 24 +-1 48 ++9 48 +cob=(2) +cfi=(18) +cfn=(700) +calls=24 -98 +* 3830 ++2 48 ++3 24 ++1 24 ++2 24 +-1 24 ++2 24 ++2 24 ++1 72 ++41 72 +-39 48 ++1 48 +-1 1432 ++1 1432 ++11 3700 ++17 8 ++22 192 +-23 60 ++11 2124 ++1 1340 +-42 2244 ++29 52 ++12 80 ++4 140 ++2 210 +-19 28 +-1 12 ++5 64 +-7 184 +-1 76 +-1 636 +-1 24 ++12 356 ++4 528 + +fl=(280) +fn=(3554) +32 3 ++3 15 ++7 3 + +fl=(373) +fn=(6366) +25 3 ++1 18 ++1 3 + +fl=(140) +fn=(428) +52 4 ++3 3 ++14 1 ++8 1 +-10 1 ++1 1 ++1 1 ++8 1 +cfi=(141) +cfn=(430) +calls=1 -47 +* 70 ++8 2 +-5 1 +cfi=(143) +cfn=(436) +calls=1 -51 +* 17 +-18 1 +-7 1 ++7 4 + +fl=(236) /build/glibc-sMfBJT/glibc-2.31/wctype/wctype_l.c +fn=(2324) wctype_l +27 210 ++7 30 +-7 90 ++3 30 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -30 +* 600 ++3 30 +-3 30 ++3 30 ++1 30 ++7 144 ++1 288 +-8 144 ++2 288 +cob=(2) +cfi=(18) +cfn=(660) +calls=144 -36 +* 2920 +* 60 +cob=(2) +cfi=(18) +cfn=(660) +calls=30 -36 +* 620 +* 174 ++2 936 +cob=(2) +cfi=(18) +cfn=(2326) +calls=147 -38 +* 3615 +* 294 ++8 30 ++1 30 ++1 240 + +fl=(352) /build/glibc-sMfBJT/glibc-2.31/posix/nanosleep.c +fn=(5964) nanosleep +26 7776 ++1 5832 +cfi=(353) +cfn=(5966) +calls=1944 +35 +* 83592 ++1 3888 ++6 3888 + +fl=(91) +fn=(278) +29 1 +fi=(387) ++3 3 +-2 5 +fe=(91) +-1 1 + +fl=(302) +fn=(3838) +134 260 ++19 26 +-18 26 +-1 104 ++19 26 +cfi=(239) +cfn=(2792) +calls=26 32 +* 1144 ++6 79 ++1 90 +cob=(2) +cfi=(18) +cfn=(696) +calls=30 0 +* 690 +* 60 +-1 18 ++1 90 ++2 24 ++1 24 +-1 24 ++1 24 +499 72 + +ob=(34) +fl=(199) +fn=(1294) +0 5 +cfn=(1370) +calls=1 0 +0 286 +0 7 +cfn=(1370) +calls=1 0 +0 294 +0 7 +cfn=(1384) +calls=1 0 +0 286 +0 7 +cfn=(1384) +calls=1 0 +0 294 +0 14 +cfn=(1326) +calls=1 0 +0 51 +0 7 +cfn=(1326) +calls=1 0 +0 59 +0 7 +cfn=(1326) +calls=1 0 +0 67 +0 8 +cfn=(1326) +calls=1 0 +0 302 +0 7 +cfn=(1326) +calls=1 0 +0 310 +0 7 +cfn=(1326) +calls=1 0 +0 318 +0 7 +cfn=(1326) +calls=1 0 +0 326 +0 25 +cfn=(1326) +calls=1 0 +0 35 +0 7 +cfn=(1326) +calls=1 0 +0 43 +0 25 + +fn=(7802) +0 5 + +fn=(7824) +0 9 +cob=(2) +cfi=(18) +cfn=(7830) 0x0000000005527420 +calls=1 0 +0 174 +0 1 +cfn=(7834) +calls=1 0 +0 5 +0 3 + +ob=(49) +fl=(224) +fn=(7268) 0x0000000000001070 +0 5 + +fn=(7258) +0 3 + +ob=(3) +fl=(302) +fn=(3838) +499 240 +169 6 +cob=(2) +cfi=(18) +cfn=(686) +calls=2 0 +* 52 ++1 8 ++24 6 ++71 3 ++5 4 +cob=(2) +cfi=(18) +cfn=(660) +calls=2 0 +* 36 +fi=(307) /build/glibc-sMfBJT/glibc-2.31/locale/hashval.h +36 2 ++1 10 ++3 2 +-1 2 ++1 4 +-3 4 ++3 18 +-1 18 ++1 36 +-3 36 ++5 6 +fe=(302) +274 2 ++3 2 +-3 2 ++3 4 ++3 6 ++1 2 +-1 2 ++1 2 +-1 2 ++1 20 ++6 6 ++4 4 ++1 12 +cob=(2) +cfi=(18) +cfn=(696) +calls=2 0 +* 56 +* 10 ++10 6 ++8 2 +-5 2 ++5 6 ++4 10 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 ++1 2 +-5 2 ++4 2 +-4 2 ++5 2 +-5 6 ++4 2 +460 2 +318 2 ++1 2 +-1 2 ++1 2 +460 2 +cob=(2) +cfi=(18) +cfn=(700) +calls=2 0 +* 384 +* 2 ++1 4 ++3 6 +cfi=(272) +cfn=(3528) +calls=2 40 +* 200 +* 4 ++1 4 ++6 2 ++1 8 +-1 2 ++3 50 ++1 48 +-1 2 ++1 4 ++2 144 +cfi=(308) +cfn=(3858) +calls=24 69 +* 19990 +* 24 ++3 48 ++4 24 +-1 24 ++10 24 +-9 24 +-10 48 ++23 4 ++1 2 +-1 2 ++1 4 +160 48 ++42 1 ++3 2 +-3 1 ++3 2 +cfi=(247) +cfn=(2808) +calls=1 34 +* 27 +* 1 ++1 2 +-34 8 +cob=(2) +cfi=(18) +cfn=(3842) +calls=2 0 +* 53 ++1 4 +-1 2 ++1 6 +cfi=(304) +cfn=(3846) +calls=2 311 +* 344 +* 2 ++1 4 ++2 8 +cob=(2) +cfi=(18) +cfn=(682) +calls=2 0 +* 58 +* 4 ++5 4 +cob=(2) +cfi=(18) +cfn=(660) +calls=2 0 +* 44 ++1 2 +-1 2 ++1 2 +cob=(2) +cfi=(18) +cfn=(660) +calls=2 0 +* 36 ++1 6 +-1 2 ++1 32 ++1 4 +-1 2 ++1 6 +cob=(2) +cfi=(18) +cfn=(3848) +calls=2 0 +* 38 +* 8 +cob=(2) +cfi=(18) +cfn=(3848) +calls=2 0 +* 38 +* 10 +cob=(2) +cfi=(18) +cfn=(910) +calls=2 0 +* 36 ++5 4 +cob=(2) +cfi=(18) +cfn=(3526) +calls=2 0 +* 170 +* 2 ++21 4 +cfi=(264) +cfn=(2936) +calls=1 33 +* 11 +* 2 ++15 1 ++2 7 +cfi=(305) +cfn=(3852) +calls=1 48 +* 20 +* 1 ++1 2 +119 2 +-1 1 ++1 1 ++3 3 +-1 1 ++1 1 ++1 2 +-3 2 ++3 2 +235 2 + +ob=(49) +fl=(224) +fn=(7258) +0 6 +cob=(2) +cfi=(18) +cfn=(7264) 0x0000000004831040 +calls=1 0 +0 157 +0 1 +cfn=(7268) +calls=1 0 +0 5 + +ob=(3) +fl=(302) +fn=(3838) +fi=(306) /build/glibc-sMfBJT/glibc-2.31/locale/../sysdeps/unix/sysv/linux/not-cancel.h +60 2 +cfi=(253) +cfn=(2826) +calls=1 -35 +* 6 +fe=(302) +259 1 ++2 1 ++4 1 + +fl=(382) +fn=(8442) +27 3 ++4 1 ++2 2 + +fl=(101) +fn=(298) +31 1 +fi=(386) ++1 4 +fe=(101) +-1 1 + +fl=(83) +fn=(260) +29 26 +fi=(63) ++16 78 +-1 52 ++5 52 +-1 52 ++12 52 ++2 130 +fe=(83) + +fl=(335) +fn=(4860) +23 1 ++1 3 + +ob=(49) +fl=(224) +fn=(7258) +0 3 + +fn=(2118) +0 12 + +ob=(3) +fl=(335) +fn=(4860) +fi=(334) +46 1 +fe=(335) +-22 2 ++6 1 +cfi=(336) +cfn=(4864) +calls=1 +13 +* 75 + +ob=(8) +fl=(151) +fn=(8346) 0x000000000000e7c0 +0 4 + +ob=(19) +fl=(163) +fn=(602) +0 12 + +fn=(8140) 0x0000000000003660 +0 5 + +fn=(8130) +0 9 +cob=(2) +cfi=(18) +cfn=(8136) 0x0000000005ae9340 +calls=1 0 +0 143 +0 1 +cfn=(8140) +calls=1 0 +0 5 +0 3 + +ob=(44) +fl=(217) +fn=(7386) 0x0000000000005d80 +0 5 + +fn=(1844) +0 12 + +fn=(7376) +0 3 + +ob=(8) +fl=(151) +fn=(8346) +0 1 + +fn=(484) +0 12 + +ob=(44) +fl=(217) +fn=(7376) +0 6 +cob=(2) +cfi=(18) +cfn=(7382) 0x0000000004e8e6d0 +calls=1 0 +0 157 +0 1 +cfn=(7386) +calls=1 0 +0 5 +0 3 + +ob=(8) +fl=(151) +fn=(8336) +0 9 +cob=(2) +cfi=(18) +cfn=(8342) 0x0000000005d23310 +calls=1 0 +0 143 +0 1 +cfn=(8346) +calls=1 0 +0 5 +0 3 + +ob=(17) +fl=(161) +fn=(8176) 0x0000000000002290 +0 5 + +fn=(8166) +0 3 + +ob=(32) +fl=(197) +fn=(7860) +0 9 +cob=(2) +cfi=(18) +cfn=(7866) 0x0000000005385430 +calls=1 0 +0 150 +0 1 +cfn=(7870) 0x0000000000010940 +calls=1 0 +0 5 +0 3 + +fn=(852) +0 10 + +ob=(17) +fl=(161) +fn=(8166) +0 6 +cob=(2) +cfi=(18) +cfn=(8172) 0x0000000005c81220 +calls=1 0 +0 142 +0 1 +cfn=(8176) +calls=1 0 +0 5 +0 3 + +fn=(582) +0 12 + +ob=(32) +fl=(197) +fn=(852) +0 2 + +fn=(7870) +0 5 + +ob=(37) +fl=(210) +fn=(7600) 0x00000000000033c0 +0 5 + +fn=(7590) +0 9 +cob=(2) +cfi=(18) +cfn=(7596) 0x000000000533b1f0 +calls=1 0 +0 157 +0 1 +cfn=(7600) +calls=1 0 +0 5 +0 3 + +fn=(1538) +0 12 + +ob=(15) +fl=(159) +fn=(562) +0 12 + +fn=(8202) +0 9 +cob=(2) +cfi=(18) +cfn=(8208) 0x0000000005c8c0d0 +calls=1 0 +0 143 + +ob=(30) +fl=(195) +fn=(7906) 0x0000000000009110 +0 5 + +fn=(832) +0 12 + +ob=(15) +fl=(159) +fn=(8202) +0 1 +cfn=(8212) 0x0000000000001180 +calls=1 0 +0 5 +0 3 + +fn=(8212) +0 5 + +ob=(30) +fl=(195) +fn=(7896) +0 9 +cob=(2) +cfi=(18) +cfn=(7902) 0x000000000570d0d0 +calls=1 0 +0 149 +0 1 +cfn=(7906) +calls=1 0 +0 5 +0 3 + +ob=(28) +fl=(193) +fn=(812) +0 12 + +fn=(7932) +0 5 + +fn=(7936) +0 5 + +fn=(7950) 0x00000000000240a0 +0 5 + +ob=(35) +fl=(208) +fn=(7636) 0x0000000000002280 +0 5 + +fn=(7626) +0 9 +cob=(2) +cfi=(18) +cfn=(7632) 0x0000000005359150 +calls=1 0 +0 157 +0 1 +cfn=(7636) +calls=1 0 +0 5 +0 3 + +fn=(1518) +0 12 + +ob=(13) +fl=(157) +fn=(542) +0 10 + +ob=(28) +fl=(193) +fn=(7940) +0 9 +cob=(2) +cfi=(18) +cfn=(7946) 0x00000000057ecfb0 +calls=1 0 +0 150 + +ob=(13) +fl=(157) +fn=(542) +0 2 + +fn=(8248) 0x00000000000035f0 +0 5 + +fn=(8238) +0 7 + +ob=(28) +fl=(193) +fn=(7940) +0 1 +cfn=(7950) +calls=1 0 +0 5 +0 3 + +ob=(13) +fl=(157) +fn=(8238) +0 2 +cob=(2) +cfi=(18) +cfn=(8244) 0x0000000005cb8310 +calls=1 0 +0 143 +0 1 +cfn=(8248) +calls=1 0 +0 5 +0 3 + +ob=(26) +fl=(191) +fn=(792) +0 12 + +fn=(7994) 0x0000000000003650 +0 5 + +fn=(7984) +0 9 +cob=(2) +cfi=(18) +cfn=(7990) 0x00000000058e2340 +calls=1 0 +0 150 +0 1 +cfn=(7994) +calls=1 0 +0 5 +0 3 + +ob=(11) +fl=(155) +fn=(8284) 0x0000000000006090 +0 5 + +fn=(8274) +0 7 + +ob=(26) +fl=(191) +fn=(7980) +0 5 + +ob=(11) +fl=(155) +fn=(8274) +0 2 +cob=(2) +cfi=(18) +cfn=(8280) 0x0000000005c6b850 +calls=1 0 +0 143 +0 1 +cfn=(8284) +calls=1 0 +0 5 +0 3 + +fn=(522) +0 12 + +ob=(24) +fl=(189) +fn=(772) +0 12 + +fn=(8030) 0x000000000000f760 +0 5 + +fn=(8020) +0 9 +cob=(2) +cfi=(18) +cfn=(8026) 0x00000000059373a0 +calls=1 0 +0 150 +0 1 +cfn=(8030) +calls=1 0 +0 5 +0 3 + +ob=(47) +fl=(220) +fn=(2006) +0 6 +cob=(2) +cfi=(18) +cfn=(1932) 0x00000000049772f0 +calls=1 0 +0 74 +0 5 +cob=(2) +cfi=(18) +cfn=(1932) +calls=1 0 +0 74 + +fn=(2098) +0 6 +cob=(2) +cfi=(18) +cfn=(1932) +calls=1 0 +0 74 +0 4 +cob=(2) +cfi=(18) +cfn=(1932) +calls=1 0 +0 74 +0 5 +cob=(2) +cfi=(18) +cfn=(1932) +calls=1 0 +0 74 + +fn=(2160) std::ios_base::Init::Init() +0 2269 +cob=(2) +cfi=(18) +cfn=(2162) 0x00000000049775c0 +calls=1 0 +0 77892 +0 16 +cob=(2) +cfi=(18) +cfn=(2162) +calls=1 0 +0 39 +0 14 +cob=(2) +cfi=(18) +cfn=(2162) +calls=1 0 +0 39 +0 6 +cob=(2) +cfi=(18) +cfn=(2562) 0x0000000004976ff0 +calls=1 0 +0 824 +0 15 +cob=(2) +cfi=(18) +cfn=(2568) 0x0000000004979290 +calls=1 0 +0 14263 +0 3 +cob=(2) +cfi=(18) +cfn=(2562) +calls=1 0 +0 100 +0 16 +cob=(2) +cfi=(18) +cfn=(2568) +calls=1 0 +0 992 +0 3 +cob=(2) +cfi=(18) +cfn=(2562) +calls=1 0 +0 100 +0 14 +cob=(2) +cfi=(18) +cfn=(2568) +calls=1 0 +0 992 +0 3 +cob=(2) +cfi=(18) +cfn=(2562) +calls=1 0 +0 100 +0 14 +cob=(2) +cfi=(18) +cfn=(2568) +calls=1 0 +0 992 +0 16 +cob=(2) +cfi=(18) +cfn=(2162) +calls=1 0 +0 39 +0 16 +cob=(2) +cfi=(18) +cfn=(2162) +calls=1 0 +0 39 +0 14 +cob=(2) +cfi=(18) +cfn=(2162) +calls=1 0 +0 39 +0 6 +cob=(2) +cfi=(18) +cfn=(2562) +calls=1 0 +0 100 +0 15 +cob=(2) +cfi=(18) +cfn=(2650) 0x0000000004978780 +calls=1 0 +0 10014 +0 3 +cob=(2) +cfi=(18) +cfn=(2562) +calls=1 0 +0 100 +0 16 +cob=(2) +cfi=(18) +cfn=(2650) +calls=1 0 +0 886 +0 3 +cob=(2) +cfi=(18) +cfn=(2562) +calls=1 0 +0 100 +0 14 +cob=(2) +cfi=(18) +cfn=(2650) +calls=1 0 +0 886 +0 3 +cob=(2) +cfi=(18) +cfn=(2562) +calls=1 0 +0 100 +0 14 +cob=(2) +cfi=(18) +cfn=(2650) +calls=1 0 +0 886 +0 7 + +fn=(2200) std::ctype::ctype(unsigned short const*, bool, unsigned long) +0 15 +cob=(2) +cfi=(18) +cfn=(2202) 0x0000000004978fc0 +calls=1 0 +0 3122 +0 101 + +fn=(2246) std::__cxx11::numpunct::_M_initialize_numpunct(__locale_struct*) +0 42 +cob=(2) +cfi=(18) +cfn=(3914) 0x0000000004976460 +calls=2 0 +0 984 +0 12 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 61 +cfn=(3920) 0x00000000000c7cc0 +calls=2 0 +0 144 +0 399 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 6 +cob=(2) +cfi=(18) +cfn=(3792) 0x00000000049779f0 +calls=2 0 +0 44 +0 14 +cob=(2) +cfi=(18) +cfn=(2882) 0x00000000049769f0 +calls=2 0 +0 256 +0 38 +cob=(2) +cfi=(18) +cfn=(3864) 0x0000000004976070 +calls=2 0 +0 114 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) 0x0000000004979e00 +calls=2 0 +0 38 +0 8 + +fn=(2400) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 48 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 30 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) 0x0000000004977170 +calls=2 0 +0 74 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 121 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 16 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 16 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 331 +0 12 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 10 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 40 + +fn=(2446) std::messages::messages(unsigned long) +0 13 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 2 +cob=(2) +cfi=(18) +cfn=(2190) 0x00000000049770d0 +calls=1 0 +0 5 +0 5 + +fn=(2460) std::numpunct::_M_initialize_numpunct(__locale_struct*) +0 42 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 376 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 6 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 44 +0 14 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 256 +0 36 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 331 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 6 + +fn=(2496) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 55 +cob=(2) +cfi=(18) +cfn=(2290) 0x0000000004978be0 +calls=2 0 +0 48 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3990) 0x0000000004976730 +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 38 +0 6 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 8 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 6 +cob=(2) +cfi=(18) +cfn=(2290) +calls=2 0 +0 48 +0 118 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 8 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 14 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 14 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 12 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 22 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 331 +0 12 +cob=(2) +cfi=(18) +cfn=(3996) 0x0000000004978520 +calls=2 0 +0 520 +0 26 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 122 +0 12 +cob=(2) +cfi=(18) +cfn=(3996) +calls=2 0 +0 598 +0 10 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 256 +0 38 + +fn=(2602) bool std::has_facet >(std::locale const&) +0 190 +cob=(2) +cfi=(18) +cfn=(2230) 0x00000000049774f0 +calls=38 0 +0 304 +0 456 +cob=(2) +cfi=(18) +cfn=(2604) 0x0000000004978ef0 +calls=38 0 +0 7188 +0 190 + +fn=(2654) std::basic_ios >::init(std::basic_streambuf >*) +0 28 +cob=(2) +cfi=(18) +cfn=(2574) 0x0000000004979340 +calls=4 0 +0 384 +0 12 +cob=(2) +cfi=(18) +cfn=(2656) 0x0000000004979e20 +calls=4 0 +0 11064 +0 52 + +fn=(2880) std::__cxx11::basic_string, std::allocator >::_M_create(unsigned long&, unsigned long) +0 4036 +cob=(2) +cfi=(18) +cfn=(2882) +calls=31 0 +0 3203 +0 708 +cob=(2) +cfi=(18) +cfn=(2882) +calls=354 0 +0 31094 + +fn=(3230) std::__cxx11::basic_string, std::allocator >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) +0 2975 +cob=(2) +cfi=(18) +cfn=(4542) 0x0000000004978820 +calls=2 0 +0 945 +0 348 +cob=(2) +cfi=(18) +cfn=(3232) +calls=39 0 +0 1671 +0 1288 +cob=(2) +cfi=(18) +cfn=(3242) 0x0000000004979ce0 +calls=37 0 +0 11172 +0 179 + +fn=(3880) 0x00000000000ccd40 +0 12 +cob=(2) +cfi=(18) +cfn=(3882) 0x0000000004976790 +calls=2 0 +0 3136 +0 14 +cob=(2) +cfi=(18) +cfn=(2216) 0x0000000004978160 +calls=2 0 +0 4831 +0 12 + +fn=(3920) +0 112 +cob=(2) +cfi=(18) +cfn=(3914) +calls=8 0 +0 152 +0 312 + +fn=(3960) std::ctype::ctype(__locale_struct*, unsigned long) +0 28 +cob=(2) +cfi=(18) +cfn=(3902) 0x0000000004976400 +calls=2 0 +0 2429 +0 8 +cob=(2) +cfi=(18) +cfn=(2284) 0x00000000049777d0 +calls=2 0 +0 45089 +0 6 + +fn=(4098) std::messages::messages(__locale_struct*, char const*, unsigned long) +0 38 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 8 +cob=(2) +cfi=(18) +cfn=(2612) 0x0000000004978d30 +calls=2 0 +0 66 +0 8 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 18 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 138 +0 6 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 264 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 111 +0 4 + +fn=(4228) std::__cxx11::numpunct::~numpunct() +0 12 +cob=(2) +cfi=(18) +cfn=(4230) 0x0000000004979160 +calls=2 0 +0 2181 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) 0x0000000004977120 +calls=2 0 +0 196 + +fn=(4229) std::__cxx11::numpunct::~numpunct()'2 +0 32 +cob=(2) +cfi=(18) +cfn=(4234) 0x0000000004976010 +calls=2 0 +0 204 +0 12 +cfn=(4238) std::__numpunct_cache::~__numpunct_cache() +calls=2 0 +0 1068 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) 0x0000000004979800 +calls=2 0 +0 8 + +fn=(4276) std::__cxx11::money_put > >::~money_put() +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4292) std::time_put > >::~time_put() +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4342) std::__moneypunct_cache::~__moneypunct_cache() +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 12 +cob=(2) +cfi=(18) +cfn=(4344) 0x0000000004977570 +calls=2 0 +0 894 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4343) std::__moneypunct_cache::~__moneypunct_cache()'2 +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4348) std::__cxx11::moneypunct::~moneypunct() +0 12 +cob=(2) +cfi=(18) +cfn=(4350) 0x0000000004977290 +calls=2 0 +0 2825 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4349) std::__cxx11::moneypunct::~moneypunct()'2 +0 30 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 18 +cob=(2) +cfi=(18) +cfn=(4336) 0x0000000004979900 +calls=2 0 +0 54 +0 16 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 14 +cfn=(4354) std::__moneypunct_cache::~__moneypunct_cache() +calls=2 0 +0 1100 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 4 + +fn=(4370) std::__timepunct_cache::~__timepunct_cache() +0 8 +cob=(2) +cfi=(18) +cfn=(4372) 0x0000000004979270 +calls=2 0 +0 842 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4371) std::__timepunct_cache::~__timepunct_cache()'2 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4414) std::numpunct::~numpunct() +0 12 +cob=(2) +cfi=(18) +cfn=(4416) 0x00000000049785c0 +calls=2 0 +0 1259 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4415) std::numpunct::~numpunct()'2 +0 30 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 20 +cob=(2) +cfi=(18) +cfn=(4240) 0x0000000004979d90 +calls=2 0 +0 34 +0 4 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4440) std::messages::~messages() +0 8 +cob=(2) +cfi=(18) +cfn=(4442) 0x0000000004979780 +calls=2 0 +0 1701 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 196 + +fn=(4441) std::messages::~messages()'2 +0 20 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 12 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 235 +0 4 +cob=(2) +cfi=(18) +cfn=(4190) 0x0000000004977810 +calls=2 0 +0 626 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4480) std::locale::classic() +0 15 +cfn=(2168) 0x00000000000be5d0 +calls=5 0 +0 100 +0 15 + +fn=(4664) std::ctype::_M_widen_init() const +0 1077 +cob=(2) +cfi=(18) +cfn=(3074) 0x00000000049791f0 +calls=1 0 +0 48 +0 10 + +fn=(4676) std::istream::sentry::sentry(std::istream&, bool) +0 231 +cob=(2) +cfi=(18) +cfn=(4756) 0x0000000004979a20 +calls=1 0 +0 9 +0 99 + +fn=(4692) std::__basic_file::fd() +0 6 +cob=(2) +cfi=(18) +cfn=(4694) 0x0000000004976360 +calls=2 0 +0 914 + +fn=(4716) std::__cxx11::basic_string, std::allocator >::find_last_not_of(char const*, unsigned long, unsigned long) const +0 759 +cob=(2) +cfi=(18) +cfn=(3872) 0x0000000004976900 +calls=33 0 +0 824 +0 297 + +fn=(5102) 0x00000000000d6810 +0 92 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 36 +0 18 + +fn=(5150) std::out_of_range::out_of_range(char const*) +0 4 +cob=(2) +cfi=(18) +cfn=(5152) 0x0000000004976650 +calls=1 0 +0 1937 +0 5 + +fn=(5156) std::logic_error::logic_error(char const*) +0 17 +cob=(2) +cfi=(18) +cfn=(3792) +calls=1 0 +0 26 +0 7 +cob=(2) +cfi=(18) +cfn=(5158) 0x00000000049763a0 +calls=1 0 +0 1059 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=1 0 +0 14 +0 17 + +fn=(5638) +0 130 +cob=(2) +cfi=(18) +cfn=(5786) 0x00000000049766b0 +calls=1 0 +0 811 +0 4 +cob=(2) +cfi=(18) +cfn=(5786) +calls=1 0 +0 19 +0 3 +cob=(2) +cfi=(18) +cfn=(5792) 0x0000000004979f00 +calls=1 0 +0 797 +0 52 +cob=(2) +cfi=(18) +cfn=(5640) 0x0000000004977800 +calls=3 0 +0 1009 +0 27 +cfn=(5646) 0x00000000000a9980 +calls=3 0 +0 1075 +0 12 +cfn=(5666) 0x00000000000a9900 +calls=3 0 +0 25 +0 12 +cob=(2) +cfi=(18) +cfn=(5670) 0x00000000049789b0 +calls=3 0 +0 886 +0 42 +cfn=(5666) +calls=3 0 +0 51 +0 15 +cfn=(5690) 0x00000000000a9660 +calls=3 0 +0 123 +0 15 +cfn=(5666) +calls=3 0 +0 51 +0 15 +cfn=(5690) +calls=3 0 +0 123 +0 15 +cfn=(5666) +calls=3 0 +0 51 +0 15 +cfn=(5690) +calls=3 0 +0 109 +0 151 +cfn=(5710) 0x00000000000a97b0 +calls=1 0 +0 58 +0 8 +cfn=(5728) 0x00000000000a95e0 +calls=1 0 +0 56 +0 15 + +fn=(6144) std::time_put > >::put(std::ostreambuf_iterator >, std::ios_base&, char, tm const*, char const*, char const*) const +0 76 +cob=(2) +cfi=(18) +cfn=(2618) 0x00000000049763c0 +calls=4 0 +0 696 +0 1228 +cfn=(6146) std::time_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, tm const*, char, char) const +calls=24 0 +0 21329 +0 432 + +fn=(7328) +0 4 +cob=(2) +cfi=(18) +cfn=(7322) 0x0000000004978000 +calls=1 0 +0 4 + +fn=(1964) __cxa_guard_release +0 80 + +fn=(1968) +0 9 +cob=(2) +cfi=(18) +cfn=(1970) 0x0000000004976f10 +calls=1 0 +0 1442 +0 8 + +fn=(2240) std::codecvt::codecvt(unsigned long) +0 13 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 5 + +fn=(2276) std::__cxx11::messages::messages(unsigned long) +0 13 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 2 +cob=(2) +cfi=(18) +cfn=(2190) +calls=1 0 +0 5 +0 5 + +fn=(2334) std::codecvt::codecvt(unsigned long) +0 26 +cob=(2) +cfi=(18) +cfn=(2202) +calls=2 0 +0 42 +0 10 + +fn=(2370) std::__cxx11::messages::messages(unsigned long) +0 13 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 2 +cob=(2) +cfi=(18) +cfn=(2190) +calls=1 0 +0 5 +0 5 + +fn=(2414) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 48 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 20 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 30 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 28 +cfn=(3920) +calls=2 0 +0 144 +0 107 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 34 +0 12 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 16 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 14 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 12 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 10 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 14 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 40 + +fn=(2578) std::ios_base::_M_init() +0 532 +cob=(2) +cfi=(18) +cfn=(2162) +calls=38 0 +0 1482 +0 114 +cob=(2) +cfi=(18) +cfn=(2580) 0x0000000004978600 +calls=38 0 +0 1455 +0 76 +cob=(2) +cfi=(18) +cfn=(2586) 0x0000000004978a90 +calls=38 0 +0 1226 +0 266 + +fn=(2642) bool std::has_facet > > >(std::locale const&) +0 190 +cob=(2) +cfi=(18) +cfn=(2230) +calls=38 0 +0 304 +0 456 +cob=(2) +cfi=(18) +cfn=(2604) +calls=38 0 +0 3458 +0 190 + +fn=(3804) std::__cxx11::basic_string, std::allocator >::compare(char const*) const +0 132 +cob=(2) +cfi=(18) +cfn=(3792) +calls=12 0 +0 224 +0 108 +cob=(2) +cfi=(18) +cfn=(3074) +calls=12 0 +0 162 +0 96 + +fn=(3948) std::__timepunct::__timepunct(__locale_struct*, char const*, unsigned long) +0 40 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 8 +cob=(2) +cfi=(18) +cfn=(2612) +calls=2 0 +0 66 +0 10 +cob=(2) +cfi=(18) +cfn=(2266) 0x0000000004978ab0 +calls=2 0 +0 4894 +0 16 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 138 +0 6 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 264 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 111 +0 4 + +fn=(4434) std::money_get > >::~money_get() +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4468) std::money_put > >::~money_put() +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4486) std::locale::locale(std::locale const&) +0 221 + +fn=(4614) 0x00000000000cc400 +0 9 + +fn=(4630) std::basic_filebuf >::_M_allocate_internal_buffer() +0 9 +cob=(2) +cfi=(18) +cfn=(3864) +calls=1 0 +0 204 +0 4 + +fn=(4650) std::__cxx11::basic_string, std::allocator >::resize(unsigned long, char) +0 39 +cob=(2) +cfi=(18) +cfn=(6374) 0x000000000497a150 +calls=3 0 +0 1931 + +fn=(6020) std::basic_ostream >& std::__ostream_insert >(std::basic_ostream >&, char const*, long) +0 414 +cob=(2) +cfi=(18) +cfn=(5988) 0x0000000004979f30 +calls=23 0 +0 529 +0 759 +cfn=(5994) std::basic_streambuf >::xsputn(char const*, long) +calls=23 0 +0 3751 +0 115 + +fn=(6042) std::__cxx11::basic_ostringstream, std::allocator >::basic_ostringstream() +0 66 +cob=(2) +cfi=(18) +cfn=(2562) +calls=6 0 +0 600 +0 78 +cob=(2) +cfi=(18) +cfn=(2568) +calls=6 0 +0 5952 +0 102 +cob=(2) +cfi=(18) +cfn=(2162) +calls=6 0 +0 234 +0 66 +cob=(2) +cfi=(18) +cfn=(2568) +calls=6 0 +0 5952 +0 36 + +fn=(6096) std::__cxx11::basic_stringstream, std::allocator >::basic_stringstream() +0 44 +cob=(2) +cfi=(18) +cfn=(2562) +calls=4 0 +0 400 +0 56 +cob=(2) +cfi=(18) +cfn=(2568) +calls=4 0 +0 3968 +0 28 +cob=(2) +cfi=(18) +cfn=(2568) +calls=4 0 +0 3968 +0 76 +cob=(2) +cfi=(18) +cfn=(2162) +calls=4 0 +0 156 +0 44 +cob=(2) +cfi=(18) +cfn=(2568) +calls=4 0 +0 3968 +0 24 + +fn=(6140) std::time_put > > const& std::use_facet > > >(std::locale const&) +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=4 0 +0 32 +0 44 +cob=(2) +cfi=(18) +cfn=(2604) +calls=4 0 +0 364 +0 16 + +fn=(6574) +0 884 +cob=(2) +cfi=(18) +cfn=(7202) 0x0000000004978530 +calls=1 0 +0 1666 +0 2 +cob=(2) +cfi=(18) +cfn=(7202) +calls=1 0 +0 93 +0 2 +cob=(2) +cfi=(18) +cfn=(7202) +calls=1 0 +0 93 +0 2 +cob=(2) +cfi=(18) +cfn=(7220) 0x0000000004979570 +calls=1 0 +0 1065 +0 2 +cob=(2) +cfi=(18) +cfn=(7220) +calls=1 0 +0 93 +0 2 +cob=(2) +cfi=(18) +cfn=(7220) +calls=1 0 +0 93 +0 2 + +fn=(7224) std::basic_ostream >::flush() +0 30 +cfn=(7226) __gnu_cxx::stdio_sync_filebuf >::sync() +calls=3 0 +0 228 +0 15 + +fn=(7306) +0 2 + +fn=(4578) std::basic_filebuf >::basic_filebuf() +0 20 +cob=(2) +cfi=(18) +cfn=(2162) +calls=1 0 +0 39 +0 10 +cob=(2) +cfi=(18) +cfn=(4580) 0x0000000004979b30 +calls=1 0 +0 947 +0 17 +cob=(2) +cfi=(18) +cfn=(4586) 0x0000000004977a50 +calls=1 0 +0 1151 +0 4 +cob=(2) +cfi=(18) +cfn=(4592) 0x0000000004978cf0 +calls=1 0 +0 1157 +0 7 + +fn=(1928) std::error_category::error_category() +0 10 + +fn=(2206) std::locale::facet::_S_get_c_locale() +0 336 +cob=(2) +cfi=(18) +cfn=(2172) 0x0000000004977600 +calls=34 0 +0 272 +cob=(2) +cfi=(18) +cfn=(2173) 0x0000000004977600'2 +calls=14 0 +0 2312 +0 192 + +fn=(2214) std::locale::facet::_S_create_c_locale(__locale_struct*&, char const*, __locale_struct*) +0 15 +cob=(2) +cfi=(18) +cfn=(2216) +calls=3 0 +0 42177 +0 15 + +fn=(2528) std::messages::messages(unsigned long) +0 13 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 2 +cob=(2) +cfi=(18) +cfn=(2190) +calls=1 0 +0 5 +0 5 + +fn=(2628) bool std::has_facet > > >(std::locale const&) +0 190 +cob=(2) +cfi=(18) +cfn=(2230) +calls=38 0 +0 304 +0 456 +cob=(2) +cfi=(18) +cfn=(2604) +calls=38 0 +0 3458 +0 190 + +fn=(2648) std::num_get > > const& std::use_facet > > >(std::locale const&) +0 190 +cob=(2) +cfi=(18) +cfn=(2230) +calls=38 0 +0 304 +0 418 +cob=(2) +cfi=(18) +cfn=(2604) +calls=38 0 +0 3458 +0 152 + +fn=(3210) operator delete(void*) +0 3770 +cob=(2) +cfi=(18) +cfn=(3212) 0x0000000004977980 +calls=1885 0 +0 187367 + +fn=(5864) __cxa_get_globals_fast +0 4 +cob=(2) +cfi=(18) +cfn=(5178) 0x0000000004977e20 +calls=1 0 +0 14 +0 3 + +fn=(4222) std::codecvt::~codecvt() +0 12 +cob=(2) +cfi=(18) +cfn=(4224) 0x0000000004979d10 +calls=2 0 +0 1473 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 196 + +fn=(4223) std::codecvt::~codecvt()'2 +0 20 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 524 +0 16 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4244) std::num_get > >::~num_get() +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 196 + +fn=(4324) std::num_get > >::~num_get() +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4392) std::codecvt::~codecvt() +0 8 +cob=(2) +cfi=(18) +cfn=(4394) 0x00000000049767c0 +calls=2 0 +0 897 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4393) std::codecvt::~codecvt()'2 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4540) std::ctype::do_tolower(char) const +0 70 + +fn=(4600) std::basic_filebuf >::open(char const*, std::_Ios_Openmode) +0 12 +cob=(2) +cfi=(18) +cfn=(4602) 0x00000000049790b0 +calls=1 0 +0 851 +0 7 +cob=(2) +cfi=(18) +cfn=(4608) 0x0000000004976f30 +calls=1 0 +0 2417 +0 2 +cob=(2) +cfi=(18) +cfn=(4602) +calls=1 0 +0 6 +0 4 +cob=(2) +cfi=(18) +cfn=(4626) 0x0000000004976af0 +calls=1 0 +0 1367 +0 22 + +fn=(4634) std::basic_ios >::clear(std::_Ios_Iostate) +0 28 + +fn=(4706) std::__cxx11::basic_string, std::allocator >::find(char, unsigned long) const +0 308 +cob=(2) +cfi=(18) +cfn=(3872) +calls=22 0 +0 508 +0 198 + +fn=(4774) std::basic_filebuf >::close() +0 12 +cob=(2) +cfi=(18) +cfn=(4602) +calls=1 0 +0 6 +0 5 +cob=(2) +cfi=(18) +cfn=(4776) 0x0000000004977940 +calls=1 0 +0 1123 +0 5 +cob=(2) +cfi=(18) +cfn=(4782) 0x0000000004977ba0 +calls=1 0 +0 1324 +0 15 +cob=(2) +cfi=(18) +cfn=(4788) 0x0000000004979610 +calls=1 0 +0 2228 +0 13 + +fn=(4802) std::__basic_file::~__basic_file() +0 2 +cob=(2) +cfi=(18) +cfn=(4788) +calls=1 0 +0 17 + +fn=(4806) std::ios_base::~ios_base() +0 104 +cob=(2) +cfi=(18) +cfn=(4808) 0x00000000049781a0 +calls=13 0 +0 1118 +0 26 +cob=(2) +cfi=(18) +cfn=(4814) 0x00000000049765d0 +calls=13 0 +0 1072 +0 91 +cob=(2) +cfi=(18) +cfn=(2586) +calls=13 0 +0 154 + +fn=(5170) __cxa_throw +0 9 +cob=(2) +cfi=(18) +cfn=(5172) 0x0000000004978a70 +calls=1 0 +0 2225 +0 5 +cob=(2) +cfi=(18) +cfn=(5184) 0x0000000004978ae0 +calls=1 0 +0 2396 +0 4 +cob=(2) +cfi=(18) +cfn=(5202) 0x0000000004977bb0 +calls=1 0 +0 26504 + +fn=(5710) +0 21 +cfn=(5690) +calls=1 0 +0 31 +0 6 + +fn=(6014) std::__cxx11::basic_stringbuf, std::allocator >::_M_sync(char*, unsigned long, unsigned long) +0 290 +cob=(2) +cfi=(18) +cfn=(5998) 0x0000000004977cd0 +calls=7 0 +0 84 +0 73 +cob=(2) +cfi=(18) +cfn=(5998) +calls=4 0 +0 48 + +fn=(6088) std::locale::_Impl::_Impl(std::locale::_Impl const&, unsigned long) +0 80 +cob=(2) +cfi=(18) +cfn=(3864) +calls=4 0 +0 405 +0 2164 +cob=(2) +cfi=(18) +cfn=(3864) +calls=4 0 +0 405 +0 1868 +cob=(2) +cfi=(18) +cfn=(3864) +calls=4 0 +0 244 +0 128 +cob=(2) +cfi=(18) +cfn=(3792) +calls=4 0 +0 72 +0 20 +cob=(2) +cfi=(18) +cfn=(3864) +calls=4 0 +0 228 +0 32 +cob=(2) +cfi=(18) +cfn=(3232) +calls=4 0 +0 76 +0 720 + +fn=(6152) std::__timepunct const& std::use_facet >(std::locale const&) +0 120 +cob=(2) +cfi=(18) +cfn=(2230) +calls=24 0 +0 192 +0 264 +cob=(2) +cfi=(18) +cfn=(2604) +calls=24 0 +0 2184 +0 96 + +fn=(6422) std::ostream& std::ostream::_M_insert(long) +0 306 +cob=(2) +cfi=(18) +cfn=(5988) +calls=18 0 +0 414 +0 320 +cfn=(6424) std::num_put > >::do_put(std::ostreambuf_iterator >, std::ios_base&, char, long) const +calls=14 0 +0 2940 +0 36 +cfn=(6424) +calls=4 0 +0 2228 +0 412 + +fn=(7206) std::ostream::flush() +0 30 +cfn=(7208) __gnu_cxx::stdio_sync_filebuf >::sync() +calls=3 0 +0 1093 +0 15 + +fn=(7320) +0 4 +cob=(2) +cfi=(18) +cfn=(7322) +calls=1 0 +0 793 + +fn=(2154) operator new(unsigned long) +0 13202 +cob=(2) +cfi=(18) +cfn=(1970) +calls=1886 0 +0 223851 +0 7544 + +fn=(2194) std::locale::facet::_S_get_c_name() +0 93 + +fn=(2358) std::__timepunct::__timepunct(std::__timepunct_cache*, unsigned long) +0 15 +cob=(2) +cfi=(18) +cfn=(2190) +calls=1 0 +0 5 +0 4 +cob=(2) +cfi=(18) +cfn=(2360) 0x0000000004977fe0 +calls=1 0 +0 1244 +0 4 + +fn=(2364) std::__timepunct::_M_initialize_timepunct(__locale_struct*) +0 31 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 13 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 98 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 256 +0 108 + +fn=(2482) std::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 55 +cob=(2) +cfi=(18) +cfn=(2290) +calls=2 0 +0 48 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 38 +0 6 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 8 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 6 +cob=(2) +cfi=(18) +cfn=(2290) +calls=2 0 +0 48 +0 118 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 8 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 14 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 14 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 12 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 22 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 12 +cob=(2) +cfi=(18) +cfn=(3996) +calls=2 0 +0 520 +0 26 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 342 +0 12 +cob=(2) +cfi=(18) +cfn=(3996) +calls=2 0 +0 546 +0 10 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 256 +0 38 + +fn=(2572) std::basic_ios >::init(std::basic_streambuf >*) +0 238 +cob=(2) +cfi=(18) +cfn=(2574) +calls=34 0 +0 5623 +0 102 +cob=(2) +cfi=(18) +cfn=(2592) 0x0000000004979500 +calls=34 0 +0 39317 +0 442 + +fn=(2590) +0 954 +cob=(2) +cfi=(18) +cfn=(4204) 0x0000000004976d80 +calls=6 0 +0 79566 +0 18 +cob=(2) +cfi=(18) +cfn=(3818) +calls=6 0 +0 548 + +fn=(2608) __dynamic_cast +0 10656 +cfn=(2630) __cxxabiv1::__si_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const +calls=214 0 +0 7918 +cfn=(2610) __cxxabiv1::__vmi_class_type_info::__do_dyncast(long, __cxxabiv1::__class_type_info::__sub_kind, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info const*, void const*, __cxxabiv1::__class_type_info::__dyncast_result&) const +calls=119 0 +0 11733 +0 6660 + +fn=(2678) bool std::has_facet > > >(std::locale const&) +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=4 0 +0 32 +0 48 +cob=(2) +cfi=(18) +cfn=(2604) +calls=4 0 +0 364 +0 20 + +fn=(2712) std::bad_alloc::~bad_alloc() +0 15 +cob=(2) +cfi=(18) +cfn=(2714) 0x0000000004979170 +calls=3 0 +0 745 + +fn=(3080) std::_Rb_tree_decrement(std::_Rb_tree_node_base*) +0 2402 + +fn=(3810) std::__cxx11::basic_string, std::allocator >::reserve(unsigned long) +0 325 +cob=(2) +cfi=(18) +cfn=(3248) 0x00000000049784a0 +calls=13 0 +0 1065 +0 286 + +fn=(3816) std::__cxx11::basic_string, std::allocator >::_M_append(char const*, unsigned long) +0 1580 +cob=(2) +cfi=(18) +cfn=(3232) +calls=70 0 +0 1080 +0 755 +cob=(2) +cfi=(18) +cfn=(3242) +calls=15 0 +0 3917 +0 90 + +fn=(3826) std::__cxx11::basic_string, std::allocator >::_M_erase(unsigned long, unsigned long) +0 38 + +fn=(3954) std::__cxx11::messages::messages(__locale_struct*, char const*, unsigned long) +0 38 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 8 +cob=(2) +cfi=(18) +cfn=(2612) +calls=2 0 +0 66 +0 8 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 18 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 138 +0 6 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 264 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 111 +0 4 + +fn=(4256) std::__moneypunct_cache::~__moneypunct_cache() +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 12 +cob=(2) +cfi=(18) +cfn=(4258) 0x0000000004977650 +calls=2 0 +0 894 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4257) std::__moneypunct_cache::~__moneypunct_cache()'2 +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4262) std::__cxx11::moneypunct::~moneypunct() +0 12 +cob=(2) +cfi=(18) +cfn=(4264) 0x0000000004978a20 +calls=2 0 +0 2802 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4263) std::__cxx11::moneypunct::~moneypunct()'2 +0 32 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 20 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 16 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 12 +cfn=(4268) std::__moneypunct_cache::~__moneypunct_cache() +calls=2 0 +0 1100 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4274) std::__cxx11::money_get > >::~money_get() +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4290) std::__cxx11::time_get > >::~time_get() +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4436) std::money_put > >::~money_put() +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4452) std::collate::~collate() +0 16 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 659 +0 4 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4596) std::codecvt const& std::use_facet >(std::locale const&) +0 5 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 11 +cob=(2) +cfi=(18) +cfn=(2604) +calls=1 0 +0 91 +0 4 + +fn=(4730) std::__cxx11::basic_string, std::allocator >::_M_assign(std::__cxx11::basic_string, std::allocator > const&) +0 1047 +cob=(2) +cfi=(18) +cfn=(3232) +calls=21 0 +0 339 +0 50 +cob=(2) +cfi=(18) +cfn=(3248) +calls=2 0 +0 293 +0 92 + +fn=(4768) operator delete(void*, unsigned long) +0 680 +cob=(2) +cfi=(18) +cfn=(3818) +calls=340 0 +0 36616 + +fn=(4780) std::basic_filebuf >::_M_terminate_output() +0 29 + +fn=(4786) std::basic_filebuf >::_M_destroy_internal_buffer() +0 9 +cob=(2) +cfi=(18) +cfn=(4234) +calls=1 0 +0 138 +0 11 + +fn=(4812) std::ios_base::_M_call_callbacks(std::ios_base::event) +0 187 + +fn=(4970) std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) +0 82 + +fn=(5078) std::__throw_out_of_range_fmt(char const*, ...) +0 4 +cob=(2) +cfi=(18) +cfn=(5166) 0x0000000004978100 +calls=1 0 +0 31806 +0 19 +cob=(2) +cfi=(18) +cfn=(3792) +calls=1 0 +0 31 +0 25 +cfn=(5080) 0x00000000000d6900 +calls=1 0 +0 903 +0 2 +cob=(2) +cfi=(18) +cfn=(5120) 0x0000000004977a20 +calls=1 0 +0 1015 +0 3 +cob=(2) +cfi=(18) +cfn=(5126) 0x0000000004977040 +calls=1 0 +0 1550 +0 3 +cob=(2) +cfi=(18) +cfn=(5146) 0x000000000497a050 +calls=1 0 +0 2796 +0 3 + +fn=(5730) std::type_info::__is_pointer_p() const +0 3 + +fn=(5992) std::ostream::sentry::sentry(std::ostream&) +0 1050 + +fn=(6580) +0 110 +cob=(2) +cfi=(18) +cfn=(3818) +calls=5 0 +0 540 +0 15 + +fn=(1958) __cxa_guard_acquire +0 190 + +fn=(2046) +0 50 + +fn=(2166) std::locale::locale() +0 567 +cfn=(2168) +calls=81 0 +0 78764 +0 810 + +fn=(2340) std::__cxx11::numpunct::_M_initialize_numpunct(__locale_struct*) +0 42 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 376 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 6 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 44 +0 14 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 256 +0 36 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 331 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 6 + +fn=(2346) std::__cxx11::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 55 +cob=(2) +cfi=(18) +cfn=(2290) +calls=2 0 +0 48 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 964 +0 8 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 42 +0 6 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 8 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 42 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 6 +cob=(2) +cfi=(18) +cfn=(2290) +calls=2 0 +0 48 +0 118 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 8 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 14 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 14 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 12 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 22 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 12 +cob=(2) +cfi=(18) +cfn=(3996) +calls=2 0 +0 3686 +0 26 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 122 +0 12 +cob=(2) +cfi=(18) +cfn=(3996) +calls=2 0 +0 546 +0 10 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 256 +0 38 + +fn=(2660) std::basic_ios >::_M_cache_locale(std::locale const&) +0 32 +cob=(2) +cfi=(18) +cfn=(2662) 0x0000000004977070 +calls=4 0 +0 1376 +0 16 +cob=(2) +cfi=(18) +cfn=(2668) 0x0000000004976340 +calls=4 0 +0 1392 +0 12 +cob=(2) +cfi=(18) +cfn=(2674) 0x0000000004976c30 +calls=4 0 +0 1744 +0 16 +cob=(2) +cfi=(18) +cfn=(2680) 0x0000000004978c00 +calls=4 0 +0 1776 +0 12 +cob=(2) +cfi=(18) +cfn=(2686) 0x00000000049785b0 +calls=4 0 +0 1752 +0 16 +cob=(2) +cfi=(18) +cfn=(2692) 0x00000000049798f0 +calls=4 0 +0 1784 +0 20 + +fn=(2684) std::num_put > > const& std::use_facet > > >(std::locale const&) +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=4 0 +0 32 +0 44 +cob=(2) +cfi=(18) +cfn=(2604) +calls=4 0 +0 364 +0 16 + +fn=(2690) bool std::has_facet > > >(std::locale const&) +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=4 0 +0 32 +0 48 +cob=(2) +cfi=(18) +cfn=(2604) +calls=4 0 +0 364 +0 20 + +fn=(2726) std::bad_exception::~bad_exception() +0 15 +cob=(2) +cfi=(18) +cfn=(2714) +calls=3 0 +0 12 + +fn=(5886) std::logic_error::~logic_error() +0 20 +cob=(2) +cfi=(18) +cfn=(2714) +calls=1 0 +0 4 +0 6 +cob=(2) +cfi=(18) +cfn=(5888) 0x0000000004976740 +calls=1 0 +0 904 +0 4 + +fn=(3866) operator new[](unsigned long) +0 246 +cob=(2) +cfi=(18) +cfn=(2882) +calls=123 0 +0 11145 + +fn=(3906) std::locale::facet::_S_clone_c_locale(__locale_struct*&) +0 84 +cob=(2) +cfi=(18) +cfn=(3882) +calls=28 0 +0 31550 + +fn=(4208) std::locale::_Impl::~_Impl() +0 3892 +cob=(2) +cfi=(18) +cfn=(4234) +calls=6 0 +0 552 +0 1890 +cob=(2) +cfi=(18) +cfn=(4234) +calls=6 0 +0 552 +0 270 +cob=(2) +cfi=(18) +cfn=(4234) +calls=24 0 +0 2686 +0 294 +cob=(2) +cfi=(18) +cfn=(4234) +calls=6 0 +0 552 +0 976 +cob=(50) +cfi=(225) +cfn=(6172) boost::date_time::time_facet > >::~time_facet() +calls=4 0 +0 2696 +cfn=(4472) std::messages::~messages() +calls=2 0 +0 4112 +cfn=(4470) std::time_get > >::~time_get() +calls=2 0 +0 244 +cfn=(4468) +calls=2 0 +0 244 +cfn=(4466) std::money_get > >::~money_get() +calls=2 0 +0 244 +cfn=(4460) std::moneypunct::~moneypunct() +calls=2 0 +0 2100 +cfn=(4454) std::moneypunct::~moneypunct() +calls=2 0 +0 2105 +cfn=(4452) +calls=2 0 +0 909 +cfn=(4446) std::numpunct::~numpunct() +calls=2 0 +0 1497 +cfn=(4440) +calls=2 0 +0 1911 +cfn=(4438) std::time_get > >::~time_get() +calls=2 0 +0 244 +cfn=(4436) +calls=2 0 +0 244 +cfn=(4434) +calls=2 0 +0 244 +cfn=(4428) std::moneypunct::~moneypunct() +calls=2 0 +0 2025 +cfn=(4422) std::moneypunct::~moneypunct() +calls=2 0 +0 2033 +cfn=(4420) std::collate::~collate() +calls=2 0 +0 876 +cfn=(4414) +calls=2 0 +0 1497 +cfn=(4406) _ZNSt7codecvtIDiDu11__mbstate_tED0Ev +calls=2 0 +0 1121 +cfn=(4398) _ZNSt7codecvtIDsDu11__mbstate_tED0Ev +calls=2 0 +0 1121 +cfn=(4392) +calls=2 0 +0 1127 +cfn=(4386) std::codecvt::~codecvt() +calls=2 0 +0 1127 +cfn=(4380) std::__cxx11::messages::~messages() +calls=2 0 +0 1951 +cfn=(4378) std::time_put > >::~time_put() +calls=2 0 +0 244 +cfn=(4376) std::__cxx11::time_get > >::~time_get() +calls=2 0 +0 244 +cfn=(4364) std::__timepunct::~__timepunct() +calls=2 0 +0 2953 +cfn=(4362) std::__cxx11::money_put > >::~money_put() +calls=2 0 +0 244 +cfn=(4360) std::__cxx11::money_get > >::~money_get() +calls=2 0 +0 244 +cfn=(4348) +calls=2 0 +0 3063 +cfn=(4330) std::__cxx11::moneypunct::~moneypunct() +calls=2 0 +0 3955 +cfn=(4328) std::__cxx11::collate::~collate() +calls=2 0 +0 876 +cfn=(4326) std::num_put > >::~num_put() +calls=2 0 +0 244 +cfn=(4324) +calls=2 0 +0 244 +cfn=(4312) std::__cxx11::numpunct::~numpunct() +calls=2 0 +0 2431 +cfn=(4306) std::codecvt::~codecvt() +calls=2 0 +0 1773 +cfn=(4300) std::ctype::~ctype() +calls=2 0 +0 1702 +cfn=(4294) std::__cxx11::messages::~messages() +calls=2 0 +0 1800 +cfn=(4292) +calls=2 0 +0 244 +cfn=(4290) +calls=2 0 +0 244 +cfn=(4278) std::__timepunct::~__timepunct() +calls=2 0 +0 2812 +cfn=(4276) +calls=2 0 +0 244 +cfn=(4274) +calls=2 0 +0 244 +cfn=(4262) +calls=2 0 +0 3040 +cfn=(4250) std::__cxx11::moneypunct::~moneypunct() +calls=2 0 +0 2981 +cfn=(4248) std::__cxx11::collate::~collate() +calls=2 0 +0 754 +cfn=(4246) std::num_put > >::~num_put() +calls=2 0 +0 224 +cfn=(4244) +calls=2 0 +0 224 +cfn=(4228) +calls=2 0 +0 2399 +cfn=(4222) +calls=2 0 +0 1691 +cfn=(4210) std::ctype::~ctype() +calls=2 0 +0 2243 +0 100 + +fn=(4246) +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 196 + +fn=(4284) std::__timepunct_cache::~__timepunct_cache() +0 8 +cob=(2) +cfi=(18) +cfn=(4286) 0x0000000004976e40 +calls=2 0 +0 858 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4285) std::__timepunct_cache::~__timepunct_cache()'2 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4294) +0 8 +cob=(2) +cfi=(18) +cfn=(4296) 0x00000000049792d0 +calls=2 0 +0 1610 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4295) std::__cxx11::messages::~messages()'2 +0 20 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 12 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 184 +0 4 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 524 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4328) +0 16 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 626 +0 4 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4354) +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 12 +cob=(2) +cfi=(18) +cfn=(4356) 0x00000000049798c0 +calls=2 0 +0 902 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4355) std::__moneypunct_cache::~__moneypunct_cache()'2 +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4364) +0 8 +cob=(2) +cfi=(18) +cfn=(4366) 0x0000000004977f20 +calls=2 0 +0 2745 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 194 + +fn=(4365) std::__timepunct::~__timepunct()'2 +0 20 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 12 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 184 +0 10 +cfn=(4370) +calls=2 0 +0 1032 +0 4 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 626 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4380) +0 8 +cob=(2) +cfi=(18) +cfn=(4382) 0x00000000049785a0 +calls=2 0 +0 1741 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 196 + +fn=(4381) std::__cxx11::messages::~messages()'2 +0 20 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 12 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 184 +0 4 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 626 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4446) +0 12 +cob=(2) +cfi=(18) +cfn=(4448) 0x0000000004977020 +calls=2 0 +0 1259 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4447) std::numpunct::~numpunct()'2 +0 30 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 20 +cob=(2) +cfi=(18) +cfn=(4320) 0x00000000049773d0 +calls=2 0 +0 34 +0 4 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4466) +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4584) std::__basic_file::__basic_file(pthread_mutex_t*) +0 4 + +fn=(4612) std::__basic_file::open(char const*, std::_Ios_Openmode, int) +0 7 +cfn=(4614) +calls=1 0 +0 9 +0 6 +cob=(2) +cfi=(18) +cfn=(4602) +calls=1 0 +0 6 +0 5 +cob=(2) +cfi=(18) +cfn=(4620) 0x0000000004979870 +calls=1 0 +0 1355 +0 9 + +fn=(4656) std::_Rb_tree_increment(std::_Rb_tree_node_base const*) +0 16 + +fn=(4666) std::ctype::do_widen(char) const +0 3 + +fn=(4686) std::__basic_file::xsgetn(char*, long) +0 24 +cob=(2) +cfi=(18) +cfn=(4688) 0x0000000004976dd0 +calls=2 0 +0 1729 +0 8 +cob=(2) +cfi=(18) +cfn=(4698) 0x0000000004976ef0 +calls=2 0 +0 834 +0 20 + +fn=(4792) std::__basic_file::close() +0 8 +cob=(2) +cfi=(18) +cfn=(4602) +calls=2 0 +0 12 +0 8 +cob=(2) +cfi=(18) +cfn=(4794) 0x0000000004979370 +calls=1 0 +0 1375 +0 9 + +fn=(5666) +0 178 + +fn=(5728) +0 14 +cfn=(5730) +calls=1 0 +0 3 +0 8 +cfn=(5736) __cxxabiv1::__class_type_info::__do_catch(std::type_info const*, void**, unsigned int) const +calls=1 0 +0 19 +0 12 + +fn=(5996) std::__cxx11::basic_stringbuf, std::allocator >::overflow(int) +0 560 +cob=(2) +cfi=(18) +cfn=(3806) 0x0000000004979830 +calls=11 0 +0 1320 +0 99 +cob=(2) +cfi=(18) +cfn=(3796) 0x0000000004976310 +calls=11 0 +0 869 +0 187 +cob=(2) +cfi=(18) +cfn=(6004) 0x0000000004978aa0 +calls=11 0 +0 1431 +0 77 +cob=(2) +cfi=(18) +cfn=(6010) 0x0000000004978a30 +calls=11 0 +0 1679 +0 597 +cob=(2) +cfi=(18) +cfn=(5998) +calls=12 0 +0 1314 +0 120 + +fn=(6008) std::__cxx11::basic_string, std::allocator >::swap(std::__cxx11::basic_string, std::allocator >&) +0 242 + +fn=(7302) +0 2 + +fn=(7314) std::_V2::error_category::~error_category() +0 6 + +fn=(1978) +0 74 + +fn=(2028) +0 34 + +fn=(2072) +0 50 + +fn=(2228) std::locale::_Impl::_M_install_facet(std::locale::id const*, std::locale::facet const*) +0 1400 +cob=(2) +cfi=(18) +cfn=(2230) +calls=100 0 +0 1862 +0 544 +cob=(2) +cfi=(18) +cfn=(3864) +calls=4 0 +0 405 +0 1020 +cob=(2) +cfi=(18) +cfn=(3868) 0x00000000049765f0 +calls=4 0 +0 56 +0 16 +cob=(2) +cfi=(18) +cfn=(3864) +calls=4 0 +0 405 +0 1020 +cob=(2) +cfi=(18) +cfn=(3868) +calls=4 0 +0 56 +0 32 +cob=(2) +cfi=(18) +cfn=(4234) +calls=4 0 +0 368 +0 20 +cob=(2) +cfi=(18) +cfn=(4234) +calls=4 0 +0 368 +0 36716 + +fn=(2234) std::locale::id::_M_id() const +0 3519 + +fn=(2352) std::__cxx11::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 55 +cob=(2) +cfi=(18) +cfn=(2290) +calls=2 0 +0 48 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 42 +0 6 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 8 +cob=(2) +cfi=(18) +cfn=(3990) +calls=2 0 +0 46 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 6 +cob=(2) +cfi=(18) +cfn=(2290) +calls=2 0 +0 48 +0 118 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 8 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 14 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 14 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 12 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 22 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 12 +cob=(2) +cfi=(18) +cfn=(3996) +calls=2 0 +0 520 +0 26 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 342 +0 12 +cob=(2) +cfi=(18) +cfn=(3996) +calls=2 0 +0 598 +0 10 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 256 +0 38 + +fn=(2556) std::locale::locale(std::locale::_Impl*) +0 3 + +fn=(2630) +0 7918 + +fn=(2636) std::num_put > > const& std::use_facet > > >(std::locale const&) +0 190 +cob=(2) +cfi=(18) +cfn=(2230) +calls=38 0 +0 304 +0 418 +cob=(2) +cfi=(18) +cfn=(2604) +calls=38 0 +0 3458 +0 152 + +fn=(2666) bool std::has_facet >(std::locale const&) +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=4 0 +0 32 +0 48 +cob=(2) +cfi=(18) +cfn=(2604) +calls=4 0 +0 364 +0 20 + +fn=(2696) std::num_get > > const& std::use_facet > > >(std::locale const&) +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=4 0 +0 32 +0 44 +cob=(2) +cfi=(18) +cfn=(2604) +calls=4 0 +0 364 +0 16 + +fn=(5892) std::string::_Rep::_M_destroy(std::allocator const&) +0 2 +cob=(2) +cfi=(18) +cfn=(3818) +calls=1 0 +0 88 + +fn=(3832) std::locale::_Impl::_Impl(char const*, unsigned long) +0 44 +cob=(2) +cfi=(18) +cfn=(2210) 0x00000000049771e0 +calls=2 0 +0 41178 +0 18 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 122 +0 14 +cob=(2) +cfi=(18) +cfn=(3868) +calls=2 0 +0 1069 +0 18 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 264 +0 14 +cob=(2) +cfi=(18) +cfn=(3868) +calls=2 0 +0 88 +0 8 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 269 +0 52 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 138 +0 10 +cob=(2) +cfi=(18) +cfn=(3872) +calls=2 0 +0 928 +0 300 +cob=(2) +cfi=(18) +cfn=(3876) 0x0000000004978840 +calls=24 0 +0 1537 +0 120 +cob=(2) +cfi=(18) +cfn=(3876) +calls=24 0 +0 616 +0 168 +cob=(2) +cfi=(18) +cfn=(3864) +calls=24 0 +0 2136 +0 144 +cob=(2) +cfi=(18) +cfn=(3232) +calls=24 0 +0 360 +0 154 +cob=(2) +cfi=(18) +cfn=(2612) +calls=2 0 +0 46 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 253 +0 14 +cob=(2) +cfi=(18) +cfn=(3896) 0x0000000004979530 +calls=2 0 +0 4264 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) 0x0000000004977dc0 +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 10 +cob=(2) +cfi=(18) +cfn=(3908) 0x00000000049781e0 +calls=2 0 +0 3277 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 18 +cob=(2) +cfi=(18) +cfn=(2242) 0x00000000049792b0 +calls=2 0 +0 1834 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 257 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 334 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 20 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 10 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 20 +cob=(2) +cfi=(18) +cfn=(2248) 0x0000000004977b40 +calls=2 0 +0 3015 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 20 +cob=(2) +cfi=(18) +cfn=(2254) 0x0000000004979100 +calls=2 0 +0 2254 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 334 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 14 +cob=(2) +cfi=(18) +cfn=(3944) 0x0000000004978770 +calls=2 0 +0 6535 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 12 +cob=(2) +cfi=(18) +cfn=(3950) 0x0000000004977c40 +calls=2 0 +0 3917 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 4806 +0 10 +cob=(2) +cfi=(18) +cfn=(3956) 0x0000000004976770 +calls=2 0 +0 48425 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 10 +cob=(2) +cfi=(18) +cfn=(3984) 0x00000000049779e0 +calls=2 0 +0 3277 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 18 +cob=(2) +cfi=(18) +cfn=(2336) 0x00000000049769a0 +calls=2 0 +0 935 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 334 +0 18 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 10 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 20 +cob=(2) +cfi=(18) +cfn=(2342) 0x0000000004978970 +calls=2 0 +0 7228 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 334 +0 20 +cob=(2) +cfi=(18) +cfn=(2348) 0x0000000004976d50 +calls=2 0 +0 3412 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 14 +cob=(2) +cfi=(18) +cfn=(4014) 0x0000000004978e90 +calls=2 0 +0 6538 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 12 +cob=(2) +cfi=(18) +cfn=(4020) 0x0000000004978df0 +calls=2 0 +0 3954 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 334 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 4 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 334 +0 16 +cob=(2) +cfi=(18) +cfn=(2224) +calls=2 0 +0 780 +0 16 +cfn=(4026) 0x00000000000d7c00 +calls=2 0 +0 28692 +0 4 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 2500 +0 10 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 524 +0 28 +cfn=(3880) +calls=2 0 +0 8005 +0 4 + +fn=(3912) std::codecvt::codecvt(__locale_struct*, unsigned long) +0 28 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 8 + +fn=(4248) +0 16 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 524 +0 4 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 196 + +fn=(4300) +0 8 +cob=(2) +cfi=(18) +cfn=(4302) 0x0000000004977fc0 +calls=2 0 +0 1399 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 289 + +fn=(4301) std::ctype::~ctype()'2 +0 16 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 626 +0 12 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4362) +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4378) +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4386) +0 8 +cob=(2) +cfi=(18) +cfn=(4388) 0x00000000049768e0 +calls=2 0 +0 897 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4387) std::codecvt::~codecvt()'2 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4412) _ZNSt7codecvtIDiDu11__mbstate_tED1Ev +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4438) +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4454) +0 12 +cob=(2) +cfi=(18) +cfn=(4456) 0x00000000049792e0 +calls=2 0 +0 1867 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4455) std::moneypunct::~moneypunct()'2 +0 30 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 18 +cob=(2) +cfi=(18) +cfn=(4336) +calls=2 0 +0 54 +0 16 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 20 +cob=(2) +cfi=(18) +cfn=(4344) +calls=2 0 +0 34 +0 4 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 4 + +fn=(4590) bool std::has_facet >(std::locale const&) +0 5 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 12 +cob=(2) +cfi=(18) +cfn=(2604) +calls=1 0 +0 91 +0 5 + +fn=(4726) std::__cxx11::basic_string, std::allocator >::find(char const*, unsigned long, unsigned long) const +0 1113 +cob=(2) +cfi=(18) +cfn=(3872) +calls=32 0 +0 736 +0 320 +cob=(2) +cfi=(18) +cfn=(3872) +calls=160 0 +0 3678 +0 1328 +cob=(2) +cfi=(18) +cfn=(3074) +calls=188 0 +0 3760 +0 2270 + +fn=(5124) __cxa_allocate_exception +0 5 +cob=(2) +cfi=(18) +cfn=(1970) +calls=1 0 +0 205 +0 30 + +fn=(5736) +0 19 + +fn=(6112) std::basic_streambuf >::imbue(std::locale const&) +0 8 + +fn=(6158) std::__timepunct::_M_put(char*, unsigned long, char const*, tm const*) const +0 216 +cob=(2) +cfi=(18) +cfn=(6160) 0x0000000004976ca0 +calls=24 0 +0 6828 +0 96 + +fn=(1952) std::future_category() +0 7 +cob=(2) +cfi=(18) +cfn=(1954) 0x0000000004978800 +calls=1 0 +0 754 +0 6 +cob=(2) +cfi=(18) +cfn=(1932) +calls=1 0 +0 74 +0 2 +cob=(2) +cfi=(18) +cfn=(1960) 0x0000000004977030 +calls=1 0 +0 772 +0 3 + +fn=(2010) +0 34 + +fn=(2182) 0x00000000000be580 +0 5 +cob=(2) +cfi=(18) +cfn=(2184) 0x0000000004977100 +calls=1 0 +0 75485 +0 8 +cob=(2) +cfi=(18) +cfn=(2552) 0x00000000049764f0 +calls=1 0 +0 786 + +fn=(2188) std::locale::_Impl::_Impl(unsigned long) +0 140 +cob=(2) +cfi=(18) +cfn=(2190) +calls=1 0 +0 866 +0 7 +cob=(2) +cfi=(18) +cfn=(2196) 0x0000000004976510 +calls=1 0 +0 3989 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 2225 +0 3 +cob=(2) +cfi=(18) +cfn=(2236) 0x00000000049776f0 +calls=1 0 +0 894 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 23 +cob=(2) +cfi=(18) +cfn=(2242) +calls=1 0 +0 1579 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 5 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 5 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 28 +cob=(2) +cfi=(18) +cfn=(2248) +calls=1 0 +0 1358 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 28 +cob=(2) +cfi=(18) +cfn=(2254) +calls=1 0 +0 1366 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 56 +cob=(2) +cfi=(18) +cfn=(2260) 0x0000000004978640 +calls=1 0 +0 2232 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 3 +cob=(2) +cfi=(18) +cfn=(2272) 0x00000000049763d0 +calls=1 0 +0 874 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 3 +cob=(2) +cfi=(18) +cfn=(2278) 0x00000000049768c0 +calls=1 0 +0 27655 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 3 +cob=(2) +cfi=(18) +cfn=(2330) 0x0000000004977280 +calls=1 0 +0 894 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 22 +cob=(2) +cfi=(18) +cfn=(2336) +calls=1 0 +0 1491 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 5 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 5 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 27 +cob=(2) +cfi=(18) +cfn=(2342) +calls=1 0 +0 1378 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 27 +cob=(2) +cfi=(18) +cfn=(2348) +calls=1 0 +0 1346 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 56 +cob=(2) +cfi=(18) +cfn=(2354) 0x0000000004978fb0 +calls=1 0 +0 2262 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 3 +cob=(2) +cfi=(18) +cfn=(2366) 0x00000000049769d0 +calls=1 0 +0 874 +0 4 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 8 +cob=(2) +cfi=(18) +cfn=(2224) +calls=1 0 +0 399 +0 10 +cfn=(2372) 0x00000000000d7420 +calls=1 0 +0 10285 +0 4 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 5 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 5 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 5 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 13 + +fn=(2282) std::ctype::ctype(unsigned long) +0 13 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 7 +cob=(2) +cfi=(18) +cfn=(2284) +calls=1 0 +0 26887 + +fn=(3068) std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) +0 8475 + +fn=(3072) std::__cxx11::basic_string, std::allocator >::compare(std::__cxx11::basic_string, std::allocator > const&) const +0 4088 +cob=(2) +cfi=(18) +cfn=(3074) +calls=292 0 +0 8510 +0 1857 + +fn=(5854) __cxa_begin_catch +0 4 +cob=(2) +cfi=(18) +cfn=(5172) +calls=1 0 +0 23 +0 24 + +fn=(3900) std::ctype::ctype(__locale_struct*, unsigned short const*, bool, unsigned long) +0 36 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 3119 +0 204 + +fn=(3942) std::money_base::_S_construct_pattern(char, char, char) +0 1120 + +fn=(4178) std::messages::messages(__locale_struct*, char const*, unsigned long) +0 38 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 8 +cob=(2) +cfi=(18) +cfn=(2612) +calls=2 0 +0 66 +0 8 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2456 +0 18 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 138 +0 6 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 264 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 111 +0 4 + +fn=(4236) operator delete[](void*) +0 246 +cob=(2) +cfi=(18) +cfn=(3818) +calls=123 0 +0 12528 + +fn=(4330) +0 12 +cob=(2) +cfi=(18) +cfn=(4332) 0x00000000049784c0 +calls=2 0 +0 3717 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4331) std::__cxx11::moneypunct::~moneypunct()'2 +0 30 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 18 +cob=(2) +cfi=(18) +cfn=(4336) +calls=2 0 +0 946 +0 16 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 14 +cfn=(4342) +calls=2 0 +0 1092 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 4 + +fn=(4404) _ZNSt7codecvtIDsDu11__mbstate_tED1Ev +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4422) +0 12 +cob=(2) +cfi=(18) +cfn=(4424) 0x0000000004977a40 +calls=2 0 +0 1795 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4423) std::moneypunct::~moneypunct()'2 +0 30 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 18 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 14 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 20 +cob=(2) +cfi=(18) +cfn=(4258) +calls=2 0 +0 34 +0 4 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4428) +0 12 +cob=(2) +cfi=(18) +cfn=(4430) 0x0000000004977820 +calls=2 0 +0 1787 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4429) std::moneypunct::~moneypunct()'2 +0 30 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 18 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 14 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 20 +cob=(2) +cfi=(18) +cfn=(4270) 0x0000000004976d70 +calls=2 0 +0 34 +0 4 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4472) +0 8 +cob=(2) +cfi=(18) +cfn=(4474) 0x0000000004978da0 +calls=2 0 +0 3902 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 196 + +fn=(4473) std::messages::~messages()'2 +0 20 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 12 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 235 +0 4 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 2851 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4680) std::codecvt::do_always_noconv() const +0 6 + +fn=(5072) std::__detail::_List_node_base::_M_unhook() +0 600 + +fn=(5080) +0 732 +cfn=(5102) +calls=2 0 +0 146 +0 25 + +fn=(5176) __cxa_get_globals +0 8 +cob=(2) +cfi=(18) +cfn=(5178) +calls=2 0 +0 1505 +0 6 + +fn=(5646) +0 36 +cob=(2) +cfi=(18) +cfn=(5650) 0x0000000004976570 +calls=3 0 +0 919 +0 120 + +fn=(6110) std::ios_base::imbue(std::locale const&) +0 48 +cob=(2) +cfi=(18) +cfn=(6102) 0x00000000049768d0 +calls=4 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(2580) +calls=4 0 +0 96 +0 12 +cob=(2) +cfi=(18) +cfn=(4808) +calls=4 0 +0 52 +0 28 + +fn=(6122) std::basic_ios >::widen(char) const +0 64 + +fn=(6424) +0 54 +cob=(2) +cfi=(18) +cfn=(6426) 0x0000000004978830 +calls=18 0 +0 5114 + +fn=(6430) std::ostreambuf_iterator > std::num_put > >::_M_insert_int(std::ostreambuf_iterator >, std::ios_base&, char, long) const +0 378 +cfn=(6432) 0x0000000000125250 +calls=18 0 +0 540 +0 576 +cfn=(6438) 0x00000000001250d0 +calls=18 0 +0 432 +0 504 +cfn=(5994) +calls=18 0 +0 954 +0 306 + +fn=(7208) +0 9 +cob=(2) +cfi=(18) +cfn=(7210) 0x000000000497a080 +calls=3 0 +0 1084 + +fn=(7294) +0 9 +cob=(2) +cfi=(18) +cfn=(7300) 0x0000000004976080 +calls=1 0 +0 1996 +0 1 +cfn=(7332) 0x00000000000a7120 +calls=1 0 +0 5 +0 3 + +fn=(7304) +0 2 + +fn=(7316) +0 4 +cob=(2) +cfi=(18) +cfn=(7310) 0x0000000004976e50 +calls=1 0 +0 4 + +fn=(4026) +0 36 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 18 +cob=(2) +cfi=(18) +cfn=(2374) 0x0000000004977420 +calls=2 0 +0 888 +0 12 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 18 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 14 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 20 +cob=(2) +cfi=(18) +cfn=(2396) 0x0000000004976780 +calls=2 0 +0 2098 +0 12 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 334 +0 20 +cob=(2) +cfi=(18) +cfn=(2410) 0x0000000004979bf0 +calls=2 0 +0 2037 +0 12 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 22 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 334 +0 22 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 22 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 12 +cob=(2) +cfi=(18) +cfn=(4094) 0x0000000004979e80 +calls=2 0 +0 3839 +0 12 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 18 +cob=(2) +cfi=(18) +cfn=(2456) 0x0000000004977d90 +calls=2 0 +0 935 +0 12 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 8 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 18 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2395 +0 12 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 6 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 22 +cob=(2) +cfi=(18) +cfn=(2478) 0x00000000049783b0 +calls=2 0 +0 3348 +0 10 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 6 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 22 +cob=(2) +cfi=(18) +cfn=(2492) 0x0000000004978e60 +calls=2 0 +0 3397 +0 10 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 6 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 6 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 6 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 114 +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 6 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 12 +cob=(2) +cfi=(18) +cfn=(4174) 0x00000000049775d0 +calls=2 0 +0 4055 +0 10 +cob=(2) +cfi=(18) +cfn=(2230) +calls=2 0 +0 16 +0 88 + +fn=(1914) +0 12 + +fn=(1946) +0 3 +cob=(2) +cfi=(18) +cfn=(1948) 0x0000000004977240 +calls=1 0 +0 2385 +0 4 + +fn=(2168) +0 616 +cob=(2) +cfi=(18) +cfn=(2172) +calls=88 0 +0 77848 +0 440 + +fn=(2252) std::__cxx11::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 48 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 18 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 30 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 991 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 121 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 16 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 16 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 331 +0 12 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 10 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 40 + +fn=(2258) std::__cxx11::moneypunct::_M_initialize_moneypunct(__locale_struct*, char const*) +0 48 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 20 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 30 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 8 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3938) +calls=2 0 +0 74 +0 28 +cfn=(3920) +calls=2 0 +0 144 +0 107 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 12 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 34 +0 12 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 16 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 14 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 12 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 331 +0 10 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 14 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 40 + +fn=(2264) std::__timepunct::__timepunct(std::__timepunct_cache*, unsigned long) +0 15 +cob=(2) +cfi=(18) +cfn=(2190) +calls=1 0 +0 5 +0 4 +cob=(2) +cfi=(18) +cfn=(2266) +calls=1 0 +0 1222 +0 4 + +fn=(2378) std::numpunct::_M_initialize_numpunct(__locale_struct*) +0 42 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 12 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 61 +cfn=(3920) +calls=2 0 +0 144 +0 399 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 6 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 44 +0 14 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 256 +0 38 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 114 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 38 +0 8 + +fn=(2566) std::ios_base::ios_base() +0 1239 +cob=(2) +cfi=(18) +cfn=(2162) +calls=21 0 +0 819 + +fn=(2584) std::locale::operator=(std::locale const&) +0 867 + +fn=(5858) __cxa_end_catch +0 3 +cob=(2) +cfi=(18) +cfn=(5860) 0x00000000049777e0 +calls=1 0 +0 772 +0 17 +cob=(2) +cfi=(18) +cfn=(5866) 0x0000000004977220 +calls=1 0 +0 3561 + +fn=(5872) +0 12 +cfn=(5880) std::out_of_range::~out_of_range() +calls=1 0 +0 1702 +0 3 +cob=(2) +cfi=(18) +cfn=(5896) 0x0000000004976560 +calls=1 0 +0 889 + +fn=(3786) std::locale::locale(char const*) +0 34 +cfn=(2168) +calls=2 0 +0 40 +0 50 +cob=(2) +cfi=(18) +cfn=(3788) 0x0000000004978910 +calls=2 0 +0 2499 +0 20 +cob=(2) +cfi=(18) +cfn=(3788) +calls=2 0 +0 608 +0 36 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 922 +0 12 +cob=(2) +cfi=(18) +cfn=(3796) +calls=2 0 +0 1330 +0 10 +cob=(2) +cfi=(18) +cfn=(3800) 0x0000000004976c90 +calls=2 0 +0 1248 +0 28 +cob=(2) +cfi=(18) +cfn=(3788) +calls=4 0 +0 2950 +0 22 +cob=(2) +cfi=(18) +cfn=(3800) +calls=2 0 +0 148 +0 22 +cob=(2) +cfi=(18) +cfn=(3806) +calls=2 0 +0 1488 +0 28 +cob=(2) +cfi=(18) +cfn=(3812) 0x0000000004978360 +calls=2 0 +0 90 +0 40 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 16 +cob=(2) +cfi=(18) +cfn=(3812) +calls=2 0 +0 1260 +0 34 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 44 +0 16 +cob=(2) +cfi=(18) +cfn=(3812) +calls=2 0 +0 90 +0 28 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 36 +0 16 +cob=(2) +cfi=(18) +cfn=(3812) +calls=2 0 +0 90 +0 172 +cob=(2) +cfi=(18) +cfn=(3788) +calls=20 0 +0 10526 +0 80 +cob=(2) +cfi=(18) +cfn=(3792) +calls=20 0 +0 416 +0 160 +cob=(2) +cfi=(18) +cfn=(3812) +calls=20 0 +0 1442 +0 152 +cob=(2) +cfi=(18) +cfn=(3812) +calls=4 0 +0 1465 +0 628 +cob=(2) +cfi=(18) +cfn=(3792) +calls=16 0 +0 320 +0 128 +cob=(2) +cfi=(18) +cfn=(3812) +calls=16 0 +0 720 +0 26 +cob=(2) +cfi=(18) +cfn=(3822) 0x0000000004978210 +calls=2 0 +0 1164 +0 6 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 261 +0 10 +cob=(2) +cfi=(18) +cfn=(3828) 0x000000000497a0e0 +calls=2 0 +0 229996 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 +0 2 + +fn=(3988) std::codecvt::codecvt(__locale_struct*, unsigned long) +0 28 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 8 + +fn=(4018) std::__timepunct::__timepunct(__locale_struct*, char const*, unsigned long) +0 40 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 8 +cob=(2) +cfi=(18) +cfn=(2612) +calls=2 0 +0 66 +0 10 +cob=(2) +cfi=(18) +cfn=(2360) +calls=2 0 +0 4892 +0 16 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 138 +0 6 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 264 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 124 +0 4 + +fn=(4194) std::locale::facet::_S_destroy_c_locale(__locale_struct*&) +0 198 +cob=(2) +cfi=(18) +cfn=(2202) +calls=33 0 +0 693 +0 163 +cob=(2) +cfi=(18) +cfn=(4196) 0x00000000049795f0 +calls=32 0 +0 11412 +0 2 + +fn=(4210) +0 8 +cob=(2) +cfi=(18) +cfn=(4212) 0x0000000004976370 +calls=2 0 +0 2053 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4211) std::ctype::~ctype()'2 +0 16 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 541 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 765 + +fn=(4220) std::locale::facet::~facet() +0 258 + +fn=(4238) +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 12 +cob=(2) +cfi=(18) +cfn=(4240) +calls=2 0 +0 870 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4239) std::__numpunct_cache::~__numpunct_cache()'2 +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4250) +0 12 +cob=(2) +cfi=(18) +cfn=(4252) 0x0000000004978d00 +calls=2 0 +0 2743 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4251) std::__cxx11::moneypunct::~moneypunct()'2 +0 32 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 204 +0 20 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 222 +0 16 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 12 +cfn=(4256) +calls=2 0 +0 1092 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4306) +0 10 +cob=(2) +cfi=(18) +cfn=(4190) +calls=1 0 +0 34 +0 8 +cob=(2) +cfi=(18) +cfn=(4216) +calls=1 0 +0 4 +0 12 +cob=(2) +cfi=(18) +cfn=(4308) 0x00000000049787f0 +calls=2 0 +0 1535 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4307) std::codecvt::~codecvt()'2 +0 20 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 626 +0 16 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4318) std::__numpunct_cache::~__numpunct_cache() +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 12 +cob=(2) +cfi=(18) +cfn=(4320) +calls=2 0 +0 854 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4319) std::__numpunct_cache::~__numpunct_cache()'2 +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4406) +0 8 +cob=(2) +cfi=(18) +cfn=(4408) 0x0000000004979490 +calls=2 0 +0 891 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4460) +0 12 +cob=(2) +cfi=(18) +cfn=(4462) 0x00000000049766f0 +calls=2 0 +0 1862 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4461) std::moneypunct::~moneypunct()'2 +0 30 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 18 +cob=(2) +cfi=(18) +cfn=(4336) +calls=2 0 +0 58 +0 16 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 20 +cob=(2) +cfi=(18) +cfn=(4356) +calls=2 0 +0 34 +0 4 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 4 + +fn=(4470) +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4556) std::__cxx11::basic_string, std::allocator >::find_last_of(char const*, unsigned long, unsigned long) const +0 300 +cob=(2) +cfi=(18) +cfn=(3872) +calls=38 0 +0 780 +0 104 + +fn=(4722) std::_Rb_tree_decrement(std::_Rb_tree_node_base const*) +0 110 + +fn=(4818) std::ios_base::_M_dispose_callbacks() +0 169 + +fn=(5162) std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator const&) +0 15 +cob=(2) +cfi=(18) +cfn=(2882) +calls=1 0 +0 223 +0 7 + +fn=(5194) std::get_unexpected() +0 4 + +fn=(5200) std::get_terminate() +0 4 + +fn=(5986) std::ostream::write(char const*, long) +0 144 +cob=(2) +cfi=(18) +cfn=(5988) +calls=9 0 +0 955 +0 81 +cfn=(5994) +calls=9 0 +0 4713 +0 162 + +fn=(5994) +0 1923 +cob=(2) +cfi=(18) +cfn=(3232) +calls=77 0 +0 1322 +0 920 +cfn=(5996) +calls=23 0 +0 8253 +0 148 + +fn=(6146) +0 456 +cob=(2) +cfi=(18) +cfn=(2618) +calls=24 0 +0 4176 +0 72 +cob=(2) +cfi=(18) +cfn=(6148) 0x0000000004977140 +calls=24 0 +0 3876 +0 408 +cob=(2) +cfi=(18) +cfn=(6154) 0x00000000049793f0 +calls=24 0 +0 8089 +0 48 +cob=(2) +cfi=(18) +cfn=(3792) +calls=24 0 +0 456 +0 192 +cfn=(5994) +calls=24 0 +0 3148 +0 408 + +fn=(6170) std::__cxx11::basic_stringbuf, std::allocator >::str() const +0 189 +cob=(2) +cfi=(18) +cfn=(3796) +calls=9 0 +0 2627 +0 45 + +fn=(6262) std::__cxx11::basic_ostringstream, std::allocator >::~basic_ostringstream() +0 48 +cob=(2) +cfi=(18) +cfn=(3818) +calls=3 0 +0 264 +0 15 +cob=(2) +cfi=(18) +cfn=(2586) +calls=3 0 +0 30 +0 24 +cob=(2) +cfi=(18) +cfn=(6264) 0x0000000004978d50 +calls=3 0 +0 896 + +fn=(6378) std::__cxx11::basic_string, std::allocator >::_M_replace_aux(unsigned long, unsigned long, unsigned long, char) +0 98 +cob=(2) +cfi=(18) +cfn=(3868) +calls=3 0 +0 45 +0 40 +cob=(2) +cfi=(18) +cfn=(3242) +calls=2 0 +0 534 +0 14 + +fn=(6416) std::ostream::operator<<(int) +0 198 +cob=(2) +cfi=(18) +cfn=(6418) 0x00000000049771a0 +calls=18 0 +0 7463 + +fn=(6432) +0 162 +cob=(2) +cfi=(18) +cfn=(2230) +calls=18 0 +0 144 +0 234 + +fn=(7318) +0 4 +cob=(2) +cfi=(18) +cfn=(7310) +calls=1 0 +0 4 + +fn=(7326) std::error_category::~error_category() +0 4 + +fn=(4024) std::__cxx11::messages::messages(__locale_struct*, char const*, unsigned long) +0 38 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 8 +cob=(2) +cfi=(18) +cfn=(2612) +calls=2 0 +0 66 +0 8 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 18 +cob=(2) +cfi=(18) +cfn=(3792) +calls=2 0 +0 138 +0 6 +cob=(2) +cfi=(18) +cfn=(3864) +calls=2 0 +0 264 +0 8 +cob=(2) +cfi=(18) +cfn=(3232) +calls=2 0 +0 124 +0 4 + +fn=(1920) +0 6 +cob=(2) +cfi=(18) +cfn=(1922) 0x0000000004977db0 +calls=1 0 +0 780 +0 7 +cob=(2) +cfi=(18) +cfn=(1932) +calls=1 0 +0 1044 +0 3 +cob=(2) +cfi=(18) +cfn=(1922) +calls=1 0 +0 7 +0 7 +cob=(2) +cfi=(18) +cfn=(1932) +calls=1 0 +0 74 + +fn=(2004) +0 52 + +fn=(2208) 0x00000000000bc260 +0 5 +cob=(2) +cfi=(18) +cfn=(2210) +calls=1 0 +0 2136 + +fn=(2270) std::__timepunct::_M_initialize_timepunct(__locale_struct*) +0 34 +cob=(2) +cfi=(18) +cfn=(3902) +calls=2 0 +0 2232 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 10 +cob=(2) +cfi=(18) +cfn=(3914) +calls=2 0 +0 38 +0 11 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 99 +cob=(2) +cfi=(18) +cfn=(2882) +calls=2 0 +0 256 +0 108 + +fn=(2288) std::ctype::_M_initialize_ctype() +0 30 +cob=(2) +cfi=(18) +cfn=(2290) +calls=3 0 +0 1009 +0 2310 +cob=(2) +cfi=(18) +cfn=(2296) 0x0000000004977d30 +calls=384 0 +0 10135 +0 780 +cob=(2) +cfi=(18) +cfn=(2302) 0x0000000004979760 +calls=3 0 +0 944 +0 1530 +cob=(2) +cfi=(18) +cfn=(2302) +calls=765 0 +0 37494 +0 3201 +cob=(2) +cfi=(18) +cfn=(2314) 0x0000000004977c20 +calls=24 0 +0 7520 +0 285 +cob=(2) +cfi=(18) +cfn=(2314) +calls=12 0 +0 5728 +0 57 +cob=(2) +cfi=(18) +cfn=(2290) +calls=3 0 +0 72 +0 6 + +fn=(2318) std::ctype::_M_convert_to_wmask(unsigned short) const +0 252 +cob=(2) +cfi=(18) +cfn=(2320) 0x0000000004977260 +calls=3 0 +0 2021 +0 72 +cob=(2) +cfi=(18) +cfn=(2320) +calls=3 0 +0 1301 +0 21 +cob=(2) +cfi=(18) +cfn=(2320) +calls=3 0 +0 1657 +0 27 +cob=(2) +cfi=(18) +cfn=(2320) +calls=3 0 +0 666 +0 9 +cob=(2) +cfi=(18) +cfn=(2320) +calls=3 0 +0 856 +0 9 +cob=(2) +cfi=(18) +cfn=(2320) +calls=3 0 +0 1224 +0 9 +cob=(2) +cfi=(18) +cfn=(2320) +calls=3 0 +0 1855 +0 9 +cob=(2) +cfi=(18) +cfn=(2320) +calls=3 0 +0 658 +0 9 +cob=(2) +cfi=(18) +cfn=(2320) +calls=3 0 +0 1123 +0 21 +cob=(2) +cfi=(18) +cfn=(2320) +calls=3 0 +0 484 + +fn=(2372) +0 21 +cob=(2) +cfi=(18) +cfn=(2374) +calls=1 0 +0 1469 +0 7 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 8 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 7 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 12 +cob=(2) +cfi=(18) +cfn=(2396) +calls=1 0 +0 1264 +0 6 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 12 +cob=(2) +cfi=(18) +cfn=(2410) +calls=1 0 +0 1280 +0 6 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 13 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 13 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 13 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 6 +cob=(2) +cfi=(18) +cfn=(2442) 0x000000000497a0c0 +calls=1 0 +0 804 +0 6 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 16 +cob=(2) +cfi=(18) +cfn=(2456) +calls=1 0 +0 1420 +0 6 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 8 +cob=(2) +cfi=(18) +cfn=(2202) +calls=1 0 +0 21 +0 7 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 13 +cob=(2) +cfi=(18) +cfn=(2478) +calls=1 0 +0 1292 +0 6 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 12 +cob=(2) +cfi=(18) +cfn=(2492) +calls=1 0 +0 1268 +0 6 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 13 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 13 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 13 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 6 +cob=(2) +cfi=(18) +cfn=(2524) 0x0000000004978880 +calls=1 0 +0 804 +0 5 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 17 +0 5 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 4 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 5 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 5 +cob=(2) +cfi=(18) +cfn=(2230) +calls=1 0 +0 8 +0 41 + +fn=(2596) std::basic_ios >::_M_cache_locale(std::locale const&) +0 304 +cob=(2) +cfi=(18) +cfn=(2598) 0x0000000004979f50 +calls=38 0 +0 9304 +0 152 +cob=(2) +cfi=(18) +cfn=(2618) +calls=38 0 +0 7520 +0 114 +cob=(2) +cfi=(18) +cfn=(2624) 0x0000000004978eb0 +calls=38 0 +0 5926 +0 152 +cob=(2) +cfi=(18) +cfn=(2632) 0x0000000004976800 +calls=38 0 +0 5874 +0 114 +cob=(2) +cfi=(18) +cfn=(2638) 0x00000000049762e0 +calls=38 0 +0 5926 +0 152 +cob=(2) +cfi=(18) +cfn=(2644) 0x0000000004977700 +calls=38 0 +0 5881 +0 190 + +fn=(2610) +0 7140 +cob=(2) +cfi=(18) +cfn=(2612) +calls=119 0 +0 3760 +0 833 + +fn=(2622) std::ctype const& std::use_facet >(std::locale const&) +0 405 +cob=(2) +cfi=(18) +cfn=(2230) +calls=81 0 +0 648 +0 891 +cob=(2) +cfi=(18) +cfn=(2604) +calls=81 0 +0 11664 +0 324 + +fn=(2672) std::ctype const& std::use_facet >(std::locale const&) +0 20 +cob=(2) +cfi=(18) +cfn=(2230) +calls=4 0 +0 32 +0 44 +cob=(2) +cfi=(18) +cfn=(2604) +calls=4 0 +0 364 +0 16 + +fn=(2718) std::exception::~exception() +0 14 + +fn=(3246) std::__cxx11::basic_string, std::allocator >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) +0 1691 +cob=(2) +cfi=(18) +cfn=(3248) +calls=11 0 +0 1114 +0 150 +cob=(2) +cfi=(18) +cfn=(3248) +calls=50 0 +0 7959 +0 261 +cob=(2) +cfi=(18) +cfn=(3232) +calls=13 0 +0 233 +0 538 +cob=(2) +cfi=(18) +cfn=(3232) +calls=52 0 +0 1301 +0 368 +cob=(2) +cfi=(18) +cfn=(3818) +calls=11 0 +0 1589 +0 954 + +fn=(5880) +0 5 +cob=(2) +cfi=(18) +cfn=(5882) 0x0000000004979c50 +calls=1 0 +0 1697 + +fn=(5900) __cxa_free_exception +0 9 +cob=(2) +cfi=(18) +cfn=(3212) +calls=1 0 +0 84 + +fn=(5920) std::__cxx11::basic_string, std::allocator >::rfind(char, unsigned long) const +0 52 + +fn=(4268) +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 12 +cob=(2) +cfi=(18) +cfn=(4270) +calls=2 0 +0 902 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4269) std::__moneypunct_cache::~__moneypunct_cache()'2 +0 22 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4278) +0 8 +cob=(2) +cfi=(18) +cfn=(4280) 0x0000000004978220 +calls=2 0 +0 2622 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 176 + +fn=(4279) std::__timepunct::~__timepunct()'2 +0 20 +cob=(2) +cfi=(18) +cfn=(2190) +calls=2 0 +0 10 +0 12 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 184 +0 10 +cfn=(4284) +calls=2 0 +0 1048 +0 4 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 524 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4312) +0 12 +cob=(2) +cfi=(18) +cfn=(4314) 0x0000000004978e20 +calls=2 0 +0 2193 +0 10 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4313) std::__cxx11::numpunct::~numpunct()'2 +0 32 +cob=(2) +cfi=(18) +cfn=(4234) +calls=2 0 +0 224 +0 12 +cfn=(4318) +calls=2 0 +0 1052 +0 10 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 + +fn=(4326) +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4360) +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4376) +0 14 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4398) +0 8 +cob=(2) +cfi=(18) +cfn=(4400) 0x0000000004977110 +calls=2 0 +0 891 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4420) +0 16 +cob=(2) +cfi=(18) +cfn=(4190) +calls=2 0 +0 626 +0 4 +cob=(2) +cfi=(18) +cfn=(4216) +calls=2 0 +0 8 +0 6 +cob=(2) +cfi=(18) +cfn=(3818) +calls=2 0 +0 216 + +fn=(4498) std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*) +0 816 + +fn=(4532) std::__cxx11::basic_string, std::allocator >::operator=(std::__cxx11::basic_string, std::allocator >&&) +0 544 +cob=(2) +cfi=(18) +cfn=(3232) +calls=4 0 +0 60 +0 32 + +fn=(4606) std::__basic_file::is_open() const +0 24 + +fn=(4670) std::basic_istream >& std::getline, std::allocator >(std::basic_istream >&, std::__cxx11::basic_string, std::allocator >&, char) +0 228 +cob=(2) +cfi=(18) +cfn=(4672) 0x00000000049796a0 +calls=12 0 +0 1103 +0 30 +cob=(2) +cfi=(18) +cfn=(4756) +calls=1 0 +0 9 +0 5 +cob=(2) +cfi=(18) +cfn=(4756) +calls=1 0 +0 1061 +0 374 +cob=(2) +cfi=(18) +cfn=(3872) +calls=11 0 +0 316 +0 143 +cob=(2) +cfi=(18) +cfn=(3812) +calls=11 0 +0 1919 +0 325 +cfn=(4678) std::basic_filebuf >::underflow() +calls=1 0 +0 116 +0 90 +cfn=(4678) +calls=1 0 +0 3480 +0 1 + +fn=(4678) +0 84 +cfn=(4680) +calls=2 0 +0 6 +0 22 +cob=(2) +cfi=(18) +cfn=(4682) 0x0000000004977d10 +calls=2 0 +0 3464 +0 20 + +fn=(4712) std::__cxx11::basic_string, std::allocator >::find_first_not_of(char const*, unsigned long, unsigned long) const +0 627 +cob=(2) +cfi=(18) +cfn=(3872) +calls=33 0 +0 822 +0 297 + +fn=(5188) __cxa_init_primary_exception +0 7 +cob=(2) +cfi=(18) +cfn=(5190) 0x0000000004979d50 +calls=1 0 +0 787 +0 2 +cob=(2) +cfi=(18) +cfn=(5196) 0x00000000049797f0 +calls=1 0 +0 755 +0 8 + +fn=(5690) +0 386 + +fn=(6002) std::__cxx11::basic_stringbuf, std::allocator >::_M_pbump(char*, char*, long) +0 230 + +fn=(6100) std::basic_ios >::imbue(std::locale const&) +0 68 +cob=(2) +cfi=(18) +cfn=(6102) +calls=4 0 +0 761 +0 16 +cob=(2) +cfi=(18) +cfn=(6106) 0x00000000049783f0 +calls=4 0 +0 1129 +0 8 +cob=(2) +cfi=(18) +cfn=(2586) +calls=4 0 +0 40 +0 12 +cob=(2) +cfi=(18) +cfn=(2592) +calls=4 0 +0 3484 +0 28 +cob=(2) +cfi=(18) +cfn=(6102) +calls=4 0 +0 36 +0 16 +cfn=(6112) +calls=4 0 +0 8 +0 12 +cob=(2) +cfi=(18) +cfn=(2580) +calls=4 0 +0 96 +0 8 +cob=(2) +cfi=(18) +cfn=(2586) +calls=4 0 +0 40 +0 48 + +fn=(6438) +0 432 + +fn=(7226) +0 9 +cob=(2) +cfi=(18) +cfn=(7210) +calls=3 0 +0 219 + +fn=(7308) +0 4 +cob=(2) +cfi=(18) +cfn=(7310) +calls=1 0 +0 831 + +fn=(7332) +0 5 + +ob=(50) +fl=(225) +fn=(2706) boost::detail::sp_counted_base::release() +0 627 +cfn=(7168) boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex> >::dispose() +calls=1 0 +0 2149 +cfn=(7148) boost::detail::sp_counted_impl_p, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex> >::dispose() +calls=1 0 +0 2125 +cfn=(7132) boost::detail::sp_counted_impl_p, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1284 +cfn=(7120) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(7108) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(7096) boost::detail::sp_counted_impl_p, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(7084) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6954) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6942) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6930) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6918) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6906) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=2 0 +0 2612 +cfn=(6880) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=2 0 +0 2612 +cfn=(6860) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6848) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6836) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6820) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6808) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6796) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=4 0 +0 5224 +cfn=(6782) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=1 0 +0 1306 +cfn=(6762) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::dispose() +calls=3 0 +0 3918 +cfn=(4762) boost::detail::sp_counted_impl_pd::dispose() +calls=1 0 +0 10 +0 435 +cfn=(7190) boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7166) boost::detail::sp_counted_impl_p, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7146) boost::detail::sp_counted_impl_p, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7130) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7118) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7106) boost::detail::sp_counted_impl_p, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7094) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6968) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6952) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6940) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6928) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6916) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=2 0 +0 244 +cfn=(6890) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=2 0 +0 244 +cfn=(6870) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6858) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6846) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6834) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6818) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6806) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=4 0 +0 488 +cfn=(6794) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6780) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=3 0 +0 366 +cfn=(4764) boost::detail::sp_counted_impl_pd::~sp_counted_impl_pd() +calls=1 0 +0 102 + +fn=(2707) boost::detail::sp_counted_base::release()'2 +0 1084 +cfn=(7180) boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> > >::dispose() +calls=1 0 +0 145 +cfn=(7176) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 1294 +cfn=(7172) boost::detail::sp_counted_impl_p >::dispose() +calls=1 0 +0 125 +cfn=(7170) boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 1851 +cfn=(7156) boost::detail::sp_counted_impl_p, std::allocator > const&), boost::function, std::allocator > const&)> > >::dispose() +calls=1 0 +0 141 +cfn=(7152) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 1270 +cfn=(7150) boost::detail::sp_counted_impl_p, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 1827 +cfn=(7134) boost::detail::sp_counted_impl_p, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 707 +cfn=(7124) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +cfn=(7122) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(7112) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +cfn=(7110) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(7100) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +cfn=(7098) boost::detail::sp_counted_impl_p, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(7088) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +cfn=(7086) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6956) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6944) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6932) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6920) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6910) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=2 0 +0 344 +cfn=(6908) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=2 0 +0 1458 +cfn=(6884) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=2 0 +0 344 +cfn=(6882) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=2 0 +0 1458 +cfn=(6862) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6852) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +cfn=(6850) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6840) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +cfn=(6838) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6822) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6810) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6800) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=4 0 +0 688 +cfn=(6798) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=4 0 +0 2916 +cfn=(6784) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=1 0 +0 729 +cfn=(6774) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=3 0 +0 516 +cfn=(6770) boost::detail::sp_counted_impl_p >::dispose() +calls=18 0 +0 2250 +cfn=(6768) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::dispose() +calls=3 0 +0 2187 +cfn=(6764) boost::detail::sp_counted_impl_p::dispose() +calls=28 0 +0 4060 +0 1440 +cfn=(7188) boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7186) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7182) boost::detail::sp_counted_impl_p, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7174) boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7164) boost::detail::sp_counted_impl_p, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7162) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7158) boost::detail::sp_counted_impl_p, std::allocator > const&), boost::function, std::allocator > const&)> > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7144) boost::detail::sp_counted_impl_p, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7128) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7126) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7116) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7114) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7104) boost::detail::sp_counted_impl_p, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7102) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7092) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7090) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6966) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6950) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6938) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6926) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6914) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=2 0 +0 244 +cfn=(6912) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=2 0 +0 244 +cfn=(6888) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=2 0 +0 244 +cfn=(6886) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=2 0 +0 244 +cfn=(6868) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6856) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6854) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6844) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6842) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6832) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6816) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6804) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=4 0 +0 488 +cfn=(6802) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=4 0 +0 488 +cfn=(6792) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6778) boost::detail::sp_counted_impl_p, int, std::less, boost::function, boost::function, boost::signals2::mutex>::invocation_state>::~sp_counted_impl_p() +calls=3 0 +0 366 +cfn=(6776) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=3 0 +0 366 +cfn=(6772) boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +calls=18 0 +0 2196 +cfn=(6766) boost::detail::sp_counted_impl_p::~sp_counted_impl_p() +calls=28 0 +0 3416 + +fn=(2734) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >*) +0 23 +cfn=(2735) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >*)'2 +calls=1 0 +0 16 +0 3 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 16 + +fn=(2735) +0 16 + +fn=(2746) boost::signals2::detail::signal_impl, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value, std::allocator > > const&, std::less const&) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 22 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 12 +cfn=(2748) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(2750) std::__cxx11::_List_base >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 10 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cfn=(2740) boost::shared_ptr::shared_ptr(boost::signals2::mutex*) +calls=1 0 +0 85 +0 11 + +fn=(2752) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 48 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 404 +0 2 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 404 +0 2 +0 48 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 22 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 102 +0 2 +0 10 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 26 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 330 +0 2 +0 24 +cfn=(2754) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=2 0 +0 32 +0 4 +cfn=(2756) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +calls=2 0 +0 46 +0 20 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 404 +0 2 +0 8 +cob=(5) +cfi=(206) +cfn=(1262) +calls=2 53 +0 60 +0 2 +0 10 +cfn=(2740) +calls=2 0 +0 170 +0 22 + +fn=(2766) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 + +fn=(2772) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > > >*) +0 32 + +fn=(2782) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 + +fn=(2896) GetRandHash() +0 13 +cfn=(2898) RAND_bytes +calls=1 0 +0 196147 +0 9 + +fn=(2960) EVP_sha1 +0 4575 + +fn=(2964) EVP_MD_CTX_clear_flags +0 7625 + +fn=(2972) init +0 4575 +cfn=(2974) SHA1_Init +calls=1525 0 +0 18300 + +fn=(2978) update +0 18324 +cfn=(2980) SHA1_Update +calls=6108 0 +0 428133 + +fn=(2982) sha1_block_data_order +0 27378 +cfn=(2984) sha1_block_data_order_avx +calls=3042 0 +0 3075462 + +fn=(3024) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 + +fn=(3032) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 22 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 268 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(3034) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(3036) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 20 + +fn=(3036) +0 46 + +fn=(3046) _GLOBAL__sub_I__Z18ScriptPubKeyToJSONRK7CScriptR8UniValueb +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3082) _GLOBAL__sub_I__ZNK34CachingTransactionSignatureChecker15VerifySignatureERKSt6vectorIhSaIhEERK7CPubKeyRK7uint256 +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 + +fn=(3138) _GLOBAL__sub_I__ZNK9CAddrInfo14GetTriedBucketERK7uint256 +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3146) _GLOBAL__sub_I_cs_supplycache +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) boost::recursive_mutex::recursive_mutex() +calls=1 0 +0 110 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3154) _GLOBAL__sub_I__Z15handle_progressPvllll +0 7 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3240) base_uint<256u>::operator>>=(unsigned int) +0 1015 + +fn=(3268) void std::vector >::_M_range_insert<__gnu_cxx::__normal_iterator > > >(__gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, __gnu_cxx::__normal_iterator > >, std::forward_iterator_tag) +0 928 +cob=(47) +cfi=(220) +cfn=(2154) +calls=12 0 +0 808 +0 12 +0 56 +cob=(3) +cfi=(202) +cfn=(912) +calls=4 225 +0 64 +0 4 +0 80 +cob=(3) +cfi=(202) +cfn=(912) +calls=12 225 +0 180 +0 12 +0 60 +cob=(3) +cfi=(202) +cfn=(912) +calls=12 225 +0 196 +0 12 +0 96 +cob=(47) +cfi=(220) +cfn=(3210) +calls=12 0 +0 1032 +0 12 +0 12 + +fn=(3274) CSHA256::CSHA256() +0 209 + +fn=(3288) CSHA256::Finalize(unsigned char*) +0 418 +cfn=(3276) CSHA256::Write(unsigned char const*, unsigned long) +calls=22 0 +0 1306 +0 88 +cfn=(3276) +calls=22 0 +0 75944 +0 682 + +fn=(3292) void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CTransaction&&) +0 120 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 367 +0 4 +0 24 +cfn=(3294) CTransaction::CTransaction(CTransaction const&) +calls=4 0 +0 4393 +0 140 + +fn=(3294) +0 288 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 865 +0 4 +0 268 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 800 +0 4 +0 40 +cob=(3) +cfi=(202) +cfn=(912) +calls=4 225 +0 48 +0 4 +0 136 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 882 +0 4 +0 60 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 718 +0 4 +0 40 +cob=(3) +cfi=(202) +cfn=(912) +calls=4 225 +0 88 +0 4 +0 136 + +fn=(3304) sph_blake512 +0 20 +cfn=(3306) blake64 +calls=10 0 +0 490 + +fn=(3312) blake64_close +0 440 +cob=(3) +cfi=(204) +cfn=(952) +calls=10 167 +0 120 +0 10 +0 120 +cfn=(3306) +calls=10 0 +0 26050 +0 700 + +fn=(3332) groestl_big_core +0 792 +cob=(3) +cfi=(202) +cfn=(912) +calls=11 225 +0 132 +0 11 +0 190102 +cob=(3) +cfi=(202) +cfn=(912) +calls=11 225 +0 132 +0 11 +0 33 + +fn=(3334) sph_groestl512_close +0 66 +cfn=(3336) groestl_big_close +calls=11 0 +0 291203 + +fn=(5850) sanity_test_range_fmt() [clone .cold] +0 15 +cob=(47) +cfi=(220) +cfn=(5854) +calls=1 0 +0 51 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(5858) +calls=1 0 +0 4353 +0 1 +0 1 + +fn=(3394) void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CAddress const&) +0 1244 +cob=(47) +cfi=(220) +cfn=(2154) +calls=36 0 +0 7505 +0 36 +0 11324 +cob=(47) +cfi=(220) +cfn=(3210) +calls=32 0 +0 3634 +0 32 +0 736 + +fn=(3416) _GLOBAL__sub_I__Z20LoadInvalidOutPointsB5cxx11v +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3452) _GLOBAL__sub_I__ZN11libzerocoin10CommitmentC2EPKNS_18IntegerGroupParamsERK7CBigNum +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3456) _GLOBAL__sub_I__ZN11libzerocoin32SerialNumberSignatureOfKnowledgeC2EPKNS_14ZerocoinParamsE +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3496) _GLOBAL__sub_I__Z7GetTimev +0 7 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 12 + +fn=(3506) CObfuscationPool::SetNull() +0 35 +cfn=(3508) GetTimeMillis() +calls=1 0 +0 8609 +0 5 +cfn=(2898) +calls=1 0 +0 5207 +0 2 +cob=(3) +cfi=(295) +cfn=(3632) +calls=1 209 +0 6815 +0 1 +0 11 + +fn=(3514) boost::date_time::c_time::gmtime(long const*, tm*) +0 180 +cob=(3) +cfi=(269) +cfn=(3518) +calls=20 25 +0 15168 +0 20 +0 200 + +fn=(3640) CService::CService() +0 70 + +fn=(3644) CDBEnv::CDBEnv() +0 18 +cob=(5) +cfi=(254) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutexattr_init.c +cfn=(2836) pthread_mutexattr_init +calls=1 25 +0 4 +0 1 +0 5 +cob=(5) +cfi=(255) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutexattr_settype.c +cfn=(2840) pthread_mutexattr_settype +calls=1 25 +0 13 +0 1 +0 7 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 48 +0 1 +0 5 +cob=(5) +cfi=(256) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutexattr_destroy.c +cfn=(2844) pthread_mutexattr_destroy +calls=1 24 +0 3 +0 1 +0 5 +cfn=(3646) DbEnv::DbEnv(unsigned int) +calls=1 0 +0 1343 +0 24 + +fn=(3658) __os_id +0 15 +cob=(3) +cfi=(261) +cfn=(2914) +calls=1 59 +0 4 +0 1 +0 3 + +fn=(3696) _GLOBAL__sub_I_mnodeman +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3698) CGridnodeMan::CGridnodeMan() +calls=1 0 +0 272 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3698) +0 18 +cfn=(2832) +calls=2 0 +0 220 +0 4 +cfn=(2832) +calls=2 0 +0 220 +0 82 + +fn=(3718) _GLOBAL__sub_I__Z8HaveKeysRKSt6vectorIS_IhSaIhEESaIS1_EERK9CKeyStore +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3734) _GLOBAL__sub_I__ZN18CDeterministicMintC2Ev +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 385 +0 1 + +fn=(3752) _GLOBAL__sub_I_cmdline.cpp +0 4 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3768) _GLOBAL__sub_I_cxx_lock.cpp +0 6 +cfn=(3758) __static_initialization_and_destruction_0(int, int) +calls=1 0 +0 117 +0 2 + +fn=(4512) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > > >::_M_get_insert_unique_pos(std::pair > const&) +0 24 + +fn=(4552) boost::filesystem::path::filename() const +0 104 +cob=(47) +cfi=(220) +cfn=(4556) +calls=4 0 +0 1184 +0 4 +0 36 +cob=(3) +cfi=(169) +cfn=(662) +calls=2 42 +0 32 +0 2 +0 4 +cob=(3) +cfi=(169) +cfn=(662) +calls=2 42 +0 40 +0 2 +0 112 +cob=(3) +cfi=(202) +cfn=(912) +calls=4 225 +0 52 +0 4 +0 16 + +fn=(4736) InterpretNegativeSetting(std::__cxx11::basic_string, std::allocator >&, std::__cxx11::basic_string, std::allocator >&) +0 286 + +fn=(4904) secp256k1_context_create +0 28 +cob=(3) +cfi=(176) +cfn=(704) +calls=2 3023 +0 406 +0 2 +0 65 +cfn=(4906) secp256k1_ecmult_gen_blind +calls=1 0 +0 361717 +0 22 +cob=(3) +cfi=(176) +cfn=(704) +calls=1 3023 +0 645 +0 1 +0 7 +cob=(3) +cfi=(176) +cfn=(704) +calls=1 3023 +0 271 +0 1 +0 5 +cob=(3) +cfi=(176) +cfn=(704) +calls=1 3023 +0 271 +0 1 +0 5 +cob=(3) +cfi=(176) +cfn=(704) +calls=1 3023 +0 271 +0 1 +0 14 +cfn=(4974) secp256k1_gej_double_var.part.0 +calls=1 0 +0 1487 +0 21 +cfn=(4922) secp256k1_fe_sqr_inner +calls=1 0 +0 168 +0 4 +cfn=(4924) secp256k1_fe_mul_inner +calls=1 0 +0 216 +0 7 +cfn=(4924) +calls=1 0 +0 216 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 39 +cfn=(4976) secp256k1_gej_add_ge_var +calls=1 0 +0 2539 +0 81910 +cfn=(4976) +calls=16382 0 +0 41593898 +0 65538 +cfn=(4924) +calls=1 0 +0 216 +0 3 +cfn=(4980) secp256k1_fe_inv +calls=1 0 +0 42759 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 5 +cfn=(4924) +calls=1 0 +0 216 +0 5 +cfn=(4924) +calls=1 0 +0 216 +0 6 +cfn=(4924) +calls=1 0 +0 216 +0 18 +cfn=(4924) +calls=1 0 +0 216 +0 81910 +cfn=(4924) +calls=16382 0 +0 3538512 +0 49149 +cfn=(4922) +calls=16383 0 +0 2752344 +0 65532 +cfn=(4924) +calls=16383 0 +0 3538728 +0 81915 +cfn=(4924) +calls=16383 0 +0 3538728 +0 65532 +cfn=(4924) +calls=16383 0 +0 3538728 +0 114689 +cfn=(4982) secp256k1_ge_to_storage +calls=1 0 +0 175 +0 49149 +cfn=(4982) +calls=16383 0 +0 2867025 +0 49154 +cob=(3) +cfi=(176) +cfn=(1204) +calls=1 3087 +0 71 +0 1 +0 2 +cob=(3) +cfi=(176) +cfn=(1204) +calls=1 3087 +0 71 +0 1 +0 2 +cob=(3) +cfi=(176) +cfn=(1204) +calls=1 3087 +0 59 +0 1 +0 1 + +fn=(4928) secp256k1_scalar_set_b32 +0 1194 + +fn=(4962) MemoryPageLocker::Unlock(void const*, unsigned long) +0 16 +cob=(3) +cfi=(339) +cfn=(4966) +calls=2 78 +0 12 +0 2 +0 14 + +fn=(4974) +0 5120 +cfn=(4924) +calls=256 0 +0 55296 +0 2048 +cfn=(4922) +calls=256 0 +0 43008 +0 4608 +cfn=(4922) +calls=256 0 +0 43008 +0 768 +cfn=(4922) +calls=256 0 +0 43008 +0 2048 +cfn=(4922) +calls=256 0 +0 43008 +0 2304 +cfn=(4924) +calls=256 0 +0 55296 +0 19968 +cfn=(4924) +calls=256 0 +0 55296 +0 5888 + +fn=(5024) secp256k1_fe_normalize +0 142 + +fn=(5044) ecdsa_signature_parse_der_lax(secp256k1_context_struct const*, secp256k1_ecdsa_signature*, unsigned char const*, unsigned long) +0 21 +cfn=(5046) secp256k1_ecdsa_signature_parse_compact +calls=1 0 +0 232 +0 85 +cfn=(5046) +calls=1 0 +0 232 +0 86 + +fn=(5060) secp256k1_ecmult_odd_multiples_table.constprop.1 +0 21 +cfn=(4974) +calls=1 0 +0 1487 +0 20 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 36 +cfn=(4976) +calls=1 0 +0 2539 +0 30 +cfn=(4976) +calls=6 0 +0 15234 +0 32 +cfn=(4924) +calls=1 0 +0 216 +0 11 + +fn=(5926) __gnu_cxx::__enable_if::__value, bool>::__type std::operator==(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&) +0 19 +cob=(3) +cfi=(237) +cfn=(2328) +calls=1 59 +0 27 +0 1 +0 3 + +fn=(6016) tinyformat::detail::FormatIterator::streamStateFromFormat(std::ostream&, unsigned int&, char const*, int, int) +0 400 + +fn=(6022) tinyformat::detail::FormatIterator::~FormatIterator() +0 96 + +fn=(6068) void std::vector, std::allocator >, std::allocator, std::allocator > > >::emplace_back, std::allocator > >(std::__cxx11::basic_string, std::allocator >&&) +0 1212 +cfn=(6070) void std::vector, std::allocator >, std::allocator, std::allocator > > >::_M_realloc_insert, std::allocator > >(__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::__cxx11::basic_string, std::allocator >&&) +calls=12 0 +0 2718 + +fn=(6074) std::vector, std::allocator >, std::allocator, std::allocator > > >::vector(std::vector, std::allocator >, std::allocator, std::allocator > > > const&) +0 400 +cob=(47) +cfi=(220) +cfn=(2154) +calls=16 0 +0 1534 +0 16 +0 288 +cfn=(4734) void std::__cxx11::basic_string, std::allocator >::_M_construct(char*, char*, std::forward_iterator_tag) [clone .constprop.0] +calls=16 0 +0 880 +0 560 +cfn=(4734) +calls=80 0 +0 4464 +0 560 + +fn=(6076) boost::date_time::period_formatter > >::period_formatter(boost::date_time::period_formatter > > const&) +0 176 +cfn=(3060) void std::__cxx11::basic_string, std::allocator >::_M_construct(char*, char*, std::forward_iterator_tag) +calls=8 0 +0 288 +0 48 +cfn=(3060) +calls=8 0 +0 288 +0 56 +cfn=(3060) +calls=8 0 +0 288 +0 56 +cfn=(3060) +calls=8 0 +0 288 +0 80 + +fn=(6136) boost::date_time::date_facet > >::do_put_tm(std::ostreambuf_iterator >, std::ios_base&, char, tm const&, std::__cxx11::basic_string, std::allocator >) const +0 152 +cob=(47) +cfi=(220) +cfn=(4486) +calls=4 0 +0 40 +0 4 +0 8 +cob=(47) +cfi=(220) +cfn=(6140) +calls=4 0 +0 476 +0 4 +0 48 +cob=(47) +cfi=(220) +cfn=(6144) +calls=4 0 +0 23761 +0 4 +0 24 +cob=(2) +cfi=(18) +cfn=(4202) 0x00000000001649b8 +calls=4 0 +0 60 +0 52 + +fn=(6218) LogPrint(char const*, char const*) +0 8 +cfn=(6038) LogAcceptCategory(char const*) +calls=1 0 +0 28 +0 15 +cfn=(2872) std::__cxx11::basic_string, std::allocator >::basic_string(char const*, std::allocator const&) [clone .isra.0] +calls=1 0 +0 97 +0 2 +cfn=(6044) LogPrintStr(std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 28609 +0 28 +cfn=(6038) +calls=3 0 +0 87 +0 49 +cfn=(6038) +calls=2 0 +0 58 +0 42 +cfn=(6038) +calls=2 0 +0 58 +0 42 +cfn=(6038) +calls=2 0 +0 58 +0 22 + +fn=(6230) boost::this_thread::interruption_enabled() +0 3 +cfn=(6232) boost::detail::get_current_thread_data() +calls=1 0 +0 229 +0 6 + +fn=(6304) MilliSleep(long) +0 8 +cfn=(6306) void boost::this_thread::sleep_for >(boost::chrono::duration > const&) +calls=1 0 +0 948 +0 5 + +fn=(6344) GenerateBitcoins(bool, CWallet*, int) +0 34 + +fn=(6352) CGridnodeDB::CGridnodeDB() +0 32 +cfn=(4526) GetDataDir(bool) +calls=1 0 +0 113 +0 8 +cfn=(3060) +calls=1 0 +0 125 +0 3 +cfn=(4546) boost::filesystem::path::operator/=(boost::filesystem::path const&) +calls=1 0 +0 346 +0 23 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 75 +0 1 +0 18 + +fn=(6382) void Unserialize >(CDataStream&, std::vector >&, int, int) +0 19 +cfn=(6384) CGridnode::CGridnode() +calls=1 0 +0 1589 +0 6 +cfn=(6370) unsigned long ReadCompactSize(CDataStream&) +calls=1 0 +0 69 +0 5 +cfn=(6398) CGridnode::~CGridnode() +calls=1 0 +0 50 +0 11 + +fn=(6392) CGridnodePing::swap(CGridnodePing&, CGridnodePing&) [clone .isra.0] +0 248 +cfn=(3226) std::vector >::operator=(std::vector > const&) +calls=2 0 +0 80 +0 12 +cfn=(3226) +calls=2 0 +0 80 +0 94 +cfn=(3226) +calls=2 0 +0 80 +0 10 +cfn=(3226) +calls=2 0 +0 80 +0 326 + +fn=(6412) CGridnodeMan::ToString[abi:cxx11]() const +0 28 +cob=(47) +cfi=(220) +cfn=(6042) +calls=2 0 +0 4362 +0 2 +0 8 +cob=(47) +cfi=(220) +cfn=(6020) +calls=2 0 +0 422 +0 2 +0 14 +cob=(47) +cfi=(220) +cfn=(6416) +calls=2 0 +0 2789 +0 2 +0 10 +cob=(47) +cfi=(220) +cfn=(6020) +calls=2 0 +0 1066 +0 2 +0 6 +cob=(47) +cfi=(220) +cfn=(6416) +calls=2 0 +0 606 +0 2 +0 10 +cob=(47) +cfi=(220) +cfn=(6020) +calls=2 0 +0 256 +0 2 +0 6 +cob=(47) +cfi=(220) +cfn=(6416) +calls=2 0 +0 606 +0 2 +0 10 +cob=(47) +cfi=(220) +cfn=(6020) +calls=2 0 +0 256 +0 2 +0 6 +cob=(47) +cfi=(220) +cfn=(6416) +calls=2 0 +0 606 +0 2 +0 10 +cob=(47) +cfi=(220) +cfn=(6020) +calls=2 0 +0 258 +0 2 +0 6 +cob=(47) +cfi=(220) +cfn=(6416) +calls=2 0 +0 606 +0 2 +0 6 +cob=(47) +cfi=(220) +cfn=(6170) +calls=2 0 +0 676 +0 2 +0 4 +cob=(47) +cfi=(220) +cfn=(6262) +calls=2 0 +0 368 +0 2 +0 20 + +fn=(6450) void std::vector >::_M_range_insert(__gnu_cxx::__normal_iterator > >, char const*, char const*, std::forward_iterator_tag) +0 2910 +cfn=(2998) OPENSSL_cleanse +calls=10 0 +0 264 +0 20 +cob=(47) +cfi=(220) +cfn=(3210) +calls=10 0 +0 860 +0 10 +0 778 +cob=(47) +cfi=(220) +cfn=(2154) +calls=13 0 +0 703 +0 13 +0 97 + +fn=(6452) void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) [clone .isra.0] +0 28 +cfn=(6448) void WriteCompactSize(CDataStream&, unsigned long) +calls=2 0 +0 170 +0 26 + +fn=(6496) void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +0 17 +cfn=(6448) +calls=1 0 +0 85 +0 16 + +fn=(6516) CGridnodePayments::ToString[abi:cxx11]() const +0 14 +cob=(47) +cfi=(220) +cfn=(6042) +calls=1 0 +0 2181 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 213 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6416) +calls=1 0 +0 315 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 537 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6416) +calls=1 0 +0 303 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6170) +calls=1 0 +0 481 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 9 +0 9 +cob=(47) +cfi=(220) +cfn=(4806) +calls=1 0 +0 55 +0 1 +0 10 + +fn=(6522) UnregisterNodeSignals(CNodeSignals&) +0 20 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 9 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 16 +cfn=(2706) +calls=1 0 +0 14 +0 8 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 9 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 16 +cfn=(2706) +calls=1 0 +0 14 +0 8 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 9 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 15 +cfn=(2706) +calls=1 0 +0 14 +0 8 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 9 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 15 +cfn=(2706) +calls=1 0 +0 14 +0 8 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 9 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 16 +cfn=(2706) +calls=1 0 +0 14 +0 11 + +fn=(6570) +0 11 +cfn=(6572) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 +0 3 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 10 + +fn=(6582) +0 7 + +fn=(6584) +0 1235 +cob=(47) +cfi=(220) +cfn=(3210) +calls=95 0 +0 10070 +0 95 + +fn=(6610) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 64 + +fn=(6618) +0 11 +cfn=(6620) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 + +fn=(6620) +0 16 + +fn=(6634) +0 10 +cfn=(6636) CDBEnv::EnvShutdown() +calls=1 0 +0 18 +0 3 +cfn=(6638) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, Db*>, std::_Select1st, std::allocator > const, Db*> >, std::less, std::allocator > >, std::allocator, std::allocator > const, Db*> > >::_M_erase(std::_Rb_tree_node, std::allocator > const, Db*> >*) +calls=1 0 +0 18 +0 3 +cfn=(6640) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, int>, std::_Select1st, std::allocator > const, int> >, std::less, std::allocator > >, std::allocator, std::allocator > const, int> > >::_M_erase(std::_Rb_tree_node, std::allocator > const, int> >*) +calls=1 0 +0 18 +0 2 +cfn=(6642) DbEnv::~DbEnv() +calls=1 0 +0 823 +0 3 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 15 + +fn=(6648) __env_close_pp +0 38 +cfn=(6650) __env_close +calls=1 0 +0 722 +0 2 + +fn=(6732) +0 33 +cfn=(6734) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=3 0 +0 1900 + +fn=(6740) +0 17 + +fn=(6774) +0 36 +cfn=(2776) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=3 0 +0 48 +0 6 +cfn=(2778) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +calls=3 0 +0 69 +0 24 +cob=(47) +cfi=(220) +cfn=(4768) +calls=3 0 +0 330 +0 3 + +fn=(6776) +0 33 +cob=(47) +cfi=(220) +cfn=(4768) +calls=3 0 +0 330 +0 3 + +fn=(6778) +0 33 +cob=(47) +cfi=(220) +cfn=(4768) +calls=3 0 +0 330 +0 3 + +fn=(6786) boost::detail::sp_counted_base::weak_release() +0 288 +cfn=(6964) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6960) boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6948) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6936) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6924) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6866) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6830) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6826) boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +calls=3 0 +0 366 +cfn=(6814) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6790) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(6772) +calls=4 0 +0 488 + +fn=(6800) +0 48 +cfn=(2786) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=4 0 +0 64 +0 8 +cfn=(2788) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +calls=4 0 +0 92 +0 32 +cob=(47) +cfi=(220) +cfn=(4768) +calls=4 0 +0 440 +0 4 + +fn=(6826) +0 33 +cob=(47) +cfi=(220) +cfn=(4768) +calls=3 0 +0 330 +0 3 + +fn=(6836) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6848) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6858) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6892) +0 11 +cfn=(6288) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, boost::shared_ptr >, std::_Select1st, std::allocator > const, boost::shared_ptr > >, std::less, std::allocator > >, std::allocator, std::allocator > const, boost::shared_ptr > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, boost::shared_ptr > >*) +calls=1 0 +0 20 + +fn=(6902) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 + +fn=(6914) +0 22 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6964) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6974) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 16 + +fn=(6990) +0 13 + +fn=(6992) +0 59 +cfn=(6994) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 +0 3 +cfn=(6996) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 +0 3 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 10 + +fn=(6996) +0 16 + +fn=(7042) +0 11 +cfn=(7044) std::_Rb_tree, (anonymous namespace)::CBlockIndexWorkComparator, std::allocator >::_M_erase(std::_Rb_tree_node*) +calls=1 0 +0 15 + +fn=(7062) +0 13 + +fn=(7108) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7110) +0 13 +cfn=(2707) +calls=1 0 +0 273 +0 4 +cfn=(2707) +calls=1 0 +0 320 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7114) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7116) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7130) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7170) +0 13 +cfn=(2707) +calls=1 0 +0 273 +0 4 +cfn=(2707) +calls=1 0 +0 1442 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7190) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7196) boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(2150) _GLOBAL__sub_I__Z15WaitForShutdownPN5boost12thread_groupE +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 109791 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cfn=(2698) boost::exception_ptr boost::exception_detail::get_static_exception_object() +calls=1 0 +0 1338 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 4 +cfn=(2720) boost::exception_ptr boost::exception_detail::get_static_exception_object() +calls=1 0 +0 825 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(2730) CClientUIInterface::CClientUIInterface() +0 17 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 7 +cfn=(2732) boost::signals2::detail::signal_impl, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::signal_impl(boost::signals2::last_value const&, std::less const&) +calls=1 0 +0 1106 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 20 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 268 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 14 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 14 +cfn=(2742) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(2744) std::__cxx11::_List_base >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cfn=(2740) +calls=1 0 +0 85 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(2746) +calls=1 0 +0 1326 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(2752) +calls=1 0 +0 1108 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(2758) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +calls=1 0 +0 1108 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(2764) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +calls=1 0 +0 1325 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(2770) boost::signals2::detail::signal_impl, std::allocator > const&, int), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&, int)>, boost::function, std::allocator > const&, int)>, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +calls=1 0 +0 1328 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 21 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(2776) +calls=1 0 +0 16 +0 2 +cfn=(2778) +calls=1 0 +0 23 +0 10 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cfn=(2740) +calls=1 0 +0 85 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 21 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(2780) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(2782) +calls=1 0 +0 23 +0 10 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cfn=(2740) +calls=1 0 +0 85 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(2784) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +calls=1 0 +0 1325 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 29 + +fn=(2898) +0 5103 +cfn=(2900) RAND_get_rand_method +calls=729 0 +0 3680 +0 8019 +cfn=(2908) ssleay_rand_nopseudo_bytes +calls=729 0 +0 4531172 + +fn=(2976) EVP_DigestUpdate +0 12216 +cfn=(2978) +calls=6108 0 +0 446457 + +fn=(2998) +0 58748 + +fn=(3012) CNodeSignals::CNodeSignals() +0 18 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(3014) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +calls=1 0 +0 1306 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(3020) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +calls=1 0 +0 1086 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(3026) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +calls=1 0 +0 1086 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(3032) +calls=1 0 +0 1303 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(2752) +calls=1 0 +0 1328 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 20 + +fn=(3020) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 22 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(3022) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(3024) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 20 + +fn=(3022) +0 32 + +fn=(3056) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 92 + +fn=(3086) _GLOBAL__sub_I__Z13GetTimeOffsetv +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 385 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3164) _GLOBAL__sub_I__Z16GetNetworkHashPSii +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3184) base_uint<256u>::base_uint(std::__cxx11::basic_string, std::allocator > const&) +0 250 +cfn=(3186) base_uint<256u>::SetHex(std::__cxx11::basic_string, std::allocator > const&) +calls=25 0 +0 64407 + +fn=(3188) base_uint<256u>::SetHex(char const*) +0 525 +cob=(3) +cfi=(268) +cfn=(3192) +calls=25 34 +0 200 +0 25 +0 6062 +cfn=(3198) HexDigit(char) +calls=1478 0 +0 19214 +0 50 +cfn=(3198) +calls=25 0 +0 325 +0 10577 +cfn=(3198) +calls=740 0 +0 9620 +0 4434 +cfn=(3198) +calls=738 0 +0 9594 +0 3257 +cob=(3) +cfi=(268) +cfn=(3196) +calls=15 45 +0 165 +0 15 +0 69 + +fn=(3206) std::_Deque_base, std::allocator > >::~_Deque_base() +0 126 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 1594 +0 6 +0 66 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 536 +0 6 + +fn=(3286) void Serialize_impl, CTxOut>(CHashWriter&, std::vector > const&, int, int, CTxOut const&) [clone .isra.0] +0 64 +cfn=(3280) void WriteCompactSize(CHashWriter&, unsigned long) +calls=4 0 +0 336 +0 44 +cfn=(3276) +calls=4 0 +0 244 +0 16 +cfn=(3282) void Serialize_impl >(CHashWriter&, std::vector > const&, int, int, unsigned char const&) [clone .isra.0] +calls=4 0 +0 14404 +0 44 + +fn=(3302) sph_blake512_init +0 340 + +fn=(3358) keccak_core +0 384 +cob=(3) +cfi=(202) +cfn=(912) +calls=8 225 +0 104 +0 8 +0 49128 +cob=(3) +cfi=(202) +cfn=(912) +calls=8 225 +0 96 +0 8 +0 16 + +fn=(3368) skein_big_core +0 280 +cob=(3) +cfi=(202) +cfn=(912) +calls=10 225 +0 120 +0 10 +0 30 + +fn=(3376) void std::vector >::emplace_back(CDNSSeedData&&) +0 568 +cfn=(3378) void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CDNSSeedData&&) +calls=16 0 +0 4805 + +fn=(3400) _GLOBAL__sub_I__ZNK6CCoins12CalcMaskSizeERjS0_ +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3410) _GLOBAL__sub_I__Z11ParseScriptNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3424) _GLOBAL__sub_I__ZN14CMessageHeaderC2Ev +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3436) _GLOBAL__sub_I_nMaxDatacarrierBytes +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3448) _GLOBAL__sub_I__ZN11libzerocoin25IntToZerocoinDenominationEl +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3458) _GLOBAL__sub_I__ZN11libzerocoin15CalculateParamsERNS_14ZerocoinParamsE7CBigNumNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEj +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3460) _GLOBAL__sub_I__Z10BaseParamsv +0 10 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 75 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 75 +0 1 +0 7 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 77 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 75 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3476) OPENSSL_init +0 11 + +fn=(3500) _GLOBAL__sub_I_obfuScationPool +0 21 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 5 +cfn=(3252) CMutableTransaction::CMutableTransaction() +calls=1 0 +0 18 +0 12 +cfn=(3252) +calls=1 0 +0 18 +0 12 +cfn=(3252) +calls=1 0 +0 18 +0 20 +cfn=(3502) +calls=1 0 +0 22 +0 17 +cfn=(3504) std::vector >::~vector() +calls=1 0 +0 22 +0 4 +cfn=(3504) +calls=1 0 +0 22 +0 2 +cfn=(3502) +calls=1 0 +0 22 +0 4 +cfn=(3506) +calls=1 0 +0 20685 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 560 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 3 +cfn=(3638) CTxIn::CTxIn() +calls=1 0 +0 21 +0 2 +cfn=(3640) +calls=1 0 +0 14 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 8 + +fn=(6534) UnregisterAllValidationInterfaces() +0 15 +cfn=(6536) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::disconnect_all_slots() +calls=1 0 +0 138 +0 8 +cfn=(6292) boost::signals2::mutex::lock() +calls=1 0 +0 43 +0 7 +cfn=(6296) boost::signals2::mutex::unlock() +calls=1 0 +0 33 +0 13 +cfn=(2706) +calls=1 0 +0 14 +0 8 +cfn=(6292) +calls=1 0 +0 43 +0 7 +cfn=(6296) +calls=1 0 +0 33 +0 13 +cfn=(2706) +calls=1 0 +0 14 +0 4 +cfn=(6536) +calls=1 0 +0 138 +0 8 +cfn=(6292) +calls=1 0 +0 43 +0 7 +cfn=(6296) +calls=1 0 +0 33 +0 12 +cfn=(2706) +calls=1 0 +0 14 +0 8 +cfn=(6292) +calls=1 0 +0 43 +0 7 +cfn=(6296) +calls=1 0 +0 33 +0 13 +cfn=(2706) +calls=1 0 +0 14 +0 8 +cfn=(6292) +calls=1 0 +0 43 +0 7 +cfn=(6296) +calls=1 0 +0 33 +0 13 +cfn=(2706) +calls=1 0 +0 14 +0 8 +cfn=(6292) +calls=1 0 +0 43 +0 7 +cfn=(6296) +calls=1 0 +0 33 +0 13 +cfn=(2706) +calls=1 0 +0 14 +0 8 +cfn=(6292) +calls=1 0 +0 43 +0 7 +cfn=(6296) +calls=1 0 +0 33 +0 13 +cfn=(2706) +calls=1 0 +0 14 +0 11 + +fn=(6548) void tinyformat::detail::FormatIterator::accept(char const (&) [9]) +0 24 +cob=(3) +cfi=(169) +cfn=(662) +calls=1 42 +0 20 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 213 +0 1 +0 14 +cfn=(5982) tinyformat::detail::FormatIterator::printFormatStringLiteral(std::ostream&, char const*) +calls=1 0 +0 112 +0 7 +cfn=(6016) +calls=1 0 +0 80 +0 14 + +fn=(3648) DbEnv::initialize(__db_env*) +0 9 +cfn=(3650) DbEnv::error_policy() +calls=1 0 +0 13 +0 12 +cfn=(3652) db_env_create +calls=1 0 +0 1249 +0 14 + +fn=(3668) __memp_env_create +0 6 + +fn=(3690) CGridnodeSync::Reset() +0 12 +cfn=(3692) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 +0 8 +cfn=(3692) +calls=1 0 +0 16 +0 8 +cfn=(3692) +calls=1 0 +0 16 +0 13 +cfn=(3388) GetTime() +calls=1 0 +0 21 +0 7 + +fn=(3708) std::_Deque_base, std::allocator > >::_M_initialize_map(unsigned long) +0 42 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 249 +0 2 +0 58 + +fn=(3730) _GLOBAL__sub_I__Z20getNumberOfCoinsUsedRKSt3mapIN11libzerocoin16CoinDenominationElSt4lessIS1_ESaISt4pairIKS1_lEEE +0 8 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3742) _GLOBAL__sub_I_config_file.cpp +0 4 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3744) _GLOBAL__sub_I_value_semantic.cpp +0 5 +cfn=(2872) +calls=1 0 +0 76 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3766) _GLOBAL__sub_I_cxx_except.cpp +0 6 +cfn=(3758) +calls=1 0 +0 117 +0 2 + +fn=(4492) boost::signals2::detail::signal_impl, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::nolock_force_unique_connection_list(boost::signals2::detail::garbage_collecting_lock&) +0 51 +cfn=(4494) boost::signals2::detail::signal_impl, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::nolock_cleanup_connections_from(boost::signals2::detail::garbage_collecting_lock&, bool, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > const&, unsigned int) const +calls=1 0 +0 47 +0 4 + +fn=(4514) AppInit(int, char**) +0 26 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cfn=(2850) boost::condition_variable::condition_variable() +calls=1 0 +0 112 +0 3 +cfn=(2850) +calls=1 0 +0 112 +0 2 +cfn=(2850) +calls=1 0 +0 112 +0 4 +cfn=(4516) CScheduler::CScheduler() +calls=1 0 +0 165 +0 3 +cfn=(4518) ParseParameters(int, char const* const*) +calls=1 0 +0 82 +0 4 +cfn=(2872) +calls=1 0 +0 82 +0 3 +cfn=(4524) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::find(std::__cxx11::basic_string, std::allocator > const&) const +calls=1 0 +0 30 +0 6 +cfn=(6550) CScheduler::~CScheduler() +calls=1 0 +0 112 +0 2 +cfn=(6554) boost::thread_group::~thread_group() +calls=1 0 +0 207 +0 16 +cfn=(2872) +calls=1 0 +0 80 +0 3 +cfn=(4524) +calls=1 0 +0 30 +0 16 +cfn=(4526) +calls=1 0 +0 4299 +0 5 +cfn=(4558) boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*) +calls=1 0 +0 55 +0 5 +cfn=(4562) ReadConfigFile(std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >&, std::map, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >&) +calls=1 0 +0 74581 +0 1 +cfn=(4820) SelectParamsFromCommandLine() +calls=1 0 +0 559 +0 9 +cfn=(2872) +calls=1 0 +0 76 +0 3 +cfn=(4824) GetBoolArg(std::__cxx11::basic_string, std::allocator > const&, bool) +calls=1 0 +0 225 +0 12 +cfn=(2872) +calls=1 0 +0 80 +0 3 +cfn=(4830) SoftSetBoolArg(std::__cxx11::basic_string, std::allocator > const&, bool) +calls=1 0 +0 1418 +0 6 +cfn=(4834) AppInit2(boost::thread_group&, CScheduler&) +calls=1 0 +0 67422095 +0 5 +cfn=(6214) Interrupt(boost::thread_group&) +calls=1 0 +0 922 +0 1 +cfn=(6252) Shutdown() +calls=1 0 +0 223042 +0 5 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4524) +calls=1 0 +0 30 +0 7 + +fn=(4518) +0 16 +cfn=(4520) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >*) +calls=1 0 +0 18 +0 8 +cfn=(4522) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >*) +calls=1 0 +0 22 +0 18 + +fn=(4526) +0 144 +cob=(5) +cfi=(180) +cfn=(714) +calls=9 64 +0 315 +0 9 +0 117 +cob=(5) +cfi=(182) +cfn=(724) +calls=9 356 +0 279 +0 9 +0 152 +cfn=(2872) +calls=2 0 +0 194 +0 8 +cfn=(4524) +calls=2 0 +0 227 +0 9 +cfn=(5902) BaseParams() +calls=1 0 +0 13 +0 6 +cfn=(3060) +calls=1 0 +0 34 +0 3 +cfn=(4546) +calls=1 0 +0 25 +0 9 +cfn=(4550) boost::filesystem::detail::create_directories(boost::filesystem::path const&, boost::system::error_code*) +calls=2 0 +0 1010 +0 18 +cfn=(2872) +calls=2 0 +0 198 +0 8 +cfn=(4528) GetDefaultDataDir(std::__cxx11::basic_string, std::allocator >) +calls=2 0 +0 5714 +0 8 +cob=(47) +cfi=(220) +cfn=(4532) +calls=2 0 +0 58 +0 2 +0 14 + +fn=(4536) void std::__cxx11::basic_string, std::allocator >::_M_construct, __gnu_cxx::__normal_iterator, std::allocator > >, boost::use_default, boost::use_default> >(boost::iterators::transform_iterator, __gnu_cxx::__normal_iterator, std::allocator > >, boost::use_default, boost::use_default>, boost::iterators::transform_iterator, __gnu_cxx::__normal_iterator, std::allocator > >, boost::use_default, boost::use_default>, std::input_iterator_tag) +0 58 +cob=(47) +cfi=(220) +cfn=(2622) +calls=2 0 +0 344 +0 2 +0 108 +cob=(47) +cfi=(220) +cfn=(2622) +calls=12 0 +0 2064 +0 12 +0 56 +cob=(47) +cfi=(220) +cfn=(4540) +calls=14 0 +0 70 +0 110 + +fn=(4564) GetConfigFile() +0 21 +cfn=(2876) void std::__cxx11::basic_string, std::allocator >::_M_construct(char const*, char const*, std::forward_iterator_tag) +calls=1 0 +0 55 +0 5 +cfn=(2876) +calls=1 0 +0 57 +0 5 +cfn=(4566) GetArg(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 120 +0 7 +cfn=(3060) +calls=1 0 +0 55 +0 13 +cfn=(4568) boost::filesystem::path::root_directory() const +calls=1 0 +0 33 +0 20 +cfn=(4526) +calls=1 0 +0 113 +0 6 +cfn=(3060) +calls=1 0 +0 125 +0 3 +cfn=(4546) +calls=1 0 +0 493 +0 3 +cob=(47) +cfi=(220) +cfn=(4532) +calls=1 0 +0 29 +0 1 +0 3 + +fn=(4646) boost::program_options::detail::common_config_file_iterator::add_option(char const*) +0 20 +cob=(3) +cfi=(169) +cfn=(662) +calls=1 42 +0 16 +0 1 +0 32 +cob=(47) +cfi=(220) +cfn=(4650) +calls=1 0 +0 9 +0 1 +0 13 +cfn=(4652) std::pair, std::allocator > >, bool> std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_insert_unique, std::allocator > const&>(std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 309 +0 2 + +fn=(4742) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::__cxx11::basic_string, std::allocator > const&) +0 125 +cob=(47) +cfi=(220) +cfn=(3072) +calls=4 0 +0 183 +0 4 +0 94 +cob=(47) +cfi=(220) +cfn=(3080) +calls=2 0 +0 28 +0 2 +0 8 +cob=(47) +cfi=(220) +cfn=(3072) +calls=2 0 +0 91 +0 2 +0 32 +cob=(47) +cfi=(220) +cfn=(3072) +calls=2 0 +0 92 +0 2 +0 18 +cfn=(4744) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_get_insert_unique_pos(std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 34 + +fn=(4760) std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_erase(std::_Rb_tree_node, std::allocator > >*) +0 68 +cfn=(4761) std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_erase(std::_Rb_tree_node, std::allocator > >*)'2 +calls=3 0 +0 54 +0 21 +cob=(47) +cfi=(220) +cfn=(3210) +calls=3 0 +0 258 +0 3 +0 46 + +fn=(4761) +0 54 + +fn=(4820) +0 7 +cfn=(4822) NetworkIdFromCommandLine() +calls=1 0 +0 501 +0 6 +cfn=(4826) SelectBaseParams(CBaseChainParams::Network) +calls=1 0 +0 18 +0 2 +cfn=(4828) Params(CBaseChainParams::Network) +calls=1 0 +0 17 +0 8 + +fn=(4920) secp256k1_rfc6979_hmac_sha256_generate.constprop.0 +0 105 +cfn=(4914) secp256k1_hmac_sha256_initialize.constprop.0 +calls=5 0 +0 34185 +0 55 +cfn=(4918) secp256k1_sha256_finalize +calls=5 0 +0 17795 +0 375 +cfn=(4916) secp256k1_sha256_transform +calls=5 0 +0 16950 +0 873 +cfn=(4914) +calls=2 0 +0 13674 +0 8 +cfn=(4926) secp256k1_sha256_write +calls=2 0 +0 88 +0 8 +cfn=(4926) +calls=2 0 +0 72 +0 6 +cfn=(4918) +calls=2 0 +0 7118 +0 8 +cfn=(4926) +calls=2 0 +0 88 +0 12 +cfn=(4918) +calls=2 0 +0 7118 +0 6 +cfn=(4914) +calls=2 0 +0 13674 +0 8 +cfn=(4926) +calls=2 0 +0 88 +0 6 +cfn=(4918) +calls=2 0 +0 7118 +0 8 +cfn=(4926) +calls=2 0 +0 88 +0 12 +cfn=(4918) +calls=2 0 +0 7118 +0 2 + +fn=(4922) +0 11443152 + +fn=(4936) secp256k1_fe_normalizes_to_zero +0 31529 + +fn=(4996) boost::mutex::unlock() +0 20 +cob=(5) +cfi=(182) +cfn=(724) +calls=2 356 +0 38 +0 2 +0 20 + +fn=(5014) CKey::Sign(uint256 const&, std::vector >&, unsigned int) const +0 49 +cfn=(5018) secp256k1_ecdsa_sign +calls=1 0 +0 462067 +0 7 +cfn=(5034) secp256k1_ecdsa_signature_serialize_der +calls=1 0 +0 336 +0 18 +cfn=(5016) std::vector >::_M_default_append(unsigned long) +calls=1 0 +0 143 +0 2 + +fn=(5016) +0 160 +cob=(3) +cfi=(204) +cfn=(952) +calls=4 167 +0 54 +0 4 +0 100 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 12 + +fn=(5022) secp256k1_ecdsa_sig_sign +0 26 +cfn=(4930) secp256k1_ecmult_gen +calls=1 0 +0 240565 +0 5 +cfn=(4980) +calls=1 0 +0 42759 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 5 +cfn=(4924) +calls=1 0 +0 216 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 21 +cfn=(5024) +calls=1 0 +0 71 +0 2 +cfn=(5024) +calls=1 0 +0 71 +0 4 +cfn=(5010) secp256k1_fe_get_b32 +calls=1 0 +0 99 +0 4 +cfn=(4928) +calls=1 0 +0 92 +0 8 +cfn=(5026) secp256k1_scalar_mul_512 +calls=1 0 +0 115 +0 3 +cfn=(5028) secp256k1_scalar_reduce_512 +calls=1 0 +0 235 +0 3 +cfn=(4932) secp256k1_scalar_add +calls=1 0 +0 123 +0 3 +cfn=(5030) secp256k1_scalar_inverse +calls=1 0 +0 98792 +0 4 +cfn=(5026) +calls=1 0 +0 115 +0 3 +cfn=(5028) +calls=1 0 +0 235 +0 72 + +fn=(5036) CPubKey::Verify(uint256 const&, std::vector > const&) const +0 29 +cfn=(5038) secp256k1_ec_pubkey_parse +calls=1 0 +0 42983 +0 9 +cfn=(5044) +calls=1 0 +0 656 +0 6 +cfn=(5048) secp256k1_ecdsa_signature_normalize +calls=1 0 +0 75 +0 5 +cfn=(5050) secp256k1_ecdsa_verify +calls=1 0 +0 668750 +0 5 + +fn=(5074) sanity_test_range_fmt() +0 16 +cob=(47) +cfi=(220) +cfn=(5078) +calls=1 0 +0 38160 +0 1 +0 4 +cfn=(5850) +calls=1 0 +0 4424 + +fn=(5968) _[abi:cxx11](char const*) +0 34 +cfn=(5970) boost::signals2::detail::signal_impl, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::operator()(char const*) +calls=2 0 +0 706 +0 40 +cob=(3) +cfi=(169) +cfn=(662) +calls=2 42 +0 57 +0 2 +0 23 +cob=(47) +cfi=(220) +cfn=(2880) +calls=1 0 +0 69 +0 1 +0 8 +cob=(3) +cfi=(202) +cfn=(912) +calls=1 225 +0 22 +0 1 +0 4 +cob=(3) +cfi=(202) +cfn=(912) +calls=1 225 +0 15 +0 1 +0 6 + +fn=(5978) void tinyformat::format, std::allocator >>(std::ostream&, char const*, std::__cxx11::basic_string, std::allocator > const&) +0 32 +cfn=(5980) void tinyformat::detail::FormatIterator::accept, std::allocator > >(std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 5375 +0 268 +cob=(47) +cfi=(220) +cfn=(5986) +calls=1 0 +0 115 +0 1 +0 5 +cfn=(6022) +calls=1 0 +0 32 +0 18 + +fn=(5982) +0 172 +cob=(47) +cfi=(220) +cfn=(5986) +calls=5 0 +0 5214 +0 5 +0 214 + +fn=(6046) AreBaseParamsConfigured() +0 48 + +fn=(6072) boost::date_time::date_generator_formatter > >::date_generator_formatter() +0 56 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 381 +0 4 +0 68 +cfn=(2872) +calls=4 0 +0 320 +0 12 +cfn=(6068) +calls=4 0 +0 116 +0 28 +cfn=(2872) +calls=4 0 +0 320 +0 12 +cfn=(6068) +calls=4 0 +0 116 +0 24 +cfn=(2872) +calls=4 0 +0 320 +0 12 +cfn=(6068) +calls=4 0 +0 116 +0 24 +cfn=(2872) +calls=4 0 +0 304 +0 12 +cfn=(6068) +calls=4 0 +0 116 +0 24 +cfn=(2872) +calls=4 0 +0 304 +0 12 +cfn=(6068) +calls=4 0 +0 116 +0 24 +cfn=(2872) +calls=4 0 +0 304 +0 12 +cfn=(6068) +calls=4 0 +0 116 +0 24 +cfn=(2872) +calls=4 0 +0 304 +0 12 +cfn=(6068) +calls=4 0 +0 116 +0 24 +cfn=(2872) +calls=4 0 +0 336 +0 12 +cfn=(6068) +calls=4 0 +0 116 +0 24 +cfn=(2872) +calls=4 0 +0 328 +0 12 +cfn=(6068) +calls=4 0 +0 116 +0 44 + +fn=(6080) boost::date_time::period_formatter > >::~period_formatter() +0 348 + +fn=(6082) +0 1870 +cob=(47) +cfi=(220) +cfn=(3210) +calls=24 0 +0 2064 +0 24 +0 136 + +fn=(6132) boost::gregorian::to_tm(boost::gregorian::date const&) +0 84 +cfn=(6130) boost::date_time::gregorian_calendar_base, unsigned int>::from_day_number(unsigned int) +calls=4 0 +0 252 +0 48 +cfn=(6130) +calls=4 0 +0 252 +0 232 +cfn=(6130) +calls=4 0 +0 252 +0 44 +cfn=(3510) boost::gregorian::date::date(boost::gregorian::greg_year, boost::gregorian::greg_month, boost::gregorian::greg_day) +calls=4 0 +0 252 +0 120 + +fn=(6384) +0 26 +cfn=(2832) +calls=2 0 +0 220 +0 26 +cfn=(3640) +calls=2 0 +0 28 +0 20 +cfn=(6386) CGridnodePing::CGridnodePing() +calls=2 0 +0 462 +0 6 +cob=(5) +cfi=(180) +cfn=(714) +calls=2 64 +0 70 +0 2 +0 124 +cfn=(3226) +calls=2 0 +0 80 +0 10 +cfn=(3226) +calls=2 0 +0 80 +0 16 +cfn=(3640) +calls=2 0 +0 28 +0 28 +cfn=(6388) GetAdjustedTime() +calls=2 0 +0 272 +0 6 +cfn=(6386) +calls=2 0 +0 462 +0 6 +cfn=(6392) +calls=2 0 +0 1010 +0 4 +cfn=(6394) CGridnodePing::~CGridnodePing() +calls=2 0 +0 44 +0 24 +cfn=(6396) boost::recursive_mutex::unlock() +calls=2 0 +0 104 +0 20 + +fn=(6386) +0 320 +cfn=(3226) +calls=4 0 +0 160 +0 20 +cfn=(3226) +calls=4 0 +0 160 +0 264 + +fn=(6462) CBudgetDB::CBudgetDB() +0 25 +cfn=(2872) +calls=1 0 +0 82 +0 2 +cfn=(4526) +calls=1 0 +0 113 +0 8 +cfn=(3060) +calls=1 0 +0 125 +0 3 +cfn=(4546) +calls=1 0 +0 346 +0 4 +cob=(47) +cfi=(220) +cfn=(4532) +calls=1 0 +0 29 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 200 +0 1 +0 11 + +fn=(6472) void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +0 19 +cfn=(6474) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 24 +0 7 +cfn=(6370) +calls=1 0 +0 69 +0 21 + +fn=(6474) +0 72 + +fn=(6484) CBudgetManager::ToString[abi:cxx11]() const +0 14 +cob=(47) +cfi=(220) +cfn=(6042) +calls=1 0 +0 2181 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 211 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6416) +calls=1 0 +0 315 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 537 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6416) +calls=1 0 +0 303 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 127 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6416) +calls=1 0 +0 303 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 127 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6416) +calls=1 0 +0 303 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 127 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6416) +calls=1 0 +0 303 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 127 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6416) +calls=1 0 +0 303 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(6170) +calls=1 0 +0 235 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 9 +0 9 +cob=(47) +cfi=(220) +cfn=(4806) +calls=1 0 +0 55 +0 1 +0 10 + +fn=(6644) unwrap(DbEnv*) +0 14 +cfn=(6646) DbEnv::get_DB_ENV() +calls=1 0 +0 8 +0 3 + +fn=(6658) __db_env_destroy +0 7 +cfn=(6660) __lock_env_destroy +calls=1 0 +0 5 +0 2 +cfn=(6662) __log_env_destroy +calls=1 0 +0 2 +0 2 +cfn=(6664) __memp_env_destroy +calls=1 0 +0 2 +0 2 +cfn=(6666) __txn_env_destroy +calls=1 0 +0 2 +0 45 +cfn=(6668) __os_free +calls=1 0 +0 92 +0 243 +cfn=(6668) +calls=1 0 +0 138 + +fn=(6662) +0 2 + +fn=(6690) +0 11 +cfn=(4522) +calls=1 0 +0 2423 + +fn=(6734) +0 42 +cfn=(6735) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*)'2 +calls=3 0 +0 1106 +0 6 +cfn=(6735) +calls=2 0 +0 165 +0 15 +cob=(47) +cfi=(220) +cfn=(3210) +calls=5 0 +0 530 +0 5 +0 31 + +fn=(6735) +0 156 +cfn=(6735) +calls=6 0 +0 1025 +0 9 +cfn=(6735) +calls=3 0 +0 181 +0 27 +cob=(47) +cfi=(220) +cfn=(3210) +calls=9 0 +0 954 +0 9 +0 116 + +fn=(6744) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 18 + +fn=(6784) +0 29 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(6770) +calls=1 0 +0 125 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 4 +cfn=(6788) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 1 + +fn=(6802) +0 44 +cob=(47) +cfi=(220) +cfn=(4768) +calls=4 0 +0 440 +0 4 + +fn=(6816) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6818) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6824) boost::detail::sp_counted_impl_p >::dispose() +0 42 +cob=(47) +cfi=(220) +cfn=(4768) +calls=3 0 +0 330 +0 3 + +fn=(6834) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6856) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6904) +0 13 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 11 +cfn=(2706) +calls=1 0 +0 1454 + +fn=(6926) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6946) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 12 +cfn=(3022) +calls=1 0 +0 16 +0 2 +cfn=(3024) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6950) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6956) +0 29 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(6958) boost::detail::sp_counted_impl_p >::dispose() +calls=1 0 +0 125 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 4 +cfn=(6962) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 1 + +fn=(6962) +0 12 +cfn=(3016) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(3018) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7022) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 21 + +fn=(7024) +0 11 +cfn=(7026) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +calls=1 0 +0 16 + +fn=(7052) +0 399 +cob=(47) +cfi=(220) +cfn=(3210) +calls=25 0 +0 3221 +0 25 +0 175 +cob=(47) +cfi=(220) +cfn=(3210) +calls=25 0 +0 4376 +0 25 +0 80 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 132 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(7054) std::_Rb_tree >, std::_Select1st > >, std::less, std::allocator > > >::_M_erase(std::_Rb_tree_node > >*) +calls=1 0 +0 16 +0 3 +cfn=(7056) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 +0 4 +cfn=(7058) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 22 +0 3 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 13 + +fn=(7070) std::_Rb_tree, std::pair, std::_Identity >, std::less >, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 + +fn=(7086) +0 13 +cfn=(2707) +calls=1 0 +0 273 +0 4 +cfn=(2707) +calls=1 0 +0 320 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7104) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7118) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7120) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7136) boost::detail::sp_counted_impl_p, std::allocator > > >::dispose() +0 14 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7182) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7194) boost::detail::sp_counted_impl_p >::dispose() +0 23 +cob=(47) +cfi=(220) +cfn=(2726) +calls=1 0 +0 9 +0 1 +0 14 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7250) 0x0000000000117fb0 +0 5 + +fn=(2758) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(2760) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(2762) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 10 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cfn=(2740) +calls=1 0 +0 85 +0 11 + +fn=(2778) +0 138 + +fn=(2788) +0 184 + +fn=(2832) +0 444 +cob=(5) +cfi=(254) +cfn=(2836) +calls=37 25 +0 148 +0 37 +0 185 +cob=(5) +cfi=(255) +cfn=(2840) +calls=37 25 +0 481 +0 37 +0 222 +cob=(5) +cfi=(206) +cfn=(1262) +calls=37 53 +0 1776 +0 37 +0 185 +cob=(5) +cfi=(256) +cfn=(2844) +calls=37 24 +0 111 +0 37 +0 370 + +fn=(2876) +0 10895 +cob=(47) +cfi=(220) +cfn=(2880) +calls=53 0 +0 6252 +0 53 +0 371 +cob=(3) +cfi=(202) +cfn=(912) +calls=53 225 +0 585 +0 53 +0 732 +cob=(3) +cfi=(202) +cfn=(912) +calls=244 225 +0 3416 +0 244 +0 891 + +fn=(2894) CAddrMan::CAddrMan() +0 11 +cfn=(2832) +calls=1 0 +0 110 +0 21 +cfn=(2896) +calls=1 0 +0 196169 +0 333114 + +fn=(3026) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 22 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(3028) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(3030) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 20 + +fn=(3044) _GLOBAL__sub_I__Z13GetDifficultyPK11CBlockIndex +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3096) _GLOBAL__sub_I__Z14GetMainSignalsv +0 7 +cfn=(3098) CMainSignals::CMainSignals() +calls=1 0 +0 13606 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3104) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 + +fn=(3116) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 + +fn=(3120) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 + +fn=(3140) _GLOBAL__sub_I_mapAlerts +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 14 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3148) _GLOBAL__sub_I__Z16SignBlockWithKeyR6CBlockRK4CKey +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3152) _GLOBAL__sub_I__ZN11Checkpoints8fEnabledE +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3156) _GLOBAL__sub_I__Z12StartHTTPRPCv +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 13 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3284) (anonymous namespace)::sha256::Transform(unsigned int*, unsigned char const*) +0 101430 + +fn=(3298) CBlockHeader::GetHash() const +0 98 +cfn=(3300) uint256 HashQuark(char*, char*) +calls=7 0 +0 717583 +0 63 + +fn=(3348) jh_core +0 1664 +cob=(3) +cfi=(202) +cfn=(912) +calls=26 225 +0 312 +0 26 +0 256074 + +fn=(5924) std::__cxx11::basic_string, std::allocator > std::operator+, std::allocator >(std::__cxx11::basic_string, std::allocator >&&, std::__cxx11::basic_string, std::allocator >&&) +0 20 +cob=(47) +cfi=(220) +cfn=(3816) +calls=1 0 +0 46 +0 1 +0 23 + +fn=(3388) +0 10248 +cob=(3) +cfi=(120) +cfn=(3010) +calls=732 31 +0 4392 +0 732 + +fn=(3390) GetRand(unsigned long) +0 8688 +cfn=(3392) GetRand(unsigned long) [clone .part.0] +calls=724 0 +0 4338647 + +fn=(3396) CTestNetParams::CTestNetParams() +0 26 +cfn=(3222) CMainParams::CMainParams() +calls=2 0 +0 2320942 +0 18 +cob=(47) +cfi=(220) +cfn=(3230) +calls=2 0 +0 154 +0 2 +0 10 +cfn=(3236) ParseHex(char const*) +calls=2 0 +0 7396 +0 26 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 +0 72 +cob=(47) +cfi=(220) +cfn=(3230) +calls=2 0 +0 166 +0 2 +0 12 +cob=(47) +cfi=(220) +cfn=(3230) +calls=2 0 +0 166 +0 2 +0 12 +cfn=(3298) +calls=2 0 +0 179880 +0 98 +cob=(47) +cfi=(220) +cfn=(2880) +calls=2 0 +0 138 +0 2 +0 40 +cfn=(3184) +calls=2 0 +0 5598 +0 32 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 +0 84 +cob=(47) +cfi=(220) +cfn=(3210) +calls=12 0 +0 1212 +0 12 +0 60 +cob=(47) +cfi=(220) +cfn=(3210) +calls=12 0 +0 1248 +0 12 +0 42 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 102 +0 2 +0 18 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 102 +0 2 +0 18 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 102 +0 2 +0 18 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 +0 26 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 14 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 102 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 102 +0 2 +0 88 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 +0 4 +cfn=(3380) std::_Deque_base >::~_Deque_base() +calls=2 0 +0 412 +0 26 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 14 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 102 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 102 +0 2 +0 88 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 +0 4 +cfn=(3380) +calls=2 0 +0 412 +0 26 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 14 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 102 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 102 +0 2 +0 88 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 +0 4 +cfn=(3380) +calls=2 0 +0 412 +0 8 +cfn=(3382) convertSeed6(std::vector >&, SeedSpec6 const*, unsigned int) +calls=2 0 +0 438470 +0 20 +cob=(47) +cfi=(220) +cfn=(3230) +calls=2 0 +0 182 +0 2 +0 12 +cob=(47) +cfi=(220) +cfn=(3230) +calls=2 0 +0 182 +0 2 +0 12 +cob=(47) +cfi=(220) +cfn=(3230) +calls=2 0 +0 146 +0 2 +0 26 + +fn=(3402) _GLOBAL__sub_I__ZNK17CScriptCompressor9IsToKeyIDER6CKeyID +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3412) _GLOBAL__sub_I__Z12FormatScriptB5cxx11RK7CScript +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3442) _GLOBAL__sub_I__ZN11libzerocoin11AccumulatorC2EPKNS_25AccumulatorAndProofParamsENS_16CoinDenominationE +0 8 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 538 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 436 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3486) locking_callback(int, int, char const*, int) +0 350 +cob=(5) +cfi=(180) +cfn=(714) +calls=14 64 +0 490 +0 14 +0 252 +cob=(5) +cfi=(182) +cfn=(724) +calls=14 356 +0 434 +0 14 +0 56 + +fn=(3494) _GLOBAL__sub_I__Z11FormatMoneyB5cxx11RKlb +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3646) +0 35 +cfn=(3648) +calls=1 0 +0 1297 +0 11 + +fn=(3664) __os_cpu_count +0 4 +cob=(3) +cfi=(239) +cfn=(2792) +calls=1 32 +0 97 +0 1 +0 5 + +fn=(3706) boost::assign_detail::generic_list::type, boost::assign_detail::assign_decay::type> > boost::assign::map_list_of(int const&, unsigned int const&) +0 28 +cfn=(3708) +calls=1 0 +0 174 +0 36 +cfn=(3708) +calls=1 0 +0 313 +0 24 +cfn=(3710) std::_Deque_base, std::allocator > >::~_Deque_base() +calls=1 0 +0 206 +0 12 + +fn=(3716) _GLOBAL__sub_I_payTxFee +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 6 +cfn=(3388) +calls=1 0 +0 21 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3732) _GLOBAL__sub_I__ZN9CMintPoolC2Ev +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3748) boost::program_options::detail::utf8_codecvt_facet::utf8_codecvt_facet(unsigned long) +0 4 +cob=(47) +cfi=(220) +cfn=(2334) +calls=1 0 +0 39 +0 1 +0 4 + +fn=(3764) _GLOBAL__sub_I_cxx_env.cpp +0 6 +cfn=(3758) +calls=1 0 +0 117 +0 2 + +fn=(4510) std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >, bool> std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > > >::_M_insert_unique > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >(std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >&&) +0 14 +cfn=(4512) +calls=1 0 +0 24 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 10 +cob=(47) +cfi=(220) +cfn=(3068) +calls=1 0 +0 16 +0 1 +0 16 + +fn=(4524) +0 3139 +cob=(3) +cfi=(237) +cfn=(2328) +calls=176 59 +0 4189 +0 176 +0 1680 +cob=(3) +cfi=(237) +cfn=(2328) +calls=53 59 +0 1273 +0 53 +0 1053 + +fn=(4652) +0 31 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 8 +cfn=(3060) +calls=1 0 +0 34 +0 5 +cob=(47) +cfi=(220) +cfn=(3068) +calls=1 0 +0 16 +0 1 +0 11 + +fn=(4708) boost::program_options::detail::(anonymous namespace)::trim_ws(std::__cxx11::basic_string, std::allocator > const&) +0 528 +cob=(47) +cfi=(220) +cfn=(4712) +calls=33 0 +0 1746 +0 33 +0 627 +cob=(47) +cfi=(220) +cfn=(4716) +calls=33 0 +0 1880 +0 33 +0 906 +cob=(47) +cfi=(220) +cfn=(2880) +calls=16 0 +0 1471 +0 16 +0 112 +cob=(3) +cfi=(202) +cfn=(912) +calls=16 225 +0 177 +0 16 +0 45 +cob=(3) +cfi=(202) +cfn=(912) +calls=15 225 +0 215 +0 15 +0 93 + +fn=(4822) +0 18 +cfn=(4824) +calls=1 0 +0 228 +0 12 +cfn=(4824) +calls=1 0 +0 228 +0 15 + +fn=(4832) SoftSetArg(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&) +0 12 +cfn=(4524) +calls=1 0 +0 192 +0 15 +cfn=(4738) std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::operator[](std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 1037 +0 3 +cob=(47) +cfi=(220) +cfn=(4730) +calls=1 0 +0 44 +0 1 +0 2 + +fn=(4868) atoi64(std::__cxx11::basic_string, std::allocator > const&) +0 13 +cob=(3) +cfi=(250) +cfn=(4872) +calls=1 105 +0 143 +0 1 + +fn=(4888) boost::thread::hardware_concurrency() +0 4 +cob=(3) +cfi=(239) +cfn=(2792) +calls=1 32 +0 97 +0 1 +0 5 + +fn=(4930) +0 160 +cfn=(4932) +calls=4 0 +0 492 +0 191772 +cfn=(4934) secp256k1_gej_add_ge +calls=256 0 +0 768000 +0 1836 + +fn=(4978) secp256k1_fe_normalizes_to_zero_var +0 246705 + +fn=(4998) CKey::MakeNewKey(bool) +0 14 +cfn=(4958) GetRandBytes(unsigned char*, int) +calls=1 0 +0 13436 +0 3 +cfn=(5000) secp256k1_ec_seckey_verify +calls=1 0 +0 118 +0 11 + +fn=(5004) secp256k1_ec_pubkey_create +0 28 +cfn=(4928) +calls=1 0 +0 92 +0 15 +cfn=(4930) +calls=1 0 +0 240565 +0 6 +cfn=(4980) +calls=1 0 +0 42759 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 20 +cfn=(4982) +calls=1 0 +0 175 +0 19 + +fn=(5028) +0 137240 + +fn=(5052) secp256k1_pubkey_load +0 75 + +fn=(5938) boost::gregorian::date::date(boost::date_time::special_values) +0 20 + +fn=(6070) +0 380 +cob=(47) +cfi=(220) +cfn=(2154) +calls=12 0 +0 826 +0 12 +0 528 +cob=(47) +cfi=(220) +cfn=(3210) +calls=8 0 +0 688 +0 8 +0 276 + +fn=(6220) InterruptHTTPRPC() +0 9 +cfn=(6038) +calls=1 0 +0 29 +0 9 + +fn=(6224) InterruptREST() +0 10 + +fn=(6232) +0 16 +cfn=(4938) boost::thread_detail::enter_once_region(boost::once_flag&) +calls=4 0 +0 123 +0 9 +cfn=(6234) boost::detail::(anonymous namespace)::create_current_thread_tls_key() +calls=1 0 +0 23 +0 2 +cfn=(4944) boost::thread_detail::commit_once_region(boost::once_flag&) +calls=1 0 +0 96 +0 12 +cob=(5) +cfi=(364) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_getspecific.c +cfn=(6242) pthread_getspecific +calls=4 25 +0 52 +0 4 + +fn=(6252) +0 10 +cfn=(6538) StopTorControl() +calls=1 0 +0 18 +0 14 +cfn=(6540) ECCVerifyHandle::~ECCVerifyHandle() +calls=1 0 +0 170 +0 3 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 108 +0 1 +0 1 +cfn=(6544) ECC_Stop() +calls=1 0 +0 118 +0 2 +cfn=(6038) +calls=1 0 +0 28 +0 13 +cfn=(6546) std::__cxx11::basic_string, std::allocator > tinyformat::format(char const*, char const (&) [9]) +calls=1 0 +0 3105 +0 2 +cfn=(6044) +calls=1 0 +0 28434 +0 5 +cfn=(6254) PrepareShutdown() +calls=1 0 +0 191009 +0 1 + +fn=(6278) CTxMemPool::AddTransactionsUpdated(unsigned int) +0 14 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 35 +0 1 +0 7 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 31 +0 1 +0 12 + +fn=(6296) +0 60 +cob=(5) +cfi=(182) +cfn=(724) +calls=10 356 +0 190 +0 10 +0 70 + +fn=(6302) StopHTTPServer() +0 14 +cfn=(6218) +calls=1 0 +0 48 +0 4 +cfn=(6304) +calls=1 0 +0 961 +0 5 +cfn=(6218) +calls=1 0 +0 48 +0 15 + +fn=(6372) CDataStream::read(char*, unsigned long) +0 451 +cob=(3) +cfi=(202) +cfn=(912) +calls=3 225 +0 48 +0 3 +0 318 +cob=(3) +cfi=(202) +cfn=(912) +calls=23 225 +0 349 +0 23 +0 46 + +fn=(6394) +0 44 + +fn=(6398) +0 54 +cob=(5) +cfi=(370) +cfn=(6336) +calls=2 27 +0 24 +0 2 +0 20 + +fn=(6406) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 60 + +fn=(6444) int LogPrint, std::allocator > >(char const*, char const*, std::__cxx11::basic_string, std::allocator > const&) +0 20 +cfn=(6038) +calls=2 0 +0 58 +0 24 + +fn=(6464) CBudgetDB::Read(CBudgetManager&, bool) +0 20 +cfn=(6380) CMutexLock::CMutexLock(CCriticalSection&, char const*, char const*, int, bool) [clone .constprop.0] +calls=1 0 +0 62 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cob=(3) +cfi=(274) +cfn=(3532) +calls=1 85 +0 488 +0 1 +0 8 +cfn=(6356) boost::filesystem::detail::file_size(boost::filesystem::path const&, boost::system::error_code*) +calls=1 0 +0 50 +0 18 +cfn=(6358) CAutoFile::read(char*, unsigned long) +calls=1 0 +0 626 +0 6 +cfn=(6358) +calls=1 0 +0 158 +0 4 +cob=(3) +cfi=(293) +cfn=(3604) +calls=1 34 +0 552 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 183 +cfn=(3274) +calls=1 0 +0 19 +0 8 +cfn=(3276) +calls=1 0 +0 56 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 2 +cfn=(3290) CSHA256::Reset() +calls=1 0 +0 20 +0 4 +cfn=(3276) +calls=1 0 +0 57 +0 3 +cfn=(3288) +calls=1 0 +0 3565 +0 20 +cfn=(6370) +calls=1 0 +0 69 +0 6 +cob=(47) +cfi=(220) +cfn=(4650) +calls=1 0 +0 479 +0 1 +0 9 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 7 +cfn=(2998) +calls=1 0 +0 43 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 19 +cfn=(6396) +calls=1 0 +0 52 +0 4 +cfn=(5016) +calls=1 0 +0 137 +0 7 +cob=(3) +cfi=(237) +cfn=(2328) +calls=1 59 +0 25 +0 1 +0 6 +cfn=(6372) +calls=1 0 +0 47 +0 1 +cfn=(4886) Params() +calls=1 0 +0 13 +0 11 +cfn=(6466) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 20 +0 7 +cfn=(6370) +calls=1 0 +0 69 +0 12 +cfn=(6468) void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +calls=1 0 +0 130 +0 5 +cfn=(6472) +calls=1 0 +0 140 +0 5 +cfn=(6476) void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +calls=1 0 +0 130 +0 5 +cfn=(6468) +calls=1 0 +0 130 +0 5 +cfn=(6476) +calls=1 0 +0 130 +0 5 +cfn=(6480) void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +calls=1 0 +0 133 +0 5 +cfn=(6482) void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +calls=1 0 +0 143 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cfn=(6038) +calls=1 0 +0 29 +0 5 +cfn=(6484) +calls=1 0 +0 5766 +0 3 +cfn=(6486) int LogPrint, std::allocator > >(char const*, char const*, std::__cxx11::basic_string, std::allocator > const&) [clone .constprop.0] +calls=1 0 +0 52 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 7 +cfn=(6372) +calls=1 0 +0 43 +0 1 + +fn=(6468) +0 36 +cfn=(6470) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=2 0 +0 36 +0 14 +cfn=(6370) +calls=2 0 +0 138 +0 36 + +fn=(6478) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 108 + +fn=(6480) +0 18 +cfn=(3680) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 20 +0 7 +cfn=(6370) +calls=1 0 +0 69 +0 19 + +fn=(6510) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 54 + +fn=(6590) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 + +fn=(6596) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 14 +cfn=(6597) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*)'2 +calls=1 0 +0 16 +0 3 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 9 + +fn=(6597) +0 16 + +fn=(6612) +0 12 +cfn=(6478) +calls=1 0 +0 18 +0 3 +cfn=(6478) +calls=1 0 +0 18 +0 3 +cfn=(6474) +calls=1 0 +0 24 +0 3 +cfn=(6470) +calls=1 0 +0 18 +0 3 +cfn=(6470) +calls=1 0 +0 18 +0 3 +cfn=(6466) +calls=1 0 +0 20 +0 3 +cfn=(3682) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 24 +0 3 +cfn=(3680) +calls=1 0 +0 20 +0 2 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 13 +cfn=(6500) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 + +fn=(6624) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 22 + +fn=(6666) +0 2 + +fn=(6684) RAND_cleanup +0 3 +cfn=(2900) +calls=1 0 +0 5 +0 6 +cfn=(6686) ssleay_rand_cleanup +calls=1 0 +0 720 +0 3 +cfn=(6688) RAND_set_rand_method +calls=1 0 +0 10 + +fn=(6702) +0 14 + +fn=(6710) +0 11 +cfn=(6712) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 18 + +fn=(6714) +0 20 + +fn=(6718) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 16 + +fn=(6756) +0 11 +cfn=(6758) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 18 + +fn=(6758) +0 18 + +fn=(6760) +0 14 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 5 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 12 +cfn=(2706) +calls=1 0 +0 1454 + +fn=(6808) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6840) +0 12 +cfn=(3114) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(3116) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6842) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6850) +0 13 +cfn=(2707) +calls=1 0 +0 273 +0 4 +cfn=(2707) +calls=1 0 +0 320 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6862) +0 29 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(6770) +calls=1 0 +0 125 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 4 +cfn=(6864) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 1 + +fn=(6866) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6888) +0 22 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6934) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +0 12 +cfn=(3028) +calls=1 0 +0 16 +0 2 +cfn=(3030) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6942) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6944) +0 29 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(6824) +calls=1 0 +0 125 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 4 +cfn=(6946) +calls=1 0 +0 172 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 1 + +fn=(6966) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6976) +0 35 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 14 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 2 + +fn=(7002) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 + +fn=(7008) std::_Rb_tree, std::allocator > >, std::_Select1st, std::allocator > > >, std::less, std::allocator, std::allocator > > > >::_M_erase(std::_Rb_tree_node, std::allocator > > >*) +0 36 + +fn=(7038) +0 11 +cfn=(7040) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 + +fn=(7050) +0 11 +cfn=(7006) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 22 + +fn=(7058) +0 22 + +fn=(7068) +0 11 +cfn=(7070) +calls=1 0 +0 16 + +fn=(7080) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +0 40 + +fn=(7084) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7124) +0 12 +cfn=(2760) +calls=1 0 +0 16 +0 2 +cfn=(2762) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7148) +0 13 +cfn=(2707) +calls=1 0 +0 14 +0 4 +cfn=(2707) +calls=1 0 +0 1975 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7154) boost::detail::sp_counted_impl_p >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> >::dispose() +0 20 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 289 +0 13 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7156) +0 32 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 108 +0 1 + +fn=(7188) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(2126) +0 12 +cob=(3) +cfi=(226) +cfn=(2128) +calls=1 137 +0 74837004 + +fn=(2732) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 22 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(2734) +calls=1 0 +0 16 +0 2 +cfn=(2736) std::__cxx11::_List_base >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 10 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cfn=(2740) +calls=1 0 +0 85 +0 11 + +fn=(2736) +0 39 +cfn=(7178) boost::detail::sp_counted_impl_p >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> >::dispose() +calls=1 0 +0 734 +0 8 +cfn=(7184) boost::detail::sp_counted_impl_p >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 23 + +fn=(2740) +0 169 +cob=(47) +cfi=(220) +cfn=(2154) +calls=13 0 +0 935 +0 13 +0 208 + +fn=(2750) +0 46 + +fn=(2760) +0 32 + +fn=(2768) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 + +fn=(2888) _GLOBAL__sub_I__ZN12CMerkleBlockC2ERK6CBlockR12CBloomFilter +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 385 +0 1 + +fn=(2908) +0 2916 +cfn=(2910) ssleay_rand_bytes +calls=729 0 +0 4528256 + +fn=(2956) CRYPTO_THREADID_cmp +0 168 +cob=(3) +cfi=(237) +cfn=(2328) +calls=56 59 +0 1400 +0 56 + +fn=(2984) +0 3075462 + +fn=(2990) SHA1_Final +0 39874 +cfn=(2982) +calls=1525 0 +0 1555500 +0 151191 +cfn=(2982) +calls=1464 0 +0 1493280 +0 4420 + +fn=(3058) CRPCTable::CRPCTable() +0 11085 +cob=(3) +cfi=(237) +cfn=(2328) +calls=825 59 +0 19630 +0 825 +0 7830 +cob=(3) +cfi=(237) +cfn=(2328) +calls=128 59 +0 3082 +0 128 +0 951 +cob=(47) +cfi=(220) +cfn=(2154) +calls=133 0 +0 26866 +0 133 +0 1330 +cfn=(3060) +calls=133 0 +0 12314 +0 665 +cfn=(3062) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, CRPCCommand const*>, std::_Select1st, std::allocator > const, CRPCCommand const*> >, std::less, std::allocator > >, std::allocator, std::allocator > const, CRPCCommand const*> > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator, std::allocator > const, CRPCCommand const*> >, std::__cxx11::basic_string, std::allocator > const&) +calls=133 0 +0 22082 +0 1337 +cob=(47) +cfi=(220) +cfn=(3068) +calls=55 0 +0 2794 +0 55 +0 312 +cob=(47) +cfi=(220) +cfn=(3068) +calls=78 0 +0 4374 +0 78 +0 2070 +cob=(3) +cfi=(237) +cfn=(2328) +calls=78 59 +0 1907 +0 78 +0 515 + +fn=(3060) +0 9074 +cob=(47) +cfi=(220) +cfn=(2880) +calls=117 0 +0 11172 +0 117 +0 819 +cob=(3) +cfi=(202) +cfn=(912) +calls=117 225 +0 1287 +0 117 +0 333 +cob=(3) +cfi=(202) +cfn=(912) +calls=111 225 +0 1467 +0 111 +0 684 + +fn=(3084) _GLOBAL__sub_I__ZN8CSporkDBC2Embb +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3092) _GLOBAL__sub_I__ZN12CCoinsViewDBC2Embb +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 + +fn=(3106) boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +0 43 + +fn=(3178) _GLOBAL__sub_I__Z12DecodeBase58PKcRSt6vectorIhSaIhEE +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3226) +0 1248 +cob=(47) +cfi=(220) +cfn=(2154) +calls=8 0 +0 604 +0 8 +0 120 +cob=(3) +cfi=(202) +cfn=(912) +calls=8 225 +0 136 +0 8 +0 8 + +fn=(3258) CTxOut* std::__uninitialized_copy::__uninit_copy(CTxOut const*, CTxOut const*, CTxOut*) +0 112 + +fn=(3262) void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, unsigned char&&) +0 976 +cob=(47) +cfi=(220) +cfn=(2154) +calls=32 0 +0 2289 +0 32 +0 944 +cob=(3) +cfi=(202) +cfn=(912) +calls=16 225 +0 280 +0 16 +0 96 +cob=(47) +cfi=(220) +cfn=(3210) +calls=16 0 +0 1376 +0 16 +0 96 + +fn=(3270) CTransaction::CTransaction(CMutableTransaction const&) +0 140 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 367 +0 4 +0 268 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 40 +cob=(3) +cfi=(202) +cfn=(912) +calls=4 225 +0 48 +0 4 +0 136 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 60 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 718 +0 4 +0 40 +cob=(3) +cfi=(202) +cfn=(912) +calls=4 225 +0 88 +0 4 +0 100 +cfn=(3272) CTransaction::UpdateHash() const +calls=4 0 +0 60416 +0 44 + +fn=(3290) +0 220 + +fn=(3324) bmw64_close +0 638 +cfn=(3326) compress_big +calls=11 0 +0 18260 +0 946 +cfn=(3326) +calls=11 0 +0 18260 +0 594 + +fn=(3326) +0 36520 + +fn=(3330) sph_groestl512 +0 22 +cfn=(3332) +calls=11 0 +0 539 + +fn=(3336) +0 407 +cob=(3) +cfi=(204) +cfn=(3340) +calls=11 161 +0 176 +0 11 +0 88 +cfn=(3332) +calls=11 0 +0 190674 +0 99847 + +fn=(3346) sph_jh512 +0 26 +cfn=(3348) +calls=13 0 +0 129038 + +fn=(5902) +0 13 + +fn=(5916) boost::filesystem::detail::dot_dot_path() +0 13 +cob=(47) +cfi=(220) +cfn=(1958) +calls=1 0 +0 19 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(1964) +calls=1 0 +0 8 +0 1 +0 3 + +fn=(3384) CService::CService(in6_addr const&, unsigned short) +0 9412 + +fn=(3408) _GLOBAL__sub_I__ZNK9CMintMetaltERKS_ +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3418) _GLOBAL__sub_I__ZN4CKey5CheckEPKh +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3428) _GLOBAL__sub_I__ZN10CSchedulerC2Ev +0 14 + +fn=(3440) _GLOBAL__sub_I_univalue.cpp +0 16 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3446) _GLOBAL__sub_I__ZN11libzerocoin10PublicCoinC2EPKNS_14ZerocoinParamsE +0 8 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3468) _GLOBAL__sub_I_fGridnode +0 8 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 317 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 225 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cfn=(2872) +calls=1 0 +0 76 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 76 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 76 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3470) CInit::CInit() +calls=1 0 +0 16407 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3470) +0 12 +cfn=(3472) CRYPTO_num_locks +calls=1 0 +0 3 +0 4 +cfn=(2968) CRYPTO_malloc +calls=1 0 +0 491 +0 2 +cfn=(3472) +calls=1 0 +0 3 +0 84 +cob=(47) +cfi=(220) +cfn=(2154) +calls=41 0 +0 9061 +0 41 +0 123 +cob=(5) +cfi=(254) +cfn=(2836) +calls=41 25 +0 164 +0 41 +0 246 +cob=(5) +cfi=(255) +cfn=(2840) +calls=41 25 +0 533 +0 41 +0 246 +cob=(5) +cfi=(206) +cfn=(1262) +calls=41 53 +0 1968 +0 41 +0 205 +cob=(5) +cfi=(256) +cfn=(2844) +calls=41 24 +0 123 +0 41 +0 246 +cfn=(3472) +calls=41 0 +0 123 +0 84 +cfn=(3474) CRYPTO_set_locking_callback +calls=1 0 +0 13 +0 1 +cfn=(3478) OPENSSL_no_config +calls=1 0 +0 3 +0 1 +cfn=(3480) RandAddSeed() +calls=1 0 +0 2454 +0 9 + +fn=(3474) +0 8 +cfn=(3476) +calls=2 0 +0 11 +0 6 + +fn=(3666) __log_env_create +0 5 + +fn=(3684) _GLOBAL__sub_I_GridnodePayments +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 437 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 23 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3762) _GLOBAL__sub_I_cxx_dbt.cpp +0 6 +cfn=(3758) +calls=1 0 +0 117 +0 2 + +fn=(4520) +0 26 +cfn=(4521) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >*)'2 +calls=1 0 +0 530 +0 4 +cfn=(4521) +calls=1 0 +0 162 +0 12 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 212 +0 2 +0 12 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 212 +0 2 +0 20 + +fn=(4521) +0 94 +cfn=(4521) +calls=4 0 +0 196 +0 4 +cfn=(4521) +calls=1 0 +0 142 +0 55 +cob=(47) +cfi=(220) +cfn=(3210) +calls=5 0 +0 468 +0 5 +0 66 + +fn=(4638) std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_get_insert_unique_pos(std::__cxx11::basic_string, std::allocator > const&) +0 34 + +fn=(4732) void std::vector, std::allocator >, std::allocator, std::allocator > > >::_M_realloc_insert, std::allocator > const&>(__gnu_cxx::__normal_iterator, std::allocator >*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::__cxx11::basic_string, std::allocator > const&) +0 340 +cob=(47) +cfi=(220) +cfn=(2154) +calls=12 0 +0 1248 +0 12 +0 144 +cfn=(4734) +calls=12 0 +0 1113 +0 244 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 272 + +fn=(4738) +0 310 +cob=(3) +cfi=(237) +cfn=(2328) +calls=13 59 +0 309 +0 13 +0 122 +cob=(47) +cfi=(220) +cfn=(3072) +calls=4 0 +0 183 +0 4 +0 100 +cfn=(4740) std::_Rb_tree_iterator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_emplace_hint_unique, std::allocator > const&>, std::tuple<> >(std::_Rb_tree_const_iterator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::piecewise_construct_t const&, std::tuple, std::allocator > const&>&&, std::tuple<>&&) +calls=1 0 +0 415 +0 42 +cfn=(4740) +calls=6 0 +0 3348 +0 14 + +fn=(4880) std::map, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::operator[](std::__cxx11::basic_string, std::allocator >&&) +0 114 +cob=(3) +cfi=(237) +cfn=(2328) +calls=6 59 +0 136 +0 6 +0 82 +cob=(3) +cfi=(237) +cfn=(2328) +calls=2 59 +0 44 +0 2 +0 45 +cfn=(4882) std::_Rb_tree_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_emplace_hint_unique, std::allocator >&&>, std::tuple<> >(std::_Rb_tree_const_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::piecewise_construct_t const&, std::tuple, std::allocator >&&>&&, std::tuple<>&&) +calls=1 0 +0 517 +0 2 + +fn=(4884) __gnu_cxx::__normal_iterator, std::allocator > const*, std::vector, std::allocator >, std::allocator, std::allocator > > > > std::__find_if<__gnu_cxx::__normal_iterator, std::allocator > const*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, __gnu_cxx::__ops::_Iter_equals_val, std::allocator > const> >(__gnu_cxx::__normal_iterator, std::allocator > const*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, __gnu_cxx::__normal_iterator, std::allocator > const*, std::vector, std::allocator >, std::allocator, std::allocator > > > >, __gnu_cxx::__ops::_Iter_equals_val, std::allocator > const>, std::random_access_iterator_tag) +0 38 + +fn=(4910) secp256k1_scalar_get_b32 +0 420 + +fn=(4912) secp256k1_rfc6979_hmac_sha256_initialize +0 72 +cfn=(4914) +calls=3 0 +0 20511 +0 114 +cfn=(4916) +calls=3 0 +0 10170 +0 27 +cfn=(4918) +calls=3 0 +0 10701 +0 42 +cfn=(4918) +calls=3 0 +0 10677 +0 9 +cfn=(4914) +calls=3 0 +0 20511 +0 33 +cfn=(4918) +calls=3 0 +0 10677 +0 42 +cfn=(4918) +calls=3 0 +0 10677 +0 9 +cfn=(4914) +calls=3 0 +0 20511 +0 129 +cfn=(4916) +calls=3 0 +0 10170 +0 33 +cfn=(4918) +calls=3 0 +0 10701 +0 45 +cfn=(4918) +calls=3 0 +0 10677 +0 9 +cfn=(4914) +calls=3 0 +0 20511 +0 33 +cfn=(4918) +calls=3 0 +0 10677 +0 48 +cfn=(4918) +calls=3 0 +0 10677 +0 1368 + +fn=(4914) +0 693 +cfn=(4916) +calls=21 0 +0 71190 +0 504 +cfn=(4916) +calls=21 0 +0 71190 + +fn=(4932) +0 615 + +fn=(4958) +0 18 +cfn=(2898) +calls=3 0 +0 33313 +0 21 + +fn=(5026) +0 8970 + +fn=(5030) +0 38 +cfn=(5032) secp256k1_scalar_sqr_512 +calls=2 0 +0 190 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5026) +calls=2 0 +0 230 +0 8 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5026) +calls=2 0 +0 230 +0 12 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5026) +calls=2 0 +0 230 +0 10 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5026) +calls=2 0 +0 230 +0 8 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5026) +calls=2 0 +0 230 +0 10 +cfn=(5028) +calls=2 0 +0 470 +0 6 +cfn=(5032) +calls=2 0 +0 190 +0 10 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 10 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 6 +cfn=(5032) +calls=2 0 +0 190 +0 12 +cfn=(5028) +calls=2 0 +0 470 +0 6 +cfn=(5032) +calls=2 0 +0 190 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5026) +calls=2 0 +0 230 +0 8 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 30 +cfn=(5028) +calls=10 0 +0 2350 +0 32 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 6 +cfn=(5032) +calls=2 0 +0 190 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 72 +cfn=(5032) +calls=24 0 +0 2280 +0 78 +cfn=(5028) +calls=26 0 +0 6110 +0 62 +cfn=(5026) +calls=2 0 +0 230 +0 8 +cfn=(5028) +calls=2 0 +0 470 +0 6 +cfn=(5032) +calls=2 0 +0 190 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 156 +cfn=(5032) +calls=52 0 +0 4940 +0 162 +cfn=(5028) +calls=54 0 +0 12690 +0 118 +cfn=(5026) +calls=2 0 +0 230 +0 8 +cfn=(5028) +calls=2 0 +0 470 +0 6 +cfn=(5032) +calls=2 0 +0 190 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 324 +cfn=(5032) +calls=108 0 +0 10260 +0 330 +cfn=(5028) +calls=110 0 +0 25850 +0 230 +cfn=(5026) +calls=2 0 +0 230 +0 8 +cfn=(5028) +calls=2 0 +0 470 +0 6 +cfn=(5032) +calls=2 0 +0 190 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 72 +cfn=(5032) +calls=24 0 +0 2280 +0 78 +cfn=(5028) +calls=26 0 +0 6110 +0 62 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 18 +cfn=(5032) +calls=6 0 +0 570 +0 18 +cfn=(5028) +calls=6 0 +0 1410 +0 22 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 24 +cfn=(5032) +calls=8 0 +0 760 +0 24 +cfn=(5028) +calls=8 0 +0 1880 +0 26 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 24 +cfn=(5032) +calls=8 0 +0 760 +0 24 +cfn=(5028) +calls=8 0 +0 1880 +0 26 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 30 +cfn=(5028) +calls=10 0 +0 2350 +0 30 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 24 +cfn=(5032) +calls=8 0 +0 760 +0 24 +cfn=(5028) +calls=8 0 +0 1880 +0 26 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 24 +cfn=(5032) +calls=8 0 +0 760 +0 24 +cfn=(5028) +calls=8 0 +0 1880 +0 26 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 30 +cfn=(5028) +calls=10 0 +0 2350 +0 30 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 36 +cfn=(5032) +calls=12 0 +0 1140 +0 36 +cfn=(5028) +calls=12 0 +0 2820 +0 34 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 24 +cfn=(5032) +calls=8 0 +0 760 +0 24 +cfn=(5028) +calls=8 0 +0 1880 +0 26 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 18 +cfn=(5032) +calls=6 0 +0 570 +0 18 +cfn=(5028) +calls=6 0 +0 1410 +0 22 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 30 +cfn=(5028) +calls=10 0 +0 2350 +0 30 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 36 +cfn=(5028) +calls=12 0 +0 2820 +0 34 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 54 +cfn=(5032) +calls=18 0 +0 1710 +0 60 +cfn=(5028) +calls=20 0 +0 4700 +0 50 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 24 +cfn=(5032) +calls=8 0 +0 760 +0 24 +cfn=(5028) +calls=8 0 +0 1880 +0 26 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 48 +cfn=(5032) +calls=16 0 +0 1520 +0 54 +cfn=(5028) +calls=18 0 +0 4230 +0 46 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 30 +cfn=(5028) +calls=10 0 +0 2350 +0 30 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 36 +cfn=(5028) +calls=12 0 +0 2820 +0 34 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 24 +cfn=(5032) +calls=8 0 +0 760 +0 24 +cfn=(5028) +calls=8 0 +0 1880 +0 26 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 30 +cfn=(5028) +calls=10 0 +0 2350 +0 30 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 36 +cfn=(5028) +calls=12 0 +0 2820 +0 34 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 54 +cfn=(5032) +calls=18 0 +0 1710 +0 60 +cfn=(5028) +calls=20 0 +0 4700 +0 50 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 24 +cfn=(5032) +calls=8 0 +0 760 +0 24 +cfn=(5028) +calls=8 0 +0 1880 +0 26 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 30 +cfn=(5032) +calls=10 0 +0 950 +0 36 +cfn=(5028) +calls=12 0 +0 2820 +0 34 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 8 +cfn=(5032) +calls=2 0 +0 190 +0 42 +cfn=(5032) +calls=14 0 +0 1330 +0 48 +cfn=(5028) +calls=16 0 +0 3760 +0 40 +cfn=(5026) +calls=2 0 +0 230 +0 6 +cfn=(5028) +calls=2 0 +0 470 +0 22 + +fn=(5048) +0 75 + +fn=(5050) +0 26 +cfn=(4928) +calls=1 0 +0 91 +0 56 +cfn=(5052) +calls=1 0 +0 75 +0 8 +cfn=(5054) secp256k1_ecdsa_sig_verify +calls=1 0 +0 668490 +0 4 + +fn=(5058) secp256k1_ecmult_wnaf.constprop.0 +0 3952 + +fn=(5972) boost::signals2::detail::signal_impl, std::allocator > (char const*), boost::signals2::optional_last_value, std::allocator > >, int, std::less, boost::function, std::allocator > (char const*)>, boost::function, std::allocator > (boost::signals2::connection const&, char const*)>, boost::signals2::mutex>::nolock_cleanup_connections_from(boost::signals2::detail::garbage_collecting_lock&, bool, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > const&, unsigned int) const +0 90 + +fn=(5976) std::__cxx11::basic_string, std::allocator > tinyformat::format, std::allocator >>(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&) +0 18 +cob=(47) +cfi=(220) +cfn=(2566) +calls=1 0 +0 98 +0 1 +0 17 +cob=(47) +cfi=(220) +cfn=(2572) +calls=1 0 +0 990 +0 1 +0 16 +cob=(47) +cfi=(220) +cfn=(2166) +calls=1 0 +0 37 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2572) +calls=1 0 +0 990 +0 1 +0 5 +cfn=(5978) +calls=1 0 +0 5846 +0 21 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 9 +0 8 +cob=(47) +cfi=(220) +cfn=(4806) +calls=1 0 +0 55 +0 1 +0 18 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 207 +0 1 +0 1 + +fn=(6034) boost::detail::function::function_invoker3, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), bool, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int>::invoke(boost::detail::function::function_buffer&, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int) +0 15 +cfn=(6036) noui_ThreadSafeMessageBox(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int) +calls=1 0 +0 42719 + +fn=(6036) +0 28 +cfn=(6038) +calls=1 0 +0 28 +0 9 +cob=(3) +cfi=(357) +cfn=(6180) +calls=1 25 +0 1192 +0 1 +0 18 +cob=(47) +cfi=(220) +cfn=(6042) +calls=1 0 +0 2181 +0 1 +0 23 +cfn=(5980) +calls=1 0 +0 465 +0 3 +cfn=(5980) +calls=1 0 +0 841 +0 16 +cob=(47) +cfi=(220) +cfn=(5986) +calls=1 0 +0 119 +0 1 +0 37 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 373 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 9 +0 9 +cob=(47) +cfi=(220) +cfn=(4806) +calls=1 0 +0 55 +0 1 +0 2 +cfn=(6044) +calls=1 0 +0 36594 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 8 +cfn=(5968) +calls=1 0 +0 450 +0 4 +cob=(47) +cfi=(220) +cfn=(3816) +calls=1 0 +0 46 +0 1 +0 10 + +fn=(6128) boost::date_time::counted_time_rep::date() const +0 100 +cfn=(6130) +calls=4 0 +0 252 +0 172 + +fn=(6212) void boost::signals2::detail::connection_body_base::dec_slot_refcount(boost::signals2::detail::garbage_collecting_lock&) const +0 25 + +fn=(6272) RenameThread(char const*) +0 16 +cob=(3) +cfi=(339) +cfn=(6276) +calls=1 78 +0 7 +0 1 + +fn=(6284) StopREST() +0 78 +cob=(3) +cfi=(169) +cfn=(662) +calls=8 42 +0 152 +0 8 +0 32 +cfn=(2876) +calls=8 0 +0 650 +0 24 +cfn=(6282) UnregisterHTTPHandler(std::__cxx11::basic_string, std::allocator > const&, bool) +calls=8 0 +0 200 +0 27 +cob=(47) +cfi=(220) +cfn=(3210) +calls=3 0 +0 258 +0 3 +0 26 + +fn=(6350) DumpGridnodes() +0 12 +cfn=(3508) +calls=1 0 +0 641 +0 3 +cfn=(6352) +calls=1 0 +0 744 +0 2 +cfn=(3698) +calls=1 0 +0 272 +0 3 +cfn=(6218) +calls=1 0 +0 48 +0 4 +cfn=(6354) CGridnodeDB::Read(CGridnodeMan&, bool) +calls=1 0 +0 31926 +0 8 +cfn=(6218) +calls=1 0 +0 48 +0 3 +cfn=(6446) CGridnodeDB::Write(CGridnodeMan const&) +calls=1 0 +0 20574 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cfn=(6038) +calls=1 0 +0 29 +0 4 +cfn=(6458) +calls=1 0 +0 165 +0 9 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 9 + +fn=(6388) +0 14 +cfn=(3388) +calls=2 0 +0 42 +0 4 +cfn=(6390) GetTimeOffset() +calls=2 0 +0 198 +0 14 + +fn=(6390) +0 22 +cob=(5) +cfi=(180) +cfn=(714) +calls=2 64 +0 70 +0 2 +0 16 +cob=(5) +cfi=(182) +cfn=(724) +calls=2 356 +0 62 +0 2 +0 24 + +fn=(6490) void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +0 16 +cfn=(6448) +calls=1 0 +0 85 +0 14 + +fn=(6504) CGridnodePaymentDB::CGridnodePaymentDB() +0 32 +cfn=(4526) +calls=1 0 +0 113 +0 8 +cfn=(3060) +calls=1 0 +0 125 +0 3 +cfn=(4546) +calls=1 0 +0 346 +0 23 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 200 +0 1 +0 18 + +fn=(6568) +0 48 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 212 +0 2 +0 10 + +fn=(6592) +0 121 +cfn=(3692) +calls=11 0 +0 176 + +fn=(6604) +0 26 + +fn=(6628) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 18 + +fn=(6652) __env_refresh +0 25 +cfn=(6654) __mutex_free +calls=1 0 +0 6 +0 15 +cfn=(6654) +calls=1 0 +0 6 +0 6 +cfn=(6654) +calls=1 0 +0 6 +0 46 +cfn=(6654) +calls=1 0 +0 6 +0 5 +cfn=(6656) __env_ref_decrement +calls=1 0 +0 6 +0 6 + +fn=(6656) +0 6 + +fn=(6738) std::_Rb_tree, std::allocator > > >, std::_Select1st, std::allocator > > > >, std::less, std::allocator, std::allocator > > > > >::_M_erase(std::_Rb_tree_node, std::allocator > > > >*) +0 18 + +fn=(6792) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6796) +0 52 +cfn=(2707) +calls=4 0 +0 1172 +0 16 +cfn=(2707) +calls=4 0 +0 3508 +0 32 +cob=(47) +cfi=(220) +cfn=(4768) +calls=4 0 +0 440 +0 4 + +fn=(6822) +0 29 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(6824) +calls=1 0 +0 125 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 4 +cfn=(6828) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 1 + +fn=(6870) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6896) +0 44 + +fn=(6908) +0 26 +cfn=(2707) +calls=2 0 +0 546 +0 8 +cfn=(2707) +calls=2 0 +0 640 +0 16 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6910) +0 24 +cfn=(2754) +calls=2 0 +0 32 +0 4 +cfn=(2756) +calls=2 0 +0 46 +0 16 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6972) +0 11 +cfn=(6974) +calls=1 0 +0 16 + +fn=(7026) +0 16 + +fn=(7046) +0 13 + +fn=(7134) +0 29 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(7136) +calls=1 0 +0 125 +0 9 +cfn=(7138) boost::detail::sp_counted_impl_p, std::allocator > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +0 4 +cfn=(7140) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +0 9 +cfn=(7142) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > > >::~sp_counted_impl_p() +calls=1 0 +0 122 +0 1 + +fn=(7138) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7146) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7168) +0 13 +cfn=(2707) +calls=1 0 +0 14 +0 4 +cfn=(2707) +calls=1 0 +0 1999 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7180) +0 34 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7198) boost::detail::sp_counted_impl_p >::dispose() +0 23 +cob=(47) +cfi=(220) +cfn=(2712) +calls=1 0 +0 9 +0 1 +0 14 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7230) +0 9 +cob=(2) +cfi=(18) +cfn=(7236) 0x0000000000164990 +calls=1 0 +0 156 +0 1 +cfn=(7250) +calls=1 0 +0 5 +0 3 + +fn=(2130) +0 15 +cob=(2) +cfi=(18) +cfn=(2132) 0x0000000000163000 +calls=1 0 +0 523 +0 8 +cfn=(2144) 0x0000000000118060 +calls=1 0 +0 12 +0 476 +cfn=(3772) _GLOBAL__sub_I_cxx_txn.cpp +calls=1 0 +0 125 +cfn=(3770) _GLOBAL__sub_I_cxx_mpool.cpp +calls=1 0 +0 125 +cfn=(3768) +calls=1 0 +0 125 +cfn=(3766) +calls=1 0 +0 125 +cfn=(3764) +calls=1 0 +0 125 +cfn=(3762) +calls=1 0 +0 125 +cfn=(3760) _GLOBAL__sub_I_cxx_dbc.cpp +calls=1 0 +0 125 +cfn=(3756) _GLOBAL__sub_I_cxx_db.cpp +calls=1 0 +0 125 +cfn=(3754) _GLOBAL__sub_I_thread.cpp +calls=1 0 +0 14 +cfn=(3752) +calls=1 0 +0 106 +cfn=(3746) _GLOBAL__sub_I_convert.cpp +calls=1 0 +0 234 +cfn=(3744) +calls=1 0 +0 159 +cfn=(3742) +calls=1 0 +0 106 +cfn=(3736) _GLOBAL__sub_I_operations.cpp +calls=1 0 +0 171 +cfn=(3734) +calls=1 0 +0 1027 +cfn=(3732) +calls=1 0 +0 714 +cfn=(3730) +calls=1 0 +0 714 +cfn=(3728) _GLOBAL__sub_I__Z10DecryptAES7uint256S_RS_ +calls=1 0 +0 714 +cfn=(3726) _GLOBAL__sub_I__ZN14CZUnigridStakeC2ERKN11libzerocoin9CoinSpendE +calls=1 0 +0 714 +cfn=(3724) _GLOBAL__sub_I__ZN16CzUNIGRIDTrackerC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +calls=1 0 +0 714 +cfn=(3722) _GLOBAL__sub_I__ZN15CzUNIGRIDWalletC2ENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +calls=1 0 +0 714 +cfn=(3720) _GLOBAL__sub_I__ZN9CWalletDB9WriteNameERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_ +calls=1 0 +0 719 +cfn=(3718) +calls=1 0 +0 714 +cfn=(3716) +calls=1 0 +0 909 +cfn=(3704) _GLOBAL__sub_I_fTestNet +calls=1 0 +0 2437 +cfn=(3702) _GLOBAL__sub_I_nWalletUnlockTime +calls=1 0 +0 1213 +cfn=(3700) _GLOBAL__sub_I__Z16DecodeDumpStringRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +calls=1 0 +0 759 +cfn=(3696) +calls=1 0 +0 1099 +cfn=(3694) _GLOBAL__sub_I_GridnodeConfig +calls=1 0 +0 828 +cfn=(3686) _GLOBAL__sub_I_GridnodeSync +calls=1 0 +0 1061 +cfn=(3684) +calls=1 0 +0 1712 +cfn=(3678) _GLOBAL__sub_I_budget +calls=1 0 +0 2047 +cfn=(3676) _GLOBAL__sub_I_mapSeenGridnodeScanningErrors +calls=1 0 +0 918 +cfn=(3674) _GLOBAL__sub_I_mapTxLockReq +calls=1 0 +0 1250 +cfn=(3672) _GLOBAL__sub_I__ZN8CCrypter20SetKeyFromPassphraseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcE16secure_allocatorIcEEERKSt6vectorIhSaIhEEjj +calls=1 0 +0 952 +cfn=(3642) _GLOBAL__sub_I_nWalletDBUpdated +calls=1 0 +0 2605 +cfn=(3500) +calls=1 0 +0 22814 +cfn=(3498) _GLOBAL__sub_I__ZN17CActiveGridnode12ManageStatusEv +calls=1 0 +0 752 +cfn=(3496) +calls=1 0 +0 120 +cfn=(3494) +calls=1 0 +0 752 +cfn=(3492) _GLOBAL__sub_I__Z14SanitizeStringRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE +calls=1 0 +0 112 +cfn=(3468) +calls=1 0 +0 18489 +cfn=(3466) _GLOBAL__sub_I__Z14JSONRPCRequestRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERK8UniValueS9_ +calls=1 0 +0 425 +cfn=(3464) _GLOBAL__sub_I__Z11RandAddSeedv +calls=1 0 +0 1199 +cfn=(3462) _GLOBAL__sub_I__Z11CLIENT_NAMEB5cxx11 +calls=1 0 +0 808 +cfn=(3460) +calls=1 0 +0 779 +cfn=(3458) +calls=1 0 +0 649 +cfn=(3456) +calls=1 0 +0 752 +cfn=(3454) _GLOBAL__sub_I__ZN11libzerocoin14ZerocoinParamsC2E7CBigNumj +calls=1 0 +0 649 +cfn=(3452) +calls=1 0 +0 649 +cfn=(3450) _GLOBAL__sub_I__ZN11libzerocoin9CoinSpendC2EPKNS_14ZerocoinParamsES3_RKNS_11PrivateCoinERNS_11AccumulatorERKjRKNS_18AccumulatorWitnessERK7uint256RKNS_9SpendTypeE +calls=1 0 +0 752 +cfn=(3448) +calls=1 0 +0 649 +cfn=(3446) +calls=1 0 +0 752 +cfn=(3444) _GLOBAL__sub_I__ZN11libzerocoin27AccumulatorProofOfKnowledgeC2EPKNS_25AccumulatorAndProofParamsE +calls=1 0 +0 752 +cfn=(3442) +calls=1 0 +0 1433 +cfn=(3440) +calls=1 0 +0 89 +cfn=(3438) _GLOBAL__sub_I_sporkManager +calls=1 0 +0 1085 +cfn=(3436) +calls=1 0 +0 752 +cfn=(3434) _GLOBAL__sub_I__Z5Sign1RK6CKeyIDRK9CKeyStore7uint256iR7CScript +calls=1 0 +0 832 +cfn=(3432) _GLOBAL__sub_I__Z9GetOpName10opcodetype +calls=1 0 +0 754 +cfn=(3430) _GLOBAL__sub_I__Z10CastToBoolRKSt6vectorIhSaIhEE +calls=1 0 +0 645 +cfn=(3428) +calls=1 0 +0 14 +cfn=(3426) _GLOBAL__sub_I__ZNK7CPubKey6VerifyERK7uint256RKSt6vectorIhSaIhEE +calls=1 0 +0 645 +cfn=(3424) +calls=1 0 +0 748 +cfn=(3422) _GLOBAL__sub_I_nConnectTimeout +calls=1 0 +0 979 +cfn=(3420) _GLOBAL__sub_I__ZNK9CKeyStore9GetPubKeyERK6CKeyIDR7CPubKey +calls=1 0 +0 1918 +cfn=(3418) +calls=1 0 +0 649 +cfn=(3416) +calls=1 0 +0 815 +cfn=(3414) _GLOBAL__sub_I__Z11MurmurHash3jRKSt6vectorIhSaIhEE +calls=1 0 +0 649 +cfn=(3412) +calls=1 0 +0 752 +cfn=(3410) +calls=1 0 +0 752 +cfn=(3408) +calls=1 0 +0 752 +cfn=(3406) _GLOBAL__sub_I__ZNK9COutPoint8ToStringB5cxx11Ev +calls=1 0 +0 752 +cfn=(3404) _GLOBAL__sub_I__ZNK12CBlockHeader7GetHashEv +calls=1 0 +0 752 +cfn=(3402) +calls=1 0 +0 649 +cfn=(3400) +calls=1 0 +0 483 +cfn=(3180) _GLOBAL__sub_I__ZNK12CChainParams15Zerocoin_ParamsEb +calls=1 0 +0 5419413 +cfn=(3178) +calls=1 0 +0 611 +cfn=(3176) _GLOBAL__sub_I__ZN8CFeeRateC2ERKlm +calls=1 0 +0 714 +cfn=(3174) _GLOBAL__sub_I__ZN14AccumulatorMapC2EPN11libzerocoin14ZerocoinParamsE +calls=1 0 +0 714 +cfn=(3172) _GLOBAL__sub_I__Z18GetMainCheckpointsB5cxx11v +calls=1 0 +0 694 +cfn=(3170) _GLOBAL__sub_I_mapAccumulatorValues +calls=1 0 +0 877 +cfn=(3168) _GLOBAL__sub_I__Z18getconnectioncountRK8UniValueb +calls=1 0 +0 714 +cfn=(3166) _GLOBAL__sub_I__Z7getinfoRK8UniValueb +calls=1 0 +0 714 +cfn=(3164) +calls=1 0 +0 714 +cfn=(3162) _GLOBAL__sub_I__Z12budgetToJSONP15CBudgetProposalR8UniValue +calls=1 0 +0 1110 +cfn=(3160) _GLOBAL__sub_I__Z11getpoolinfoRK8UniValueb +calls=1 0 +0 797 +cfn=(3158) _GLOBAL__sub_I_eventHTTP +calls=1 0 +0 1041 +cfn=(3156) +calls=1 0 +0 799 +cfn=(3154) +calls=1 0 +0 112 +cfn=(3152) +calls=1 0 +0 714 +cfn=(3150) _GLOBAL__sub_I__ZN6CChain6SetTipEP11CBlockIndex +calls=1 0 +0 714 +cfn=(3148) +calls=1 0 +0 714 +cfn=(3146) +calls=1 0 +0 903 +cfn=(3144) _GLOBAL__sub_I__ZN9BSArchiveC2EP8_IO_FILESt8functionIFvdEE +calls=1 0 +0 1027 +cfn=(3142) _GLOBAL__sub_I__ZN12CBloomFilterC2Ejdjh +calls=1 0 +0 611 +cfn=(3140) +calls=1 0 +0 990 +cfn=(3138) +calls=1 0 +0 714 +cfn=(3136) _GLOBAL__sub_I__Z22BlockToMintValueVectorRK6CBlockN11libzerocoin16CoinDenominationERSt6vectorI7CBigNumSaIS5_EE +calls=1 0 +0 714 +cfn=(3096) +calls=1 0 +0 13694 +cfn=(3094) _GLOBAL__sub_I__ZN15CTxMemPoolEntryC2Ev +calls=1 0 +0 714 +cfn=(3092) +calls=1 0 +0 719 +cfn=(3088) _GLOBAL__sub_I__Z19DEFAULT_TOR_CONTROLB5cxx11 +calls=1 0 +0 1795 +cfn=(3086) +calls=1 0 +0 1216 +cfn=(3084) +calls=1 0 +0 714 +cfn=(3082) +calls=1 0 +0 719 +cfn=(3048) _GLOBAL__sub_I__ZN9RPCServer9OnStartedEN5boost8functionIFvvEEE +calls=1 0 +0 161651 +cfn=(3046) +calls=1 0 +0 714 +cfn=(3044) +calls=1 0 +0 714 +cfn=(3042) _GLOBAL__sub_I__Z9StartRESTv +calls=1 0 +0 719 +cfn=(3040) _GLOBAL__sub_I__Z19GetNextWorkRequiredPK11CBlockIndexPK12CBlockHeader +calls=1 0 +0 714 +cfn=(3038) _GLOBAL__sub_I__Z12noui_connectv +calls=1 0 +0 112 +cfn=(2892) _GLOBAL__sub_I_fDiscover +calls=1 0 +0 542552 +cfn=(2890) _GLOBAL__sub_I_nLastBlockTx +calls=1 0 +0 728 +cfn=(2888) +calls=1 0 +0 924 +cfn=(2830) _GLOBAL__sub_I_cs_main +calls=1 0 +0 17376 +cfn=(2828) _GLOBAL__sub_I__Z11HandleErrorRKN7leveldb6StatusE +calls=1 0 +0 714 +cfn=(2728) _GLOBAL__sub_I_pwalletMain +calls=1 0 +0 17015 +cfn=(2150) +calls=1 0 +0 112810 +0 368 + +fn=(2140) OPENSSL_ia32_cpuid +0 58 + +fn=(2698) +0 35 +cfn=(2700) boost::exception_detail::copy_boost_exception(boost::exception*, boost::exception const*) +calls=1 0 +0 37 +0 20 +cfn=(2708) boost::exception_detail::bad_alloc_::~bad_alloc_() +calls=1 0 +0 769 +0 2 +cfn=(2708) +calls=1 0 +0 36 +0 14 +cob=(47) +cfi=(220) +cfn=(1958) +calls=1 0 +0 19 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 16 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(1964) +calls=1 0 +0 8 +0 1 +0 3 +cfn=(2706) +calls=1 0 +0 14 +0 1 + +fn=(2708) +0 28 +cob=(47) +cfi=(220) +cfn=(2712) +calls=2 0 +0 751 +0 2 +0 24 + +fn=(2780) +0 32 + +fn=(2850) +0 77 +cob=(5) +cfi=(206) +cfn=(1262) +calls=7 53 +0 210 +0 7 +0 35 +cob=(5) +cfi=(257) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_condattr_init.c +cfn=(2854) pthread_condattr_init +calls=7 25 +0 28 +0 7 +0 42 +cob=(5) +cfi=(258) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_condattr_setclock.c +cfn=(2858) pthread_condattr_setclock +calls=7 29 +0 77 +0 7 +0 35 +cob=(5) +cfi=(259) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_init.c +cfn=(2862) pthread_cond_init@@GLIBC_2.3.2 +calls=7 28 +0 119 +0 7 +0 21 +cob=(5) +cfi=(260) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_condattr_destroy.c +cfn=(2866) pthread_condattr_destroy +calls=7 24 +0 21 +0 7 +0 84 + +fn=(2900) +0 3676 +cfn=(2902) ENGINE_get_default_RAND +calls=1 0 +0 24 +0 4 +cfn=(2906) RAND_SSLeay +calls=1 0 +0 3 +0 3 + +fn=(2904) engine_table_select +0 30520 + +fn=(2918) CRYPTO_lock +0 63028 +cfn=(3486) +calls=28 0 +0 1610 +0 26772 + +fn=(2966) ENGINE_get_digest_engine +0 6100 +cfn=(2904) +calls=1525 0 +0 30500 + +fn=(2994) EVP_MD_CTX_cleanup +0 22794 +cfn=(2996) EVP_MD_CTX_test_flags +calls=786 0 +0 3144 +0 4716 +cfn=(2998) +calls=786 0 +0 57378 +0 1572 +cfn=(3000) CRYPTO_free +calls=786 0 +0 75456 +0 786 + +fn=(3000) +0 6296 +cob=(3) +cfi=(176) +cfn=(1204) +calls=787 3087 +0 64534 +0 787 +0 3935 + +fn=(3062) +0 2625 +cob=(47) +cfi=(220) +cfn=(3072) +calls=126 0 +0 6702 +0 126 +0 2454 +cob=(47) +cfi=(220) +cfn=(3080) +calls=123 0 +0 2345 +0 123 +0 492 +cob=(47) +cfi=(220) +cfn=(3072) +calls=123 0 +0 5720 +0 123 +0 1028 +cob=(47) +cfi=(220) +cfn=(3072) +calls=6 0 +0 273 +0 6 +0 30 +cfn=(3064) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, CRPCCommand const*>, std::_Select1st, std::allocator > const, CRPCCommand const*> >, std::less, std::allocator > >, std::allocator, std::allocator > const, CRPCCommand const*> > >::_M_get_insert_unique_pos(std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 35 + +fn=(3094) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3136) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3150) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3182) __static_initialization_and_destruction_0(int, int) [clone .constprop.0] +0 23 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 14 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 306 +0 3 +cfn=(3184) +calls=1 0 +0 2796 +0 7 +cfn=(3200) boost::assign_detail::generic_list::type, boost::assign_detail::assign_decay::type> > boost::assign::map_list_of(int const&, uint256 const&) +calls=1 0 +0 2483 +0 4 +cfn=(2872) +calls=1 0 +0 159 +0 4 +cfn=(3184) +calls=1 0 +0 2796 +0 48 +cfn=(3204) void std::deque, std::allocator > >::emplace_back >(std::pair&&) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 5 +cfn=(2872) +calls=1 0 +0 306 +0 4 +cfn=(3184) +calls=1 0 +0 2780 +0 46 +cfn=(3204) +calls=1 0 +0 75 +0 3 +cfn=(3216) std::map, std::allocator > > boost::assign_detail::converter >, std::_Deque_iterator, std::pair&, std::pair*> >::convert, std::allocator > > >(std::map, std::allocator > > const*, boost::assign_detail::default_type_tag) const [clone .isra.0] +calls=1 0 +0 4243 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 104 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 2 +cfn=(3206) +calls=1 0 +0 226 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 76 +0 3 +cfn=(3184) +calls=1 0 +0 238 +0 5 +cfn=(3200) +calls=1 0 +0 833 +0 3 +cfn=(3216) +calls=1 0 +0 206 +0 3 +cfn=(3206) +calls=1 0 +0 206 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 76 +0 3 +cfn=(3184) +calls=1 0 +0 238 +0 5 +cfn=(3200) +calls=1 0 +0 833 +0 3 +cfn=(3216) +calls=1 0 +0 206 +0 2 +cfn=(3206) +calls=1 0 +0 206 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 971 +0 1 +0 2 +cfn=(3222) +calls=1 0 +0 1164509 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3396) +calls=1 0 +0 1480587 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3398) CRegTestParams::CRegTestParams() +calls=1 0 +0 1560803 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3222) +calls=1 0 +0 1160332 +0 11 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 75 +0 1 +0 41 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 556 +0 6 +0 30 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 574 +0 6 +0 27 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 34 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 13 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 6 +cfn=(3706) +calls=1 0 +0 793 +0 18 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 9 +cfn=(3712) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_get_insert_unique_pos(int const&) +calls=1 0 +0 23 +0 6 +cfn=(3714) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_insert_node(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node >*) +calls=1 0 +0 43 +0 5 +cfn=(3710) +calls=1 0 +0 206 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 385 +0 1 +0 11 + +fn=(3200) +0 78 +cfn=(3202) std::_Deque_base, std::allocator > >::_M_initialize_map(unsigned long) +calls=3 0 +0 847 +0 144 +cfn=(3204) +calls=3 0 +0 225 +0 87 +cfn=(3202) +calls=3 0 +0 847 +0 195 +cfn=(3206) +calls=3 0 +0 1696 +0 30 + +fn=(3256) std::vector >::_M_default_append(unsigned long) +0 220 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 68 +cfn=(3258) +calls=4 0 +0 112 +0 56 + +fn=(3316) sph_bmw512 +0 22 +cfn=(3318) bmw64 +calls=11 0 +0 737 + +fn=(3318) +0 407 +cob=(3) +cfi=(202) +cfn=(912) +calls=11 225 +0 132 +0 11 +0 187 + +fn=(3320) sph_bmw512_close +0 55 +cfn=(3322) sph_bmw512_addbits_and_close +calls=11 0 +0 39006 + +fn=(3370) sph_skein512_close +0 50 +cfn=(3372) sph_skein512_addbits_and_close +calls=10 0 +0 24410 + +fn=(3374) skein_big_close +0 390 +cob=(3) +cfi=(204) +cfn=(952) +calls=10 167 +0 180 +0 10 +0 23550 + +fn=(3414) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3420) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 1120 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 339 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3432) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 225 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3454) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3464) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 519 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(6526) boost::filesystem::detail::remove(boost::filesystem::path const&, boost::system::error_code*) +0 22 +cob=(3) +cfi=(374) +cfn=(6530) +calls=1 33 +0 15 +0 1 +0 3 +cob=(5) +cfi=(262) /build/glibc-sMfBJT/glibc-2.31/nptl/../csu/errno-loc.c +cfn=(2924) __errno_location +calls=1 25 +0 4 +0 1 +0 16 +cfn=(6532) (anonymous namespace)::remove_file_or_directory(boost::filesystem::path const&, boost::filesystem::file_type, boost::system::error_code*) +calls=1 0 +0 24 +0 13 + +fn=(6532) +0 24 + +fn=(6550) +0 15 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 8 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 8 +cob=(5) +cfi=(371) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_destroy.c +cfn=(6340) pthread_cond_destroy@@GLIBC_2.3.2 +calls=1 43 +0 23 +0 1 +0 13 +cfn=(6552) std::_Rb_tree > >, std::pair > > const, boost::function >, std::_Select1st > > const, boost::function > >, std::less > > >, std::allocator > > const, boost::function > > >::_M_erase(std::_Rb_tree_node > > const, boost::function > >*) +calls=1 0 +0 18 + +fn=(3650) +0 13 + +fn=(3662) __lock_env_create +0 7 +cfn=(3664) +calls=1 0 +0 107 +0 9 + +fn=(3672) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 421 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3686) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3688) CGridnodeSync::CGridnodeSync() +calls=1 0 +0 151 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3692) +0 304 + +fn=(3704) +0 10 +cfn=(3182) +calls=1 0 +0 2427 + +fn=(3712) +0 23 + +fn=(3728) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3740) boost::system::error_category::failed(int) const +0 12 + +fn=(3756) +0 6 +cfn=(3758) +calls=1 0 +0 117 +0 2 + +fn=(3760) +0 6 +cfn=(3758) +calls=1 0 +0 117 +0 2 + +fn=(4490) noui_connect() +0 42 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 5 +cfn=(4492) +calls=1 0 +0 102 +0 2 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 304 +0 1 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 37 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 20 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 17 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 7 +cob=(47) +cfi=(220) +cfn=(4498) +calls=1 0 +0 8 +0 1 +0 13 +cfn=(4500) std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >, bool> std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > > >::_M_insert_unique > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >(std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >&&) +calls=1 0 +0 146 +0 13 +cfn=(2706) +calls=1 0 +0 14 +0 2 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 4 +cfn=(4504) boost::signals2::detail::auto_buffer, boost::signals2::detail::store_n_objects<10u>, boost::signals2::detail::default_grow_policy, std::allocator > >::auto_buffer_destroy() +calls=1 0 +0 34 +0 44 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 5 +cfn=(4506) boost::signals2::detail::signal_impl, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex>::nolock_force_unique_connection_list(boost::signals2::detail::garbage_collecting_lock&) +calls=1 0 +0 102 +0 2 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 34 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 20 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 17 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 7 +cob=(47) +cfi=(220) +cfn=(4498) +calls=1 0 +0 8 +0 1 +0 25 +cfn=(2706) +calls=1 0 +0 14 +0 2 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 4 +cfn=(4504) +calls=1 0 +0 34 +0 34 +cfn=(4510) +calls=1 0 +0 293 +0 6 + +fn=(4494) +0 116 + +fn=(4504) +0 272 + +fn=(4746) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::__cxx11::basic_string, std::allocator > >, std::_Select1st, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >::_M_insert_node(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node, std::allocator > const, std::__cxx11::basic_string, std::allocator > > >*) +0 105 +cob=(47) +cfi=(220) +cfn=(3068) +calls=7 0 +0 256 +0 7 +0 93 +cob=(47) +cfi=(220) +cfn=(3072) +calls=4 0 +0 183 +0 4 +0 20 + +fn=(4754) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_insert_node(std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >*) +0 90 +cob=(47) +cfi=(220) +cfn=(3068) +calls=6 0 +0 214 +0 6 +0 77 +cob=(47) +cfi=(220) +cfn=(3072) +calls=3 0 +0 138 +0 3 +0 15 + +fn=(4764) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 90 +0 1 + +fn=(4824) +0 442 +cfn=(4524) +calls=26 0 +0 5297 +0 105 +cob=(3) +cfi=(237) +cfn=(2328) +calls=4 59 +0 90 +0 4 +0 41 +cob=(47) +cfi=(220) +cfn=(3072) +calls=1 0 +0 50 +0 1 +0 293 +cfn=(4890) atoi(std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 120 +0 53 + +fn=(4902) ECC_Start() +0 15 +cfn=(4904) +calls=1 0 +0 361971 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 3 +cfn=(4938) +calls=1 0 +0 84 +0 3 +cfn=(4940) LockedPageManager::CreateInstance() +calls=1 0 +0 247 +0 2 +cfn=(4944) +calls=1 0 +0 96 +0 5 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 157 +cfn=(4958) +calls=1 0 +0 13602 +0 3 +cfn=(4960) secp256k1_context_randomize +calls=1 0 +0 361641 +0 5 +cfn=(2998) +calls=1 0 +0 28 +0 2 +cfn=(4938) +calls=1 0 +0 13 +0 8 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 32 +cfn=(4950) MemoryPageLocker::Lock(void const*, unsigned long) +calls=1 0 +0 22 +0 5 +cfn=(4956) std::pair >, bool> std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_emplace_unique >(std::pair&&) +calls=1 0 +0 119 +0 6 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 11 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 15 +cfn=(4962) +calls=1 0 +0 22 +0 3 +cob=(47) +cfi=(220) +cfn=(4970) +calls=1 0 +0 41 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 3 + +fn=(4924) +0 43155936 + +fn=(4926) +0 424 + +fn=(4990) ECC_InitSanityCheck() +0 19 +cfn=(4992) std::vector >::_M_default_append(unsigned long) +calls=1 0 +0 558 +0 4 +cfn=(4998) +calls=1 0 +0 13582 +0 4 +cfn=(5002) CKey::GetPubKey() const +calls=1 0 +0 284913 +0 3 +cfn=(5012) CKey::VerifyPubKey(CPubKey const&) const +calls=1 0 +0 1189165 +0 9 +cfn=(2998) +calls=1 0 +0 28 +0 2 +cfn=(4938) +calls=1 0 +0 13 +0 7 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 35 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 20 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 5 +cfn=(4962) +calls=1 0 +0 22 +0 3 +cob=(47) +cfi=(220) +cfn=(4970) +calls=1 0 +0 41 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 3 + +fn=(4992) +0 193 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 3 +cfn=(4938) +calls=1 0 +0 13 +0 9 +cfn=(4994) boost::unique_lock::lock() +calls=1 0 +0 60 +0 20 +cfn=(4950) +calls=1 0 +0 22 +0 5 +cfn=(4956) +calls=1 0 +0 119 +0 17 +cfn=(4996) +calls=1 0 +0 40 +0 1 + +fn=(5000) +0 10 +cfn=(4928) +calls=1 0 +0 92 +0 16 + +fn=(5010) +0 198 + +fn=(5020) nonce_function_rfc6979 +0 30 +cfn=(4912) +calls=1 0 +0 63278 +0 23 +cfn=(4920) +calls=1 0 +0 14066 +0 16 + +fn=(5032) +0 48070 + +fn=(5046) +0 44 +cfn=(4928) +calls=2 0 +0 184 +0 10 +cfn=(4928) +calls=2 0 +0 184 +0 42 + +fn=(5056) secp256k1_ecmult_strauss_wnaf.isra.0.constprop.0 +0 27 +cfn=(5058) +calls=1 0 +0 1221 +0 4286 +cfn=(4976) +calls=19 0 +0 48127 +0 120 +cfn=(4976) +calls=24 0 +0 58305 +0 2530 +cfn=(4924) +calls=15 0 +0 3240 +0 105 +cfn=(4922) +calls=15 0 +0 2520 +0 585 +cfn=(4924) +calls=15 0 +0 3240 +0 585 +cfn=(4924) +calls=15 0 +0 3240 +0 90 +cfn=(4924) +calls=15 0 +0 3240 +0 390 +cfn=(4978) +calls=15 0 +0 225 +0 2079 +cfn=(4974) +calls=254 0 +0 377698 +0 1882 +cfn=(4924) +calls=1 0 +0 216 +0 685 +cfn=(4922) +calls=15 0 +0 2520 +0 75 +cfn=(4922) +calls=15 0 +0 2520 +0 105 +cfn=(4924) +calls=15 0 +0 3240 +0 75 +cfn=(4924) +calls=15 0 +0 3240 +0 75 +cfn=(4924) +calls=15 0 +0 3240 +0 1260 +cfn=(4924) +calls=15 0 +0 3240 +0 75 +cfn=(4924) +calls=15 0 +0 3240 +0 217 +cfn=(5058) +calls=1 0 +0 2731 +0 14 +cfn=(5060) +calls=1 0 +0 20454 +0 43 +cfn=(4922) +calls=1 0 +0 168 +0 18 +cfn=(4922) +calls=6 0 +0 1008 +0 28 +cfn=(4924) +calls=7 0 +0 1512 +0 28 +cfn=(4924) +calls=7 0 +0 1512 +0 28 +cfn=(4924) +calls=7 0 +0 1512 +0 72 +cfn=(4924) +calls=6 0 +0 1296 +0 28 + +fn=(5066) bool (anonymous namespace)::sanity_test_memcpy<1025u>() +0 9762 + +fn=(6024) InitError(std::__cxx11::basic_string, std::allocator > const&) +0 17 +cfn=(6026) boost::signals2::detail::signal_impl, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::signals2::last_value, int, std::less, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)>, boost::signals2::mutex>::operator()(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int) +calls=1 0 +0 43529 +0 11 + +fn=(6026) +0 24 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 15 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 4 +cfn=(4504) +calls=1 0 +0 34 +0 26 +cfn=(6028) boost::signals2::detail::slot_call_iterator_t, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int>, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> >::lock_next_callable() const +calls=1 0 +0 26 +0 10 +cfn=(6028) +calls=1 0 +0 209 +0 25 +cfn=(6028) +calls=1 0 +0 197 +0 21 +cfn=(6034) +calls=1 0 +0 42734 +0 34 +cfn=(2706) +calls=1 0 +0 14 +0 33 +cfn=(4494) +calls=1 0 +0 69 +0 4 + +fn=(6032) boost::signals2::detail::connection_body >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex>::unlock() +0 18 +cob=(5) +cfi=(182) +cfn=(724) +calls=2 356 +0 38 +0 2 +0 14 + +fn=(6038) +0 866 + +fn=(6048) DebugPrintInit() +0 20 +cfn=(2876) +calls=1 0 +0 55 +0 2 +cfn=(4526) +calls=1 0 +0 113 +0 8 +cfn=(3060) +calls=1 0 +0 125 +0 3 +cfn=(4546) +calls=1 0 +0 346 +0 6 +cob=(3) +cfi=(274) +cfn=(3532) +calls=1 85 +0 506 +0 1 +0 6 +cob=(3) +cfi=(354) +cfn=(6052) +calls=1 32 +0 241 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 9 + +fn=(6174) boost::date_time::date_facet > >::~date_facet() +0 44 +cfn=(6082) +calls=4 0 +0 88 +0 8 +cfn=(6082) +calls=4 0 +0 88 +0 8 +cfn=(6082) +calls=4 0 +0 88 +0 8 +cfn=(6082) +calls=4 0 +0 88 +0 8 +cfn=(6082) +calls=4 0 +0 536 +0 8 +cfn=(6082) +calls=4 0 +0 704 +0 8 +cfn=(6080) +calls=4 0 +0 116 +0 52 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 28 +cob=(47) +cfi=(220) +cfn=(4220) +calls=4 0 +0 8 +0 4 + +fn=(6222) InterruptRPC() +0 9 +cfn=(6038) +calls=1 0 +0 29 +0 10 + +fn=(6244) boost::shared_mutex::state_data::can_lock_shared() const +0 14 + +fn=(6258) void tinyformat::detail::FormatIterator::accept(char const (&) [16]) +0 24 +cob=(3) +cfi=(169) +cfn=(662) +calls=1 42 +0 16 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(6020) +calls=1 0 +0 211 +0 1 +0 14 +cfn=(5982) +calls=1 0 +0 112 +0 7 +cfn=(6016) +calls=1 0 +0 80 +0 14 + +fn=(6298) boost::signals2::detail::slot_call_iterator_t, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body >, boost::signals2::slot >, boost::signals2::mutex> >::lock_next_callable() const +0 52 + +fn=(6300) boost::signals2::detail::auto_buffer, boost::signals2::detail::foreign_void_shared_ptr>, boost::signals2::detail::store_n_objects<10u>, boost::signals2::detail::default_grow_policy, std::allocator, boost::signals2::detail::foreign_void_shared_ptr> > >::auto_buffer_destroy() +0 34 + +fn=(6310) boost::detail::interruption_checker::interruption_checker(pthread_mutex_t*, pthread_cond_t*) +0 13 +cfn=(6232) +calls=1 0 +0 36 +0 9 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 13 + +fn=(6354) +0 15 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cob=(3) +cfi=(274) +cfn=(3532) +calls=1 85 +0 649 +0 1 +0 8 +cfn=(6356) +calls=1 0 +0 50 +0 18 +cfn=(6358) +calls=1 0 +0 9284 +0 6 +cfn=(6358) +calls=1 0 +0 158 +0 4 +cob=(3) +cfi=(293) +cfn=(3604) +calls=1 34 +0 552 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 208 +cfn=(3274) +calls=1 0 +0 19 +0 8 +cfn=(3276) +calls=1 0 +0 57 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 2 +cfn=(3290) +calls=1 0 +0 20 +0 4 +cfn=(3276) +calls=1 0 +0 57 +0 3 +cfn=(3288) +calls=1 0 +0 3565 +0 20 +cfn=(6370) +calls=1 0 +0 69 +0 6 +cob=(47) +cfi=(220) +cfn=(4650) +calls=1 0 +0 1271 +0 1 +0 15 +cfn=(2998) +calls=1 0 +0 36 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 18 +cfn=(5016) +calls=1 0 +0 137 +0 7 +cob=(3) +cfi=(237) +cfn=(2328) +calls=1 59 +0 27 +0 1 +0 6 +cfn=(6372) +calls=1 0 +0 47 +0 1 +cfn=(4886) +calls=1 0 +0 13 +0 14 +cfn=(6380) +calls=1 0 +0 62 +0 5 +cfn=(6382) +calls=1 0 +0 1749 +0 3 +cfn=(6400) void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) [clone .isra.0] +calls=1 0 +0 122 +0 3 +cfn=(6400) +calls=1 0 +0 122 +0 4 +cfn=(6404) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 +0 7 +cfn=(6370) +calls=1 0 +0 69 +0 11 +cfn=(6372) +calls=1 0 +0 45 +0 5 +cfn=(6406) +calls=1 0 +0 20 +0 7 +cfn=(6370) +calls=1 0 +0 69 +0 9 +cfn=(6408) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 18 +0 7 +cfn=(6370) +calls=1 0 +0 72 +0 7 +cfn=(3508) +calls=1 0 +0 641 +0 5 +cfn=(6410) int LogPrint(char const*, char const*, long const&) [clone .constprop.0] +calls=1 0 +0 52 +0 3 +cfn=(6412) +calls=1 0 +0 7698 +0 4 +cfn=(6444) +calls=1 0 +0 51 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 7 +cfn=(6372) +calls=1 0 +0 45 +0 3 +cfn=(6396) +calls=1 0 +0 52 +0 1 + +fn=(6358) +0 96 +cob=(3) +cfi=(372) +cfn=(6362) +calls=6 31 +0 10842 +0 6 +0 66 + +fn=(6380) +0 28 +cob=(5) +cfi=(180) +cfn=(714) +calls=2 64 +0 70 +0 2 +0 52 +cob=(5) +cfi=(180) +cfn=(714) +calls=2 64 +0 70 +0 2 +0 24 + +fn=(6404) +0 48 + +fn=(6482) +0 19 +cfn=(3682) +calls=1 0 +0 24 +0 7 +cfn=(6370) +calls=1 0 +0 72 +0 21 + +fn=(6488) CBudgetDB::Write(CBudgetManager const&) +0 18 +cfn=(6380) +calls=1 0 +0 62 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 11 +cfn=(6448) +calls=1 0 +0 159 +0 4 +cfn=(4886) +calls=1 0 +0 13 +0 2 +cfn=(4886) +calls=1 0 +0 13 +0 5 +cfn=(6450) +calls=1 0 +0 358 +0 7 +cfn=(6490) +calls=1 0 +0 115 +0 5 +cfn=(6492) void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +calls=1 0 +0 115 +0 3 +cfn=(6448) +calls=1 0 +0 85 +0 14 +cfn=(6494) void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) [clone .isra.0] +calls=1 0 +0 114 +0 5 +cfn=(6492) +calls=1 0 +0 115 +0 3 +cfn=(6494) +calls=1 0 +0 114 +0 5 +cfn=(6496) +calls=1 0 +0 118 +0 5 +cfn=(6498) void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +calls=1 0 +0 116 +0 27 +cfn=(3274) +calls=1 0 +0 19 +0 8 +cfn=(3276) +calls=1 0 +0 56 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 2 +cfn=(3290) +calls=1 0 +0 20 +0 4 +cfn=(3276) +calls=1 0 +0 57 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 6 +cfn=(6450) +calls=1 0 +0 572 +0 4 +cob=(3) +cfi=(274) +cfn=(3532) +calls=1 85 +0 496 +0 1 +0 13 +cob=(3) +cfi=(362) +cfn=(6206) +calls=1 31 +0 638 +0 1 +0 4 +cob=(3) +cfi=(293) +cfn=(3604) +calls=1 34 +0 671 +0 1 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cfn=(6038) +calls=1 0 +0 29 +0 10 +cfn=(2998) +calls=1 0 +0 63 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 20 +cfn=(6450) +calls=1 0 +0 326 +0 3 +cfn=(6396) +calls=1 0 +0 52 +0 1 + +fn=(6494) +0 30 +cfn=(6448) +calls=2 0 +0 170 +0 28 + +fn=(6506) CGridnodePaymentDB::Read(CGridnodePayments&, bool) +0 15 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cob=(3) +cfi=(274) +cfn=(3532) +calls=1 85 +0 488 +0 1 +0 8 +cfn=(6356) +calls=1 0 +0 50 +0 18 +cfn=(6358) +calls=1 0 +0 626 +0 6 +cfn=(6358) +calls=1 0 +0 158 +0 4 +cob=(3) +cfi=(293) +cfn=(3604) +calls=1 34 +0 552 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 163 +cfn=(3274) +calls=1 0 +0 19 +0 8 +cfn=(3276) +calls=1 0 +0 56 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 2 +cfn=(3290) +calls=1 0 +0 20 +0 4 +cfn=(3276) +calls=1 0 +0 57 +0 3 +cfn=(3288) +calls=1 0 +0 3565 +0 20 +cfn=(6370) +calls=1 0 +0 69 +0 7 +cob=(47) +cfi=(220) +cfn=(4650) +calls=1 0 +0 211 +0 1 +0 9 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 7 +cfn=(2998) +calls=1 0 +0 27 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 18 +cfn=(5016) +calls=1 0 +0 137 +0 7 +cob=(3) +cfi=(237) +cfn=(2328) +calls=1 59 +0 25 +0 1 +0 6 +cfn=(6372) +calls=1 0 +0 47 +0 1 +cfn=(4886) +calls=1 0 +0 13 +0 10 +cfn=(6508) void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +calls=1 0 +0 129 +0 5 +cfn=(6512) void Unserialize, std::allocator > >(CDataStream&, std::map, std::allocator > >&, int, int) +calls=1 0 +0 141 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cfn=(6038) +calls=1 0 +0 29 +0 5 +cfn=(6516) +calls=1 0 +0 4254 +0 3 +cfn=(6486) +calls=1 0 +0 52 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 7 +cfn=(6372) +calls=1 0 +0 43 +0 1 + +fn=(6508) +0 19 +cfn=(6510) +calls=1 0 +0 18 +0 7 +cfn=(6370) +calls=1 0 +0 69 +0 16 + +fn=(6518) CGridnodePaymentDB::Write(CGridnodePayments const&) +0 15 +cfn=(3508) +calls=1 0 +0 641 +0 10 +cfn=(6448) +calls=1 0 +0 159 +0 4 +cfn=(4886) +calls=1 0 +0 13 +0 2 +cfn=(4886) +calls=1 0 +0 13 +0 5 +cfn=(6450) +calls=1 0 +0 376 +0 3 +cfn=(6448) +calls=1 0 +0 85 +0 8 +cfn=(6448) +calls=1 0 +0 85 +0 32 +cfn=(3274) +calls=1 0 +0 19 +0 8 +cfn=(3276) +calls=1 0 +0 56 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 2 +cfn=(3290) +calls=1 0 +0 20 +0 4 +cfn=(3276) +calls=1 0 +0 57 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 6 +cfn=(6450) +calls=1 0 +0 568 +0 3 +cob=(3) +cfi=(274) +cfn=(3532) +calls=1 85 +0 496 +0 1 +0 13 +cob=(3) +cfi=(362) +cfn=(6206) +calls=1 31 +0 638 +0 1 +0 4 +cob=(3) +cfi=(293) +cfn=(3604) +calls=1 34 +0 671 +0 1 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cfn=(6038) +calls=1 0 +0 29 +0 10 +cfn=(2998) +calls=1 0 +0 47 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 17 +cfn=(6450) +calls=1 0 +0 336 +0 1 + +fn=(6576) +0 4 +cob=(47) +cfi=(220) +cfn=(4306) +calls=1 0 +0 56 +0 1 + +fn=(6600) +0 10 +cfn=(3692) +calls=1 0 +0 16 +0 3 +cfn=(3692) +calls=1 0 +0 16 +0 8 +cfn=(3692) +calls=1 0 +0 16 + +fn=(6608) +0 44 +cfn=(6610) +calls=4 0 +0 64 + +fn=(6616) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 + +fn=(6622) +0 11 +cfn=(6624) +calls=1 0 +0 22 + +fn=(6632) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 44 + +fn=(6670) DbEnv::cleanup() +0 9 + +fn=(6674) +0 11 +cfn=(6676) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 22 + +fn=(6692) +0 11 +cfn=(4520) +calls=1 0 +0 1176 + +fn=(6700) +0 14 + +fn=(6766) +0 308 +cob=(47) +cfi=(220) +cfn=(4768) +calls=28 0 +0 3080 +0 28 + +fn=(6782) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6798) +0 52 +cfn=(2707) +calls=4 0 +0 1092 +0 16 +cfn=(2707) +calls=4 0 +0 1280 +0 32 +cob=(47) +cfi=(220) +cfn=(4768) +calls=4 0 +0 440 +0 4 + +fn=(6820) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6830) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6864) +0 12 +cfn=(3102) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(3104) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6874) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, CRPCCommand const*>, std::_Select1st, std::allocator > const, CRPCCommand const*> >, std::less, std::allocator > >, std::allocator, std::allocator > const, CRPCCommand const*> > >::_M_erase(std::_Rb_tree_node, std::allocator > const, CRPCCommand const*> >*) +0 16 +cfn=(6875) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, CRPCCommand const*>, std::_Select1st, std::allocator > const, CRPCCommand const*> >, std::less, std::allocator > >, std::allocator, std::allocator > const, CRPCCommand const*> > >::_M_erase(std::_Rb_tree_node, std::allocator > const, CRPCCommand const*> >*)'2 +calls=1 0 +0 9730 +0 20 +cfn=(6875) +calls=5 0 +0 12678 +0 33 +cob=(47) +cfi=(220) +cfn=(3210) +calls=3 0 +0 318 +0 3 +0 12 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 636 +0 6 +0 20 + +fn=(6875) +0 1720 +cfn=(6875) +calls=65 0 +0 32410 +0 248 +cfn=(6875) +calls=62 0 +0 14112 +0 678 +cob=(47) +cfi=(220) +cfn=(3210) +calls=43 0 +0 4558 +0 43 +0 254 +cob=(47) +cfi=(220) +cfn=(3210) +calls=127 0 +0 13462 +0 127 +0 1318 + +fn=(6882) +0 26 +cfn=(2707) +calls=2 0 +0 546 +0 8 +cfn=(2707) +calls=2 0 +0 640 +0 16 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6900) +0 11 +cfn=(6902) +calls=1 0 +0 16 + +fn=(6912) +0 22 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6932) +0 29 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(6824) +calls=1 0 +0 125 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 4 +cfn=(6934) +calls=1 0 +0 172 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 1 + +fn=(6948) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6960) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6968) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6984) +0 21 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 + +fn=(7004) +0 12 +cfn=(7006) +calls=1 0 +0 22 +0 8 +cfn=(7008) +calls=1 0 +0 18 +0 12 + +fn=(7010) +0 19 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 8 +cob=(5) +cfi=(371) +cfn=(6340) +calls=1 43 +0 23 +0 1 +0 8 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 8 +cob=(5) +cfi=(371) +cfn=(6340) +calls=1 43 +0 23 +0 1 +0 7 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 12 + +fn=(7012) +0 11 +cfn=(7014) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 18 + +fn=(7014) +0 18 + +fn=(7016) +0 11 +cfn=(7018) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 + +fn=(7018) +0 16 + +fn=(7036) +0 13 + +fn=(7054) +0 16 + +fn=(7064) +0 11 +cfn=(7066) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 16 + +fn=(7074) +0 20 + +fn=(7082) +0 13 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1432 +0 6 +cfn=(2706) +calls=1 0 +0 2273 +0 11 +cfn=(2706) +calls=1 0 +0 2297 + +fn=(7088) +0 12 +cfn=(2780) +calls=1 0 +0 16 +0 2 +cfn=(2782) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7090) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7112) +0 12 +cfn=(2766) +calls=1 0 +0 16 +0 2 +cfn=(2768) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7122) +0 13 +cfn=(2707) +calls=1 0 +0 273 +0 4 +cfn=(2707) +calls=1 0 +0 320 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7132) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 855 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7152) +0 12 +cfn=(2742) +calls=1 0 +0 129 +0 2 +cfn=(2744) +calls=1 0 +0 1008 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7176) +0 12 +cfn=(2734) +calls=1 0 +0 149 +0 2 +cfn=(2736) +calls=1 0 +0 1012 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7186) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7192) +0 62 +cfn=(7198) +calls=1 0 +0 158 +cfn=(7194) +calls=1 0 +0 158 +0 30 +cfn=(7200) boost::detail::sp_counted_impl_p >::~sp_counted_impl_p() +calls=1 0 +0 122 +cfn=(7196) +calls=1 0 +0 122 + +fn=(2722) boost::exception_detail::bad_exception_::~bad_exception_() +0 28 +cob=(47) +cfi=(220) +cfn=(2726) +calls=2 0 +0 18 +0 2 +0 24 + +fn=(2728) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 14 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2730) +calls=1 0 +0 15365 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 24 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(3) +cfi=(239) +cfn=(2792) +calls=1 32 +0 580 +0 1 +0 8 + +fn=(2744) +0 39 +cfn=(7154) +calls=1 0 +0 730 +0 8 +cfn=(7160) boost::detail::sp_counted_impl_p >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> >::~sp_counted_impl_p() +calls=1 0 +0 122 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 23 + +fn=(2770) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 12 +cfn=(2772) +calls=1 0 +0 16 +0 2 +cfn=(2774) std::__cxx11::_List_base >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot, std::allocator > const&, int), boost::function, std::allocator > const&, int)> >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 10 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cfn=(2740) +calls=1 0 +0 85 +0 11 + +fn=(2774) +0 46 + +fn=(2776) +0 96 + +fn=(2890) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 19 + +fn=(2910) +0 12393 +cob=(3) +cfi=(261) +cfn=(2914) +calls=729 59 +0 2916 +0 729 +0 5103 +cfn=(2916) EVP_MD_CTX_init +calls=729 0 +0 4374 +0 11664 +cfn=(2918) +calls=729 0 +0 14820 +0 1458 +cfn=(2920) CRYPTO_THREADID_current +calls=729 0 +0 16767 +0 3645 +cfn=(2918) +calls=729 0 +0 14800 +0 104423 +cfn=(2960) +calls=738 0 +0 2214 +0 2952 +cfn=(2962) EVP_DigestInit_ex +calls=738 0 +0 131327 +0 5166 +cfn=(2976) +calls=738 0 +0 48672 +0 2952 +cfn=(2976) +calls=738 0 +0 48708 +0 2952 +cfn=(2976) +calls=738 0 +0 50198 +0 5215 +cfn=(2976) +calls=7 0 +0 430 +0 28 +cfn=(2976) +calls=7 0 +0 489 +0 42 +cfn=(2986) EVP_DigestFinal_ex +calls=7 0 +0 15533 +0 3655 +cfn=(2986) +calls=731 0 +0 1617774 +0 24512 +cfn=(2920) +calls=52 0 +0 1196 +0 260 +cfn=(2918) +calls=52 0 +0 1040 +0 156 +cfn=(2956) +calls=52 0 +0 1508 +0 520 +cfn=(2918) +calls=52 0 +0 1040 +0 1262 +cfn=(2916) +calls=52 0 +0 312 +0 52 +cfn=(2960) +calls=52 0 +0 156 +0 208 +cfn=(2962) +calls=52 0 +0 9256 +0 208 +cfn=(2976) +calls=52 0 +0 3224 +0 214 +cfn=(2976) +calls=1 0 +0 70 +0 4 +cfn=(2976) +calls=1 0 +0 68 +0 208 +cfn=(2976) +calls=52 0 +0 3432 +0 208 +cfn=(2976) +calls=52 0 +0 58136 +0 208 +cfn=(2986) +calls=52 0 +0 60372 +0 10660 +cfn=(2994) +calls=52 0 +0 10972 +0 1388 +cfn=(2976) +calls=51 0 +0 3366 +0 4451 +cfn=(2976) +calls=731 0 +0 49708 +0 4378 +cfn=(2976) +calls=729 0 +0 48114 +0 2916 +cfn=(2960) +calls=729 0 +0 2187 +0 3645 +cfn=(2962) +calls=729 0 +0 61236 +0 2916 +cfn=(2976) +calls=729 0 +0 45198 +0 2916 +cfn=(2976) +calls=729 0 +0 48114 +0 3645 +cfn=(2994) +calls=729 0 +0 153819 +0 5860 +cfn=(2918) +calls=729 0 +0 14820 +0 730 +cfn=(2928) RAND_poll +calls=1 0 +0 13009 +0 3647 +cfn=(2918) +calls=729 0 +0 14820 +0 3645 +cfn=(2976) +calls=729 0 +0 48114 +0 2916 +cfn=(2986) +calls=729 0 +0 1623483 +0 3645 +cfn=(2918) +calls=729 0 +0 14800 +0 4374 +cfn=(2918) +calls=729 0 +0 14800 +0 735 + +fn=(2916) +0 4716 + +fn=(2928) +0 17 +cob=(3) +cfi=(261) +cfn=(2914) +calls=1 59 +0 4 +0 1 +0 63 +cob=(5) +cfi=(263) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/open64.c +cfn=(2932) open +calls=1 37 +0 34 +0 1 +0 26 +cfn=(2950) RAND_add +calls=1 0 +0 2165 +0 1 +cob=(3) +cfi=(261) +cfn=(3006) +calls=1 59 +0 4 +0 1 +0 6 +cfn=(2950) +calls=1 0 +0 2165 +0 2 +cob=(3) +cfi=(120) +cfn=(3010) +calls=1 31 +0 6 +0 1 +0 5 +cfn=(2950) +calls=1 0 +0 2165 +0 16 +cob=(3) +cfi=(264) +cfn=(2936) +calls=1 33 +0 11 +0 1 +0 11 +cob=(3) +cfi=(265) +cfn=(2940) +calls=1 27 +0 9 +0 1 +0 11 +cob=(5) +cfi=(266) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/read.c +cfn=(2944) read +calls=1 25 +0 8 +0 1 +0 5 +cob=(5) +cfi=(267) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/close.c +cfn=(2948) close +calls=1 26 +0 9 +0 1 +0 8 +cfn=(2950) +calls=1 0 +0 6218 +0 3 +cfn=(2998) +calls=1 0 +0 28 +0 1 + +fn=(2970) default_malloc_ex +0 1574 +cob=(3) +cfi=(176) +cfn=(704) +calls=787 3023 +0 34424 +0 787 + +fn=(2986) +0 19825 +cfn=(2988) final +calls=1525 0 +0 3251890 +0 16775 +cob=(3) +cfi=(204) +cfn=(952) +calls=1525 167 +0 27450 +0 1525 +0 7625 + +fn=(3014) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 22 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 12 +cfn=(3016) +calls=1 0 +0 16 +0 2 +cfn=(3018) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 20 + +fn=(3042) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 + +fn=(3048) +0 21 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cfn=(2872) +calls=1 0 +0 167 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3050) CRPCSignals::CRPCSignals() +calls=1 0 +0 6194 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 99 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 103 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 103 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 99 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 99 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 99 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 395 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 101 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 171 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 107 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 97 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 97 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 97 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 105 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 105 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 8 +cfn=(2872) +calls=1 0 +0 105 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 105 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 105 +0 3 +cfn=(2872) +calls=1 0 +0 171 +0 8 +cfn=(2872) +calls=1 0 +0 105 +0 3 +cfn=(2872) +calls=1 0 +0 387 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 7 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 7 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 322 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 314 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 318 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 387 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 171 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 171 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 99 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 99 +0 8 +cfn=(2872) +calls=1 0 +0 103 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 171 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 387 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 171 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 171 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 171 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 395 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 167 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 99 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 101 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 105 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 171 +0 8 +cfn=(2872) +calls=1 0 +0 99 +0 3 +cfn=(2872) +calls=1 0 +0 175 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3058) +calls=1 0 +0 120441 +0 11 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3050) +0 18 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(2784) +calls=1 0 +0 1328 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(2784) +calls=1 0 +0 1108 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(3052) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +calls=1 0 +0 1306 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 5 +cfn=(3052) +calls=1 0 +0 1306 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 20 + +fn=(3054) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 64 + +fn=(3108) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 + +fn=(3132) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +0 32 + +fn=(3134) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 + +fn=(3176) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3198) +0 38753 + +fn=(3202) +0 150 +cob=(47) +cfi=(220) +cfn=(2154) +calls=6 0 +0 624 +0 6 +0 66 +cob=(47) +cfi=(220) +cfn=(2154) +calls=6 0 +0 608 +0 6 +0 234 + +fn=(3218) std::map, std::allocator > >::map, std::pair&, std::pair*> >(std::_Deque_iterator, std::pair&, std::pair*>, std::_Deque_iterator, std::pair&, std::pair*>) +0 134 +cob=(47) +cfi=(220) +cfn=(2154) +calls=14 0 +0 2534 +0 14 +0 1061 +cob=(47) +cfi=(220) +cfn=(3068) +calls=3 0 +0 48 +0 3 +0 33 +cob=(47) +cfi=(220) +cfn=(3068) +calls=11 0 +0 602 +0 11 +0 119 + +fn=(3224) CBlockHeader::SetNull() +0 504 + +fn=(3278) void Serialize_impl, CTxIn>(CHashWriter&, std::vector > const&, int, int, CTxIn const&) [clone .isra.0] +0 64 +cfn=(3280) +calls=4 0 +0 336 +0 36 +cfn=(3276) +calls=4 0 +0 240 +0 16 +cfn=(3282) +calls=4 0 +0 14376 +0 24 +cfn=(3276) +calls=4 0 +0 252 +0 44 + +fn=(3282) +0 88 +cfn=(3280) +calls=8 0 +0 672 +0 104 +cfn=(3276) +calls=8 0 +0 27916 + +fn=(3300) +0 5425 +cfn=(3302) +calls=7 0 +0 119 +0 70 +cfn=(3304) +calls=7 0 +0 378 +0 35 +cfn=(3308) sph_blake512_close +calls=7 0 +0 19418 +0 21 +cfn=(3314) sph_bmw512_init +calls=7 0 +0 140 +0 35 +cfn=(3316) +calls=7 0 +0 483 +0 28 +cfn=(3320) +calls=7 0 +0 24857 +0 1935 +cfn=(3328) sph_groestl512_init +calls=4 0 +0 2336 +0 24 +cfn=(3330) +calls=4 0 +0 204 +0 16 +cfn=(3334) +calls=4 0 +0 105916 +0 40 +cfn=(3328) +calls=4 0 +0 2336 +0 18 +cfn=(3328) +calls=3 0 +0 1752 +0 49 +cfn=(3330) +calls=7 0 +0 357 +0 35 +cfn=(3334) +calls=7 0 +0 185353 +0 14 +cfn=(3344) sph_jh512_init +calls=7 0 +0 140 +0 28 +cfn=(3346) +calls=7 0 +0 69496 +0 28 +cfn=(3350) sph_jh512_close +calls=7 0 +0 70560 +0 1953 +cfn=(3302) +calls=3 0 +0 51 +0 12 +cfn=(3304) +calls=3 0 +0 132 +0 12 +cfn=(3308) +calls=3 0 +0 8322 +0 33 +cfn=(3354) sph_keccak512_init +calls=3 0 +0 339 +0 28 +cfn=(3354) +calls=4 0 +0 452 +0 28 +cfn=(3356) sph_keccak512 +calls=7 0 +0 343 +0 21 +cfn=(3360) sph_keccak512_close +calls=7 0 +0 44975 +0 21 +cfn=(3364) sph_skein512_init +calls=7 0 +0 140 +0 42 +cfn=(3366) sph_skein512 +calls=7 0 +0 322 +0 28 +cfn=(3370) +calls=7 0 +0 17122 +0 1929 +cfn=(3354) +calls=1 0 +0 113 +0 4 +cfn=(3356) +calls=1 0 +0 49 +0 3 +cfn=(3360) +calls=1 0 +0 6425 +0 496 +cfn=(3344) +calls=6 0 +0 120 +0 24 +cfn=(3346) +calls=6 0 +0 59568 +0 18 +cfn=(3350) +calls=6 0 +0 60480 +0 82 +cfn=(3314) +calls=4 0 +0 80 +0 16 +cfn=(3316) +calls=4 0 +0 276 +0 16 +cfn=(3320) +calls=4 0 +0 14204 +0 77 +cfn=(3364) +calls=3 0 +0 60 +0 18 +cfn=(3366) +calls=3 0 +0 138 +0 12 +cfn=(3370) +calls=3 0 +0 7338 +0 15 + +fn=(3314) +0 440 + +fn=(5914) boost::filesystem::detail::lex_compare(boost::filesystem::path::iterator, boost::filesystem::path::iterator, boost::filesystem::path::iterator, boost::filesystem::path::iterator) +0 136 +cob=(3) +cfi=(237) +cfn=(2328) +calls=4 59 +0 54 +0 4 +0 32 +cob=(3) +cfi=(237) +cfn=(2328) +calls=4 59 +0 54 +0 4 +0 80 + +fn=(3354) +0 904 + +fn=(3406) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3498) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3502) +0 132 + +fn=(6552) +0 18 + +fn=(6554) +0 18 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 8 +cob=(5) +cfi=(371) +cfn=(6340) +calls=1 43 +0 23 +0 1 +0 8 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 8 +cob=(5) +cfi=(371) +cfn=(6340) +calls=1 43 +0 23 +0 1 +0 8 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 8 +cob=(5) +cfi=(371) +cfn=(6340) +calls=1 43 +0 23 +0 1 +0 8 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 17 + +fn=(3654) __os_calloc +0 20 +cfn=(3656) __os_malloc +calls=2 0 +0 454 +0 14 +cob=(3) +cfi=(204) +cfn=(952) +calls=2 167 +0 161 +0 2 +0 10 + +fn=(3660) __db_isbigendian +0 3 + +fn=(3670) __txn_env_create +0 4 + +fn=(3688) +0 27 +cfn=(3690) +calls=1 0 +0 117 +0 7 + +fn=(3710) +0 42 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 +0 22 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 172 +0 2 + +fn=(3722) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3746) +0 4 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(3748) +calls=1 0 +0 48 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3782) SetupEnvironment() +0 11 +cob=(47) +cfi=(220) +cfn=(3786) +calls=1 0 +0 159890 +0 1 +0 2 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 52009 +0 1 +cob=(47) +cfi=(220) +cfn=(4480) +calls=1 0 +0 26 +0 1 +0 5 +cfn=(4482) boost::filesystem::path::imbue(std::locale const&) +calls=1 0 +0 101436 +0 3 +cfn=(4482) +calls=1 0 +0 54 +0 2 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 9 +0 2 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 15 +0 7 + +fn=(4482) +0 24 +cob=(47) +cfi=(220) +cfn=(4486) +calls=2 0 +0 17 +0 2 +0 12 +cob=(47) +cfi=(220) +cfn=(2584) +calls=2 0 +0 45 +0 2 +0 12 +cob=(47) +cfi=(220) +cfn=(1958) +calls=1 0 +0 19 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3786) +calls=1 0 +0 101261 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(1964) +calls=1 0 +0 8 +0 1 +0 1 + +fn=(4506) +0 51 +cfn=(4508) boost::signals2::detail::signal_impl, std::allocator > const&), boost::signals2::optional_last_value, int, std::less, boost::function, std::allocator > const&)>, boost::function, std::allocator > const&)>, boost::signals2::mutex>::nolock_cleanup_connections_from(boost::signals2::detail::garbage_collecting_lock&, bool, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > const&, unsigned int) const +calls=1 0 +0 47 +0 4 + +fn=(4522) +0 30 +cfn=(4523) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_erase(std::_Rb_tree_node, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >*)'2 +calls=1 0 +0 764 +0 8 +cfn=(4523) +calls=2 0 +0 292 +0 52 +cob=(47) +cfi=(220) +cfn=(3210) +calls=7 0 +0 742 +0 7 +0 33 +cob=(47) +cfi=(220) +cfn=(3210) +calls=2 0 +0 192 +0 2 +0 18 +cob=(47) +cfi=(220) +cfn=(3210) +calls=3 0 +0 276 +0 3 +0 26 + +fn=(4523) +0 102 +cfn=(4523) +calls=3 0 +0 314 +0 4 +cfn=(4523) +calls=1 0 +0 22 +0 72 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 424 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 78 + +fn=(4528) +0 40 +cob=(3) +cfi=(168) +cfn=(658) +calls=2 34 +0 280 +0 2 +0 16 +cob=(47) +cfi=(220) +cfn=(2166) +calls=2 0 +0 74 +0 2 +0 18 +cfn=(4536) +calls=2 0 +0 2824 +0 12 +cob=(47) +cfi=(220) +cfn=(3230) +calls=2 0 +0 1085 +0 2 +0 38 +cfn=(3060) +calls=2 0 +0 110 +0 16 +cfn=(3060) +calls=2 0 +0 110 +0 6 +cfn=(4546) +calls=2 0 +0 677 +0 22 +cob=(2) +cfi=(18) +cfn=(4202) +calls=2 0 +0 18 +0 44 +cfn=(2872) +calls=2 0 +0 210 +0 6 +cob=(47) +cfi=(220) +cfn=(4532) +calls=2 0 +0 90 +0 2 +0 10 + +fn=(4546) +0 230 +cob=(47) +cfi=(220) +cfn=(3816) +calls=9 0 +0 866 +0 9 +0 330 +cob=(47) +cfi=(220) +cfn=(3246) +calls=7 0 +0 1813 +0 7 +0 18 + +fn=(4550) +0 60 +cfn=(4552) +calls=2 0 +0 764 +0 50 +cfn=(4558) +calls=2 0 +0 126 +0 10 + +fn=(4642) boost::program_options::detail::common_config_file_iterator::common_config_file_iterator(std::set, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > > > const&, bool) +0 41 +cfn=(4644) std::_Rb_tree_node, std::allocator > >* std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_copy, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_Alloc_node>(std::_Rb_tree_node, std::allocator > > const*, std::_Rb_tree_node_base*, std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_Alloc_node&) +calls=1 0 +0 140 +0 35 +cfn=(4646) +calls=1 0 +0 403 +0 2 +cob=(47) +cfi=(220) +cfn=(4656) +calls=1 0 +0 16 +0 1 +0 13 + +fn=(4658) boost::program_options::detail::common_config_file_iterator::get() +0 322 +cob=(47) +cfi=(220) +cfn=(3210) +calls=9 0 +0 774 +0 9 +0 168 +cfn=(4660) boost::program_options::detail::basic_config_file_iterator::getline(std::__cxx11::basic_string, std::allocator >&) +calls=12 0 +0 13809 +0 68 +cob=(47) +cfi=(220) +cfn=(4706) +calls=11 0 +0 522 +0 11 +0 66 +cfn=(4708) +calls=11 0 +0 2784 +0 247 +cob=(47) +cfi=(220) +cfn=(3210) +calls=9 0 +0 774 +0 9 +0 91 +cob=(3) +cfi=(202) +cfn=(912) +calls=2 225 +0 26 +0 2 +0 56 +cob=(47) +cfi=(220) +cfn=(4706) +calls=11 0 +0 492 +0 11 +0 286 +cfn=(4708) +calls=11 0 +0 2159 +0 66 +cob=(47) +cfi=(220) +cfn=(3230) +calls=11 0 +0 627 +0 11 +0 391 +cfn=(4708) +calls=2 0 +0 348 +0 63 +cfn=(4708) +calls=9 0 +0 2622 +0 40 +cob=(47) +cfi=(220) +cfn=(3210) +calls=7 0 +0 620 +0 7 +0 44 +cfn=(4718) boost::program_options::detail::common_config_file_iterator::allowed_option(std::__cxx11::basic_string, std::allocator > const&) const +calls=11 0 +0 1474 +0 88 +cob=(47) +cfi=(220) +cfn=(4730) +calls=11 0 +0 676 +0 11 +0 101 +cob=(47) +cfi=(220) +cfn=(3210) +calls=7 0 +0 622 +0 7 +0 376 +cob=(47) +cfi=(220) +cfn=(3210) +calls=7 0 +0 602 +0 7 +0 487 +cob=(47) +cfi=(220) +cfn=(3210) +calls=7 0 +0 602 +0 7 +0 142 +cob=(3) +cfi=(202) +cfn=(912) +calls=11 225 +0 159 +0 11 +0 98 +cob=(47) +cfi=(220) +cfn=(2880) +calls=7 0 +0 630 +0 7 +0 49 +cob=(3) +cfi=(202) +cfn=(912) +calls=7 225 +0 77 +0 7 +0 6 +cob=(3) +cfi=(202) +cfn=(912) +calls=2 225 +0 30 +0 2 +0 31 +cfn=(4732) +calls=1 0 +0 178 +0 5 +cfn=(4732) +calls=1 0 +0 443 +0 5 +cfn=(4732) +calls=1 0 +0 327 +0 52 +cob=(3) +cfi=(202) +cfn=(912) +calls=10 225 +0 144 +0 10 +0 56 +cob=(3) +cfi=(202) +cfn=(912) +calls=8 225 +0 94 +0 8 +0 52 +cob=(47) +cfi=(220) +cfn=(2880) +calls=7 0 +0 483 +0 7 +0 61 +cob=(3) +cfi=(202) +cfn=(912) +calls=8 225 +0 94 +0 8 +0 52 +cob=(47) +cfi=(220) +cfn=(2880) +calls=7 0 +0 630 +0 7 +0 61 + +fn=(4660) +0 355 +cob=(47) +cfi=(220) +cfn=(4670) +calls=11 0 +0 4475 +0 11 +0 4 +cob=(47) +cfi=(220) +cfn=(4670) +calls=1 0 +0 4725 +0 1 +0 105 +cob=(47) +cfi=(220) +cfn=(3210) +calls=9 0 +0 774 +0 9 +0 134 +cob=(47) +cfi=(220) +cfn=(4664) +calls=1 0 +0 1135 +0 1 +0 9 +cob=(47) +cfi=(220) +cfn=(4666) +calls=1 0 +0 3 +0 46 +cfn=(4702) boost::program_options::to_internal(std::__cxx11::basic_string, std::allocator > const&) +calls=11 0 +0 1561 +0 33 +cob=(47) +cfi=(220) +cfn=(4532) +calls=11 0 +0 351 +0 11 +0 66 + +fn=(4702) +0 398 +cob=(47) +cfi=(220) +cfn=(2880) +calls=9 0 +0 915 +0 9 +0 63 +cob=(3) +cfi=(202) +cfn=(912) +calls=9 225 +0 100 +0 9 +0 6 +cob=(3) +cfi=(202) +cfn=(912) +calls=2 225 +0 26 +0 2 +0 33 + +fn=(4718) +0 352 +cob=(3) +cfi=(237) +cfn=(2328) +calls=11 59 +0 99 +0 11 +0 440 +cob=(47) +cfi=(220) +cfn=(4722) +calls=11 0 +0 110 +0 11 +0 55 +cob=(47) +cfi=(220) +cfn=(4726) +calls=11 0 +0 275 +0 11 +0 110 + +fn=(4866) GetArg(std::__cxx11::basic_string, std::allocator > const&, long) +0 85 +cfn=(4524) +calls=5 0 +0 1078 +0 50 +cob=(3) +cfi=(237) +cfn=(2328) +calls=3 59 +0 75 +0 3 +0 36 +cob=(47) +cfi=(220) +cfn=(3072) +calls=1 0 +0 56 +0 1 +0 4 +cfn=(4868) +calls=1 0 +0 157 +0 63 + +fn=(4886) +0 143 + +fn=(4940) +0 19 +cob=(47) +cfi=(220) +cfn=(1958) +calls=1 0 +0 19 +0 1 +0 4 +cfn=(4942) LockedPageManager::LockedPageManager() +calls=1 0 +0 115 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(1964) +calls=1 0 +0 8 +0 1 +0 1 + +fn=(4944) +0 27 +cob=(5) +cfi=(180) +cfn=(714) +calls=3 64 +0 87 +0 3 +0 21 +cob=(5) +cfi=(182) +cfn=(724) +calls=3 356 +0 57 +0 3 +0 21 +cob=(5) +cfi=(338) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_broadcast.c +cfn=(4948) pthread_cond_broadcast@@GLIBC_2.3.2 +calls=3 40 +0 66 +0 3 + +fn=(4956) +0 28 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 28 +cob=(47) +cfi=(220) +cfn=(3068) +calls=2 0 +0 32 +0 2 +0 36 + +fn=(5018) +0 36 +cfn=(4928) +calls=1 0 +0 92 +0 28 +cfn=(4928) +calls=1 0 +0 91 +0 13 +cfn=(5020) +calls=1 0 +0 77413 +0 7 +cfn=(4928) +calls=1 0 +0 92 +0 18 +cfn=(5022) +calls=1 0 +0 384262 +0 15 + +fn=(5980) +0 63 +cob=(47) +cfi=(220) +cfn=(6020) +calls=3 0 +0 880 +0 3 +0 48 +cfn=(5982) +calls=3 0 +0 5381 +0 21 +cfn=(6016) +calls=3 0 +0 240 +0 45 + +fn=(6084) std::locale::locale > > >(std::locale const&, boost::date_time::time_facet > >*) +0 56 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(6088) +calls=4 0 +0 6442 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(2228) +calls=4 0 +0 5987 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(4236) +calls=4 0 +0 360 +0 4 +0 48 + +fn=(6124) boost::date_time::time_facet > >::put(std::ostreambuf_iterator >, std::ios_base&, char, boost::posix_time::ptime const&) const +0 176 +cfn=(3060) +calls=4 0 +0 500 +0 48 +cfn=(6126) void boost::algorithm::find_format_all, std::allocator >, boost::algorithm::detail::first_finderF, boost::algorithm::detail::const_formatF > >(std::__cxx11::basic_string, std::allocator >&, boost::algorithm::detail::first_finderF, boost::algorithm::detail::const_formatF >) +calls=4 0 +0 1060 +0 48 +cfn=(6126) +calls=4 0 +0 1060 +0 36 +cob=(3) +cfi=(169) +cfn=(662) +calls=4 42 +0 80 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(4726) +calls=4 0 +0 1632 +0 4 +0 20 +cob=(3) +cfi=(169) +cfn=(662) +calls=4 42 +0 64 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(4726) +calls=4 0 +0 1506 +0 4 +0 20 +cob=(3) +cfi=(169) +cfn=(662) +calls=4 42 +0 64 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(4726) +calls=4 0 +0 1632 +0 4 +0 20 +cob=(3) +cfi=(169) +cfn=(662) +calls=4 42 +0 64 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(4726) +calls=4 0 +0 1632 +0 4 +0 20 +cob=(3) +cfi=(169) +cfn=(662) +calls=4 42 +0 64 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(4726) +calls=4 0 +0 1632 +0 4 +0 20 +cob=(3) +cfi=(169) +cfn=(662) +calls=4 42 +0 64 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(4726) +calls=4 0 +0 1632 +0 4 +0 20 +cob=(3) +cfi=(169) +cfn=(662) +calls=4 42 +0 80 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(4726) +calls=4 0 +0 1632 +0 4 +0 20 +cob=(3) +cfi=(169) +cfn=(662) +calls=4 42 +0 80 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(4726) +calls=4 0 +0 1632 +0 4 +0 44 +cfn=(3060) +calls=4 0 +0 500 +0 8 +cfn=(6128) +calls=4 0 +0 524 +0 28 +cfn=(6132) +calls=4 0 +0 1536 +0 12 +cfn=(6134) boost::date_time::counted_time_system >::get_time_of_day(boost::date_time::counted_time_rep const&) +calls=4 0 +0 120 +0 240 +cfn=(6136) +calls=4 0 +0 24633 +0 32 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 28 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 16 + +fn=(6172) +0 60 +cfn=(6174) +calls=4 0 +0 2240 +0 32 +cob=(47) +cfi=(220) +cfn=(4768) +calls=4 0 +0 360 +0 4 + +fn=(6216) InterruptHTTPServer() +0 10 +cfn=(6218) +calls=1 0 +0 48 +0 13 + +fn=(6226) InterruptTorControl() +0 12 + +fn=(6246) boost::this_thread::disable_interruption::~disable_interruption() +0 4 +cfn=(6232) +calls=1 0 +0 36 +0 4 + +fn=(6254) +0 12 +cfn=(6038) +calls=1 0 +0 28 +0 9 +cob=(5) +cfi=(366) /build/glibc-sMfBJT/glibc-2.31/nptl/../nptl/pthread_mutex_trylock.c +cfn=(6270) pthread_mutex_trylock +calls=1 36 +0 35 +0 1 +0 16 +cob=(47) +cfi=(220) +cfn=(1958) +calls=1 0 +0 19 +0 1 +0 4 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(1964) +calls=1 0 +0 8 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(6042) +calls=1 0 +0 2181 +0 1 +0 4 +cfn=(6256) void tinyformat::format(std::ostream&, char const*, char const (&) [16]) +calls=1 0 +0 1173 +0 4 +cob=(47) +cfi=(220) +cfn=(6170) +calls=1 0 +0 225 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(6262) +calls=1 0 +0 909 +0 1 +0 2 +cfn=(6044) +calls=1 0 +0 28775 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 3 +cfn=(6272) +calls=1 0 +0 24 +0 3 +cfn=(6278) +calls=1 0 +0 101 +0 1 +cfn=(6280) StopHTTPRPC() +calls=1 0 +0 124 +0 1 +cfn=(6284) +calls=1 0 +0 1458 +0 1 +cfn=(6286) StopRPC() +calls=1 0 +0 464 +0 1 +cfn=(6302) +calls=1 0 +0 1095 +0 6 +cfn=(6344) +calls=1 0 +0 34 +0 1 +cfn=(6346) StopNode() +calls=1 0 +0 28816 +0 1 +cfn=(6350) +calls=1 0 +0 55237 +0 1 +cfn=(6460) DumpBudgets() +calls=1 0 +0 35397 +0 1 +cfn=(6502) DumpGridnodePayments() +calls=1 0 +0 31330 +0 1 +cfn=(6520) GetNodeSignals() +calls=1 0 +0 11 +0 2 +cfn=(6522) +calls=1 0 +0 506 +0 7 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 35 +0 1 +0 29 +cfn=(6396) +calls=1 0 +0 52 +0 5 +cfn=(6524) GetPidFile() +calls=1 0 +0 1182 +0 3 +cfn=(6526) +calls=1 0 +0 99 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 1 +cfn=(6534) +calls=1 0 +0 1131 +0 2 +cfn=(6396) +calls=1 0 +0 52 +0 1 + +fn=(6256) +0 32 +cfn=(6258) +calls=1 0 +0 484 +0 112 +cob=(47) +cfi=(220) +cfn=(5986) +calls=1 0 +0 489 +0 1 +0 5 +cfn=(6022) +calls=1 0 +0 32 +0 18 + +fn=(6280) +0 11 +cfn=(6038) +calls=1 0 +0 29 +0 7 +cfn=(2876) +calls=1 0 +0 36 +0 3 +cfn=(6282) +calls=1 0 +0 25 +0 13 + +fn=(6290) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::operator()() +0 21 +cfn=(6292) +calls=1 0 +0 43 +0 14 +cfn=(6296) +calls=1 0 +0 33 +0 2 +cfn=(4504) +calls=1 0 +0 34 +0 19 +cfn=(6298) +calls=1 0 +0 26 +0 11 +cfn=(6298) +calls=1 0 +0 26 +0 23 +cfn=(6300) +calls=1 0 +0 34 +0 4 +cfn=(2706) +calls=1 0 +0 14 +0 32 +cfn=(6294) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::nolock_cleanup_connections_from(boost::signals2::detail::garbage_collecting_lock&, bool, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > const&, unsigned int) const +calls=1 0 +0 47 +0 4 + +fn=(6294) +0 47 + +fn=(6348) MapPort(bool) +0 24 + +fn=(6396) +0 80 +cob=(5) +cfi=(182) +cfn=(724) +calls=8 356 +0 248 +0 8 +0 80 + +fn=(6400) +0 30 +cfn=(6402) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=2 0 +0 32 +0 14 +cfn=(6370) +calls=2 0 +0 138 +0 30 + +fn=(6402) +0 96 + +fn=(6446) +0 16 +cfn=(3508) +calls=1 0 +0 641 +0 10 +cfn=(6448) +calls=1 0 +0 159 +0 4 +cfn=(4886) +calls=1 0 +0 13 +0 2 +cfn=(4886) +calls=1 0 +0 13 +0 5 +cfn=(6450) +calls=1 0 +0 349 +0 10 +cfn=(6380) +calls=1 0 +0 62 +0 4 +cfn=(6384) +calls=1 0 +0 1589 +0 7 +cfn=(6448) +calls=1 0 +0 85 +0 5 +cfn=(6398) +calls=1 0 +0 50 +0 3 +cfn=(6452) +calls=1 0 +0 112 +0 3 +cfn=(6452) +calls=1 0 +0 112 +0 3 +cfn=(6448) +calls=1 0 +0 85 +0 12 +cfn=(6450) +calls=1 0 +0 96 +0 5 +cfn=(6454) void Serialize, std::allocator > >(CDataStream&, std::map, std::allocator > > const&, int, int) +calls=1 0 +0 479 +0 3 +cfn=(6448) +calls=1 0 +0 85 +0 36 +cfn=(3274) +calls=1 0 +0 19 +0 9 +cfn=(3276) +calls=1 0 +0 57 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 2 +cfn=(3290) +calls=1 0 +0 20 +0 4 +cfn=(3276) +calls=1 0 +0 57 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 6 +cfn=(6450) +calls=1 0 +0 609 +0 4 +cob=(3) +cfi=(274) +cfn=(3532) +calls=1 85 +0 496 +0 1 +0 12 +cob=(3) +cfi=(362) +cfn=(6206) +calls=1 31 +0 648 +0 1 +0 4 +cob=(3) +cfi=(293) +cfn=(3604) +calls=1 34 +0 671 +0 1 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 5 +cfn=(6410) +calls=1 0 +0 52 +0 3 +cfn=(6412) +calls=1 0 +0 5349 +0 4 +cfn=(6444) +calls=1 0 +0 51 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 8 +cfn=(2998) +calls=1 0 +0 64 +0 2 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 14 +cfn=(6396) +calls=1 0 +0 52 +0 7 +cfn=(6450) +calls=1 0 +0 321 +0 4 + +fn=(6458) +0 24 +cfn=(6408) +calls=2 0 +0 36 +0 6 +cfn=(6406) +calls=2 0 +0 40 +0 6 +cfn=(6404) +calls=2 0 +0 32 +0 6 +cfn=(6402) +calls=2 0 +0 32 +0 6 +cfn=(6402) +calls=2 0 +0 32 +0 20 +cob=(5) +cfi=(370) +cfn=(6336) +calls=2 27 +0 24 +0 2 +0 14 +cob=(5) +cfi=(370) +cfn=(6336) +calls=2 27 +0 24 +0 2 +0 24 + +fn=(6466) +0 60 + +fn=(6602) +0 10 +cfn=(3692) +calls=1 0 +0 16 +0 3 +cfn=(6514) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 22 +0 8 +cfn=(6510) +calls=1 0 +0 18 + +fn=(6642) +0 12 +cfn=(6644) +calls=1 0 +0 25 +0 9 +cfn=(6648) +calls=1 0 +0 762 +0 3 +cfn=(6670) +calls=1 0 +0 9 +0 3 + +fn=(6668) +0 18 +cob=(3) +cfi=(176) +cfn=(1204) +calls=2 3087 +0 210 +0 2 + +fn=(6672) +0 19 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 10 + +fn=(6678) +0 22 + +fn=(6688) +0 10 + +fn=(6716) +0 11 +cfn=(6718) +calls=1 0 +0 16 + +fn=(6720) +0 11 +cfn=(6722) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +calls=1 0 +0 18 + +fn=(6724) +0 20 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 132 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 20 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 104 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 31 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 636 +0 6 +0 26 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 + +fn=(6770) +0 308 +cob=(47) +cfi=(220) +cfn=(4768) +calls=22 0 +0 2420 +0 22 + +fn=(6780) +0 33 +cob=(47) +cfi=(220) +cfn=(4768) +calls=3 0 +0 330 +0 3 + +fn=(6810) +0 29 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(6770) +calls=1 0 +0 125 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 4 +cfn=(6812) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 1 + +fn=(6814) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6832) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6880) +0 26 +cfn=(2707) +calls=2 0 +0 586 +0 8 +cfn=(2707) +calls=2 0 +0 1754 +0 16 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6920) +0 29 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 +0 3 +cfn=(6770) +calls=1 0 +0 125 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 4 +cfn=(6922) boost::detail::sp_counted_impl_p, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > >::dispose() +calls=1 0 +0 172 +0 2 +cfn=(6786) +calls=1 0 +0 140 +0 1 + +fn=(6924) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6930) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6936) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6954) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6958) +0 14 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6980) std::_Rb_tree > >, std::_Select1st > > >, std::less, std::allocator > > > >::_M_erase(std::_Rb_tree_node > > >*) +0 16 + +fn=(6994) +0 16 + +fn=(7006) +0 44 + +fn=(7060) +0 10 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 10 + +fn=(7098) +0 13 +cfn=(2707) +calls=1 0 +0 273 +0 4 +cfn=(2707) +calls=1 0 +0 320 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7128) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7162) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7164) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7174) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7178) +0 20 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 293 +0 13 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(4568) +0 66 + +fn=(2144) +0 12 + +fn=(2748) +0 32 + +fn=(2762) +0 46 + +fn=(2764) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 268 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(2766) +calls=1 0 +0 16 +0 2 +cfn=(2768) +calls=1 0 +0 23 +0 10 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cfn=(2740) +calls=1 0 +0 85 +0 11 + +fn=(2786) +0 128 + +fn=(2828) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(2906) +0 3 + +fn=(2920) +0 7850 +cob=(5) +cfi=(262) +cfn=(2924) +calls=785 25 +0 3140 +0 785 +0 3140 +cfn=(2926) CRYPTO_THREADID_set_pointer +calls=785 0 +0 3140 + +fn=(2926) +0 3140 + +fn=(2950) +0 40 +cfn=(2900) +calls=5 0 +0 25 +0 60 +cfn=(2952) ssleay_rand_add +calls=5 0 +0 14969 + +fn=(2952) +0 20 +cfn=(2954) ssleay_rand_add.part.0 +calls=5 0 +0 14949 + +fn=(2954) +0 92 +cfn=(2920) +calls=4 0 +0 92 +0 20 +cfn=(2918) +calls=4 0 +0 80 +0 12 +cfn=(2956) +calls=4 0 +0 116 +0 40 +cfn=(2918) +calls=4 0 +0 80 +0 181 +cfn=(2916) +calls=4 0 +0 24 +0 57 +cfn=(2960) +calls=5 0 +0 15 +0 4 +cfn=(2960) +calls=1 0 +0 3 +0 24 +cfn=(2962) +calls=6 0 +0 1123 +0 24 +cfn=(2976) +calls=6 0 +0 372 +0 72 +cfn=(2976) +calls=6 0 +0 406 +0 24 +cfn=(2976) +calls=6 0 +0 1448 +0 24 +cfn=(2986) +calls=6 0 +0 7928 +0 670 +cfn=(2994) +calls=5 0 +0 1055 +0 139 +cfn=(2918) +calls=1 0 +0 80 +0 31 +cfn=(2976) +calls=6 0 +0 406 +0 54 +cfn=(2918) +calls=1 0 +0 75 +0 6 +cfn=(2918) +calls=1 0 +0 75 +0 2 +cfn=(2916) +calls=1 0 +0 6 +0 8 +cfn=(2918) +calls=1 0 +0 80 +0 1 + +fn=(2974) +0 18300 + +fn=(3016) +0 32 + +fn=(3028) +0 32 + +fn=(3038) +0 7 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3052) +0 48 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 404 +0 2 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 404 +0 2 +0 44 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 330 +0 2 +0 22 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 102 +0 2 +0 10 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 330 +0 2 +0 26 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 24 +cfn=(3054) +calls=2 0 +0 32 +0 4 +cfn=(3056) +calls=2 0 +0 46 +0 18 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 404 +0 2 +0 8 +cob=(5) +cfi=(206) +cfn=(1262) +calls=2 53 +0 60 +0 2 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=2 0 +0 110 +0 2 +0 40 + +fn=(3088) +0 23 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 328 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 328 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3090) boost::thread::thread() +calls=1 0 +0 4 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3102) +0 32 + +fn=(3110) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +0 46 + +fn=(3114) +0 32 + +fn=(3128) boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +0 86 + +fn=(3142) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3168) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3172) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3260) void std::vector >::emplace_back(unsigned char&&) +0 304 +cfn=(3262) +calls=16 0 +0 2724 + +fn=(3264) CScript::operator<<(std::vector > const&) +0 320 +cfn=(3268) +calls=16 0 +0 3564 +0 192 +cfn=(3266) std::vector >::_M_insert_rval(__gnu_cxx::__normal_iterator > >, unsigned char&&) +calls=16 0 +0 2268 +0 16 + +fn=(3276) +0 4617 +cob=(3) +cfi=(202) +cfn=(912) +calls=85 225 +0 1102 +0 85 +0 590 +cfn=(3284) +calls=30 0 +0 101430 +0 676 + +fn=(3308) +0 50 +cfn=(3310) sph_blake512_addbits_and_close +calls=10 0 +0 27690 + +fn=(3322) +0 55 +cfn=(3324) +calls=11 0 +0 38698 +0 33 +cfn=(3314) +calls=11 0 +0 220 + +fn=(5906) boost::filesystem::detail::dot_path() +0 13 +cob=(47) +cfi=(220) +cfn=(1958) +calls=1 0 +0 19 +0 1 +0 11 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(1964) +calls=1 0 +0 8 +0 1 +0 3 + +fn=(5908) boost::filesystem::path::compare(boost::filesystem::path const&) const +0 108 +cfn=(5910) boost::filesystem::path::begin() const +calls=4 0 +0 840 +0 36 +cfn=(5910) +calls=4 0 +0 1060 +0 20 +cfn=(5914) +calls=4 0 +0 364 +0 108 + +fn=(3364) +0 400 + +fn=(3372) +0 50 +cfn=(3374) +calls=10 0 +0 24130 +0 30 +cfn=(3364) +calls=10 0 +0 200 + +fn=(3382) +0 11344 +cfn=(3384) +calls=724 0 +0 9412 +0 5792 +cfn=(3386) CAddress::CAddress(CService, unsigned long) +calls=724 0 +0 12308 +0 1448 +cfn=(3388) +calls=724 0 +0 15204 +0 2172 +cfn=(3390) +calls=724 0 +0 4347335 +0 4488 +cfn=(3394) +calls=36 0 +0 24511 +0 138 + +fn=(3386) +0 12308 + +fn=(3422) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 44 +cfn=(2832) +calls=1 0 +0 110 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3450) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3466) +0 8 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 74 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 76 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3492) +0 7 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3508) +0 190 +cfn=(3510) +calls=19 0 +0 1197 +0 171 +cfn=(3512) boost::date_time::microsec_clock::create_time(tm* (*)(long const*, tm*)) +calls=19 0 +0 17601 +0 95 +cfn=(3628) boost::date_time::counted_time_system >::subtract_times(boost::date_time::counted_time_rep const&, boost::date_time::counted_time_rep const&) +calls=19 0 +0 570 +0 323 + +fn=(3512) +0 260 +cob=(3) +cfi=(117) +cfn=(3484) +calls=20 32 +0 160 +0 20 +0 120 +cfn=(3514) +calls=20 0 +0 15568 +0 1980 + +fn=(6524) +0 21 +cfn=(2876) +calls=1 0 +0 55 +0 5 +cfn=(2876) +calls=1 0 +0 57 +0 5 +cfn=(4566) +calls=1 0 +0 282 +0 7 +cfn=(3060) +calls=1 0 +0 55 +0 13 +cfn=(4568) +calls=1 0 +0 33 +0 20 +cfn=(4526) +calls=1 0 +0 113 +0 6 +cfn=(3060) +calls=1 0 +0 125 +0 3 +cfn=(4546) +calls=1 0 +0 346 +0 3 +cob=(47) +cfi=(220) +cfn=(4532) +calls=1 0 +0 29 +0 1 +0 3 + +fn=(6536) +0 34 +cfn=(6292) +calls=2 0 +0 86 +0 14 +cfn=(6296) +calls=2 0 +0 66 +0 26 +cfn=(2706) +calls=2 0 +0 28 +0 22 + +fn=(3638) +0 21 + +fn=(3642) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 512 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 6 +cfn=(3644) +calls=1 0 +0 1479 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3720) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 + +fn=(3724) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(4500) +0 14 +cfn=(4502) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex> > > > > >::_M_get_insert_unique_pos(std::pair > const&) +calls=1 0 +0 24 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 10 +cob=(47) +cfi=(220) +cfn=(3068) +calls=1 0 +0 16 +0 1 +0 16 + +fn=(4502) +0 24 + +fn=(4516) +0 21 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cob=(5) +cfi=(257) +cfn=(2854) +calls=1 25 +0 4 +0 1 +0 6 +cob=(5) +cfi=(258) +cfn=(2858) +calls=1 29 +0 11 +0 1 +0 6 +cob=(5) +cfi=(259) +cfn=(2862) +calls=1 28 +0 17 +0 1 +0 3 +cob=(5) +cfi=(260) +cfn=(2866) +calls=1 24 +0 3 +0 1 +0 7 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 16 + +fn=(4562) +0 18 +cfn=(4564) +calls=1 0 +0 1167 +0 3 +cob=(47) +cfi=(220) +cfn=(2566) +calls=1 0 +0 98 +0 1 +0 16 +cob=(47) +cfi=(220) +cfn=(2572) +calls=1 0 +0 990 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(4578) +calls=1 0 +0 3352 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(2572) +calls=1 0 +0 990 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(4600) +calls=1 0 +0 4688 +0 1 +0 7 +cob=(47) +cfi=(220) +cfn=(4634) +calls=1 0 +0 7 +0 1 +0 9 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 15 +cfn=(2872) +calls=1 0 +0 78 +0 5 +cfn=(4636) std::pair, std::allocator > >, bool> std::_Rb_tree, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::_Identity, std::allocator > >, std::less, std::allocator > >, std::allocator, std::allocator > > >::_M_insert_unique, std::allocator > >(std::__cxx11::basic_string, std::allocator >&&) +calls=1 0 +0 166 +0 10 +cfn=(4640) boost::program_options::detail::basic_config_file_iterator::basic_config_file_iterator(std::istream&, std::set, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > > > const&, bool) +calls=1 0 +0 9473 +0 76 +cfn=(4760) +calls=1 0 +0 18 +0 3 +cfn=(4760) +calls=1 0 +0 18 +0 21 +cfn=(2706) +calls=1 0 +0 138 +0 8 +cfn=(4760) +calls=1 0 +0 138 +0 3 +cfn=(4760) +calls=1 0 +0 138 +0 24 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 17 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cfn=(4770) ClearDatadirCache() +calls=1 0 +0 86 +0 3 +cfn=(4760) +calls=1 0 +0 138 +0 8 +cob=(47) +cfi=(220) +cfn=(4774) +calls=1 0 +0 4731 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(4802) +calls=1 0 +0 19 +0 1 +0 4 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 9 +0 7 +cob=(47) +cfi=(220) +cfn=(4806) +calls=1 0 +0 1881 +0 1 +0 44 +cfn=(2872) +calls=11 0 +0 858 +0 44 +cob=(47) +cfi=(220) +cfn=(3816) +calls=11 0 +0 500 +0 11 +0 275 +cfn=(3060) +calls=11 0 +0 1061 +0 66 +cfn=(4736) +calls=11 0 +0 286 +0 44 +cfn=(4524) +calls=11 0 +0 1608 +0 327 +cob=(3) +cfi=(237) +cfn=(2328) +calls=20 59 +0 495 +0 20 +0 220 +cob=(47) +cfi=(220) +cfn=(3072) +calls=8 0 +0 418 +0 8 +0 45 +cfn=(3060) +calls=2 0 +0 250 +0 42 +cob=(47) +cfi=(220) +cfn=(3210) +calls=7 0 +0 602 +0 7 +0 55 +cfn=(4658) +calls=11 0 +0 28031 +0 20 +cfn=(4748) std::_Rb_tree_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_emplace_hint_unique, std::allocator > const&>, std::tuple<> >(std::_Rb_tree_const_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::piecewise_construct_t const&, std::tuple, std::allocator > const&>&&, std::tuple<>&&) +calls=1 0 +0 412 +0 40 +cfn=(4748) +calls=5 0 +0 2524 +0 60 +cfn=(4732) +calls=9 0 +0 2773 +0 27 +cfn=(4738) +calls=6 0 +0 3823 +0 18 +cob=(47) +cfi=(220) +cfn=(4730) +calls=6 0 +0 645 +0 6 +0 39 + +fn=(4566) +0 45 +cfn=(4524) +calls=3 0 +0 376 +0 57 +cfn=(3060) +calls=3 0 +0 165 +0 3 + +fn=(4636) +0 14 +cfn=(4638) +calls=1 0 +0 34 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 17 +cob=(47) +cfi=(220) +cfn=(3068) +calls=1 0 +0 16 +0 1 +0 19 + +fn=(4734) +0 3864 +cob=(47) +cfi=(220) +cfn=(2880) +calls=7 0 +0 630 +0 7 +0 49 +cob=(3) +cfi=(202) +cfn=(912) +calls=7 225 +0 77 +0 7 +0 315 +cob=(3) +cfi=(202) +cfn=(912) +calls=105 225 +0 1535 +0 105 +0 336 + +fn=(4744) +0 34 + +fn=(4762) +0 10 + +fn=(4828) +0 17 + +fn=(4830) +0 14 +cfn=(2872) +calls=1 0 +0 82 +0 3 +cfn=(4832) +calls=1 0 +0 1306 +0 13 + +fn=(4836) SetupNetworking() +0 11 + +fn=(4876) RaiseFileDescriptorLimit(int) +0 12 +cob=(3) +cfi=(132) +cfn=(398) +calls=1 37 +0 10 +0 1 +0 14 + +fn=(4882) +0 15 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 21 +cfn=(4750) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_hint_unique_pos(std::_Rb_tree_const_iterator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 159 +0 9 +cob=(47) +cfi=(220) +cfn=(3068) +calls=1 0 +0 75 +0 1 +0 15 + +fn=(4890) +0 9 +cob=(3) +cfi=(250) +cfn=(4872) +calls=1 105 +0 105 +0 1 +0 5 + +fn=(4916) +0 305100 + +fn=(4918) +0 3330 +cfn=(4916) +calls=37 0 +0 125430 +0 2971 + +fn=(4938) +0 99 +cob=(5) +cfi=(180) +cfn=(714) +calls=3 64 +0 87 +0 3 +0 45 +cob=(5) +cfi=(182) +cfn=(724) +calls=3 356 +0 57 +0 3 +0 75 + +fn=(4972) ECCVerifyHandle::ECCVerifyHandle() +0 12 +cfn=(4904) +calls=1 0 +0 62123551 +0 11 + +fn=(4980) +0 57 +cfn=(4922) +calls=3 0 +0 504 +0 12 +cfn=(4924) +calls=3 0 +0 648 +0 12 +cfn=(4922) +calls=3 0 +0 504 +0 12 +cfn=(4924) +calls=3 0 +0 648 +0 27 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 12 +cfn=(4924) +calls=3 0 +0 648 +0 30 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 12 +cfn=(4924) +calls=3 0 +0 648 +0 39 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 12 +cfn=(4924) +calls=3 0 +0 648 +0 5091 +cfn=(4924) +calls=3 0 +0 648 +0 10140 +cfn=(4924) +calls=3 0 +0 648 +0 20238 +cfn=(4924) +calls=3 0 +0 648 +0 40434 +cfn=(4924) +calls=3 0 +0 648 +0 20238 +cfn=(4924) +calls=3 0 +0 648 +0 27 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 15 +cfn=(4924) +calls=3 0 +0 648 +0 10599 +cfn=(4924) +calls=3 0 +0 648 +0 2313 +cfn=(4924) +calls=3 0 +0 648 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 12 +cfn=(4924) +calls=3 0 +0 648 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 9 +cfn=(4922) +calls=3 0 +0 504 +0 12 +cfn=(4924) +calls=3 0 +0 648 +0 33 + +fn=(4982) +0 2867550 + +fn=(5042) secp256k1_ge_set_xo_var +0 24 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 19 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 4 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 9 +cfn=(4922) +calls=1 0 +0 168 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 10 +cfn=(4922) +calls=1 0 +0 168 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 10 +cfn=(4922) +calls=1 0 +0 168 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 1698 +cfn=(4924) +calls=1 0 +0 216 +0 3380 +cfn=(4924) +calls=1 0 +0 216 +0 6746 +cfn=(4924) +calls=1 0 +0 216 +0 13476 +cfn=(4924) +calls=1 0 +0 216 +0 6744 +cfn=(4924) +calls=1 0 +0 216 +0 9 +cfn=(4922) +calls=1 0 +0 168 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 5 +cfn=(4924) +calls=1 0 +0 216 +0 3529 +cfn=(4924) +calls=1 0 +0 216 +0 923 +cfn=(4924) +calls=1 0 +0 216 +0 3 +cfn=(4922) +calls=1 0 +0 168 +0 5 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4922) +calls=1 0 +0 168 +0 14 +cfn=(4936) +calls=1 0 +0 41 +0 15 +cfn=(5008) secp256k1_fe_normalize_var +calls=1 0 +0 56 +0 6 + +fn=(5054) +0 52 +cfn=(5030) +calls=1 0 +0 98792 +0 4 +cfn=(5026) +calls=1 0 +0 115 +0 4 +cfn=(5028) +calls=1 0 +0 235 +0 4 +cfn=(5026) +calls=1 0 +0 115 +0 3 +cfn=(5028) +calls=1 0 +0 235 +0 30 +cfn=(5056) +calls=1 0 +0 568210 +0 7 +cfn=(4910) +calls=1 0 +0 84 +0 4 +cfn=(5040) secp256k1_fe_set_b32 +calls=1 0 +0 90 +0 3 +cfn=(5062) secp256k1_gej_eq_x_var +calls=1 0 +0 499 +0 4 + +fn=(5064) glibc_sanity_test() +0 26 +cfn=(5066) +calls=1 0 +0 9762 +0 5 + +fn=(5936) bool boost::interprocess::ipcdetail::try_based_timed_lock(boost::interprocess::file_lock&, boost::posix_time::ptime const&) +0 22 +cfn=(5938) +calls=1 0 +0 20 +0 4 +cfn=(5940) boost::date_time::counted_time_rep::counted_time_rep(boost::gregorian::date const&, boost::posix_time::time_duration const&) +calls=1 0 +0 36 +0 11 +cob=(5) +cfi=(348) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/pt-fcntl.c +cfn=(5944) fcntl@GLIBC_2.2.5 +calls=1 34 +0 1074 +0 1 +0 16 +cob=(5) +cfi=(262) +cfn=(2924) +calls=1 25 +0 4 +0 1 +0 17 +cob=(3) +cfi=(117) +cfn=(3484) +calls=1 32 +0 8 +0 1 +0 13803 +cob=(3) +cfi=(117) +cfn=(3484) +calls=4601 32 +0 36808 +0 4601 +0 27612 +cob=(3) +cfi=(269) +cfn=(3518) +calls=4602 25 +0 1656720 +0 4602 +0 450987 +cob=(5) +cfi=(348) +cfn=(5944) +calls=4601 34 +0 285262 +0 4601 +0 102265 +cob=(3) +cfi=(261) +cfn=(5960) +calls=2624 78 +0 15744 +0 2624 +0 48701 +cob=(3) +cfi=(239) +cfn=(2792) +calls=1 32 +0 45 +0 1 +0 12 +cob=(3) +cfi=(243) +cfn=(2800) +calls=1 31 +0 21 +0 1 +0 2054 +cob=(3) +cfi=(243) +cfn=(2800) +calls=683 31 +0 14343 +0 683 +0 13345 +cob=(3) +cfi=(239) +cfn=(2792) +calls=1944 32 +0 87480 +0 1944 +0 25272 +cob=(3) +cfi=(352) +cfn=(5964) +calls=1944 26 +0 104976 +0 1944 +0 3890 + +fn=(5940) +0 36 + +fn=(6130) +0 1008 + +fn=(6134) +0 120 + +fn=(6292) +0 60 +cob=(5) +cfi=(180) +cfn=(714) +calls=10 64 +0 290 +0 10 +0 70 + +fn=(6308) boost::chrono::steady_clock::now() +0 8 +cob=(3) +cfi=(243) +cfn=(2800) +calls=1 31 +0 21 +0 1 +0 7 + +fn=(6346) +0 12 +cfn=(6218) +calls=1 0 +0 28763 +0 2 +cfn=(6348) +calls=1 0 +0 24 +0 15 + +fn=(6356) +0 51 +cob=(3) +cfi=(207) +cfn=(1494) +calls=3 33 +0 33 +0 3 +0 63 + +fn=(6370) +0 209 +cfn=(6372) +calls=19 0 +0 921 +0 190 + +fn=(6454) +0 15 +cfn=(6448) +calls=1 0 +0 448 +0 16 + +fn=(6470) +0 108 + +fn=(6492) +0 32 +cfn=(6448) +calls=2 0 +0 170 +0 28 + +fn=(6502) +0 12 +cfn=(3508) +calls=1 0 +0 641 +0 3 +cfn=(6504) +calls=1 0 +0 869 +0 22 +cfn=(6218) +calls=1 0 +0 52 +0 5 +cfn=(6506) +calls=1 0 +0 16396 +0 8 +cfn=(6218) +calls=1 0 +0 52 +0 3 +cfn=(6518) +calls=1 0 +0 12332 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cfn=(6038) +calls=1 0 +0 29 +0 5 +cfn=(3692) +calls=1 0 +0 16 +0 3 +cfn=(6514) +calls=1 0 +0 22 +0 3 +cfn=(6510) +calls=1 0 +0 18 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 9 + +fn=(6512) +0 19 +cfn=(6514) +calls=1 0 +0 22 +0 7 +cfn=(6370) +calls=1 0 +0 72 +0 21 + +fn=(6594) +0 11 +cfn=(6596) +calls=1 0 +0 149 + +fn=(6630) +0 22 +cfn=(6632) +calls=2 0 +0 44 + +fn=(6650) +0 35 +cfn=(6658) +calls=1 0 +0 542 +0 10 +cfn=(6652) +calls=1 0 +0 133 +0 2 + +fn=(6664) +0 2 + +fn=(6676) +0 22 + +fn=(6680) +0 20 +cfn=(3504) +calls=1 0 +0 22 +0 2 +cfn=(3502) +calls=1 0 +0 22 +0 12 +cfn=(3502) +calls=1 0 +0 22 +0 2 +cfn=(3504) +calls=1 0 +0 22 +0 2 +cfn=(3502) +calls=1 0 +0 22 +0 8 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 14 + +fn=(6698) +0 14 + +fn=(6704) +0 33 + +fn=(6712) +0 18 + +fn=(6722) +0 18 + +fn=(6726) +0 18 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 156 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 20 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 31 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 636 +0 6 +0 26 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 + +fn=(6742) +0 11 +cfn=(6744) +calls=1 0 +0 18 + +fn=(6748) boost::thread::detach() +0 32 + +fn=(6772) +0 242 +cob=(47) +cfi=(220) +cfn=(4768) +calls=22 0 +0 2420 +0 22 + +fn=(6794) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6804) +0 44 +cob=(47) +cfi=(220) +cfn=(4768) +calls=4 0 +0 440 +0 4 + +fn=(6828) +0 12 +cfn=(3120) +calls=1 0 +0 16 +0 2 +cfn=(3122) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6844) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6846) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6872) +0 11 +cfn=(6874) +calls=1 0 +0 23472 + +fn=(6916) +0 22 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6918) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6928) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6938) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6982) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 16 + +fn=(6988) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +0 20 + +fn=(6998) +0 13 + +fn=(7032) +0 11 +cfn=(7034) std::_Rb_tree > >, std::_Select1st > > >, std::less, std::allocator > > > >::_M_erase(std::_Rb_tree_node > > >*) +calls=1 0 +0 15 + +fn=(7040) +0 16 + +fn=(7044) +0 15 + +fn=(7056) +0 16 + +fn=(7076) +0 15 + +fn=(7078) +0 18 +cfn=(7080) +calls=1 0 +0 20 +0 8 +cfn=(7080) +calls=1 0 +0 20 + +fn=(7100) +0 12 +cfn=(2772) +calls=1 0 +0 16 +0 2 +cfn=(2774) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7102) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7126) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7142) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7200) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(2136) OPENSSL_cpuid_setup +0 20 +cob=(3) +cfi=(168) +cfn=(658) +calls=1 34 +0 425 +0 1 +0 10 +cfn=(2140) +calls=1 0 +0 58 +0 1 + +fn=(2720) +0 35 +cfn=(2700) +calls=1 0 +0 37 +0 20 +cfn=(2722) +calls=1 0 +0 36 +0 2 +cfn=(2722) +calls=1 0 +0 36 +0 14 +cob=(47) +cfi=(220) +cfn=(1958) +calls=1 0 +0 19 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 16 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(1964) +calls=1 0 +0 8 +0 1 +0 3 +cfn=(2706) +calls=1 0 +0 14 +0 1 + +fn=(2784) +0 72 +cob=(47) +cfi=(220) +cfn=(2154) +calls=3 0 +0 606 +0 3 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=3 0 +0 606 +0 3 +0 72 +cob=(47) +cfi=(220) +cfn=(2154) +calls=3 0 +0 165 +0 3 +0 33 +cob=(47) +cfi=(220) +cfn=(2154) +calls=3 0 +0 370 +0 3 +0 15 +cob=(47) +cfi=(220) +cfn=(2154) +calls=3 0 +0 165 +0 3 +0 39 +cob=(47) +cfi=(220) +cfn=(2154) +calls=3 0 +0 165 +0 3 +0 36 +cfn=(2786) +calls=3 0 +0 48 +0 6 +cfn=(2788) +calls=3 0 +0 69 +0 30 +cob=(47) +cfi=(220) +cfn=(2154) +calls=3 0 +0 606 +0 3 +0 12 +cob=(5) +cfi=(206) +cfn=(1262) +calls=3 53 +0 90 +0 3 +0 15 +cfn=(2740) +calls=3 0 +0 475 +0 33 + +fn=(2830) +0 20 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 6 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 1218 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2850) +calls=1 0 +0 112 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 4 +cfn=(2868) CTxMemPool::CTxMemPool(CFeeRate const&) +calls=1 0 +0 10859 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 935 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 4 +cfn=(2850) +calls=1 0 +0 112 +0 2 +cfn=(2850) +calls=1 0 +0 112 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 97 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 103 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 + +fn=(2902) +0 4 +cfn=(2904) +calls=1 0 +0 20 + +fn=(2962) +0 15250 +cfn=(2964) +calls=1525 0 +0 7625 +0 25468 +cfn=(2968) +calls=786 0 +0 61480 +0 22969 +cfn=(2972) +calls=1525 0 +0 22875 +0 3050 +cfn=(2966) +calls=1525 0 +0 36600 +0 7625 + +fn=(2988) +0 7625 +cfn=(2990) +calls=1525 0 +0 3244265 + +fn=(2996) +0 3144 + +fn=(3018) +0 46 + +fn=(3112) boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +0 43 + +fn=(3118) boost::signals2::detail::signal_impl, int, std::less, boost::function, boost::function, boost::signals2::mutex>::signal_impl(boost::signals2::optional_last_value const&, std::less const&) +0 24 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 22 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(3120) +calls=1 0 +0 16 +0 2 +cfn=(3122) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 20 + +fn=(3144) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 385 +0 1 + +fn=(3158) +0 12 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3090) +calls=1 0 +0 4 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3162) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 385 +0 1 +0 15 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3180) +0 10 +cfn=(3182) +calls=1 0 +0 5419403 + +fn=(3186) +0 275 +cfn=(3188) +calls=25 0 +0 64132 + +fn=(3204) +0 1050 + +fn=(3222) +0 364 +cfn=(3224) +calls=4 0 +0 252 +0 64 +cfn=(3224) +calls=4 0 +0 252 +0 64 +cfn=(3226) +calls=4 0 +0 160 +0 168 +cob=(47) +cfi=(220) +cfn=(3230) +calls=4 0 +0 1272 +0 4 +0 16 +cfn=(3236) +calls=4 0 +0 14948 +0 480 +cfn=(3240) +calls=4 0 +0 812 +0 588 +cob=(47) +cfi=(220) +cfn=(3230) +calls=4 0 +0 3136 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(3230) +calls=4 0 +0 828 +0 4 +0 64 +cfn=(3252) +calls=4 0 +0 72 +0 128 +cfn=(3260) +calls=4 0 +0 508 +0 48 +cfn=(3260) +calls=12 0 +0 2012 +0 100 +cfn=(3264) +calls=4 0 +0 1720 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 28 +cfn=(3260) +calls=4 0 +0 508 +0 44 +cfn=(3264) +calls=4 0 +0 1432 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 970 +0 4 +0 60 +cfn=(3264) +calls=4 0 +0 1444 +0 16 +cfn=(3226) +calls=4 0 +0 648 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 36 +cfn=(3236) +calls=4 0 +0 15394 +0 12 +cfn=(3264) +calls=4 0 +0 1764 +0 24 +cfn=(3266) +calls=4 0 +0 1685 +0 16 +cfn=(3226) +calls=4 0 +0 524 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 12 +cfn=(3270) +calls=4 0 +0 62929 +0 48 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 32 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 48 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 32 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 196 +cfn=(3296) CBlock::BuildMerkleTree(bool*) const +calls=4 0 +0 1566 +0 196 +cfn=(3298) +calls=4 0 +0 461384 +0 196 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 80 +cfn=(3184) +calls=4 0 +0 11196 +0 64 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 84 +cfn=(3184) +calls=4 0 +0 11196 +0 64 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 28 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 68 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cfn=(3060) +calls=4 0 +0 500 +0 40 +cfn=(3060) +calls=4 0 +0 500 +0 12 +cfn=(3376) +calls=4 0 +0 640 +0 40 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cfn=(3060) +calls=4 0 +0 500 +0 28 +cfn=(3060) +calls=4 0 +0 500 +0 12 +cfn=(3376) +calls=4 0 +0 1204 +0 40 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cfn=(3060) +calls=4 0 +0 720 +0 28 +cfn=(3060) +calls=4 0 +0 1038 +0 12 +cfn=(3376) +calls=4 0 +0 1470 +0 40 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 384 +0 4 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 402 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cfn=(3060) +calls=4 0 +0 720 +0 28 +cfn=(3060) +calls=4 0 +0 500 +0 12 +cfn=(3376) +calls=4 0 +0 172 +0 40 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 362 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cfn=(3060) +calls=4 0 +0 500 +0 28 +cfn=(3060) +calls=4 0 +0 500 +0 12 +cfn=(3376) +calls=4 0 +0 1715 +0 40 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 64 +cfn=(3060) +calls=4 0 +0 500 +0 28 +cfn=(3060) +calls=4 0 +0 860 +0 12 +cfn=(3376) +calls=4 0 +0 172 +0 40 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 8 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 204 +0 4 +0 40 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 204 +0 4 +0 40 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 421 +0 4 +0 84 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 28 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 840 +0 4 +0 204 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 275 +0 4 +0 180 +cfn=(3380) +calls=4 0 +0 824 +0 52 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 28 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 204 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 638 +0 4 +0 180 +cfn=(3380) +calls=4 0 +0 824 +0 52 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 28 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 204 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 204 +0 4 +0 180 +cfn=(3380) +calls=4 0 +0 824 +0 16 +cfn=(3382) +calls=4 0 +0 3995682 +0 32 +cob=(47) +cfi=(220) +cfn=(3230) +calls=4 0 +0 860 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(3230) +calls=4 0 +0 860 +0 4 +0 24 +cob=(47) +cfi=(220) +cfn=(3230) +calls=4 0 +0 788 +0 4 +0 28 +cob=(47) +cfi=(220) +cfn=(3230) +calls=4 0 +0 2776 +0 4 +0 68 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 32 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 48 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 32 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 56 +cfn=(3254) std::vector >::_M_default_append(unsigned long) +calls=4 0 +0 592 +0 16 +cfn=(3256) +calls=4 0 +0 680 +0 20 +cfn=(3292) +calls=4 0 +0 5048 +0 4 + +fn=(3236) +0 210 +cob=(3) +cfi=(268) +cfn=(3192) +calls=10 34 +0 80 +0 10 +0 1950 +cob=(3) +cfi=(268) +cfn=(3192) +calls=650 34 +0 5200 +0 650 +0 13830 +cob=(47) +cfi=(220) +cfn=(2154) +calls=80 0 +0 6590 +0 80 +0 1580 +cob=(3) +cfi=(202) +cfn=(912) +calls=70 225 +0 960 +0 70 +0 280 +cob=(47) +cfi=(220) +cfn=(3210) +calls=70 0 +0 6038 +0 70 +0 140 + +fn=(3266) +0 540 +cfn=(3262) +calls=16 0 +0 3397 +0 16 + +fn=(5904) boost::filesystem::path::extension() const +0 14 +cfn=(4552) +calls=1 0 +0 414 +0 1 +cfn=(5906) +calls=1 0 +0 125 +0 3 +cfn=(5908) +calls=1 0 +0 602 +0 17 +cfn=(5916) +calls=1 0 +0 126 +0 3 +cfn=(5908) +calls=1 0 +0 666 +0 6 +cob=(47) +cfi=(220) +cfn=(5920) +calls=1 0 +0 26 +0 1 +0 8 +cob=(3) +cfi=(169) +cfn=(662) +calls=1 42 +0 16 +0 1 +0 13 +cob=(3) +cfi=(202) +cfn=(912) +calls=1 225 +0 15 +0 1 +0 6 + +fn=(5910) +0 612 +cob=(47) +cfi=(220) +cfn=(4730) +calls=2 0 +0 88 +0 2 +0 30 +cob=(47) +cfi=(220) +cfn=(4730) +calls=6 0 +0 368 +0 6 +0 48 +cob=(47) +cfi=(220) +cfn=(3804) +calls=8 0 +0 456 +0 8 +0 154 +cob=(3) +cfi=(202) +cfn=(912) +calls=6 225 +0 86 +0 6 +0 36 + +fn=(5922) boost::filesystem::path::stem() const +0 15 +cfn=(4552) +calls=1 0 +0 414 +0 1 +cfn=(5906) +calls=1 0 +0 6 +0 3 +cfn=(5908) +calls=1 0 +0 602 +0 14 +cfn=(5916) +calls=1 0 +0 6 +0 3 +cfn=(5908) +calls=1 0 +0 666 +0 6 +cob=(47) +cfi=(220) +cfn=(5920) +calls=1 0 +0 26 +0 1 +0 29 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 77 +0 1 +0 12 +cob=(3) +cfi=(202) +cfn=(912) +calls=1 225 +0 15 +0 1 +0 5 + +fn=(3350) +0 91 +cfn=(3352) jh_close +calls=13 0 +0 130949 + +fn=(3352) +0 481 +cob=(3) +cfi=(204) +cfn=(3340) +calls=13 161 +0 208 +0 13 +0 221 +cfn=(3348) +calls=13 0 +0 129038 +0 988 + +fn=(3356) +0 24 +cfn=(3358) +calls=8 0 +0 368 + +fn=(3360) +0 40 +cfn=(3362) sph_keccak512_addbits_and_close +calls=8 0 +0 51360 + +fn=(3362) +0 200 +cfn=(3358) +calls=8 0 +0 49376 +0 1568 +cob=(3) +cfi=(204) +cfn=(3340) +calls=8 161 +0 168 +0 8 +0 40 + +fn=(3378) +0 512 +cob=(47) +cfi=(220) +cfn=(2154) +calls=16 0 +0 1161 +0 16 +0 1696 +cob=(47) +cfi=(220) +cfn=(3210) +calls=12 0 +0 1032 +0 12 +0 376 + +fn=(3380) +0 378 +cob=(47) +cfi=(220) +cfn=(3210) +calls=18 0 +0 1548 +0 18 +0 198 +cob=(47) +cfi=(220) +cfn=(3210) +calls=18 0 +0 1548 +0 18 + +fn=(3392) +0 13756 +cfn=(2898) +calls=724 0 +0 4313307 +0 11584 + +fn=(3404) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3462) +0 8 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 72 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 72 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 309 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3472) +0 255 + +fn=(3504) +0 88 + +fn=(6542) secp256k1_context_destroy +0 14 +cob=(3) +cfi=(176) +cfn=(1204) +calls=2 3087 +0 69 +0 2 +0 6 +cob=(3) +cfi=(176) +cfn=(1204) +calls=2 3087 +0 164 +0 2 + +fn=(3656) +0 58 +cob=(3) +cfi=(176) +cfn=(704) +calls=2 3023 +0 392 +0 2 +0 2 + +fn=(3678) +0 20 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 8 +cfn=(2832) +calls=1 0 +0 110 +0 51 +cfn=(3680) +calls=1 0 +0 20 +0 7 +cfn=(3682) +calls=1 0 +0 24 +0 8 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 13 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 549 +0 1 + +fn=(3694) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3726) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3736) +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 +cfn=(3738) boost::system::system_category() +calls=1 0 +0 53 +0 2 +cfn=(3738) +calls=1 0 +0 11 +0 6 +cfn=(3740) +calls=1 0 +0 12 +0 4 + +fn=(3738) +0 20 +cob=(47) +cfi=(220) +cfn=(1958) +calls=1 0 +0 19 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(1964) +calls=1 0 +0 8 +0 1 +0 4 + +fn=(3754) +0 14 + +fn=(3772) +0 6 +cfn=(3758) +calls=1 0 +0 117 +0 2 + +fn=(3780) +0 10 +cfn=(3782) +calls=1 0 +0 313474 +0 1 +cfn=(4490) +calls=1 0 +0 2854 +0 3 +cfn=(4514) +calls=1 0 +0 67728769 +0 9 + +fn=(4558) +0 54 +cob=(3) +cfi=(207) +cfn=(1494) +calls=3 33 +0 33 +0 3 +0 91 + +fn=(4740) +0 112 +cob=(47) +cfi=(220) +cfn=(2154) +calls=7 0 +0 1629 +0 7 +0 70 +cfn=(3060) +calls=7 0 +0 387 +0 56 +cfn=(4742) +calls=7 0 +0 715 +0 119 +cfn=(4746) +calls=7 0 +0 668 + +fn=(4748) +0 90 +cob=(47) +cfi=(220) +cfn=(2154) +calls=6 0 +0 1212 +0 6 +0 60 +cfn=(3060) +calls=6 0 +0 330 +0 42 +cfn=(4750) +calls=6 0 +0 557 +0 96 +cfn=(4754) +calls=6 0 +0 543 + +fn=(4750) +0 125 +cob=(47) +cfi=(220) +cfn=(3072) +calls=4 0 +0 183 +0 4 +0 94 +cob=(47) +cfi=(220) +cfn=(3080) +calls=2 0 +0 29 +0 2 +0 8 +cob=(47) +cfi=(220) +cfn=(3072) +calls=2 0 +0 91 +0 2 +0 32 +cob=(47) +cfi=(220) +cfn=(3072) +calls=2 0 +0 92 +0 2 +0 18 +cfn=(4752) std::_Rb_tree, std::allocator >, std::pair, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > >, std::_Select1st, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >::_M_get_insert_unique_pos(std::__cxx11::basic_string, std::allocator > const&) +calls=1 0 +0 34 + +fn=(4752) +0 34 + +fn=(4834) +0 14 +cfn=(4836) +calls=1 0 +0 11 +0 19 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4824) +calls=1 0 +0 268 +0 9 +cob=(3) +cfi=(329) +cfn=(4840) +calls=1 59 +0 4 +0 1 +0 5 +cob=(3) +cfi=(330) +cfn=(4844) +calls=1 25 +0 29 +0 1 +0 5 +cob=(5) +cfi=(331) /build/glibc-sMfBJT/glibc-2.31/nptl/../nptl/sigaction.c +cfn=(4848) sigaction +calls=1 23 +0 59 +0 1 +0 4 +cob=(5) +cfi=(331) +cfn=(4848) +calls=1 23 +0 59 +0 1 +0 5 +cob=(3) +cfi=(330) +cfn=(4844) +calls=1 25 +0 29 +0 1 +0 5 +cob=(5) +cfi=(331) +cfn=(4848) +calls=1 23 +0 59 +0 1 +0 3 +cob=(3) +cfi=(333) +cfn=(4854) +calls=1 30 +0 140 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 78 +0 3 +cfn=(4824) +calls=1 0 +0 228 +0 7 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4824) +calls=1 0 +0 229 +0 7 +cfn=(2872) +calls=1 0 +0 76 +0 3 +cfn=(4824) +calls=1 0 +0 225 +0 8 +cfn=(2872) +calls=1 0 +0 80 +0 4 +cfn=(4524) +calls=1 0 +0 193 +0 5 +cfn=(2872) +calls=1 0 +0 82 +0 3 +cfn=(4524) +calls=1 0 +0 197 +0 5 +cfn=(2872) +calls=1 0 +0 76 +0 3 +cfn=(4524) +calls=1 0 +0 192 +0 5 +cfn=(2872) +calls=1 0 +0 76 +0 3 +cfn=(4824) +calls=1 0 +0 225 +0 9 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4524) +calls=1 0 +0 197 +0 5 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4824) +calls=1 0 +0 268 +0 9 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4824) +calls=1 0 +0 189 +0 10 +cfn=(2872) +calls=1 0 +0 78 +0 3 +cfn=(4824) +calls=1 0 +0 229 +0 9 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4524) +calls=1 0 +0 196 +0 6 +cfn=(2872) +calls=1 0 +0 80 +0 3 +cfn=(4524) +calls=1 0 +0 193 +0 5 +cfn=(2872) +calls=1 0 +0 78 +0 3 +cfn=(4524) +calls=1 0 +0 157 +0 15 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4866) +calls=1 0 +0 619 +0 15 +cfn=(4876) +calls=1 0 +0 37 +0 9 +cfn=(2872) +calls=1 0 +0 76 +0 3 +cfn=(4880) +calls=1 0 +0 732 +0 9 +cfn=(2872) +calls=1 0 +0 76 +0 3 +cfn=(4880) +calls=1 0 +0 216 +0 7 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4824) +calls=1 0 +0 228 +0 5 +cfn=(2872) +calls=1 0 +0 78 +0 3 +cfn=(4824) +calls=1 0 +0 229 +0 9 +cfn=(2872) +calls=1 0 +0 80 +0 3 +cfn=(4524) +calls=1 0 +0 232 +0 7 +cfn=(2872) +calls=1 0 +0 56 +0 4 +cfn=(4884) +calls=1 0 +0 38 +0 12 +cfn=(2872) +calls=1 0 +0 78 +0 4 +cfn=(4524) +calls=1 0 +0 157 +0 30 +cfn=(2872) +calls=1 0 +0 80 +0 3 +cfn=(4824) +calls=1 0 +0 264 +0 9 +cfn=(2872) +calls=1 0 +0 82 +0 3 +cfn=(4524) +calls=1 0 +0 197 +0 8 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4824) +calls=1 0 +0 229 +0 7 +cfn=(4886) +calls=1 0 +0 13 +0 4 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4824) +calls=1 0 +0 229 +0 5 +cfn=(4886) +calls=1 0 +0 13 +0 4 +cfn=(2872) +calls=1 0 +0 145 +0 3 +cfn=(4824) +calls=1 0 +0 229 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4824) +calls=1 0 +0 229 +0 7 +cfn=(2872) +calls=1 0 +0 80 +0 3 +cfn=(4866) +calls=1 0 +0 224 +0 15 +cfn=(2872) +calls=1 0 +0 80 +0 3 +cfn=(4824) +calls=1 0 +0 642 +0 9 +cob=(3) +cfi=(337) +cfn=(4896) +calls=1 35 +0 55 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 82 +0 3 +cfn=(4824) +calls=1 0 +0 229 +0 9 +cfn=(2872) +calls=1 0 +0 78 +0 3 +cfn=(4866) +calls=1 0 +0 268 +0 10 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4524) +calls=1 0 +0 196 +0 5 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4524) +calls=1 0 +0 196 +0 5 +cfn=(2872) +calls=1 0 +0 74 +0 3 +cfn=(4524) +calls=1 0 +0 196 +0 5 +cfn=(2872) +calls=1 0 +0 78 +0 3 +cfn=(4524) +calls=1 0 +0 196 +0 5 +cfn=(2872) +calls=1 0 +0 149 +0 3 +cfn=(4866) +calls=1 0 +0 268 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 153 +0 3 +cfn=(4824) +calls=1 0 +0 268 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 145 +0 3 +cfn=(4824) +calls=1 0 +0 229 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 145 +0 3 +cfn=(4824) +calls=1 0 +0 268 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 78 +0 3 +cfn=(2872) +calls=1 0 +0 76 +0 6 +cfn=(4566) +calls=1 0 +0 244 +0 9 +cfn=(2872) +calls=1 0 +0 153 +0 3 +cfn=(4824) +calls=1 0 +0 228 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cfn=(2872) +calls=1 0 +0 145 +0 3 +cfn=(4866) +calls=1 0 +0 229 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 3 +cfn=(2872) +calls=1 0 +0 76 +0 3 +cfn=(4824) +calls=1 0 +0 225 +0 7 +cfn=(2872) +calls=1 0 +0 145 +0 3 +cfn=(4824) +calls=1 0 +0 228 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cfn=(4902) +calls=1 0 +0 738508 +0 2 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 3 +cfn=(4972) +calls=1 0 +0 62123574 +0 7 +cfn=(4988) InitSanityCheck() +calls=1 0 +0 1567636 +0 3 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 9 +cfn=(4888) +calls=1 0 +0 107 +0 10 +cfn=(4526) +calls=1 0 +0 3493 +0 9 +cfn=(4734) +calls=1 0 +0 124 +0 11 +cfn=(4734) +calls=1 0 +0 54 +0 3 +cfn=(5904) +calls=1 0 +0 2064 +0 7 +cfn=(4734) +calls=1 0 +0 56 +0 12 +cfn=(4734) +calls=1 0 +0 54 +0 3 +cfn=(5922) +calls=1 0 +0 1903 +0 9 +cfn=(4734) +calls=1 0 +0 56 +0 9 +cfn=(5924) +calls=1 0 +0 90 +0 3 +cfn=(5926) +calls=1 0 +0 50 +0 21 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 9 +cfn=(2872) +calls=1 0 +0 84 +0 2 +cfn=(4526) +calls=1 0 +0 113 +0 4 +cfn=(5928) boost::filesystem::operator/(boost::filesystem::path const&, boost::filesystem::path const&) +calls=1 0 +0 501 +0 6 +cob=(3) +cfi=(274) +cfn=(3532) +calls=1 85 +0 506 +0 1 +0 4 +cob=(3) +cfi=(293) +cfn=(3604) +calls=1 34 +0 421 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(1958) +calls=1 0 +0 19 +0 1 +0 4 +cfn=(3512) +calls=1 0 +0 507 +0 12 +cfn=(5936) +calls=1 0 +0 2911556 +0 5 +cfn=(5968) +calls=1 0 +0 539 +0 4 +cfn=(5976) +calls=1 0 +0 8444 +0 2 +cfn=(6024) +calls=1 0 +0 43557 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 7 +cfn=(5934) boost::interprocess::file_lock::file_lock(char const*) +calls=1 0 +0 58 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(1964) +calls=1 0 +0 8 +0 1 +0 3 + +fn=(4908) secp256k1_fe_normalize_weak +0 985950 + +fn=(4934) +0 5376 +cfn=(4922) +calls=256 0 +0 43008 +0 9728 +cfn=(4924) +calls=256 0 +0 55296 +0 8192 +cfn=(4924) +calls=256 0 +0 55296 +0 1536 +cfn=(4924) +calls=256 0 +0 55296 +0 7168 +cfn=(4922) +calls=256 0 +0 43008 +0 3840 +cfn=(4924) +calls=256 0 +0 55296 +0 5120 +cfn=(4936) +calls=256 0 +0 10496 +0 1024 +cfn=(4936) +calls=256 0 +0 10496 +0 22272 +cfn=(4922) +calls=256 0 +0 43008 +0 1024 +cfn=(4924) +calls=256 0 +0 55296 +0 1024 +cfn=(4922) +calls=256 0 +0 43008 +0 9216 +cfn=(4922) +calls=256 0 +0 43008 +0 1536 +cfn=(4924) +calls=256 0 +0 55296 +0 768 +cfn=(4936) +calls=256 0 +0 10496 +0 21248 +cfn=(4924) +calls=256 0 +0 55296 +0 35328 + +fn=(4942) +0 12 +cob=(3) +cfi=(239) +cfn=(2792) +calls=1 32 +0 44 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 23 + +fn=(4960) +0 7 +cfn=(4906) +calls=1 0 +0 361631 +0 3 + +fn=(4976) +0 624443 +cfn=(4922) +calls=16432 0 +0 2760576 +0 164320 +cfn=(4908) +calls=16432 0 +0 492960 +0 65728 +cfn=(4924) +calls=16432 0 +0 3549312 +0 164320 +cfn=(4908) +calls=16432 0 +0 492960 +0 65728 +cfn=(4924) +calls=16432 0 +0 3549312 +0 65728 +cfn=(4924) +calls=16432 0 +0 3549312 +0 443664 +cfn=(4978) +calls=16432 0 +0 246480 +0 180771 +cfn=(4922) +calls=16432 0 +0 2760576 +0 49296 +cfn=(4922) +calls=16432 0 +0 2760576 +0 65728 +cfn=(4924) +calls=16432 0 +0 3549312 +0 213196 +cfn=(4924) +calls=16390 0 +0 3540240 +0 168 +cfn=(4924) +calls=42 0 +0 9072 +0 65728 +cfn=(4924) +calls=16432 0 +0 3549312 +0 1347424 +cfn=(4924) +calls=16432 0 +0 3549312 +0 65728 +cfn=(4924) +calls=16432 0 +0 3549312 +0 230048 + +fn=(5002) +0 19 +cfn=(5004) +calls=1 0 +0 284510 +0 11 +cfn=(5006) secp256k1_ec_pubkey_serialize +calls=1 0 +0 358 +0 15 + +fn=(5008) +0 168 + +fn=(5012) +0 41 +cob=(47) +cfi=(220) +cfn=(2880) +calls=1 0 +0 69 +0 1 +0 15 +cfn=(4958) +calls=1 0 +0 6314 +0 24 +cfn=(3274) +calls=1 0 +0 19 +0 4 +cfn=(3276) +calls=1 0 +0 56 +0 4 +cfn=(3276) +calls=1 0 +0 61 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 2 +cfn=(3290) +calls=1 0 +0 20 +0 4 +cfn=(3276) +calls=1 0 +0 57 +0 4 +cfn=(3288) +calls=1 0 +0 3565 +0 8 +cfn=(5014) +calls=1 0 +0 462622 +0 4 +cfn=(5036) +calls=1 0 +0 712518 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 1 + +fn=(5034) +0 35 +cfn=(4910) +calls=1 0 +0 84 +0 3 +cfn=(4910) +calls=1 0 +0 84 +0 130 + +fn=(5062) +0 13 +cfn=(4922) +calls=1 0 +0 168 +0 4 +cfn=(4924) +calls=1 0 +0 216 +0 98 + +fn=(5068) glibcxx_sanity_test() +0 11 +cob=(47) +cfi=(220) +cfn=(2166) +calls=1 0 +0 37 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2622) +calls=1 0 +0 172 +0 1 +0 3 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 9 +0 35 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 297 +cob=(47) +cfi=(220) +cfn=(2154) +calls=99 0 +0 11463 +0 99 +0 400 +cob=(47) +cfi=(220) +cfn=(4498) +calls=100 0 +0 800 +0 100 +0 905 +cob=(47) +cfi=(220) +cfn=(5072) +calls=100 0 +0 600 +0 100 +0 200 +cob=(47) +cfi=(220) +cfn=(3210) +calls=100 0 +0 10458 +0 100 +0 700 +cfn=(5074) +calls=1 0 +0 42605 +0 1 + +fn=(5934) +0 12 +cob=(5) +cfi=(263) +cfn=(2932) +calls=1 37 +0 34 +0 1 +0 11 + +fn=(5970) +0 46 +cob=(5) +cfi=(180) +cfn=(714) +calls=2 64 +0 58 +0 2 +0 30 +cob=(5) +cfi=(182) +cfn=(724) +calls=2 356 +0 38 +0 2 +0 8 +cfn=(4504) +calls=2 0 +0 68 +0 46 +cfn=(5974) boost::signals2::detail::slot_call_iterator_t, std::allocator >, char const*>, std::_List_iterator >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> > >, boost::signals2::detail::connection_body >, boost::signals2::slot, std::allocator > (char const*), boost::function, std::allocator > (char const*)> >, boost::signals2::mutex> >::lock_next_callable() const +calls=2 0 +0 52 +0 22 +cfn=(5974) +calls=2 0 +0 52 +0 90 +cfn=(2706) +calls=2 0 +0 28 +0 66 +cfn=(5972) +calls=2 0 +0 90 +0 8 + +fn=(5974) +0 104 + +fn=(6114) std::basic_ostream >& boost::posix_time::operator<< >(std::basic_ostream >&, boost::posix_time::ptime const&) +0 116 +cob=(47) +cfi=(220) +cfn=(4486) +calls=4 0 +0 40 +0 4 +0 8 +cob=(47) +cfi=(220) +cfn=(2234) +calls=4 0 +0 24 +0 4 +0 44 +cob=(47) +cfi=(220) +cfn=(2608) +calls=4 0 +0 356 +0 4 +0 16 +cob=(2) +cfi=(18) +cfn=(4202) +calls=4 0 +0 60 +0 24 +cob=(47) +cfi=(220) +cfn=(4486) +calls=4 0 +0 40 +0 4 +0 8 +cob=(47) +cfi=(220) +cfn=(2234) +calls=4 0 +0 24 +0 4 +0 44 +cob=(47) +cfi=(220) +cfn=(2608) +calls=4 0 +0 356 +0 4 +0 60 +cfn=(6124) +calls=4 0 +0 45199 +0 8 +cob=(2) +cfi=(18) +cfn=(4202) +calls=4 0 +0 60 +0 76 +cob=(47) +cfi=(220) +cfn=(6122) +calls=4 0 +0 64 +0 4 +0 24 + +fn=(6214) +0 15 +cfn=(6216) +calls=1 0 +0 71 +0 1 +cfn=(6220) +calls=1 0 +0 47 +0 1 +cfn=(6222) +calls=1 0 +0 48 +0 1 +cfn=(6224) +calls=1 0 +0 10 +0 1 +cfn=(6226) +calls=1 0 +0 12 +0 4 +cfn=(6228) boost::this_thread::disable_interruption::disable_interruption() +calls=1 0 +0 247 +0 6 +cfn=(4994) +calls=1 0 +0 60 +0 4 +cfn=(6244) +calls=1 0 +0 14 +0 7 +cfn=(6246) +calls=1 0 +0 44 +0 7 +cfn=(4994) +calls=1 0 +0 60 +0 15 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 6 +cob=(5) +cfi=(365) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_signal.c +cfn=(6250) pthread_cond_signal@@GLIBC_2.3.2 +calls=1 36 +0 22 +0 1 +0 4 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 8 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 6 +cob=(5) +cfi=(338) +cfn=(4948) +calls=1 40 +0 22 +0 1 +0 4 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 21 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 8 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 4 + +fn=(6228) +0 4 +cfn=(6230) +calls=1 0 +0 238 +0 5 + +fn=(6282) +0 225 + +fn=(6306) +0 16 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 7 +cfn=(4994) +calls=1 0 +0 60 +0 5 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 5 +cob=(5) +cfi=(257) +cfn=(2854) +calls=1 25 +0 4 +0 1 +0 6 +cob=(5) +cfi=(258) +cfn=(2858) +calls=1 29 +0 11 +0 1 +0 6 +cob=(5) +cfi=(259) +cfn=(2862) +calls=1 28 +0 17 +0 1 +0 3 +cob=(5) +cfi=(260) +cfn=(2866) +calls=1 24 +0 3 +0 1 +0 5 +cfn=(6308) +calls=1 0 +0 37 +0 22 +cfn=(6310) +calls=1 0 +0 101 +0 8 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 19 +0 1 +0 10 +cob=(5) +cfi=(367) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_wait.c +cfn=(6314) pthread_cond_timedwait@@GLIBC_2.3.2 +calls=1 645 +0 270 +0 1 +0 18 +cob=(5) +cfi=(180) +cfn=(714) +calls=1 64 +0 29 +0 1 +0 10 +cfn=(6332) boost::this_thread::interruption_point() +calls=1 0 +0 47 +0 4 +cob=(5) +cfi=(182) +cfn=(724) +calls=1 356 +0 26 +0 1 +0 6 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 7 +cob=(5) +cfi=(371) +cfn=(6340) +calls=1 43 +0 23 +0 1 +0 8 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 17 +cfn=(4996) +calls=1 0 +0 40 +0 1 + +fn=(6410) +0 22 +cfn=(6038) +calls=2 0 +0 58 +0 24 + +fn=(6448) +0 437 +cfn=(6450) +calls=19 0 +0 1744 +0 19 + +fn=(6460) +0 14 +cfn=(3508) +calls=1 0 +0 641 +0 3 +cfn=(6462) +calls=1 0 +0 963 +0 8 +cfn=(2832) +calls=1 0 +0 110 +0 53 +cfn=(3680) +calls=1 0 +0 20 +0 8 +cfn=(3682) +calls=1 0 +0 24 +0 7 +cfn=(6218) +calls=1 0 +0 48 +0 5 +cfn=(6464) +calls=1 0 +0 19136 +0 8 +cfn=(6218) +calls=1 0 +0 48 +0 3 +cfn=(6488) +calls=1 0 +0 13203 +0 1 +cfn=(3508) +calls=1 0 +0 641 +0 4 +cfn=(6038) +calls=1 0 +0 29 +0 5 +cfn=(6478) +calls=1 0 +0 18 +0 3 +cfn=(6478) +calls=1 0 +0 18 +0 3 +cfn=(6474) +calls=1 0 +0 24 +0 3 +cfn=(6470) +calls=1 0 +0 18 +0 3 +cfn=(6470) +calls=1 0 +0 18 +0 3 +cfn=(6466) +calls=1 0 +0 20 +0 3 +cfn=(3682) +calls=1 0 +0 24 +0 3 +cfn=(3680) +calls=1 0 +0 20 +0 3 +cob=(5) +cfi=(370) +cfn=(6336) +calls=1 27 +0 12 +0 1 +0 7 +cfn=(6500) +calls=1 0 +0 16 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 11 + +fn=(6572) +0 16 + +fn=(6586) +0 1235 +cob=(47) +cfi=(220) +cfn=(3210) +calls=95 0 +0 10070 +0 95 + +fn=(6636) +0 18 + +fn=(6640) +0 18 + +fn=(6646) +0 8 + +fn=(6654) +0 24 + +fn=(6682) +0 9 +cfn=(6684) +calls=1 0 +0 747 +0 2 +cfn=(3474) +calls=1 0 +0 12 +0 1 +cfn=(3472) +calls=1 0 +0 3 +0 290 +cob=(5) +cfi=(370) +cfn=(6336) +calls=41 27 +0 492 +0 41 +0 287 +cob=(47) +cfi=(220) +cfn=(4768) +calls=41 0 +0 4510 +0 41 +0 82 +cfn=(3472) +calls=41 0 +0 123 +0 84 +cfn=(3000) +calls=1 0 +0 96 +0 7 + +fn=(6706) +0 11 +cfn=(6708) std::_Rb_tree, std::_Select1st >, std::less, std::allocator > >::_M_erase(std::_Rb_tree_node >*) +calls=1 0 +0 18 + +fn=(6708) +0 18 + +fn=(6728) +0 18 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 137 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 164 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 132 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 20 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 31 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 636 +0 6 +0 26 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 137 +0 1 + +fn=(6752) +0 22 + +fn=(6764) +0 308 +cob=(5) +cfi=(370) +cfn=(6336) +calls=28 27 +0 336 +0 28 +0 280 +cob=(47) +cfi=(220) +cfn=(4768) +calls=28 0 +0 3080 +0 28 + +fn=(6788) +0 12 +cfn=(3132) +calls=1 0 +0 16 +0 2 +cfn=(3134) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6812) +0 12 +cfn=(3124) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot >, boost::signals2::mutex> > > > >*) +calls=1 0 +0 16 +0 2 +cfn=(3126) std::__cxx11::_List_base >, boost::signals2::slot >, boost::signals2::mutex> >, std::allocator >, boost::signals2::slot >, boost::signals2::mutex> > > >::_M_clear() +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6854) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6868) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6876) +0 730 +cob=(47) +cfi=(220) +cfn=(3210) +calls=46 0 +0 4876 +0 46 +0 952 + +fn=(6884) +0 24 +cfn=(3054) +calls=2 0 +0 32 +0 4 +cfn=(3056) +calls=2 0 +0 46 +0 16 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6886) +0 22 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6890) +0 22 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6898) +0 17 + +fn=(6906) +0 26 +cfn=(2707) +calls=2 0 +0 586 +0 8 +cfn=(2707) +calls=2 0 +0 1754 +0 16 +cob=(47) +cfi=(220) +cfn=(4768) +calls=2 0 +0 220 +0 2 + +fn=(6922) +0 12 +cfn=(3034) +calls=1 0 +0 16 +0 2 +cfn=(3036) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6940) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6952) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6970) +0 20 +cob=(5) +cfi=(370) +cfn=(6336) +calls=2 27 +0 24 +0 2 +0 16 +cob=(5) +cfi=(371) +cfn=(6340) +calls=2 43 +0 46 +0 2 +0 20 + +fn=(6978) +0 10 +cfn=(6980) +calls=1 0 +0 16 +0 8 +cfn=(6982) +calls=1 0 +0 16 + +fn=(6986) +0 11 +cfn=(6988) +calls=1 0 +0 20 + +fn=(7000) +0 11 +cfn=(7002) +calls=1 0 +0 16 + +fn=(7028) +0 11 +cfn=(7030) std::_Rb_tree, std::less, std::allocator >::_M_erase(std::_Rb_tree_node*) +calls=1 0 +0 16 + +fn=(7048) +0 11 +cfn=(7008) +calls=1 0 +0 18 + +fn=(7140) +0 12 +cfn=(2748) +calls=1 0 +0 16 +0 2 +cfn=(2750) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7144) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7150) +0 13 +cfn=(2707) +calls=1 0 +0 273 +0 4 +cfn=(2707) +calls=1 0 +0 1418 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7158) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7160) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(2700) +0 74 + +fn=(2742) +0 23 +cfn=(2743) std::_Rb_tree >, std::pair > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > >, std::_Select1st > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >, boost::signals2::detail::group_key_less >, std::allocator > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > > >::_M_erase(std::_Rb_tree_node > const, std::_List_iterator >, boost::signals2::slot, std::allocator > const&), boost::function, std::allocator > const&)> >, boost::signals2::mutex> > > > >*)'2 +calls=1 0 +0 16 +0 3 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 16 + +fn=(2743) +0 16 + +fn=(2754) +0 64 + +fn=(2756) +0 92 + +fn=(2868) +0 16 +cob=(5) +cfi=(254) +cfn=(2836) +calls=1 25 +0 4 +0 1 +0 5 +cob=(5) +cfi=(255) +cfn=(2840) +calls=1 25 +0 13 +0 1 +0 7 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 48 +0 1 +0 5 +cob=(5) +cfi=(256) +cfn=(2844) +calls=1 24 +0 3 +0 1 +0 23 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 14 +cfn=(2870) std::vector >::_M_default_append(unsigned long) +calls=1 0 +0 10504 +0 10 + +fn=(2870) +0 45 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 7 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 194 +0 1 +0 72 +cob=(47) +cfi=(220) +cfn=(2154) +calls=24 0 +0 4656 +0 24 +0 200 +cob=(47) +cfi=(220) +cfn=(2154) +calls=25 0 +0 4850 +0 25 +0 227 + +fn=(2872) +0 42 +cob=(3) +cfi=(169) +cfn=(662) +calls=3 42 +0 48 +0 3 +0 65 +cob=(47) +cfi=(220) +cfn=(2880) +calls=1 0 +0 235 +0 1 +0 8 +cob=(3) +cfi=(202) +cfn=(912) +calls=1 225 +0 11 +0 1 +0 8 +cob=(3) +cfi=(202) +cfn=(912) +calls=2 225 +0 26 +0 2 +0 35 +cob=(3) +cfi=(169) +cfn=(662) +calls=2 42 +0 32 +0 2 +0 52 +cob=(3) +cfi=(202) +cfn=(912) +calls=2 225 +0 28 +0 2 +0 82 +cob=(3) +cfi=(169) +cfn=(662) +calls=5 42 +0 92 +0 5 +0 120 +cob=(3) +cfi=(202) +cfn=(912) +calls=5 225 +0 75 +0 5 +0 783 +cob=(3) +cfi=(169) +cfn=(662) +calls=48 42 +0 880 +0 48 +0 951 +cob=(47) +cfi=(220) +cfn=(2880) +calls=8 0 +0 552 +0 8 +0 64 +cob=(3) +cfi=(202) +cfn=(912) +calls=8 225 +0 88 +0 8 +0 156 +cob=(3) +cfi=(202) +cfn=(912) +calls=39 225 +0 535 +0 39 +0 186 +cob=(3) +cfi=(169) +cfn=(662) +calls=3 42 +0 60 +0 3 +0 30 +cfn=(2876) +calls=3 0 +0 997 +0 15 +cob=(3) +cfi=(169) +cfn=(662) +calls=1 42 +0 16 +0 1 +0 10 +cfn=(2876) +calls=1 0 +0 55 +0 4065 +cob=(3) +cfi=(169) +cfn=(662) +calls=271 42 +0 5128 +0 271 +0 2710 +cfn=(2876) +calls=271 0 +0 19970 +0 45 +cob=(3) +cfi=(169) +cfn=(662) +calls=3 42 +0 74 +0 3 +0 30 +cfn=(2876) +calls=3 0 +0 601 +0 224 +cob=(3) +cfi=(169) +cfn=(662) +calls=14 42 +0 380 +0 14 +0 268 +cob=(47) +cfi=(220) +cfn=(2880) +calls=12 0 +0 2445 +0 12 +0 96 +cob=(3) +cfi=(202) +cfn=(912) +calls=12 225 +0 144 +0 12 +0 8 +cob=(3) +cfi=(202) +cfn=(912) +calls=2 225 +0 30 +0 2 +0 372 +cob=(3) +cfi=(169) +cfn=(662) +calls=22 42 +0 372 +0 22 +0 220 +cfn=(2876) +calls=22 0 +0 904 +0 1280 +cob=(3) +cfi=(169) +cfn=(662) +calls=80 42 +0 1472 +0 80 +0 1580 +cob=(47) +cfi=(220) +cfn=(2880) +calls=4 0 +0 276 +0 4 +0 32 +cob=(3) +cfi=(202) +cfn=(912) +calls=4 225 +0 44 +0 4 +0 240 +cob=(3) +cfi=(202) +cfn=(912) +calls=60 225 +0 908 +0 60 +0 208 +cob=(3) +cfi=(169) +cfn=(662) +calls=1 42 +0 24 +0 1 +0 24 +cob=(3) +cfi=(202) +cfn=(912) +calls=1 225 +0 13 +0 1 +0 17 +cob=(3) +cfi=(169) +cfn=(662) +calls=1 42 +0 16 +0 1 +0 24 +cob=(3) +cfi=(202) +cfn=(912) +calls=1 225 +0 17 +0 1 +0 3 + +fn=(2892) +0 20 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 6 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2894) +calls=1 0 +0 529425 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 7 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 194 +0 1 +0 14 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 7 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 194 +0 1 +0 14 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2850) +calls=1 0 +0 112 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(3012) +calls=1 0 +0 7759 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 7 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 385 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(2968) +0 16527 +cfn=(2970) +calls=787 0 +0 36785 +0 8659 + +fn=(2980) +0 188046 +cob=(3) +cfi=(202) +cfn=(912) +calls=1578 225 +0 20380 +0 1578 +0 87620 +cfn=(2982) +calls=53 0 +0 54060 +0 9749 +cob=(3) +cfi=(202) +cfn=(912) +calls=4529 225 +0 52848 +0 4529 +0 9323 + +fn=(3030) +0 46 + +fn=(3034) +0 32 + +fn=(3040) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3064) +0 35 + +fn=(3090) +0 8 + +fn=(3098) +0 17 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cfn=(3100) boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +calls=1 0 +0 43 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 14 +cfn=(3102) +calls=1 0 +0 16 +0 2 +cfn=(3104) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cfn=(3106) +calls=1 0 +0 43 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(3108) +calls=1 0 +0 16 +0 2 +cfn=(3110) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cfn=(3112) +calls=1 0 +0 43 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(3114) +calls=1 0 +0 16 +0 2 +cfn=(3116) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 7 +cfn=(3118) +calls=1 0 +0 1306 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 21 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(3124) +calls=1 0 +0 16 +0 2 +cfn=(3126) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cfn=(3128) +calls=1 0 +0 43 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(2776) +calls=1 0 +0 16 +0 2 +cfn=(2778) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cfn=(3130) boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > >::grouped_list(boost::signals2::detail::grouped_list, boost::shared_ptr >, boost::signals2::slot >, boost::signals2::mutex> > > const&) +calls=1 0 +0 43 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(2786) +calls=1 0 +0 16 +0 2 +cfn=(2788) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 21 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(3132) +calls=1 0 +0 16 +0 2 +cfn=(3134) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 275 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 3 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cfn=(3128) +calls=1 0 +0 43 +0 4 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 51 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 12 +cfn=(2776) +calls=1 0 +0 16 +0 2 +cfn=(2778) +calls=1 0 +0 23 +0 9 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 4 +cob=(5) +cfi=(206) +cfn=(1262) +calls=1 53 +0 30 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 26 + +fn=(3100) +0 43 + +fn=(3122) +0 46 + +fn=(3124) +0 32 + +fn=(3126) +0 46 + +fn=(3130) +0 43 + +fn=(3160) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3166) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3170) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3174) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3216) +0 75 +cfn=(3218) +calls=3 0 +0 4559 +0 21 + +fn=(3252) +0 126 + +fn=(3254) +0 220 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 220 +0 4 +0 148 + +fn=(3272) +0 52 +cfn=(3274) +calls=4 0 +0 76 +0 32 +cfn=(3276) +calls=4 0 +0 240 +0 56 +cfn=(3278) +calls=4 0 +0 15388 +0 36 +cfn=(3286) +calls=4 0 +0 15152 +0 28 +cfn=(3276) +calls=4 0 +0 252 +0 28 +cfn=(3288) +calls=4 0 +0 14268 +0 12 +cfn=(3290) +calls=4 0 +0 80 +0 16 +cfn=(3276) +calls=4 0 +0 228 +0 12 +cfn=(3288) +calls=4 0 +0 14260 +0 200 + +fn=(3280) +0 304 +cfn=(3276) +calls=16 0 +0 1024 +0 16 + +fn=(3296) +0 656 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 842 +0 4 +0 64 + +fn=(3306) +0 780 +cob=(3) +cfi=(202) +cfn=(912) +calls=10 225 +0 120 +0 10 +0 25400 +cob=(3) +cfi=(202) +cfn=(912) +calls=10 225 +0 190 +0 10 +0 30 + +fn=(3310) +0 50 +cfn=(3312) +calls=10 0 +0 27440 +0 30 +cfn=(3302) +calls=10 0 +0 170 + +fn=(3328) +0 6424 + +fn=(3344) +0 260 + +fn=(3366) +0 20 +cfn=(3368) +calls=10 0 +0 440 + +fn=(3398) +0 12 +cfn=(3396) +calls=1 0 +0 1480629 +0 9 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 77 +0 1 +0 6 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 77 +0 1 +0 113 +cfn=(3240) +calls=1 0 +0 203 +0 133 +cfn=(3298) +calls=1 0 +0 76480 +0 50 +cob=(47) +cfi=(220) +cfn=(2880) +calls=1 0 +0 69 +0 1 +0 20 +cfn=(3184) +calls=1 0 +0 2799 +0 16 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 20 + +fn=(3426) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3430) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 17 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3434) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 301 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3438) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3444) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3478) +0 3 + +fn=(3480) +0 10 +cob=(3) +cfi=(117) +cfn=(3484) +calls=1 32 +0 8 +0 1 +0 7 +cfn=(2950) +calls=1 0 +0 2381 +0 3 +cfn=(2998) +calls=1 0 +0 38 +0 6 + +fn=(3510) +0 1701 + +fn=(6520) +0 11 + +fn=(6538) +0 18 + +fn=(6540) +0 11 +cfn=(6542) +calls=1 0 +0 153 +0 6 + +fn=(6544) +0 14 +cfn=(6542) +calls=1 0 +0 104 + +fn=(6546) +0 19 +cob=(47) +cfi=(220) +cfn=(2566) +calls=1 0 +0 98 +0 1 +0 17 +cob=(47) +cfi=(220) +cfn=(2572) +calls=1 0 +0 990 +0 1 +0 16 +cob=(47) +cfi=(220) +cfn=(2166) +calls=1 0 +0 37 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2572) +calls=1 0 +0 990 +0 1 +0 23 +cfn=(6548) +calls=1 0 +0 490 +0 52 +cob=(47) +cfi=(220) +cfn=(5986) +calls=1 0 +0 118 +0 1 +0 6 +cfn=(6022) +calls=1 0 +0 32 +0 23 +cob=(2) +cfi=(18) +cfn=(4202) +calls=1 0 +0 9 +0 9 +cob=(47) +cfi=(220) +cfn=(4806) +calls=1 0 +0 55 +0 1 +0 18 +cob=(47) +cfi=(220) +cfn=(3230) +calls=1 0 +0 75 +0 1 +0 10 + +fn=(3628) +0 570 + +fn=(3652) +0 15 +cfn=(3654) +calls=1 0 +0 530 +0 14 +cfn=(3654) +calls=1 0 +0 131 +0 365 +cfn=(3658) +calls=1 0 +0 23 +0 5 +cfn=(3660) +calls=1 0 +0 3 +0 8 +cfn=(3662) +calls=1 0 +0 123 +0 4 +cfn=(3666) +calls=1 0 +0 5 +0 4 +cfn=(3668) +calls=1 0 +0 6 +0 4 +cfn=(3670) +calls=1 0 +0 4 +0 5 + +fn=(3674) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3676) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 221 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3680) +0 100 + +fn=(3682) +0 120 + +fn=(3700) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 219 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 225 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 10 + +fn=(3702) +0 19 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 512 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 11 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 4 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 2 +cfn=(2832) +calls=1 0 +0 110 +0 9 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 + +fn=(3714) +0 15 +cob=(47) +cfi=(220) +cfn=(3068) +calls=1 0 +0 16 +0 1 +0 11 + +fn=(3758) +0 12 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 15 +cob=(47) +cfi=(220) +cfn=(2160) +calls=1 0 +0 23 +0 1 +0 5 +cob=(3) +cfi=(221) +cfn=(1936) +calls=1 69 +0 72 +0 1 +0 3 + +fn=(3770) +0 6 +cfn=(3758) +calls=1 0 +0 117 +0 2 + +fn=(4508) +0 47 + +fn=(4640) +0 13 +cfn=(4642) +calls=1 0 +0 651 +0 6 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 202 +0 1 +0 12 +cfn=(4658) +calls=1 0 +0 8580 +0 8 + +fn=(4644) +0 17 +cob=(47) +cfi=(220) +cfn=(2154) +calls=1 0 +0 55 +0 1 +0 8 +cfn=(3060) +calls=1 0 +0 36 +0 23 + +fn=(4770) +0 15 +cob=(47) +cfi=(220) +cfn=(4532) +calls=1 0 +0 25 +0 1 +0 9 +cob=(47) +cfi=(220) +cfn=(4532) +calls=1 0 +0 25 +0 1 +0 10 + +fn=(4826) +0 18 + +fn=(4906) +0 45 +cfn=(4910) +calls=1 0 +0 84 +0 15 +cfn=(4912) +calls=1 0 +0 63278 +0 6 +cfn=(4912) +calls=1 0 +0 63305 +0 34 +cfn=(4920) +calls=2 0 +0 28132 +0 178 +cfn=(4922) +calls=2 0 +0 336 +0 8 +cfn=(4924) +calls=2 0 +0 432 +0 8 +cfn=(4924) +calls=2 0 +0 432 +0 8 +cfn=(4924) +calls=2 0 +0 432 +0 12 +cfn=(4924) +calls=2 0 +0 432 +0 16 +cfn=(4920) +calls=2 0 +0 84468 +0 8 +cfn=(4928) +calls=2 0 +0 184 +0 40 +cfn=(4930) +calls=2 0 +0 481130 +0 189 +cfn=(4908) +calls=1 0 +0 30 +0 16 +cfn=(4910) +calls=1 0 +0 84 +0 6 + +fn=(4950) +0 16 +cob=(3) +cfi=(339) +cfn=(4954) +calls=2 78 +0 12 +0 2 +0 14 + +fn=(4988) +0 8 +cfn=(4990) +calls=1 0 +0 1488663 +0 3 +cfn=(5064) +calls=1 0 +0 9793 +0 12 +cfn=(5068) +calls=1 0 +0 69155 +0 2 + +fn=(4994) +0 68 +cob=(5) +cfi=(180) +cfn=(714) +calls=4 64 +0 116 +0 4 +0 52 + +fn=(5006) +0 33 +cob=(3) +cfi=(204) +cfn=(952) +calls=1 167 +0 18 +0 1 +0 69 +cfn=(5008) +calls=1 0 +0 56 +0 2 +cfn=(5008) +calls=1 0 +0 56 +0 3 +cfn=(5010) +calls=1 0 +0 99 +0 21 + +fn=(5038) +0 38 +cfn=(5040) +calls=1 0 +0 90 +0 9 +cfn=(5042) +calls=1 0 +0 42655 +0 6 +cfn=(4982) +calls=1 0 +0 175 +0 10 + +fn=(5040) +0 180 + +fn=(5928) +0 17 +cfn=(4734) +calls=1 0 +0 124 +0 3 +cfn=(4546) +calls=1 0 +0 348 +0 9 + +fn=(6028) +0 68 +cfn=(6030) boost::signals2::detail::connection_body >, boost::signals2::slot, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int), boost::function, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&, unsigned int)> >, boost::signals2::mutex>::lock() +calls=1 0 +0 46 +0 43 +cfn=(6032) +calls=1 0 +0 36 +0 2 +cfn=(4504) +calls=1 0 +0 34 +0 15 +cfn=(6030) +calls=1 0 +0 46 +0 8 +cfn=(6212) +calls=1 0 +0 25 +0 4 +cfn=(6032) +calls=1 0 +0 36 +0 2 +cfn=(4504) +calls=1 0 +0 34 +0 33 + +fn=(6030) +0 18 +cob=(5) +cfi=(180) +cfn=(714) +calls=2 64 +0 58 +0 2 +0 14 + +fn=(6044) +0 120 +cfn=(6046) +calls=4 0 +0 48 +0 16 +cfn=(4938) +calls=4 0 +0 123 +0 40 +cob=(5) +cfi=(180) +cfn=(714) +calls=4 64 +0 116 +0 4 +0 48 +cfn=(3388) +calls=4 0 +0 84 +0 16 +cfn=(6066) DateTimeStrFormat[abi:cxx11](char const*, long) +calls=4 0 +0 115284 +0 24 +cob=(3) +cfi=(357) +cfn=(6180) +calls=4 25 +0 3271 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 36 +cob=(3) +cfi=(362) +cfn=(6206) +calls=4 31 +0 956 +0 4 +0 12 +cob=(5) +cfi=(182) +cfn=(724) +calls=4 356 +0 76 +0 4 +0 17 +cfn=(6048) +calls=1 0 +0 1630 +0 2 +cfn=(4944) +calls=1 0 +0 96 +0 13 + +fn=(6066) +0 72 +cfn=(2872) +calls=4 0 +0 224 +0 12 +cfn=(2872) +calls=4 0 +0 224 +0 12 +cfn=(2872) +calls=4 0 +0 224 +0 12 +cfn=(2872) +calls=4 0 +0 224 +0 44 +cfn=(2872) +calls=4 0 +0 296 +0 24 +cfn=(2872) +calls=8 0 +0 608 +0 36 +cfn=(6068) +calls=12 0 +0 2886 +0 112 +cfn=(6072) +calls=4 0 +0 4741 +0 16 +cob=(47) +cfi=(220) +cfn=(2154) +calls=4 0 +0 381 +0 4 +0 20 +cfn=(6074) +calls=4 0 +0 2993 +0 16 +cfn=(6074) +calls=4 0 +0 1358 +0 20 +cfn=(6076) +calls=4 0 +0 784 +0 28 +cfn=(6078) boost::date_time::date_facet > >::date_facet(char const*, boost::date_time::period_formatter > >, boost::date_time::special_values_formatter > >, boost::date_time::date_generator_formatter > >, unsigned long) +calls=4 0 +0 6599 +0 8 +cfn=(6080) +calls=4 0 +0 116 +0 8 +cfn=(6082) +calls=4 0 +0 536 +0 8 +cfn=(6082) +calls=4 0 +0 704 +0 24 +cfn=(2872) +calls=4 0 +0 312 +0 8 +cob=(3) +cfi=(169) +cfn=(662) +calls=4 42 +0 64 +0 4 +0 32 +cob=(47) +cfi=(220) +cfn=(3816) +calls=4 0 +0 176 +0 4 +0 60 +cob=(47) +cfi=(220) +cfn=(4480) +calls=4 0 +0 104 +0 4 +0 16 +cfn=(6084) +calls=4 0 +0 13193 +0 8 +cfn=(6082) +calls=4 0 +0 704 +0 8 +cfn=(6082) +calls=4 0 +0 536 +0 8 +cfn=(6080) +calls=4 0 +0 116 +0 8 +cob=(47) +cfi=(220) +cfn=(6096) +calls=4 0 +0 12732 +0 4 +0 20 +cob=(47) +cfi=(220) +cfn=(6100) +calls=4 0 +0 5810 +0 4 +0 8 +cob=(2) +cfi=(18) +cfn=(4202) +calls=4 0 +0 36 +0 24 +cfn=(3510) +calls=4 0 +0 252 +0 28 +cfn=(6114) +calls=4 0 +0 46679 +0 12 +cob=(47) +cfi=(220) +cfn=(6170) +calls=4 0 +0 1244 +0 4 +0 52 +cob=(47) +cfi=(220) +cfn=(3210) +calls=4 0 +0 344 +0 4 +0 16 +cob=(2) +cfi=(18) +cfn=(4202) +calls=4 0 +0 60 +0 76 +cob=(47) +cfi=(220) +cfn=(4806) +calls=4 0 +0 244 +0 4 +0 8 +cob=(2) +cfi=(18) +cfn=(4202) +calls=4 0 +0 8784 +0 96 + +fn=(6078) +0 88 +cfn=(2872) +calls=4 0 +0 596 +0 12 +cfn=(2872) +calls=4 0 +0 312 +0 12 +cfn=(2872) +calls=4 0 +0 312 +0 16 +cfn=(6076) +calls=4 0 +0 784 +0 16 +cfn=(6074) +calls=4 0 +0 2993 +0 12 +cfn=(6074) +calls=4 0 +0 1358 +0 88 + +fn=(6126) +0 2120 + +fn=(6234) +0 4 +cob=(5) +cfi=(363) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_key_create.c +cfn=(6238) pthread_key_create +calls=1 26 +0 18 +0 1 + +fn=(6286) +0 8 +cfn=(6038) +calls=1 0 +0 29 +0 5 +cfn=(6288) +calls=1 0 +0 20 +0 9 +cfn=(6290) +calls=1 0 +0 387 +0 6 + +fn=(6288) +0 40 + +fn=(6332) +0 5 +cfn=(6232) +calls=1 0 +0 36 +0 6 + +fn=(6408) +0 54 + +fn=(6476) +0 36 +cfn=(6478) +calls=2 0 +0 36 +0 14 +cfn=(6370) +calls=2 0 +0 138 +0 36 + +fn=(6486) +0 11 +cfn=(6038) +calls=1 0 +0 29 +0 23 +cfn=(6038) +calls=1 0 +0 29 +0 12 + +fn=(6498) +0 15 +cfn=(6448) +calls=1 0 +0 85 +0 16 + +fn=(6500) +0 48 + +fn=(6514) +0 66 + +fn=(6564) +0 260 +cob=(5) +cfi=(370) +cfn=(6336) +calls=26 27 +0 312 +0 26 +0 260 + +fn=(6566) +0 9 +cob=(5) +cfi=(267) +cfn=(2948) +calls=1 26 +0 9 +0 1 +0 5 + +fn=(6588) +0 11 +cfn=(6590) +calls=1 0 +0 16 + +fn=(6598) +0 22 + +fn=(6606) +0 22 + +fn=(6614) +0 11 +cfn=(6616) +calls=1 0 +0 16 + +fn=(6626) +0 11 +cfn=(6628) +calls=1 0 +0 18 + +fn=(6638) +0 18 + +fn=(6660) +0 5 + +fn=(6686) +0 5 +cfn=(2998) +calls=1 0 +0 670 +0 5 +cfn=(2998) +calls=1 0 +0 34 +0 6 + +fn=(6694) +0 13 + +fn=(6696) +0 14 + +fn=(6730) +0 18 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 137 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 164 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 5 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 132 +0 1 +0 4 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 20 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 12 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 8 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 106 +0 1 +0 31 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 636 +0 6 +0 53 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 636 +0 6 +0 30 +cob=(47) +cfi=(220) +cfn=(3210) +calls=6 0 +0 636 +0 6 +0 23 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 +0 13 +cob=(47) +cfi=(220) +cfn=(3210) +calls=1 0 +0 86 +0 1 + +fn=(6736) +0 11 +cfn=(6738) +calls=1 0 +0 18 + +fn=(6746) +0 18 +cfn=(6748) +calls=2 0 +0 32 +0 20 + +fn=(6750) +0 13 + +fn=(6754) +0 26 + +fn=(6762) +0 39 +cfn=(2707) +calls=3 0 +0 879 +0 12 +cfn=(2707) +calls=3 0 +0 2631 +0 24 +cob=(47) +cfi=(220) +cfn=(4768) +calls=3 0 +0 330 +0 3 + +fn=(6768) +0 39 +cfn=(2707) +calls=3 0 +0 819 +0 12 +cfn=(2707) +calls=3 0 +0 960 +0 24 +cob=(47) +cfi=(220) +cfn=(4768) +calls=3 0 +0 330 +0 3 + +fn=(6790) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6806) +0 44 +cob=(47) +cfi=(220) +cfn=(4768) +calls=4 0 +0 440 +0 4 + +fn=(6838) +0 13 +cfn=(2707) +calls=1 0 +0 273 +0 4 +cfn=(2707) +calls=1 0 +0 320 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6852) +0 12 +cfn=(3108) +calls=1 0 +0 16 +0 2 +cfn=(3110) +calls=1 0 +0 23 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6860) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(6878) +0 14 +cfn=(2706) +calls=1 0 +0 1454 +0 5 +cfn=(2706) +calls=1 0 +0 1454 +0 6 +cfn=(2706) +calls=1 0 +0 1454 +0 11 +cfn=(2706) +calls=1 0 +0 1454 + +fn=(6894) +0 13 + +fn=(7020) +0 11 +cfn=(7022) +calls=1 0 +0 21 + +fn=(7030) +0 16 + +fn=(7034) +0 15 + +fn=(7066) +0 16 + +fn=(7072) +0 11 +cfn=(6500) +calls=1 0 +0 16 + +fn=(7092) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7094) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7096) +0 13 +cfn=(2707) +calls=1 0 +0 293 +0 4 +cfn=(2707) +calls=1 0 +0 877 +0 8 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7106) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7166) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7172) +0 14 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +fn=(7184) +0 11 +cob=(47) +cfi=(220) +cfn=(4768) +calls=1 0 +0 110 +0 1 + +ob=(5) +fl=(266) +fn=(2944) +25 3 ++1 18 ++1 3 + +fl=(367) +fn=(6326) __condvar_cancel_waiting +81 3 +fi=(368) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_cond_common.c +256 1 +fe=(367) +81 6 +fi=(368) +256 1 ++1 2 ++2 4 +49 1 +fe=(367) ++39 1 ++1 2 +fi=(368) +301 2 +fe=(367) +97 3 ++5 1 +-5 1 ++5 2 ++28 2 +fi=(368) +291 6 ++1 1 +-1 2 +fe=(367) +145 6 + +fn=(6314) +645 12 ++3 2 ++5 4 ++2 1 +-1 1 +388 1 +fi=(368) +37 2 +fe=(367) +406 1 +fi=(368) +37 1 +fe=(367) +407 1 +-1 1 ++1 1 ++4 1 +-5 1 ++5 1 +fi=(368) +-85 5 +fe=(367) ++95 3 +cfi=(182) +cfn=(6316) __pthread_mutex_unlock_usercnt +calls=1 38 +* 20 +* 1 ++1 2 ++12 6 ++33 2 +fi=(229) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/nptl/futex-internal.h +320 1 +fe=(367) +486 1 +fi=(229) +320 1 +fe=(367) +486 1 +fi=(229) +320 4 +fe=(367) +471 2 +54 5 +627 2 +cfi=(180) +cfn=(6330) __pthread_mutex_cond_lock +calls=1 64 +* 25 +* 1 ++2 2 ++28 12 +486 3 ++1 3 +fi=(368) +49 1 +fe=(367) +488 3 ++11 1 ++1 2 ++3 1 +-3 1 ++3 3 +-4 1 ++3 1 +-2 1 ++2 1 ++1 1 +cfi=(228) /build/glibc-sMfBJT/glibc-2.31/nptl/cleanup_compat.c +cfn=(2180) _pthread_cleanup_push +calls=1 26 +* 7 ++13 3 +fi=(229) +319 1 +cfi=(369) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/x86_64/cancellation.S +cfn=(6322) __pthread_enable_asynccancel +calls=1 47 +* 12 ++1 3 +-1 1 ++1 7 +fe=(367) +526 3 +cfi=(228) +cfn=(2220) _pthread_cleanup_pop +calls=1 40 +* 6 +153 4 +536 5 +cfn=(6326) +calls=1 81 +* 47 ++1 1 ++1 1 +fi=(229) +323 3 +cfi=(369) +cfn=(6324) __pthread_disable_asynccancel +calls=1 76 +* 13 ++1 3 +fe=(367) + +fl=(364) +fn=(6242) +25 4 ++5 8 ++1 20 ++24 4 ++1 8 ++9 8 + +fl=(370) +fn=(6336) +27 127 ++1 127 ++4 381 ++2 127 ++1 127 +-1 254 ++6 127 ++2 127 ++1 127 + +fl=(369) +fn=(6324) +76 1 ++1 1 ++1 1 ++2 1 ++1 1 ++1 1 ++1 1 ++2 1 ++2 1 ++1 1 ++1 1 ++1 1 ++1 1 + +fn=(6322) +47 1 ++1 1 ++1 1 ++1 1 ++1 1 ++1 1 ++2 1 ++2 1 ++2 1 ++1 1 ++1 1 ++2 1 + +fl=(180) +fn=(714) +64 85 ++3 255 ++2 85 ++2 170 +-7 170 ++11 170 ++2 129 ++3 172 ++1 129 ++75 85 ++3 85 ++2 85 ++3 85 ++2 85 ++1 255 +-83 84 ++11 168 ++4 42 ++3 84 ++13 84 ++2 126 ++1 84 + +fn=(6330) +64 1 ++3 3 ++2 1 ++2 2 +-7 2 ++11 2 ++5 4 ++1 3 ++75 1 ++3 1 ++5 1 ++2 1 ++1 3 + +fl=(173) +fn=(690) +24 639 ++1 71 +fi=(174) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_rwlock_common.c +604 284 ++19 426 ++2 71 +779 71 +625 142 +779 71 ++5 213 ++6 18 ++6 24 ++7 3 +948 6 ++2 3 +fe=(173) +28 3 ++2 24 +fi=(174) +948 136 ++2 68 +fe=(173) +28 68 ++2 544 +fi=(174) +789 6 +fe=(173) + +fl=(258) +fn=(2858) +29 9 ++5 9 +-3 18 ++10 9 ++1 9 +-1 9 ++1 9 ++2 9 +-2 9 ++3 9 + +fl=(338) +fn=(4948) +40 32 ++1 4 ++2 4 ++1 12 ++45 36 + +fl=(371) +fn=(6340) +43 18 ++1 9 ++6 63 +fi=(368) +326 18 +fe=(371) +52 9 +fi=(229) ++89 9 +fi=(368) +326 27 +fe=(371) +52 27 ++8 27 + +fl=(365) +fn=(6250) +36 8 ++1 1 ++5 1 ++1 3 ++54 9 + +fl=(366) +fn=(6270) +36 7 ++2 1 ++4 9 +460 7 +49 2 ++11 4 ++5 1 ++1 1 +-3 1 ++1 1 ++2 1 + +fl=(182) +fn=(724) +356 86 +41 258 ++1 258 ++5 172 ++8 86 ++3 86 +-6 86 ++6 344 ++2 86 +358 172 +64 86 +-6 7 ++12 172 ++4 129 ++3 129 + +fn=(6316) +38 1 ++3 3 ++1 3 ++5 2 ++5 1 ++1 2 ++5 5 ++2 1 ++34 2 + +fl=(277) +fn=(3542) +25 26 ++3 26 ++1 26 +-3 26 ++4 52 ++2 78 ++3 78 ++17 78 ++2 26 ++1 26 + +fn=(3546) +62 26 ++3 26 +-2 26 ++2 26 ++3 78 ++23 52 ++1 26 + +fl=(228) +fn=(2220) +40 5 ++3 10 ++4 10 ++2 5 + +fn=(2180) +26 5 ++3 5 ++1 5 ++1 10 ++2 5 ++1 5 + +fl=(260) +fn=(2866) +24 9 ++3 18 + +fl=(380) /build/glibc-sMfBJT/glibc-2.31/nptl/sem_destroy.c +fn=(8314) sem_destroy@@GLIBC_2.2.5 +26 1 ++5 2 + +fl=(187) +fn=(748) +31 370 ++1 74 ++7 74 ++1 74 +fi=(174) +221 296 +fe=(187) +39 148 +fi=(174) +232 3 ++4 3 ++4 9 ++14 9 ++5 6 ++16 9 +fe=(187) +45 370 +fi=(174) +243 12 ++1 6 +531 71 ++4 213 ++3 71 +-2 71 ++2 142 ++21 71 ++2 568 ++8 142 ++13 142 +fe=(187) + +fl=(227) +fn=(2178) __pthread_once_slow +68 3 +fi=(229) ++73 6 +fe=(227) +-73 24 ++8 3 ++4 6 ++52 27 +-44 6 ++4 6 ++9 6 ++13 15 +cfi=(228) +cfn=(2180) +calls=3 -88 +* 21 ++2 3 +cob=(46) +cfi=(219) +cfn=(5504) +calls=1 0 +* 19 +cob=(3) +cfi=(314) +cfn=(3968) +calls=1 539 +* 592 +cob=(47) +cfi=(220) +cfn=(2182) +calls=1 0 +* 76284 ++2 9 +cfi=(228) +cfn=(2220) +calls=3 -78 +* 18 +fi=(229) +364 15 +fe=(227) +124 3 +fi=(229) +364 9 +fe=(227) + +fn=(2179) __pthread_once_slow'2 +68 1 +fi=(229) ++73 2 +fe=(227) +-73 8 ++8 1 ++4 2 ++52 9 +-44 2 ++4 2 ++9 2 ++13 5 +cfi=(228) +cfn=(2180) +calls=1 -88 +* 7 ++2 1 +cob=(47) +cfi=(220) +cfn=(2208) +calls=1 0 +* 2141 ++2 3 +cfi=(228) +cfn=(2220) +calls=1 -78 +* 6 +fi=(229) +364 5 +fe=(227) +124 1 +fi=(229) +364 3 +fe=(227) + +fn=(2176) +136 127 ++3 127 ++1 254 ++4 248 +-1 3 +cfn=(2178) +calls=3 -75 +* 77075 + +fn=(2177) pthread_once'2 +136 14 ++3 14 ++1 28 ++4 26 +-1 1 +cfn=(2179) +calls=1 -75 +* 2201 + +fl=(206) +fn=(1262) +53 1260 ++12 252 ++3 400 ++21 320 ++3 240 ++2 160 ++8 160 ++3 160 ++31 320 ++4 80 ++9 80 ++2 80 ++1 240 +-12 46 ++9 46 ++2 46 ++1 894 +-47 160 +-16 92 ++3 46 +-3 138 + +fl=(254) +fn=(2836) +25 80 ++11 80 ++3 160 + +fl=(137) /build/glibc-sMfBJT/glibc-2.31/nptl/pthread_mutex_conf.c +fn=(412) __pthread_tunables_init +42 2 ++1 2 +-1 3 ++1 2 +cob=(2) +cfi=(18) +cfn=(414) 0x0000000004c2ea10 +calls=1 -43 +* 1543 ++2 5 + +fl=(256) +fn=(2844) +24 80 ++2 160 + +fl=(263) +fn=(2932) +37 4 ++3 2 +-3 16 ++3 12 ++8 20 ++2 14 + +fl=(343) +fn=(5136) +24 21 ++1 3 +fi=(174) +299 12 ++12 6 ++42 6 ++2 3 ++15 6 ++20 6 +fi=(229) +-22 3 +fe=(343) +28 3 ++2 18 +fi=(174) +396 4 +-1 4 ++7 8 ++11 10 +fe=(343) + +fl=(363) +fn=(6238) +26 1 ++2 3 ++2 1 ++2 4 ++2 3 ++4 3 ++6 1 +-3 1 ++3 1 + +fl=(267) +fn=(2948) +26 2 ++1 14 ++1 2 + +fl=(255) +fn=(2840) +25 80 ++4 80 +-1 160 ++5 240 ++5 240 ++2 80 +-2 80 ++3 80 + +fl=(127) /build/glibc-sMfBJT/glibc-2.31/nptl/nptl-init.c +fn=(374) __pthread_initialize_minimal +244 7 ++2 1 +fi=(128) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/pthread-pids.h +29 1 +fe=(127) +244 4 +fi=(128) +29 3 +fe=(127) +248 2 ++1 1 ++5 1 ++8 1 +-4 1 ++4 1 +-8 3 ++8 1 ++10 3 ++4 1 +-1 1 +fi=(394) /build/glibc-sMfBJT/glibc-2.31/nptl/../include/list.h +46 1 +-2 1 ++4 1 +fe=(127) +280 2 ++3 3 ++7 3 +-1 18 ++1 1 +-2 1 ++2 1 +-2 1 ++2 1 +cfi=(129) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/sigaction.c +cfn=(378) __libc_sigaction +calls=1 43 +* 51 ++5 3 +-2 1 ++1 1 +-1 1 ++2 1 +cfi=(129) +cfn=(378) +calls=1 43 +* 51 ++9 3 +-3 1 ++3 1 +-3 1 ++3 2 ++7 3 +cob=(2) +cfi=(18) +cfn=(380) 0x0000000004c2ea30 +calls=1 0 +* 1573 ++3 4 ++2 1 ++2 2 ++5 2 +-5 4 ++5 1 +cob=(2) +cfi=(18) +cfn=(394) 0x0000000004c2e5d0 +calls=1 0 +* 958 +* 3 ++1 3 ++4 4 ++7 2 ++1 3 ++5 6 ++1 1 +-1 1 ++1 3 ++1 1 ++1 1 +-1 1 ++2 4 ++5 2 ++2 1 +-2 1 ++3 1 ++2 1 +-5 1 ++4 3 ++3 1 ++3 1 +-3 1 ++3 2 ++8 1 +-8 1 ++8 2 +-8 2 ++8 1 +cob=(2) +cfi=(18) +cfn=(400) 0x0000000004c2e940 +calls=1 0 +* 1375 ++4 1 +-6 1 ++9 1 +cfi=(137) +cfn=(412) +calls=1 42 +* 1557 ++2 8 + +fl=(331) +fn=(4848) +23 3 ++1 9 +fi=(332) /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/internal-signals.h ++22 3 +fe=(331) +-22 6 ++6 3 +cfi=(129) +cfn=(378) +calls=3 +13 +* 153 + +fl=(257) +fn=(2854) +25 9 ++7 9 ++3 18 + +fl=(262) +fn=(2924) +25 787 ++1 1574 ++1 787 + +fl=(129) +fn=(378) +43 30 ++5 10 ++2 5 ++1 5 ++7 5 +-7 20 +-1 5 ++3 5 +-2 25 ++7 5 +-5 5 ++5 5 +-7 5 ++2 5 +-2 5 ++2 15 ++5 10 +-7 20 ++7 30 ++4 10 ++8 30 + +fl=(153) /build/glibc-sMfBJT/glibc-2.31/nptl/sem_init.c +fn=(504) sem_init@@GLIBC_2.2.5 +29 1 ++4 2 ++18 1 ++9 1 +-9 1 ++9 2 ++2 1 +-3 1 ++4 1 + +fl=(139) +fn=(426) +105 2 ++5 1 +-5 1 ++5 1 +-5 3 ++5 3 +cob=(2) +cfi=(18) +cfn=(414) +calls=1 0 +* 21 ++2 4 +cob=(2) +cfi=(18) +cfn=(414) +calls=1 0 +* 21 ++2 4 +cob=(2) +cfi=(18) +cfn=(414) +calls=1 0 +* 21 ++2 4 +cob=(2) +cfi=(18) +cfn=(414) +calls=1 0 +* 21 ++2 4 +cob=(2) +cfi=(18) +cfn=(414) +calls=1 0 +* 21 ++4 3 ++1 1 ++1 6 + +fl=(138) +fn=(8386) 0x0000000000006b10 +0 5 + +fn=(420) +0 12 + +fn=(8376) +0 9 +cob=(2) +cfi=(18) +cfn=(8382) 0x0000000004c2e580 +calls=1 0 +0 143 +0 1 +cfn=(8386) +calls=1 0 +0 5 +0 3 + +fl=(259) +fn=(2862) +28 9 ++5 36 ++6 54 ++6 18 ++1 9 ++2 9 ++3 18 + +fl=(348) +fn=(5944) +34 27612 ++3 23010 ++3 9204 +cob=(2) +cfi=(18) +cfn=(5946) 0x0000000004c2e890 +calls=4602 -40 +* 203500 ++1 23010 + +ob=(22) +fl=(166) +fn=(632) +0 12 + +fn=(8056) +0 3 +cfn=(8058) 0x000000000002ed30 +calls=1 0 +0 12 +0 10 +cob=(2) +cfi=(18) +cfn=(8068) 0x00000000059bc7a0 +calls=1 0 +0 228 +0 5 +cob=(2) +cfi=(18) +cfn=(8072) 0x00000000059bc7d0 +calls=1 0 +0 14 +0 3 +cob=(2) +cfi=(18) +cfn=(8072) +calls=1 0 +0 14 + +fn=(8086) 0x000000000002bc20 +0 5 + +fn=(644) 0x00000000000c1590 +0 10 +cfn=(646) 0x00000000000c1140 +calls=1 0 +0 537 +0 4 +cob=(2) +cfi=(18) +cfn=(656) 0x00000000059bc630 +calls=1 0 +0 427 +0 15 + +fn=(638) +0 5 +cfn=(644) +calls=1 0 +0 993 +0 10 +cob=(2) +cfi=(18) +cfn=(678) 0x00000000059bc7e0 +calls=1 0 +0 79444 +0 12 +cob=(2) +cfi=(18) +cfn=(756) 0x00000000059bc880 +calls=1 0 +0 43 + +fn=(646) +0 5 +cob=(2) +cfi=(18) +cfn=(648) 0x00000000059bca50 +calls=1 0 +0 100 +0 5 +cob=(2) +cfi=(18) +cfn=(656) +calls=1 0 +0 427 + +fn=(8058) +0 12 + +fn=(8076) +0 9 +cob=(2) +cfi=(18) +cfn=(8082) 0x00000000059bc610 +calls=1 0 +0 168 +0 1 +cfn=(8086) +calls=1 0 +0 5 +0 3 + +ob=(42) +fl=(215) +fn=(7484) +0 9 +cob=(2) +cfi=(18) +cfn=(7490) 0x0000000004f191f0 +calls=1 0 +0 157 +0 1 +cfn=(7494) 0x00000000000023c0 +calls=1 0 +0 5 +0 3 + +fn=(1638) +0 12 + +fn=(7494) +0 5 + +ob=(2) +fl=(18) +fn=(548) +0 7 + +fn=(716) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1612 +0 5 + +fn=(728) +0 24 +cob=(1) +cfi=(8) +cfn=(26) +calls=11 368 +0 218 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1494 +0 5 + +fn=(758) +0 7 + +fn=(838) +0 7 + +fn=(932) +0 2 +cob=(3) +cfi=(203) +cfn=(934) +calls=1 43 +0 35 + +fn=(976) +0 2530 +cob=(3) +cfi=(202) +cfn=(912) +calls=1265 225 +0 17337 + +fn=(1086) +0 532 +cob=(3) +cfi=(171) +cfn=(698) +calls=266 79 +0 6322 + +fn=(1202) +0 2532 +cob=(3) +cfi=(176) +cfn=(1204) +calls=1266 3087 +0 153587 + +fn=(1534) +0 7 + +fn=(1954) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 747 +0 5 + +fn=(1960) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 765 +0 5 + +fn=(2184) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 75478 +0 5 + +fn=(2230) +0 1010 +cob=(47) +cfi=(220) +cfn=(2234) +calls=504 0 +0 3456 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 775 +0 5 + +fn=(2568) +0 56 +cob=(47) +cfi=(220) +cfn=(2572) +calls=27 0 +0 26730 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 14256 +0 5 + +fn=(2598) +0 76 +cob=(47) +cfi=(220) +cfn=(2602) +calls=37 0 +0 6438 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2785 +0 5 + +fn=(2812) +0 56 +cob=(3) +cfi=(248) +cfn=(2814) +calls=28 40 +0 609 + +fn=(5866) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 3554 +0 5 + +fn=(3792) +0 344 +cob=(3) +cfi=(169) +cfn=(662) +calls=171 42 +0 3631 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 897 +0 5 + +fn=(3828) +0 4 +cob=(47) +cfi=(220) +cfn=(3832) +calls=1 0 +0 89967 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 140020 +0 5 + +fn=(3950) +0 4 +cob=(47) +cfi=(220) +cfn=(3954) +calls=1 0 +0 1323 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2585 +0 5 + +fn=(8018) +0 4 + +fn=(8082) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 166 + +fn=(4240) +0 8 +cob=(47) +cfi=(220) +cfn=(4239) +calls=1 0 +0 15 +cob=(47) +cfi=(220) +cfn=(4238) +calls=2 0 +0 30 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 846 +0 5 + +fn=(4252) +0 4 +cob=(47) +cfi=(220) +cfn=(4251) +calls=1 0 +0 501 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2233 +0 5 + +fn=(4308) +0 4 +cob=(47) +cfi=(220) +cfn=(4307) +calls=1 0 +0 335 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1191 +0 5 + +fn=(4320) +0 8 +cob=(47) +cfi=(220) +cfn=(4319) +calls=1 0 +0 15 +cob=(47) +cfi=(220) +cfn=(4318) +calls=2 0 +0 30 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 830 +0 5 + +fn=(4626) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1360 +0 5 + +fn=(5178) +0 6 +cob=(1) +cfi=(346) +cfn=(5182) +calls=2 29 +0 24 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1484 +0 5 + +fn=(5946) +0 9204 +cob=(3) +cfi=(349) +cfn=(5950) +calls=4601 38 +0 193242 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1049 +0 5 + +fn=(5998) +0 46 +cob=(47) +cfi=(220) +cfn=(6002) +calls=22 0 +0 220 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1175 +0 5 + +fn=(6374) +0 6 +cob=(47) +cfi=(220) +cfn=(6378) +calls=2 0 +0 666 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1254 +0 5 + +fn=(6426) +0 36 +cob=(47) +cfi=(220) +cfn=(6430) +calls=17 0 +0 3485 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1588 +0 5 + +fn=(7202) +0 6 +cob=(47) +cfi=(220) +cfn=(7206) +calls=2 0 +0 182 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1659 +0 5 + +fn=(7274) +0 4 + +fn=(7578) 0x00000000052eff30 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(8244) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8364) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(480) +0 7 + +fn=(528) +0 7 + +fn=(618) +0 7 + +fn=(660) +0 1428 +cob=(3) +cfi=(169) +cfn=(662) +calls=714 42 +0 13127 + +fn=(818) +0 7 + +fn=(958) +0 1340 +cob=(3) +cfi=(176) +cfn=(704) +calls=670 3023 +0 111882 + +fn=(970) +0 3062 +cob=(3) +cfi=(169) +cfn=(662) +calls=1531 42 +0 26894 + +fn=(1078) +0 532 +cob=(3) +cfi=(172) +cfn=(688) +calls=266 44 +0 5896 + +fn=(1514) +0 7 + +fn=(1948) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 2378 +0 5 + +fn=(2162) +0 152 +cob=(47) +cfi=(220) +cfn=(2166) +calls=75 0 +0 2775 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 77885 +0 5 + +fn=(2260) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2225 +0 5 + +fn=(2396) +0 6 +cob=(47) +cfi=(220) +cfn=(2400) +calls=2 0 +0 2094 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1257 +0 5 + +fn=(2604) +0 650 +cob=(47) +cfi=(220) +cfn=(2608) +calls=324 0 +0 35090 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1853 +0 5 + +fn=(2638) +0 76 +cob=(47) +cfi=(220) +cfn=(2642) +calls=37 0 +0 4477 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1368 +0 5 + +fn=(3800) +0 8 +cob=(47) +cfi=(220) +cfn=(3804) +calls=3 0 +0 205 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1178 +0 5 + +fn=(3842) +0 26 +cob=(3) +cfi=(172) +cfn=(3844) +calls=13 44 +0 258 + +fn=(3848) +0 18 +cob=(3) +cfi=(202) +cfn=(3850) +calls=9 212 +0 159 + +fn=(8128) +0 4 + +fn=(8200) +0 4 + +fn=(4212) +0 4 +cob=(47) +cfi=(220) +cfn=(4211) +calls=1 0 +0 296 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1748 +0 5 + +fn=(4234) +0 238 +cob=(47) +cfi=(220) +cfn=(4236) +calls=119 0 +0 12414 + +fn=(4270) +0 8 +cob=(47) +cfi=(220) +cfn=(4269) +calls=1 0 +0 15 +cob=(47) +cfi=(220) +cfn=(4268) +calls=2 0 +0 30 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 878 +0 5 + +fn=(4608) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 2410 +0 5 + +fn=(4756) +0 6 +cob=(47) +cfi=(220) +cfn=(4634) +calls=2 0 +0 14 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1054 +0 5 + +fn=(4794) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1368 +0 5 + +fn=(5172) +0 4 +cob=(47) +cfi=(220) +cfn=(5176) +calls=1 0 +0 21 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2218 +0 5 + +fn=(5640) +0 6 +cob=(46) +cfi=(219) +cfn=(5644) +calls=2 0 +0 6 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 992 +0 5 + +fn=(6010) +0 22 +cob=(47) +cfi=(220) +cfn=(6014) +calls=10 0 +0 450 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1202 +0 5 + +fn=(7256) +0 4 + +fn=(7338) +0 4 + +fn=(7382) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7508) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7536) +0 4 + +fn=(7550) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7624) +0 4 + +fn=(7830) +0 1 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 173 + +fn=(7866) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(7894) +0 4 + +fn=(7920) 0x0000000005748220 +0 1 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(8290) +0 4 + +fn=(8352) +0 4 + +fn=(8410) +0 4 + +fn=(92) +0 96 +cob=(1) +cfi=(19) +cfn=(94) +calls=48 109 +0 240 + +fn=(394) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 951 +0 5 + +fn=(432) +0 2 +cob=(3) +cfi=(142) +cfn=(434) +calls=1 42 +0 43 + +fn=(508) +0 7 + +fn=(598) +0 7 + +fn=(648) +0 2 +cob=(3) +cfi=(167) +cfn=(650) +calls=1 25 +0 98 + +fn=(798) +0 7 + +fn=(946) +0 1192 +cob=(3) +cfi=(176) +cfn=(948) +calls=596 3366 +0 145991 + +fn=(1080) +0 266 +cob=(3) +cfi=(202) +cfn=(1082) +calls=133 219 +0 2527 + +fn=(1564) +0 6 +cob=(40) +cfi=(213) +cfn=(1568) 0x00000000000e10b0 +calls=1 0 +0 542 +0 2 + +fn=(1688) +0 2 +cob=(40) +cfi=(213) +cfn=(1690) OpenSSL_version_num +calls=1 0 +0 3 + +fn=(1922) +0 4 +cob=(47) +cfi=(220) +cfn=(1928) +calls=1 0 +0 5 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 773 +0 5 + +fn=(2104) +0 7 + +fn=(2210) +0 6 +cob=(47) +cfi=(220) +cfn=(2214) +calls=2 0 +0 41174 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2129 +0 5 + +fn=(2374) +0 6 +cob=(47) +cfi=(220) +cfn=(2378) +calls=2 0 +0 884 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1462 +0 5 + +fn=(2410) +0 6 +cob=(47) +cfi=(220) +cfn=(2414) +calls=2 0 +0 2033 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1273 +0 5 + +fn=(2478) +0 6 +cob=(47) +cfi=(220) +cfn=(2482) +calls=2 0 +0 3344 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1285 +0 5 + +fn=(2612) +0 266 +cob=(3) +cfi=(171) +cfn=(698) +calls=132 79 +0 2892 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1039 +0 5 + +fn=(2624) +0 76 +cob=(47) +cfi=(220) +cfn=(2628) +calls=37 0 +0 4477 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1368 +0 5 + +fn=(2644) +0 76 +cob=(47) +cfi=(220) +cfn=(2648) +calls=37 0 +0 4403 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1397 +0 5 + +fn=(2656) +0 8 +cob=(47) +cfi=(220) +cfn=(2660) +calls=3 0 +0 2289 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 8762 +0 5 + +fn=(110) +0 338 +cob=(1) +cfi=(36) +cfn=(112) +calls=169 175 +0 728160 + +fn=(3788) +0 56 +cob=(3) +cfi=(168) +cfn=(658) +calls=27 34 +0 14808 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1714 +0 5 + +fn=(3796) +0 44 +cob=(47) +cfi=(220) +cfn=(3230) +calls=21 0 +0 3534 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1243 +0 5 + +fn=(3860) +0 818 +cob=(3) +cfi=(309) +cfn=(3862) +calls=409 50 +0 11220 + +fn=(8036) +0 4 + +fn=(8068) +0 2 +cob=(3) +cfi=(326) +cfn=(4200) +calls=1 33 +0 226 + +fn=(8100) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8172) +0 1 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(4196) +0 64 +cob=(3) +cfi=(326) +cfn=(4200) +calls=31 33 +0 10199 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1144 +0 5 + +fn=(4296) +0 4 +cob=(47) +cfi=(220) +cfn=(4295) +calls=1 0 +0 386 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1215 +0 5 + +fn=(4344) +0 8 +cob=(47) +cfi=(220) +cfn=(4343) +calls=1 0 +0 15 +cob=(47) +cfi=(220) +cfn=(4342) +calls=2 0 +0 30 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 870 +0 5 + +fn=(4350) +0 4 +cob=(47) +cfi=(220) +cfn=(4349) +calls=1 0 +0 531 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2285 +0 5 + +fn=(4366) +0 4 +cob=(47) +cfi=(220) +cfn=(4365) +calls=1 0 +0 548 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2188 +0 5 + +fn=(4372) +0 4 +cob=(47) +cfi=(220) +cfn=(4371) +calls=1 0 +0 9 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 824 +0 5 + +fn=(4382) +0 4 +cob=(47) +cfi=(220) +cfn=(4381) +calls=1 0 +0 437 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1295 +0 5 + +fn=(4448) +0 4 +cob=(47) +cfi=(220) +cfn=(4447) +calls=1 0 +0 253 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 997 +0 5 + +fn=(4620) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1348 +0 5 + +fn=(4776) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1116 +0 5 + +fn=(5126) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1543 +0 5 + +fn=(5190) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 780 +0 5 + +fn=(5196) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 748 +0 5 + +fn=(6148) +0 48 +cob=(47) +cfi=(220) +cfn=(6152) +calls=23 0 +0 2737 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1086 +0 5 + +fn=(6418) +0 36 +cob=(47) +cfi=(220) +cfn=(6422) +calls=17 0 +0 4966 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 2456 +0 5 + +fn=(7292) +0 4 + +fn=(7310) +0 6 +cob=(47) +cfi=(220) +cfn=(7314) +calls=2 0 +0 4 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 824 +0 5 + +fn=(7596) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7956) +0 4 + +fn=(7990) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(8218) +0 4 + +fn=(8262) 0x0000000005b9f1c0 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8324) 0x00000000058da250 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8382) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(448) +0 7 + +fn=(578) +0 7 + +fn=(682) +0 394 +cob=(3) +cfi=(171) +cfn=(684) +calls=197 79 +0 5988 + +fn=(686) +0 130 +cob=(3) +cfi=(172) +cfn=(688) +calls=65 44 +0 1603 + +fn=(778) +0 7 + +fn=(868) +0 7 + +fn=(1634) +0 7 + +fn=(1736) +0 2 +cob=(40) +cfi=(213) +cfn=(1738) BN_set_word +calls=1 0 +0 155 + +fn=(1850) +0 7 + +fn=(2196) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 3982 +0 5 + +fn=(2216) +0 10 +cob=(3) +cfi=(170) +cfn=(680) +calls=4 44 +0 45977 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1016 +0 5 + +fn=(2278) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 27648 +0 5 + +fn=(2284) +0 6 +cob=(47) +cfi=(220) +cfn=(2288) +calls=2 0 +0 45085 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 26880 +0 5 + +fn=(2326) +0 388 +cob=(3) +cfi=(237) +cfn=(2328) +calls=194 59 +0 4431 + +fn=(2342) +0 6 +cob=(47) +cfi=(220) +cfn=(2346) +calls=2 0 +0 7224 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1371 +0 5 + +fn=(2674) +0 8 +cob=(47) +cfi=(220) +cfn=(2678) +calls=3 0 +0 363 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1368 +0 5 + +fn=(5888) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 897 +0 5 + +fn=(3818) +0 1230 +cob=(47) +cfi=(220) +cfn=(3210) +calls=614 0 +0 63015 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 702 +0 5 + +fn=(3868) +0 30 +cob=(3) +cfi=(204) +cfn=(952) +calls=14 167 +0 261 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1018 +0 5 + +fn=(3876) +0 96 +cob=(3) +cfi=(172) +cfn=(688) +calls=47 44 +0 1146 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 906 +0 5 + +fn=(3882) +0 60 +cob=(3) +cfi=(310) +cfn=(3886) +calls=29 34 +0 32535 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2086 +0 5 + +fn=(3908) +0 4 +cob=(47) +cfi=(220) +cfn=(3912) +calls=1 0 +0 1066 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2202 +0 5 + +fn=(3990) +0 48 +cob=(3) +cfi=(320) +cfn=(3994) +calls=23 42 +0 411 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 938 +0 5 + +fn=(8146) +0 4 + +fn=(4174) +0 4 +cob=(47) +cfi=(220) +cfn=(4178) +calls=1 0 +0 1534 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2512 +0 5 + +fn=(4202) +0 36 +cob=(47) +cfi=(220) +cfn=(2590) +calls=36 0 +0 61138 + +fn=(4456) +0 4 +cob=(47) +cfi=(220) +cfn=(4455) +calls=1 0 +0 525 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1333 +0 5 + +fn=(4542) +0 4 +cob=(3) +cfi=(202) +cfn=(912) +calls=1 225 +0 15 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 921 +0 5 + +fn=(4592) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1150 +0 5 + +fn=(4602) +0 12 +cob=(47) +cfi=(220) +cfn=(4606) +calls=5 0 +0 20 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 844 +0 5 + +fn=(4688) +0 4 +cob=(47) +cfi=(220) +cfn=(4692) +calls=1 0 +0 12 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1708 +0 5 + +fn=(4694) +0 4 +cob=(3) +cfi=(280) +cfn=(3554) +calls=1 32 +0 7 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 898 +0 5 + +fn=(5158) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1052 +0 5 + +fn=(5500) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 880 +0 5 + +fn=(5650) +0 6 +cob=(46) +cfi=(219) +cfn=(5654) +calls=2 0 +0 6 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 902 +0 5 + +fn=(6004) +0 22 +cob=(47) +cfi=(220) +cfn=(6008) +calls=10 0 +0 220 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1184 +0 5 + +fn=(6264) +0 6 +cob=(47) +cfi=(220) +cfn=(4806) +calls=2 0 +0 110 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 775 +0 5 + +fn=(7210) +0 12 +cob=(3) +cfi=(377) +cfn=(7214) +calls=5 32 +0 355 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 931 +0 5 + +fn=(7264) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7356) +0 4 + +fn=(7482) +0 4 + +fn=(7642) +0 4 + +fn=(7840) +0 4 + +fn=(8208) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8308) +0 4 + +fn=(8428) +0 4 + +fn=(558) +0 7 + +fn=(656) +0 4 +cob=(3) +cfi=(168) +cfn=(658) +calls=2 34 +0 850 + +fn=(848) +0 7 + +fn=(1970) +0 3776 +cob=(3) +cfi=(176) +cfn=(704) +calls=1887 3023 +0 220282 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1435 +0 5 + +fn=(2132) +0 6 +cob=(50) +cfi=(225) +cfn=(2136) +calls=1 0 +0 515 +0 2 + +fn=(2224) +0 192 +cob=(47) +cfi=(220) +cfn=(2228) +calls=95 0 +0 37139 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2218 +0 5 + +fn=(2242) +0 6 +cob=(47) +cfi=(220) +cfn=(2246) +calls=2 0 +0 1830 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1572 +0 5 + +fn=(2348) +0 6 +cob=(47) +cfi=(220) +cfn=(2352) +calls=2 0 +0 3408 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1339 +0 5 + +fn=(2456) +0 6 +cob=(47) +cfi=(220) +cfn=(2460) +calls=2 0 +0 931 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1413 +0 5 + +fn=(2586) +0 124 +cob=(47) +cfi=(220) +cfn=(2590) +calls=61 0 +0 512 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 849 +0 5 + +fn=(2680) +0 8 +cob=(47) +cfi=(220) +cfn=(2684) +calls=3 0 +0 357 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1406 +0 5 + +fn=(2686) +0 8 +cob=(47) +cfi=(220) +cfn=(2690) +calls=3 0 +0 363 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1376 +0 5 + +fn=(2816) +0 2 +cob=(3) +cfi=(202) +cfn=(912) +calls=1 225 +0 14 + +fn=(2846) +0 32 +cob=(3) +cfi=(176) +cfn=(948) +calls=15 3366 +0 6317 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1130 +0 5 + +fn=(3074) +0 986 +cob=(3) +cfi=(237) +cfn=(2328) +calls=492 59 +0 10590 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 899 +0 5 + +fn=(3232) +0 718 +cob=(3) +cfi=(202) +cfn=(912) +calls=358 225 +0 6239 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 974 +0 5 + +fn=(5896) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 882 +0 5 + +fn=(3872) +0 662 +cob=(3) +cfi=(248) +cfn=(2814) +calls=330 40 +0 7025 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 900 +0 5 + +fn=(8054) +0 4 + +fn=(8118) 0x0000000005ae1130 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8190) 0x0000000005cd8800 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(4224) +0 4 +cob=(47) +cfi=(220) +cfn=(4223) +calls=1 0 +0 284 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1180 +0 5 + +fn=(4394) +0 4 +cob=(47) +cfi=(220) +cfn=(4393) +calls=1 0 +0 9 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 879 +0 5 + +fn=(4424) +0 4 +cob=(47) +cfi=(220) +cfn=(4423) +calls=1 0 +0 493 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1293 +0 5 + +fn=(4430) +0 4 +cob=(47) +cfi=(220) +cfn=(4429) +calls=1 0 +0 493 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1285 +0 5 + +fn=(4474) +0 4 +cob=(47) +cfi=(220) +cfn=(4473) +calls=1 0 +0 488 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 3405 +0 5 + +fn=(5146) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 2789 +0 5 + +fn=(5350) +0 28 +cob=(3) +cfi=(169) +cfn=(662) +calls=13 42 +0 224 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 892 +0 5 + +fn=(5670) +0 6 +cob=(46) +cfi=(219) +cfn=(5674) +calls=2 0 +0 14 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 861 +0 5 + +fn=(7236) +0 1 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7526) 0x00000000050378b0 +0 1 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7614) 0x000000000534a0b0 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7884) 0x00000000056d4610 +0 1 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(7912) +0 4 + +fn=(8008) 0x000000000590f450 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(8236) +0 4 + +fn=(8280) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8342) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8400) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(4020) +0 4 +cob=(47) +cfi=(220) +cfn=(4024) +calls=1 0 +0 1323 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2622 +0 5 + +fn=(490) +0 7 + +fn=(538) +0 7 + +fn=(628) +0 7 + +fn=(696) +0 252 +cob=(3) +cfi=(171) +cfn=(698) +calls=126 79 +0 3538 + +fn=(828) +0 7 + +fn=(1524) +0 7 + +fn=(1720) +0 10 +cob=(40) +cfi=(213) +cfn=(1722) BN_new +calls=5 0 +0 471 + +fn=(2296) +0 768 +cob=(3) +cfi=(231) +cfn=(2300) +calls=383 31 +0 8426 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 936 +0 5 + +fn=(2360) +0 6 +cob=(47) +cfi=(220) +cfn=(2364) +calls=2 0 +0 4888 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1237 +0 5 + +fn=(2562) +0 36 +cob=(47) +cfi=(220) +cfn=(2566) +calls=17 0 +0 1666 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 817 +0 5 + +fn=(2632) +0 76 +cob=(47) +cfi=(220) +cfn=(2636) +calls=37 0 +0 4403 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1390 +0 5 + +fn=(2662) +0 8 +cob=(47) +cfi=(220) +cfn=(2666) +calls=3 0 +0 363 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1000 +0 5 + +fn=(2692) +0 8 +cob=(47) +cfi=(220) +cfn=(2696) +calls=3 0 +0 357 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1414 +0 5 + +fn=(2882) +0 1270 +cob=(47) +cfi=(220) +cfn=(2154) +calls=634 0 +0 60533 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 810 +0 5 + +fn=(3212) +0 3772 +cob=(3) +cfi=(176) +cfn=(1204) +calls=1885 3087 +0 182519 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1155 +0 5 + +fn=(3526) +0 142 +cob=(3) +cfi=(176) +cfn=(1204) +calls=71 3087 +0 9688 +0 71 + +fn=(3914) +0 856 +cob=(3) +cfi=(311) +cfn=(3918) +calls=427 31 +0 7259 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 958 +0 5 + +fn=(3984) +0 4 +cob=(47) +cfi=(220) +cfn=(3988) +calls=1 0 +0 1066 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2202 +0 5 + +fn=(3996) +0 32 +cob=(3) +cfi=(321) +cfn=(4000) +calls=15 28 +0 4078 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 3419 +0 5 + +fn=(4014) +0 4 +cob=(47) +cfi=(220) +cfn=(4018) +calls=1 0 +0 2583 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 3946 +0 5 + +fn=(8026) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(8164) +0 4 + +fn=(4216) +0 250 +cob=(47) +cfi=(220) +cfn=(4220) +calls=124 0 +0 248 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 754 +0 5 + +fn=(4258) +0 8 +cob=(47) +cfi=(220) +cfn=(4257) +calls=1 0 +0 15 +cob=(47) +cfi=(220) +cfn=(4256) +calls=2 0 +0 30 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 870 +0 5 + +fn=(4264) +0 4 +cob=(47) +cfi=(220) +cfn=(4263) +calls=1 0 +0 501 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2292 +0 5 + +fn=(4408) +0 4 +cob=(47) +cfi=(220) +cfn=(4412) +calls=1 0 +0 9 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 873 +0 5 + +fn=(4462) +0 4 +cob=(47) +cfi=(220) +cfn=(4461) +calls=1 0 +0 529 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1324 +0 5 + +fn=(4586) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1144 +0 5 + +fn=(4698) +0 4 +cob=(5) +cfi=(266) +cfn=(2944) +calls=1 25 +0 8 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 817 +0 5 + +fn=(4808) +0 34 +cob=(47) +cfi=(220) +cfn=(4812) +calls=16 0 +0 176 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 955 +0 5 + +fn=(4814) +0 26 +cob=(47) +cfi=(220) +cfn=(4818) +calls=12 0 +0 156 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 885 +0 5 + +fn=(5120) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1008 +0 5 + +fn=(5166) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 31799 +0 5 + +fn=(5184) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2389 +0 5 + +fn=(5988) +0 100 +cob=(47) +cfi=(220) +cfn=(5992) +calls=49 0 +0 1029 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 764 +0 5 + +fn=(6102) +0 24 +cob=(47) +cfi=(220) +cfn=(4486) +calls=11 0 +0 77 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 727 +0 5 + +fn=(7282) 0x0000000004859ce0 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7322) +0 4 +cob=(47) +cfi=(220) +cfn=(7326) +calls=1 0 +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 786 +0 5 + +fn=(7374) +0 4 + +fn=(7500) +0 4 + +fn=(7858) +0 4 + +fn=(7946) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(7978) +0 4 + +fn=(8312) 0x00000000058da460 +0 2 +cob=(5) +cfi=(380) +cfn=(8314) +calls=1 26 +0 3 + +fn=(518) +0 7 + +fn=(608) +0 7 + +fn=(678) +0 2 +cob=(3) +cfi=(170) +cfn=(680) +calls=1 44 +0 79442 + +fn=(756) +0 2 +cob=(3) +cfi=(134) +cfn=(406) +calls=1 39 +0 41 + +fn=(808) +0 7 + +fn=(950) +0 1252 +cob=(3) +cfi=(204) +cfn=(952) +calls=626 167 +0 18644 + +fn=(2114) +0 7 + +fn=(2172) +0 244 +cob=(5) +cfi=(227) +cfn=(2176) +calls=121 136 +0 726 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 77145 +0 5 + +fn=(2173) +0 28 +cob=(5) +cfi=(227) +cfn=(2177) +calls=14 136 +0 2284 + +fn=(2190) +0 62 +cob=(47) +cfi=(220) +cfn=(2194) +calls=30 0 +0 90 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 859 +0 5 + +fn=(2202) +0 96 +cob=(47) +cfi=(220) +cfn=(2206) +calls=47 0 +0 893 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 3115 +0 5 + +fn=(2266) +0 6 +cob=(47) +cfi=(220) +cfn=(2270) +calls=2 0 +0 4890 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1215 +0 5 + +fn=(2290) +0 44 +cob=(3) +cfi=(230) +cfn=(2294) +calls=21 30 +0 462 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 954 +0 5 + +fn=(2354) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2255 +0 5 + +fn=(2442) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 797 +0 5 + +fn=(2580) +0 92 +cob=(47) +cfi=(220) +cfn=(2584) +calls=45 0 +0 805 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 745 +0 5 + +fn=(2592) +0 76 +cob=(47) +cfi=(220) +cfn=(2596) +calls=37 0 +0 32153 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 10567 +0 5 + +fn=(2650) +0 8 +cob=(47) +cfi=(220) +cfn=(2654) +calls=3 0 +0 2652 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 10007 +0 5 + +fn=(2714) +0 14 +cob=(47) +cfi=(220) +cfn=(2718) +calls=6 0 +0 12 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 730 +0 5 + +fn=(40) +0 202 +cob=(1) +cfi=(19) +cfn=(42) +calls=101 92 +0 3995 + +fn=(5792) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 790 +0 5 + +fn=(5860) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 765 +0 5 + +fn=(5882) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1690 +0 5 + +fn=(4006) +0 32 +cob=(3) +cfi=(169) +cfn=(4008) +calls=16 42 +0 336 + +fn=(8092) +0 4 + +fn=(8136) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(4094) +0 4 +cob=(47) +cfi=(220) +cfn=(4098) +calls=1 0 +0 1310 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2520 +0 5 + +fn=(4190) +0 66 +cob=(47) +cfi=(220) +cfn=(4194) +calls=32 0 +0 11285 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2231 +0 5 + +fn=(4280) +0 4 +cob=(47) +cfi=(220) +cfn=(4279) +calls=1 0 +0 497 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2116 +0 5 + +fn=(4286) +0 4 +cob=(47) +cfi=(220) +cfn=(4285) +calls=1 0 +0 9 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 840 +0 5 + +fn=(4314) +0 4 +cob=(47) +cfi=(220) +cfn=(4313) +calls=1 0 +0 259 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1925 +0 5 + +fn=(4336) +0 16 +cob=(3) +cfi=(327) +cfn=(4340) +calls=7 79 +0 179 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 912 +0 5 + +fn=(4356) +0 8 +cob=(47) +cfi=(220) +cfn=(4355) +calls=1 0 +0 15 +cob=(47) +cfi=(220) +cfn=(4354) +calls=2 0 +0 30 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 878 +0 5 + +fn=(4400) +0 4 +cob=(47) +cfi=(220) +cfn=(4404) +calls=1 0 +0 9 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 873 +0 5 + +fn=(5202) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 26497 +0 5 + +fn=(6160) +0 48 +cob=(3) +cfi=(356) +cfn=(6164) +calls=23 451 +0 5647 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1128 +0 5 + +fn=(7346) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7404) +0 10 +cob=(40) +cfi=(213) +cfn=(7406) BN_clear_free +calls=5 0 +0 2907 + +fn=(7472) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7588) +0 4 + +fn=(7632) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(8254) +0 4 + +fn=(8298) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8374) +0 4 + +fn=(8418) 0x0000000005e42030 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(372) +0 3 +cob=(5) +cfi=(127) +cfn=(374) +calls=1 244 +0 5729 +0 2 + +fn=(380) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1566 +0 5 + +fn=(400) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1368 +0 5 + +fn=(458) +0 7 + +fn=(468) +0 7 + +fn=(588) +0 7 + +fn=(788) +0 7 + +fn=(910) +0 108 +cob=(3) +cfi=(202) +cfn=(912) +calls=54 225 +0 1007 + +fn=(1554) +0 7 + +fn=(1644) +0 7 + +fn=(1860) +0 7 + +fn=(2236) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 887 +0 5 + +fn=(2272) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 867 +0 5 + +fn=(2314) +0 72 +cob=(47) +cfi=(220) +cfn=(2318) +calls=35 0 +0 11254 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1917 +0 5 + +fn=(2320) +0 60 +cob=(3) +cfi=(236) +cfn=(2324) +calls=29 27 +0 10767 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1013 +0 5 + +fn=(2330) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 887 +0 5 + +fn=(2366) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 867 +0 5 + +fn=(3242) +0 108 +cob=(47) +cfi=(220) +cfn=(3246) +calls=53 0 +0 13047 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 2463 +0 5 + +fn=(3896) +0 4 +cob=(47) +cfi=(220) +cfn=(3900) +calls=1 0 +0 1168 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 3087 +0 5 + +fn=(3902) +0 56 +cob=(47) +cfi=(220) +cfn=(3906) +calls=27 0 +0 30594 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2064 +0 5 + +fn=(3938) +0 64 +cob=(47) +cfi=(220) +cfn=(3942) +calls=31 0 +0 1085 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 947 +0 5 + +fn=(3956) +0 4 +cob=(47) +cfi=(220) +cfn=(3960) +calls=1 0 +0 22364 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 26052 +0 5 + +fn=(8044) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(4230) +0 4 +cob=(47) +cfi=(220) +cfn=(4229) +calls=1 0 +0 259 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1913 +0 5 + +fn=(4388) +0 4 +cob=(47) +cfi=(220) +cfn=(4387) +calls=1 0 +0 9 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 879 +0 5 + +fn=(4416) +0 4 +cob=(47) +cfi=(220) +cfn=(4415) +calls=1 0 +0 253 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 997 +0 5 + +fn=(4442) +0 4 +cob=(47) +cfi=(220) +cfn=(4441) +calls=1 0 +0 488 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1204 +0 5 + +fn=(5152) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1930 +0 5 + +fn=(5222) +0 14 +cob=(46) +cfi=(219) +cfn=(5228) +calls=6 0 +0 5133 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 4499 +0 5 + +fn=(5744) +0 8 +cob=(46) +cfi=(219) +cfn=(5748) +calls=3 0 +0 9 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 775 +0 5 + +fn=(6106) +0 8 +cob=(47) +cfi=(220) +cfn=(6110) +calls=3 0 +0 213 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 903 +0 5 + +fn=(7300) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 1994 + +fn=(7392) +0 4 + +fn=(7518) +0 4 + +fn=(7560) +0 4 + +fn=(7876) +0 4 + +fn=(7902) +0 1 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(7930) +0 4 + +fn=(8226) 0x0000000005c33520 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(44) +0 500 +cob=(1) +cfi=(19) +cfn=(46) +calls=250 49 +0 6727 + +fn=(414) +0 12 +cob=(1) +cfi=(8) +cfn=(26) +calls=5 368 +0 95 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1536 +0 5 + +fn=(502) 0x00000000058da400 +0 2 +cob=(5) +cfi=(153) +cfn=(504) +calls=1 29 +0 11 + +ob=(20) +fl=(164) +fn=(8122) 0x0000000000002240 +0 5 + +fn=(8112) +0 9 +cob=(2) +cfi=(18) +cfn=(8118) +calls=1 0 +0 143 +0 1 +cfn=(8122) +calls=1 0 +0 5 +0 3 + +fn=(612) +0 12 + +ob=(40) +fl=(213) +fn=(1746) BN_get_flags +0 100 + +fn=(1724) CRYPTO_zalloc +0 40 +cfn=(1726) CRYPTO_malloc +calls=10 0 +0 45867 +0 70 +cob=(3) +cfi=(204) +cfn=(952) +calls=10 167 +0 254 +0 10 +0 40 + +fn=(7406) +0 45 +cfn=(1746) +calls=5 0 +0 20 +0 25 +cfn=(1746) +calls=5 0 +0 20 +0 25 +cfn=(7418) OPENSSL_cleanse +calls=5 0 +0 115 +0 25 +cfn=(7420) CRYPTO_free +calls=5 0 +0 550 +0 15 +cfn=(7408) 0x00000000000baaa0 +calls=5 0 +0 2062 +0 5 + +fn=(1690) +0 3 + +fn=(7520) +0 9 +cob=(2) +cfi=(18) +cfn=(7526) +calls=1 0 +0 156 +0 1 +cfn=(7530) 0x0000000000079020 +calls=1 0 +0 5 +0 3 + +fn=(1618) +0 12 + +fn=(1578) 0x00000000002129f0 +0 84 + +fn=(1726) +0 112 +cob=(3) +cfi=(176) +cfn=(704) +calls=1 3023 +0 42 +0 1 +0 9 +cob=(3) +cfi=(176) +cfn=(704) +calls=9 3023 +0 45694 +0 9 + +fn=(1774) BN_bin2bn +0 116 +cfn=(1776) 0x00000000000bae20 +calls=4 0 +0 45995 +0 18516 +cfn=(1780) 0x00000000000bafe0 +calls=4 0 +0 60 +0 36 + +fn=(1776) +0 48 +cfn=(1746) +calls=4 0 +0 16 +0 20 +cfn=(1746) +calls=4 0 +0 16 +0 28 +cfn=(1724) +calls=4 0 +0 45783 +0 84 + +fn=(7408) +0 35 +cfn=(1746) +calls=5 0 +0 20 +0 65 +cfn=(7416) CRYPTO_clear_free +calls=5 0 +0 1942 + +fn=(1568) +0 12 +cob=(3) +cfi=(168) +cfn=(658) +calls=1 34 +0 425 +0 1 +0 18 +cfn=(1578) +calls=1 0 +0 84 +0 2 + +fn=(7416) +0 80 +cfn=(7420) +calls=5 0 +0 572 +0 10 +cfn=(7418) +calls=5 0 +0 1270 +0 10 + +fn=(7418) +0 1385 + +fn=(1722) +0 30 +cfn=(1724) +calls=5 0 +0 416 +0 25 + +fn=(1738) +0 23 +cfn=(1740) 0x00000000000bac10 +calls=1 0 +0 130 +0 2 + +fn=(1780) +0 60 + +fn=(1740) +0 12 +cfn=(1746) +calls=1 0 +0 4 +0 5 +cfn=(1746) +calls=1 0 +0 4 +0 7 +cfn=(1724) +calls=1 0 +0 82 +0 16 + +fn=(7420) +0 70 +cob=(3) +cfi=(176) +cfn=(1204) +calls=10 3087 +0 1042 +0 10 + +fn=(7530) +0 5 + +ob=(45) +fl=(218) +fn=(7368) 0x00000000000051f0 +0 5 + +fn=(7358) +0 9 +cob=(2) +cfi=(18) +cfn=(7364) 0x0000000004e44100 +calls=1 0 +0 157 + +ob=(2) +fl=(18) +fn=(568) +0 7 + +fn=(700) +0 186 +cob=(3) +cfi=(176) +cfn=(704) +calls=93 3023 +0 97635 +0 93 + +fn=(768) +0 7 + +fn=(858) +0 7 + +fn=(1254) +0 2 +cob=(3) +cfi=(176) +cfn=(704) +calls=2 3023 +0 378 +0 2 + +fn=(1544) +0 7 + +fn=(1624) +0 7 + +fn=(1772) +0 8 +cob=(40) +cfi=(213) +cfn=(1774) +calls=4 0 +0 64723 + +fn=(1840) +0 7 + +fn=(1910) +0 7 + +fn=(1932) +0 16 +cob=(3) +cfi=(221) +cfn=(1936) +calls=7 69 +0 504 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1037 +0 5 + +fn=(2248) +0 6 +cob=(47) +cfi=(220) +cfn=(2252) +calls=2 0 +0 3011 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1351 +0 5 + +fn=(2254) +0 6 +cob=(47) +cfi=(220) +cfn=(2258) +calls=2 0 +0 2250 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1359 +0 5 + +fn=(2302) +0 1536 +cob=(3) +cfi=(232) +cfn=(2306) +calls=767 33 +0 36018 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 879 +0 5 + +fn=(2336) +0 6 +cob=(47) +cfi=(220) +cfn=(2340) +calls=2 0 +0 931 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1484 +0 5 + +fn=(2492) +0 6 +cob=(47) +cfi=(220) +cfn=(2496) +calls=2 0 +0 3393 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1261 +0 5 + +fn=(2524) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 797 +0 5 + +fn=(2552) +0 2 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 779 +0 5 + +fn=(2574) +0 76 +cob=(47) +cfi=(220) +cfn=(2578) +calls=37 0 +0 3478 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 2448 +0 5 + +fn=(2618) +0 132 +cob=(47) +cfi=(220) +cfn=(2622) +calls=65 0 +0 11180 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1075 +0 5 + +fn=(2668) +0 8 +cob=(47) +cfi=(220) +cfn=(2672) +calls=3 0 +0 357 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1022 +0 5 + +fn=(106) +0 2 +cob=(1) +cfi=(36) +cfn=(108) +calls=1 225 +0 2853 + +fn=(3248) +0 152 +cob=(47) +cfi=(220) +cfn=(2880) +calls=75 0 +0 9072 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1202 +0 5 + +fn=(3806) +0 26 +cob=(47) +cfi=(220) +cfn=(3810) +calls=12 0 +0 1416 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1361 +0 5 + +fn=(3812) +0 118 +cob=(47) +cfi=(220) +cfn=(3816) +calls=58 0 +0 5745 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1208 +0 5 + +fn=(3822) +0 4 +cob=(47) +cfi=(220) +cfn=(3826) +calls=1 0 +0 19 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1136 +0 5 + +fn=(3864) +0 246 +cob=(47) +cfi=(220) +cfn=(3866) +calls=123 0 +0 11391 + +fn=(3944) +0 4 +cob=(47) +cfi=(220) +cfn=(3948) +calls=1 0 +0 2584 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 3942 +0 5 + +fn=(8072) +0 4 +cob=(5) +cfi=(370) +cfn=(6336) +calls=2 27 +0 24 + +fn=(8110) +0 4 + +fn=(8154) 0x0000000005b0f200 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 141 + +fn=(8182) +0 4 + +fn=(4204) +0 12 +cob=(47) +cfi=(220) +cfn=(4208) +calls=5 0 +0 27653 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 51896 +0 5 + +fn=(4302) +0 4 +cob=(47) +cfi=(220) +cfn=(4301) +calls=1 0 +0 331 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 1059 +0 5 + +fn=(4332) +0 4 +cob=(47) +cfi=(220) +cfn=(4331) +calls=1 0 +0 531 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 3177 +0 5 + +fn=(4580) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 940 +0 5 + +fn=(4672) +0 24 +cob=(47) +cfi=(220) +cfn=(4676) +calls=11 0 +0 311 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 763 +0 5 + +fn=(4682) +0 4 +cob=(47) +cfi=(220) +cfn=(4686) +calls=1 0 +0 50 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 3405 +0 5 + +fn=(4782) +0 2 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1317 +0 5 + +fn=(4788) +0 4 +cob=(47) +cfi=(220) +cfn=(4792) +calls=1 0 +0 15 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 2221 +0 5 + +fn=(5230) +0 14 +cob=(3) +cfi=(347) +cfn=(5234) +calls=6 34 +0 4869 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 3670 +0 5 + +fn=(5786) +0 4 +cob=(46) +cfi=(219) +cfn=(5790) +calls=1 0 +0 17 +cob=(1) +cfi=(130) +cfn=(387) +calls=1 67 +0 804 +0 5 + +fn=(6154) +0 48 +cob=(47) +cfi=(220) +cfn=(6158) +calls=23 0 +0 5992 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 2044 +0 5 + +fn=(7220) +0 6 +cob=(47) +cfi=(220) +cfn=(7224) +calls=2 0 +0 182 +cob=(1) +cfi=(130) +cfn=(386) +calls=1 67 +0 1058 +0 5 + +fn=(7364) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7490) +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 155 + +fn=(7606) +0 4 + +fn=(7848) 0x0000000004e6a260 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(7968) 0x00000000058ab260 +0 2 +cob=(3) +cfi=(379) +cfn=(7238) +calls=1 30 +0 148 + +fn=(8000) +0 4 + +fn=(8272) +0 4 + +fn=(8334) +0 4 + +fn=(8392) +0 4 + +ob=(9) +fl=(152) +fn=(8318) +0 9 +cob=(2) +cfi=(18) +cfn=(8324) +calls=1 0 +0 143 +0 1 +cfn=(8328) 0x00000000000024e0 +calls=1 0 +0 5 +0 3 + +fn=(8310) +0 4 +cob=(2) +cfi=(18) +cfn=(8312) +calls=1 0 +0 5 +0 3 + +fn=(494) +0 12 + +fn=(500) +0 6 +cob=(2) +cfi=(18) +cfn=(502) +calls=1 0 +0 13 +0 3 + +fn=(8328) +0 5 + +ob=(33) +fl=(198) +fn=(7852) 0x00000000000024a0 +0 5 + +fn=(862) +0 12 + +fn=(7842) +0 9 +cob=(2) +cfi=(18) +cfn=(7848) +calls=1 0 +0 150 +0 1 +cfn=(7852) +calls=1 0 +0 5 +0 3 + +ob=(38) +fl=(211) +fn=(1548) +0 12 + +fn=(7570) ldap_int_tls_destroy +0 32 + +fn=(7582) 0x000000000000eec0 +0 5 + +fn=(7562) +0 22 +cfn=(7570) +calls=1 0 +0 32 + +fn=(7572) +0 9 +cob=(2) +cfi=(18) +cfn=(7578) +calls=1 0 +0 157 +0 1 +cfn=(7582) +calls=1 0 +0 5 +0 3 + +ob=(45) +fl=(218) +fn=(7358) +0 1 +cfn=(7368) +calls=1 0 +0 5 +0 3 + +fn=(1854) +0 12 + +ob=(48) +fl=(223) +fn=(7286) 0x0000000000010a00 +0 5 + +fn=(2108) +0 12 + +fn=(7276) +0 9 +cob=(2) +cfi=(18) +cfn=(7282) +calls=1 0 +0 157 +0 1 +cfn=(7286) +calls=1 0 +0 5 +0 3 + +ob=(18) +fl=(162) +fn=(8158) 0x000000000001f410 +0 5 + +fn=(592) +0 12 + +fn=(8148) +0 9 +cob=(2) +cfi=(18) +cfn=(8154) +calls=1 0 +0 143 +0 1 +cfn=(8158) +calls=1 0 +0 5 +0 3 + +ob=(31) +fl=(196) +fn=(842) +0 12 + +fn=(7888) 0x0000000000007640 +0 5 + +fn=(7878) +0 9 +cob=(2) +cfi=(18) +cfn=(7884) +calls=1 0 +0 149 +0 1 +cfn=(7888) +calls=1 0 +0 5 + +ob=(16) +fl=(160) +fn=(8194) 0x0000000000013010 +0 5 + +fn=(8184) +0 9 +cob=(2) +cfi=(18) +cfn=(8190) +calls=1 0 +0 143 + +ob=(31) +fl=(196) +fn=(7878) +0 3 + +ob=(16) +fl=(160) +fn=(8184) +0 1 +cfn=(8194) +calls=1 0 +0 5 +0 3 + +fn=(572) +0 12 + +ob=(36) +fl=(209) +fn=(7618) 0x0000000000001170 +0 5 + +fn=(7608) +0 9 +cob=(2) +cfi=(18) +cfn=(7614) +calls=1 0 +0 157 +0 1 +cfn=(7618) +calls=1 0 +0 5 +0 3 + +fn=(1528) +0 12 + +ob=(14) +fl=(158) +fn=(8230) 0x0000000000007a70 +0 5 + +fn=(8220) +0 9 +cob=(2) +cfi=(18) +cfn=(8226) +calls=1 0 +0 143 + +ob=(29) +fl=(194) +fn=(7924) 0x000000000000a240 +0 5 + +fn=(7914) +0 9 +cob=(2) +cfi=(18) +cfn=(7920) +calls=1 0 +0 149 +0 1 +cfn=(7924) +calls=1 0 +0 5 +0 3 + +fn=(822) +0 9 + +ob=(14) +fl=(158) +fn=(8220) +0 1 +cfn=(8230) +calls=1 0 +0 5 +0 3 + +fn=(552) +0 10 + +ob=(29) +fl=(194) +fn=(822) +0 1 + +ob=(14) +fl=(158) +fn=(552) +0 2 + +ob=(29) +fl=(194) +fn=(822) +0 2 + +ob=(12) +fl=(156) +fn=(8266) 0x000000000001a3c0 +0 5 + +fn=(532) +0 12 + +fn=(8256) +0 9 +cob=(2) +cfi=(18) +cfn=(8262) +calls=1 0 +0 143 +0 1 +cfn=(8266) +calls=1 0 +0 5 + +ob=(27) +fl=(192) +fn=(802) +0 12 + +fn=(7958) +0 5 + +fn=(7972) 0x0000000000004500 +0 5 + +fn=(7962) +0 9 +cob=(2) +cfi=(18) +cfn=(7968) +calls=1 0 +0 150 +0 1 +cfn=(7972) +calls=1 0 +0 5 +0 3 + +ob=(6) +fl=(147) +fn=(8422) 0x0000000000002040 +0 5 + +fn=(452) +0 10 + +ob=(12) +fl=(156) +fn=(8256) +0 3 + +ob=(6) +fl=(147) +fn=(452) +0 2 + +fn=(8412) +0 9 +cob=(2) +cfi=(18) +cfn=(8418) +calls=1 0 +0 143 +0 1 +cfn=(8422) +calls=1 0 +0 5 +0 3 + +ob=(25) +fl=(190) +fn=(782) +0 12 + +fn=(8002) +0 9 +cob=(2) +cfi=(18) +cfn=(8008) +calls=1 0 +0 150 +0 1 +cfn=(8012) 0x0000000000003880 +calls=1 0 +0 5 +0 3 + +fn=(8012) +0 5 + +totals: 88412458 diff --git a/daemon/chainparams.cpp b/daemon/chainparams.cpp index 84c8e20334fc..110a5de0788c 100644 --- a/daemon/chainparams.cpp +++ b/daemon/chainparams.cpp @@ -67,7 +67,7 @@ static Checkpoints::MapCheckpoints mapCheckpoints = (350000, uint256("59d409eba196f75232b10ff3acd129b686ebdf1c85efe9aefeceb369c631c1fc")) (398765, uint256("8be67d78dad77f2b7d13727356475a3fcd2ddd8a9fe0222f2c5f6c5ec094be8e")); -static const Checkpoints::CCheckpointData data = { +static const Checkpoints::CCheckpointData checkPointData = { &mapCheckpoints, 1536062400, // * UNIX timestamp of last checkpoint block 0, // * total number of transactions between genesis and last checkpoint @@ -137,7 +137,7 @@ class CMainParams : public CChainParams nTargetTimespan = 1 * 60; // UNIGRID: 1 day nTargetSpacing = 1 * 60; // UNIGRID: 1 minute nMaturity = 30; - nMasternodeCountDrift = 20; + nGridnodeCountDrift = 20; nMaxMoneyOut = 25000000 * COIN; nMNCollateral = 3000 * COIN; strDevpubkey = "02e5c7215bac4d6ed03645bab3c77410cd6662c5373800e688cf5927d397498f1f"; @@ -157,6 +157,7 @@ class CMainParams : public CChainParams nBlockZerocoinV2 = 25000; //!> The block that zerocoin v2 becomes active - roughly Tuesday, May 8, 2018 4:00:00 AM GMT nEnforceNewSporkKey = 1561939200; //!> Sporks signed after GMT: Monday, July 1, 2019 12:00:00 AM must use the new spork key nRejectOldSporkKey = 1564617599; //!> Reject old spork key after GMT: Wednesday, July 31, 2019 11:59:59 PM + nStakeMinAge = 60 * 60; /** * Build the genesis block. Note that the output of the genesis coinbase cannot @@ -224,7 +225,7 @@ class CMainParams : public CChainParams strSporkKey = "04efb4f4430c76279cd1a5c421f1d71733495f2deda4b4d88695a4e029b64a481b141b3fc9f97c550775536603bb57c72a118a57e9b262c4a5e4db29430c981744"; strSporkKeyOld = "04f393cef0f43dbd9b647b2014c21249d9a710461a6ea640a2121b8a4a3ee0040599f945643982d820d228540a2e7a2c0e5ae0149ce841368e4f2b587ea1d690d1"; strObfuscationPoolDummyAddress = "D87q2gC9j6nNrnzCsg4aY6bHMLsT9nUhEw"; - nStartMasternodePayments = 1403728576; //Wed, 25 Jun 2014 20:36:16 GMT + nStartGridnodePayments = 1403728576; //Wed, 25 Jun 2014 20:36:16 GMT /** Zerocoin */ zerocoinModulus = "25195908475657893494027183240048398571429282126204032027777137836043662020707595556264018525880784" @@ -246,7 +247,7 @@ class CMainParams : public CChainParams const Checkpoints::CCheckpointData& Checkpoints() const { - return data; + return checkPointData; } }; static CMainParams mainParams; @@ -272,14 +273,14 @@ class CTestNetParams : public CMainParams nToCheckBlockUpgradeMajority = 100; nMinerThreads = 0; nTargetTimespan = 1 * 60; // UNIGRID: 1 day - nTargetSpacing = 1 * 60; // UNIGRID: 1 minute - nLastPOWBlock = 200; - nMaturity = 15; - nMasternodeCountDrift = 4; + nTargetSpacing = 30; // UNIGRID: 1 minute + nLastPOWBlock = 35; + nMaturity = 1; + nGridnodeCountDrift = 0; nModifierUpdateBlock = 51197; //approx Mon, 17 Apr 2017 04:00:00 GMT - nMaxMoneyOut = 43199500 * COIN; + nMaxMoneyOut = 25000000 * COIN; nZerocoinStartHeight = 201576; - nZerocoinStartTime = 1501776000; + nZerocoinStartTime = 1731683656; // set this in the future so we can start testnet nBlockEnforceSerialRange = 1; //Enforce serial range starting this block nBlockRecalculateAccumulators = 9908000; //Trigger a recalculation of accumulators nBlockFirstFraudulent = 9891737; //First block that bad serials emerged @@ -290,8 +291,10 @@ class CTestNetParams : public CMainParams nEnforceNewSporkKey = 1561939200; //!> Sporks signed after GMT: Monday, July 1, 2019 12:00:00 AM must use the new spork key nRejectOldSporkKey = 1564617599; //!> Reject old spork key after GMT: Wednesday, July 31, 2019 11:59:59 PM nMNCollateral = 3000 * COIN; - strDevpubkey = "02e5c7215bac4d6ed03645bab3c77410cd6662c5373800e688cf5927d397498f1f"; + strDevpubkey = "028a3910a2ca0b65a880b7e7659324b63a738df70513327ceef1d0e2e06d25ba81"; strOldDevpubkey = "02a631da396e4a45047968f138555e8ed2acae449acde7d751f9f4979f3fd0eaf7"; + nStakeMinAge = 0; + strAltGridNodeAddress = "xzLZsd9EBhLxgChU8yiDmYtbCu1DvH5K24"; //! Modify the testnet genesis block so the timestamp is valid for a later start. genesis.nTime = 1536062401; @@ -302,6 +305,8 @@ class CTestNetParams : public CMainParams vFixedSeeds.clear(); vSeeds.clear(); + vSeeds.push_back(CDNSSeedData("testseed1.unigrid.org", "testseed1.unigrid.org")); + vSeeds.push_back(CDNSSeedData("testseed2.unigrid.org", "testseed2.unigrid.org")); base58Prefixes[PUBKEY_ADDRESS] = std::vector(1, 139); // Testnet unigrid addresses start with 'x' or 'y' base58Prefixes[SCRIPT_ADDRESS] = std::vector(1, 19); // Testnet unigrid script addresses start with '8' or '9' @@ -328,7 +333,7 @@ class CTestNetParams : public CMainParams strSporkKey = "0498ab66bf8dc2d8a7458587cf4bf6c3aa0f92df3c336542e0f36bf65dc20394891d18b19f1ebf0950c509356106eab8556211cb24dac4e1665d4ea00f0142747d"; strSporkKeyOld = "0458d06208c9ebeaacaec91ebb6818f1fc6bceba3f32ae4a827f99edea38295a21e9600b9a7e344e7703e9dc20d5fe6a8cb3ea20fbb20fa24460f47c38ac0c879e"; strObfuscationPoolDummyAddress = "y57cqfGRkekRyDRNeJiLtYVEbvhXrNbmox"; - nStartMasternodePayments = 1420837558; //Fri, 09 Jan 2015 21:05:58 GMT + nStartGridnodePayments = 1420837558; //Fri, 09 Jan 2015 21:05:58 GMT nBudget_Fee_Confirmations = 3; // Number of confirmations for the finalization fee. We have to make this very short // here because we only have a 8 block finalization window on testnet } @@ -349,7 +354,6 @@ class CRegTestParams : public CTestNetParams { networkID = CBaseChainParams::REGTEST; strNetworkID = "regtest"; - strNetworkID = "regtest"; pchMessageStart[0] = 0xa1; pchMessageStart[1] = 0xcf; pchMessageStart[2] = 0x7e; @@ -412,7 +416,7 @@ class CUnitTestParams : public CMainParams, public CModifiableParams const Checkpoints::CCheckpointData& Checkpoints() const { // UnitTest share the same checkpoints as MAIN - return data; + return checkPointData; } //! Published setters to allow changing values in unit test cases diff --git a/daemon/chainparams.h b/daemon/chainparams.h index 82632553d807..c7884bd6c545 100644 --- a/daemon/chainparams.h +++ b/daemon/chainparams.h @@ -81,9 +81,9 @@ class CChainParams int64_t Interval() const { return nTargetTimespan / nTargetSpacing; } int COINBASE_MATURITY() const { return nMaturity; } CAmount MaxMoneyOut() const { return nMaxMoneyOut; } - CAmount MasternodeCollateral() const { return nMNCollateral; } - /** The masternode count that we will allow the see-saw reward payments to be off by */ - int MasternodeCountDrift() const { return nMasternodeCountDrift; } + CAmount GridnodeCollateral() const { return nMNCollateral; } + /** The gridnode count that we will allow the see-saw reward payments to be off by */ + int GridnodeCountDrift() const { return nGridnodeCountDrift; } /** Make miner stop after a block is found. In RPC, don't return until nGenProcLimit blocks are generated */ bool MineBlocksOnDemand() const { return fMineBlocksOnDemand; } /** In the future use NetworkIDString() for RPC fields */ @@ -105,13 +105,13 @@ class CChainParams return OldDevPubKey(); } - /** Spork key and Masternode Handling **/ + /** Spork key and Gridnode Handling **/ std::string SporkKey() const { return strSporkKey; } std::string SporkKeyOld() const { return strSporkKeyOld; } int64_t NewSporkStart() const { return nEnforceNewSporkKey; } int64_t RejectOldSporkKey() const { return nRejectOldSporkKey; } std::string ObfuscationPoolDummyAddress() const { return strObfuscationPoolDummyAddress; } - int64_t StartMasternodePayments() const { return nStartMasternodePayments; } + int64_t StartGridnodePayments() const { return nStartGridnodePayments; } int64_t Budget_Fee_Confirmations() const { return nBudget_Fee_Confirmations; } CBaseChainParams::Network NetworkID() const { return networkID; } @@ -139,6 +139,9 @@ class CChainParams int Block_Enforce_Invalid() const { return nBlockEnforceInvalidUTXO; } int Zerocoin_Block_V2_Start() const { return nBlockZerocoinV2; } CAmount InvalidAmountFiltered() const { return nInvalidAmountFiltered; }; + unsigned int GetStakeMinAge() const {return nStakeMinAge; }; + std::string GetAltGridNodeAddress() const {return strAltGridNodeAddress; }; + protected: CChainParams() {} @@ -157,7 +160,7 @@ class CChainParams int64_t nTargetTimespan; int64_t nTargetSpacing; int nLastPOWBlock; - int nMasternodeCountDrift; + int nGridnodeCountDrift; int nMaturity; int nModifierUpdateBlock; CAmount nMNCollateral; @@ -185,7 +188,7 @@ class CChainParams int64_t nEnforceNewSporkKey; int64_t nRejectOldSporkKey; std::string strObfuscationPoolDummyAddress; - int64_t nStartMasternodePayments; + int64_t nStartGridnodePayments; std::string zerocoinModulus; int nMaxZerocoinSpendsPerTransaction; CAmount nMinZerocoinMintFee; @@ -205,6 +208,8 @@ class CChainParams int nBlockLastGoodCheckpoint; int nBlockEnforceInvalidUTXO; int nBlockZerocoinV2; + unsigned int nStakeMinAge; + std::string strAltGridNodeAddress; }; /** diff --git a/daemon/coins.cpp b/daemon/coins.cpp index a88f043d14c8..89e4b54e36bb 100644 --- a/daemon/coins.cpp +++ b/daemon/coins.cpp @@ -5,8 +5,10 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "coins.h" +#include "main.h" #include "random.h" +#include "util.h" #include @@ -151,6 +153,17 @@ bool CCoinsViewCache::HaveCoins(const uint256& txid) const return (it != cacheCoins.end() && !it->second.coins.vout.empty()); } +uint256 CCoinsViewCache::GetBestBlock(int height) const +{ + if (hashBlock == uint256(0)) + if (height == -1){ + hashBlock = Params().GenesisBlock().GetHash(); + } else { + hashBlock = base->GetBestBlock(); + } + return hashBlock; +} + uint256 CCoinsViewCache::GetBestBlock() const { if (hashBlock == uint256(0)) diff --git a/daemon/coins.h b/daemon/coins.h index 949ed19d008d..fd57a604ed39 100644 --- a/daemon/coins.h +++ b/daemon/coins.h @@ -431,6 +431,7 @@ class CCoinsViewCache : public CCoinsViewBacked bool GetCoins(const uint256& txid, CCoins& coins) const; bool HaveCoins(const uint256& txid) const; uint256 GetBestBlock() const; + uint256 GetBestBlock(int height) const; void SetBestBlock(const uint256& hashBlock); bool BatchWrite(CCoinsMap& mapCoins, const uint256& hashBlock); diff --git a/daemon/masternode-budget.cpp b/daemon/gridnode-budget.cpp similarity index 83% rename from daemon/masternode-budget.cpp rename to daemon/gridnode-budget.cpp index 9119a2b21be7..39d5e26c2498 100644 --- a/daemon/masternode-budget.cpp +++ b/daemon/gridnode-budget.cpp @@ -8,10 +8,10 @@ #include "main.h" #include "addrman.h" -#include "masternode-budget.h" -#include "masternode-sync.h" -#include "masternode.h" -#include "masternodeman.h" +#include "gridnode-budget.h" +#include "gridnode-sync.h" +#include "gridnode.h" +#include "gridnodeman.h" #include "obfuscation.h" #include "util.h" #include @@ -41,7 +41,7 @@ bool IsBudgetCollateralValid(uint256 nTxCollateralHash, uint256 nExpectedHash, s uint256 nBlockHash; if (!GetTransaction(nTxCollateralHash, txCollateral, nBlockHash, true)) { strError = strprintf("Can't find collateral tx %s", txCollateral.ToString()); - LogPrint("mnbudget","CBudgetProposalBroadcast::IsBudgetCollateralValid - %s\n", strError); + LogPrint("gnbudget","CBudgetProposalBroadcast::IsBudgetCollateralValid - %s\n", strError); return false; } @@ -55,16 +55,16 @@ bool IsBudgetCollateralValid(uint256 nTxCollateralHash, uint256 nExpectedHash, s BOOST_FOREACH (const CTxOut o, txCollateral.vout) { if (!o.scriptPubKey.IsNormalPaymentScript() && !o.scriptPubKey.IsUnspendable()) { strError = strprintf("Invalid Script %s", txCollateral.ToString()); - LogPrint("mnbudget","CBudgetProposalBroadcast::IsBudgetCollateralValid - %s\n", strError); + LogPrint("gnbudget","CBudgetProposalBroadcast::IsBudgetCollateralValid - %s\n", strError); return false; } if (fBudgetFinalization) { // Collateral for budget finalization // Note: there are still old valid budgets out there, but the check for the new 5 UNIGRID finalization collateral // will also cover the old 50 UNIGRID finalization collateral. - LogPrint("mnbudget", "Final Budget: o.scriptPubKey(%s) == findScript(%s) ?\n", o.scriptPubKey.ToString(), findScript.ToString()); + LogPrint("gnbudget", "Final Budget: o.scriptPubKey(%s) == findScript(%s) ?\n", o.scriptPubKey.ToString(), findScript.ToString()); if (o.scriptPubKey == findScript) { - LogPrint("mnbudget", "Final Budget: o.nValue(%ld) >= BUDGET_FEE_TX(%ld) ?\n", o.nValue, BUDGET_FEE_TX); + LogPrint("gnbudget", "Final Budget: o.nValue(%ld) >= BUDGET_FEE_TX(%ld) ?\n", o.nValue, BUDGET_FEE_TX); if(o.nValue >= BUDGET_FEE_TX) { foundOpReturn = true; } @@ -72,9 +72,9 @@ bool IsBudgetCollateralValid(uint256 nTxCollateralHash, uint256 nExpectedHash, s } else { // Collateral for normal budget proposal - LogPrint("mnbudget", "Normal Budget: o.scriptPubKey(%s) == findScript(%s) ?\n", o.scriptPubKey.ToString(), findScript.ToString()); + LogPrint("gnbudget", "Normal Budget: o.scriptPubKey(%s) == findScript(%s) ?\n", o.scriptPubKey.ToString(), findScript.ToString()); if (o.scriptPubKey == findScript) { - LogPrint("mnbudget", "Normal Budget: o.nValue(%ld) >= PROPOSAL_FEE_TX(%ld) ?\n", o.nValue, PROPOSAL_FEE_TX); + LogPrint("gnbudget", "Normal Budget: o.nValue(%ld) >= PROPOSAL_FEE_TX(%ld) ?\n", o.nValue, PROPOSAL_FEE_TX); if(o.nValue >= PROPOSAL_FEE_TX) { foundOpReturn = true; } @@ -83,7 +83,7 @@ bool IsBudgetCollateralValid(uint256 nTxCollateralHash, uint256 nExpectedHash, s } if (!foundOpReturn) { strError = strprintf("Couldn't find opReturn %s in %s", nExpectedHash.ToString(), txCollateral.ToString()); - LogPrint("mnbudget","CBudgetProposalBroadcast::IsBudgetCollateralValid - %s\n", strError); + LogPrint("gnbudget","CBudgetProposalBroadcast::IsBudgetCollateralValid - %s\n", strError); return false; } @@ -112,7 +112,7 @@ bool IsBudgetCollateralValid(uint256 nTxCollateralHash, uint256 nExpectedHash, s return true; } else { strError = strprintf("Collateral requires at least %d confirmations - %d confirmations", Params().Budget_Fee_Confirmations(), conf); - LogPrint("mnbudget","CBudgetProposalBroadcast::IsBudgetCollateralValid - %s - %d confirmations\n", strError, conf); + LogPrint("gnbudget","CBudgetProposalBroadcast::IsBudgetCollateralValid - %s - %d confirmations\n", strError, conf); return false; } } @@ -123,11 +123,11 @@ void CBudgetManager::CheckOrphanVotes() std::string strError = ""; - std::map::iterator it1 = mapOrphanMasternodeBudgetVotes.begin(); - while (it1 != mapOrphanMasternodeBudgetVotes.end()) { + std::map::iterator it1 = mapOrphanGridnodeBudgetVotes.begin(); + while (it1 != mapOrphanGridnodeBudgetVotes.end()) { if (budget.UpdateProposal(((*it1).second), NULL, strError)) { - LogPrint("mnbudget","CBudgetManager::CheckOrphanVotes - Proposal/Budget is known, activating and removing orphan vote\n"); - mapOrphanMasternodeBudgetVotes.erase(it1++); + LogPrint("gnbudget","CBudgetManager::CheckOrphanVotes - Proposal/Budget is known, activating and removing orphan vote\n"); + mapOrphanGridnodeBudgetVotes.erase(it1++); } else { ++it1; } @@ -135,13 +135,13 @@ void CBudgetManager::CheckOrphanVotes() std::map::iterator it2 = mapOrphanFinalizedBudgetVotes.begin(); while (it2 != mapOrphanFinalizedBudgetVotes.end()) { if (budget.UpdateFinalizedBudget(((*it2).second), NULL, strError)) { - LogPrint("mnbudget","CBudgetManager::CheckOrphanVotes - Proposal/Budget is known, activating and removing orphan vote\n"); + LogPrint("gnbudget","CBudgetManager::CheckOrphanVotes - Proposal/Budget is known, activating and removing orphan vote\n"); mapOrphanFinalizedBudgetVotes.erase(it2++); } else { ++it2; } } - LogPrint("mnbudget","CBudgetManager::CheckOrphanVotes - Done\n"); + LogPrint("gnbudget","CBudgetManager::CheckOrphanVotes - Done\n"); } void CBudgetManager::SubmitFinalBudget() @@ -158,7 +158,7 @@ void CBudgetManager::SubmitFinalBudget() int nBlockStart = nCurrentHeight - nCurrentHeight % GetBudgetPaymentCycleBlocks() + GetBudgetPaymentCycleBlocks(); if (nSubmittedHeight >= nBlockStart){ - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - nSubmittedHeight(=%ld) < nBlockStart(=%ld) condition not fulfilled.\n", nSubmittedHeight, nBlockStart); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - nSubmittedHeight(=%ld) < nBlockStart(=%ld) condition not fulfilled.\n", nSubmittedHeight, nBlockStart); return; } @@ -166,7 +166,7 @@ void CBudgetManager::SubmitFinalBudget() int finalizationWindow = ((GetBudgetPaymentCycleBlocks() / 30) * 2); if (Params().NetworkID() == CBaseChainParams::TESTNET) { - // NOTE: 9 blocks for testnet is way to short to have any masternode submit an automatic vote on the finalized(!) budget, + // NOTE: 9 blocks for testnet is way to short to have any gridnode submit an automatic vote on the finalized(!) budget, // because those votes are only submitted/relayed once every 56 blocks in CFinalizedBudget::AutoCheck() finalizationWindow = 64; // 56 + 4 finalization confirmations + 4 minutes buffer for propagation @@ -177,8 +177,8 @@ void CBudgetManager::SubmitFinalBudget() int nOffsetToStart = nFinalizationStart - nCurrentHeight; if (nBlockStart - nCurrentHeight > finalizationWindow) { - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - Too early for finalization. Current block is %ld, next Superblock is %ld.\n", nCurrentHeight, nBlockStart); - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - First possible block for finalization: %ld. Last possible block for finalization: %ld. You have to wait for %ld block(s) until Budget finalization will be possible\n", nFinalizationStart, nBlockStart, nOffsetToStart); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - Too early for finalization. Current block is %ld, next Superblock is %ld.\n", nCurrentHeight, nBlockStart); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - First possible block for finalization: %ld. Last possible block for finalization: %ld. You have to wait for %ld block(s) until Budget finalization will be possible\n", nFinalizationStart, nBlockStart, nOffsetToStart); return; } @@ -196,13 +196,13 @@ void CBudgetManager::SubmitFinalBudget() } if (vecTxBudgetPayments.size() < 1) { - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - Found No Proposals For Period\n"); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - Found No Proposals For Period\n"); return; } CFinalizedBudgetBroadcast tempBudget(strBudgetName, nBlockStart, vecTxBudgetPayments, 0); if (mapSeenFinalizedBudgets.count(tempBudget.GetHash())) { - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - Budget already exists - %s\n", tempBudget.GetHash().ToString()); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - Budget already exists - %s\n", tempBudget.GetHash().ToString()); nSubmittedHeight = nCurrentHeight; return; //already exists } @@ -214,7 +214,7 @@ void CBudgetManager::SubmitFinalBudget() if (!mapCollateralTxids.count(tempBudget.GetHash())) { CWalletTx wtx; if (!pwalletMain->GetBudgetFinalizationCollateralTX(wtx, tempBudget.GetHash(), false)) { - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - Can't make collateral transaction\n"); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - Can't make collateral transaction\n"); return; } @@ -234,7 +234,7 @@ void CBudgetManager::SubmitFinalBudget() uint256 nBlockHash; if (!GetTransaction(txidCollateral, txCollateral, nBlockHash, true)) { - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - Can't find collateral tx %s", txidCollateral.ToString()); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - Can't find collateral tx %s", txidCollateral.ToString()); return; } @@ -253,7 +253,7 @@ void CBudgetManager::SubmitFinalBudget() -- This function is tied to NewBlock, so we will propagate this budget while the block is also propagating */ if (conf < Params().Budget_Fee_Confirmations() + 1) { - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - Collateral requires at least %d confirmations - %s - %d confirmations\n", Params().Budget_Fee_Confirmations() + 1, txidCollateral.ToString(), conf); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - Collateral requires at least %d confirmations - %s - %d confirmations\n", Params().Budget_Fee_Confirmations() + 1, txidCollateral.ToString(), conf); return; } @@ -262,7 +262,7 @@ void CBudgetManager::SubmitFinalBudget() std::string strError = ""; if (!finalizedBudgetBroadcast.IsValid(strError)) { - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - Invalid finalized budget - %s \n", strError); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - Invalid finalized budget - %s \n", strError); return; } @@ -271,7 +271,7 @@ void CBudgetManager::SubmitFinalBudget() finalizedBudgetBroadcast.Relay(); budget.AddFinalizedBudget(finalizedBudgetBroadcast); nSubmittedHeight = nCurrentHeight; - LogPrint("mnbudget","CBudgetManager::SubmitFinalBudget - Done! %s\n", finalizedBudgetBroadcast.GetHash().ToString()); + LogPrint("gnbudget","CBudgetManager::SubmitFinalBudget - Done! %s\n", finalizedBudgetBroadcast.GetHash().ToString()); } // @@ -281,7 +281,7 @@ void CBudgetManager::SubmitFinalBudget() CBudgetDB::CBudgetDB() { pathDB = GetDataDir() / "budget.dat"; - strMagicMessage = "MasternodeBudget"; + strMagicMessage = "GridnodeBudget"; } bool CBudgetDB::Write(const CBudgetManager& objToSave) @@ -292,7 +292,7 @@ bool CBudgetDB::Write(const CBudgetManager& objToSave) // serialize, checksum data up to that point, then append checksum CDataStream ssObj(SER_DISK, CLIENT_VERSION); - ssObj << strMagicMessage; // masternode cache file specific magic message + ssObj << strMagicMessage; // gridnode cache file specific magic message ssObj << FLATDATA(Params().MessageStart()); // network specific magic number ssObj << objToSave; uint256 hash = Hash(ssObj.begin(), ssObj.end()); @@ -312,7 +312,7 @@ bool CBudgetDB::Write(const CBudgetManager& objToSave) } fileout.fclose(); - LogPrint("mnbudget","Written info to budget.dat %dms\n", GetTimeMillis() - nStart); + LogPrint("gnbudget","Written info to budget.dat %dms\n", GetTimeMillis() - nStart); return true; } @@ -363,12 +363,12 @@ CBudgetDB::ReadResult CBudgetDB::Read(CBudgetManager& objToLoad, bool fDryRun) unsigned char pchMsgTmp[4]; std::string strMagicMessageTmp; try { - // de-serialize file header (masternode cache file specific magic message) and .. + // de-serialize file header (gridnode cache file specific magic message) and .. ssObj >> strMagicMessageTmp; // ... verify the message matches predefined one if (strMagicMessage != strMagicMessageTmp) { - error("%s : Invalid masternode cache magic message", __func__); + error("%s : Invalid gridnode cache magic message", __func__); return IncorrectMagicMessage; } @@ -390,13 +390,13 @@ CBudgetDB::ReadResult CBudgetDB::Read(CBudgetManager& objToLoad, bool fDryRun) return IncorrectFormat; } - LogPrint("mnbudget","Loaded info from budget.dat %dms\n", GetTimeMillis() - nStart); - LogPrint("mnbudget"," %s\n", objToLoad.ToString()); + LogPrint("gnbudget","Loaded info from budget.dat %dms\n", GetTimeMillis() - nStart); + LogPrint("gnbudget"," %s\n", objToLoad.ToString()); if (!fDryRun) { - LogPrint("mnbudget","Budget manager - cleaning....\n"); + LogPrint("gnbudget","Budget manager - cleaning....\n"); objToLoad.CheckAndRemove(); - LogPrint("mnbudget","Budget manager - result:\n"); - LogPrint("mnbudget"," %s\n", objToLoad.ToString()); + LogPrint("gnbudget","Budget manager - result:\n"); + LogPrint("gnbudget"," %s\n", objToLoad.ToString()); } return Ok; @@ -409,24 +409,24 @@ void DumpBudgets() CBudgetDB budgetdb; CBudgetManager tempBudget; - LogPrint("mnbudget","Verifying budget.dat format...\n"); + LogPrint("gnbudget","Verifying budget.dat format...\n"); CBudgetDB::ReadResult readResult = budgetdb.Read(tempBudget, true); // there was an error and it was not an error on file opening => do not proceed if (readResult == CBudgetDB::FileError) - LogPrint("mnbudget","Missing budgets file - budget.dat, will try to recreate\n"); + LogPrint("gnbudget","Missing budgets file - budget.dat, will try to recreate\n"); else if (readResult != CBudgetDB::Ok) { - LogPrint("mnbudget","Error reading budget.dat: "); + LogPrint("gnbudget","Error reading budget.dat: "); if (readResult == CBudgetDB::IncorrectFormat) - LogPrint("mnbudget","magic is ok but data has invalid format, will try to recreate\n"); + LogPrint("gnbudget","magic is ok but data has invalid format, will try to recreate\n"); else { - LogPrint("mnbudget","file format is unknown or invalid, please fix it manually\n"); + LogPrint("gnbudget","file format is unknown or invalid, please fix it manually\n"); return; } } - LogPrint("mnbudget","Writting info to budget.dat...\n"); + LogPrint("gnbudget","Writting info to budget.dat...\n"); budgetdb.Write(budget); - LogPrint("mnbudget","Budget dump finished %dms\n", GetTimeMillis() - nStart); + LogPrint("gnbudget","Budget dump finished %dms\n", GetTimeMillis() - nStart); } bool CBudgetManager::AddFinalizedBudget(CFinalizedBudget& finalizedBudget) @@ -447,7 +447,7 @@ bool CBudgetManager::AddProposal(CBudgetProposal& budgetProposal) LOCK(cs); std::string strError = ""; if (!budgetProposal.IsValid(strError)) { - LogPrint("mnbudget","CBudgetManager::AddProposal - invalid budget proposal - %s\n", strError); + LogPrint("gnbudget","CBudgetManager::AddProposal - invalid budget proposal - %s\n", strError); return false; } @@ -456,7 +456,7 @@ bool CBudgetManager::AddProposal(CBudgetProposal& budgetProposal) } mapProposals.insert(make_pair(budgetProposal.GetHash(), budgetProposal)); - LogPrint("mnbudget","CBudgetManager::AddProposal - proposal %s added\n", budgetProposal.GetName ().c_str ()); + LogPrint("gnbudget","CBudgetManager::AddProposal - proposal %s added\n", budgetProposal.GetName ().c_str ()); return true; } @@ -475,24 +475,24 @@ void CBudgetManager::CheckAndRemove() } } - LogPrint("mnbudget", "CBudgetManager::CheckAndRemove at Height=%d\n", nHeight); + LogPrint("gnbudget", "CBudgetManager::CheckAndRemove at Height=%d\n", nHeight); map tmpMapFinalizedBudgets; map tmpMapProposals; std::string strError = ""; - LogPrint("mnbudget", "CBudgetManager::CheckAndRemove - mapFinalizedBudgets cleanup - size before: %d\n", mapFinalizedBudgets.size()); + LogPrint("gnbudget", "CBudgetManager::CheckAndRemove - mapFinalizedBudgets cleanup - size before: %d\n", mapFinalizedBudgets.size()); std::map::iterator it = mapFinalizedBudgets.begin(); while (it != mapFinalizedBudgets.end()) { CFinalizedBudget* pfinalizedBudget = &((*it).second); pfinalizedBudget->fValid = pfinalizedBudget->IsValid(strError); if (!strError.empty ()) { - LogPrint("mnbudget","CBudgetManager::CheckAndRemove - Invalid finalized budget: %s\n", strError); + LogPrint("gnbudget","CBudgetManager::CheckAndRemove - Invalid finalized budget: %s\n", strError); } else { - LogPrint("mnbudget","CBudgetManager::CheckAndRemove - Found valid finalized budget: %s %s\n", + LogPrint("gnbudget","CBudgetManager::CheckAndRemove - Found valid finalized budget: %s %s\n", pfinalizedBudget->strBudgetName.c_str(), pfinalizedBudget->nFeeTXHash.ToString().c_str()); } @@ -504,17 +504,17 @@ void CBudgetManager::CheckAndRemove() ++it; } - LogPrint("mnbudget", "CBudgetManager::CheckAndRemove - mapProposals cleanup - size before: %d\n", mapProposals.size()); + LogPrint("gnbudget", "CBudgetManager::CheckAndRemove - mapProposals cleanup - size before: %d\n", mapProposals.size()); std::map::iterator it2 = mapProposals.begin(); while (it2 != mapProposals.end()) { CBudgetProposal* pbudgetProposal = &((*it2).second); pbudgetProposal->fValid = pbudgetProposal->IsValid(strError); if (!strError.empty ()) { - LogPrint("mnbudget","CBudgetManager::CheckAndRemove - Invalid budget proposal - %s\n", strError); + LogPrint("gnbudget","CBudgetManager::CheckAndRemove - Invalid budget proposal - %s\n", strError); strError = ""; } else { - LogPrint("mnbudget","CBudgetManager::CheckAndRemove - Found valid budget proposal: %s %s\n", + LogPrint("gnbudget","CBudgetManager::CheckAndRemove - Found valid budget proposal: %s %s\n", pbudgetProposal->strProposalName.c_str(), pbudgetProposal->nFeeTXHash.ToString().c_str()); } if (pbudgetProposal->fValid) { @@ -531,9 +531,9 @@ void CBudgetManager::CheckAndRemove() // mapFinalizedBudgets = tmpMapFinalizedBudgets; // mapProposals = tmpMapProposals; - LogPrint("mnbudget", "CBudgetManager::CheckAndRemove - mapFinalizedBudgets cleanup - size after: %d\n", mapFinalizedBudgets.size()); - LogPrint("mnbudget", "CBudgetManager::CheckAndRemove - mapProposals cleanup - size after: %d\n", mapProposals.size()); - LogPrint("mnbudget","CBudgetManager::CheckAndRemove - PASSED\n"); + LogPrint("gnbudget", "CBudgetManager::CheckAndRemove - mapFinalizedBudgets cleanup - size after: %d\n", mapFinalizedBudgets.size()); + LogPrint("gnbudget", "CBudgetManager::CheckAndRemove - mapProposals cleanup - size after: %d\n", mapProposals.size()); + LogPrint("gnbudget","CBudgetManager::CheckAndRemove - PASSED\n"); } @@ -575,10 +575,10 @@ void CBudgetManager::FillBlockPayee(CMutableTransaction& txNew, CAmount nFees, b CTxDestination address1; ExtractDestination(payee, address1); CBitcoinAddress address2(address1); - LogPrint("mnbudget","CBudgetManager::FillBlockPayee - Budget payment to %s for %lld, nHighestCount = %d\n", address2.ToString(), nAmount, nHighestCount); + LogPrint("gnbudget","CBudgetManager::FillBlockPayee - Budget payment to %s for %lld, nHighestCount = %d\n", address2.ToString(), nAmount, nHighestCount); } else { - LogPrint("mnbudget","CBudgetManager::FillBlockPayee - No Budget payment, nHighestCount = %d\n", nHighestCount); + LogPrint("gnbudget","CBudgetManager::FillBlockPayee - No Budget payment, nHighestCount = %d\n", nHighestCount); } } else { //miners get the full amount on these blocks @@ -595,7 +595,7 @@ void CBudgetManager::FillBlockPayee(CMutableTransaction& txNew, CAmount nFees, b ExtractDestination(payee, address1); CBitcoinAddress address2(address1); - LogPrint("mnbudget","CBudgetManager::FillBlockPayee - Budget payment to %s for %lld\n", address2.ToString(), nAmount); + LogPrint("gnbudget","CBudgetManager::FillBlockPayee - Budget payment to %s for %lld\n", address2.ToString(), nAmount); } } } @@ -642,7 +642,7 @@ CBudgetProposal* CBudgetManager::FindProposal(uint256 nHash) bool CBudgetManager::IsBudgetPaymentBlock(int nBlockHeight) { int nHighestCount = -1; - int nFivePercent = mnodeman.CountEnabled(ActiveProtocol()) / 20; + int nFivePercent = gnodeman.CountEnabled(ActiveProtocol()) / 20; std::map::iterator it = mapFinalizedBudgets.begin(); while (it != mapFinalizedBudgets.end()) { @@ -656,10 +656,10 @@ bool CBudgetManager::IsBudgetPaymentBlock(int nBlockHeight) ++it; } - LogPrint("mnbudget","CBudgetManager::IsBudgetPaymentBlock() - nHighestCount: %lli, 5%% of Masternodes: %lli. Number of finalized budgets: %lli\n", + LogPrint("gnbudget","CBudgetManager::IsBudgetPaymentBlock() - nHighestCount: %lli, 5%% of Gridnodes: %lli. Number of finalized budgets: %lli\n", nHighestCount, nFivePercent, mapFinalizedBudgets.size()); - // If budget doesn't have 5% of the network votes, then we should pay a masternode instead + // If budget doesn't have 5% of the network votes, then we should pay a gridnode instead if (nHighestCount > nFivePercent) return true; return false; @@ -671,10 +671,10 @@ TrxValidationStatus CBudgetManager::IsTransactionValid(const CTransaction& txNew TrxValidationStatus transactionStatus = TrxValidationStatus::InValid; int nHighestCount = 0; - int nFivePercent = mnodeman.CountEnabled(ActiveProtocol()) / 20; + int nFivePercent = gnodeman.CountEnabled(ActiveProtocol()) / 20; std::vector ret; - LogPrint("mnbudget","CBudgetManager::IsTransactionValid - checking %lli finalized budgets\n", mapFinalizedBudgets.size()); + LogPrint("gnbudget","CBudgetManager::IsTransactionValid - checking %lli finalized budgets\n", mapFinalizedBudgets.size()); // ------- Grab The Highest Count @@ -691,43 +691,43 @@ TrxValidationStatus CBudgetManager::IsTransactionValid(const CTransaction& txNew ++it; } - LogPrint("mnbudget","CBudgetManager::IsTransactionValid() - nHighestCount: %lli, 5%% of Masternodes: %lli mapFinalizedBudgets.size(): %ld\n", + LogPrint("gnbudget","CBudgetManager::IsTransactionValid() - nHighestCount: %lli, 5%% of Gridnodes: %lli mapFinalizedBudgets.size(): %ld\n", nHighestCount, nFivePercent, mapFinalizedBudgets.size()); /* - If budget doesn't have 5% of the network votes, then we should pay a masternode instead + If budget doesn't have 5% of the network votes, then we should pay a gridnode instead */ if (nHighestCount < nFivePercent) return TrxValidationStatus::InValid; // check the highest finalized budgets (+/- 10% to assist in consensus) std::string strProposals = ""; - int nCountThreshold = nHighestCount - mnodeman.CountEnabled(ActiveProtocol()) / 10; + int nCountThreshold = nHighestCount - gnodeman.CountEnabled(ActiveProtocol()) / 10; bool fThreshold = false; it = mapFinalizedBudgets.begin(); while (it != mapFinalizedBudgets.end()) { CFinalizedBudget* pfinalizedBudget = &((*it).second); strProposals = pfinalizedBudget->GetProposals(); - LogPrint("mnbudget","CBudgetManager::IsTransactionValid - checking budget (%s) with blockstart %lli, blockend %lli, nBlockHeight %lli, votes %lli, nCountThreshold %lli\n", + LogPrint("gnbudget","CBudgetManager::IsTransactionValid - checking budget (%s) with blockstart %lli, blockend %lli, nBlockHeight %lli, votes %lli, nCountThreshold %lli\n", strProposals.c_str(), pfinalizedBudget->GetBlockStart(), pfinalizedBudget->GetBlockEnd(), nBlockHeight, pfinalizedBudget->GetVoteCount(), nCountThreshold); if (pfinalizedBudget->GetVoteCount() > nCountThreshold) { fThreshold = true; - LogPrint("mnbudget","CBudgetManager::IsTransactionValid - GetVoteCount() > nCountThreshold passed\n"); + LogPrint("gnbudget","CBudgetManager::IsTransactionValid - GetVoteCount() > nCountThreshold passed\n"); if (nBlockHeight >= pfinalizedBudget->GetBlockStart() && nBlockHeight <= pfinalizedBudget->GetBlockEnd()) { - LogPrint("mnbudget","CBudgetManager::IsTransactionValid - GetBlockStart() passed\n"); + LogPrint("gnbudget","CBudgetManager::IsTransactionValid - GetBlockStart() passed\n"); transactionStatus = pfinalizedBudget->IsTransactionValid(txNew, nBlockHeight); if (transactionStatus == TrxValidationStatus::Valid) { - LogPrint("mnbudget","CBudgetManager::IsTransactionValid - pfinalizedBudget->IsTransactionValid() passed\n"); + LogPrint("gnbudget","CBudgetManager::IsTransactionValid - pfinalizedBudget->IsTransactionValid() passed\n"); return TrxValidationStatus::Valid; } else { - LogPrint("mnbudget","CBudgetManager::IsTransactionValid - pfinalizedBudget->IsTransactionValid() error\n"); + LogPrint("gnbudget","CBudgetManager::IsTransactionValid - pfinalizedBudget->IsTransactionValid() error\n"); } } else { - LogPrint("mnbudget","CBudgetManager::IsTransactionValid - GetBlockStart() failed, budget is outside current payment cycle and will be ignored.\n"); + LogPrint("gnbudget","CBudgetManager::IsTransactionValid - GetBlockStart() failed, budget is outside current payment cycle and will be ignored.\n"); } } @@ -735,7 +735,7 @@ TrxValidationStatus CBudgetManager::IsTransactionValid(const CTransaction& txNew ++it; } - // If not enough masternodes autovoted for any of the finalized budgets pay a masternode instead + // If not enough Gridnodes autovoted for any of the finalized budgets pay a gridnode instead if(!fThreshold) { transactionStatus = TrxValidationStatus::VoteThreshold; } @@ -810,32 +810,32 @@ std::vector CBudgetManager::GetBudget() while (it2 != vBudgetPorposalsSort.end()) { CBudgetProposal* pbudgetProposal = (*it2).first; - LogPrint("mnbudget","CBudgetManager::GetBudget() - Processing Budget %s\n", pbudgetProposal->strProposalName.c_str()); + LogPrint("gnbudget","CBudgetManager::GetBudget() - Processing Budget %s\n", pbudgetProposal->strProposalName.c_str()); //prop start/end should be inside this period if (pbudgetProposal->fValid && pbudgetProposal->nBlockStart <= nBlockStart && pbudgetProposal->nBlockEnd >= nBlockEnd && - pbudgetProposal->GetYeas() - pbudgetProposal->GetNays() > mnodeman.CountEnabled(ActiveProtocol()) / 10 && + pbudgetProposal->GetYeas() - pbudgetProposal->GetNays() > gnodeman.CountEnabled(ActiveProtocol()) / 10 && pbudgetProposal->IsEstablished()) { - LogPrint("mnbudget","CBudgetManager::GetBudget() - Check 1 passed: valid=%d | %ld <= %ld | %ld >= %ld | Yeas=%d Nays=%d Count=%d | established=%d\n", + LogPrint("gnbudget","CBudgetManager::GetBudget() - Check 1 passed: valid=%d | %ld <= %ld | %ld >= %ld | Yeas=%d Nays=%d Count=%d | established=%d\n", pbudgetProposal->fValid, pbudgetProposal->nBlockStart, nBlockStart, pbudgetProposal->nBlockEnd, - nBlockEnd, pbudgetProposal->GetYeas(), pbudgetProposal->GetNays(), mnodeman.CountEnabled(ActiveProtocol()) / 10, + nBlockEnd, pbudgetProposal->GetYeas(), pbudgetProposal->GetNays(), gnodeman.CountEnabled(ActiveProtocol()) / 10, pbudgetProposal->IsEstablished()); if (pbudgetProposal->GetAmount() + nBudgetAllocated <= nTotalBudget) { pbudgetProposal->SetAllotted(pbudgetProposal->GetAmount()); nBudgetAllocated += pbudgetProposal->GetAmount(); vBudgetProposalsRet.push_back(pbudgetProposal); - LogPrint("mnbudget","CBudgetManager::GetBudget() - Check 2 passed: Budget added\n"); + LogPrint("gnbudget","CBudgetManager::GetBudget() - Check 2 passed: Budget added\n"); } else { pbudgetProposal->SetAllotted(0); - LogPrint("mnbudget","CBudgetManager::GetBudget() - Check 2 failed: no amount allotted\n"); + LogPrint("gnbudget","CBudgetManager::GetBudget() - Check 2 failed: no amount allotted\n"); } } else { - LogPrint("mnbudget","CBudgetManager::GetBudget() - Check 1 failed: valid=%d | %ld <= %ld | %ld >= %ld | Yeas=%d Nays=%d Count=%d | established=%d\n", + LogPrint("gnbudget","CBudgetManager::GetBudget() - Check 1 failed: valid=%d | %ld <= %ld | %ld >= %ld | Yeas=%d Nays=%d Count=%d | established=%d\n", pbudgetProposal->fValid, pbudgetProposal->nBlockStart, nBlockStart, pbudgetProposal->nBlockEnd, - nBlockEnd, pbudgetProposal->GetYeas(), pbudgetProposal->GetNays(), mnodeman.CountEnabled(ActiveProtocol()) / 10, + nBlockEnd, pbudgetProposal->GetYeas(), pbudgetProposal->GetNays(), gnodeman.CountEnabled(ActiveProtocol()) / 10, pbudgetProposal->IsEstablished()); } @@ -901,7 +901,7 @@ std::string CBudgetManager::GetRequiredPaymentsString(int nBlockHeight) ret += payment.nProposalHash.ToString(); } } else { - LogPrint("mnbudget","CBudgetManager::GetRequiredPaymentsString - Couldn't find budget payment for block %d\n", nBlockHeight); + LogPrint("gnbudget","CBudgetManager::GetRequiredPaymentsString - Couldn't find budget payment for block %d\n", nBlockHeight); } } @@ -961,7 +961,7 @@ void CBudgetManager::NewBlock() TRY_LOCK(cs, fBudgetNewBlock); if (!fBudgetNewBlock) return; - if (masternodeSync.RequestedMasternodeAssets <= MASTERNODE_SYNC_BUDGET) return; + if (GridnodeSync.RequestedGridnodeAssets <= GRIDNODE_SYNC_BUDGET) return; if (strBudgetMode == "suggest") { //suggest the budget we see SubmitFinalBudget(); @@ -971,8 +971,8 @@ void CBudgetManager::NewBlock() if (chainActive.Height() % 14 != 0) return; // incremental sync with our peers - if (masternodeSync.IsSynced()) { - LogPrint("mnbudget","CBudgetManager::NewBlock - incremental sync started\n"); + if (GridnodeSync.IsSynced()) { + LogPrint("gnbudget","CBudgetManager::NewBlock - incremental sync started\n"); if (chainActive.Height() % 1440 == rand() % 1440) { ClearSeen(); ResetSync(); @@ -991,7 +991,7 @@ void CBudgetManager::NewBlock() //remove invalid votes once in a while (we have to check the signatures and validity of every vote, somewhat CPU intensive) - LogPrint("mnbudget","CBudgetManager::NewBlock - askedForSourceProposalOrBudget cleanup - size: %d\n", askedForSourceProposalOrBudget.size()); + LogPrint("gnbudget","CBudgetManager::NewBlock - askedForSourceProposalOrBudget cleanup - size: %d\n", askedForSourceProposalOrBudget.size()); std::map::iterator it = askedForSourceProposalOrBudget.begin(); while (it != askedForSourceProposalOrBudget.end()) { if ((*it).second > GetTime() - (60 * 60 * 24)) { @@ -1001,21 +1001,21 @@ void CBudgetManager::NewBlock() } } - LogPrint("mnbudget","CBudgetManager::NewBlock - mapProposals cleanup - size: %d\n", mapProposals.size()); + LogPrint("gnbudget","CBudgetManager::NewBlock - mapProposals cleanup - size: %d\n", mapProposals.size()); std::map::iterator it2 = mapProposals.begin(); while (it2 != mapProposals.end()) { (*it2).second.CleanAndRemove(false); ++it2; } - LogPrint("mnbudget","CBudgetManager::NewBlock - mapFinalizedBudgets cleanup - size: %d\n", mapFinalizedBudgets.size()); + LogPrint("gnbudget","CBudgetManager::NewBlock - mapFinalizedBudgets cleanup - size: %d\n", mapFinalizedBudgets.size()); std::map::iterator it3 = mapFinalizedBudgets.begin(); while (it3 != mapFinalizedBudgets.end()) { (*it3).second.CleanAndRemove(false); ++it3; } - LogPrint("mnbudget","CBudgetManager::NewBlock - vecImmatureBudgetProposals cleanup - size: %d\n", vecImmatureBudgetProposals.size()); + LogPrint("gnbudget","CBudgetManager::NewBlock - vecImmatureBudgetProposals cleanup - size: %d\n", vecImmatureBudgetProposals.size()); std::vector::iterator it4 = vecImmatureBudgetProposals.begin(); while (it4 != vecImmatureBudgetProposals.end()) { std::string strError = ""; @@ -1026,7 +1026,7 @@ void CBudgetManager::NewBlock() } if (!(*it4).IsValid(strError)) { - LogPrint("mnbudget","mprop (immature) - invalid budget proposal - %s\n", strError); + LogPrint("gnbudget","mprop (immature) - invalid budget proposal - %s\n", strError); it4 = vecImmatureBudgetProposals.erase(it4); continue; } @@ -1036,11 +1036,11 @@ void CBudgetManager::NewBlock() (*it4).Relay(); } - LogPrint("mnbudget","mprop (immature) - new budget - %s\n", (*it4).GetHash().ToString()); + LogPrint("gnbudget","mprop (immature) - new budget - %s\n", (*it4).GetHash().ToString()); it4 = vecImmatureBudgetProposals.erase(it4); } - LogPrint("mnbudget","CBudgetManager::NewBlock - vecImmatureFinalizedBudgets cleanup - size: %d\n", vecImmatureFinalizedBudgets.size()); + LogPrint("gnbudget","CBudgetManager::NewBlock - vecImmatureFinalizedBudgets cleanup - size: %d\n", vecImmatureFinalizedBudgets.size()); std::vector::iterator it5 = vecImmatureFinalizedBudgets.begin(); while (it5 != vecImmatureFinalizedBudgets.end()) { std::string strError = ""; @@ -1051,12 +1051,12 @@ void CBudgetManager::NewBlock() } if (!(*it5).IsValid(strError)) { - LogPrint("mnbudget","fbs (immature) - invalid finalized budget - %s\n", strError); + LogPrint("gnbudget","fbs (immature) - invalid finalized budget - %s\n", strError); it5 = vecImmatureFinalizedBudgets.erase(it5); continue; } - LogPrint("mnbudget","fbs (immature) - new finalized budget - %s\n", (*it5).GetHash().ToString()); + LogPrint("gnbudget","fbs (immature) - new finalized budget - %s\n", (*it5).GetHash().ToString()); CFinalizedBudget finalizedBudget((*it5)); if (AddFinalizedBudget(finalizedBudget)) { @@ -1065,57 +1065,57 @@ void CBudgetManager::NewBlock() it5 = vecImmatureFinalizedBudgets.erase(it5); } - LogPrint("mnbudget","CBudgetManager::NewBlock - PASSED\n"); + LogPrint("gnbudget","CBudgetManager::NewBlock - PASSED\n"); } void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) { // lite mode is not supported if (fLiteMode) return; - if (!masternodeSync.IsBlockchainSynced()) return; + if (!GridnodeSync.IsBlockchainSynced()) return; LOCK(cs_budget); - if (strCommand == "mnvs") { //Masternode vote sync + if (strCommand == "gnvs") { //Gridnode vote sync uint256 nProp; vRecv >> nProp; if (Params().NetworkID() == CBaseChainParams::MAIN) { if (nProp == 0) { - if (pfrom->HasFulfilledRequest("mnvs")) { - LogPrint("mnbudget","mnvs - peer already asked me for the list\n"); + if (pfrom->HasFulfilledRequest("gnvs")) { + LogPrint("gnbudget","gnvs - peer already asked me for the list\n"); Misbehaving(pfrom->GetId(), 20); return; } - pfrom->FulfilledRequest("mnvs"); + pfrom->FulfilledRequest("gnvs"); } } Sync(pfrom, nProp); - LogPrint("mnbudget", "mnvs - Sent Masternode votes to peer %i\n", pfrom->GetId()); + LogPrint("gnbudget", "gnvs - Sent Gridnode votes to peer %i\n", pfrom->GetId()); } - if (strCommand == "mprop") { //Masternode Proposal + if (strCommand == "mprop") { //Gridnode Proposal CBudgetProposalBroadcast budgetProposalBroadcast; vRecv >> budgetProposalBroadcast; - if (mapSeenMasternodeBudgetProposals.count(budgetProposalBroadcast.GetHash())) { - masternodeSync.AddedBudgetItem(budgetProposalBroadcast.GetHash()); + if (mapSeenGridnodeBudgetProposals.count(budgetProposalBroadcast.GetHash())) { + GridnodeSync.AddedBudgetItem(budgetProposalBroadcast.GetHash()); return; } std::string strError = ""; int nConf = 0; if (!IsBudgetCollateralValid(budgetProposalBroadcast.nFeeTXHash, budgetProposalBroadcast.GetHash(), strError, budgetProposalBroadcast.nTime, nConf)) { - LogPrint("mnbudget","Proposal FeeTX is not valid - %s - %s\n", budgetProposalBroadcast.nFeeTXHash.ToString(), strError); + LogPrint("gnbudget","Proposal FeeTX is not valid - %s - %s\n", budgetProposalBroadcast.nFeeTXHash.ToString(), strError); if (nConf >= 1) vecImmatureBudgetProposals.push_back(budgetProposalBroadcast); return; } - mapSeenMasternodeBudgetProposals.insert(make_pair(budgetProposalBroadcast.GetHash(), budgetProposalBroadcast)); + mapSeenGridnodeBudgetProposals.insert(make_pair(budgetProposalBroadcast.GetHash(), budgetProposalBroadcast)); if (!budgetProposalBroadcast.IsValid(strError)) { - LogPrint("mnbudget","mprop - invalid budget proposal - %s\n", strError); + LogPrint("gnbudget","mprop - invalid budget proposal - %s\n", strError); return; } @@ -1123,50 +1123,50 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData if (AddProposal(budgetProposal)) { budgetProposalBroadcast.Relay(); } - masternodeSync.AddedBudgetItem(budgetProposalBroadcast.GetHash()); + GridnodeSync.AddedBudgetItem(budgetProposalBroadcast.GetHash()); - LogPrint("mnbudget","mprop - new budget - %s\n", budgetProposalBroadcast.GetHash().ToString()); + LogPrint("gnbudget","mprop - new budget - %s\n", budgetProposalBroadcast.GetHash().ToString()); //We might have active votes for this proposal that are valid now CheckOrphanVotes(); } - if (strCommand == "mvote") { //Masternode Vote + if (strCommand == "mvote") { //Gridnode Vote CBudgetVote vote; vRecv >> vote; vote.fValid = true; - if (mapSeenMasternodeBudgetVotes.count(vote.GetHash())) { - masternodeSync.AddedBudgetItem(vote.GetHash()); + if (mapSeenGridnodeBudgetVotes.count(vote.GetHash())) { + GridnodeSync.AddedBudgetItem(vote.GetHash()); return; } - CMasternode* pmn = mnodeman.Find(vote.vin); - if (pmn == NULL) { - LogPrint("mnbudget","mvote - unknown masternode - vin: %s\n", vote.vin.prevout.hash.ToString()); - mnodeman.AskForMN(pfrom, vote.vin); + CGridnode* pgn = gnodeman.Find(vote.vin); + if (pgn == NULL) { + LogPrint("gnbudget","mvote - unknown gridnode - vin: %s\n", vote.vin.prevout.hash.ToString()); + gnodeman.AskForMN(pfrom, vote.vin); return; } - mapSeenMasternodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); + mapSeenGridnodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); if (!vote.SignatureValid(true)) { - if (masternodeSync.IsSynced()) { + if (GridnodeSync.IsSynced()) { LogPrintf("CBudgetManager::ProcessMessage() : mvote - signature invalid\n"); Misbehaving(pfrom->GetId(), 20); } - // it could just be a non-synced masternode - mnodeman.AskForMN(pfrom, vote.vin); + // it could just be a non-synced gridnode + gnodeman.AskForMN(pfrom, vote.vin); return; } std::string strError = ""; if (UpdateProposal(vote, pfrom, strError)) { vote.Relay(); - masternodeSync.AddedBudgetItem(vote.GetHash()); + GridnodeSync.AddedBudgetItem(vote.GetHash()); } - LogPrint("mnbudget","mvote - new budget vote for budget %s - %s\n", vote.nProposalHash.ToString(), vote.GetHash().ToString()); + LogPrint("gnbudget","mvote - new budget vote for budget %s - %s\n", vote.nProposalHash.ToString(), vote.GetHash().ToString()); } if (strCommand == "fbs") { //Finalized Budget Suggestion @@ -1174,14 +1174,14 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData vRecv >> finalizedBudgetBroadcast; if (mapSeenFinalizedBudgets.count(finalizedBudgetBroadcast.GetHash())) { - masternodeSync.AddedBudgetItem(finalizedBudgetBroadcast.GetHash()); + GridnodeSync.AddedBudgetItem(finalizedBudgetBroadcast.GetHash()); return; } std::string strError = ""; int nConf = 0; if (!IsBudgetCollateralValid(finalizedBudgetBroadcast.nFeeTXHash, finalizedBudgetBroadcast.GetHash(), strError, finalizedBudgetBroadcast.nTime, nConf, true)) { - LogPrint("mnbudget","fbs - Finalized Budget FeeTX is not valid - %s - %s\n", finalizedBudgetBroadcast.nFeeTXHash.ToString(), strError); + LogPrint("gnbudget","fbs - Finalized Budget FeeTX is not valid - %s - %s\n", finalizedBudgetBroadcast.nFeeTXHash.ToString(), strError); if (nConf >= 1) vecImmatureFinalizedBudgets.push_back(finalizedBudgetBroadcast); return; @@ -1190,17 +1190,17 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData mapSeenFinalizedBudgets.insert(make_pair(finalizedBudgetBroadcast.GetHash(), finalizedBudgetBroadcast)); if (!finalizedBudgetBroadcast.IsValid(strError)) { - LogPrint("mnbudget","fbs - invalid finalized budget - %s\n", strError); + LogPrint("gnbudget","fbs - invalid finalized budget - %s\n", strError); return; } - LogPrint("mnbudget","fbs - new finalized budget - %s\n", finalizedBudgetBroadcast.GetHash().ToString()); + LogPrint("gnbudget","fbs - new finalized budget - %s\n", finalizedBudgetBroadcast.GetHash().ToString()); CFinalizedBudget finalizedBudget(finalizedBudgetBroadcast); if (AddFinalizedBudget(finalizedBudget)) { finalizedBudgetBroadcast.Relay(); } - masternodeSync.AddedBudgetItem(finalizedBudgetBroadcast.GetHash()); + GridnodeSync.AddedBudgetItem(finalizedBudgetBroadcast.GetHash()); //we might have active votes for this budget that are now valid CheckOrphanVotes(); @@ -1212,36 +1212,36 @@ void CBudgetManager::ProcessMessage(CNode* pfrom, std::string& strCommand, CData vote.fValid = true; if (mapSeenFinalizedBudgetVotes.count(vote.GetHash())) { - masternodeSync.AddedBudgetItem(vote.GetHash()); + GridnodeSync.AddedBudgetItem(vote.GetHash()); return; } - CMasternode* pmn = mnodeman.Find(vote.vin); - if (pmn == NULL) { - LogPrint("mnbudget", "fbvote - unknown masternode - vin: %s\n", vote.vin.prevout.hash.ToString()); - mnodeman.AskForMN(pfrom, vote.vin); + CGridnode* pgn = gnodeman.Find(vote.vin); + if (pgn == NULL) { + LogPrint("gnbudget", "fbvote - unknown gridnode - vin: %s\n", vote.vin.prevout.hash.ToString()); + gnodeman.AskForMN(pfrom, vote.vin); return; } mapSeenFinalizedBudgetVotes.insert(make_pair(vote.GetHash(), vote)); if (!vote.SignatureValid(true)) { - if (masternodeSync.IsSynced()) { + if (GridnodeSync.IsSynced()) { LogPrintf("CBudgetManager::ProcessMessage() : fbvote - signature invalid\n"); Misbehaving(pfrom->GetId(), 20); } - // it could just be a non-synced masternode - mnodeman.AskForMN(pfrom, vote.vin); + // it could just be a non-synced gridnode + gnodeman.AskForMN(pfrom, vote.vin); return; } std::string strError = ""; if (UpdateFinalizedBudget(vote, pfrom, strError)) { vote.Relay(); - masternodeSync.AddedBudgetItem(vote.GetHash()); + GridnodeSync.AddedBudgetItem(vote.GetHash()); - LogPrint("mnbudget","fbvote - new finalized budget vote - %s\n", vote.GetHash().ToString()); + LogPrint("gnbudget","fbvote - new finalized budget vote - %s\n", vote.GetHash().ToString()); } else { - LogPrint("mnbudget","fbvote - rejected finalized budget vote - %s - %s\n", vote.GetHash().ToString(), strError); + LogPrint("gnbudget","fbvote - rejected finalized budget vote - %s - %s\n", vote.GetHash().ToString(), strError); } } } @@ -1258,8 +1258,8 @@ void CBudgetManager::ResetSync() LOCK(cs); - std::map::iterator it1 = mapSeenMasternodeBudgetProposals.begin(); - while (it1 != mapSeenMasternodeBudgetProposals.end()) { + std::map::iterator it1 = mapSeenGridnodeBudgetProposals.begin(); + while (it1 != mapSeenGridnodeBudgetProposals.end()) { CBudgetProposal* pbudgetProposal = FindProposal((*it1).first); if (pbudgetProposal && pbudgetProposal->fValid) { //mark votes @@ -1295,8 +1295,8 @@ void CBudgetManager::MarkSynced() Mark that we've sent all valid items */ - std::map::iterator it1 = mapSeenMasternodeBudgetProposals.begin(); - while (it1 != mapSeenMasternodeBudgetProposals.end()) { + std::map::iterator it1 = mapSeenGridnodeBudgetProposals.begin(); + while (it1 != mapSeenGridnodeBudgetProposals.end()) { CBudgetProposal* pbudgetProposal = FindProposal((*it1).first); if (pbudgetProposal && pbudgetProposal->fValid) { //mark votes @@ -1343,8 +1343,8 @@ void CBudgetManager::Sync(CNode* pfrom, uint256 nProp, bool fPartial) int nInvCount = 0; - std::map::iterator it1 = mapSeenMasternodeBudgetProposals.begin(); - while (it1 != mapSeenMasternodeBudgetProposals.end()) { + std::map::iterator it1 = mapSeenGridnodeBudgetProposals.begin(); + while (it1 != mapSeenGridnodeBudgetProposals.end()) { CBudgetProposal* pbudgetProposal = FindProposal((*it1).first); if (pbudgetProposal && pbudgetProposal->fValid && (nProp == 0 || (*it1).first == nProp)) { pfrom->PushInventory(CInv(MSG_BUDGET_PROPOSAL, (*it1).second.GetHash())); @@ -1365,9 +1365,9 @@ void CBudgetManager::Sync(CNode* pfrom, uint256 nProp, bool fPartial) ++it1; } - pfrom->PushMessage("ssc", MASTERNODE_SYNC_BUDGET_PROP, nInvCount); + pfrom->PushMessage("ssc", GRIDNODE_SYNC_BUDGET_PROP, nInvCount); - LogPrint("mnbudget", "CBudgetManager::Sync - sent %d items\n", nInvCount); + LogPrint("gnbudget", "CBudgetManager::Sync - sent %d items\n", nInvCount); nInvCount = 0; @@ -1393,8 +1393,8 @@ void CBudgetManager::Sync(CNode* pfrom, uint256 nProp, bool fPartial) ++it3; } - pfrom->PushMessage("ssc", MASTERNODE_SYNC_BUDGET_FIN, nInvCount); - LogPrint("mnbudget", "CBudgetManager::Sync - sent %d items\n", nInvCount); + pfrom->PushMessage("ssc", GRIDNODE_SYNC_BUDGET_FIN, nInvCount); + LogPrint("gnbudget", "CBudgetManager::Sync - sent %d items\n", nInvCount); } bool CBudgetManager::UpdateProposal(CBudgetVote& vote, CNode* pfrom, std::string& strError) @@ -1405,13 +1405,13 @@ bool CBudgetManager::UpdateProposal(CBudgetVote& vote, CNode* pfrom, std::string if (pfrom) { // only ask for missing items after our syncing process is complete -- // otherwise we'll think a full sync succeeded when they return a result - if (!masternodeSync.IsSynced()) return false; + if (!GridnodeSync.IsSynced()) return false; - LogPrint("mnbudget","CBudgetManager::UpdateProposal - Unknown proposal %d, asking for source proposal\n", vote.nProposalHash.ToString()); - mapOrphanMasternodeBudgetVotes[vote.nProposalHash] = vote; + LogPrint("gnbudget","CBudgetManager::UpdateProposal - Unknown proposal %d, asking for source proposal\n", vote.nProposalHash.ToString()); + mapOrphanGridnodeBudgetVotes[vote.nProposalHash] = vote; if (!askedForSourceProposalOrBudget.count(vote.nProposalHash)) { - pfrom->PushMessage("mnvs", vote.nProposalHash); + pfrom->PushMessage("gnvs", vote.nProposalHash); askedForSourceProposalOrBudget[vote.nProposalHash] = GetTime(); } } @@ -1432,13 +1432,13 @@ bool CBudgetManager::UpdateFinalizedBudget(CFinalizedBudgetVote& vote, CNode* pf if (pfrom) { // only ask for missing items after our syncing process is complete -- // otherwise we'll think a full sync succeeded when they return a result - if (!masternodeSync.IsSynced()) return false; + if (!GridnodeSync.IsSynced()) return false; - LogPrint("mnbudget","CBudgetManager::UpdateFinalizedBudget - Unknown Finalized Proposal %s, asking for source budget\n", vote.nBudgetHash.ToString()); + LogPrint("gnbudget","CBudgetManager::UpdateFinalizedBudget - Unknown Finalized Proposal %s, asking for source budget\n", vote.nBudgetHash.ToString()); mapOrphanFinalizedBudgetVotes[vote.nBudgetHash] = vote; if (!askedForSourceProposalOrBudget.count(vote.nBudgetHash)) { - pfrom->PushMessage("mnvs", vote.nBudgetHash); + pfrom->PushMessage("gnvs", vote.nBudgetHash); askedForSourceProposalOrBudget[vote.nBudgetHash] = GetTime(); } } @@ -1446,7 +1446,7 @@ bool CBudgetManager::UpdateFinalizedBudget(CFinalizedBudgetVote& vote, CNode* pf strError = "Finalized Budget " + vote.nBudgetHash.ToString() + " not found!"; return false; } - LogPrint("mnbudget","CBudgetManager::UpdateFinalizedBudget - Finalized Proposal %s added\n", vote.nBudgetHash.ToString()); + LogPrint("gnbudget","CBudgetManager::UpdateFinalizedBudget - Finalized Proposal %s added\n", vote.nBudgetHash.ToString()); return mapFinalizedBudgets[vote.nBudgetHash].AddOrUpdateVote(vote, strError); } @@ -1488,7 +1488,7 @@ CBudgetProposal::CBudgetProposal(const CBudgetProposal& other) bool CBudgetProposal::IsValid(std::string& strError, bool fCheckCollateral) { - if (GetNays() - GetYeas() > mnodeman.CountEnabled(ActiveProtocol()) / 10) { + if (GetNays() - GetYeas() > gnodeman.CountEnabled(ActiveProtocol()) / 10) { strError = "Proposal " + strProposalName + ": Active removal"; return false; } @@ -1533,7 +1533,7 @@ bool CBudgetProposal::IsValid(std::string& strError, bool fCheckCollateral) // nTime not being saved correctly // -- TODO: We should keep track of the last time the proposal was valid, if it's invalid for 2 weeks, erase it // if(nTime + (60*60*24*2) < GetAdjustedTime()) { - // if(GetYeas()-GetNays() < (mnodeman.CountEnabled(ActiveProtocol())/10)) { + // if(GetYeas()-GetNays() < (gnodeman.CountEnabled(ActiveProtocol())/10)) { // strError = "Not enough support"; // return false; // } @@ -1573,12 +1573,12 @@ bool CBudgetProposal::AddOrUpdateVote(CBudgetVote& vote, std::string& strError) if (mapVotes.count(hash)) { if (mapVotes[hash].nTime > vote.nTime) { strError = strprintf("new vote older than existing vote - %s\n", vote.GetHash().ToString()); - LogPrint("mnbudget", "CBudgetProposal::AddOrUpdateVote - %s\n", strError); + LogPrint("gnbudget", "CBudgetProposal::AddOrUpdateVote - %s\n", strError); return false; } if (vote.nTime - mapVotes[hash].nTime < BUDGET_VOTE_UPDATE_MIN) { strError = strprintf("time between votes is too soon - %s - %lli sec < %lli sec\n", vote.GetHash().ToString(), vote.nTime - mapVotes[hash].nTime,BUDGET_VOTE_UPDATE_MIN); - LogPrint("mnbudget", "CBudgetProposal::AddOrUpdateVote - %s\n", strError); + LogPrint("gnbudget", "CBudgetProposal::AddOrUpdateVote - %s\n", strError); return false; } strAction = "Existing vote updated:"; @@ -1586,17 +1586,17 @@ bool CBudgetProposal::AddOrUpdateVote(CBudgetVote& vote, std::string& strError) if (vote.nTime > GetTime() + (60 * 60)) { strError = strprintf("new vote is too far ahead of current time - %s - nTime %lli - Max Time %lli\n", vote.GetHash().ToString(), vote.nTime, GetTime() + (60 * 60)); - LogPrint("mnbudget", "CBudgetProposal::AddOrUpdateVote - %s\n", strError); + LogPrint("gnbudget", "CBudgetProposal::AddOrUpdateVote - %s\n", strError); return false; } mapVotes[hash] = vote; - LogPrint("mnbudget", "CBudgetProposal::AddOrUpdateVote - %s %s\n", strAction.c_str(), vote.GetHash().ToString().c_str()); + LogPrint("gnbudget", "CBudgetProposal::AddOrUpdateVote - %s %s\n", strAction.c_str(), vote.GetHash().ToString().c_str()); return true; } -// If masternode voted for a proposal, but is now invalid -- remove the vote +// If gridnode voted for a proposal, but is now invalid -- remove the vote void CBudgetProposal::CleanAndRemove(bool fSignatureCheck) { std::map::iterator it = mapVotes.begin(); @@ -1761,7 +1761,7 @@ void CBudgetVote::Relay() RelayInv(inv); } -bool CBudgetVote::Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode) +bool CBudgetVote::Sign(CKey& keyGridnode, CPubKey& pubKeyGridnode) { // Choose coins to use CPubKey pubKeyCollateralAddress; @@ -1770,13 +1770,13 @@ bool CBudgetVote::Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode) std::string errorMessage; std::string strMessage = vin.prevout.ToStringShort() + nProposalHash.ToString() + boost::lexical_cast(nVote) + boost::lexical_cast(nTime); - if (!obfuScationSigner.SignMessage(strMessage, errorMessage, vchSig, keyMasternode)) { - LogPrint("mnbudget","CBudgetVote::Sign - Error upon calling SignMessage"); + if (!obfuScationSigner.SignMessage(strMessage, errorMessage, vchSig, keyGridnode)) { + LogPrint("gnbudget","CBudgetVote::Sign - Error upon calling SignMessage"); return false; } - if (!obfuScationSigner.VerifyMessage(pubKeyMasternode, vchSig, strMessage, errorMessage)) { - LogPrint("mnbudget","CBudgetVote::Sign - Error upon calling VerifyMessage"); + if (!obfuScationSigner.VerifyMessage(pubKeyGridnode, vchSig, strMessage, errorMessage)) { + LogPrint("gnbudget","CBudgetVote::Sign - Error upon calling VerifyMessage"); return false; } @@ -1788,19 +1788,19 @@ bool CBudgetVote::SignatureValid(bool fSignatureCheck) std::string errorMessage; std::string strMessage = vin.prevout.ToStringShort() + nProposalHash.ToString() + boost::lexical_cast(nVote) + boost::lexical_cast(nTime); - CMasternode* pmn = mnodeman.Find(vin); + CGridnode* pgn = gnodeman.Find(vin); - if (pmn == NULL) { + if (pgn == NULL) { if (fDebug){ - LogPrint("mnbudget","CBudgetVote::SignatureValid() - Unknown Masternode - %s\n", vin.prevout.hash.ToString()); + LogPrint("gnbudget","CBudgetVote::SignatureValid() - Unknown Gridnode - %s\n", vin.prevout.hash.ToString()); } return false; } if (!fSignatureCheck) return true; - if (!obfuScationSigner.VerifyMessage(pmn->pubKeyMasternode, vchSig, strMessage, errorMessage)) { - LogPrint("mnbudget","CBudgetVote::SignatureValid() - Verify message failed\n"); + if (!obfuScationSigner.VerifyMessage(pgn->pubKeyGridnode, vchSig, strMessage, errorMessage)) { + LogPrint("gnbudget","CBudgetVote::SignatureValid() - Verify message failed\n"); return false; } @@ -1841,12 +1841,12 @@ bool CFinalizedBudget::AddOrUpdateVote(CFinalizedBudgetVote& vote, std::string& if (mapVotes.count(hash)) { if (mapVotes[hash].nTime > vote.nTime) { strError = strprintf("new vote older than existing vote - %s\n", vote.GetHash().ToString()); - LogPrint("mnbudget", "CFinalizedBudget::AddOrUpdateVote - %s\n", strError); + LogPrint("gnbudget", "CFinalizedBudget::AddOrUpdateVote - %s\n", strError); return false; } if (vote.nTime - mapVotes[hash].nTime < BUDGET_VOTE_UPDATE_MIN) { strError = strprintf("time between votes is too soon - %s - %lli sec < %lli sec\n", vote.GetHash().ToString(), vote.nTime - mapVotes[hash].nTime,BUDGET_VOTE_UPDATE_MIN); - LogPrint("mnbudget", "CFinalizedBudget::AddOrUpdateVote - %s\n", strError); + LogPrint("gnbudget", "CFinalizedBudget::AddOrUpdateVote - %s\n", strError); return false; } strAction = "Existing vote updated:"; @@ -1854,16 +1854,16 @@ bool CFinalizedBudget::AddOrUpdateVote(CFinalizedBudgetVote& vote, std::string& if (vote.nTime > GetTime() + (60 * 60)) { strError = strprintf("new vote is too far ahead of current time - %s - nTime %lli - Max Time %lli\n", vote.GetHash().ToString(), vote.nTime, GetTime() + (60 * 60)); - LogPrint("mnbudget", "CFinalizedBudget::AddOrUpdateVote - %s\n", strError); + LogPrint("gnbudget", "CFinalizedBudget::AddOrUpdateVote - %s\n", strError); return false; } mapVotes[hash] = vote; - LogPrint("mnbudget", "CFinalizedBudget::AddOrUpdateVote - %s %s\n", strAction.c_str(), vote.GetHash().ToString().c_str()); + LogPrint("gnbudget", "CFinalizedBudget::AddOrUpdateVote - %s %s\n", strAction.c_str(), vote.GetHash().ToString().c_str()); return true; } -//evaluate if we should vote for this. Masternode only +//evaluate if we should vote for this. Gridnode only void CFinalizedBudget::AutoCheck() { LOCK(cs); @@ -1871,17 +1871,17 @@ void CFinalizedBudget::AutoCheck() CBlockIndex* pindexPrev = chainActive.Tip(); if (!pindexPrev) return; - LogPrint("mnbudget","CFinalizedBudget::AutoCheck - %lli - %d\n", pindexPrev->nHeight, fAutoChecked); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck - %lli - %d\n", pindexPrev->nHeight, fAutoChecked); - if (!fMasterNode || fAutoChecked) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck fMasterNode=%d fAutoChecked=%d\n", fMasterNode, fAutoChecked); + if (!fGridnode || fAutoChecked) { + LogPrint("gnbudget","CFinalizedBudget::AutoCheck fGridnode=%d fAutoChecked=%d\n", fGridnode, fAutoChecked); return; } // Do this 1 in 4 blocks -- spread out the voting activity // -- this function is only called every fourteenth block, so this is really 1 in 56 blocks if (rand() % 4 != 0) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck - waiting\n"); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck - waiting\n"); return; } @@ -1894,24 +1894,24 @@ void CFinalizedBudget::AutoCheck() for (unsigned int i = 0; i < vecBudgetPayments.size(); i++) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck Budget-Payments - nProp %d %s\n", i, vecBudgetPayments[i].nProposalHash.ToString()); - LogPrint("mnbudget","CFinalizedBudget::AutoCheck Budget-Payments - Payee %d %s\n", i, vecBudgetPayments[i].payee.ToString()); - LogPrint("mnbudget","CFinalizedBudget::AutoCheck Budget-Payments - nAmount %d %lli\n", i, vecBudgetPayments[i].nAmount); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck Budget-Payments - nProp %d %s\n", i, vecBudgetPayments[i].nProposalHash.ToString()); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck Budget-Payments - Payee %d %s\n", i, vecBudgetPayments[i].payee.ToString()); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck Budget-Payments - nAmount %d %lli\n", i, vecBudgetPayments[i].nAmount); } for (unsigned int i = 0; i < vBudgetProposals.size(); i++) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck Budget-Proposals - nProp %d %s\n", i, vBudgetProposals[i]->GetHash().ToString()); - LogPrint("mnbudget","CFinalizedBudget::AutoCheck Budget-Proposals - Payee %d %s\n", i, vBudgetProposals[i]->GetPayee().ToString()); - LogPrint("mnbudget","CFinalizedBudget::AutoCheck Budget-Proposals - nAmount %d %lli\n", i, vBudgetProposals[i]->GetAmount()); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck Budget-Proposals - nProp %d %s\n", i, vBudgetProposals[i]->GetHash().ToString()); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck Budget-Proposals - Payee %d %s\n", i, vBudgetProposals[i]->GetPayee().ToString()); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck Budget-Proposals - nAmount %d %lli\n", i, vBudgetProposals[i]->GetAmount()); } if (vBudgetProposals.size() == 0) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck - No Budget-Proposals found, aborting\n"); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck - No Budget-Proposals found, aborting\n"); return; } if (vBudgetProposals.size() != vecBudgetPayments.size()) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck - Budget-Proposal length (%ld) doesn't match Budget-Payment length (%ld).\n", + LogPrint("gnbudget","CFinalizedBudget::AutoCheck - Budget-Proposal length (%ld) doesn't match Budget-Payment length (%ld).\n", vBudgetProposals.size(), vecBudgetPayments.size()); return; } @@ -1919,32 +1919,32 @@ void CFinalizedBudget::AutoCheck() for (unsigned int i = 0; i < vecBudgetPayments.size(); i++) { if (i > vBudgetProposals.size() - 1) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck - Proposal size mismatch, i=%d > (vBudgetProposals.size() - 1)=%d\n", i, vBudgetProposals.size() - 1); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck - Proposal size mismatch, i=%d > (vBudgetProposals.size() - 1)=%d\n", i, vBudgetProposals.size() - 1); return; } if (vecBudgetPayments[i].nProposalHash != vBudgetProposals[i]->GetHash()) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck - item #%d doesn't match %s %s\n", i, vecBudgetPayments[i].nProposalHash.ToString(), vBudgetProposals[i]->GetHash().ToString()); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck - item #%d doesn't match %s %s\n", i, vecBudgetPayments[i].nProposalHash.ToString(), vBudgetProposals[i]->GetHash().ToString()); return; } // if(vecBudgetPayments[i].payee != vBudgetProposals[i]->GetPayee()){ -- triggered with false positive if (vecBudgetPayments[i].payee.ToString() != vBudgetProposals[i]->GetPayee().ToString()) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck - item #%d payee doesn't match %s %s\n", i, vecBudgetPayments[i].payee.ToString(), vBudgetProposals[i]->GetPayee().ToString()); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck - item #%d payee doesn't match %s %s\n", i, vecBudgetPayments[i].payee.ToString(), vBudgetProposals[i]->GetPayee().ToString()); return; } if (vecBudgetPayments[i].nAmount != vBudgetProposals[i]->GetAmount()) { - LogPrint("mnbudget","CFinalizedBudget::AutoCheck - item #%d payee doesn't match %lli %lli\n", i, vecBudgetPayments[i].nAmount, vBudgetProposals[i]->GetAmount()); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck - item #%d payee doesn't match %lli %lli\n", i, vecBudgetPayments[i].nAmount, vBudgetProposals[i]->GetAmount()); return; } } - LogPrint("mnbudget","CFinalizedBudget::AutoCheck - Finalized Budget Matches! Submitting Vote.\n"); + LogPrint("gnbudget","CFinalizedBudget::AutoCheck - Finalized Budget Matches! Submitting Vote.\n"); SubmitVote(); } } -// If masternode voted for a proposal, but is now invalid -- remove the vote +// If gridnode voted for a proposal, but is now invalid -- remove the vote void CFinalizedBudget::CleanAndRemove(bool fSignatureCheck) { std::map::iterator it = mapVotes.begin(); @@ -1995,7 +1995,7 @@ std::string CFinalizedBudget::GetStatus() for (int nBlockHeight = GetBlockStart(); nBlockHeight <= GetBlockEnd(); nBlockHeight++) { CTxBudgetPayment budgetPayment; if (!GetBudgetPaymentByBlock(nBlockHeight, budgetPayment)) { - LogPrint("mnbudget","CFinalizedBudget::GetStatus - Couldn't find budget payment for block %lld\n", nBlockHeight); + LogPrint("gnbudget","CFinalizedBudget::GetStatus - Couldn't find budget payment for block %lld\n", nBlockHeight); continue; } @@ -2103,7 +2103,7 @@ bool CFinalizedBudget::IsPaidAlready(uint256 nProposalHash, int nBlockHeight) nPaidBlockHeight = (*it).second; if((nPaidBlockHeight < GetBlockStart()) || (nPaidBlockHeight > GetBlockEnd())) { nOldProposalHash = (*it).first; - LogPrint("mnbudget", "CFinalizedBudget::IsPaidAlready - Budget Proposal %s, Block %d from old cycle deleted\n", + LogPrint("gnbudget", "CFinalizedBudget::IsPaidAlready - Budget Proposal %s, Block %d from old cycle deleted\n", nOldProposalHash.ToString().c_str(), nPaidBlockHeight); mapPayment_History.erase(it++); } @@ -2116,11 +2116,11 @@ bool CFinalizedBudget::IsPaidAlready(uint256 nProposalHash, int nBlockHeight) if(mapPayment_History.count(nProposalHash) == 0) { // New proposal payment, insert into map for checks with later blocks from this cycle mapPayment_History.insert(std::pair(nProposalHash, nBlockHeight)); - LogPrint("mnbudget", "CFinalizedBudget::IsPaidAlready - Budget Proposal %s, Block %d added to payment history\n", + LogPrint("gnbudget", "CFinalizedBudget::IsPaidAlready - Budget Proposal %s, Block %d added to payment history\n", nProposalHash.ToString().c_str(), nBlockHeight); return false; } - // This budget was paid already -> reject transaction so it gets paid to a masternode instead + // This budget was paid already -> reject transaction so it gets paid to a gridnode instead return true; } @@ -2129,27 +2129,27 @@ TrxValidationStatus CFinalizedBudget::IsTransactionValid(const CTransaction& txN TrxValidationStatus transactionStatus = TrxValidationStatus::InValid; int nCurrentBudgetPayment = nBlockHeight - GetBlockStart(); if (nCurrentBudgetPayment < 0) { - LogPrint("mnbudget","CFinalizedBudget::IsTransactionValid - Invalid block - height: %d start: %d\n", nBlockHeight, GetBlockStart()); + LogPrint("gnbudget","CFinalizedBudget::IsTransactionValid - Invalid block - height: %d start: %d\n", nBlockHeight, GetBlockStart()); return TrxValidationStatus::InValid; } if (nCurrentBudgetPayment > (int)vecBudgetPayments.size() - 1) { - LogPrint("mnbudget","CFinalizedBudget::IsTransactionValid - Invalid last block - current budget payment: %d of %d\n", nCurrentBudgetPayment + 1, (int)vecBudgetPayments.size()); + LogPrint("gnbudget","CFinalizedBudget::IsTransactionValid - Invalid last block - current budget payment: %d of %d\n", nCurrentBudgetPayment + 1, (int)vecBudgetPayments.size()); return TrxValidationStatus::InValid; } bool paid = false; BOOST_FOREACH (CTxOut out, txNew.vout) { - LogPrint("mnbudget","CFinalizedBudget::IsTransactionValid - nCurrentBudgetPayment=%d, payee=%s == out.scriptPubKey=%s, amount=%ld == out.nValue=%ld\n", + LogPrint("gnbudget","CFinalizedBudget::IsTransactionValid - nCurrentBudgetPayment=%d, payee=%s == out.scriptPubKey=%s, amount=%ld == out.nValue=%ld\n", nCurrentBudgetPayment, vecBudgetPayments[nCurrentBudgetPayment].payee.ToString().c_str(), out.scriptPubKey.ToString().c_str(), vecBudgetPayments[nCurrentBudgetPayment].nAmount, out.nValue); if (vecBudgetPayments[nCurrentBudgetPayment].payee == out.scriptPubKey && vecBudgetPayments[nCurrentBudgetPayment].nAmount == out.nValue) { - // Check if this proposal was paid already. If so, pay a masternode instead + // Check if this proposal was paid already. If so, pay a gridnode instead paid = IsPaidAlready(vecBudgetPayments[nCurrentBudgetPayment].nProposalHash, nBlockHeight); if(paid) { - LogPrint("mnbudget","CFinalizedBudget::IsTransactionValid - Double Budget Payment of %d for proposal %d detected. Paying a masternode instead.\n", + LogPrint("gnbudget","CFinalizedBudget::IsTransactionValid - Double Budget Payment of %d for proposal %d detected. Paying a gridnode instead.\n", vecBudgetPayments[nCurrentBudgetPayment].nAmount, vecBudgetPayments[nCurrentBudgetPayment].nProposalHash.Get32()); // No matter what we've found before, stop all checks here. In future releases there might be more than one budget payment // per block, so even if the first one was not paid yet this one disables all budget payments for this block. @@ -2158,7 +2158,7 @@ TrxValidationStatus CFinalizedBudget::IsTransactionValid(const CTransaction& txN } else { transactionStatus = TrxValidationStatus::Valid; - LogPrint("mnbudget","CFinalizedBudget::IsTransactionValid - Found valid Budget Payment of %d for proposal %d\n", + LogPrint("gnbudget","CFinalizedBudget::IsTransactionValid - Found valid Budget Payment of %d for proposal %d\n", vecBudgetPayments[nCurrentBudgetPayment].nAmount, vecBudgetPayments[nCurrentBudgetPayment].nProposalHash.Get32()); } } @@ -2169,7 +2169,7 @@ TrxValidationStatus CFinalizedBudget::IsTransactionValid(const CTransaction& txN ExtractDestination(vecBudgetPayments[nCurrentBudgetPayment].payee, address1); CBitcoinAddress address2(address1); - LogPrint("mnbudget","CFinalizedBudget::IsTransactionValid - Missing required payment - %s: %d c: %d\n", + LogPrint("gnbudget","CFinalizedBudget::IsTransactionValid - Missing required payment - %s: %d c: %d\n", address2.ToString(), vecBudgetPayments[nCurrentBudgetPayment].nAmount, nCurrentBudgetPayment); } @@ -2178,29 +2178,29 @@ TrxValidationStatus CFinalizedBudget::IsTransactionValid(const CTransaction& txN void CFinalizedBudget::SubmitVote() { - CPubKey pubKeyMasternode; - CKey keyMasternode; + CPubKey pubKeyGridnode; + CKey keyGridnode; std::string errorMessage; - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode)) { - LogPrint("mnbudget","CFinalizedBudget::SubmitVote - Error upon calling SetKey\n"); + if (!obfuScationSigner.SetKey(strGridnodePrivKey, errorMessage, keyGridnode, pubKeyGridnode)) { + LogPrint("gnbudget","CFinalizedBudget::SubmitVote - Error upon calling SetKey\n"); return; } - CFinalizedBudgetVote vote(activeMasternode.vin, GetHash()); - if (!vote.Sign(keyMasternode, pubKeyMasternode)) { - LogPrint("mnbudget","CFinalizedBudget::SubmitVote - Failure to sign."); + CFinalizedBudgetVote vote(activeGridnode.vin, GetHash()); + if (!vote.Sign(keyGridnode, pubKeyGridnode)) { + LogPrint("gnbudget","CFinalizedBudget::SubmitVote - Failure to sign."); return; } std::string strError = ""; if (budget.UpdateFinalizedBudget(vote, NULL, strError)) { - LogPrint("mnbudget","CFinalizedBudget::SubmitVote - new finalized budget vote - %s\n", vote.GetHash().ToString()); + LogPrint("gnbudget","CFinalizedBudget::SubmitVote - new finalized budget vote - %s\n", vote.GetHash().ToString()); budget.mapSeenFinalizedBudgetVotes.insert(make_pair(vote.GetHash(), vote)); vote.Relay(); } else { - LogPrint("mnbudget","CFinalizedBudget::SubmitVote : Error submitting vote - %s\n", strError); + LogPrint("gnbudget","CFinalizedBudget::SubmitVote : Error submitting vote - %s\n", strError); } } @@ -2266,7 +2266,7 @@ void CFinalizedBudgetVote::Relay() RelayInv(inv); } -bool CFinalizedBudgetVote::Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode) +bool CFinalizedBudgetVote::Sign(CKey& keyGridnode, CPubKey& pubKeyGridnode) { // Choose coins to use CPubKey pubKeyCollateralAddress; @@ -2275,13 +2275,13 @@ bool CFinalizedBudgetVote::Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode) std::string errorMessage; std::string strMessage = vin.prevout.ToStringShort() + nBudgetHash.ToString() + boost::lexical_cast(nTime); - if (!obfuScationSigner.SignMessage(strMessage, errorMessage, vchSig, keyMasternode)) { - LogPrint("mnbudget","CFinalizedBudgetVote::Sign - Error upon calling SignMessage"); + if (!obfuScationSigner.SignMessage(strMessage, errorMessage, vchSig, keyGridnode)) { + LogPrint("gnbudget","CFinalizedBudgetVote::Sign - Error upon calling SignMessage"); return false; } - if (!obfuScationSigner.VerifyMessage(pubKeyMasternode, vchSig, strMessage, errorMessage)) { - LogPrint("mnbudget","CFinalizedBudgetVote::Sign - Error upon calling VerifyMessage"); + if (!obfuScationSigner.VerifyMessage(pubKeyGridnode, vchSig, strMessage, errorMessage)) { + LogPrint("gnbudget","CFinalizedBudgetVote::Sign - Error upon calling VerifyMessage"); return false; } @@ -2294,17 +2294,17 @@ bool CFinalizedBudgetVote::SignatureValid(bool fSignatureCheck) std::string strMessage = vin.prevout.ToStringShort() + nBudgetHash.ToString() + boost::lexical_cast(nTime); - CMasternode* pmn = mnodeman.Find(vin); + CGridnode* pgn = gnodeman.Find(vin); - if (pmn == NULL) { - LogPrint("mnbudget","CFinalizedBudgetVote::SignatureValid() - Unknown Masternode %s\n", strMessage); + if (pgn == NULL) { + LogPrint("gnbudget","CFinalizedBudgetVote::SignatureValid() - Unknown Gridnode %s\n", strMessage); return false; } if (!fSignatureCheck) return true; - if (!obfuScationSigner.VerifyMessage(pmn->pubKeyMasternode, vchSig, strMessage, errorMessage)) { - LogPrint("mnbudget","CFinalizedBudgetVote::SignatureValid() - Verify message failed %s %s\n", strMessage, errorMessage); + if (!obfuScationSigner.VerifyMessage(pgn->pubKeyGridnode, vchSig, strMessage, errorMessage)) { + LogPrint("gnbudget","CFinalizedBudgetVote::SignatureValid() - Verify message failed %s %s\n", strMessage, errorMessage); return false; } @@ -2315,7 +2315,7 @@ std::string CBudgetManager::ToString() const { std::ostringstream info; - info << "Proposals: " << (int)mapProposals.size() << ", Budgets: " << (int)mapFinalizedBudgets.size() << ", Seen Budgets: " << (int)mapSeenMasternodeBudgetProposals.size() << ", Seen Budget Votes: " << (int)mapSeenMasternodeBudgetVotes.size() << ", Seen Final Budgets: " << (int)mapSeenFinalizedBudgets.size() << ", Seen Final Budget Votes: " << (int)mapSeenFinalizedBudgetVotes.size(); + info << "Proposals: " << (int)mapProposals.size() << ", Budgets: " << (int)mapFinalizedBudgets.size() << ", Seen Budgets: " << (int)mapSeenGridnodeBudgetProposals.size() << ", Seen Budget Votes: " << (int)mapSeenGridnodeBudgetVotes.size() << ", Seen Final Budgets: " << (int)mapSeenFinalizedBudgets.size() << ", Seen Final Budget Votes: " << (int)mapSeenFinalizedBudgetVotes.size(); return info.str(); } diff --git a/daemon/masternode-budget.h b/daemon/gridnode-budget.h similarity index 93% rename from daemon/masternode-budget.h rename to daemon/gridnode-budget.h index 671b9756d115..6f47db719ee3 100644 --- a/daemon/masternode-budget.h +++ b/daemon/gridnode-budget.h @@ -4,14 +4,14 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef MASTERNODE_BUDGET_H -#define MASTERNODE_BUDGET_H +#ifndef GRIDNODE_BUDGET_H +#define GRIDNODE_BUDGET_H #include "base58.h" #include "init.h" #include "key.h" #include "main.h" -#include "masternode.h" +#include "gridnode.h" #include "net.h" #include "sync.h" #include "util.h" @@ -36,7 +36,7 @@ enum class TrxValidationStatus { InValid, /** Transaction verification failed */ Valid, /** Transaction successfully verified */ DoublePayment, /** Transaction successfully verified, but includes a double-budget-payment */ - VoteThreshold /** If not enough masternodes have voted on a finalized budget */ + VoteThreshold /** If not enough Gridnodes have voted on a finalized budget */ }; static const CAmount PROPOSAL_FEE_TX = (50 * COIN); @@ -58,7 +58,7 @@ int GetBudgetPaymentCycleBlocks(); bool IsBudgetCollateralValid(uint256 nTxCollateralHash, uint256 nExpectedHash, std::string& strError, int64_t& nTime, int& nConf, bool fBudgetFinalization=false); // -// CBudgetVote - Allow a masternode node to vote and broadcast throughout the network +// CBudgetVote - Allow a gridnode node to vote and broadcast throughout the network // class CBudgetVote @@ -75,7 +75,7 @@ class CBudgetVote CBudgetVote(); CBudgetVote(CTxIn vin, uint256 nProposalHash, int nVoteIn); - bool Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode); + bool Sign(CKey& keyGridnode, CPubKey& pubKeyGridnode); bool SignatureValid(bool fSignatureCheck); void Relay(); @@ -111,7 +111,7 @@ class CBudgetVote }; // -// CFinalizedBudgetVote - Allow a masternode node to vote and broadcast throughout the network +// CFinalizedBudgetVote - Allow a gridnode node to vote and broadcast throughout the network // class CFinalizedBudgetVote @@ -127,7 +127,7 @@ class CFinalizedBudgetVote CFinalizedBudgetVote(); CFinalizedBudgetVote(CTxIn vinIn, uint256 nBudgetHashIn); - bool Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode); + bool Sign(CKey& keyGridnode, CPubKey& pubKeyGridnode); bool SignatureValid(bool fSignatureCheck); void Relay(); @@ -195,9 +195,9 @@ class CBudgetManager map mapProposals; map mapFinalizedBudgets; - std::map mapSeenMasternodeBudgetProposals; - std::map mapSeenMasternodeBudgetVotes; - std::map mapOrphanMasternodeBudgetVotes; + std::map mapSeenGridnodeBudgetProposals; + std::map mapSeenGridnodeBudgetVotes; + std::map mapOrphanGridnodeBudgetVotes; std::map mapSeenFinalizedBudgets; std::map mapSeenFinalizedBudgetVotes; std::map mapOrphanFinalizedBudgetVotes; @@ -210,8 +210,8 @@ class CBudgetManager void ClearSeen() { - mapSeenMasternodeBudgetProposals.clear(); - mapSeenMasternodeBudgetVotes.clear(); + mapSeenGridnodeBudgetProposals.clear(); + mapSeenGridnodeBudgetVotes.clear(); mapSeenFinalizedBudgets.clear(); mapSeenFinalizedBudgetVotes.clear(); } @@ -255,11 +255,11 @@ class CBudgetManager LogPrintf("Budget object cleared\n"); mapProposals.clear(); mapFinalizedBudgets.clear(); - mapSeenMasternodeBudgetProposals.clear(); - mapSeenMasternodeBudgetVotes.clear(); + mapSeenGridnodeBudgetProposals.clear(); + mapSeenGridnodeBudgetVotes.clear(); mapSeenFinalizedBudgets.clear(); mapSeenFinalizedBudgetVotes.clear(); - mapOrphanMasternodeBudgetVotes.clear(); + mapOrphanGridnodeBudgetVotes.clear(); mapOrphanFinalizedBudgetVotes.clear(); } void CheckAndRemove(); @@ -271,11 +271,11 @@ class CBudgetManager template inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { - READWRITE(mapSeenMasternodeBudgetProposals); - READWRITE(mapSeenMasternodeBudgetVotes); + READWRITE(mapSeenGridnodeBudgetProposals); + READWRITE(mapSeenGridnodeBudgetVotes); READWRITE(mapSeenFinalizedBudgets); READWRITE(mapSeenFinalizedBudgetVotes); - READWRITE(mapOrphanMasternodeBudgetVotes); + READWRITE(mapOrphanGridnodeBudgetVotes); READWRITE(mapOrphanFinalizedBudgetVotes); READWRITE(mapProposals); @@ -319,7 +319,7 @@ class CFinalizedBudget private: // critical section to protect the inner data structures mutable CCriticalSection cs; - bool fAutoChecked; //If it matches what we see, we'll auto vote for it (masternode only) + bool fAutoChecked; //If it matches what we see, we'll auto vote for it (gridnode only) public: bool fValid; @@ -373,7 +373,7 @@ class CFinalizedBudget void AutoCheck(); //total unigrid paid out by this budget CAmount GetTotalPayout(); - //vote on this finalized budget as a masternode + //vote on this finalized budget as a gridnode void SubmitVote(); //checks the hashes to make sure we know about them @@ -457,7 +457,7 @@ class CFinalizedBudgetBroadcast : public CFinalizedBudget // -// Budget Proposal : Contains the masternode votes for each budget +// Budget Proposal : Contains the gridnode votes for each budget // class CBudgetProposal diff --git a/daemon/masternode-payments.cpp b/daemon/gridnode-payments.cpp similarity index 50% rename from daemon/masternode-payments.cpp rename to daemon/gridnode-payments.cpp index f9761fed96b9..2bf941d2858f 100644 --- a/daemon/masternode-payments.cpp +++ b/daemon/gridnode-payments.cpp @@ -4,42 +4,43 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "masternode-payments.h" +#include "gridnode-payments.h" #include "addrman.h" #include "primitives/block.h" -#include "masternode-budget.h" -#include "masternode-sync.h" -#include "masternodeman.h" +#include "gridnode-budget.h" +#include "gridnode-sync.h" +#include "gridnodeman.h" #include "obfuscation.h" #include "spork.h" #include "sync.h" #include "util.h" #include "utilmoneystr.h" +#include "restclient.h" #include #include /** Object for who's going to get paid on which blocks */ -CMasternodePayments masternodePayments; +CGridnodePayments GridnodePayments; CCriticalSection cs_vecPayments; -CCriticalSection cs_mapMasternodeBlocks; -CCriticalSection cs_mapMasternodePayeeVotes; +CCriticalSection cs_mapGridnodeBlocks; +CCriticalSection cs_mapGridnodePayeeVotes; // -// CMasternodePaymentDB +// CGridnodePaymentDB // -CMasternodePaymentDB::CMasternodePaymentDB() { - pathDB = GetDataDir() / "mnpayments.dat"; - strMagicMessage = "MasternodePayments"; +CGridnodePaymentDB::CGridnodePaymentDB() { + pathDB = GetDataDir() / "gnpayments.dat"; + strMagicMessage = "GridnodePayments"; } -bool CMasternodePaymentDB::Write(const CMasternodePayments& objToSave) { +bool CGridnodePaymentDB::Write(const CGridnodePayments& objToSave) { int64_t nStart = GetTimeMillis(); // serialize, checksum data up to that point, then append checksum CDataStream ssObj(SER_DISK, CLIENT_VERSION); - ssObj << strMagicMessage; // masternode cache file specific magic message + ssObj << strMagicMessage; // gridnode cache file specific magic message ssObj << FLATDATA(Params().MessageStart()); // network specific magic number ssObj << objToSave; uint256 hash = Hash(ssObj.begin(), ssObj.end()); @@ -59,14 +60,14 @@ bool CMasternodePaymentDB::Write(const CMasternodePayments& objToSave) { } fileout.fclose(); - LogPrint("masternode", "Written info to mnpayments.dat %dms\n", + LogPrint("gridnode", "Written info to gnpayments.dat %dms\n", GetTimeMillis() - nStart); return true; } -CMasternodePaymentDB::ReadResult CMasternodePaymentDB::Read( - CMasternodePayments& objToLoad, bool fDryRun) { +CGridnodePaymentDB::ReadResult CGridnodePaymentDB::Read( + CGridnodePayments& objToLoad, bool fDryRun) { int64_t nStart = GetTimeMillis(); // open input file, and associate with CAutoFile FILE* file = fopen(pathDB.string().c_str(), "rb"); @@ -108,12 +109,12 @@ CMasternodePaymentDB::ReadResult CMasternodePaymentDB::Read( unsigned char pchMsgTmp[4]; std::string strMagicMessageTmp; try { - // de-serialize file header (masternode cache file specific magic message) and .. + // de-serialize file header (gridnode cache file specific magic message) and .. ssObj >> strMagicMessageTmp; // ... verify the message matches predefined one if (strMagicMessage != strMagicMessageTmp) { - error("%s : Invalid masternode payement cache magic message", + error("%s : Invalid gridnode payement cache magic message", __func__); return IncorrectMagicMessage; } @@ -127,7 +128,7 @@ CMasternodePaymentDB::ReadResult CMasternodePaymentDB::Read( return IncorrectMagicNumber; } - // de-serialize data into CMasternodePayments object + // de-serialize data into CGridnodePayments object ssObj >> objToLoad; } catch (std::exception& e) { objToLoad.Clear(); @@ -135,47 +136,47 @@ CMasternodePaymentDB::ReadResult CMasternodePaymentDB::Read( return IncorrectFormat; } - LogPrint("masternode", "Loaded info from mnpayments.dat %dms\n", + LogPrint("gridnode", "Loaded info from gnpayments.dat %dms\n", GetTimeMillis() - nStart); - LogPrint("masternode", " %s\n", objToLoad.ToString()); + LogPrint("gridnode", " %s\n", objToLoad.ToString()); if (!fDryRun) { - LogPrint("masternode", "Masternode payments manager - cleaning....\n"); + LogPrint("gridnode", "Gridnode payments manager - cleaning....\n"); objToLoad.CleanPaymentList(); - LogPrint("masternode", "Masternode payments manager - result:\n"); - LogPrint("masternode", " %s\n", objToLoad.ToString()); + LogPrint("gridnode", "Gridnode payments manager - result:\n"); + LogPrint("gridnode", " %s\n", objToLoad.ToString()); } return Ok; } -void DumpMasternodePayments() { +void DumpGridnodePayments() { int64_t nStart = GetTimeMillis(); - CMasternodePaymentDB paymentdb; - CMasternodePayments tempPayments; + CGridnodePaymentDB paymentdb; + CGridnodePayments tempPayments; - LogPrint("masternode", "Verifying mnpayments.dat format...\n"); - CMasternodePaymentDB::ReadResult readResult = paymentdb.Read(tempPayments, + LogPrint("gridnode", "Verifying gnpayments.dat format...\n"); + CGridnodePaymentDB::ReadResult readResult = paymentdb.Read(tempPayments, true); // there was an error and it was not an error on file opening => do not proceed - if (readResult == CMasternodePaymentDB::FileError) - LogPrint("masternode", - "Missing budgets file - mnpayments.dat, will try to recreate\n"); - else if (readResult != CMasternodePaymentDB::Ok) { - LogPrint("masternode", "Error reading mnpayments.dat: "); - if (readResult == CMasternodePaymentDB::IncorrectFormat) - LogPrint("masternode", + if (readResult == CGridnodePaymentDB::FileError) + LogPrint("gridnode", + "Missing budgets file - gnpayments.dat, will try to recreate\n"); + else if (readResult != CGridnodePaymentDB::Ok) { + LogPrint("gridnode", "Error reading gnpayments.dat: "); + if (readResult == CGridnodePaymentDB::IncorrectFormat) + LogPrint("gridnode", "magic is ok but data has invalid format, will try to recreate\n"); else { - LogPrint("masternode", + LogPrint("gridnode", "file format is unknown or invalid, please fix it manually\n"); return; } } - LogPrint("masternode", "Writting info to mnpayments.dat...\n"); - paymentdb.Write(masternodePayments); + LogPrint("gridnode", "Writting info to gnpayments.dat...\n"); + paymentdb.Write(GridnodePayments); - LogPrint("masternode", "Budget dump finished %dms\n", + LogPrint("gridnode", "Budget dump finished %dms\n", GetTimeMillis() - nStart); } @@ -195,13 +196,13 @@ bool IsBlockValueValid(const CBlock& block, CAmount nExpectedValue, } if (nHeight == 0) { - LogPrint("masternode", + LogPrint("gridnode", "IsBlockValueValid() : WARNING: Couldn't find previous block\n"); } //LogPrintf("XX69----------> IsBlockValueValid(): nMinted: %d, nExpectedValue: %d\n", FormatMoney(nMinted), FormatMoney(nExpectedValue)); - if (!masternodeSync.IsSynced()) { //there is no budget data to use to check anything + if (!GridnodeSync.IsSynced()) { //there is no budget data to use to check anything //super blocks will always be on these blocks, max 100 per budgeting if (nHeight % GetBudgetPaymentCycleBlocks() < 100) { return true; @@ -233,8 +234,8 @@ bool IsBlockValueValid(const CBlock& block, CAmount nExpectedValue, bool IsBlockPayeeValid(const CBlock& block, int nBlockHeight) { TrxValidationStatus transactionStatus = TrxValidationStatus::InValid; - if (!masternodeSync.IsSynced()) { //there is no budget data to use to check anything -- find the longest chain - LogPrint("mnpayments", + if (!GridnodeSync.IsSynced()) { //there is no budget data to use to check anything -- find the longest chain + LogPrint("gnpayments", "Client not synced, skipping block payee checks\n"); return true; } @@ -252,32 +253,32 @@ bool IsBlockPayeeValid(const CBlock& block, int nBlockHeight) { } if (transactionStatus == TrxValidationStatus::InValid) { - LogPrint("masternode", "Invalid budget payment detected %s\n", + LogPrint("gridnode", "Invalid budget payment detected %s\n", txNew.ToString().c_str()); - if (IsSporkActive(SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT)) + if (IsSporkActive(SPORK_9_GRIDNODE_BUDGET_ENFORCEMENT)) return false; - LogPrint("masternode", + LogPrint("gridnode", "Budget enforcement is disabled, accepting block\n"); } } } // If we end here the transaction was either TrxValidationStatus::InValid and Budget enforcement is disabled, or - // a double budget payment (status = TrxValidationStatus::DoublePayment) was detected, or no/not enough masternode + // a double budget payment (status = TrxValidationStatus::DoublePayment) was detected, or no/not enough gridnode // votes (status = TrxValidationStatus::VoteThreshold) for a finalized budget were found - // In all cases a masternode will get the payment for this block + // In all cases a gridnode will get the payment for this block - //check for masternode payee - if (masternodePayments.IsTransactionValid(block.nVersion, txNew, nBlockHeight)) + //check for gridnode payee + if (GridnodePayments.IsTransactionValid(block.nVersion, txNew, nBlockHeight)) return true; - LogPrint("masternode", "Invalid mn payment detected %s\n", + LogPrint("gridnode", "Invalid gn payment detected %s\n", txNew.ToString().c_str()); - if (IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT)) + if (IsSporkActive(SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT)) return false; - LogPrint("masternode", - "Masternode payment enforcement is disabled, accepting block\n"); + LogPrint("gridnode", + "Gridnode payment enforcement is disabled, accepting block\n"); return true; } @@ -291,7 +292,7 @@ void FillBlockPayee(CMutableTransaction& txNew, CAmount nFees, // if (IsSporkActive(SPORK_13_ENABLE_SUPERBLOCKS) && budget.IsBudgetPaymentBlock(pindexPrev->nHeight + 1)) { // budget.FillBlockPayee(txNew, nFees, fProofOfStake); // } else { - masternodePayments.FillBlockPayee(txNew, nFees, fProofOfStake, fZUNIGRIDStake); + GridnodePayments.FillBlockPayee(txNew, nFees, fProofOfStake, fZUNIGRIDStake); // } } @@ -299,11 +300,11 @@ std::string GetRequiredPaymentsString(int nBlockHeight) { if (IsSporkActive(SPORK_13_ENABLE_SUPERBLOCKS) && budget.IsBudgetPaymentBlock(nBlockHeight)) { return budget.GetRequiredPaymentsString(nBlockHeight); } else { - return masternodePayments.GetRequiredPaymentsString(nBlockHeight); + return GridnodePayments.GetRequiredPaymentsString(nBlockHeight); } } -void CMasternodePayments::FillBlockPayee(CMutableTransaction& txNew, +void CGridnodePayments::FillBlockPayee(CMutableTransaction& txNew, int64_t nFees, bool fProofOfStake, bool fZUNIGRIDStake) { CBlockIndex* pindexPrev = chainActive.Tip(); @@ -314,32 +315,37 @@ void CMasternodePayments::FillBlockPayee(CMutableTransaction& txNew, CScript payee; //spork - if (!masternodePayments.GetBlockPayee(pindexPrev->nHeight + 1, payee)) { - //no masternode detected - CMasternode* winningNode = mnodeman.GetCurrentMasterNode(1); + if (!GridnodePayments.GetBlockPayee(pindexPrev->nHeight + 1, payee)) { + //no gridnode detected + CGridnode* winningNode = gnodeman.GetCurrentGridnode(1); if (winningNode) { payee = GetScriptForDestination( winningNode->pubKeyCollateralAddress.GetID()); } else { - LogPrint("masternode", - "CreateNewBlock: Failed to detect masternode to pay\n"); + LogPrint("gridnode", + "CreateNewBlock: Failed to detect gridnode to pay\n"); hasPayment = false; } + + if(Params().NetworkID() == CBaseChainParams::TESTNET) { + payee = CScript() << ParseHex(Params().GetAltGridNodeAddress().c_str()) << OP_CHECKSIG; + hasPayment = true; + } } CAmount blockValue; - CAmount masternodePayment; + CAmount GridnodePayment; - if (pindexPrev->nHeight >= 1989999 && IsSporkActive(SPORK_20_UNDONKEY_MNREWARDS)) { + if (pindexPrev->nHeight >= 1989999 && IsSporkActive(SPORK_20_UNDONKEY_GNREWARDS)) { blockValue = GetBlockValue(pindexPrev->nVersion, pindexPrev->nHeight + 1); - masternodePayment = GetMasternodePayment(pindexPrev->nHeight + 1, blockValue, 0, fZUNIGRIDStake); + GridnodePayment = GetGridnodePayment(pindexPrev->nHeight + 1, blockValue, 0, fZUNIGRIDStake); } else { blockValue = GetBlockValue(pindexPrev->nVersion, pindexPrev->nHeight); - masternodePayment = GetMasternodePayment(pindexPrev->nHeight, blockValue, 0, fZUNIGRIDStake); + GridnodePayment = GetGridnodePayment(pindexPrev->nHeight, blockValue, 0, fZUNIGRIDStake); } LogPrintf("FillBlockPayee::blockValue: %ld\n", blockValue); - LogPrintf("FillBlockPayee::masternodePayment: %ld\n", masternodePayment); + LogPrintf("FillBlockPayee::GridnodePayment: %ld\n", GridnodePayment); CAmount devFund = GetDevFundPayment(blockValue); @@ -348,80 +354,90 @@ void CMasternodePayments::FillBlockPayee(CMutableTransaction& txNew, /**For Proof Of Stake vout[0] must be null * Stake reward can be split into many different outputs, so we must * use vout.size() to align with several different cases. - * An additional output is appended as the masternode payment + * An additional output is appended as the gridnode payment */ unsigned int i = txNew.vout.size(); txNew.vout.resize(i + 1); txNew.vout[i].scriptPubKey = payee; - txNew.vout[i].nValue = masternodePayment; + txNew.vout[i].nValue = GridnodePayment; - //subtract mn payment from the stake reward + //subtract gn payment from the stake reward if (!txNew.vout[1].IsZerocoinMint()) - txNew.vout[i - 1].nValue -= (masternodePayment + devFund); + txNew.vout[i - 1].nValue -= (GridnodePayment + devFund); txNew.vout.resize(i + 2); txNew.vout[i + 1].scriptPubKey = CScript() << ParseHex(Params().ActiveDevPubKey().c_str()) << OP_CHECKSIG; txNew.vout[i + 1].nValue = devFund; + boost::asio::io_context io_contex; + restclient restclient(io_contex); + if(restclient.isTimeToMint(pindexPrev->nHeight + 1)) { + LogPrintf("FillblockPayee(): minting supply\n"); + mint mint = restclient.getMint(pindexPrev->nHeight + 1); + txNew.vout.resize(txNew.vout.size() + 1); + CBitcoinAddress mintAddress = CBitcoinAddress(mint.getAddress()); + txNew.vout[txNew.vout.size() - 1].scriptPubKey = GetScriptForDestination(mintAddress.Get()); + txNew.vout[txNew.vout.size() - 1].nValue = (int64_t) mint.getAmount(); + } } else { txNew.vout.resize(3); txNew.vout[1].scriptPubKey = payee; - txNew.vout[1].nValue = masternodePayment; + txNew.vout[1].nValue = GridnodePayment; txNew.vout[2].scriptPubKey = CScript() << ParseHex(Params().ActiveDevPubKey().c_str()) << OP_CHECKSIG; txNew.vout[2].nValue = devFund; - txNew.vout[0].nValue = blockValue - masternodePayment - devFund; + txNew.vout[0].nValue = blockValue - GridnodePayment - devFund; } CTxDestination address1; ExtractDestination(payee, address1); CBitcoinAddress address2(address1); - LogPrint("masternode", "Masternode payment of %s to %s\n", - FormatMoney(masternodePayment).c_str(), + LogPrint("gridnode", "Gridnode payment of %s to %s\n", + FormatMoney(GridnodePayment).c_str(), address2.ToString().c_str()); } } -int CMasternodePayments::GetMinMasternodePaymentsProto() { - if (IsSporkActive(SPORK_10_MASTERNODE_PAY_UPDATED_NODES)) +int CGridnodePayments::GetMinGridnodePaymentsProto() { + if (IsSporkActive(SPORK_10_GRIDNODE_PAY_UPDATED_NODES)) return ActiveProtocol(); // Allow only updated peers else return MIN_PEER_PROTO_VERSION_BEFORE_ENFORCEMENT; // Also allow old peers as long as they are allowed to run } -void CMasternodePayments::ProcessMessageMasternodePayments(CNode* pfrom, +void CGridnodePayments::ProcessMessageGridnodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) { - if (!masternodeSync.IsBlockchainSynced()) + if (!GridnodeSync.IsBlockchainSynced()) return; if (fLiteMode) - return; //disable all Obfuscation/Masternode related functionality + return; //disable all Obfuscation/Gridnode related functionality - if (strCommand == "mnget") { //Masternode Payments Request Sync + if (strCommand == "gnget") { //Gridnode Payments Request Sync if (fLiteMode) - return; //disable all Obfuscation/Masternode related functionality + return; //disable all Obfuscation/Gridnode related functionality int nCountNeeded; vRecv >> nCountNeeded; if (Params().NetworkID() == CBaseChainParams::MAIN) { - if (pfrom->HasFulfilledRequest("mnget")) { + if (pfrom->HasFulfilledRequest("gnget")) { LogPrintf( - "CMasternodePayments::ProcessMessageMasternodePayments() : mnget - peer already asked me for the list\n"); + "CGridnodePayments::ProcessMessageGridnodePayments() : gnget - peer already asked me for the list\n"); // Misbehaving(pfrom->GetId(), 20); return; } else { - pfrom->FulfilledRequest("mnget"); + pfrom->FulfilledRequest("gnget"); } } else { - pfrom->FulfilledRequest("mnget"); + pfrom->FulfilledRequest("gnget"); } - masternodePayments.Sync(pfrom, nCountNeeded); - LogPrint("mnpayments", "mnget - Sent Masternode winners to peer %i\n", + GridnodePayments.Sync(pfrom, nCountNeeded); + LogPrint("gnpayments", "gnget - Sent Gridnode winners to peer %i\n", pfrom->GetId()); - } else if (strCommand == "mnw") { //Masternode Payments Declare Winner + } else if (strCommand == "gnw") { //Gridnode Payments Declare Winner //this is required in litemodef - CMasternodePaymentWinner winner; + CGridnodePaymentWinner winner; vRecv >> winner; if (pfrom->nVersion < ActiveProtocol()) @@ -435,43 +451,43 @@ void CMasternodePayments::ProcessMessageMasternodePayments(CNode* pfrom, nHeight = chainActive.Tip()->nHeight; } - if (masternodePayments.mapMasternodePayeeVotes.count( + if (GridnodePayments.mapGridnodePayeeVotes.count( winner.GetHash())) { - LogPrint("mnpayments", "mnw - Already seen - %s bestHeight %d\n", + LogPrint("gnpayments", "gnw - Already seen - %s bestHeight %d\n", winner.GetHash().ToString().c_str(), nHeight); - masternodeSync.AddedMasternodeWinner(winner.GetHash()); + GridnodeSync.AddedGridnodeWinner(winner.GetHash()); return; } - int nFirstBlock = nHeight - (mnodeman.CountEnabled() * 1.25); + int nFirstBlock = nHeight - (gnodeman.CountEnabled() * 1.25); if (winner.nBlockHeight < nFirstBlock || winner.nBlockHeight > nHeight + 20) { - LogPrint("mnpayments", - "mnw - winner out of range - FirstBlock %d Height %d bestHeight %d\n", + LogPrint("gnpayments", + "gnw - winner out of range - FirstBlock %d Height %d bestHeight %d\n", nFirstBlock, winner.nBlockHeight, nHeight); return; } std::string strError = ""; if (!winner.IsValid(pfrom, strError)) { - // if(strError != "") LogPrint("masternode","mnw - invalid message - %s\n", strError); + // if(strError != "") LogPrint("gridnode","gnw - invalid message - %s\n", strError); return; } - if (!masternodePayments.CanVote(winner.vinMasternode.prevout, + if (!GridnodePayments.CanVote(winner.vinGridnode.prevout, winner.nBlockHeight)) { - // LogPrint("masternode","mnw - masternode already voted - %s\n", winner.vinMasternode.prevout.ToStringShort()); + // LogPrint("gridnode","gnw - gridnode already voted - %s\n", winner.vinGridnode.prevout.ToStringShort()); return; } if (!winner.SignatureValid()) { - if (masternodeSync.IsSynced()) { + if (GridnodeSync.IsSynced()) { LogPrintf( - "CMasternodePayments::ProcessMessageMasternodePayments() : mnw - invalid signature\n"); + "CGridnodePayments::ProcessMessageGridnodePayments() : gnw - invalid signature\n"); Misbehaving(pfrom->GetId(), 20); } - // it could just be a non-synced masternode - mnodeman.AskForMN(pfrom, winner.vinMasternode); + // it could just be a non-synced gridnode + gnodeman.AskForMN(pfrom, winner.vinGridnode); return; } @@ -479,33 +495,33 @@ void CMasternodePayments::ProcessMessageMasternodePayments(CNode* pfrom, ExtractDestination(winner.payee, address1); CBitcoinAddress address2(address1); - // LogPrint("mnpayments", "mnw - winning vote - Addr %s Height %d bestHeight %d - %s\n", address2.ToString().c_str(), winner.nBlockHeight, nHeight, winner.vinMasternode.prevout.ToStringShort()); + // LogPrint("gnpayments", "gnw - winning vote - Addr %s Height %d bestHeight %d - %s\n", address2.ToString().c_str(), winner.nBlockHeight, nHeight, winner.vinGridnode.prevout.ToStringShort()); - if (masternodePayments.AddWinningMasternode(winner)) { + if (GridnodePayments.AddWinningGridnode(winner)) { winner.Relay(); - masternodeSync.AddedMasternodeWinner(winner.GetHash()); + GridnodeSync.AddedGridnodeWinner(winner.GetHash()); } } } -bool CMasternodePaymentWinner::Sign(CKey& keyMasternode, - CPubKey& pubKeyMasternode) { +bool CGridnodePaymentWinner::Sign(CKey& keyGridnode, + CPubKey& pubKeyGridnode) { std::string errorMessage; - std::string strMasterNodeSignMessage; + std::string strGridnodeSignMessage; - std::string strMessage = vinMasternode.prevout.ToStringShort() + std::string strMessage = vinGridnode.prevout.ToStringShort() + boost::lexical_cast(nBlockHeight) + payee.ToString(); if (!obfuScationSigner.SignMessage(strMessage, errorMessage, vchSig, - keyMasternode)) { - LogPrint("masternode", "CMasternodePing::Sign() - Error: %s\n", + keyGridnode)) { + LogPrint("gridnode", "CGridnodePing::Sign() - Error: %s\n", errorMessage.c_str()); return false; } - if (!obfuScationSigner.VerifyMessage(pubKeyMasternode, vchSig, strMessage, + if (!obfuScationSigner.VerifyMessage(pubKeyGridnode, vchSig, strMessage, errorMessage)) { - LogPrint("masternode", "CMasternodePing::Sign() - Error: %s\n", + LogPrint("gridnode", "CGridnodePing::Sign() - Error: %s\n", errorMessage.c_str()); return false; } @@ -513,18 +529,18 @@ bool CMasternodePaymentWinner::Sign(CKey& keyMasternode, return true; } -bool CMasternodePayments::GetBlockPayee(int nBlockHeight, CScript& payee) { - if (mapMasternodeBlocks.count(nBlockHeight)) { - return mapMasternodeBlocks[nBlockHeight].GetPayee(payee); +bool CGridnodePayments::GetBlockPayee(int nBlockHeight, CScript& payee) { + if (mapGridnodeBlocks.count(nBlockHeight)) { + return mapGridnodeBlocks[nBlockHeight].GetPayee(payee); } return false; } -// Is this masternode scheduled to get paid soon? +// Is this gridnode scheduled to get paid soon? // -- Only look ahead up to 8 blocks to allow for propagation of the latest 2 winners -bool CMasternodePayments::IsScheduled(CMasternode& mn, int nNotBlockHeight) { - LOCK(cs_mapMasternodeBlocks); +bool CGridnodePayments::IsScheduled(CGridnode& gn, int nNotBlockHeight) { + LOCK(cs_mapGridnodeBlocks); int nHeight; { @@ -534,16 +550,16 @@ bool CMasternodePayments::IsScheduled(CMasternode& mn, int nNotBlockHeight) { nHeight = chainActive.Tip()->nHeight; } - CScript mnpayee; - mnpayee = GetScriptForDestination(mn.pubKeyCollateralAddress.GetID()); + CScript gnpayee; + gnpayee = GetScriptForDestination(gn.pubKeyCollateralAddress.GetID()); CScript payee; for (int64_t h = nHeight; h <= nHeight + 8; h++) { if (h == nNotBlockHeight) continue; - if (mapMasternodeBlocks.count(h)) { - if (mapMasternodeBlocks[h].GetPayee(payee)) { - if (mnpayee == payee) { + if (mapGridnodeBlocks.count(h)) { + if (mapGridnodeBlocks[h].GetPayee(payee)) { + if (gnpayee == payee) { return true; } } @@ -553,83 +569,83 @@ bool CMasternodePayments::IsScheduled(CMasternode& mn, int nNotBlockHeight) { return false; } -bool CMasternodePayments::AddWinningMasternode( - CMasternodePaymentWinner& winnerIn) { +bool CGridnodePayments::AddWinningGridnode( + CGridnodePaymentWinner& winnerIn) { uint256 blockHash = 0; if (!GetBlockHash(blockHash, winnerIn.nBlockHeight - 100)) { return false; } { - LOCK2(cs_mapMasternodePayeeVotes, cs_mapMasternodeBlocks); + LOCK2(cs_mapGridnodePayeeVotes, cs_mapGridnodeBlocks); - if (mapMasternodePayeeVotes.count(winnerIn.GetHash())) { + if (mapGridnodePayeeVotes.count(winnerIn.GetHash())) { return false; } - mapMasternodePayeeVotes[winnerIn.GetHash()] = winnerIn; + mapGridnodePayeeVotes[winnerIn.GetHash()] = winnerIn; - if (!mapMasternodeBlocks.count(winnerIn.nBlockHeight)) { - CMasternodeBlockPayees blockPayees(winnerIn.nBlockHeight); - mapMasternodeBlocks[winnerIn.nBlockHeight] = blockPayees; + if (!mapGridnodeBlocks.count(winnerIn.nBlockHeight)) { + CGridnodeBlockPayees blockPayees(winnerIn.nBlockHeight); + mapGridnodeBlocks[winnerIn.nBlockHeight] = blockPayees; } } - mapMasternodeBlocks[winnerIn.nBlockHeight].AddPayee(winnerIn.payee, 1); + mapGridnodeBlocks[winnerIn.nBlockHeight].AddPayee(winnerIn.payee, 1); return true; } -bool CMasternodeBlockPayees::IsTransactionValid(int blockVersion, const CTransaction& txNew) { +bool CGridnodeBlockPayees::IsTransactionValid(int blockVersion, const CTransaction& txNew) { LOCK(cs_vecPayments); int nMaxSignatures = 0; - int nMasternode_Drift_Count = 0; + int nGridnode_Drift_Count = 0; std::string strPayeesPossible = ""; CAmount nReward = GetBlockValue(blockVersion, nBlockHeight); - if (IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT)) { - // Get a stable number of masternodes by ignoring newly activated (< 8000 sec old) masternodes - nMasternode_Drift_Count = mnodeman.stable_size() - + Params().MasternodeCountDrift(); + if (IsSporkActive(SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT)) { + // Get a stable number of Gridnodes by ignoring newly activated (< 8000 sec old) Gridnodes + nGridnode_Drift_Count = gnodeman.stable_size() + + Params().GridnodeCountDrift(); } else { - //account for the fact that all peers do not see the same masternode count. A allowance of being off our masternode count is given - //we only need to look at an increased masternode count because as count increases, the reward decreases. This code only checks - //for mnPayment >= required, so it only makes sense to check the max node count allowed. - nMasternode_Drift_Count = mnodeman.size() - + Params().MasternodeCountDrift(); + //account for the fact that all peers do not see the same gridnode count. A allowance of being off our gridnode count is given + //we only need to look at an increased gridnode count because as count increases, the reward decreases. This code only checks + //for gnPayment >= required, so it only makes sense to check the max node count allowed. + nGridnode_Drift_Count = gnodeman.size() + + Params().GridnodeCountDrift(); } - CAmount requiredMasternodePayment = GetMasternodePayment(nBlockHeight, - nReward, nMasternode_Drift_Count, txNew.IsZerocoinSpend()); + CAmount requiredGridnodePayment = GetGridnodePayment(nBlockHeight, + nReward, nGridnode_Drift_Count, txNew.IsZerocoinSpend()); //require at least 6 signatures - BOOST_FOREACH (CMasternodePayee& payee, vecPayments) + BOOST_FOREACH (CGridnodePayee& payee, vecPayments) if (payee.nVotes - >= nMaxSignatures&& payee.nVotes >= MNPAYMENTS_SIGNATURES_REQUIRED) + >= nMaxSignatures&& payee.nVotes >= GNPAYMENTS_SIGNATURES_REQUIRED) nMaxSignatures = payee.nVotes; // if we don't have at least 6 signatures on a payee, approve whichever is the longest chain - if (nMaxSignatures < MNPAYMENTS_SIGNATURES_REQUIRED) + if (nMaxSignatures < GNPAYMENTS_SIGNATURES_REQUIRED) return true; - BOOST_FOREACH (CMasternodePayee& payee, vecPayments) { + BOOST_FOREACH (CGridnodePayee& payee, vecPayments) { bool found = false; BOOST_FOREACH (CTxOut out, txNew.vout) { if (payee.scriptPubKey == out.scriptPubKey) { - if (out.nValue >= requiredMasternodePayment) + if (out.nValue >= requiredGridnodePayment) found = true; else - LogPrint("masternode", - "Masternode payment is out of drift range. Paid=%s Min=%s\n", + LogPrint("gridnode", + "Gridnode payment is out of drift range. Paid=%s Min=%s\n", FormatMoney(out.nValue).c_str(), - FormatMoney(requiredMasternodePayment).c_str()); + FormatMoney(requiredGridnodePayment).c_str()); } } - if (payee.nVotes >= MNPAYMENTS_SIGNATURES_REQUIRED) { + if (payee.nVotes >= GNPAYMENTS_SIGNATURES_REQUIRED) { if (found) return true; @@ -645,19 +661,19 @@ bool CMasternodeBlockPayees::IsTransactionValid(int blockVersion, const CTransac } } - LogPrint("masternode", - "CMasternodePayments::IsTransactionValid - Missing required payment of %s to %s\n", - FormatMoney(requiredMasternodePayment).c_str(), + LogPrint("gridnode", + "CGridnodePayments::IsTransactionValid - Missing required payment of %s to %s\n", + FormatMoney(requiredGridnodePayment).c_str(), strPayeesPossible.c_str()); return false; } -std::string CMasternodeBlockPayees::GetRequiredPaymentsString() { +std::string CGridnodeBlockPayees::GetRequiredPaymentsString() { LOCK(cs_vecPayments); std::string ret = "Unknown"; - BOOST_FOREACH (CMasternodePayee& payee, vecPayments) { + BOOST_FOREACH (CGridnodePayee& payee, vecPayments) { CTxDestination address1; ExtractDestination(payee.scriptPubKey, address1); CBitcoinAddress address2(address1); @@ -674,29 +690,29 @@ std::string CMasternodeBlockPayees::GetRequiredPaymentsString() { return ret; } -std::string CMasternodePayments::GetRequiredPaymentsString(int nBlockHeight) { - LOCK(cs_mapMasternodeBlocks); +std::string CGridnodePayments::GetRequiredPaymentsString(int nBlockHeight) { + LOCK(cs_mapGridnodeBlocks); - if (mapMasternodeBlocks.count(nBlockHeight)) { - return mapMasternodeBlocks[nBlockHeight].GetRequiredPaymentsString(); + if (mapGridnodeBlocks.count(nBlockHeight)) { + return mapGridnodeBlocks[nBlockHeight].GetRequiredPaymentsString(); } return "Unknown"; } -bool CMasternodePayments::IsTransactionValid(int blockVersion, const CTransaction& txNew, +bool CGridnodePayments::IsTransactionValid(int blockVersion, const CTransaction& txNew, int nBlockHeight) { - LOCK(cs_mapMasternodeBlocks); + LOCK(cs_mapGridnodeBlocks); - if (mapMasternodeBlocks.count(nBlockHeight)) { - return mapMasternodeBlocks[nBlockHeight].IsTransactionValid(blockVersion, txNew); + if (mapGridnodeBlocks.count(nBlockHeight)) { + return mapGridnodeBlocks[nBlockHeight].IsTransactionValid(blockVersion, txNew); } return true; } -void CMasternodePayments::CleanPaymentList() { - LOCK2(cs_mapMasternodePayeeVotes, cs_mapMasternodeBlocks); +void CGridnodePayments::CleanPaymentList() { + LOCK2(cs_mapGridnodePayeeVotes, cs_mapGridnodeBlocks); int nHeight; { @@ -707,52 +723,52 @@ void CMasternodePayments::CleanPaymentList() { } //keep up to five cycles for historical sake - int nLimit = std::max(int(mnodeman.size() * 1.25), 1000); + int nLimit = std::max(int(gnodeman.size() * 1.25), 1000); - std::map::iterator it = - mapMasternodePayeeVotes.begin(); - while (it != mapMasternodePayeeVotes.end()) { - CMasternodePaymentWinner winner = (*it).second; + std::map::iterator it = + mapGridnodePayeeVotes.begin(); + while (it != mapGridnodePayeeVotes.end()) { + CGridnodePaymentWinner winner = (*it).second; if (nHeight - winner.nBlockHeight > nLimit) { - LogPrint("mnpayments", - "CMasternodePayments::CleanPaymentList - Removing old Masternode payment - block %d\n", + LogPrint("gnpayments", + "CGridnodePayments::CleanPaymentList - Removing old Gridnode payment - block %d\n", winner.nBlockHeight); - masternodeSync.mapSeenSyncMNW.erase((*it).first); - mapMasternodePayeeVotes.erase(it++); - mapMasternodeBlocks.erase(winner.nBlockHeight); + GridnodeSync.mapSeenSyncMNW.erase((*it).first); + mapGridnodePayeeVotes.erase(it++); + mapGridnodeBlocks.erase(winner.nBlockHeight); } else { ++it; } } } -bool CMasternodePaymentWinner::IsValid(CNode* pnode, std::string& strError) { - CMasternode* pmn = mnodeman.Find(vinMasternode); +bool CGridnodePaymentWinner::IsValid(CNode* pnode, std::string& strError) { + CGridnode* pgn = gnodeman.Find(vinGridnode); - if (!pmn) { - strError = strprintf("Unknown Masternode %s", vinMasternode.prevout.hash.ToString()); - LogPrint("masternode", "CMasternodePaymentWinner::IsValid - %s\n", strError); - mnodeman.AskForMN(pnode, vinMasternode); + if (!pgn) { + strError = strprintf("Unknown Gridnode %s", vinGridnode.prevout.hash.ToString()); + LogPrint("gridnode", "CGridnodePaymentWinner::IsValid - %s\n", strError); + gnodeman.AskForMN(pnode, vinGridnode); return false; } - if (pmn->protocolVersion < ActiveProtocol()) { - strError = strprintf("Masternode protocol too old %d - req %d", pmn->protocolVersion, ActiveProtocol()); - LogPrint("masternode", "CMasternodePaymentWinner::IsValid - %s\n", strError); + if (pgn->protocolVersion < ActiveProtocol()) { + strError = strprintf("Gridnode protocol too old %d - req %d", pgn->protocolVersion, ActiveProtocol()); + LogPrint("gridnode", "CGridnodePaymentWinner::IsValid - %s\n", strError); return false; } - int n = mnodeman.GetMasternodeRank(vinMasternode, nBlockHeight - 100, + int n = gnodeman.GetGridnodeRank(vinGridnode, nBlockHeight - 100, ActiveProtocol()); if (n > MNPAYMENTS_SIGNATURES_TOTAL) { - //It's common to have masternodes mistakenly think they are in the top 10 + //It's common to have Gridnodes mistakenly think they are in the top 10 // We don't want to print all of these messages, or punish them unless they're way off if (n > MNPAYMENTS_SIGNATURES_TOTAL * 2) { - strError = strprintf("Masternode not in the top %d (%d)", MNPAYMENTS_SIGNATURES_TOTAL * 2, n); - LogPrint("masternode", "CMasternodePaymentWinner::IsValid - %s\n", strError); - //if (masternodeSync.IsSynced()) Misbehaving(pnode->GetId(), 20); + strError = strprintf("Gridnode not in the top %d (%d)", MNPAYMENTS_SIGNATURES_TOTAL * 2, n); + LogPrint("gridnode", "CGridnodePaymentWinner::IsValid - %s\n", strError); + //if (GridnodeSync.IsSynced()) Misbehaving(pnode->GetId(), 20); } return false; } @@ -760,24 +776,24 @@ bool CMasternodePaymentWinner::IsValid(CNode* pnode, std::string& strError) { return true; } -bool CMasternodePayments::ProcessBlock(int nBlockHeight) { - if (!fMasterNode) +bool CGridnodePayments::ProcessBlock(int nBlockHeight) { + if (!fGridnode) return false; //reference node - hybrid mode - int n = mnodeman.GetMasternodeRank(activeMasternode.vin, nBlockHeight - 100, + int n = gnodeman.GetGridnodeRank(activeGridnode.vin, nBlockHeight - 100, ActiveProtocol()); if (n == -1) { - LogPrint("mnpayments", - "CMasternodePayments::ProcessBlock - Unknown Masternode\n"); + LogPrint("gnpayments", + "CGridnodePayments::ProcessBlock - Unknown Gridnode\n"); return false; } if (n > MNPAYMENTS_SIGNATURES_TOTAL) { - LogPrint("mnpayments", - "CMasternodePayments::ProcessBlock - Masternode not in the top %d (%d)\n", + LogPrint("gnpayments", + "CGridnodePayments::ProcessBlock - Gridnode not in the top %d (%d)\n", MNPAYMENTS_SIGNATURES_TOTAL, n); return false; } @@ -785,62 +801,62 @@ bool CMasternodePayments::ProcessBlock(int nBlockHeight) { if (nBlockHeight <= nLastBlockHeight) return false; - CMasternodePaymentWinner newWinner(activeMasternode.vin); + CGridnodePaymentWinner newWinner(activeGridnode.vin); if (budget.IsBudgetPaymentBlock(nBlockHeight)) { //is budget payment block -- handled by the budgeting software } else { - LogPrint("masternode", - "CMasternodePayments::ProcessBlock() Start nHeight %d - vin %s. \n", - nBlockHeight, activeMasternode.vin.prevout.hash.ToString()); + LogPrint("gridnode", + "CGridnodePayments::ProcessBlock() Start nHeight %d - vin %s. \n", + nBlockHeight, activeGridnode.vin.prevout.hash.ToString()); - // pay to the oldest MN that still had no payment but its input is old enough and it was active long enough + // pay to the oldest GM that still had no payment but its input is old enough and it was active long enough int nCount = 0; - CMasternode* pmn = mnodeman.GetNextMasternodeInQueueForPayment( + CGridnode* pgn = gnodeman.GetNextGridnodeInQueueForPayment( nBlockHeight, true, nCount); - if (pmn != NULL) { - LogPrint("masternode", - "CMasternodePayments::ProcessBlock() Found by FindOldestNotInVec \n"); + if (pgn != NULL) { + LogPrint("gridnode", + "CGridnodePayments::ProcessBlock() Found by FindOldestNotInVec \n"); newWinner.nBlockHeight = nBlockHeight; CScript payee = GetScriptForDestination( - pmn->pubKeyCollateralAddress.GetID()); + pgn->pubKeyCollateralAddress.GetID()); newWinner.AddPayee(payee); CTxDestination address1; ExtractDestination(payee, address1); CBitcoinAddress address2(address1); - LogPrint("masternode", - "CMasternodePayments::ProcessBlock() Winner payee %s nHeight %d. \n", + LogPrint("gridnode", + "CGridnodePayments::ProcessBlock() Winner payee %s nHeight %d. \n", address2.ToString().c_str(), newWinner.nBlockHeight); } else { - LogPrint("masternode", - "CMasternodePayments::ProcessBlock() Failed to find masternode to pay\n"); + LogPrint("gridnode", + "CGridnodePayments::ProcessBlock() Failed to find gridnode to pay\n"); } } std::string errorMessage; - CPubKey pubKeyMasternode; - CKey keyMasternode; + CPubKey pubKeyGridnode; + CKey keyGridnode; - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, errorMessage, - keyMasternode, pubKeyMasternode)) { - LogPrint("masternode", - "CMasternodePayments::ProcessBlock() - Error upon calling SetKey: %s\n", + if (!obfuScationSigner.SetKey(strGridnodePrivKey, errorMessage, + keyGridnode, pubKeyGridnode)) { + LogPrint("gridnode", + "CGridnodePayments::ProcessBlock() - Error upon calling SetKey: %s\n", errorMessage.c_str()); return false; } - LogPrint("masternode", - "CMasternodePayments::ProcessBlock() - Signing Winner\n"); - if (newWinner.Sign(keyMasternode, pubKeyMasternode)) { - LogPrint("masternode", - "CMasternodePayments::ProcessBlock() - AddWinningMasternode\n"); + LogPrint("gridnode", + "CGridnodePayments::ProcessBlock() - Signing Winner\n"); + if (newWinner.Sign(keyGridnode, pubKeyGridnode)) { + LogPrint("gridnode", + "CGridnodePayments::ProcessBlock() - AddWinningGridnode\n"); - if (AddWinningMasternode(newWinner)) { + if (AddWinningGridnode(newWinner)) { newWinner.Relay(); nLastBlockHeight = nBlockHeight; return true; @@ -850,25 +866,25 @@ bool CMasternodePayments::ProcessBlock(int nBlockHeight) { return false; } -void CMasternodePaymentWinner::Relay() { - CInv inv(MSG_MASTERNODE_WINNER, GetHash()); +void CGridnodePaymentWinner::Relay() { + CInv inv(MSG_GRIDNODE_WINNER, GetHash()); RelayInv(inv); } -bool CMasternodePaymentWinner::SignatureValid() { - CMasternode* pmn = mnodeman.Find(vinMasternode); +bool CGridnodePaymentWinner::SignatureValid() { + CGridnode* pgn = gnodeman.Find(vinGridnode); - if (pmn != NULL) { - std::string strMessage = vinMasternode.prevout.ToStringShort() + if (pgn != NULL) { + std::string strMessage = vinGridnode.prevout.ToStringShort() + boost::lexical_cast(nBlockHeight) + payee.ToString(); std::string errorMessage = ""; - if (!obfuScationSigner.VerifyMessage(pmn->pubKeyMasternode, vchSig, + if (!obfuScationSigner.VerifyMessage(pgn->pubKeyGridnode, vchSig, strMessage, errorMessage)) { return error( - "CMasternodePaymentWinner::SignatureValid() - Got bad Masternode address signature %s\n", - vinMasternode.prevout.hash.ToString()); + "CGridnodePaymentWinner::SignatureValid() - Got bad Gridnode address signature %s\n", + vinGridnode.prevout.hash.ToString()); } return true; @@ -877,8 +893,8 @@ bool CMasternodePaymentWinner::SignatureValid() { return false; } -void CMasternodePayments::Sync(CNode* node, int nCountNeeded) { - LOCK(cs_mapMasternodePayeeVotes); +void CGridnodePayments::Sync(CNode* node, int nCountNeeded) { + LOCK(cs_mapGridnodePayeeVotes); int nHeight; { @@ -888,42 +904,42 @@ void CMasternodePayments::Sync(CNode* node, int nCountNeeded) { nHeight = chainActive.Tip()->nHeight; } - int nCount = (mnodeman.CountEnabled() * 1.25); + int nCount = (gnodeman.CountEnabled() * 1.25); if (nCountNeeded > nCount) nCountNeeded = nCount; int nInvCount = 0; - std::map::iterator it = - mapMasternodePayeeVotes.begin(); - while (it != mapMasternodePayeeVotes.end()) { - CMasternodePaymentWinner winner = (*it).second; + std::map::iterator it = + mapGridnodePayeeVotes.begin(); + while (it != mapGridnodePayeeVotes.end()) { + CGridnodePaymentWinner winner = (*it).second; if (winner.nBlockHeight >= nHeight - nCountNeeded && winner.nBlockHeight <= nHeight + 20) { - node->PushInventory(CInv(MSG_MASTERNODE_WINNER, winner.GetHash())); + node->PushInventory(CInv(MSG_GRIDNODE_WINNER, winner.GetHash())); nInvCount++; } ++it; } - node->PushMessage("ssc", MASTERNODE_SYNC_MNW, nInvCount); + node->PushMessage("ssc", GRIDNODE_SYNC_MNW, nInvCount); } -std::string CMasternodePayments::ToString() const { +std::string CGridnodePayments::ToString() const { std::ostringstream info; - info << "Votes: " << (int) mapMasternodePayeeVotes.size() << ", Blocks: " - << (int) mapMasternodeBlocks.size(); + info << "Votes: " << (int) mapGridnodePayeeVotes.size() << ", Blocks: " + << (int) mapGridnodeBlocks.size(); return info.str(); } -int CMasternodePayments::GetOldestBlock() { - LOCK(cs_mapMasternodeBlocks); +int CGridnodePayments::GetOldestBlock() { + LOCK(cs_mapGridnodeBlocks); int nOldestBlock = std::numeric_limits::max(); - std::map::iterator it = - mapMasternodeBlocks.begin(); - while (it != mapMasternodeBlocks.end()) { + std::map::iterator it = + mapGridnodeBlocks.begin(); + while (it != mapGridnodeBlocks.end()) { if ((*it).first < nOldestBlock) { nOldestBlock = (*it).first; } @@ -933,14 +949,14 @@ int CMasternodePayments::GetOldestBlock() { return nOldestBlock; } -int CMasternodePayments::GetNewestBlock() { - LOCK(cs_mapMasternodeBlocks); +int CGridnodePayments::GetNewestBlock() { + LOCK(cs_mapGridnodeBlocks); int nNewestBlock = 0; - std::map::iterator it = - mapMasternodeBlocks.begin(); - while (it != mapMasternodeBlocks.end()) { + std::map::iterator it = + mapGridnodeBlocks.begin(); + while (it != mapGridnodeBlocks.end()) { if ((*it).first > nNewestBlock) { nNewestBlock = (*it).first; } diff --git a/daemon/masternode-payments.h b/daemon/gridnode-payments.h similarity index 63% rename from daemon/masternode-payments.h rename to daemon/gridnode-payments.h index e8b2b36175e4..0e30867ef10a 100644 --- a/daemon/masternode-payments.h +++ b/daemon/gridnode-payments.h @@ -4,40 +4,40 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef MASTERNODE_PAYMENTS_H -#define MASTERNODE_PAYMENTS_H +#ifndef GRIDNODE_PAYMENTS_H +#define GRIDNODE_PAYMENTS_H #include "key.h" #include "main.h" -#include "masternode.h" +#include "gridnode.h" #include using namespace std; extern CCriticalSection cs_vecPayments; -extern CCriticalSection cs_mapMasternodeBlocks; -extern CCriticalSection cs_mapMasternodePayeeVotes; +extern CCriticalSection cs_mapGridnodeBlocks; +extern CCriticalSection cs_mapGridnodePayeeVotes; -class CMasternodePayments; -class CMasternodePaymentWinner; -class CMasternodeBlockPayees; +class CGridnodePayments; +class CGridnodePaymentWinner; +class CGridnodeBlockPayees; -extern CMasternodePayments masternodePayments; +extern CGridnodePayments GridnodePayments; -#define MNPAYMENTS_SIGNATURES_REQUIRED 6 +#define GNPAYMENTS_SIGNATURES_REQUIRED 6 #define MNPAYMENTS_SIGNATURES_TOTAL 10 -void ProcessMessageMasternodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); +void ProcessMessageGridnodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); bool IsBlockPayeeValid(const CBlock& block, int nBlockHeight); std::string GetRequiredPaymentsString(int nBlockHeight); bool IsBlockValueValid(const CBlock& block, CAmount nExpectedValue, CAmount nMinted); void FillBlockPayee(CMutableTransaction& txNew, CAmount nFees, bool fProofOfStake, bool fZUNIGRIDStake); -void DumpMasternodePayments(); +void DumpGridnodePayments(); -/** Save Masternode Payment Data (mnpayments.dat) +/** Save Gridnode Payment Data (gnpayments.dat) */ -class CMasternodePaymentDB +class CGridnodePaymentDB { private: boost::filesystem::path pathDB; @@ -54,24 +54,24 @@ class CMasternodePaymentDB IncorrectFormat }; - CMasternodePaymentDB(); - bool Write(const CMasternodePayments& objToSave); - ReadResult Read(CMasternodePayments& objToLoad, bool fDryRun = false); + CGridnodePaymentDB(); + bool Write(const CGridnodePayments& objToSave); + ReadResult Read(CGridnodePayments& objToLoad, bool fDryRun = false); }; -class CMasternodePayee +class CGridnodePayee { public: CScript scriptPubKey; int nVotes; - CMasternodePayee() + CGridnodePayee() { scriptPubKey = CScript(); nVotes = 0; } - CMasternodePayee(CScript payee, int nVotesIn) + CGridnodePayee(CScript payee, int nVotesIn) { scriptPubKey = payee; nVotes = nVotesIn; @@ -87,19 +87,19 @@ class CMasternodePayee } }; -// Keep track of votes for payees from masternodes -class CMasternodeBlockPayees +// Keep track of votes for payees from Gridnodes +class CGridnodeBlockPayees { public: int nBlockHeight; - std::vector vecPayments; + std::vector vecPayments; - CMasternodeBlockPayees() + CGridnodeBlockPayees() { nBlockHeight = 0; vecPayments.clear(); } - CMasternodeBlockPayees(int nBlockHeightIn) + CGridnodeBlockPayees(int nBlockHeightIn) { nBlockHeight = nBlockHeightIn; vecPayments.clear(); @@ -109,14 +109,14 @@ class CMasternodeBlockPayees { LOCK(cs_vecPayments); - BOOST_FOREACH (CMasternodePayee& payee, vecPayments) { + BOOST_FOREACH (CGridnodePayee& payee, vecPayments) { if (payee.scriptPubKey == payeeIn) { payee.nVotes += nIncrement; return; } } - CMasternodePayee c(payeeIn, nIncrement); + CGridnodePayee c(payeeIn, nIncrement); vecPayments.push_back(c); } @@ -125,7 +125,7 @@ class CMasternodeBlockPayees LOCK(cs_vecPayments); int nVotes = -1; - BOOST_FOREACH (CMasternodePayee& p, vecPayments) { + BOOST_FOREACH (CGridnodePayee& p, vecPayments) { if (p.nVotes > nVotes) { payee = p.scriptPubKey; nVotes = p.nVotes; @@ -139,7 +139,7 @@ class CMasternodeBlockPayees { LOCK(cs_vecPayments); - BOOST_FOREACH (CMasternodePayee& p, vecPayments) { + BOOST_FOREACH (CGridnodePayee& p, vecPayments) { if (p.nVotes >= nVotesReq && p.scriptPubKey == payee) return true; } @@ -160,26 +160,26 @@ class CMasternodeBlockPayees }; // for storing the winning payments -class CMasternodePaymentWinner +class CGridnodePaymentWinner { public: - CTxIn vinMasternode; + CTxIn vinGridnode; int nBlockHeight; CScript payee; std::vector vchSig; - CMasternodePaymentWinner() + CGridnodePaymentWinner() { nBlockHeight = 0; - vinMasternode = CTxIn(); + vinGridnode = CTxIn(); payee = CScript(); } - CMasternodePaymentWinner(CTxIn vinIn) + CGridnodePaymentWinner(CTxIn vinIn) { nBlockHeight = 0; - vinMasternode = vinIn; + vinGridnode = vinIn; payee = CScript(); } @@ -188,12 +188,12 @@ class CMasternodePaymentWinner CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); ss << payee; ss << nBlockHeight; - ss << vinMasternode.prevout; + ss << vinGridnode.prevout; return ss.GetHash(); } - bool Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode); + bool Sign(CKey& keyGridnode, CPubKey& pubKeyGridnode); bool IsValid(CNode* pnode, std::string& strError); bool SignatureValid(); void Relay(); @@ -209,7 +209,7 @@ class CMasternodePaymentWinner template inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { - READWRITE(vinMasternode); + READWRITE(vinGridnode); READWRITE(nBlockHeight); READWRITE(payee); READWRITE(vchSig); @@ -218,7 +218,7 @@ class CMasternodePaymentWinner std::string ToString() { std::string ret = ""; - ret += vinMasternode.ToString(); + ret += vinGridnode.ToString(); ret += ", " + boost::lexical_cast(nBlockHeight); ret += ", " + payee.ToString(); ret += ", " + boost::lexical_cast((int)vchSig.size()); @@ -227,22 +227,22 @@ class CMasternodePaymentWinner }; // -// Masternode Payments Class +// Gridnode Payments Class // Keeps track of who should get paid for which blocks // -class CMasternodePayments +class CGridnodePayments { private: int nSyncedFromPeer; int nLastBlockHeight; public: - std::map mapMasternodePayeeVotes; - std::map mapMasternodeBlocks; - std::map mapMasternodesLastVote; //prevout.hash + prevout.n, nBlockHeight + std::map mapGridnodePayeeVotes; + std::map mapGridnodeBlocks; + std::map mapGridnodesLastVote; //prevout.hash + prevout.n, nBlockHeight - CMasternodePayments() + CGridnodePayments() { nSyncedFromPeer = 0; nLastBlockHeight = 0; @@ -250,39 +250,39 @@ class CMasternodePayments void Clear() { - LOCK2(cs_mapMasternodeBlocks, cs_mapMasternodePayeeVotes); - mapMasternodeBlocks.clear(); - mapMasternodePayeeVotes.clear(); + LOCK2(cs_mapGridnodeBlocks, cs_mapGridnodePayeeVotes); + mapGridnodeBlocks.clear(); + mapGridnodePayeeVotes.clear(); } - bool AddWinningMasternode(CMasternodePaymentWinner& winner); + bool AddWinningGridnode(CGridnodePaymentWinner& winner); bool ProcessBlock(int nBlockHeight); void Sync(CNode* node, int nCountNeeded); void CleanPaymentList(); - int LastPayment(CMasternode& mn); + int LastPayment(CGridnode& gn); bool GetBlockPayee(int nBlockHeight, CScript& payee); bool IsTransactionValid(int blockVersion, const CTransaction& txNew, int nBlockHeight); - bool IsScheduled(CMasternode& mn, int nNotBlockHeight); + bool IsScheduled(CGridnode& gn, int nNotBlockHeight); - bool CanVote(COutPoint outMasternode, int nBlockHeight) + bool CanVote(COutPoint outGridnode, int nBlockHeight) { - LOCK(cs_mapMasternodePayeeVotes); + LOCK(cs_mapGridnodePayeeVotes); - if (mapMasternodesLastVote.count(outMasternode.hash + outMasternode.n)) { - if (mapMasternodesLastVote[outMasternode.hash + outMasternode.n] == nBlockHeight) { + if (mapGridnodesLastVote.count(outGridnode.hash + outGridnode.n)) { + if (mapGridnodesLastVote[outGridnode.hash + outGridnode.n] == nBlockHeight) { return false; } } - //record this masternode voted - mapMasternodesLastVote[outMasternode.hash + outMasternode.n] = nBlockHeight; + //record this gridnode voted + mapGridnodesLastVote[outGridnode.hash + outGridnode.n] = nBlockHeight; return true; } - int GetMinMasternodePaymentsProto(); - void ProcessMessageMasternodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); + int GetMinGridnodePaymentsProto(); + void ProcessMessageGridnodePayments(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); std::string GetRequiredPaymentsString(int nBlockHeight); void FillBlockPayee(CMutableTransaction& txNew, int64_t nFees, bool fProofOfStake, bool fZUNIGRIDStake); std::string ToString() const; @@ -294,8 +294,8 @@ class CMasternodePayments template inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { - READWRITE(mapMasternodePayeeVotes); - READWRITE(mapMasternodeBlocks); + READWRITE(mapGridnodePayeeVotes); + READWRITE(mapGridnodeBlocks); } }; diff --git a/daemon/gridnode-sync.cpp b/daemon/gridnode-sync.cpp new file mode 100644 index 000000000000..99242dc63200 --- /dev/null +++ b/daemon/gridnode-sync.cpp @@ -0,0 +1,409 @@ +// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2015-2017 The PIVX developers +// Copyright (c) 2018-2019 The UNIGRID organization +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +// clang-format off +#include "main.h" +#include "activegridnode.h" +#include "gridnode-sync.h" +#include "gridnode-payments.h" +#include "gridnode-budget.h" +#include "gridnode.h" +#include "gridnodeman.h" +#include "spork.h" +#include "util.h" +#include "addrman.h" +// clang-format on + +class CGridnodeSync; +CGridnodeSync GridnodeSync; + +CGridnodeSync::CGridnodeSync() +{ + Reset(); +} + +bool CGridnodeSync::IsSynced() +{ + if(Params().NetworkID() == CBaseChainParams::TESTNET) { + return true; + } + + return RequestedGridnodeAssets == GRIDNODE_SYNC_FINISHED; +} + +bool CGridnodeSync::IsBlockchainSynced() +{ + static bool fBlockchainSynced = false; + static int64_t lastProcess = GetTime(); + + // if the last call to this function was more than 60 minutes ago (client was in sleep mode) reset the sync process + if (GetTime() - lastProcess > 60 * 60) { + Reset(); + fBlockchainSynced = false; + } + lastProcess = GetTime(); + + if (fBlockchainSynced) return true; + + if (fImporting || fReindex) return false; + + TRY_LOCK(cs_main, lockMain); + if (!lockMain) return false; + + CBlockIndex* pindex = chainActive.Tip(); + if (pindex == NULL) return false; + + + if (pindex->nTime + 3 * 60 * 60 < GetTime()) + return false; + + fBlockchainSynced = true; + + return true; +} + +void CGridnodeSync::Reset() +{ + lastGridnodeList = 0; + lastGridnodeWinner = 0; + lastBudgetItem = 0; + mapSeenSyncMNB.clear(); + mapSeenSyncMNW.clear(); + mapSeenSyncBudget.clear(); + lastFailure = 0; + nCountFailures = 0; + sumGridnodeList = 0; + sumGridnodeWinner = 0; + sumBudgetItemProp = 0; + sumBudgetItemFin = 0; + countGridnodeList = 0; + countGridnodeWinner = 0; + countBudgetItemProp = 0; + countBudgetItemFin = 0; + RequestedGridnodeAssets = GRIDNODE_SYNC_INITIAL; + RequestedGridnodeAttempt = 0; + nAssetSyncStarted = GetTime(); +} + +void CGridnodeSync::AddedGridnodeList(uint256 hash) +{ + if (gnodeman.mapSeenGridnodeBroadcast.count(hash)) { + if (mapSeenSyncMNB[hash] < GRIDNODE_SYNC_THRESHOLD) { + lastGridnodeList = GetTime(); + mapSeenSyncMNB[hash]++; + } + } else { + lastGridnodeList = GetTime(); + mapSeenSyncMNB.insert(make_pair(hash, 1)); + } +} + +void CGridnodeSync::AddedGridnodeWinner(uint256 hash) +{ + if (GridnodePayments.mapGridnodePayeeVotes.count(hash)) { + if (mapSeenSyncMNW[hash] < GRIDNODE_SYNC_THRESHOLD) { + lastGridnodeWinner = GetTime(); + mapSeenSyncMNW[hash]++; + } + } else { + lastGridnodeWinner = GetTime(); + mapSeenSyncMNW.insert(make_pair(hash, 1)); + } +} + +void CGridnodeSync::AddedBudgetItem(uint256 hash) +{ + if (budget.mapSeenGridnodeBudgetProposals.count(hash) || budget.mapSeenGridnodeBudgetVotes.count(hash) || + budget.mapSeenFinalizedBudgets.count(hash) || budget.mapSeenFinalizedBudgetVotes.count(hash)) { + if (mapSeenSyncBudget[hash] < GRIDNODE_SYNC_THRESHOLD) { + lastBudgetItem = GetTime(); + mapSeenSyncBudget[hash]++; + } + } else { + lastBudgetItem = GetTime(); + mapSeenSyncBudget.insert(make_pair(hash, 1)); + } +} + +bool CGridnodeSync::IsBudgetPropEmpty() +{ + return sumBudgetItemProp == 0 && countBudgetItemProp > 0; +} + +bool CGridnodeSync::IsBudgetFinEmpty() +{ + return sumBudgetItemFin == 0 && countBudgetItemFin > 0; +} + +void CGridnodeSync::GetNextAsset() +{ + switch (RequestedGridnodeAssets) { + case (GRIDNODE_SYNC_INITIAL): + case (GRIDNODE_SYNC_FAILED): // should never be used here actually, use Reset() instead + ClearFulfilledRequest(); + RequestedGridnodeAssets = GRIDNODE_SYNC_SPORKS; + break; + case (GRIDNODE_SYNC_SPORKS): + RequestedGridnodeAssets = GRIDNODE_SYNC_LIST; + break; + case (GRIDNODE_SYNC_LIST): + RequestedGridnodeAssets = GRIDNODE_SYNC_MNW; + break; + case (GRIDNODE_SYNC_MNW): + RequestedGridnodeAssets = GRIDNODE_SYNC_BUDGET; + break; + case (GRIDNODE_SYNC_BUDGET): + LogPrintf("CGridnodeSync::GetNextAsset - Sync has finished\n"); + RequestedGridnodeAssets = GRIDNODE_SYNC_FINISHED; + break; + } + RequestedGridnodeAttempt = 0; + nAssetSyncStarted = GetTime(); +} + +std::string CGridnodeSync::GetSyncStatus() +{ + switch (GridnodeSync.RequestedGridnodeAssets) { + case GRIDNODE_SYNC_INITIAL: + return _("Synchronization pending..."); + case GRIDNODE_SYNC_SPORKS: + return _("Synchronizing sporks..."); + case GRIDNODE_SYNC_LIST: + return _("Synchronizing Gridnodes..."); + case GRIDNODE_SYNC_MNW: + return _("Synchronizing gridnode winners..."); + case GRIDNODE_SYNC_BUDGET: + return _("Synchronizing budgets..."); + case GRIDNODE_SYNC_FAILED: + return _("Synchronization failed"); + case GRIDNODE_SYNC_FINISHED: + return _("Synchronization finished"); + } + return ""; +} + +void CGridnodeSync::ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) +{ + if (strCommand == "ssc") { //Sync status count + int nItemID; + int nCount; + vRecv >> nItemID >> nCount; + + if (RequestedGridnodeAssets >= GRIDNODE_SYNC_FINISHED) return; + + //this means we will receive no further communication + switch (nItemID) { + case (GRIDNODE_SYNC_LIST): + if (nItemID != RequestedGridnodeAssets) return; + sumGridnodeList += nCount; + countGridnodeList++; + break; + case (GRIDNODE_SYNC_MNW): + if (nItemID != RequestedGridnodeAssets) return; + sumGridnodeWinner += nCount; + countGridnodeWinner++; + break; + case (GRIDNODE_SYNC_BUDGET_PROP): + if (RequestedGridnodeAssets != GRIDNODE_SYNC_BUDGET) return; + sumBudgetItemProp += nCount; + countBudgetItemProp++; + break; + case (GRIDNODE_SYNC_BUDGET_FIN): + if (RequestedGridnodeAssets != GRIDNODE_SYNC_BUDGET) return; + sumBudgetItemFin += nCount; + countBudgetItemFin++; + break; + } + + LogPrint("gridnode", "CGridnodeSync:ProcessMessage - ssc - got inventory count %d %d\n", nItemID, nCount); + } +} + +void CGridnodeSync::ClearFulfilledRequest() +{ + TRY_LOCK(cs_vNodes, lockRecv); + if (!lockRecv) return; + + BOOST_FOREACH (CNode* pnode, vNodes) { + pnode->ClearFulfilledRequest("getspork"); + pnode->ClearFulfilledRequest("gnsync"); + pnode->ClearFulfilledRequest("gnwsync"); + pnode->ClearFulfilledRequest("busync"); + } +} + +void CGridnodeSync::Process() +{ + static int tick = 0; + + if (tick++ % GRIDNODE_SYNC_TIMEOUT != 0) return; + + if (IsSynced()) { + /* + Resync if we lose all Gridnodes from sleep/wake or failure to sync originally + */ + if (gnodeman.CountEnabled() == 0) { + Reset(); + } else + return; + } + + //try syncing again + if (RequestedGridnodeAssets == GRIDNODE_SYNC_FAILED && lastFailure + (1 * 60) < GetTime()) { + Reset(); + } else if (RequestedGridnodeAssets == GRIDNODE_SYNC_FAILED) { + return; + } + + LogPrint("gridnode", "CGridnodeSync::Process() - tick %d RequestedGridnodeAssets %d\n", tick, RequestedGridnodeAssets); + + if (RequestedGridnodeAssets == GRIDNODE_SYNC_INITIAL) GetNextAsset(); + + // sporks synced but blockchain is not, wait until we're almost at a recent block to continue + if (Params().NetworkID() != CBaseChainParams::REGTEST && + !IsBlockchainSynced() && RequestedGridnodeAssets > GRIDNODE_SYNC_SPORKS) return; + + TRY_LOCK(cs_vNodes, lockRecv); + if (!lockRecv) return; + + BOOST_FOREACH (CNode* pnode, vNodes) { + if (Params().NetworkID() == CBaseChainParams::REGTEST) { + if (RequestedGridnodeAttempt <= 2) { + pnode->PushMessage("getsporks"); //get current network sporks + } else if (RequestedGridnodeAttempt < 4) { + gnodeman.DsegUpdate(pnode); + } else if (RequestedGridnodeAttempt < 6) { + int nMnCount = gnodeman.CountEnabled(); + pnode->PushMessage("gnget", nMnCount); //sync payees + uint256 n = 0; + pnode->PushMessage("gnvs", n); //sync gridnode votes + } else { + RequestedGridnodeAssets = GRIDNODE_SYNC_FINISHED; + } + RequestedGridnodeAttempt++; + return; + } + + //set to synced + if (RequestedGridnodeAssets == GRIDNODE_SYNC_SPORKS) { + if (pnode->HasFulfilledRequest("getspork")) continue; + pnode->FulfilledRequest("getspork"); + + pnode->PushMessage("getsporks"); //get current network sporks + if (RequestedGridnodeAttempt >= 2) GetNextAsset(); + RequestedGridnodeAttempt++; + + return; + } + + if (pnode->nVersion >= GridnodePayments.GetMinGridnodePaymentsProto()) { + if (RequestedGridnodeAssets == GRIDNODE_SYNC_LIST) { + LogPrint("gridnode", "CGridnodeSync::Process() - lastGridnodeList %lld (GetTime() - GRIDNODE_SYNC_TIMEOUT) %lld\n", lastGridnodeList, GetTime() - GRIDNODE_SYNC_TIMEOUT); + if (lastGridnodeList > 0 && lastGridnodeList < GetTime() - GRIDNODE_SYNC_TIMEOUT * 2 && RequestedGridnodeAttempt >= GRIDNODE_SYNC_THRESHOLD) { //hasn't received a new item in the last five seconds, so we'll move to the + GetNextAsset(); + return; + } + + if (pnode->HasFulfilledRequest("gnsync")) continue; + pnode->FulfilledRequest("gnsync"); + + // timeout + if (lastGridnodeList == 0 && + (RequestedGridnodeAttempt >= GRIDNODE_SYNC_THRESHOLD * 3 || GetTime() - nAssetSyncStarted > GRIDNODE_SYNC_TIMEOUT * 5)) { + if (IsSporkActive(SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT)) { + LogPrintf("CGridnodeSync::Process - ERROR - Sync has failed, will retry later\n"); + RequestedGridnodeAssets = GRIDNODE_SYNC_FAILED; + RequestedGridnodeAttempt = 0; + lastFailure = GetTime(); + nCountFailures++; + } else { + GetNextAsset(); + } + return; + } + + if (RequestedGridnodeAttempt >= GRIDNODE_SYNC_THRESHOLD * 3) return; + + gnodeman.DsegUpdate(pnode); + RequestedGridnodeAttempt++; + return; + } + + if (RequestedGridnodeAssets == GRIDNODE_SYNC_MNW) { + if (lastGridnodeWinner > 0 && lastGridnodeWinner < GetTime() - GRIDNODE_SYNC_TIMEOUT * 2 && RequestedGridnodeAttempt >= GRIDNODE_SYNC_THRESHOLD) { //hasn't received a new item in the last five seconds, so we'll move to the + GetNextAsset(); + return; + } + + if (pnode->HasFulfilledRequest("gnwsync")) continue; + pnode->FulfilledRequest("gnwsync"); + + // timeout + if (lastGridnodeWinner == 0 && + (RequestedGridnodeAttempt >= GRIDNODE_SYNC_THRESHOLD * 3 || GetTime() - nAssetSyncStarted > GRIDNODE_SYNC_TIMEOUT * 5)) { + if (IsSporkActive(SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT)) { + LogPrintf("CGridnodeSync::Process - ERROR - Sync has failed, will retry later\n"); + RequestedGridnodeAssets = GRIDNODE_SYNC_FAILED; + RequestedGridnodeAttempt = 0; + lastFailure = GetTime(); + nCountFailures++; + } else { + GetNextAsset(); + } + return; + } + + if (RequestedGridnodeAttempt >= GRIDNODE_SYNC_THRESHOLD * 3) return; + + CBlockIndex* pindexPrev = chainActive.Tip(); + if (pindexPrev == NULL) return; + + int nMnCount = gnodeman.CountEnabled(); + pnode->PushMessage("gnget", nMnCount); //sync payees + RequestedGridnodeAttempt++; + + return; + } + } + + if (pnode->nVersion >= ActiveProtocol()) { + if (RequestedGridnodeAssets == GRIDNODE_SYNC_BUDGET) { + + // We'll start rejecting votes if we accidentally get set as synced too soon + if (lastBudgetItem > 0 && lastBudgetItem < GetTime() - GRIDNODE_SYNC_TIMEOUT * 2 && RequestedGridnodeAttempt >= GRIDNODE_SYNC_THRESHOLD) { + + // Hasn't received a new item in the last five seconds, so we'll move to the + GetNextAsset(); + + // Try to activate our gridnode if possible + activeGridnode.ManageStatus(); + + return; + } + + // timeout + if (lastBudgetItem == 0 && + (RequestedGridnodeAttempt >= GRIDNODE_SYNC_THRESHOLD * 3 || GetTime() - nAssetSyncStarted > GRIDNODE_SYNC_TIMEOUT * 5)) { + // maybe there is no budgets at all, so just finish syncing + GetNextAsset(); + activeGridnode.ManageStatus(); + return; + } + + if (pnode->HasFulfilledRequest("busync")) continue; + pnode->FulfilledRequest("busync"); + + if (RequestedGridnodeAttempt >= GRIDNODE_SYNC_THRESHOLD * 3) return; + + uint256 n = 0; + pnode->PushMessage("gnvs", n); //sync gridnode votes + RequestedGridnodeAttempt++; + + return; + } + } + } +} diff --git a/daemon/masternode-sync.h b/daemon/gridnode-sync.h similarity index 51% rename from daemon/masternode-sync.h rename to daemon/gridnode-sync.h index ff67de78f47b..9edf61fe4c77 100644 --- a/daemon/masternode-sync.h +++ b/daemon/gridnode-sync.h @@ -4,64 +4,64 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef MASTERNODE_SYNC_H -#define MASTERNODE_SYNC_H +#ifndef GRIDNODE_SYNC_H +#define GRIDNODE_SYNC_H -#define MASTERNODE_SYNC_INITIAL 0 -#define MASTERNODE_SYNC_SPORKS 1 -#define MASTERNODE_SYNC_LIST 2 -#define MASTERNODE_SYNC_MNW 3 -#define MASTERNODE_SYNC_BUDGET 4 -#define MASTERNODE_SYNC_BUDGET_PROP 10 -#define MASTERNODE_SYNC_BUDGET_FIN 11 -#define MASTERNODE_SYNC_FAILED 998 -#define MASTERNODE_SYNC_FINISHED 999 +#define GRIDNODE_SYNC_INITIAL 0 +#define GRIDNODE_SYNC_SPORKS 1 +#define GRIDNODE_SYNC_LIST 2 +#define GRIDNODE_SYNC_MNW 3 +#define GRIDNODE_SYNC_BUDGET 4 +#define GRIDNODE_SYNC_BUDGET_PROP 10 +#define GRIDNODE_SYNC_BUDGET_FIN 11 +#define GRIDNODE_SYNC_FAILED 998 +#define GRIDNODE_SYNC_FINISHED 999 -#define MASTERNODE_SYNC_TIMEOUT 5 -#define MASTERNODE_SYNC_THRESHOLD 2 +#define GRIDNODE_SYNC_TIMEOUT 5 +#define GRIDNODE_SYNC_THRESHOLD 2 -class CMasternodeSync; -extern CMasternodeSync masternodeSync; +class CGridnodeSync; +extern CGridnodeSync GridnodeSync; // -// CMasternodeSync : Sync masternode assets in stages +// CGridnodeSync : Sync gridnode assets in stages // -class CMasternodeSync +class CGridnodeSync { public: std::map mapSeenSyncMNB; std::map mapSeenSyncMNW; std::map mapSeenSyncBudget; - int64_t lastMasternodeList; - int64_t lastMasternodeWinner; + int64_t lastGridnodeList; + int64_t lastGridnodeWinner; int64_t lastBudgetItem; int64_t lastFailure; int nCountFailures; // sum of all counts - int sumMasternodeList; - int sumMasternodeWinner; + int sumGridnodeList; + int sumGridnodeWinner; int sumBudgetItemProp; int sumBudgetItemFin; // peers that reported counts - int countMasternodeList; - int countMasternodeWinner; + int countGridnodeList; + int countGridnodeWinner; int countBudgetItemProp; int countBudgetItemFin; // Count peers we've requested the list from - int RequestedMasternodeAssets; - int RequestedMasternodeAttempt; + int RequestedGridnodeAssets; + int RequestedGridnodeAttempt; - // Time when current masternode asset sync started + // Time when current gridnode asset sync started int64_t nAssetSyncStarted; - CMasternodeSync(); + CGridnodeSync(); - void AddedMasternodeList(uint256 hash); - void AddedMasternodeWinner(uint256 hash); + void AddedGridnodeList(uint256 hash); + void AddedGridnodeWinner(uint256 hash); void AddedBudgetItem(uint256 hash); void GetNextAsset(); std::string GetSyncStatus(); @@ -73,7 +73,7 @@ class CMasternodeSync void Process(); bool IsSynced(); bool IsBlockchainSynced(); - bool IsMasternodeListSynced() { return RequestedMasternodeAssets > MASTERNODE_SYNC_LIST; } + bool IsGridnodeListSynced() { return RequestedGridnodeAssets > GRIDNODE_SYNC_LIST; } void ClearFulfilledRequest(); }; diff --git a/daemon/gridnode.cpp b/daemon/gridnode.cpp new file mode 100644 index 000000000000..2b1b5ea46f6c --- /dev/null +++ b/daemon/gridnode.cpp @@ -0,0 +1,849 @@ +// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2015-2018 The PIVX developers +// Copyright (c) 2018-2019 The UNIGRID organization +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "gridnode.h" +#include "addrman.h" +#include "gridnodeman.h" +#include "obfuscation.h" +#include "sync.h" +#include "util.h" +#include + +// keep track of the scanning errors I've seen +map mapSeenGridnodeScanningErrors; +// cache block hashes as we calculate them +std::map mapCacheBlockHashes; + +//Get the last hash that matches the modulus given. Processed in reverse order +bool GetBlockHash(uint256& hash, int nBlockHeight) +{ + if (chainActive.Tip() == NULL) return false; + + if (nBlockHeight == 0) + nBlockHeight = chainActive.Tip()->nHeight; + + if (mapCacheBlockHashes.count(nBlockHeight)) { + hash = mapCacheBlockHashes[nBlockHeight]; + return true; + } + + const CBlockIndex* BlockLastSolved = chainActive.Tip(); + const CBlockIndex* BlockReading = chainActive.Tip(); + + if (BlockLastSolved == NULL || BlockLastSolved->nHeight == 0 || chainActive.Tip()->nHeight + 1 < nBlockHeight) return false; + + int nBlocksAgo = 0; + if (nBlockHeight > 0) nBlocksAgo = (chainActive.Tip()->nHeight + 1) - nBlockHeight; + assert(nBlocksAgo >= 0); + + int n = 0; + for (unsigned int i = 1; BlockReading && BlockReading->nHeight > 0; i++) { + if (n >= nBlocksAgo) { + hash = BlockReading->GetBlockHash(); + mapCacheBlockHashes[nBlockHeight] = hash; + return true; + } + n++; + + if (BlockReading->pprev == NULL) { + assert(BlockReading); + break; + } + BlockReading = BlockReading->pprev; + } + + return false; +} + +CGridnode::CGridnode() +{ + LOCK(cs); + vin = CTxIn(); + addr = CService(); + pubKeyCollateralAddress = CPubKey(); + pubKeyGridnode = CPubKey(); + sig = std::vector(); + activeState = GRIDNODE_ENABLED; + sigTime = GetAdjustedTime(); + lastPing = CGridnodePing(); + cacheInputAge = 0; + cacheInputAgeBlock = 0; + unitTest = false; + allowFreeTx = true; + nActiveState = GRIDNODE_ENABLED, + protocolVersion = PROTOCOL_VERSION; + nLastDsq = 0; + nScanningErrorCount = 0; + nLastScanningErrorBlockHeight = 0; + lastTimeChecked = 0; + nLastDsee = 0; // temporary, do not save. Remove after migration to v12 + nLastDseep = 0; // temporary, do not save. Remove after migration to v12 +} + +CGridnode::CGridnode(const CGridnode& other) +{ + LOCK(cs); + vin = other.vin; + addr = other.addr; + pubKeyCollateralAddress = other.pubKeyCollateralAddress; + pubKeyGridnode = other.pubKeyGridnode; + sig = other.sig; + activeState = other.activeState; + sigTime = other.sigTime; + lastPing = other.lastPing; + cacheInputAge = other.cacheInputAge; + cacheInputAgeBlock = other.cacheInputAgeBlock; + unitTest = other.unitTest; + allowFreeTx = other.allowFreeTx; + nActiveState = GRIDNODE_ENABLED, + protocolVersion = other.protocolVersion; + nLastDsq = other.nLastDsq; + nScanningErrorCount = other.nScanningErrorCount; + nLastScanningErrorBlockHeight = other.nLastScanningErrorBlockHeight; + lastTimeChecked = 0; + nLastDsee = other.nLastDsee; // temporary, do not save. Remove after migration to v12 + nLastDseep = other.nLastDseep; // temporary, do not save. Remove after migration to v12 +} + +CGridnode::CGridnode(const CGridnodeBroadcast& gnb) +{ + LOCK(cs); + vin = gnb.vin; + addr = gnb.addr; + pubKeyCollateralAddress = gnb.pubKeyCollateralAddress; + pubKeyGridnode = gnb.pubKeyGridnode; + sig = gnb.sig; + activeState = GRIDNODE_ENABLED; + sigTime = gnb.sigTime; + lastPing = gnb.lastPing; + cacheInputAge = 0; + cacheInputAgeBlock = 0; + unitTest = false; + allowFreeTx = true; + nActiveState = GRIDNODE_ENABLED, + protocolVersion = gnb.protocolVersion; + nLastDsq = gnb.nLastDsq; + nScanningErrorCount = 0; + nLastScanningErrorBlockHeight = 0; + lastTimeChecked = 0; + nLastDsee = 0; // temporary, do not save. Remove after migration to v12 + nLastDseep = 0; // temporary, do not save. Remove after migration to v12 +} + +// +// When a new gridnode broadcast is sent, update our information +// +bool CGridnode::UpdateFromNewBroadcast(CGridnodeBroadcast& gnb) +{ + if (gnb.sigTime > sigTime) { + pubKeyGridnode = gnb.pubKeyGridnode; + pubKeyCollateralAddress = gnb.pubKeyCollateralAddress; + sigTime = gnb.sigTime; + sig = gnb.sig; + protocolVersion = gnb.protocolVersion; + addr = gnb.addr; + lastTimeChecked = 0; + int nDoS = 0; + if (gnb.lastPing == CGridnodePing() || (gnb.lastPing != CGridnodePing() && gnb.lastPing.CheckAndUpdate(nDoS, false))) { + lastPing = gnb.lastPing; + gnodeman.mapSeenGridnodePing.insert(make_pair(lastPing.GetHash(), lastPing)); + } + return true; + } + return false; +} + +// +// Deterministically calculate a given "score" for a Gridnode depending on how close it's hash is to +// the proof of work for that block. The further away they are the better, the furthest will win the election +// and get paid this block +// +uint256 CGridnode::CalculateScore(int mod, int64_t nBlockHeight) +{ + if (chainActive.Tip() == NULL) return 0; + + uint256 hash = 0; + uint256 aux = vin.prevout.hash + vin.prevout.n; + + if (!GetBlockHash(hash, nBlockHeight)) { + LogPrint("gridnode","CalculateScore ERROR - nHeight %d - Returned 0\n", nBlockHeight); + return 0; + } + + CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); + ss << hash; + uint256 hash2 = ss.GetHash(); + + CHashWriter ss2(SER_GETHASH, PROTOCOL_VERSION); + ss2 << hash; + ss2 << aux; + uint256 hash3 = ss2.GetHash(); + + uint256 r = (hash3 > hash2 ? hash3 - hash2 : hash2 - hash3); + + return r; +} + +void CGridnode::Check(bool forceCheck) +{ + if (ShutdownRequested()) return; + + if (!forceCheck && (GetTime() - lastTimeChecked < GRIDNODE_CHECK_SECONDS)) return; + lastTimeChecked = GetTime(); + + + //once spent, stop doing the checks + if (activeState == GRIDNODE_VIN_SPENT) return; + + + if (!IsPingedWithin(GRIDNODE_REMOVAL_SECONDS)) { + activeState = GRIDNODE_REMOVE; + return; + } + + if (!IsPingedWithin(GRIDNODE_EXPIRATION_SECONDS)) { + activeState = GRIDNODE_EXPIRED; + return; + } + + // if(lastPing.sigTime - sigTime < GRIDNODE_MIN_MNP_SECONDS){ + // activeState = GRIDNODE_PRE_ENABLED; + // return; + // } + + if (!unitTest) { + CValidationState state; + CMutableTransaction tx = CMutableTransaction(); + CTxOut vout = CTxOut(2999.99 * COIN, obfuScationPool.collateralPubKey); + tx.vin.push_back(vin); + tx.vout.push_back(vout); + + { + TRY_LOCK(cs_main, lockMain); + if (!lockMain) return; + + if (!AcceptableInputs(mempool, state, CTransaction(tx), false, NULL)) { + activeState = GRIDNODE_VIN_SPENT; + return; + } + } + } + + activeState = GRIDNODE_ENABLED; // OK +} + +int64_t CGridnode::SecondsSincePayment() +{ + CScript pubkeyScript; + pubkeyScript = GetScriptForDestination(pubKeyCollateralAddress.GetID()); + + int64_t sec = (GetAdjustedTime() - GetLastPaid()); + int64_t month = 60 * 60 * 24 * 30; + if (sec < month) return sec; //if it's less than 30 days, give seconds + + CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); + ss << vin; + ss << sigTime; + uint256 hash = ss.GetHash(); + + // return some deterministic value for unknown/unpaid but force it to be more than 30 days old + return month + hash.GetCompact(false); +} + +int64_t CGridnode::GetLastPaid() +{ + CBlockIndex* pindexPrev = chainActive.Tip(); + + if (pindexPrev == NULL) { + return false; + } + + CScript gnpayee; + gnpayee = GetScriptForDestination(pubKeyCollateralAddress.GetID()); + CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); + ss << vin; + ss << sigTime; + uint256 hash = ss.GetHash(); + + // Use a deterministic offset to break a tie -- 2.5 minutes + int64_t nOffset = hash.GetCompact(false) % 150; + const CBlockIndex* BlockReading = chainActive.Tip(); + + if (BlockReading == NULL) { + return false; + } + + int nMnCount = gnodeman.CountEnabled() * 1.25; + int n = 0; + + for (unsigned int i = 1; BlockReading && BlockReading->nHeight > 0; i++) { + if (n >= nMnCount) { + return 0; + } + + n++; + + if (GridnodePayments.mapGridnodeBlocks.count(BlockReading->nHeight)) { + /* + Search for this payee, with at least 2 votes. This will aid in consensus allowing the network + to converge on the same payees quickly, then keep the same schedule. + */ + if (GridnodePayments.mapGridnodeBlocks[BlockReading->nHeight].HasPayeeWithVotes(gnpayee, 2)) { + return BlockReading->nTime + nOffset; + } + } + + if (BlockReading->pprev == NULL) { + assert(BlockReading); + break; + } + + BlockReading = BlockReading->pprev; + } + + return 0; +} + +std::string CGridnode::GetStatus() +{ + switch (nActiveState) { + case CGridnode::GRIDNODE_PRE_ENABLED: + return "PRE_ENABLED"; + case CGridnode::GRIDNODE_ENABLED: + return "ENABLED"; + case CGridnode::GRIDNODE_EXPIRED: + return "EXPIRED"; + case CGridnode::GRIDNODE_OUTPOINT_SPENT: + return "OUTPOINT_SPENT"; + case CGridnode::GRIDNODE_REMOVE: + return "REMOVE"; + case CGridnode::GRIDNODE_WATCHDOG_EXPIRED: + return "WATCHDOG_EXPIRED"; + case CGridnode::GRIDNODE_POSE_BAN: + return "POSE_BAN"; + default: + return "UNKNOWN"; + } +} + +bool CGridnode::IsValidNetAddr() +{ + // TODO: regtest is fine with any addresses for now, + // should probably be a bit smarter if one day we start to implement tests for this + return Params().NetworkID() == CBaseChainParams::REGTEST || + (IsReachable(addr) && addr.IsRoutable()); +} + +CGridnodeBroadcast::CGridnodeBroadcast() +{ + vin = CTxIn(); + addr = CService(); + pubKeyCollateralAddress = CPubKey(); + pubKeyGridnode1 = CPubKey(); + sig = std::vector(); + activeState = GRIDNODE_ENABLED; + sigTime = GetAdjustedTime(); + lastPing = CGridnodePing(); + cacheInputAge = 0; + cacheInputAgeBlock = 0; + unitTest = false; + allowFreeTx = true; + protocolVersion = PROTOCOL_VERSION; + nLastDsq = 0; + nScanningErrorCount = 0; + nLastScanningErrorBlockHeight = 0; +} + +CGridnodeBroadcast::CGridnodeBroadcast(CService newAddr, CTxIn newVin, CPubKey pubKeyCollateralAddressNew, CPubKey pubKeyGridnodeNew, int protocolVersionIn) +{ + vin = newVin; + addr = newAddr; + pubKeyCollateralAddress = pubKeyCollateralAddressNew; + pubKeyGridnode = pubKeyGridnodeNew; + sig = std::vector(); + activeState = GRIDNODE_ENABLED; + sigTime = GetAdjustedTime(); + lastPing = CGridnodePing(); + cacheInputAge = 0; + cacheInputAgeBlock = 0; + unitTest = false; + allowFreeTx = true; + protocolVersion = protocolVersionIn; + nLastDsq = 0; + nScanningErrorCount = 0; + nLastScanningErrorBlockHeight = 0; +} + +CGridnodeBroadcast::CGridnodeBroadcast(const CGridnode& gn) +{ + vin = gn.vin; + addr = gn.addr; + pubKeyCollateralAddress = gn.pubKeyCollateralAddress; + pubKeyGridnode = gn.pubKeyGridnode; + sig = gn.sig; + activeState = gn.activeState; + sigTime = gn.sigTime; + lastPing = gn.lastPing; + cacheInputAge = gn.cacheInputAge; + cacheInputAgeBlock = gn.cacheInputAgeBlock; + unitTest = gn.unitTest; + allowFreeTx = gn.allowFreeTx; + protocolVersion = gn.protocolVersion; + nLastDsq = gn.nLastDsq; + nScanningErrorCount = gn.nScanningErrorCount; + nLastScanningErrorBlockHeight = gn.nLastScanningErrorBlockHeight; +} + +bool CGridnodeBroadcast::Create(std::string strService, std::string strKeyGridnode, std::string strTxHash, std::string strOutputIndex, std::string& strErrorRet, CGridnodeBroadcast& gnbRet, bool fOffline) +{ + CTxIn txin; + CPubKey pubKeyCollateralAddressNew; + CKey keyCollateralAddressNew; + CPubKey pubKeyGridnodeNew; + CKey keyGridnodeNew; + + //need correct blocks to send ping + if (!fOffline && !GridnodeSync.IsBlockchainSynced()) { + strErrorRet = "Sync in progress. Must wait until sync is complete to start Gridnode"; + LogPrint("gridnode","CGridnodeBroadcast::Create -- %s\n", strErrorRet); + return false; + } + + if (!obfuScationSigner.GetKeysFromSecret(strKeyGridnode, keyGridnodeNew, pubKeyGridnodeNew)) { + strErrorRet = strprintf("Invalid gridnode key %s", strKeyGridnode); + LogPrint("gridnode","CGridnodeBroadcast::Create -- %s\n", strErrorRet); + return false; + } + + if (!pwalletMain->GetGridnodeVinAndKeys(txin, pubKeyCollateralAddressNew, keyCollateralAddressNew, strTxHash, strOutputIndex)) { + strErrorRet = strprintf("Could not allocate txin %s:%s for gridnode %s", strTxHash, strOutputIndex, strService); + LogPrint("gridnode","CGridnodeBroadcast::Create -- %s\n", strErrorRet); + return false; + } + + // The service needs the correct default port to work properly + if(!CheckDefaultPort(strService, strErrorRet, "CGridnodeBroadcast::Create")) + return false; + + return Create(txin, CService(strService), keyCollateralAddressNew, pubKeyCollateralAddressNew, keyGridnodeNew, pubKeyGridnodeNew, strErrorRet, gnbRet); +} + +bool CGridnodeBroadcast::Create(CTxIn txin, CService service, CKey keyCollateralAddressNew, CPubKey pubKeyCollateralAddressNew, CKey keyGridnodeNew, CPubKey pubKeyGridnodeNew, std::string& strErrorRet, CGridnodeBroadcast& gnbRet) +{ + // wait for reindex and/or import to finish + if (fImporting || fReindex) return false; + + LogPrint("gridnode", "CGridnodeBroadcast::Create -- pubKeyCollateralAddressNew = %s, pubKeyGridnodeNew.GetID() = %s\n", + CBitcoinAddress(pubKeyCollateralAddressNew.GetID()).ToString(), + pubKeyGridnodeNew.GetID().ToString()); + + CGridnodePing gnp(txin); + if (!gnp.Sign(keyGridnodeNew, pubKeyGridnodeNew)) { + strErrorRet = strprintf("Failed to sign ping, gridnode=%s", txin.prevout.hash.ToString()); + LogPrint("gridnode","CGridnodeBroadcast::Create -- %s\n", strErrorRet); + gnbRet = CGridnodeBroadcast(); + return false; + } + + gnbRet = CGridnodeBroadcast(service, txin, pubKeyCollateralAddressNew, pubKeyGridnodeNew, PROTOCOL_VERSION); + + if (!gnbRet.IsValidNetAddr()) { + strErrorRet = strprintf("Invalid IP address %s, gridnode=%s", gnbRet.addr.ToStringIP (), txin.prevout.hash.ToString()); + LogPrint("gridnode","CGridnodeBroadcast::Create -- %s\n", strErrorRet); + gnbRet = CGridnodeBroadcast(); + return false; + } + + gnbRet.lastPing = gnp; + if (!gnbRet.Sign(keyCollateralAddressNew)) { + strErrorRet = strprintf("Failed to sign broadcast, gridnode=%s", txin.prevout.hash.ToString()); + LogPrint("gridnode","CGridnodeBroadcast::Create -- %s\n", strErrorRet); + gnbRet = CGridnodeBroadcast(); + return false; + } + + return true; +} + +bool CGridnodeBroadcast::CheckDefaultPort(std::string strService, std::string& strErrorRet, std::string strContext) +{ + /* + CService service = CService(strService); + int nDefaultPort = Params().GetDefaultPort(); + + if (service.GetPort() != nDefaultPort) { + strErrorRet = strprintf("Invalid port %u for gridnode %s, only %d is supported on %s-net.", + service.GetPort(), strService, nDefaultPort, Params().NetworkIDString()); + LogPrint("gridnode", "%s - %s\n", strContext, strErrorRet); + return false; + } + */ + return true; //TODO: We will require a specific port in the future +} + +bool CGridnodeBroadcast::CheckAndUpdate(int& nDos) +{ + // make sure signature isn't in the future (past is OK) + if (sigTime > GetAdjustedTime() + 60 * 60) { + LogPrint("gridnode","gnb - Signature rejected, too far into the future %s\n", vin.prevout.hash.ToString()); + nDos = 1; + return false; + } + + // incorrect ping or its sigTime + if(lastPing == CGridnodePing() || !lastPing.CheckAndUpdate(nDos, false, true)) + return false; + + if (protocolVersion < GridnodePayments.GetMinGridnodePaymentsProto()) { + LogPrint("gridnode","gnb - ignoring outdated Gridnode %s protocol version %d\n", vin.prevout.hash.ToString(), protocolVersion); + return false; + } + + CScript pubkeyScript; + pubkeyScript = GetScriptForDestination(pubKeyCollateralAddress.GetID()); + + if (pubkeyScript.size() != 25) { + LogPrint("gridnode","gnb - pubkey the wrong size\n"); + nDos = 100; + return false; + } + + CScript pubkeyScript2; + pubkeyScript2 = GetScriptForDestination(pubKeyGridnode.GetID()); + + if (pubkeyScript2.size() != 25) { + LogPrint("gridnode","gnb - pubkey2 the wrong size\n"); + nDos = 100; + return false; + } + + if (!vin.scriptSig.empty()) { + LogPrint("gridnode","gnb - Ignore Not Empty ScriptSig %s\n", vin.prevout.hash.ToString()); + return false; + } + + std::string errorMessage = ""; + if (!obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, GetNewStrMessage(), errorMessage) + && !obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, GetOldStrMessage(), errorMessage)) + { + // don't ban for old Gridnodes, their sigs could be broken because of the bug + nDos = protocolVersion < MIN_PEER_MNANNOUNCE ? 0 : 100; + return error("CGridnodeBroadcast::CheckAndUpdate - Got bad Gridnode address signature : %s", errorMessage); + } + + // if (Params().NetworkID() == CBaseChainParams::MAIN) { + // if (addr.GetPort() != 51992) return false; + // } else if (addr.GetPort() == 51992) + // return false; + + //search existing Gridnode list, this is where we update existing Gridnodes with new gnb broadcasts + CGridnode* pgn = gnodeman.Find(vin); + + // no such gridnode, nothing to update + if (pgn == NULL) return true; + + // this broadcast is older or equal than the one that we already have - it's bad and should never happen + // unless someone is doing something fishy + // (mapSeenGridnodeBroadcast in CGridnodeMan::ProcessMessage should filter legit duplicates) + if(pgn->sigTime >= sigTime) { + return error("CGridnodeBroadcast::CheckAndUpdate - Bad sigTime %d for Gridnode %20s %105s (existing broadcast is at %d)", + sigTime, addr.ToString(), vin.ToString(), pgn->sigTime); + } + + // gridnode is not enabled yet/already, nothing to update + if (!pgn->IsEnabled()) return true; + + // gn.pubkey = pubkey, IsVinAssociatedWithPubkey is validated once below, + // after that they just need to match + if (pgn->pubKeyCollateralAddress == pubKeyCollateralAddress && !pgn->IsBroadcastedWithin(GRIDNODE_MIN_MNB_SECONDS)) { + //take the newest entry + LogPrint("gridnode","gnb - Got updated entry for %s\n", vin.prevout.hash.ToString()); + if (pgn->UpdateFromNewBroadcast((*this))) { + pgn->Check(); + if (pgn->IsEnabled()) Relay(); + } + GridnodeSync.AddedGridnodeList(GetHash()); + } + + return true; +} + +bool CGridnodeBroadcast::CheckInputsAndAdd(int& nDoS) +{ + // we are a gridnode with the same vin (i.e. already activated) and this gnb is ours (matches our Gridnode privkey) + // so nothing to do here for us + if (fGridnode && vin.prevout == activeGridnode.vin.prevout && pubKeyGridnode == activeGridnode.pubKeyGridnode) + return true; + + // incorrect ping or its sigTime + if(lastPing == CGridnodePing() || !lastPing.CheckAndUpdate(nDoS, false, true)) return false; + + // search existing Gridnode list + CGridnode* pgn = gnodeman.Find(vin); + + if (pgn != NULL) { + // nothing to do here if we already know about this gridnode and it's enabled + if (pgn->IsEnabled()) return true; + // if it's not enabled, remove old GM first and continue + else + gnodeman.Remove(pgn->vin); + } + + CValidationState state; + CMutableTransaction tx = CMutableTransaction(); + CTxOut vout = CTxOut(1999.99 * COIN, obfuScationPool.collateralPubKey); + tx.vin.push_back(vin); + tx.vout.push_back(vout); + + { + TRY_LOCK(cs_main, lockMain); + + if (!lockMain) { + // not gnb fault, let it to be checked again later + gnodeman.mapSeenGridnodeBroadcast.erase(GetHash()); + GridnodeSync.mapSeenSyncMNB.erase(GetHash()); + return false; + } + + if (!AcceptableInputs(mempool, state, CTransaction(tx), false, NULL)) { + //set nDos + state.IsInvalid(nDoS); + return false; + } + } + + LogPrint("gridnode", "gnb - Accepted Gridnode entry\n"); + + if (GetInputAge(vin) < GRIDNODE_MIN_CONFIRMATIONS) { + LogPrint("gridnode","gnb - Input must have at least %d confirmations\n", GRIDNODE_MIN_CONFIRMATIONS); + // maybe we miss few blocks, let this gnb to be checked again later + gnodeman.mapSeenGridnodeBroadcast.erase(GetHash()); + GridnodeSync.mapSeenSyncMNB.erase(GetHash()); + return false; + } + + // verify that sig time is legit in past + // should be at least not earlier than block when 1000 UNIGRID tx got GRIDNODE_MIN_CONFIRMATIONS + uint256 hashBlock = 0; + CTransaction tx2; + GetTransaction(vin.prevout.hash, tx2, hashBlock, true); + BlockMap::iterator mi = mapBlockIndex.find(hashBlock); + + if (mi != mapBlockIndex.end() && (*mi).second) { + CBlockIndex* pMNIndex = (*mi).second; // block for 1000 UNIGRID tx -> 1 confirmation + CBlockIndex* pConfIndex = chainActive[pMNIndex->nHeight + GRIDNODE_MIN_CONFIRMATIONS - 1]; // block where tx got GRIDNODE_MIN_CONFIRMATIONS + if (pConfIndex->GetBlockTime() > sigTime) { + LogPrint("gridnode","gnb - Bad sigTime %d for Gridnode %s (%i conf block is at %d)\n", + sigTime, vin.prevout.hash.ToString(), GRIDNODE_MIN_CONFIRMATIONS, pConfIndex->GetBlockTime()); + return false; + } + } + + LogPrint("gridnode","gnb - Got NEW Gridnode entry - %s - %lli \n", vin.prevout.hash.ToString(), sigTime); + CGridnode gn(*this); + gnodeman.Add(gn); + + // if it matches our Gridnode privkey, then we've been remotely activated + if (pubKeyGridnode == activeGridnode.pubKeyGridnode && protocolVersion == PROTOCOL_VERSION) { + activeGridnode.EnableHotColdGridnode(vin, addr); + } + + bool isLocal = addr.IsRFC1918() || addr.IsLocal(); + if (Params().NetworkID() == CBaseChainParams::REGTEST) isLocal = false; + + if (!isLocal) Relay(); + + return true; +} + +void CGridnodeBroadcast::Relay() +{ + CInv inv(MSG_GRIDNODE_ANNOUNCE, GetHash()); + RelayInv(inv); +} + +bool CGridnodeBroadcast::Sign(CKey& keyCollateralAddress) +{ + std::string errorMessage; + sigTime = GetAdjustedTime(); + + std::string strMessage; + if(chainActive.Height() < Params().Zerocoin_Block_V2_Start()) + strMessage = GetOldStrMessage(); + else + strMessage = GetNewStrMessage(); + + if (!obfuScationSigner.SignMessage(strMessage, errorMessage, sig, keyCollateralAddress)) + return error("CGridnodeBroadcast::Sign() - Error: %s", errorMessage); + + if (!obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, strMessage, errorMessage)) + return error("CGridnodeBroadcast::Sign() - Error: %s", errorMessage); + + return true; +} + + +bool CGridnodeBroadcast::VerifySignature() +{ + std::string errorMessage; + + if(!obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, GetNewStrMessage(), errorMessage) + && !obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, GetOldStrMessage(), errorMessage)) + return error("CGridnodeBroadcast::VerifySignature() - Error: %s", errorMessage); + + return true; +} + +std::string CGridnodeBroadcast::GetOldStrMessage() +{ + std::string strMessage; + + std::string vchPubKey(pubKeyCollateralAddress.begin(), pubKeyCollateralAddress.end()); + std::string vchPubKey2(pubKeyGridnode.begin(), pubKeyGridnode.end()); + strMessage = addr.ToString() + boost::lexical_cast(sigTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(protocolVersion); + + return strMessage; +} + +std:: string CGridnodeBroadcast::GetNewStrMessage() +{ + std::string strMessage; + + strMessage = addr.ToString() + boost::lexical_cast(sigTime) + pubKeyCollateralAddress.GetID().ToString() + pubKeyGridnode.GetID().ToString() + boost::lexical_cast(protocolVersion); + + return strMessage; +} + +CGridnodePing::CGridnodePing() +{ + vin = CTxIn(); + blockHash = uint256(0); + sigTime = 0; + vchSig = std::vector(); +} + +CGridnodePing::CGridnodePing(CTxIn& newVin) +{ + vin = newVin; + blockHash = chainActive[chainActive.Height() - 12]->GetBlockHash(); + sigTime = GetAdjustedTime(); + vchSig = std::vector(); +} + +bool CGridnodePing::Sign(CKey& keyGridnode, CPubKey& pubKeyGridnode) +{ + std::string errorMessage; + std::string strGridnodeSignMessage; + + sigTime = GetAdjustedTime(); + std::string strMessage = vin.ToString() + blockHash.ToString() + boost::lexical_cast(sigTime); + + if (!obfuScationSigner.SignMessage(strMessage, errorMessage, vchSig, keyGridnode)) { + LogPrint("gridnode","CGridnodePing::Sign() - Error: %s\n", errorMessage); + return false; + } + + if (!obfuScationSigner.VerifyMessage(pubKeyGridnode, vchSig, strMessage, errorMessage)) { + LogPrint("gridnode","CGridnodePing::Sign() - Error: %s\n", errorMessage); + return false; + } + + return true; +} + +bool CGridnodePing::VerifySignature(CPubKey& pubKeyGridnode, int &nDos) { + std::string strMessage = vin.ToString() + blockHash.ToString() + boost::lexical_cast(sigTime); + std::string errorMessage = ""; + + if(!obfuScationSigner.VerifyMessage(pubKeyGridnode, vchSig, strMessage, errorMessage)){ + nDos = 33; + return error("CGridnodePing::VerifySignature - Got bad Gridnode ping signature %s Error: %s", vin.ToString(), errorMessage); + } + return true; +} + +bool CGridnodePing::CheckAndUpdate(int& nDos, bool fRequireEnabled, bool fCheckSigTimeOnly) +{ + if (sigTime > GetAdjustedTime() + 60 * 60) { + LogPrint("gridnode","CGridnodePing::CheckAndUpdate - Signature rejected, too far into the future %s\n", vin.prevout.hash.ToString()); + nDos = 1; + return false; + } + + if (sigTime <= GetAdjustedTime() - 60 * 60) { + LogPrint("gridnode","CGridnodePing::CheckAndUpdate - Signature rejected, too far into the past %s - %d %d \n", vin.prevout.hash.ToString(), sigTime, GetAdjustedTime()); + nDos = 1; + return false; + } + + if(fCheckSigTimeOnly) { + CGridnode* pgn = gnodeman.Find(vin); + if(pgn) return VerifySignature(pgn->pubKeyGridnode, nDos); + return true; + } + + LogPrint("gridnode", "CGridnodePing::CheckAndUpdate - New Ping - %s - %s - %lli\n", GetHash().ToString(), blockHash.ToString(), sigTime); + + // see if we have this Gridnode + CGridnode* pgn = gnodeman.Find(vin); + if (pgn != NULL && pgn->protocolVersion >= GridnodePayments.GetMinGridnodePaymentsProto()) { + if (fRequireEnabled && !pgn->IsEnabled()) return false; + + // LogPrint("gridnode","gnping - Found corresponding gn for vin: %s\n", vin.ToString()); + // update only if there is no known ping for this gridnode or + // last ping was more then GRIDNODE_MIN_MNP_SECONDS-60 ago comparing to this one + if (!pgn->IsPingedWithin(GRIDNODE_MIN_MNP_SECONDS - 60, sigTime)) { + if (!VerifySignature(pgn->pubKeyGridnode, nDos)) + return false; + + BlockMap::iterator mi = mapBlockIndex.find(blockHash); + if (mi != mapBlockIndex.end() && (*mi).second) { + if ((*mi).second->nHeight < chainActive.Height() - 24) { + LogPrint("gridnode","CGridnodePing::CheckAndUpdate - Gridnode %s block hash %s is too old\n", vin.prevout.hash.ToString(), blockHash.ToString()); + // Do nothing here (no Gridnode update, no gnping relay) + // Let this node to be visible but fail to accept gnping + + return false; + } + } else { + if (fDebug) LogPrint("gridnode","CGridnodePing::CheckAndUpdate - Gridnode %s block hash %s is unknown\n", vin.prevout.hash.ToString(), blockHash.ToString()); + // maybe we stuck so we shouldn't ban this node, just fail to accept it + // TODO: or should we also request this block? + + return false; + } + + pgn->lastPing = *this; + + //gnodeman.mapSeenGridnodeBroadcast.lastPing is probably outdated, so we'll update it + CGridnodeBroadcast gnb(*pgn); + uint256 hash = gnb.GetHash(); + if (gnodeman.mapSeenGridnodeBroadcast.count(hash)) { + gnodeman.mapSeenGridnodeBroadcast[hash].lastPing = *this; + } + + pgn->Check(true); + if (!pgn->IsEnabled()) return false; + + LogPrint("gridnode", "CGridnodePing::CheckAndUpdate - Gridnode ping accepted, vin: %s\n", vin.prevout.hash.ToString()); + + Relay(); + return true; + } + LogPrint("gridnode", "CGridnodePing::CheckAndUpdate - Gridnode ping arrived too early, vin: %s\n", vin.prevout.hash.ToString()); + //nDos = 1; //disable, this is happening frequently and causing banned peers + return false; + } + + LogPrint("gridnode", "CGridnodePing::CheckAndUpdate - Couldn't find compatible Gridnode entry, vin: %s\n", vin.prevout.hash.ToString()); + return false; +} + +void CGridnodePing::Relay() +{ + CInv inv(MSG_GRIDNODE_PING, GetHash()); + RelayInv(inv); +} diff --git a/daemon/masternode.h b/daemon/gridnode.h similarity index 66% rename from daemon/masternode.h rename to daemon/gridnode.h index 53e39680d4d5..d89066e50fea 100644 --- a/daemon/masternode.h +++ b/daemon/gridnode.h @@ -4,8 +4,8 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef MASTERNODE_H -#define MASTERNODE_H +#ifndef GRIDNODE_H +#define GRIDNODE_H #include "base58.h" #include "key.h" @@ -15,39 +15,39 @@ #include "timedata.h" #include "util.h" -#define MASTERNODE_MIN_CONFIRMATIONS 15 -#define MASTERNODE_MIN_MNP_SECONDS (10 * 60) -#define MASTERNODE_MIN_MNB_SECONDS (5 * 60) -#define MASTERNODE_PING_SECONDS (5 * 60) -#define MASTERNODE_EXPIRATION_SECONDS (120 * 60) -#define MASTERNODE_REMOVAL_SECONDS (130 * 60) -#define MASTERNODE_CHECK_SECONDS 5 +#define GRIDNODE_MIN_CONFIRMATIONS 15 +#define GRIDNODE_MIN_MNP_SECONDS (10 * 60) +#define GRIDNODE_MIN_MNB_SECONDS (5 * 60) +#define GRIDNODE_PING_SECONDS (5 * 60) +#define GRIDNODE_EXPIRATION_SECONDS (120 * 60) +#define GRIDNODE_REMOVAL_SECONDS (130 * 60) +#define GRIDNODE_CHECK_SECONDS 5 using namespace std; -class CMasternode; -class CMasternodeBroadcast; -class CMasternodePing; +class CGridnode; +class CGridnodeBroadcast; +class CGridnodePing; extern map mapCacheBlockHashes; bool GetBlockHash(uint256& hash, int nBlockHeight); // -// The Masternode Ping Class : Contains a different serialize method for sending pings from masternodes throughout the network +// The Gridnode Ping Class : Contains a different serialize method for sending pings from Gridnodes throughout the network // -class CMasternodePing +class CGridnodePing { public: CTxIn vin; uint256 blockHash; - int64_t sigTime; //mnb message times + int64_t sigTime; //gnb message times std::vector vchSig; //removed stop - CMasternodePing(); - CMasternodePing(CTxIn& newVin); + CGridnodePing(); + CGridnodePing(CTxIn& newVin); ADD_SERIALIZE_METHODS; @@ -61,8 +61,8 @@ class CMasternodePing } bool CheckAndUpdate(int& nDos, bool fRequireEnabled = true, bool fCheckSigTimeOnly = false); - bool Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode); - bool VerifySignature(CPubKey& pubKeyMasternode, int &nDos); + bool Sign(CKey& keyGridnode, CPubKey& pubKeyGridnode); + bool VerifySignature(CPubKey& pubKeyGridnode, int &nDos); void Relay(); uint256 GetHash() @@ -73,7 +73,7 @@ class CMasternodePing return ss.GetHash(); } - void swap(CMasternodePing& first, CMasternodePing& second) // nothrow + void swap(CGridnodePing& first, CGridnodePing& second) // nothrow { // enable ADL (not necessary in our case, but good practice) using std::swap; @@ -86,26 +86,26 @@ class CMasternodePing swap(first.vchSig, second.vchSig); } - CMasternodePing& operator=(CMasternodePing from) + CGridnodePing& operator=(CGridnodePing from) { swap(*this, from); return *this; } - friend bool operator==(const CMasternodePing& a, const CMasternodePing& b) + friend bool operator==(const CGridnodePing& a, const CGridnodePing& b) { return a.vin == b.vin && a.blockHash == b.blockHash; } - friend bool operator!=(const CMasternodePing& a, const CMasternodePing& b) + friend bool operator!=(const CGridnodePing& a, const CGridnodePing& b) { return !(a == b); } }; // -// The Masternode Class. For managing the Obfuscation process. It contains the input of the 10000 UNIGRID, signature to prove +// The Gridnode Class. For managing the Obfuscation process. It contains the input of the 10000 UNIGRID, signature to prove // it's the one who own that ip address and code for calculating the payment election. // -class CMasternode +class CGridnode { private: // critical section to protect the inner data structures @@ -114,26 +114,26 @@ class CMasternode public: enum state { - MASTERNODE_PRE_ENABLED, - MASTERNODE_ENABLED, - MASTERNODE_EXPIRED, - MASTERNODE_OUTPOINT_SPENT, - MASTERNODE_REMOVE, - MASTERNODE_WATCHDOG_EXPIRED, - MASTERNODE_POSE_BAN, - MASTERNODE_VIN_SPENT, - MASTERNODE_POS_ERROR + GRIDNODE_PRE_ENABLED, + GRIDNODE_ENABLED, + GRIDNODE_EXPIRED, + GRIDNODE_OUTPOINT_SPENT, + GRIDNODE_REMOVE, + GRIDNODE_WATCHDOG_EXPIRED, + GRIDNODE_POSE_BAN, + GRIDNODE_VIN_SPENT, + GRIDNODE_POS_ERROR }; CTxIn vin; CService addr; CPubKey pubKeyCollateralAddress; - CPubKey pubKeyMasternode; + CPubKey pubKeyGridnode; CPubKey pubKeyCollateralAddress1; - CPubKey pubKeyMasternode1; + CPubKey pubKeyGridnode1; std::vector sig; int activeState; - int64_t sigTime; //mnb message time + int64_t sigTime; //gnb message time int cacheInputAge; int cacheInputAgeBlock; bool unitTest; @@ -143,17 +143,17 @@ class CMasternode int64_t nLastDsq; //the dsq count from the last dsq broadcast of this node int nScanningErrorCount; int nLastScanningErrorBlockHeight; - CMasternodePing lastPing; + CGridnodePing lastPing; int64_t nLastDsee; // temporary, do not save. Remove after migration to v12 int64_t nLastDseep; // temporary, do not save. Remove after migration to v12 - CMasternode(); - CMasternode(const CMasternode& other); - CMasternode(const CMasternodeBroadcast& mnb); + CGridnode(); + CGridnode(const CGridnode& other); + CGridnode(const CGridnodeBroadcast& gnb); - void swap(CMasternode& first, CMasternode& second) // nothrow + void swap(CGridnode& first, CGridnode& second) // nothrow { // enable ADL (not necessary in our case, but good practice) using std::swap; @@ -163,7 +163,7 @@ class CMasternode swap(first.vin, second.vin); swap(first.addr, second.addr); swap(first.pubKeyCollateralAddress, second.pubKeyCollateralAddress); - swap(first.pubKeyMasternode, second.pubKeyMasternode); + swap(first.pubKeyGridnode, second.pubKeyGridnode); swap(first.sig, second.sig); swap(first.activeState, second.activeState); swap(first.sigTime, second.sigTime); @@ -178,16 +178,16 @@ class CMasternode swap(first.nLastScanningErrorBlockHeight, second.nLastScanningErrorBlockHeight); } - CMasternode& operator=(CMasternode from) + CGridnode& operator=(CGridnode from) { swap(*this, from); return *this; } - friend bool operator==(const CMasternode& a, const CMasternode& b) + friend bool operator==(const CGridnode& a, const CGridnode& b) { return a.vin == b.vin; } - friend bool operator!=(const CMasternode& a, const CMasternode& b) + friend bool operator!=(const CGridnode& a, const CGridnode& b) { return !(a.vin == b.vin); } @@ -204,7 +204,7 @@ class CMasternode READWRITE(vin); READWRITE(addr); READWRITE(pubKeyCollateralAddress); - READWRITE(pubKeyMasternode); + READWRITE(pubKeyGridnode); READWRITE(sig); READWRITE(sigTime); READWRITE(protocolVersion); @@ -221,7 +221,7 @@ class CMasternode int64_t SecondsSincePayment(); - bool UpdateFromNewBroadcast(CMasternodeBroadcast& mnb); + bool UpdateFromNewBroadcast(CGridnodeBroadcast& gnb); inline uint64_t SliceHash(uint256& hash, int slice) { @@ -241,21 +241,21 @@ class CMasternode { now == -1 ? now = GetAdjustedTime() : now; - return (lastPing == CMasternodePing()) ? false : now - lastPing.sigTime < seconds; + return (lastPing == CGridnodePing()) ? false : now - lastPing.sigTime < seconds; } void Disable() { sigTime = 0; - lastPing = CMasternodePing(); + lastPing = CGridnodePing(); } bool IsEnabled() { - return activeState == MASTERNODE_ENABLED; + return activeState == GRIDNODE_ENABLED; } - int GetMasternodeInputAge() + int GetGridnodeInputAge() { if (chainActive.Tip() == NULL) return 0; @@ -273,11 +273,11 @@ class CMasternode { std::string strStatus = "ACTIVE"; - if (activeState == CMasternode::MASTERNODE_ENABLED) strStatus = "ENABLED"; - if (activeState == CMasternode::MASTERNODE_EXPIRED) strStatus = "EXPIRED"; - if (activeState == CMasternode::MASTERNODE_VIN_SPENT) strStatus = "VIN_SPENT"; - if (activeState == CMasternode::MASTERNODE_REMOVE) strStatus = "REMOVE"; - if (activeState == CMasternode::MASTERNODE_POS_ERROR) strStatus = "POS_ERROR"; + if (activeState == CGridnode::GRIDNODE_ENABLED) strStatus = "ENABLED"; + if (activeState == CGridnode::GRIDNODE_EXPIRED) strStatus = "EXPIRED"; + if (activeState == CGridnode::GRIDNODE_VIN_SPENT) strStatus = "VIN_SPENT"; + if (activeState == CGridnode::GRIDNODE_REMOVE) strStatus = "REMOVE"; + if (activeState == CGridnode::GRIDNODE_POS_ERROR) strStatus = "POS_ERROR"; return strStatus; } @@ -288,15 +288,15 @@ class CMasternode // -// The Masternode Broadcast Class : Contains a different serialize method for sending masternodes through the network +// The Gridnode Broadcast Class : Contains a different serialize method for sending Gridnodes through the network // -class CMasternodeBroadcast : public CMasternode +class CGridnodeBroadcast : public CGridnode { public: - CMasternodeBroadcast(); - CMasternodeBroadcast(CService newAddr, CTxIn newVin, CPubKey newPubkey, CPubKey newPubkey2, int protocolVersionIn); - CMasternodeBroadcast(const CMasternode& mn); + CGridnodeBroadcast(); + CGridnodeBroadcast(CService newAddr, CTxIn newVin, CPubKey newPubkey, CPubKey newPubkey2, int protocolVersionIn); + CGridnodeBroadcast(const CGridnode& gn); bool CheckAndUpdate(int& nDoS); bool CheckInputsAndAdd(int& nDos); @@ -314,7 +314,7 @@ class CMasternodeBroadcast : public CMasternode READWRITE(vin); READWRITE(addr); READWRITE(pubKeyCollateralAddress); - READWRITE(pubKeyMasternode); + READWRITE(pubKeyGridnode); READWRITE(sig); READWRITE(sigTime); READWRITE(protocolVersion); @@ -330,9 +330,9 @@ class CMasternodeBroadcast : public CMasternode return ss.GetHash(); } - /// Create Masternode broadcast, needs to be relayed manually after that - static bool Create(CTxIn vin, CService service, CKey keyCollateralAddressNew, CPubKey pubKeyCollateralAddressNew, CKey keyMasternodeNew, CPubKey pubKeyMasternodeNew, std::string& strErrorRet, CMasternodeBroadcast& mnbRet); - static bool Create(std::string strService, std::string strKey, std::string strTxHash, std::string strOutputIndex, std::string& strErrorRet, CMasternodeBroadcast& mnbRet, bool fOffline = false); + /// Create Gridnode broadcast, needs to be relayed manually after that + static bool Create(CTxIn vin, CService service, CKey keyCollateralAddressNew, CPubKey pubKeyCollateralAddressNew, CKey keyGridnodeNew, CPubKey pubKeyGridnodeNew, std::string& strErrorRet, CGridnodeBroadcast& gnbRet); + static bool Create(std::string strService, std::string strKey, std::string strTxHash, std::string strOutputIndex, std::string& strErrorRet, CGridnodeBroadcast& gnbRet, bool fOffline = false); static bool CheckDefaultPort(std::string strService, std::string& strErrorRet, std::string strContext); }; diff --git a/daemon/masternodeconfig.cpp b/daemon/gridnodeconfig.cpp similarity index 73% rename from daemon/masternodeconfig.cpp rename to daemon/gridnodeconfig.cpp index be379fadc6f9..57f0453cea54 100644 --- a/daemon/masternodeconfig.cpp +++ b/daemon/gridnodeconfig.cpp @@ -5,30 +5,30 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include "netbase.h" -#include "masternodeconfig.h" +#include "gridnodeconfig.h" #include "util.h" #include "ui_interface.h" #include -CMasternodeConfig masternodeConfig; +CGridnodeConfig GridnodeConfig; -void CMasternodeConfig::add(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex) +void CGridnodeConfig::add(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex) { - CMasternodeEntry cme(alias, ip, privKey, txHash, outputIndex); + CGridnodeEntry cme(alias, ip, privKey, txHash, outputIndex); entries.push_back(cme); } -bool CMasternodeConfig::read(std::string& strErr) +bool CGridnodeConfig::read(std::string& strErr) { int linenumber = 1; - boost::filesystem::path pathMasternodeConfigFile = GetMasternodeConfigFile(); - boost::filesystem::ifstream streamConfig(pathMasternodeConfigFile); + boost::filesystem::path pathGridnodeConfigFile = GetGridnodeConfigFile(); + boost::filesystem::ifstream streamConfig(pathGridnodeConfigFile); if (!streamConfig.good()) { - FILE* configFile = fopen(pathMasternodeConfigFile.string().c_str(), "a"); + FILE* configFile = fopen(pathGridnodeConfigFile.string().c_str(), "a"); if (configFile != NULL) { - std::string strHeader = "# Masternode config file\n" - "# Format: alias IP:port masternodeprivkey collateral_output_txid collateral_output_index\n" + std::string strHeader = "# Gridnode config file\n" + "# Format: alias IP:port gridnodeprivkey collateral_output_txid collateral_output_index\n" "# Example: mn1 127.0.0.2:51992 93HaYBVUCYjEMeeH1Y4sBGLALQZE1Yc1K64xiqgX37tGBDQL8Xg 2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c 0\n"; fwrite(strHeader.c_str(), std::strlen(strHeader.c_str()), 1, configFile); fclose(configFile); @@ -52,7 +52,7 @@ bool CMasternodeConfig::read(std::string& strErr) iss.str(line); iss.clear(); if (!(iss >> alias >> ip >> privKey >> txHash >> outputIndex)) { - strErr = _("Could not parse masternode.conf") + "\n" + + strErr = _("Could not parse gridnode.conf") + "\n" + strprintf(_("Line: %d"), linenumber) + "\n\"" + line + "\""; streamConfig.close(); return false; @@ -71,14 +71,14 @@ bool CMasternodeConfig::read(std::string& strErr) // if (Params().NetworkID() == CBaseChainParams::MAIN) { // if (port != 51992) { - // strErr = _("Invalid port detected in masternode.conf") + "\n" + + // strErr = _("Invalid port detected in gridnode.conf") + "\n" + // strprintf(_("Line: %d"), linenumber) + "\n\"" + line + "\"" + "\n" + // _("(must be 51992 for mainnet)"); // streamConfig.close(); // return false; // } // } else if (port == 51992) { - // strErr = _("Invalid port detected in masternode.conf") + "\n" + + // strErr = _("Invalid port detected in gridnode.conf") + "\n" + // strprintf(_("Line: %d"), linenumber) + "\n\"" + line + "\"" + "\n" + // _("(51992 could be used only on mainnet)"); // streamConfig.close(); @@ -93,7 +93,7 @@ bool CMasternodeConfig::read(std::string& strErr) return true; } -bool CMasternodeConfig::CMasternodeEntry::castOutputIndex(int &n) +bool CGridnodeConfig::CGridnodeEntry::castOutputIndex(int &n) { try { n = std::stoi(outputIndex); diff --git a/daemon/masternodeconfig.h b/daemon/gridnodeconfig.h similarity index 79% rename from daemon/masternodeconfig.h rename to daemon/gridnodeconfig.h index baa4f0c14590..317b93d3ec6b 100644 --- a/daemon/masternodeconfig.h +++ b/daemon/gridnodeconfig.h @@ -4,8 +4,8 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#ifndef SRC_MASTERNODECONFIG_H_ -#define SRC_MASTERNODECONFIG_H_ +#ifndef SRC_GRIDNODECONFIG_H_ +#define SRC_GRIDNODECONFIG_H_ #include #include @@ -13,13 +13,13 @@ #include #include -class CMasternodeConfig; -extern CMasternodeConfig masternodeConfig; +class CGridnodeConfig; +extern CGridnodeConfig GridnodeConfig; -class CMasternodeConfig +class CGridnodeConfig { public: - class CMasternodeEntry + class CGridnodeEntry { private: std::string alias; @@ -29,7 +29,7 @@ class CMasternodeConfig std::string outputIndex; public: - CMasternodeEntry(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex) + CGridnodeEntry(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex) { this->alias = alias; this->ip = ip; @@ -91,16 +91,16 @@ class CMasternodeConfig } }; - CMasternodeConfig() + CGridnodeConfig() { - entries = std::vector(); + entries = std::vector(); } void clear(); bool read(std::string& strErr); void add(std::string alias, std::string ip, std::string privKey, std::string txHash, std::string outputIndex); - std::vector& getEntries() + std::vector& getEntries() { return entries; } @@ -108,15 +108,15 @@ class CMasternodeConfig int getCount() { int c = -1; - for (CMasternodeEntry e : entries) { + for (CGridnodeEntry e : entries) { if (e.getAlias() != "") c++; } return c; } private: - std::vector entries; + std::vector entries; }; -#endif /* SRC_MASTERNODECONFIG_H_ */ \ No newline at end of file +#endif /* SRC_GRIDNODECONFIG_H_ */ \ No newline at end of file diff --git a/daemon/gridnodeman.cpp b/daemon/gridnodeman.cpp new file mode 100644 index 000000000000..c477f9fd97a1 --- /dev/null +++ b/daemon/gridnodeman.cpp @@ -0,0 +1,1174 @@ +// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2015-2018 The PIVX developers +// Copyright (c) 2018-2019 The UNIGRID organization +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "gridnodeman.h" +#include "activegridnode.h" +#include "addrman.h" +#include "gridnode.h" +#include "obfuscation.h" +#include "spork.h" +#include "util.h" +#include +#include + +#define MN_WINNER_MINIMUM_AGE 8000 // Age in seconds. This should be > GRIDNODE_REMOVAL_SECONDS to avoid misconfigured new nodes in the list. + +/** Gridnode manager */ +CGridnodeMan gnodeman; + +struct CompareLastPaid { + bool operator()(const pair& t1, + const pair& t2) const + { + return t1.first < t2.first; + } +}; + +struct CompareScoreTxIn { + bool operator()(const pair& t1, + const pair& t2) const + { + return t1.first < t2.first; + } +}; + +struct CompareScoreMN { + bool operator()(const pair& t1, + const pair& t2) const + { + return t1.first < t2.first; + } +}; + +// +// CGridnodeDB +// + +CGridnodeDB::CGridnodeDB() +{ + pathMN = GetDataDir() / "gncache.dat"; + strMagicMessage = "GridnodeCache"; +} + +bool CGridnodeDB::Write(const CGridnodeMan& gnodemanToSave) +{ + int64_t nStart = GetTimeMillis(); + + // serialize, checksum data up to that point, then append checksum + CDataStream ssGridnodes(SER_DISK, CLIENT_VERSION); + ssGridnodes << strMagicMessage; // gridnode cache file specific magic message + ssGridnodes << FLATDATA(Params().MessageStart()); // network specific magic number + ssGridnodes << gnodemanToSave; + uint256 hash = Hash(ssGridnodes.begin(), ssGridnodes.end()); + ssGridnodes << hash; + + // open output file, and associate with CAutoFile + FILE* file = fopen(pathMN.string().c_str(), "wb"); + CAutoFile fileout(file, SER_DISK, CLIENT_VERSION); + if (fileout.IsNull()) + return error("%s : Failed to open file %s", __func__, pathMN.string()); + + // Write and commit header, data + try { + fileout << ssGridnodes; + } catch (std::exception& e) { + return error("%s : Serialize or I/O error - %s", __func__, e.what()); + } + // FileCommit(fileout); + fileout.fclose(); + + LogPrint("gridnode","Written info to gncache.dat %dms\n", GetTimeMillis() - nStart); + LogPrint("gridnode"," %s\n", gnodemanToSave.ToString()); + + return true; +} + +CGridnodeDB::ReadResult CGridnodeDB::Read(CGridnodeMan& gnodemanToLoad, bool fDryRun) +{ + int64_t nStart = GetTimeMillis(); + // open input file, and associate with CAutoFile + FILE* file = fopen(pathMN.string().c_str(), "rb"); + CAutoFile filein(file, SER_DISK, CLIENT_VERSION); + if (filein.IsNull()) { + error("%s : Failed to open file %s", __func__, pathMN.string()); + return FileError; + } + + // use file size to size memory buffer + int fileSize = boost::filesystem::file_size(pathMN); + int dataSize = fileSize - sizeof(uint256); + // Don't try to resize to a negative number if file is small + if (dataSize < 0) + dataSize = 0; + vector vchData; + vchData.resize(dataSize); + uint256 hashIn; + + // read data and checksum from file + try { + filein.read((char*)&vchData[0], dataSize); + filein >> hashIn; + } catch (std::exception& e) { + error("%s : Deserialize or I/O error - %s", __func__, e.what()); + return HashReadError; + } + filein.fclose(); + + CDataStream ssGridnodes(vchData, SER_DISK, CLIENT_VERSION); + + // verify stored checksum matches input data + uint256 hashTmp = Hash(ssGridnodes.begin(), ssGridnodes.end()); + if (hashIn != hashTmp) { + error("%s : Checksum mismatch, data corrupted", __func__); + return IncorrectHash; + } + + unsigned char pchMsgTmp[4]; + std::string strMagicMessageTmp; + try { + // de-serialize file header (gridnode cache file specific magic message) and .. + + ssGridnodes >> strMagicMessageTmp; + + // ... verify the message matches predefined one + if (strMagicMessage != strMagicMessageTmp) { + error("%s : Invalid gridnode cache magic message", __func__); + return IncorrectMagicMessage; + } + + // de-serialize file header (network specific magic number) and .. + ssGridnodes >> FLATDATA(pchMsgTmp); + + // ... verify the network matches ours + if (memcmp(pchMsgTmp, Params().MessageStart(), sizeof(pchMsgTmp))) { + error("%s : Invalid network magic number", __func__); + return IncorrectMagicNumber; + } + // de-serialize data into CGridnodeMan object + ssGridnodes >> gnodemanToLoad; + } catch (std::exception& e) { + gnodemanToLoad.Clear(); + error("%s : Deserialize or I/O error - %s", __func__, e.what()); + return IncorrectFormat; + } + + LogPrint("gridnode","Loaded info from gncache.dat %dms\n", GetTimeMillis() - nStart); + LogPrint("gridnode"," %s\n", gnodemanToLoad.ToString()); + if (!fDryRun) { + LogPrint("gridnode","Gridnode manager - cleaning....\n"); + gnodemanToLoad.CheckAndRemove(true); + LogPrint("gridnode","Gridnode manager - result:\n"); + LogPrint("gridnode"," %s\n", gnodemanToLoad.ToString()); + } + + return Ok; +} + +void DumpGridnodes() +{ + int64_t nStart = GetTimeMillis(); + + CGridnodeDB gndb; + CGridnodeMan tempMnodeman; + + LogPrint("gridnode","Verifying gncache.dat format...\n"); + CGridnodeDB::ReadResult readResult = gndb.Read(tempMnodeman, true); + // there was an error and it was not an error on file opening => do not proceed + if (readResult == CGridnodeDB::FileError) + LogPrint("gridnode","Missing gridnode cache file - gncache.dat, will try to recreate\n"); + else if (readResult != CGridnodeDB::Ok) { + LogPrint("gridnode","Error reading gncache.dat: "); + if (readResult == CGridnodeDB::IncorrectFormat) + LogPrint("gridnode","magic is ok but data has invalid format, will try to recreate\n"); + else { + LogPrint("gridnode","file format is unknown or invalid, please fix it manually\n"); + return; + } + } + LogPrint("gridnode","Writting info to gncache.dat...\n"); + gndb.Write(gnodeman); + + LogPrint("gridnode","Gridnode dump finished %dms\n", GetTimeMillis() - nStart); +} + +CGridnodeMan::CGridnodeMan() +{ + nDsqCount = 0; +} + +bool CGridnodeMan::Add(CGridnode& gn) +{ + LOCK(cs); + + if (!gn.IsEnabled()) + return false; + + CGridnode* pgn = Find(gn.vin); + if (pgn == NULL) { + LogPrint("gridnode", "CGridnodeMan: Adding new Gridnode %s - %i now\n", gn.vin.prevout.hash.ToString(), size() + 1); + vGridnodes.push_back(gn); + return true; + } + + return false; +} + +void CGridnodeMan::AskForMN(CNode* pnode, CTxIn& vin) +{ + std::map::iterator i = mWeAskedForGridnodeListEntry.find(vin.prevout); + if (i != mWeAskedForGridnodeListEntry.end()) { + int64_t t = (*i).second; + if (GetTime() < t) return; // we've asked recently + } + + // ask for the gnb info once from the node that sent gnp + + LogPrint("gridnode", "CGridnodeMan::AskForMN - Asking node for missing entry, vin: %s\n", vin.prevout.hash.ToString()); + pnode->PushMessage("dseg", vin); + int64_t askAgain = GetTime() + GRIDNODE_MIN_MNP_SECONDS; + mWeAskedForGridnodeListEntry[vin.prevout] = askAgain; +} + +void CGridnodeMan::Check() +{ + LOCK(cs); + + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + gn.Check(); + } +} + +void CGridnodeMan::CheckAndRemove(bool forceExpiredRemoval) +{ + Check(); + + LOCK(cs); + + //remove inactive and outdated + vector::iterator it = vGridnodes.begin(); + while (it != vGridnodes.end()) { + if ((*it).activeState == CGridnode::GRIDNODE_REMOVE || + (*it).activeState == CGridnode::GRIDNODE_VIN_SPENT || + (forceExpiredRemoval && (*it).activeState == CGridnode::GRIDNODE_EXPIRED) || + (*it).protocolVersion < GridnodePayments.GetMinGridnodePaymentsProto()) { + LogPrint("gridnode", "CGridnodeMan: Removing inactive Gridnode %s - %i now\n", (*it).vin.prevout.hash.ToString(), size() - 1); + + //erase all of the broadcasts we've seen from this vin + // -- if we missed a few pings and the node was removed, this will allow is to get it back without them + // sending a brand new gnb + map::iterator it3 = mapSeenGridnodeBroadcast.begin(); + while (it3 != mapSeenGridnodeBroadcast.end()) { + if ((*it3).second.vin == (*it).vin) { + GridnodeSync.mapSeenSyncMNB.erase((*it3).first); + mapSeenGridnodeBroadcast.erase(it3++); + } else { + ++it3; + } + } + + // allow us to ask for this gridnode again if we see another ping + map::iterator it2 = mWeAskedForGridnodeListEntry.begin(); + while (it2 != mWeAskedForGridnodeListEntry.end()) { + if ((*it2).first == (*it).vin.prevout) { + mWeAskedForGridnodeListEntry.erase(it2++); + } else { + ++it2; + } + } + + it = vGridnodes.erase(it); + } else { + ++it; + } + } + + // check who's asked for the Gridnode list + map::iterator it1 = mAskedUsForGridnodeList.begin(); + while (it1 != mAskedUsForGridnodeList.end()) { + if ((*it1).second < GetTime()) { + mAskedUsForGridnodeList.erase(it1++); + } else { + ++it1; + } + } + + // check who we asked for the Gridnode list + it1 = mWeAskedForGridnodeList.begin(); + while (it1 != mWeAskedForGridnodeList.end()) { + if ((*it1).second < GetTime()) { + mWeAskedForGridnodeList.erase(it1++); + } else { + ++it1; + } + } + + // check which Gridnodes we've asked for + map::iterator it2 = mWeAskedForGridnodeListEntry.begin(); + while (it2 != mWeAskedForGridnodeListEntry.end()) { + if ((*it2).second < GetTime()) { + mWeAskedForGridnodeListEntry.erase(it2++); + } else { + ++it2; + } + } + + // remove expired mapSeenGridnodeBroadcast + map::iterator it3 = mapSeenGridnodeBroadcast.begin(); + while (it3 != mapSeenGridnodeBroadcast.end()) { + if ((*it3).second.lastPing.sigTime < GetTime() - (GRIDNODE_REMOVAL_SECONDS * 2)) { + mapSeenGridnodeBroadcast.erase(it3++); + GridnodeSync.mapSeenSyncMNB.erase((*it3).second.GetHash()); + } else { + ++it3; + } + } + + // remove expired mapSeenGridnodePing + map::iterator it4 = mapSeenGridnodePing.begin(); + while (it4 != mapSeenGridnodePing.end()) { + if ((*it4).second.sigTime < GetTime() - (GRIDNODE_REMOVAL_SECONDS * 2)) { + mapSeenGridnodePing.erase(it4++); + } else { + ++it4; + } + } +} + +void CGridnodeMan::Clear() +{ + LOCK(cs); + vGridnodes.clear(); + mAskedUsForGridnodeList.clear(); + mWeAskedForGridnodeList.clear(); + mWeAskedForGridnodeListEntry.clear(); + mapSeenGridnodeBroadcast.clear(); + mapSeenGridnodePing.clear(); + nDsqCount = 0; +} + +int CGridnodeMan::stable_size () +{ + int nStable_size = 0; + int nMinProtocol = ActiveProtocol(); + int64_t nGridnode_Min_Age = MN_WINNER_MINIMUM_AGE; + int64_t nGridnode_Age = 0; + + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + if (gn.protocolVersion < nMinProtocol) { + continue; // Skip obsolete versions + } + if (IsSporkActive (SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT)) { + nGridnode_Age = GetAdjustedTime() - gn.sigTime; + if ((nGridnode_Age) < nGridnode_Min_Age) { + continue; // Skip Gridnodes younger than (default) 8000 sec (MUST be > GRIDNODE_REMOVAL_SECONDS) + } + } + gn.Check (); + if (!gn.IsEnabled ()) + continue; // Skip not-enabled Gridnodes + + nStable_size++; + } + + return nStable_size; +} + +int CGridnodeMan::CountEnabled(int protocolVersion) +{ + int i = 0; + protocolVersion = protocolVersion == -1 ? GridnodePayments.GetMinGridnodePaymentsProto() : protocolVersion; + + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + gn.Check(); + if (gn.protocolVersion < protocolVersion || !gn.IsEnabled()) continue; + i++; + } + + return i; +} + +void CGridnodeMan::CountNetworks(int protocolVersion, int& ipv4, int& ipv6, int& onion) +{ + protocolVersion = protocolVersion == -1 ? GridnodePayments.GetMinGridnodePaymentsProto() : protocolVersion; + + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + gn.Check(); + std::string strHost; + int port; + SplitHostPort(gn.addr.ToString(), port, strHost); + CNetAddr node = CNetAddr(strHost, false); + int nNetwork = node.GetNetwork(); + switch (nNetwork) { + case 1 : + ipv4++; + break; + case 2 : + ipv6++; + break; + case 3 : + onion++; + break; + } + } +} + +void CGridnodeMan::DsegUpdate(CNode* pnode) +{ + LOCK(cs); + + if (Params().NetworkID() == CBaseChainParams::MAIN) { + if (!(pnode->addr.IsRFC1918() || pnode->addr.IsLocal())) { + std::map::iterator it = mWeAskedForGridnodeList.find(pnode->addr); + if (it != mWeAskedForGridnodeList.end()) { + if (GetTime() < (*it).second) { + LogPrint("gridnode", "dseg - we already asked peer %i for the list; skipping...\n", pnode->GetId()); + return; + } + } + } + } + + pnode->PushMessage("dseg", CTxIn()); + int64_t askAgain = GetTime() + GRIDNODES_DSEG_SECONDS; + mWeAskedForGridnodeList[pnode->addr] = askAgain; +} + +CGridnode* CGridnodeMan::Find(const CScript& payee) +{ + LOCK(cs); + CScript payee2; + + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + payee2 = GetScriptForDestination(gn.pubKeyCollateralAddress.GetID()); + if (payee2 == payee) + return &gn; + } + return NULL; +} + +CGridnode* CGridnodeMan::Find(const CTxIn& vin) +{ + LOCK(cs); + + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + if (gn.vin.prevout == vin.prevout) + return &gn; + } + return NULL; +} + + +CGridnode* CGridnodeMan::Find(const CPubKey& pubKeyGridnode) +{ + LOCK(cs); + + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + if (gn.pubKeyGridnode == pubKeyGridnode) + return &gn; + } + return NULL; +} + +// +// Deterministically select the oldest/best gridnode to pay on the network +// +CGridnode* CGridnodeMan::GetNextGridnodeInQueueForPayment(int nBlockHeight, bool fFilterSigTime, int& nCount) +{ + LOCK(cs); + + CGridnode* pBestGridnode = NULL; + std::vector > vecGridnodeLastPaid; + + /* + Make a vector with all of the last paid times + */ + + int nMnCount = CountEnabled(); + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + gn.Check(); + if (!gn.IsEnabled()) continue; + + // //check protocol version + if (gn.protocolVersion < GridnodePayments.GetMinGridnodePaymentsProto()) continue; + + //it's in the list (up to 8 entries ahead of current block to allow propagation) -- so let's skip it + if (GridnodePayments.IsScheduled(gn, nBlockHeight)) continue; + + //it's too new, wait for a cycle + if (fFilterSigTime && gn.sigTime + (nMnCount * 2.6 * 60) > GetAdjustedTime()) continue; + + //make sure it has as many confirmations as there are Gridnodes + if (gn.GetGridnodeInputAge() < nMnCount) continue; + + vecGridnodeLastPaid.push_back(make_pair(gn.SecondsSincePayment(), gn.vin)); + } + + nCount = (int)vecGridnodeLastPaid.size(); + + //when the network is in the process of upgrading, don't penalize nodes that recently restarted + if (fFilterSigTime && nCount < nMnCount / 3) return GetNextGridnodeInQueueForPayment(nBlockHeight, false, nCount); + + // Sort them high to low + sort(vecGridnodeLastPaid.rbegin(), vecGridnodeLastPaid.rend(), CompareLastPaid()); + + // Look at 1/10 of the oldest nodes (by last payment), calculate their scores and pay the best one + // -- This doesn't look at who is being paid in the +8-10 blocks, allowing for double payments very rarely + // -- 1/100 payments should be a double payment on mainnet - (1/(3000/10))*2 + // -- (chance per block * chances before IsScheduled will fire) + int nTenthNetwork = CountEnabled() / 10; + int nCountTenth = 0; + uint256 nHigh = 0; + BOOST_FOREACH (PAIRTYPE(int64_t, CTxIn) & s, vecGridnodeLastPaid) { + CGridnode* pgn = Find(s.second); + if (!pgn) break; + + uint256 n = pgn->CalculateScore(1, nBlockHeight - 100); + if (n > nHigh) { + nHigh = n; + pBestGridnode = pgn; + } + nCountTenth++; + if (nCountTenth >= nTenthNetwork) break; + } + return pBestGridnode; +} + +CGridnode* CGridnodeMan::FindRandomNotInVec(std::vector& vecToExclude, int protocolVersion) +{ + LOCK(cs); + + protocolVersion = protocolVersion == -1 ? GridnodePayments.GetMinGridnodePaymentsProto() : protocolVersion; + + int nCountEnabled = CountEnabled(protocolVersion); + LogPrint("gridnode", "CGridnodeMan::FindRandomNotInVec - nCountEnabled - vecToExclude.size() %d\n", nCountEnabled - vecToExclude.size()); + if (nCountEnabled - vecToExclude.size() < 1) return NULL; + + int rand = GetRandInt(nCountEnabled - vecToExclude.size()); + LogPrint("gridnode", "CGridnodeMan::FindRandomNotInVec - rand %d\n", rand); + bool found; + + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + if (gn.protocolVersion < protocolVersion || !gn.IsEnabled()) continue; + found = false; + BOOST_FOREACH (CTxIn& usedVin, vecToExclude) { + if (gn.vin.prevout == usedVin.prevout) { + found = true; + break; + } + } + if (found) continue; + if (--rand < 1) { + return &gn; + } + } + + return NULL; +} + +CGridnode* CGridnodeMan::GetCurrentGridnode(int mod, int64_t nBlockHeight, int minProtocol) +{ + int64_t score = 0; + CGridnode* winner = NULL; + + // scan for winner + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + gn.Check(); + if (gn.protocolVersion < minProtocol || !gn.IsEnabled()) continue; + + // calculate the score for each Gridnode + uint256 n = gn.CalculateScore(mod, nBlockHeight); + int64_t n2 = n.GetCompact(false); + + // determine the winner + if (n2 > score) { + score = n2; + winner = &gn; + } + } + + return winner; +} + +int CGridnodeMan::GetGridnodeRank(const CTxIn& vin, int64_t nBlockHeight, int minProtocol, bool fOnlyActive) +{ + std::vector > vecGridnodeScores; + int64_t nGridnode_Min_Age = MN_WINNER_MINIMUM_AGE; + int64_t nGridnode_Age = 0; + + //make sure we know about this block + uint256 hash = 0; + if (!GetBlockHash(hash, nBlockHeight)) return -1; + + // scan for winner + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + if (gn.protocolVersion < minProtocol) { + LogPrint("gridnode","Skipping Gridnode with obsolete version %d\n", gn.protocolVersion); + continue; // Skip obsolete versions + } + + if (IsSporkActive(SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT)) { + nGridnode_Age = GetAdjustedTime() - gn.sigTime; + if ((nGridnode_Age) < nGridnode_Min_Age) { + if (fDebug) LogPrint("gridnode","Skipping just activated Gridnode. Age: %ld\n", nGridnode_Age); + continue; // Skip Gridnodes younger than (default) 1 hour + } + } + if (fOnlyActive) { + gn.Check(); + if (!gn.IsEnabled()) continue; + } + uint256 n = gn.CalculateScore(1, nBlockHeight); + int64_t n2 = n.GetCompact(false); + + vecGridnodeScores.push_back(make_pair(n2, gn.vin)); + } + + sort(vecGridnodeScores.rbegin(), vecGridnodeScores.rend(), CompareScoreTxIn()); + + int rank = 0; + BOOST_FOREACH (PAIRTYPE(int64_t, CTxIn) & s, vecGridnodeScores) { + rank++; + if (s.second.prevout == vin.prevout) { + return rank; + } + } + + return -1; +} + +std::vector > CGridnodeMan::GetGridnodeRanks(int64_t nBlockHeight, int minProtocol) +{ + std::vector > vecGridnodeScores; + std::vector > vecGridnodeRanks; + + //make sure we know about this block + uint256 hash = 0; + if (!GetBlockHash(hash, nBlockHeight)) return vecGridnodeRanks; + + // scan for winner + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + gn.Check(); + + if (gn.protocolVersion < minProtocol) continue; + + if (!gn.IsEnabled()) { + vecGridnodeScores.push_back(make_pair(9999, gn)); + continue; + } + + uint256 n = gn.CalculateScore(1, nBlockHeight); + int64_t n2 = n.GetCompact(false); + + vecGridnodeScores.push_back(make_pair(n2, gn)); + } + + sort(vecGridnodeScores.rbegin(), vecGridnodeScores.rend(), CompareScoreMN()); + + int rank = 0; + BOOST_FOREACH (PAIRTYPE(int64_t, CGridnode) & s, vecGridnodeScores) { + rank++; + vecGridnodeRanks.push_back(make_pair(rank, s.second)); + } + + return vecGridnodeRanks; +} + +CGridnode* CGridnodeMan::GetGridnodeByRank(int nRank, int64_t nBlockHeight, int minProtocol, bool fOnlyActive) +{ + std::vector > vecGridnodeScores; + + // scan for winner + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + if (gn.protocolVersion < minProtocol) continue; + if (fOnlyActive) { + gn.Check(); + if (!gn.IsEnabled()) continue; + } + + uint256 n = gn.CalculateScore(1, nBlockHeight); + int64_t n2 = n.GetCompact(false); + + vecGridnodeScores.push_back(make_pair(n2, gn.vin)); + } + + sort(vecGridnodeScores.rbegin(), vecGridnodeScores.rend(), CompareScoreTxIn()); + + int rank = 0; + BOOST_FOREACH (PAIRTYPE(int64_t, CTxIn) & s, vecGridnodeScores) { + rank++; + if (rank == nRank) { + return Find(s.second); + } + } + + return NULL; +} + +void CGridnodeMan::ProcessGridnodeConnections() +{ + //we don't care about this for regtest + if (Params().NetworkID() == CBaseChainParams::REGTEST) return; + + LOCK(cs_vNodes); + BOOST_FOREACH (CNode* pnode, vNodes) { + if (pnode->fObfuScationMaster) { + if (obfuScationPool.pSubmittedToGridnode != NULL && pnode->addr == obfuScationPool.pSubmittedToGridnode->addr) continue; + LogPrint("gridnode","Closing Gridnode connection peer=%i \n", pnode->GetId()); + pnode->fObfuScationMaster = false; + pnode->Release(); + } + } +} + +void CGridnodeMan::ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) +{ + if (fLiteMode) return; //disable all Obfuscation/Gridnode related functionality + if (!GridnodeSync.IsBlockchainSynced()) return; + + LOCK(cs_process_message); + + if (strCommand == "gnb") { //Gridnode Broadcast + CGridnodeBroadcast gnb; + vRecv >> gnb; + + if (mapSeenGridnodeBroadcast.count(gnb.GetHash())) { //seen + GridnodeSync.AddedGridnodeList(gnb.GetHash()); + return; + } + mapSeenGridnodeBroadcast.insert(make_pair(gnb.GetHash(), gnb)); + + int nDoS = 0; + if (!gnb.CheckAndUpdate(nDoS)) { + if (nDoS > 0) + Misbehaving(pfrom->GetId(), nDoS); + + //failed + return; + } + + // make sure the vout that was signed is related to the transaction that spawned the Gridnode + // - this is expensive, so it's only done once per Gridnode + if (!obfuScationSigner.IsVinAssociatedWithPubkey(gnb.vin, gnb.pubKeyCollateralAddress)) { + LogPrintf("CGridnodeMan::ProcessMessage() : gnb - Got mismatched pubkey and vin\n"); + Misbehaving(pfrom->GetId(), 33); + return; + } + + // make sure it's still unspent + // - this is checked later by .check() in many places and by ThreadCheckObfuScationPool() + if (gnb.CheckInputsAndAdd(nDoS)) { + // use this as a peer + addrman.Add(CAddress(gnb.addr), pfrom->addr, 2 * 60 * 60); + GridnodeSync.AddedGridnodeList(gnb.GetHash()); + } else { + LogPrint("gridnode","gnb - Rejected Gridnode entry %s\n", gnb.vin.prevout.hash.ToString()); + + if (nDoS > 0) + Misbehaving(pfrom->GetId(), nDoS); + } + } + + else if (strCommand == "gnp") { //Gridnode Ping + CGridnodePing gnp; + vRecv >> gnp; + + LogPrint("gridnode", "gnp - Gridnode ping, vin: %s\n", gnp.vin.prevout.hash.ToString()); + + if (mapSeenGridnodePing.count(gnp.GetHash())) return; //seen + mapSeenGridnodePing.insert(make_pair(gnp.GetHash(), gnp)); + + int nDoS = 0; + if (gnp.CheckAndUpdate(nDoS)) return; + + if (nDoS > 0) { + // if anything significant failed, mark that node + Misbehaving(pfrom->GetId(), nDoS); + } else { + // if nothing significant failed, search existing Gridnode list + CGridnode* pgn = Find(gnp.vin); + // if it's known, don't ask for the gnb, just return + if (pgn != NULL) return; + } + + // something significant is broken or gn is unknown, + // we might have to ask for a gridnode entry once + AskForMN(pfrom, gnp.vin); + + } else if (strCommand == "dseg") { //Get Gridnode list or specific entry + + CTxIn vin; + vRecv >> vin; + + if (vin == CTxIn()) { //only should ask for this once + //local network + bool isLocal = (pfrom->addr.IsRFC1918() || pfrom->addr.IsLocal()); + + if (!isLocal && Params().NetworkID() == CBaseChainParams::MAIN) { + std::map::iterator i = mAskedUsForGridnodeList.find(pfrom->addr); + if (i != mAskedUsForGridnodeList.end()) { + int64_t t = (*i).second; + if (GetTime() < t) { + LogPrintf("CGridnodeMan::ProcessMessage() : dseg - peer already asked me for the list\n"); + Misbehaving(pfrom->GetId(), 34); + return; + } + } + int64_t askAgain = GetTime() + GRIDNODES_DSEG_SECONDS; + mAskedUsForGridnodeList[pfrom->addr] = askAgain; + } + } //else, asking for a specific node which is ok + + + int nInvCount = 0; + + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + if (gn.addr.IsRFC1918()) continue; //local network + + if (gn.IsEnabled()) { + LogPrint("gridnode", "dseg - Sending Gridnode entry - %s \n", gn.vin.prevout.hash.ToString()); + if (vin == CTxIn() || vin == gn.vin) { + CGridnodeBroadcast gnb = CGridnodeBroadcast(gn); + uint256 hash = gnb.GetHash(); + pfrom->PushInventory(CInv(MSG_GRIDNODE_ANNOUNCE, hash)); + nInvCount++; + + if (!mapSeenGridnodeBroadcast.count(hash)) mapSeenGridnodeBroadcast.insert(make_pair(hash, gnb)); + + if (vin == gn.vin) { + LogPrint("gridnode", "dseg - Sent 1 Gridnode entry to peer %i\n", pfrom->GetId()); + return; + } + } + } + } + + if (vin == CTxIn()) { + pfrom->PushMessage("ssc", GRIDNODE_SYNC_LIST, nInvCount); + LogPrint("gridnode", "dseg - Sent %d Gridnode entries to peer %i\n", nInvCount, pfrom->GetId()); + } + } + /* + * IT'S SAFE TO REMOVE THIS IN FURTHER VERSIONS + * AFTER MIGRATION TO V12 IS DONE + */ + + // Light version for OLD MASSTERNODES - fake pings, no self-activation + else if (strCommand == "dsee") { //ObfuScation Election Entry + + if (IsSporkActive(SPORK_10_GRIDNODE_PAY_UPDATED_NODES)) return; + + CTxIn vin; + CService addr; + CPubKey pubkey; + CPubKey pubkey2; + vector vchSig; + int64_t sigTime; + int count; + int current; + int64_t lastUpdated; + int protocolVersion; + CScript donationAddress; + int donationPercentage; + std::string strMessage; + + vRecv >> vin >> addr >> vchSig >> sigTime >> pubkey >> pubkey2 >> count >> current >> lastUpdated >> protocolVersion >> donationAddress >> donationPercentage; + + // make sure signature isn't in the future (past is OK) + if (sigTime > GetAdjustedTime() + 60 * 60) { + LogPrintf("CGridnodeMan::ProcessMessage() : dsee - Signature rejected, too far into the future %s\n", vin.prevout.hash.ToString()); + Misbehaving(pfrom->GetId(), 1); + return; + } + + std::string vchPubKey(pubkey.begin(), pubkey.end()); + std::string vchPubKey2(pubkey2.begin(), pubkey2.end()); + + strMessage = addr.ToString() + boost::lexical_cast(sigTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(protocolVersion) + donationAddress.ToString() + boost::lexical_cast(donationPercentage); + + if (protocolVersion < GridnodePayments.GetMinGridnodePaymentsProto()) { + LogPrintf("CGridnodeMan::ProcessMessage() : dsee - ignoring outdated Gridnode %s protocol version %d < %d\n", vin.prevout.hash.ToString(), protocolVersion, GridnodePayments.GetMinGridnodePaymentsProto()); + Misbehaving(pfrom->GetId(), 1); + return; + } + + CScript pubkeyScript; + pubkeyScript = GetScriptForDestination(pubkey.GetID()); + + if (pubkeyScript.size() != 25) { + LogPrintf("CGridnodeMan::ProcessMessage() : dsee - pubkey the wrong size\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + CScript pubkeyScript2; + pubkeyScript2 = GetScriptForDestination(pubkey2.GetID()); + + if (pubkeyScript2.size() != 25) { + LogPrintf("CGridnodeMan::ProcessMessage() : dsee - pubkey2 the wrong size\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + if (!vin.scriptSig.empty()) { + LogPrintf("CGridnodeMan::ProcessMessage() : dsee - Ignore Not Empty ScriptSig %s\n", vin.prevout.hash.ToString()); + Misbehaving(pfrom->GetId(), 100); + return; + } + + std::string errorMessage = ""; + if (!obfuScationSigner.VerifyMessage(pubkey, vchSig, strMessage, errorMessage)) { + LogPrintf("CGridnodeMan::ProcessMessage() : dsee - Got bad Gridnode address signature\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + // if (Params().NetworkID() == CBaseChainParams::MAIN) { + // if (addr.GetPort() != 51992) return; + // } else if (addr.GetPort() == 51992) + // return; + + //search existing Gridnode list, this is where we update existing Gridnodes with new dsee broadcasts + CGridnode* pgn = this->Find(vin); + if (pgn != NULL) { + // count == -1 when it's a new entry + // e.g. We don't want the entry relayed/time updated when we're syncing the list + // gn.pubkey = pubkey, IsVinAssociatedWithPubkey is validated once below, + // after that they just need to match + if (count == -1 && pgn->pubKeyCollateralAddress == pubkey && (GetAdjustedTime() - pgn->nLastDsee > GRIDNODE_MIN_MNB_SECONDS)) { + if (pgn->protocolVersion > GETHEADERS_VERSION && sigTime - pgn->lastPing.sigTime < GRIDNODE_MIN_MNB_SECONDS) return; + if (pgn->nLastDsee < sigTime) { //take the newest entry + LogPrint("gridnode", "dsee - Got updated entry for %s\n", vin.prevout.hash.ToString()); + if (pgn->protocolVersion < GETHEADERS_VERSION) { + pgn->pubKeyGridnode = pubkey2; + pgn->sigTime = sigTime; + pgn->sig = vchSig; + pgn->protocolVersion = protocolVersion; + pgn->addr = addr; + //fake ping + pgn->lastPing = CGridnodePing(vin); + } + pgn->nLastDsee = sigTime; + pgn->Check(); + if (pgn->IsEnabled()) { + TRY_LOCK(cs_vNodes, lockNodes); + if (!lockNodes) return; + BOOST_FOREACH (CNode* pnode, vNodes) + if (pnode->nVersion >= GridnodePayments.GetMinGridnodePaymentsProto()) + pnode->PushMessage("dsee", vin, addr, vchSig, sigTime, pubkey, pubkey2, count, current, lastUpdated, protocolVersion, donationAddress, donationPercentage); + } + } + } + + return; + } + + static std::map mapSeenDsee; + if (mapSeenDsee.count(vin.prevout) && mapSeenDsee[vin.prevout] == pubkey) { + LogPrint("gridnode", "dsee - already seen this vin %s\n", vin.prevout.ToString()); + return; + } + mapSeenDsee.insert(make_pair(vin.prevout, pubkey)); + // make sure the vout that was signed is related to the transaction that spawned the Gridnode + // - this is expensive, so it's only done once per Gridnode + if (!obfuScationSigner.IsVinAssociatedWithPubkey(vin, pubkey)) { + LogPrintf("CGridnodeMan::ProcessMessage() : dsee - Got mismatched pubkey and vin\n"); + Misbehaving(pfrom->GetId(), 100); + return; + } + + + LogPrint("gridnode", "dsee - Got NEW OLD Gridnode entry %s\n", vin.prevout.hash.ToString()); + + // make sure it's still unspent + // - this is checked later by .check() in many places and by ThreadCheckObfuScationPool() + + CValidationState state; + CMutableTransaction tx = CMutableTransaction(); + CTxOut vout = CTxOut(2999.99 * COIN, obfuScationPool.collateralPubKey); + tx.vin.push_back(vin); + tx.vout.push_back(vout); + + bool fAcceptable = false; + { + TRY_LOCK(cs_main, lockMain); + if (!lockMain) return; + fAcceptable = AcceptableInputs(mempool, state, CTransaction(tx), false, NULL); + } + + if (fAcceptable) { + if (GetInputAge(vin) < GRIDNODE_MIN_CONFIRMATIONS) { + LogPrintf("CGridnodeMan::ProcessMessage() : dsee - Input must have least %d confirmations\n", GRIDNODE_MIN_CONFIRMATIONS); + Misbehaving(pfrom->GetId(), 20); + return; + } + + // verify that sig time is legit in past + // should be at least not earlier than block when 1000 UNIGRID tx got GRIDNODE_MIN_CONFIRMATIONS + uint256 hashBlock = 0; + CTransaction tx2; + GetTransaction(vin.prevout.hash, tx2, hashBlock, true); + BlockMap::iterator mi = mapBlockIndex.find(hashBlock); + if (mi != mapBlockIndex.end() && (*mi).second) { + CBlockIndex* pMNIndex = (*mi).second; // block for 10000 UNIGRID tx -> 1 confirmation + CBlockIndex* pConfIndex = chainActive[pMNIndex->nHeight + GRIDNODE_MIN_CONFIRMATIONS - 1]; // block where tx got GRIDNODE_MIN_CONFIRMATIONS + if (pConfIndex->GetBlockTime() > sigTime) { + LogPrint("gridnode","gnb - Bad sigTime %d for Gridnode %s (%i conf block is at %d)\n", + sigTime, vin.prevout.hash.ToString(), GRIDNODE_MIN_CONFIRMATIONS, pConfIndex->GetBlockTime()); + return; + } + } + + // use this as a peer + addrman.Add(CAddress(addr), pfrom->addr, 2 * 60 * 60); + + // add Gridnode + CGridnode gn = CGridnode(); + gn.addr = addr; + gn.vin = vin; + gn.pubKeyCollateralAddress = pubkey; + gn.sig = vchSig; + gn.sigTime = sigTime; + gn.pubKeyGridnode = pubkey2; + gn.protocolVersion = protocolVersion; + // fake ping + gn.lastPing = CGridnodePing(vin); + gn.Check(true); + // add v11 Gridnodes, v12 should be added by gnb only + if (protocolVersion < GETHEADERS_VERSION) { + LogPrint("gridnode", "dsee - Accepted OLD Gridnode entry %i %i\n", count, current); + Add(gn); + } + if (gn.IsEnabled()) { + TRY_LOCK(cs_vNodes, lockNodes); + if (!lockNodes) return; + BOOST_FOREACH (CNode* pnode, vNodes) + if (pnode->nVersion >= GridnodePayments.GetMinGridnodePaymentsProto()) + pnode->PushMessage("dsee", vin, addr, vchSig, sigTime, pubkey, pubkey2, count, current, lastUpdated, protocolVersion, donationAddress, donationPercentage); + } + } else { + LogPrint("gridnode","dsee - Rejected Gridnode entry %s\n", vin.prevout.hash.ToString()); + + int nDoS = 0; + if (state.IsInvalid(nDoS)) { + LogPrint("gridnode","dsee - %s from %i %s was not accepted into the memory pool\n", tx.GetHash().ToString().c_str(), + pfrom->GetId(), pfrom->cleanSubVer.c_str()); + if (nDoS > 0) + Misbehaving(pfrom->GetId(), nDoS); + } + } + } + + else if (strCommand == "dseep") { //ObfuScation Election Entry Ping + + if (IsSporkActive(SPORK_10_GRIDNODE_PAY_UPDATED_NODES)) return; + + CTxIn vin; + vector vchSig; + int64_t sigTime; + bool stop; + vRecv >> vin >> vchSig >> sigTime >> stop; + + //LogPrint("gridnode","dseep - Received: vin: %s sigTime: %lld stop: %s\n", vin.ToString().c_str(), sigTime, stop ? "true" : "false"); + + if (sigTime > GetAdjustedTime() + 60 * 60) { + LogPrintf("CGridnodeMan::ProcessMessage() : dseep - Signature rejected, too far into the future %s\n", vin.prevout.hash.ToString()); + Misbehaving(pfrom->GetId(), 1); + return; + } + + if (sigTime <= GetAdjustedTime() - 60 * 60) { + LogPrintf("CGridnodeMan::ProcessMessage() : dseep - Signature rejected, too far into the past %s - %d %d \n", vin.prevout.hash.ToString(), sigTime, GetAdjustedTime()); + Misbehaving(pfrom->GetId(), 1); + return; + } + + std::map::iterator i = mWeAskedForGridnodeListEntry.find(vin.prevout); + if (i != mWeAskedForGridnodeListEntry.end()) { + int64_t t = (*i).second; + if (GetTime() < t) return; // we've asked recently + } + + // see if we have this Gridnode + CGridnode* pgn = this->Find(vin); + if (pgn != NULL && pgn->protocolVersion >= GridnodePayments.GetMinGridnodePaymentsProto()) { + // LogPrint("gridnode","dseep - Found corresponding gn for vin: %s\n", vin.ToString().c_str()); + // take this only if it's newer + if (sigTime - pgn->nLastDseep > GRIDNODE_MIN_MNP_SECONDS) { + std::string strMessage = pgn->addr.ToString() + boost::lexical_cast(sigTime) + boost::lexical_cast(stop); + + std::string errorMessage = ""; + if (!obfuScationSigner.VerifyMessage(pgn->pubKeyGridnode, vchSig, strMessage, errorMessage)) { + LogPrint("gridnode","dseep - Got bad Gridnode address signature %s \n", vin.prevout.hash.ToString()); + //Misbehaving(pfrom->GetId(), 100); + return; + } + + // fake ping for v11 Gridnodes, ignore for v12 + if (pgn->protocolVersion < GETHEADERS_VERSION) pgn->lastPing = CGridnodePing(vin); + pgn->nLastDseep = sigTime; + pgn->Check(); + if (pgn->IsEnabled()) { + TRY_LOCK(cs_vNodes, lockNodes); + if (!lockNodes) return; + LogPrint("gridnode", "dseep - relaying %s \n", vin.prevout.hash.ToString()); + BOOST_FOREACH (CNode* pnode, vNodes) + if (pnode->nVersion >= GridnodePayments.GetMinGridnodePaymentsProto()) + pnode->PushMessage("dseep", vin, vchSig, sigTime, stop); + } + } + return; + } + + LogPrint("gridnode", "dseep - Couldn't find Gridnode entry %s peer=%i\n", vin.prevout.hash.ToString(), pfrom->GetId()); + + AskForMN(pfrom, vin); + } + + /* + * END OF "REMOVE" + */ +} + +void CGridnodeMan::Remove(CTxIn vin) +{ + LOCK(cs); + + vector::iterator it = vGridnodes.begin(); + while (it != vGridnodes.end()) { + if ((*it).vin == vin) { + LogPrint("gridnode", "CGridnodeMan: Removing Gridnode %s - %i now\n", (*it).vin.prevout.hash.ToString(), size() - 1); + vGridnodes.erase(it); + break; + } + ++it; + } +} + +void CGridnodeMan::UpdateGridnodeList(CGridnodeBroadcast gnb) +{ + mapSeenGridnodePing.insert(make_pair(gnb.lastPing.GetHash(), gnb.lastPing)); + mapSeenGridnodeBroadcast.insert(make_pair(gnb.GetHash(), gnb)); + GridnodeSync.AddedGridnodeList(gnb.GetHash()); + + LogPrint("gridnode","CGridnodeMan::UpdateGridnodeList() -- gridnode=%s\n", gnb.vin.prevout.ToString()); + + CGridnode* pgn = Find(gnb.vin); + if (pgn == NULL) { + CGridnode gn(gnb); + Add(gn); + } else { + pgn->UpdateFromNewBroadcast(gnb); + } +} + +std::string CGridnodeMan::ToString() const +{ + std::ostringstream info; + + info << "Gridnodes: " << (int)vGridnodes.size() << ", peers who asked us for Gridnode list: " << (int)mAskedUsForGridnodeList.size() << ", peers we asked for Gridnode list: " << (int)mWeAskedForGridnodeList.size() << ", entries in Gridnode list we asked for: " << (int)mWeAskedForGridnodeListEntry.size() << ", nDsqCount: " << (int)nDsqCount; + + return info.str(); +} diff --git a/daemon/gridnodeman.h b/daemon/gridnodeman.h new file mode 100644 index 000000000000..8162d9952269 --- /dev/null +++ b/daemon/gridnodeman.h @@ -0,0 +1,163 @@ +// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2015-2018 The PIVX developers +// Copyright (c) 2018-2019 The UNIGRID organization +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef GRIDNODEMAN_H +#define GRIDNODEMAN_H + +#include "base58.h" +#include "key.h" +#include "main.h" +#include "gridnode.h" +#include "net.h" +#include "sync.h" +#include "util.h" + +#define GRIDNODES_DUMP_SECONDS (15 * 60) +#define GRIDNODES_DSEG_SECONDS (3 * 60 * 60) + +using namespace std; + +class CGridnodeMan; + +extern CGridnodeMan gnodeman; +void DumpGridnodes(); + +/** Access to the GN database (gncache.dat) + */ +class CGridnodeDB +{ +private: + boost::filesystem::path pathMN; + std::string strMagicMessage; + +public: + enum ReadResult { + Ok, + FileError, + HashReadError, + IncorrectHash, + IncorrectMagicMessage, + IncorrectMagicNumber, + IncorrectFormat + }; + + CGridnodeDB(); + bool Write(const CGridnodeMan& gnodemanToSave); + ReadResult Read(CGridnodeMan& gnodemanToLoad, bool fDryRun = false); +}; + +class CGridnodeMan +{ +private: + // critical section to protect the inner data structures + mutable CCriticalSection cs; + + // critical section to protect the inner data structures specifically on messaging + mutable CCriticalSection cs_process_message; + + // map to hold all MNs + std::vector vGridnodes; + // who's asked for the Gridnode list and the last time + std::map mAskedUsForGridnodeList; + // who we asked for the Gridnode list and the last time + std::map mWeAskedForGridnodeList; + // which Gridnodes we've asked for + std::map mWeAskedForGridnodeListEntry; + +public: + // Keep track of all broadcasts I've seen + map mapSeenGridnodeBroadcast; + // Keep track of all pings I've seen + map mapSeenGridnodePing; + + // keep track of dsq count to prevent Gridnodes from gaming obfuscation queue + int64_t nDsqCount; + + ADD_SERIALIZE_METHODS; + + template + inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) + { + LOCK(cs); + READWRITE(vGridnodes); + READWRITE(mAskedUsForGridnodeList); + READWRITE(mWeAskedForGridnodeList); + READWRITE(mWeAskedForGridnodeListEntry); + READWRITE(nDsqCount); + + READWRITE(mapSeenGridnodeBroadcast); + READWRITE(mapSeenGridnodePing); + } + + CGridnodeMan(); + CGridnodeMan(CGridnodeMan& other); + + /// Add an entry + bool Add(CGridnode& gn); + + /// Ask (source) node for gnb + void AskForMN(CNode* pnode, CTxIn& vin); + + /// Check all Gridnodes + void Check(); + + /// Check all Gridnodes and remove inactive + void CheckAndRemove(bool forceExpiredRemoval = false); + + /// Clear Gridnode vector + void Clear(); + + int CountEnabled(int protocolVersion = -1); + + void CountNetworks(int protocolVersion, int& ipv4, int& ipv6, int& onion); + + void DsegUpdate(CNode* pnode); + + /// Find an entry + CGridnode* Find(const CScript& payee); + CGridnode* Find(const CTxIn& vin); + CGridnode* Find(const CPubKey& pubKeyGridnode); + + /// Find an entry in the gridnode list that is next to be paid + CGridnode* GetNextGridnodeInQueueForPayment(int nBlockHeight, bool fFilterSigTime, int& nCount); + + /// Find a random entry + CGridnode* FindRandomNotInVec(std::vector& vecToExclude, int protocolVersion = -1); + + /// Get the current winner for this block + CGridnode* GetCurrentGridnode(int mod = 1, int64_t nBlockHeight = 0, int minProtocol = 0); + + std::vector GetFullGridnodeVector() + { + Check(); + return vGridnodes; + } + + std::vector > GetGridnodeRanks(int64_t nBlockHeight, int minProtocol = 0); + int GetGridnodeRank(const CTxIn& vin, int64_t nBlockHeight, int minProtocol = 0, bool fOnlyActive = true); + CGridnode* GetGridnodeByRank(int nRank, int64_t nBlockHeight, int minProtocol = 0, bool fOnlyActive = true); + + void ProcessGridnodeConnections(); + + void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); + + /// Return the number of (unique) Gridnodes + int size() { return vGridnodes.size(); } + + /// Return the number of Gridnodes older than (default) 8000 seconds + int stable_size (); + + std::string ToString() const; + + void Remove(CTxIn vin); + + int GetEstimatedGridnodes(int nBlock); + + /// Update gridnode list and maps using provided CGridnodeBroadcast + void UpdateGridnodeList(CGridnodeBroadcast gnb); +}; + +#endif diff --git a/daemon/httpserver.cpp b/daemon/httpserver.cpp index fc93d8362ca3..ffe85044439d 100644 --- a/daemon/httpserver.cpp +++ b/daemon/httpserver.cpp @@ -22,6 +22,8 @@ #include #include +#include + #include #include #include @@ -73,7 +75,7 @@ class WorkQueue /** Mutex protects entire object */ CWaitableCriticalSection cs; CConditionVariable cond; - /* XXX in C++11 we can use std::unique_ptr here and avoid manual cleanup */ + /* XXX in c++17 we can use std::unique_ptr here and avoid manual cleanup */ std::deque queue; bool running; size_t maxDepth; diff --git a/daemon/init.cpp b/daemon/init.cpp index e7724d78ad44..cb7aaf99270d 100644 --- a/daemon/init.cpp +++ b/daemon/init.cpp @@ -14,7 +14,7 @@ #include "accumulatorcheckpoints.h" #include "accumulators.h" -#include "activemasternode.h" +#include "activegridnode.h" #include "addrman.h" #include "amount.h" #include "bsarchive.h" @@ -26,10 +26,10 @@ #include "invalid.h" #include "key.h" #include "main.h" -#include "masternode-budget.h" -#include "masternode-payments.h" -#include "masternodeconfig.h" -#include "masternodeman.h" +#include "gridnode-budget.h" +#include "gridnode-payments.h" +#include "gridnodeconfig.h" +#include "gridnodeman.h" #include "miner.h" #include "net.h" #include "rpcserver.h" @@ -224,9 +224,9 @@ void PrepareShutdown() GenerateBitcoins(false, NULL, 0); #endif StopNode(); - DumpMasternodes(); + DumpGridnodes(); DumpBudgets(); - DumpMasternodePayments(); + DumpGridnodePayments(); UnregisterNodeSignals(GetNodeSignals()); if (fFeeEstimatesInitialized) { @@ -369,25 +369,22 @@ void OnRPCPreCommand(const CRPCCommand& cmd) throw JSONRPCError(RPC_FORBIDDEN_BY_SAFE_MODE, string("Safe mode: ") + strWarning); } -static void ImportLegacyFile(std::vector fromFileNames, std::string toFileName, std::string status) +static void RenameLegacyFile(std::string fromFileName, std::string toFileName, std::string status) { - /* Should we try to import from the old legacy HUZU wallet? */ + /* Check if file has already been renamed */ boost::filesystem::path to = GetDataDir() / toFileName; - if (!filesystem::exists(to)) { + if (!filesystem::exists(to)) { boost::filesystem::path from; - for (std::string fn : fromFileNames) { - if (filesystem::exists(GetDefaultDataDir("HUZU") / fn)) { - from = GetDefaultDataDir("HUZU") / fn; - break; - } + if (filesystem::exists(GetDataDir() / fromFileName)) { + from = GetDataDir() / fromFileName; } /* Did we find something to import ? */ if (!from.empty()) { uiInterface.InitMessage(status); - boost::filesystem::copy_file(from, to); + boost::filesystem::rename(from, to); } } } @@ -439,6 +436,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-dnsseed", _("Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)")); strUsage += HelpMessageOpt("-externalip=", _("Specify your own public address")); strUsage += HelpMessageOpt("-forcednsseed", strprintf(_("Always query for peer addresses via DNS lookup (default: %u)"), 0)); + strUsage += HelpMessageOpt("-hport=", _("Hedgehog port")); strUsage += HelpMessageOpt("-listen", _("Accept connections from outside (default: 1 if no -proxy or -connect)")); strUsage += HelpMessageOpt("-listenonion", strprintf(_("Automatically create Tor hidden service (default: %d)"), DEFAULT_LISTEN_ONION)); strUsage += HelpMessageOpt("-maxconnections=", strprintf(_("Maintain at most connections to peers (default: %u)"), 250)); @@ -521,7 +519,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-sporkkey=", _("Enable spork administration functionality with the appropriate private key.") + strprintf(_("On the testnet, the spork key can be signed with the key \"%s\"."), "69qADuX8688KnzdNm2BqyV9YYeyEPpoqhbrJrcHNbJ6wrznc6Yz")); } - string debugCategories = "addrman, alert, bench, coindb, db, lock, rand, rpc, selectcoins, tor, mempool, net, proxy, http, libevent, unigrid, (obfuscation, swiftx, masternode, mnpayments, mnbudget, zero)"; // Don't translate these and qt below + string debugCategories = "addrman, alert, bench, coindb, db, lock, rand, rpc, selectcoins, tor, mempool, net, proxy, http, libevent, unigrid, (obfuscation, swiftx, gridnode, gnpayments, gnbudget, zero)"; // Don't translate these and qt below if (mode == HMM_BITCOIN_QT) debugCategories += ", qt"; strUsage += HelpMessageOpt("-debug=", strprintf(_("Output debugging information (default: %u, supplying is optional)"), 0) + ". " + @@ -551,7 +549,7 @@ std::string HelpMessage(HelpMessageMode mode) } strUsage += HelpMessageOpt("-shrinkdebugfile", _("Shrink debug.log file on client startup (default: 1 when no -debug)")); strUsage += HelpMessageOpt("-testnet", _("Use the test network")); - strUsage += HelpMessageOpt("-litemode=", strprintf(_("Disable all UNIGRID specific functionality (Masternodes, Zerocoin, SwiftX, Budgeting) (0-1, default: %u)"), 0)); + strUsage += HelpMessageOpt("-litemode=", strprintf(_("Disable all UNIGRID specific functionality (Gridnodes, Zerocoin, SwiftX, Budgeting) (0-1, default: %u)"), 0)); #ifdef ENABLE_WALLET strUsage += HelpMessageGroup(_("Staking options:")); @@ -565,12 +563,12 @@ std::string HelpMessage(HelpMessageMode mode) } #endif - strUsage += HelpMessageGroup(_("Masternode options:")); - strUsage += HelpMessageOpt("-masternode=", strprintf(_("Enable the client to act as a masternode (0-1, default: %u)"), 0)); - strUsage += HelpMessageOpt("-mnconf=", strprintf(_("Specify masternode configuration file (default: %s)"), "masternode.conf")); - strUsage += HelpMessageOpt("-mnconflock=", strprintf(_("Lock masternodes from masternode configuration file (default: %u)"), 1)); - strUsage += HelpMessageOpt("-masternodeprivkey=", _("Set the masternode private key")); - strUsage += HelpMessageOpt("-masternodeaddr=", strprintf(_("Set external address:port to get to this masternode (example: %s)"), "128.127.106.235:51992")); + strUsage += HelpMessageGroup(_("Gridnode options:")); + strUsage += HelpMessageOpt("-gridnode=", strprintf(_("Enable the client to act as a gridnode (0-1, default: %u)"), 0)); + strUsage += HelpMessageOpt("-gnconf=", strprintf(_("Specify gridnode configuration file (default: %s)"), "gridnode.conf")); + strUsage += HelpMessageOpt("-gnconflock=", strprintf(_("Lock Gridnodes from gridnode configuration file (default: %u)"), 1)); + strUsage += HelpMessageOpt("-gridnodeprivkey=", _("Set the gridnode private key")); + strUsage += HelpMessageOpt("-gridnodeaddr=", strprintf(_("Set external address:port to get to this gridnode (example: %s)"), "128.127.106.235:51992")); strUsage += HelpMessageOpt("-budgetvotemode=", _("Change automatic finalized budget voting behavior. mode=auto: Vote for only exact finalized budget match to my generated budget. (string, default: auto)")); strUsage += HelpMessageGroup(_("Zerocoin options:")); @@ -623,7 +621,7 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-loadblock=/web", strprintf(_("Import blocks from external bootstrap file or *.bsa archive (default: %u)"), UNIGRIDCORE_BOOTSTRAP_LOCATION)); - + strUsage += HelpMessageOpt("-nobootstrap", "no bootstrap"); return strUsage; } @@ -718,7 +716,13 @@ void ThreadImport(std::vector arguments) filesystem::path chainstateDir = GetDataDir() / "chainstate"; if (!boost::filesystem::exists(blocksDir) || !boost::filesystem::exists(chainstateDir)) { - downloadBootstrap = true; + if (Params().NetworkID() != CBaseChainParams::TESTNET) { + downloadBootstrap = true; + LogPrintf("Download bootstrap.\n"); + } else { + downloadBootstrap = false; + LogPrintf("Testnet, don't download bootstrap.\n"); + } } // Download bootstrap archive from the project web site @@ -1187,25 +1191,25 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) int64_t nStart; - // ********************************************************* Step 4.5: Masternode configuration handling - std::string strMasternodeFile = GetArg("-mnconf", "masternode.conf"); - std::string status = _("Importing masternode configuration from the old HUZU wallet..."); - std::vector fileNames = {strMasternodeFile, "masternode.conf"}; - ImportLegacyFile(fileNames, strMasternodeFile, status); - - // parse masternode.conf + // ********************************************************* Step 4.5: Gridnode configuration handling + std::string strGridnodeFile = GetArg("-gnconf", "gridnode.conf"); + std::string status = _("Renaming legacy masternode.conf to gridnode.conf..."); + std::string fileName = "masternode.conf"; + RenameLegacyFile(fileName, strGridnodeFile, status); + // parse gridnode.conf std::string strErr; - if (!masternodeConfig.read(strErr)) { - return InitError(strprintf(_("Error reading masternode configuration file: %s"), strErr.c_str())); + if (!GridnodeConfig.read(strErr)) { + return InitError(strprintf(_("Error reading gridnode configuration file: %s"), strErr.c_str())); return false; } // ********************************************************* Step 5: Backup wallet and verify wallet database integrity #ifdef ENABLE_WALLET if (!fDisableWallet) { - std::string status = _("Importing wallet data file from the old HUZU wallet..."); - std::vector fileNames = {strWalletFile, "wallet.dat"}; - ImportLegacyFile(fileNames, strWalletFile, status); + std::string strGridnodeFile = GetArg("-gnconf", "gridnode.conf"); + std::string status = _("Renaming legacy masternode.conf to gridnode.conf..."); + std::string fileName = "masternode.conf"; + RenameLegacyFile(fileName, strGridnodeFile, status); filesystem::path backupDir = GetDataDir() / "backups"; if (!filesystem::exists(backupDir)) { @@ -1523,7 +1527,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) bool fReset = fReindex; std::string strLoadError; - if (!downloadBootstrap) { + if (GetBoolArg("-nobootstrap", false) || !downloadBootstrap) { try { UnloadBlockIndex(); delete pcoinsTip; @@ -1535,12 +1539,15 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // UNIGRID specific: zerocoin and spork DB's zerocoinDB = new CZerocoinDB(0, false, fReindex); - pSporkDB = new CSporkDB(0, false, false); + pSporkDB = new CSporkDB(0, false, false); - pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex); pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReindex); pcoinscatcher = new CCoinsViewErrorCatcher(pcoinsdbview); pcoinsTip = new CCoinsViewCache(pcoinscatcher); + if (!boost::filesystem::exists(GetDataDir() / "blocks")) { + boost::filesystem::create_directory(GetDataDir() / "blocks"); + } + pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex); if (fReindex) pblocktree->WriteReindexing(true); @@ -1553,6 +1560,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // bootstrappingStatus = "loading"; string strBlockIndexError = ""; + LogPrintf("Checking block index...\n"); if (!LoadBlockIndex(strBlockIndexError)) { strLoadError = _("Error loading block database"); strLoadError = strprintf("%s : %s", strLoadError, strBlockIndexError); @@ -1566,6 +1574,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // Initialize the block index (no-op if non-empty database was already loaded) if (!InitBlockIndex()) { + LogPrintf("error initializing block database"); strLoadError = _("Error initializing block database"); break; } @@ -1637,7 +1646,7 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) break; } } catch (std::exception& e) { - if (fDebug) LogPrintf("%s\n", e.what()); + if (fDebug) LogPrintf("exception: %s\n", e.what()); strLoadError = _("Error opening block database"); fVerifyingBlocks = false; @@ -1867,15 +1876,15 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) // ********************************************************* Step 10: setup ObfuScation - uiInterface.InitMessage(_("Loading masternode cache...")); + uiInterface.InitMessage(_("Loading gridnode cache...")); - CMasternodeDB mndb; - CMasternodeDB::ReadResult readResult = mndb.Read(mnodeman); - if (readResult == CMasternodeDB::FileError) - LogPrintf("Missing masternode cache file - mncache.dat, will try to recreate\n"); - else if (readResult != CMasternodeDB::Ok) { - LogPrintf("Error reading mncache.dat: "); - if (readResult == CMasternodeDB::IncorrectFormat) + CGridnodeDB gndb; + CGridnodeDB::ReadResult readResult = gndb.Read(gnodeman); + if (readResult == CGridnodeDB::FileError) + LogPrintf("Missing gridnode cache file - gncache.dat, will try to recreate\n"); + else if (readResult != CGridnodeDB::Ok) { + LogPrintf("Error reading gncache.dat: "); + if (readResult == CGridnodeDB::IncorrectFormat) LogPrintf("magic is ok but data has invalid format, will try to recreate\n"); else LogPrintf("file format is unknown or invalid, please fix it manually\n"); @@ -1901,70 +1910,70 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) budget.ClearSeen(); - uiInterface.InitMessage(_("Loading masternode payment cache...")); + uiInterface.InitMessage(_("Loading gridnode payment cache...")); - CMasternodePaymentDB mnpayments; - CMasternodePaymentDB::ReadResult readResult3 = mnpayments.Read(masternodePayments); + CGridnodePaymentDB gnpayments; + CGridnodePaymentDB::ReadResult readResult3 = gnpayments.Read(GridnodePayments); - if (readResult3 == CMasternodePaymentDB::FileError) - LogPrintf("Missing masternode payment cache - mnpayments.dat, will try to recreate\n"); - else if (readResult3 != CMasternodePaymentDB::Ok) { - LogPrintf("Error reading mnpayments.dat: "); - if (readResult3 == CMasternodePaymentDB::IncorrectFormat) + if (readResult3 == CGridnodePaymentDB::FileError) + LogPrintf("Missing gridnode payment cache - gnpayments.dat, will try to recreate\n"); + else if (readResult3 != CGridnodePaymentDB::Ok) { + LogPrintf("Error reading gnpayments.dat: "); + if (readResult3 == CGridnodePaymentDB::IncorrectFormat) LogPrintf("magic is ok but data has invalid format, will try to recreate\n"); else LogPrintf("file format is unknown or invalid, please fix it manually\n"); } - fMasterNode = GetBoolArg("-masternode", false); + fGridnode = GetBoolArg("-gridnode", false); - if ((fMasterNode || masternodeConfig.getCount() > -1) && fTxIndex == false) { - return InitError("Enabling Masternode support requires turning on transaction indexing." + if ((fGridnode || GridnodeConfig.getCount() > -1) && fTxIndex == false) { + return InitError("Enabling Gridnode support requires turning on transaction indexing." "Please add txindex=1 to your configuration and start with -reindex"); } - if (fMasterNode) { + if (fGridnode) { LogPrintf("IS MASTER NODE\n"); - strMasterNodeAddr = GetArg("-masternodeaddr", ""); + strGridnodeAddr = GetArg("-gridnodeaddr", ""); - LogPrintf(" addr %s\n", strMasterNodeAddr.c_str()); + LogPrintf(" addr %s\n", strGridnodeAddr.c_str()); - if (!strMasterNodeAddr.empty()) { - CService addrTest = CService(strMasterNodeAddr); + if (!strGridnodeAddr.empty()) { + CService addrTest = CService(strGridnodeAddr); if (!addrTest.IsValid()) { - return InitError("Invalid -masternodeaddr address: " + strMasterNodeAddr); + return InitError("Invalid -gridnodeaddr address: " + strGridnodeAddr); } } - strMasterNodePrivKey = GetArg("-masternodeprivkey", ""); - if (!strMasterNodePrivKey.empty()) { + strGridnodePrivKey = GetArg("-gridnodeprivkey", ""); + if (!strGridnodePrivKey.empty()) { std::string errorMessage; CKey key; CPubKey pubkey; - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, errorMessage, key, pubkey)) { - return InitError(_("Invalid masternodeprivkey. Please see documenation.")); + if (!obfuScationSigner.SetKey(strGridnodePrivKey, errorMessage, key, pubkey)) { + return InitError(_("Invalid gridnodeprivkey. Please see documenation.")); } - activeMasternode.pubKeyMasternode = pubkey; + activeGridnode.pubKeyGridnode = pubkey; } else { - return InitError(_("You must specify a masternodeprivkey in the configuration. Please see documentation for help.")); + return InitError(_("You must specify a gridnodeprivkey in the configuration. Please see documentation for help.")); } } - // get the mode of budget voting for this masternode + // get the mode of budget voting for this gridnode strBudgetMode = GetArg("-budgetvotemode", "auto"); - if (GetBoolArg("-mnconflock", true) && pwalletMain) { + if (GetBoolArg("-gnconflock", true) && pwalletMain) { LOCK(pwalletMain->cs_wallet); - LogPrintf("Locking Masternodes:\n"); - uint256 mnTxHash; - BOOST_FOREACH (CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - LogPrintf(" %s %s\n", mne.getTxHash(), mne.getOutputIndex()); - mnTxHash.SetHex(mne.getTxHash()); - COutPoint outpoint = COutPoint(mnTxHash, boost::lexical_cast(mne.getOutputIndex())); + LogPrintf("Locking Gridnodes:\n"); + uint256 gnTxHash; + BOOST_FOREACH (CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { + LogPrintf(" %s %s\n", gne.getTxHash(), gne.getOutputIndex()); + gnTxHash.SetHex(gne.getTxHash()); + COutPoint outpoint = COutPoint(gnTxHash, boost::lexical_cast(gne.getOutputIndex())); pwalletMain->LockCoin(outpoint); } } @@ -2000,10 +2009,10 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler) nSwiftTXDepth = GetArg("-swifttxdepth", nSwiftTXDepth); nSwiftTXDepth = std::min(std::max(nSwiftTXDepth, 0), 60); - // lite mode disables all Masternode and Obfuscation related functionality + // lite mode disables all Gridnode and Obfuscation related functionality fLiteMode = GetBoolArg("-litemode", false); - if (fMasterNode && fLiteMode) { - return InitError("You can not start a masternode in litemode"); + if (fGridnode && fLiteMode) { + return InitError("You can not start a gridnode in litemode"); } LogPrintf("fLiteMode %d\n", fLiteMode); diff --git a/daemon/kernel.cpp b/daemon/kernel.cpp index f81b21808a04..76c61be5dd9a 100644 --- a/daemon/kernel.cpp +++ b/daemon/kernel.cpp @@ -17,7 +17,7 @@ using namespace std; -bool fTestNet = false; //Params().NetworkID() == CBaseChainParams::TESTNET; +//bool fTestNet = false; //Params().NetworkID() == CBaseChainParams::TESTNET; // Modifier interval: time to elapse before new modifier is computed // Set to 3-hour for production network and 20-minute for test network @@ -38,7 +38,7 @@ static std::map mapStakeModifierCheckpoints = // Get time weight int64_t GetWeight(int64_t nIntervalBeginning, int64_t nIntervalEnd) { - return nIntervalEnd - nIntervalBeginning - nStakeMinAge; + return nIntervalEnd - nIntervalBeginning - Params().GetStakeMinAge(); } // Get the last stake modifier and its generation time from a given block @@ -59,13 +59,16 @@ static bool GetLastStakeModifier(const CBlockIndex* pindex, uint64_t& nStakeModi static int64_t GetStakeModifierSelectionIntervalSection(int nSection) { assert(nSection >= 0 && nSection < 64); - int64_t a = getIntervalVersion(fTestNet) * 63 / (63 + ((63 - nSection) * (MODIFIER_INTERVAL_RATIO - 1))); + int64_t a = getIntervalVersion(Params().NetworkID() == CBaseChainParams::TESTNET) * 63 / (63 + ((63 - nSection) * (MODIFIER_INTERVAL_RATIO - 1))); return a; } // Get stake modifier selection interval (in seconds) static int64_t GetStakeModifierSelectionInterval() { + if (Params().NetworkID() == CBaseChainParams::TESTNET) { + return 60; + } int64_t nSelectionInterval = 0; for (int nSection = 0; nSection < 64; nSection++) { nSelectionInterval += GetStakeModifierSelectionIntervalSection(nSection); @@ -173,14 +176,14 @@ bool ComputeNextStakeModifier(const CBlockIndex* pindexPrev, uint64_t& nStakeMod if (GetBoolArg("-printstakemodifier", false)) LogPrintf("ComputeNextStakeModifier: prev modifier= %s time=%s\n", boost::lexical_cast(nStakeModifier).c_str(), DateTimeStrFormat("%Y-%m-%d %H:%M:%S", nModifierTime).c_str()); - if (nModifierTime / getIntervalVersion(fTestNet) >= pindexPrev->GetBlockTime() / getIntervalVersion(fTestNet)) + if (nModifierTime / getIntervalVersion(Params().NetworkID() == CBaseChainParams::TESTNET) >= pindexPrev->GetBlockTime() / getIntervalVersion(Params().NetworkID() == CBaseChainParams::TESTNET)) return true; // Sort candidate blocks by timestamp vector > vSortedByTimestamp; - vSortedByTimestamp.reserve(64 * getIntervalVersion(fTestNet) / nStakeTargetSpacing); + vSortedByTimestamp.reserve(64 * getIntervalVersion(Params().NetworkID() == CBaseChainParams::TESTNET) / nStakeTargetSpacing); int64_t nSelectionInterval = GetStakeModifierSelectionInterval(); - int64_t nSelectionIntervalStart = (pindexPrev->GetBlockTime() / getIntervalVersion(fTestNet)) * getIntervalVersion(fTestNet) - nSelectionInterval; + int64_t nSelectionIntervalStart = (pindexPrev->GetBlockTime() / getIntervalVersion(Params().NetworkID() == CBaseChainParams::TESTNET)) * getIntervalVersion(Params().NetworkID() == CBaseChainParams::TESTNET) - nSelectionInterval; const CBlockIndex* pindex = pindexPrev; while (pindex && pindex->GetBlockTime() >= nSelectionIntervalStart) { @@ -246,6 +249,7 @@ bool ComputeNextStakeModifier(const CBlockIndex* pindexPrev, uint64_t& nStakeMod // modifier about a selection interval later than the coin generating the kernel bool GetKernelStakeModifier(uint256 hashBlockFrom, uint64_t& nStakeModifier, int& nStakeModifierHeight, int64_t& nStakeModifierTime, bool fPrintProofOfStake) { + //LogPrintf("eeeeeeee %ld", hashBlockFrom); nStakeModifier = 0; if (!mapBlockIndex.count(hashBlockFrom)) return error("GetKernelStakeModifier() : block not indexed"); @@ -255,7 +259,6 @@ bool GetKernelStakeModifier(uint256 hashBlockFrom, uint64_t& nStakeModifier, int int64_t nStakeModifierSelectionInterval = GetStakeModifierSelectionInterval(); const CBlockIndex* pindex = pindexFrom; CBlockIndex* pindexNext = chainActive[pindexFrom->nHeight + 1]; - int nCount = 0; // loop to find the stake modifier later by a selection interval while (nStakeModifierTime < pindexFrom->GetBlockTime() + nStakeModifierSelectionInterval) { @@ -301,9 +304,9 @@ bool Stake(CStakeInput* stakeInput, unsigned int nBits, unsigned int nTimeBlockF if (nTimeTx < nTimeBlockFrom) return error("CheckStakeKernelHash() : nTime violation"); - if (nTimeBlockFrom + nStakeMinAge > nTimeTx) // Min age requirement - return error("CheckStakeKernelHash() : min age violation - nTimeBlockFrom=%d nStakeMinAge=%d nTimeTx=%d", - nTimeBlockFrom, nStakeMinAge, nTimeTx); + if (nTimeBlockFrom + Params().GetStakeMinAge() > nTimeTx) // Min age requirement + return error("CheckStakeKernelHash() : min age violation - nTimeBlockFrom=%d Params().GetStakeMinAge()=%d nTimeTx=%d", + nTimeBlockFrom, Params().GetStakeMinAge(), nTimeTx); //grab difficulty uint256 bnTargetPerCoinDay; @@ -428,7 +431,7 @@ unsigned int GetStakeModifierChecksum(const CBlockIndex* pindex) // Check stake modifier hard checkpoints bool CheckStakeModifierCheckpoints(int nHeight, unsigned int nStakeModifierChecksum) { - if (fTestNet) return true; // Testnet has no checkpoints + if (Params().NetworkID() == CBaseChainParams::TESTNET) return true; // Testnet has no checkpoints if (mapStakeModifierCheckpoints.count(nHeight)) { return nStakeModifierChecksum == mapStakeModifierCheckpoints[nHeight]; } diff --git a/daemon/kernel.h b/daemon/kernel.h index 6b2798c5a876..683c79f14a14 100644 --- a/daemon/kernel.h +++ b/daemon/kernel.h @@ -12,7 +12,7 @@ // MODIFIER_INTERVAL: time to elapse before new modifier is computed static const unsigned int MODIFIER_INTERVAL = 60; -static const unsigned int MODIFIER_INTERVAL_TESTNET = 60; +static const unsigned int MODIFIER_INTERVAL_TESTNET = 1; extern unsigned int nModifierInterval; extern unsigned int getIntervalVersion(bool fTestNet); diff --git a/daemon/libzerocoin/SpendType.h b/daemon/libzerocoin/SpendType.h index 439af2b6934c..3dd6798b5af9 100644 --- a/daemon/libzerocoin/SpendType.h +++ b/daemon/libzerocoin/SpendType.h @@ -12,7 +12,7 @@ namespace libzerocoin { enum SpendType : uint8_t { SPEND, // Used for a typical spend transaction, zUNIGRID should be unusable after STAKE, // Used for a spend that occurs as a stake - MN_COLLATERAL, // Used when proving ownership of zUNIGRID that will be used for masternodes (future) + MN_COLLATERAL, // Used when proving ownership of zUNIGRID that will be used for Gridnodes (future) SIGN_MESSAGE // Used to sign messages that do not belong above (future) }; } diff --git a/daemon/limitedmap.h b/daemon/limitedmap.h index 03727d7c4256..5b5c6bc80117 100644 --- a/daemon/limitedmap.h +++ b/daemon/limitedmap.h @@ -63,7 +63,7 @@ class limitedmap } void update(const_iterator itIn, const mapped_type& v) { - // TODO: When we switch to C++11, use map.erase(itIn, itIn) to get the non-const iterator. + // TODO: When we switch to c++17, use map.erase(itIn, itIn) to get the non-const iterator. iterator itTarget = map.find(itIn->first); if (itTarget == map.end()) return; diff --git a/daemon/main.cpp b/daemon/main.cpp index 018aae59d929..0e1ce9a1b02f 100644 --- a/daemon/main.cpp +++ b/daemon/main.cpp @@ -17,15 +17,16 @@ #include "chainparams.h" #include "checkpoints.h" #include "checkqueue.h" +#include "gridnode-budget.h" +#include "gridnode-payments.h" +#include "gridnodeman.h" #include "init.h" #include "kernel.h" -#include "masternode-budget.h" -#include "masternode-payments.h" -#include "masternodeman.h" #include "merkleblock.h" #include "net.h" #include "obfuscation.h" #include "pow.h" +#include "restclient.h" #include "spork.h" #include "sporkdb.h" #include "supplycache.h" @@ -47,9 +48,11 @@ #include #include +#include #include #include #include +#include #include using namespace boost; @@ -81,7 +84,6 @@ bool fVerifyingBlocks = false; unsigned int nCoinCacheSize = 5000; bool fAlerts = DEFAULT_ALERTS; -unsigned int nStakeMinAge = 60 * 60; int64_t nReserveBalance = 0; /** Fees smaller than this (in upiv) are considered zero fee (for relaying and mining) @@ -98,7 +100,7 @@ struct COrphanTx { map mapOrphanTransactions; map > mapOrphanTransactionsByPrev; map mapRejectedBlocks; -map mapZerocoinspends; //txid, time received +map mapZerocoinspends; // txid, time received void EraseOrphansFor(NodeId peer); @@ -132,9 +134,9 @@ struct CBlockIndexWorkComparator { CBlockIndex* pindexBestInvalid; /** - * The set of all CBlockIndex entries with BLOCK_VALID_TRANSACTIONS (for itself and all ancestors) and - * as good as our current tip or better. Entries may be failed, though. - */ + * The set of all CBlockIndex entries with BLOCK_VALID_TRANSACTIONS (for itself and all ancestors) and + * as good as our current tip or better. Entries may be failed, though. + */ set setBlockIndexCandidates; /** Number of nodes with fSyncStarted. */ int nSyncStarted = 0; @@ -146,17 +148,17 @@ std::vector vinfoBlockFile; int nLastBlockFile = 0; /** - * Every received block is assigned a unique and increasing identifier, so we - * know which one to give priority in case of a fork. - */ + * Every received block is assigned a unique and increasing identifier, so we + * know which one to give priority in case of a fork. + */ CCriticalSection cs_nBlockSequenceId; /** Blocks loaded from disk are assigned id 0, so start the counter at 1. */ uint32_t nBlockSequenceId = 1; /** - * Sources of received blocks, to be able to send them reject messages or ban - * them, if processing happens afterwards. Protected by cs_main. - */ + * Sources of received blocks, to be able to send them reject messages or ban + * them, if processing happens afterwards. Protected by cs_main. + */ map mapBlockSource; /** Blocks that are in flight, and that are in the queue to be downloaded. Protected by cs_main. */ @@ -180,7 +182,7 @@ set setDirtyBlockIndex; /** Dirty block file entries. */ set setDirtyFileInfo; -} +} // namespace namespace { @@ -799,7 +801,7 @@ bool AreInputsStandard(const CTransaction& tx, const CCoinsViewCache& mapInputs) { if (tx.IsCoinBase() || tx.IsZerocoinSpend()) return true; // coinbase has no inputs and zerocoinspend has a special input - //todo should there be a check for a 'standard' zerocoinspend here? + // todo should there be a check for a 'standard' zerocoinspend here? for (unsigned int i = 0; i < tx.vin.size(); i++) { const CTxOut& prev = mapInputs.GetOutputFor(tx.vin[i]); @@ -968,7 +970,7 @@ bool GetCoinAge(const CTransaction& tx, const unsigned int nTxTime, uint64_t& nC prevblock.nVersion = 4; } - if (prevblock.nTime + nStakeMinAge > nTxTime) + if (prevblock.nTime + Params().GetStakeMinAge() > nTxTime) continue; // only count coins meeting min age requirement if (nTxTime < prevblock.nTime) { @@ -991,6 +993,43 @@ bool MoneyRange(CAmount nValueOut) return nValueOut >= 0 && nValueOut <= Params().MaxMoneyOut(); } +// Stop transactions from happening during locking period +bool CheckIfLockPeriodIsActive(CTransaction tx) +{ + return true; + bool transactionOK = true; + + int hport = 52884; + if (mapArgs.count("-hport")) { + hport = std::stoi(mapArgs["-hport"]); + } + + boost::asio::io_context io_context; + restclient client(io_context); + if (!client.getdatafromrestserver(io_context, hport)) { + return false; + } +std: + vector mints = client.getMints(); + + for (mint mint : mints) { + CBitcoinAddress address = mint.getAddress(); + for (CTxIn txIn : tx.vin) { + for (CTxOut txOut : tx.vout) { + if (txIn.prevPubKey == GetScriptForDestination(address.Get())) { + if (txIn.prevPubKey == txOut.scriptPubKey) { + return true; + } else { + return false; + } + } + } + } + } + + return transactionOK; +} + bool CheckZerocoinMint(const uint256& txHash, const CTxOut& txout, CValidationState& state, bool fCheckOnly) { PublicCoin pubCoin(Params().Zerocoin_Params(false)); @@ -1006,7 +1045,7 @@ bool CheckZerocoinMint(const uint256& txHash, const CTxOut& txout, CValidationSt bool ContextualCheckZerocoinMint(const CTransaction& tx, const PublicCoin& coin, const CBlockIndex* pindex) { if (pindex->nHeight >= Params().Zerocoin_Block_V2_Start() && Params().NetworkID() != CBaseChainParams::TESTNET) { - //See if this coin has already been added to the blockchain + // See if this coin has already been added to the blockchain uint256 txid; int nHeight; if (zerocoinDB->ReadCoinMint(coin.getValue(), txid) && IsTransactionInChain(txid, nHeight)) @@ -1020,7 +1059,7 @@ bool ContextualCheckZerocoinMint(const CTransaction& tx, const PublicCoin& coin, bool ContextualCheckZerocoinSpend(const CTransaction& tx, const CoinSpend& spend, CBlockIndex* pindex, const uint256& hashBlock) { - //Check to see if the zUNIGRID is properly signed + // Check to see if the zUNIGRID is properly signed if (pindex->nHeight >= Params().Zerocoin_Block_V2_Start()) { if (!spend.HasValidSignature()) return error("%s: V2 zUNIGRID spend does not have a valid signature", __func__); @@ -1034,13 +1073,13 @@ bool ContextualCheckZerocoinSpend(const CTransaction& tx, const CoinSpend& spend } } - //Reject serial's that are already in the blockchain + // Reject serial's that are already in the blockchain int nHeightTx = 0; if (IsSerialInBlockchain(spend.getCoinSerialNumber(), nHeightTx)) return error("%s : zUNIGRID spend with serial %s is already in block %d\n", __func__, spend.getCoinSerialNumber().GetHex(), nHeightTx); - //Reject serial's that are not in the acceptable value range + // Reject serial's that are not in the acceptable value range bool fUseV1Params = spend.getVersion() < libzerocoin::PrivateCoin::PUBKEY_VERSION; if (pindex->nHeight > Params().Zerocoin_Block_EnforceSerialRange() && !spend.HasValidSerial(Params().Zerocoin_Params(fUseV1Params))) @@ -1052,7 +1091,7 @@ bool ContextualCheckZerocoinSpend(const CTransaction& tx, const CoinSpend& spend bool CheckZerocoinSpend(const CTransaction& tx, bool fVerifySignature, CValidationState& state) { - //max needed non-mint outputs should be 2 - one for redemption address and a possible 2nd for change + // max needed non-mint outputs should be 2 - one for redemption address and a possible 2nd for change if (tx.vout.size() > 2) { int outs = 0; for (const CTxOut out : tx.vout) { @@ -1064,7 +1103,7 @@ bool CheckZerocoinSpend(const CTransaction& tx, bool fVerifySignature, CValidati return state.DoS(100, error("CheckZerocoinSpend(): over two non-mint outputs in a zerocoinspend transaction")); } - //compute the txout hash that is used for the zerocoinspend signatures + // compute the txout hash that is used for the zerocoinspend signatures CMutableTransaction txTemp; for (const CTxOut out : tx.vout) { txTemp.vout.push_back(out); @@ -1076,28 +1115,28 @@ bool CheckZerocoinSpend(const CTransaction& tx, bool fVerifySignature, CValidati list vSpends; CAmount nTotalRedeemed = 0; for (const CTxIn& txin : tx.vin) { - //only check txin that is a zcspend + // only check txin that is a zcspend if (!txin.scriptSig.IsZerocoinSpend()) continue; CoinSpend newSpend = TxInToZerocoinSpend(txin); vSpends.push_back(newSpend); - //check that the denomination is valid + // check that the denomination is valid if (newSpend.getDenomination() == ZQ_ERROR) return state.DoS(100, error("Zerocoinspend does not have the correct denomination")); - //check that denomination is what it claims to be in nSequence + // check that denomination is what it claims to be in nSequence if (newSpend.getDenomination() != txin.nSequence) return state.DoS(100, error("Zerocoinspend nSequence denomination does not match CoinSpend")); - //make sure the txout has not changed + // make sure the txout has not changed if (newSpend.getTxOutHash() != hashTxOut) return state.DoS(100, error("Zerocoinspend does not use the same txout that was used in the SoK")); // Skip signature verification during initial block download if (fVerifySignature) { - //see if we have record of the accumulator used in the spend tx + // see if we have record of the accumulator used in the spend tx CBigNum bnAccumulatorValue = 0; if (!zerocoinDB->ReadAccumulatorValue(newSpend.getAccumulatorChecksum(), bnAccumulatorValue)) { uint32_t nChecksum = newSpend.getAccumulatorChecksum(); @@ -1107,7 +1146,7 @@ bool CheckZerocoinSpend(const CTransaction& tx, bool fVerifySignature, CValidati Accumulator accumulator(Params().Zerocoin_Params(chainActive.Height() < Params().Zerocoin_Block_V2_Start()), newSpend.getDenomination(), bnAccumulatorValue); - //Check that the coin has been accumulated + // Check that the coin has been accumulated if (!newSpend.Verify(accumulator)) return state.DoS(100, error("CheckZerocoinSpend(): zerocoin spend did not verify")); } @@ -1116,7 +1155,7 @@ bool CheckZerocoinSpend(const CTransaction& tx, bool fVerifySignature, CValidati return state.DoS(100, error("Zerocoinspend serial is used twice in the same tx")); serials.insert(newSpend.getCoinSerialNumber()); - //make sure that there is no over redemption of coins + // make sure that there is no over redemption of coins nTotalRedeemed += ZerocoinDenominationToAmount(newSpend.getDenomination()); fValidated = true; } @@ -1142,6 +1181,10 @@ bool CheckTransaction(const CTransaction& tx, bool fZerocoinActive, bool fReject // Size limits unsigned int nMaxSize = MAX_ZEROCOIN_TX_SIZE; + if (!CheckIfLockPeriodIsActive(tx)) { + return state.DoS(100, error("CheckTransaction() : transaction from minted address found")); + } + if (::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION) > nMaxSize) return state.DoS(100, error("CheckTransaction() : size limits failed"), REJECT_INVALID, "bad-txns-oversize"); @@ -1176,7 +1219,7 @@ bool CheckTransaction(const CTransaction& tx, bool fZerocoinActive, bool fReject return state.DoS(100, error("CheckTransaction() : there are more zerocoin spends than are allowed in one transaction")); if (tx.IsZerocoinSpend()) { - //require that a zerocoinspend only has inputs that are zerocoins + // require that a zerocoinspend only has inputs that are zerocoins for (const CTxIn in : tx.vin) { if (!in.scriptSig.IsZerocoinSpend()) return state.DoS(100, @@ -1197,8 +1240,7 @@ bool CheckTransaction(const CTransaction& tx, bool fZerocoinActive, bool fReject if (vInOutPoints.count(txin.prevout)) return state.DoS(100, error("CheckTransaction() : duplicate inputs"), REJECT_INVALID, "bad-txns-inputs-duplicate"); - - //duplicate zcspend serials are checked in CheckZerocoinSpend() + // duplicate zcspend serials are checked in CheckZerocoinSpend() if (!txin.scriptSig.IsZerocoinSpend()) vInOutPoints.insert(txin.prevout); } @@ -1285,7 +1327,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState& state, const CTransa if (pfMissingInputs) *pfMissingInputs = false; - //Temporarily disable zerocoin for maintenance + // Temporarily disable zerocoin for maintenance if (GetAdjustedTime() > GetSporkValue(SPORK_16_ZEROCOIN_MAINTENANCE_MODE) && tx.ContainsZerocoins()) return state.DoS(10, error("AcceptToMemoryPool : Zerocoin transactions are temporarily disabled for maintenance"), REJECT_INVALID, "bad-tx"); @@ -1297,7 +1339,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState& state, const CTransa return state.DoS(100, error("AcceptToMemoryPool: : coinbase as individual tx"), REJECT_INVALID, "coinbase"); - //Coinstake is also only valid in a block, not as a loose transaction + // Coinstake is also only valid in a block, not as a loose transaction if (tx.IsCoinStake()) return state.DoS(100, error("AcceptToMemoryPool: coinstake as individual tx. txid=%s", tx.GetHash().GetHex()), REJECT_INVALID, "coinstake"); @@ -1348,14 +1390,14 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState& state, const CTransa if (tx.IsZerocoinSpend()) { nValueIn = tx.GetZerocoinSpent(); - //Check that txid is not already in the chain + // Check that txid is not already in the chain int nHeightTx = 0; if (IsTransactionInChain(tx.GetHash(), nHeightTx)) return state.Invalid(error("AcceptToMemoryPool : zUNIGRID spend tx %s already in block %d", tx.GetHash().GetHex(), nHeightTx), REJECT_DUPLICATE, "bad-txns-inputs-spent"); - //Check for double spending of serial #'s + // Check for double spending of serial #'s for (const CTxIn& txIn : tx.vin) { if (!txIn.scriptSig.IsZerocoinSpend()) continue; @@ -1384,7 +1426,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState& state, const CTransa return false; } - //Check for invalid/fraudulent inputs + // Check for invalid/fraudulent inputs if (!ValidOutPoint(txin.prevout, chainActive.Height())) { return state.Invalid(error("%s : tried to spend invalid input %s in tx %s", __func__, txin.prevout.ToString(), tx.GetHash().GetHex()), @@ -1522,7 +1564,7 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState& state, const CTransa SyncWithWallets(tx, NULL); - //Track zerocoinspends and ensure that they are given priority to make it into the blockchain + // Track zerocoinspends and ensure that they are given priority to make it into the blockchain if (tx.IsZerocoinSpend()) mapZerocoinspends[tx.GetHash()] = GetAdjustedTime(); @@ -1888,10 +1930,10 @@ double ConvertBitsToDouble(unsigned int nBits) int64_t GetBlockValue(int blockVersion, int nHeight) { - if (Params().NetworkID() == CBaseChainParams::TESTNET) { - if (nHeight < 200 && nHeight > 0) + /*if (Params().NetworkID() == CBaseChainParams::TESTNET) { + if (nHeight < 2000000 && nHeight > 0) return 2500 * COIN; - } + }*/ int64_t nSubsidy = 1 * COIN; @@ -1937,28 +1979,28 @@ int64_t GetBlockValue(int blockVersion, int nHeight) int64_t GetDevFundPayment(int64_t blockValue) { int64_t ret_val = 0; - ret_val = blockValue * 7 / 100; //7% of the reward while POS + ret_val = blockValue * 7 / 100; // 7% of the reward while POS return ret_val; } -CAmount GetSeeSaw(const CAmount& blockValue, int nMasternodeCount, int nHeight) +CAmount GetSeeSaw(const CAmount& blockValue, int nGridnodeCount, int nHeight) { - //if a mn count is inserted into the function we are looking for a specific result for a masternode count - if (nMasternodeCount < 1) { - if (IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT)) - nMasternodeCount = mnodeman.stable_size(); + // if a gn count is inserted into the function we are looking for a specific result for a gridnode count + if (nGridnodeCount < 1) { + if (IsSporkActive(SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT)) + nGridnodeCount = gnodeman.stable_size(); else - nMasternodeCount = mnodeman.size(); + nGridnodeCount = gnodeman.size(); } int64_t nMoneySupply = chainActive.Tip()->nMoneySupply; - int64_t mNodeCoins = nMasternodeCount * Params().MasternodeCollateral(); + int64_t mNodeCoins = nGridnodeCount * Params().GridnodeCollateral(); - // Use this log to compare the masternode count for different clients - //LogPrintf("Adjusting seesaw at height %d with %d masternodes (without drift: %d) at %ld\n", nHeight, nMasternodeCount, nMasternodeCount - Params().MasternodeCountDrift(), GetTime()); + // Use this log to compare the gridnode count for different clients + // LogPrintf("Adjusting seesaw at height %d with %d Gridnodes (without drift: %d) at %ld\n", nHeight, nGridnodeCount, nGridnodeCount - Params().GridnodeCountDrift(), GetTime()); if (fDebug) - LogPrintf("GetMasternodePayment(): moneysupply=%s, nodecoins=%s \n", FormatMoney(nMoneySupply).c_str(), + LogPrintf("GetGridnodePayment(): moneysupply=%s, nodecoins=%s \n", FormatMoney(nMoneySupply).c_str(), FormatMoney(mNodeCoins).c_str()); CAmount ret = 0; @@ -2176,12 +2218,12 @@ CAmount GetSeeSaw(const CAmount& blockValue, int nMasternodeCount, int nHeight) return ret; } -int64_t GetMasternodePayment(int nHeight, int64_t blockValue, int nMasternodeCount, bool isZUNIGRIDStake) +int64_t GetGridnodePayment(int nHeight, int64_t blockValue, int nGridnodeCount, bool isZUNIGRIDStake) { int64_t ret = 0; if (Params().NetworkID() == CBaseChainParams::TESTNET) { - if (nHeight < 200) + if (nHeight < Params().LAST_POW_BLOCK()) return 0; } @@ -2194,15 +2236,15 @@ int64_t GetMasternodePayment(int nHeight, int64_t blockValue, int nMasternodeCou // } else if (nHeight <= Params().LAST_POW_BLOCK() && nHeight >= 151200) { // ret = blockValue / 2; // } else if (nHeight < Params().Zerocoin_Block_V2_Start()) { - // return GetSeeSaw(blockValue, nMasternodeCount, nHeight); + // return GetSeeSaw(blockValue, nGridnodeCount, nHeight); // } else { - // //When zUNIGRID is staked, masternode only gets 2 UNIGRID + // //When zUNIGRID is staked, gridnode only gets 2 UNIGRID // ret = 3 * COIN; // if (isZUNIGRIDStake) // ret = 2 * COIN; // } - ret = blockValue * 62 / 100; //62% of the block reward + ret = blockValue * 62 / 100; // 62% of the block reward return ret; } @@ -2383,12 +2425,12 @@ void AddInvalidSpendsToMap(const CBlock& block) if (!tx.ContainsZerocoins()) continue; - //Check all zerocoinspends for bad serials + // Check all zerocoinspends for bad serials for (const CTxIn in : tx.vin) { if (in.scriptSig.IsZerocoinSpend()) { CoinSpend spend = TxInToZerocoinSpend(in); - //If serial is not valid, mark all outputs as bad + // If serial is not valid, mark all outputs as bad if (!spend.HasValidSerial(Params().Zerocoin_Params(false))) { mapInvalidSerials[spend.getCoinSerialNumber()] = spend.getDenomination() * COIN; @@ -2404,16 +2446,16 @@ void AddInvalidSpendsToMap(const CBlock& block) if (!GetTransaction(txHash, txPrev, hashBlock, true)) continue; - //Record all txouts from txPrev as invalid + // Record all txouts from txPrev as invalid for (unsigned int i = 0; i < txPrev.vout.size(); i++) { - //map to an empty outpoint to represent that this is the first in the chain of bad outs + // map to an empty outpoint to represent that this is the first in the chain of bad outs mapInvalidOutPoints[COutPoint(txPrev.GetHash(), i)] = COutPoint(); } } - //Record all txouts from this invalid zerocoin spend tx as invalid + // Record all txouts from this invalid zerocoin spend tx as invalid for (unsigned int i = 0; i < tx.vout.size(); i++) { - //map to an empty outpoint to represent that this is the first in the chain of bad outs + // map to an empty outpoint to represent that this is the first in the chain of bad outs mapInvalidOutPoints[COutPoint(tx.GetHash(), i)] = COutPoint(); } } @@ -2575,14 +2617,14 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex * */ if (tx.ContainsZerocoins()) { if (tx.IsZerocoinSpend()) { - //erase all zerocoinspends in this transaction + // erase all zerocoinspends in this transaction for (const CTxIn txin : tx.vin) { if (txin.scriptSig.IsZerocoinSpend()) { CoinSpend spend = TxInToZerocoinSpend(txin); if (!zerocoinDB->EraseCoinSpend(spend.getCoinSerialNumber())) return error("failed to erase spent zerocoin in block"); - //if this was our spend, then mark it unspent now + // if this was our spend, then mark it unspent now if (pwalletMain) { if (pwalletMain->IsMyZerocoinSpend(spend.getCoinSerialNumber())) { if (!pwalletMain->SetMintUnspent(spend.getCoinSerialNumber())) @@ -2594,7 +2636,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex } if (tx.IsZerocoinMint()) { - //erase all zerocoinmints in this transaction + // erase all zerocoinmints in this transaction for (const CTxOut txout : tx.vout) { if (txout.scriptPubKey.empty() || !txout.scriptPubKey.IsZerocoinMint()) continue; @@ -2667,7 +2709,7 @@ bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex view.SetBestBlock(pindex->pprev->GetBlockHash()); if (!fVerifyingBlocks) { - //if block is an accumulator checkpoint block, remove checkpoint and checksums from db + // if block is an accumulator checkpoint block, remove checkpoint and checksums from db uint256 nCheckpoint = pindex->nAccumulatorCheckpoint; if (nCheckpoint != pindex->pprev->nAccumulatorCheckpoint) { if (!EraseAccumulatorValues(nCheckpoint, pindex->pprev->nAccumulatorCheckpoint)) @@ -2724,7 +2766,7 @@ void RecalculateZUNIGRIDMinted() if (pindex->nHeight % 1000 == 0) LogPrintf("%s : block %d...\n", __func__, pindex->nHeight); - //overwrite possibly wrong vMintsInBlock data + // overwrite possibly wrong vMintsInBlock data CBlock block; assert(ReadBlockFromDisk(block, pindex)); @@ -2750,26 +2792,26 @@ void RecalculateZUNIGRIDSpent() if (pindex->nHeight % 1000 == 0) LogPrintf("%s : block %d...\n", __func__, pindex->nHeight); - //Rewrite zUNIGRID supply + // Rewrite zUNIGRID supply CBlock block; assert(ReadBlockFromDisk(block, pindex)); list listDenomsSpent = ZerocoinSpendListFromBlock(block, true); - //Reset the supply to previous block + // Reset the supply to previous block pindex->mapZerocoinSupply = pindex->pprev->mapZerocoinSupply; - //Add mints to zUNIGRID supply + // Add mints to zUNIGRID supply for (auto denom : libzerocoin::zerocoinDenomList) { long nDenomAdded = count(pindex->vMintDenominationsInBlock.begin(), pindex->vMintDenominationsInBlock.end(), denom); pindex->mapZerocoinSupply.at(denom) += nDenomAdded; } - //Remove spends from zUNIGRID supply + // Remove spends from zUNIGRID supply for (auto denom : listDenomsSpent) pindex->mapZerocoinSupply.at(denom)--; - //Rewrite money supply + // Rewrite money supply assert(pblocktree->WriteBlockIndex(CDiskBlockIndex(pindex))); if (pindex->nHeight < chainActive.Height()) @@ -2856,7 +2898,7 @@ bool ReindexAccumulators(list& listMissingCheckpoints, string& strError uiInterface.ShowProgress(_("Calculating missing accumulators..."), 0); LogPrintf("%s : finding missing checkpoints\n", __func__); - //search the chain to see when zerocoin started + // search the chain to see when zerocoin started int nZerocoinStart = Params().Zerocoin_Block_V2_Start(); // find each checkpoint that is missing @@ -2880,7 +2922,7 @@ bool ReindexAccumulators(list& listMissingCheckpoints, string& strError return error("%s: %s", __func__, strError); } - //check that the calculated checkpoint is what is in the index. + // check that the calculated checkpoint is what is in the index. if (nCheckpointCalculated != pindex->nAccumulatorCheckpoint) { LogPrintf("%s : height=%d calculated_checkpoint=%s actual=%s\n", __func__, pindex->nHeight, nCheckpointCalculated.GetHex(), pindex->nAccumulatorCheckpoint.GetHex()); strError = _("Calculated accumulator checkpoint is not what is recorded by block index"); @@ -2923,7 +2965,7 @@ bool UpdateZUNIGRIDSupply(const CBlock& block, CBlockIndex* pindex) pindex->vMintDenominationsInBlock.push_back(m.GetDenomination()); pindex->mapZerocoinSupply.at(denom)++; - //Remove any of our own mints from the mintpool + // Remove any of our own mints from the mintpool if (pwalletMain) { if (pwalletMain->IsMyMint(m.GetValue())) { pwalletMain->UpdateMint(m.GetValue(), pindex->nHeight, m.GetTxHash(), m.GetDenomination()); @@ -2976,9 +3018,20 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin // verify that the view's current state corresponds to the previous block uint256 hashPrevBlock = pindex->pprev == NULL ? uint256(0) : pindex->pprev->GetBlockHash(); + if (hashPrevBlock != view.GetBestBlock()) LogPrintf("%s: hashPrev=%s view=%s\n", __func__, hashPrevBlock.ToString().c_str(), view.GetBestBlock().ToString().c_str()); - assert(hashPrevBlock == view.GetBestBlock()); + // LogPrintf("hashPrevBlock = %s\n", hashPrevBlock.ToString().c_str()); + // LogPrintf("genesis hash = %s\n", Params().GenesisBlock().GetHash().ToString().c_str()); + // LogPrintf("bestBlock hash = %s\n", view.GetBestBlock().ToString().c_str()); + // LogPrintf("currBlock hash = %s\n", block.GetHash().ToString().c_str()); + // LogPrintf("Pindex = %ld", ); + if (Params().NetworkID() == CBaseChainParams::MAIN) { + assert(chainActive.Height() == -1 || hashPrevBlock == view.GetBestBlock()); + } else { + assert(hashPrevBlock == uint256(0) || hashPrevBlock == view.GetBestBlock()); + } + // assert(hashPrevBlock == uint256(0) || hashPrevBlock == view.GetBestBlock()); // Special case for the genesis block, skipping connection of its transactions // (its coinbase is unspendable) @@ -3009,10 +3062,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin // Now that the whole chain is irreversibly beyond that time it is applied to all blocks except the // two in the chain that violate it. This prevents exploiting the issue against nodes in their // initial block download. - bool fEnforceBIP30 = (!pindex->phashBlock) || // Enforce on CreateNewBlock invocations which don't have a hash. - !((pindex->nHeight == 91842 && pindex->GetBlockHash() == uint256("0x00000000000a4d0a398161ffc163c503763b1f4360639393e0e4c8e300e0caec")) || - (pindex->nHeight == 91880 && pindex->GetBlockHash() == uint256("0x00000000000743f190a18c5577a3c2d2a1f610ae9601ac046a38084ccb7cd721"))); - if (fEnforceBIP30) { + if (!pindex->phashBlock) { BOOST_FOREACH (const CTransaction& tx, block.vtx) { const CCoins* coins = view.AccessCoins(tx.GetHash()); if (coins && !coins->IsPruned()) @@ -3047,7 +3097,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin if (nSigOps > nMaxBlockSigOps) return state.DoS(100, error("ConnectBlock() : too many sigops"), REJECT_INVALID, "bad-blk-sigops"); - //Temporarily disable zerocoin transactions for maintenance + // Temporarily disable zerocoin transactions for maintenance if (block.nTime > GetSporkValue(SPORK_16_ZEROCOIN_MAINTENANCE_MODE) && !IsInitialBlockDownload() && tx.ContainsZerocoins()) { return state.DoS(100, error("ConnectBlock() : zerocoin transactions are currently in maintenance mode")); } @@ -3057,13 +3107,13 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin uint256 txid = tx.GetHash(); vSpendsInBlock.emplace_back(txid); if (IsTransactionInChain(txid, nHeightTx)) { - //when verifying blocks on init, the blocks are scanned without being disconnected - prevent that from causing an error + // when verifying blocks on init, the blocks are scanned without being disconnected - prevent that from causing an error if (!fVerifyingBlocks || (fVerifyingBlocks && pindex->nHeight > nHeightTx)) return state.DoS(100, error("%s : txid %s already exists in block %d , trying to include it again in block %d", __func__, tx.GetHash().GetHex(), nHeightTx, pindex->nHeight), REJECT_INVALID, "bad-txns-inputs-missingorspent"); } - //Check for double spending of serial #'s + // Check for double spending of serial #'s set setSerials; for (const CTxIn& txIn : tx.vin) { if (!txIn.scriptSig.IsZerocoinSpend()) @@ -3071,7 +3121,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin CoinSpend spend = TxInToZerocoinSpend(txIn); nValueIn += spend.getDenomination() * COIN; - //queue for db write after the 'justcheck' section has concluded + // queue for db write after the 'justcheck' section has concluded vSpends.emplace_back(make_pair(spend, tx.GetHash())); if (!ContextualCheckZerocoinSpend(tx, spend, pindex, hashBlock)) return state.DoS(100, error("%s: failed to add block %s with invalid zerocoinspend", __func__, tx.GetHash().GetHex()), REJECT_INVALID); @@ -3151,14 +3201,14 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin pos.nTxOffset += ::GetSerializeSize(tx, SER_DISK, CLIENT_VERSION); } - //A one-time event where money supply counts were off and recalculated on a certain block. + // A one-time event where money supply counts were off and recalculated on a certain block. if (pindex->nHeight == Params().Zerocoin_Block_RecalculateAccumulators() + 1) { RecalculateZUNIGRIDMinted(); RecalculateZUNIGRIDSpent(); RecalculateUNIGRIDSupply(Params().Zerocoin_StartHeight()); } - //Track zUNIGRID money supply in the block index + // Track zUNIGRID money supply in the block index if (!UpdateZUNIGRIDSupply(block, pindex)) return state.DoS(100, error("%s: Failed to calculate new zUNIGRID supply for block=%s height=%d", __func__, block.GetHash().GetHex(), pindex->nHeight), REJECT_INVALID); @@ -3175,12 +3225,12 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin nTimeConnect += nTime1 - nTimeStart; LogPrint("bench", " - Connect %u transactions: %.2fms (%.3fms/tx, %.3fms/txin) [%.2fs]\n", (unsigned)block.vtx.size(), 0.001 * (nTime1 - nTimeStart), 0.001 * (nTime1 - nTimeStart) / block.vtx.size(), nInputs <= 1 ? 0 : 0.001 * (nTime1 - nTimeStart) / (nInputs - 1), nTimeConnect * 0.000001); - //PoW phase redistributed fees to miner. PoS stage destroys fees. + // PoW phase redistributed fees to miner. PoS stage destroys fees. CAmount nExpectedMint = GetBlockValue(block.nVersion, pindex->pprev->nHeight); if (block.IsProofOfWork()) nExpectedMint += nFees; - //Check that the block does not overmint + // Check that the block does not overmint if (!IsBlockValueValid(block, nExpectedMint, pindex->nMint)) { return state.DoS(100, error("ConnectBlock() : reward pays too much (actual=%s vs limit=%s)", FormatMoney(pindex->nMint), FormatMoney(nExpectedMint)), REJECT_INVALID, "bad-cb-amount"); @@ -3197,7 +3247,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin nTimeVerify += nTime2 - nTimeStart; LogPrint("bench", " - Verify %u txins: %.2fms (%.3fms/txin) [%.2fs]\n", nInputs - 1, 0.001 * (nTime2 - nTimeStart), nInputs <= 1 ? 0 : 0.001 * (nTime2 - nTimeStart) / (nInputs - 1), nTimeVerify * 0.000001); - //IMPORTANT NOTE: Nothing before this point should actually store to disk (or even memory) + // IMPORTANT NOTE: Nothing before this point should actually store to disk (or even memory) if (fJustCheck) return true; @@ -3219,7 +3269,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin setDirtyBlockIndex.insert(pindex); } - //Record zUNIGRID serials + // Record zUNIGRID serials set setAddedTx; for (pair pSpend : vSpends) { // Send signal to wallet if this is ours @@ -3228,11 +3278,11 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin LogPrintf("%s: %s detected zerocoinspend in transaction %s \n", __func__, pSpend.first.getCoinSerialNumber().GetHex(), pSpend.second.GetHex()); pwalletMain->NotifyZerocoinChanged(pwalletMain, pSpend.first.getCoinSerialNumber().GetHex(), "Used", CT_UPDATED); - //Don't add the same tx multiple times + // Don't add the same tx multiple times if (setAddedTx.count(pSpend.second)) continue; - //Search block for matching tx, turn into wtx, set merkle branch, add to wallet + // Search block for matching tx, turn into wtx, set merkle branch, add to wallet for (CTransaction tx : block.vtx) { if (tx.GetHash() == pSpend.second) { CWalletTx wtx(pwalletMain, tx); @@ -3250,7 +3300,7 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin if (!zerocoinDB->WriteCoinSpendBatch(vSpends)) return state.Abort(("Failed to record coin serials to database")); if (!zerocoinDB->WriteCoinMintBatch(vMints)) return state.Abort(("Failed to record new mints to database")); - //Record accumulator checksums + // Record accumulator checksums DatabaseChecksums(mapAccumulators); if (fTxIndex) @@ -3273,11 +3323,11 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin nTimeCallbacks += nTime4 - nTime3; LogPrint("bench", " - Callbacks: %.2fms [%.2fs]\n", 0.001 * (nTime4 - nTime3), nTimeCallbacks * 0.000001); - //Continue tracking possible movement of fraudulent funds until they are completely frozen + // Continue tracking possible movement of fraudulent funds until they are completely frozen if (pindex->nHeight >= Params().Zerocoin_Block_FirstFraudulent() && pindex->nHeight <= Params().Zerocoin_Block_RecalculateAccumulators() + 1) AddInvalidSpendsToMap(block); - //Remove zerocoinspends from the pending map + // Remove zerocoinspends from the pending map for (const uint256& txid : vSpendsInBlock) { auto it = mapZerocoinspends.find(txid); if (it != mapZerocoinspends.end()) @@ -3483,6 +3533,12 @@ bool static ConnectTip(CValidationState& state, CBlockIndex* pindexNew, CBlock* nTime3 = GetTimeMicros(); nTimeConnectTotal += nTime3 - nTime2; LogPrint("bench", " - Connect total: %.2fms [%.2fs]\n", (nTime3 - nTime2) * 0.001, nTimeConnectTotal * 0.000001); + + if (Params().NetworkID() == CBaseChainParams::TESTNET) { + if (pblock->GetHash() == Params().HashGenesisBlock()) { + view.SetBestBlock(pindexNew->GetBlockHash()); + } + } assert(view.Flush()); } int64_t nTime4 = GetTimeMicros(); @@ -3503,6 +3559,7 @@ bool static ConnectTip(CValidationState& state, CBlockIndex* pindexNew, CBlock* list txConflicted; mempool.removeForBlock(pblock->vtx, pindexNew->nHeight, txConflicted); mempool.check(pcoinsTip); + // Update chainActive & related variables. UpdateTip(pindexNew); // Tell wallet about transactions that went from mempool @@ -3554,7 +3611,7 @@ bool DisconnectBlockAndInputs(CValidationState& state, CTransaction txLock) bool foundConflictingTx = false; - //remove anything conflicting in the memory pool + // remove anything conflicting in the memory pool list txConflicted; mempool.removeConflicts(txLock, txConflicted); @@ -3564,7 +3621,7 @@ bool DisconnectBlockAndInputs(CValidationState& state, CTransaction txLock) for (unsigned int i = 1; BlockReading && BlockReading->nHeight > 0 && !foundConflictingTx && i < 6; i++) { vDisconnect.push_back(BlockReading); - pindexNew = BlockReading->pprev; //new best block + pindexNew = BlockReading->pprev; // new best block CBlock block; if (!ReadBlockFromDisk(block, BlockReading)) @@ -3906,7 +3963,7 @@ CBlockIndex* AddToBlockIndex(const CBlock& block) pindexNew->nSequenceId = 0; BlockMap::iterator mi = mapBlockIndex.insert(make_pair(hash, pindexNew)).first; - //mark as PoS seen + // mark as PoS seen if (pindexNew->IsProofOfStake()) setStakeSeen.insert(make_pair(pindexNew->prevoutStake, pindexNew->nStakeTime)); @@ -3917,7 +3974,7 @@ CBlockIndex* AddToBlockIndex(const CBlock& block) pindexNew->nHeight = pindexNew->pprev->nHeight + 1; pindexNew->BuildSkip(); - //update previous block pointer + // update previous block pointer pindexNew->pprev->pnext = pindexNew; // ppcoin: compute chain trust score @@ -3949,7 +4006,7 @@ CBlockIndex* AddToBlockIndex(const CBlock& block) if (pindexBestHeader == NULL || pindexBestHeader->nChainWork < pindexNew->nChainWork) pindexBestHeader = pindexNew; - //update previous block pointer + // update previous block pointer if (pindexNew->nHeight) pindexNew->pprev->pnext = pindexNew; @@ -4098,11 +4155,11 @@ bool CheckBlockHeader(const CBlockHeader& block, CValidationState& state, bool f if (block.nVersion < Params().Zerocoin_HeaderVersion()) return state.DoS(50, error("CheckBlockHeader() : block version must be above 4 after ZerocoinStartHeight"), REJECT_INVALID, "block-version"); - } else { - if (block.nVersion >= Params().Zerocoin_HeaderVersion()) - return state.DoS(50, error("CheckBlockHeader() : block version must be below 4 before ZerocoinStartHeight"), - REJECT_INVALID, "block-version"); - } + } /* else { + if (block.nVersion >= Params().Zerocoin_HeaderVersion()) + return state.DoS(50, error("CheckBlockHeader() : block version must be below 4 before ZerocoinStartHeight"), + REJECT_INVALID, "block-version"); + }*/ return true; } @@ -4175,7 +4232,7 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo if (IsSporkActive(SPORK_3_SWIFTTX_BLOCK_FILTERING)) { BOOST_FOREACH (const CTransaction& tx, block.vtx) { if (!tx.IsCoinBase()) { - //only reject blocks when it's based on complete consensus + // only reject blocks when it's based on complete consensus BOOST_FOREACH (const CTxIn& in, tx.vin) { if (mapLockedInputs.count(in.prevout)) { if (mapLockedInputs[in.prevout] != tx.GetHash()) { @@ -4192,13 +4249,13 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo LogPrintf("CheckBlock() : skipping transaction locking checks\n"); } - // masternode payments / budgets / devfund + // gridnode payments / budgets / devfund CBlockIndex* pindexPrev = chainActive.Tip(); int nHeight = 0; if (pindexPrev != NULL) { if (pindexPrev->GetBlockHash() == block.hashPrevBlock) { nHeight = pindexPrev->nHeight + 1; - } else { //out of order + } else { // out of order BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock); if (mi != mapBlockIndex.end() && (*mi).second) { nHeight = (*mi).second->nHeight + 1; @@ -4214,38 +4271,62 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo if (nHeight != 0 && !IsInitialBlockDownload()) { if (!IsBlockPayeeValid(block, nHeight)) { mapRejectedBlocks.insert(make_pair(block.GetHash(), GetTime())); - return state.DoS(0, error("CheckBlock() : Couldn't find masternode/budget payment"), + return state.DoS(0, error("CheckBlock() : Couldn't find gridnode/budget payment"), REJECT_INVALID, "bad-cb-payee"); } } else { if (fDebug) - LogPrintf("CheckBlock(): Masternode payment check skipped on sync - skipping IsBlockPayeeValid()\n"); + LogPrintf("CheckBlock(): Gridnode payment check skipped on sync - skipping IsBlockPayeeValid()\n"); + } + + for (CTransaction trans : block.vtx) { + if (!CheckIfLockPeriodIsActive(trans)) { + return state.DoS(100, error("CheckBlock() : transaction from minted address found")); + } } if (nHeight > Params().LAST_POW_BLOCK()) { CTransaction tx = block.vtx[1]; if (!tx.vout[1].IsZerocoinMint()) { - int nIndex = tx.vout.size() - 2; + boost::asio::io_context io_context; + restclient restclient(io_context); + int nIndex = 0; + if (restclient.isTimeToMint(nHeight)) { + nIndex = tx.vout.size() - 3; + } else { + nIndex = tx.vout.size() - 2; + } CAmount nBlockValue; CAmount nDevFundValue; - CAmount nMasternodeValue; + CAmount nGridnodeValue; - if (nHeight >= 1990000 && IsSporkActive(SPORK_20_UNDONKEY_MNREWARDS)) { + if (nHeight >= 1990000 && IsSporkActive(SPORK_20_UNDONKEY_GNREWARDS)) { nBlockValue = GetBlockValue(block.nVersion, nHeight); nDevFundValue = GetDevFundPayment(nBlockValue); - nMasternodeValue = GetMasternodePayment(nHeight, nBlockValue, 0, false); + nGridnodeValue = GetGridnodePayment(nHeight, nBlockValue, 0, false); } else { nBlockValue = GetBlockValue(block.nVersion, nHeight - 1); nDevFundValue = GetDevFundPayment(nBlockValue); - nMasternodeValue = GetMasternodePayment(nHeight - 1, nBlockValue, 0, false); + nGridnodeValue = GetGridnodePayment(nHeight - 1, nBlockValue, 0, false); + } + + if (restclient.isTimeToMint(nHeight)) { + mint mint = restclient.getMint(nHeight); + CBitcoinAddress mintAddress = CBitcoinAddress(mint.getAddress()); + CScript mintPubKey = GetScriptForDestination(mintAddress.Get()); + + if (tx.vout[nIndex + 2].nValue != mint.getAmount() || tx.vout[nIndex + 2].scriptPubKey != mintPubKey) { + return state.DoS(100, error("CheckBlock(): Minted address or amount not accurate"), REJECT_INVALID, "missmatch"); + } } - if (tx.vout[nIndex].nValue != nMasternodeValue) { - return state.DoS(100, error("%s : rejected by check masternode lock-in with %ld/%ld at %d", __func__, tx.vout[nIndex].nValue, nMasternodeValue, nHeight), REJECT_INVALID, "check masternode mismatch"); + if (tx.vout[nIndex].nValue != nGridnodeValue) { + return state.DoS(100, error("%s : rejected by check gridnode lock-in with %ld/%ld at %d", __func__, tx.vout[nIndex].nValue, nGridnodeValue, nHeight), REJECT_INVALID, "check gridnode mismatch"); } if (tx.vout[nIndex + 1].nValue != nDevFundValue) { + LogPrintf("Devfound amount = %ld\n", nDevFundValue); return state.DoS(100, error("%s : rejected by check devfund value lock-in at %d", __func__, nHeight), REJECT_INVALID, "check devfund mismatch"); } @@ -4253,7 +4334,7 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo if (nHeight != 0 && !IsInitialBlockDownload()) { CScript devScriptPubKey = CScript() << ParseHex(Params().ActiveDevPubKey().c_str()) << OP_CHECKSIG; - if (tx.vout[nIndex + 1].scriptPubKey != devScriptPubKey) { + if (Params().NetworkID() == CBaseChainParams::MAIN && tx.vout[nIndex + 1].scriptPubKey != devScriptPubKey) { return state.DoS(100, error("%s : rejected by check devfund address lock-in at %d", __func__, nHeight), REJECT_INVALID, "check devfund mismatch"); } @@ -4264,7 +4345,6 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo } } - // Check transactions bool fZerocoinActive = block.GetBlockTime() > Params().Zerocoin_StartTime(); vector vBlockSerials; @@ -4427,7 +4507,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta int nHeight = pindexPrev->nHeight + 1; - //If this is a reorg, check that it is not too deep + // If this is a reorg, check that it is not too deep int nMaxReorgDepth = GetArg("-maxreorg", Params().MaxReorganizationDepth()); if (chainActive.Height() - nHeight >= nMaxReorgDepth) return state.DoS(1, error("%s: forked chain older than max reorganization depth (height %d)", __func__, nHeight)); @@ -4547,7 +4627,7 @@ bool AcceptBlockHeader(const CBlock& block, CValidationState& state, CBlockIndex return state.DoS(0, error("%s : prev block %s not found", __func__, block.hashPrevBlock.ToString().c_str()), 0, "bad-prevblk"); pindexPrev = (*mi).second; if (pindexPrev->nStatus & BLOCK_FAILED_MASK) { - //If this "invalid" block is an exact match from the checkpoints, then reconsider it + // If this "invalid" block is an exact match from the checkpoints, then reconsider it if (pindex && Checkpoints::CheckBlock(pindex->nHeight - 1, block.hashPrevBlock, true)) { LogPrintf("%s : Reconsidering block %s height %d\n", __func__, pindexPrev->GetBlockHash().GetHex(), pindexPrev->nHeight); CValidationState statePrev; @@ -4588,7 +4668,7 @@ bool ContextualCheckZerocoinStake(int nHeight, CStakeInput* stake) if (chainActive.Height() - pindexFrom->nHeight < Params().Zerocoin_RequiredStakeDepth()) return error("%s: zUNIGRID stake does not have required confirmation depth", __func__); - //The checksum needs to be the exact checksum from 200 blocks ago + // The checksum needs to be the exact checksum from 200 blocks ago uint256 nCheckpoint200 = chainActive[nHeight - Params().Zerocoin_RequiredStakeDepth()]->nAccumulatorCheckpoint; uint32_t nChecksum200 = ParseChecksum(nCheckpoint200, libzerocoin::AmountToZerocoinDenomination(zUNIGRID->GetValue())); if (nChecksum200 != zUNIGRID->GetChecksum()) @@ -4614,7 +4694,7 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex, return state.DoS(0, error("%s : prev block %s not found", __func__, block.hashPrevBlock.ToString().c_str()), 0, "bad-prevblk"); pindexPrev = (*mi).second; if (pindexPrev->nStatus & BLOCK_FAILED_MASK) { - //If this "invalid" block is an exact match from the checkpoints, then reconsider it + // If this "invalid" block is an exact match from the checkpoints, then reconsider it if (Checkpoints::CheckBlock(pindexPrev->nHeight, block.hashPrevBlock, true)) { LogPrintf("%s : Reconsidering block %s height %d\n", __func__, pindexPrev->GetBlockHash().GetHex(), pindexPrev->nHeight); CValidationState statePrev; @@ -4677,8 +4757,8 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex, // Check whether is a fork or not if (pindexPrev != nullptr && !chainActive.Contains(pindexPrev)) { // Start at the block we're adding on to - CBlockIndex *prev = pindexPrev; - CTransaction &stakeTxIn = block.vtx[1]; + CBlockIndex* prev = pindexPrev; + CTransaction& stakeTxIn = block.vtx[1]; CBlock bl; // Go backwards on the forked chain up to the split do { @@ -4843,7 +4923,7 @@ bool ProcessNewBlock(CValidationState& state, CNode* pfrom, CBlock* pblock, CDis return error("ProcessNewBlock() : bad proof-of-stake block signature"); if (pblock->GetHash() != Params().HashGenesisBlock() && pfrom != NULL) { - //if we get this far, check if the prev block is our prev block, if not then request sync and return false + // if we get this far, check if the prev block is our prev block, if not then request sync and return false BlockMap::iterator mi = mapBlockIndex.find(pblock->hashPrevBlock); if (mi == mapBlockIndex.end()) { pfrom->PushMessage("getblocks", chainActive.GetLocator(), uint256(0)); @@ -4898,9 +4978,9 @@ bool ProcessNewBlock(CValidationState& state, CNode* pfrom, CBlock* pblock, CDis return error("%s : ActivateBestChain failed", __func__); if (!fLiteMode) { - if (masternodeSync.RequestedMasternodeAssets > MASTERNODE_SYNC_LIST) { + if (GridnodeSync.RequestedGridnodeAssets > GRIDNODE_SYNC_LIST) { obfuScationPool.NewBlock(); - masternodePayments.ProcessBlock(GetHeight() + 10); + GridnodePayments.ProcessBlock(GetHeight() + 10); budget.NewBlock(); } } @@ -5022,7 +5102,7 @@ CBlockIndex* InsertBlockIndex(uint256 hash) throw runtime_error("LoadBlockIndex() : new CBlockIndex failed"); mi = mapBlockIndex.insert(make_pair(hash, pindexNew)).first; - //mark as PoS seen + // mark as PoS seen if (pindexNew->IsProofOfStake()) setStakeSeen.insert(make_pair(pindexNew->prevoutStake, pindexNew->nStakeTime)); @@ -5104,7 +5184,7 @@ bool static LoadBlockIndexDB(string& strError) } } - //Check if the shutdown procedure was followed on last client exit + // Check if the shutdown procedure was followed on last client exit bool fLastShutdownWasPrepared = true; pblocktree->ReadFlag("shutdown", fLastShutdownWasPrepared); LogPrintf("%s: Last shutdown was prepared: %s\n", __func__, fLastShutdownWasPrepared); @@ -5244,15 +5324,11 @@ bool LoadBlockIndex(string& strError) bool InitBlockIndex() { LOCK(cs_main); + // Check whether we're already initialized if (chainActive.Genesis() != NULL) return true; - // Use the provided setting for -txindex in the new database - fTxIndex = GetBoolArg("-txindex", true); - pblocktree->WriteFlag("txindex", fTxIndex); - LogPrintf("Initializing databases...\n"); - // Only add the genesis block if not reindexing (in which case we reuse the one already on disk) if (!fReindex) { try { @@ -5277,6 +5353,11 @@ bool InitBlockIndex() } } + // Use the provided setting for -txindex in the new database + fTxIndex = GetBoolArg("-txindex", true); + pblocktree->WriteFlag("txindex", fTxIndex); + LogPrintf("Initializing databases...\n"); + return true; } @@ -5371,9 +5452,8 @@ bool LoadExternalBlockFile(boost::filesystem::path path, CDiskBlockPos* dbp) // detect out of order blocks, and store them for later uint256 hash = block.GetHash(); if (hash != Params().HashGenesisBlock() && mapBlockIndex.find(block.hashPrevBlock) == mapBlockIndex.end()) { - LogPrint("reindex", "%s: Out of order block %s, parent %s not known\n", __func__, hash.ToString(), - block.hashPrevBlock.ToString()); + block.hashPrevBlock.ToString()); if (dbp) mapBlocksUnknownParent.insert(std::make_pair(block.hashPrevBlock, *dbp)); @@ -5411,7 +5491,7 @@ bool LoadExternalBlockFile(boost::filesystem::path path, CDiskBlockPos* dbp) if (ReadBlockFromDisk(block, it->second)) { LogPrintf("%s: Processing out of order child %s of %s\n", __func__, block.GetHash().ToString(), - head.ToString()); + head.ToString()); CValidationState dummy; @@ -5669,44 +5749,44 @@ bool static AlreadyHave(const CInv& inv) return mapTxLockVote.count(inv.hash); case MSG_SPORK: return mapSporks.count(inv.hash); - case MSG_MASTERNODE_WINNER: - if (masternodePayments.mapMasternodePayeeVotes.count(inv.hash)) { - masternodeSync.AddedMasternodeWinner(inv.hash); + case MSG_GRIDNODE_WINNER: + if (GridnodePayments.mapGridnodePayeeVotes.count(inv.hash)) { + GridnodeSync.AddedGridnodeWinner(inv.hash); return true; } return false; case MSG_BUDGET_VOTE: - if (budget.mapSeenMasternodeBudgetVotes.count(inv.hash)) { - masternodeSync.AddedBudgetItem(inv.hash); + if (budget.mapSeenGridnodeBudgetVotes.count(inv.hash)) { + GridnodeSync.AddedBudgetItem(inv.hash); return true; } return false; case MSG_BUDGET_PROPOSAL: - if (budget.mapSeenMasternodeBudgetProposals.count(inv.hash)) { - masternodeSync.AddedBudgetItem(inv.hash); + if (budget.mapSeenGridnodeBudgetProposals.count(inv.hash)) { + GridnodeSync.AddedBudgetItem(inv.hash); return true; } return false; case MSG_BUDGET_FINALIZED_VOTE: if (budget.mapSeenFinalizedBudgetVotes.count(inv.hash)) { - masternodeSync.AddedBudgetItem(inv.hash); + GridnodeSync.AddedBudgetItem(inv.hash); return true; } return false; case MSG_BUDGET_FINALIZED: if (budget.mapSeenFinalizedBudgets.count(inv.hash)) { - masternodeSync.AddedBudgetItem(inv.hash); + GridnodeSync.AddedBudgetItem(inv.hash); return true; } return false; - case MSG_MASTERNODE_ANNOUNCE: - if (mnodeman.mapSeenMasternodeBroadcast.count(inv.hash)) { - masternodeSync.AddedMasternodeList(inv.hash); + case MSG_GRIDNODE_ANNOUNCE: + if (gnodeman.mapSeenGridnodeBroadcast.count(inv.hash)) { + GridnodeSync.AddedGridnodeList(inv.hash); return true; } return false; - case MSG_MASTERNODE_PING: - return mnodeman.mapSeenMasternodePing.count(inv.hash); + case MSG_GRIDNODE_PING: + return gnodeman.mapSeenGridnodePing.count(inv.hash); } // Don't know what it is, just say we already got one return true; @@ -5837,30 +5917,30 @@ void static ProcessGetData(CNode* pfrom) pushed = true; } } - if (!pushed && inv.type == MSG_MASTERNODE_WINNER) { - if (masternodePayments.mapMasternodePayeeVotes.count(inv.hash)) { + if (!pushed && inv.type == MSG_GRIDNODE_WINNER) { + if (GridnodePayments.mapGridnodePayeeVotes.count(inv.hash)) { CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); ss.reserve(1000); - ss << masternodePayments.mapMasternodePayeeVotes[inv.hash]; - pfrom->PushMessage("mnw", ss); + ss << GridnodePayments.mapGridnodePayeeVotes[inv.hash]; + pfrom->PushMessage("gnw", ss); pushed = true; } } if (!pushed && inv.type == MSG_BUDGET_VOTE) { - if (budget.mapSeenMasternodeBudgetVotes.count(inv.hash)) { + if (budget.mapSeenGridnodeBudgetVotes.count(inv.hash)) { CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); ss.reserve(1000); - ss << budget.mapSeenMasternodeBudgetVotes[inv.hash]; + ss << budget.mapSeenGridnodeBudgetVotes[inv.hash]; pfrom->PushMessage("mvote", ss); pushed = true; } } if (!pushed && inv.type == MSG_BUDGET_PROPOSAL) { - if (budget.mapSeenMasternodeBudgetProposals.count(inv.hash)) { + if (budget.mapSeenGridnodeBudgetProposals.count(inv.hash)) { CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); ss.reserve(1000); - ss << budget.mapSeenMasternodeBudgetProposals[inv.hash]; + ss << budget.mapSeenGridnodeBudgetProposals[inv.hash]; pfrom->PushMessage("mprop", ss); pushed = true; } @@ -5886,22 +5966,22 @@ void static ProcessGetData(CNode* pfrom) } } - if (!pushed && inv.type == MSG_MASTERNODE_ANNOUNCE) { - if (mnodeman.mapSeenMasternodeBroadcast.count(inv.hash)) { + if (!pushed && inv.type == MSG_GRIDNODE_ANNOUNCE) { + if (gnodeman.mapSeenGridnodeBroadcast.count(inv.hash)) { CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); ss.reserve(1000); - ss << mnodeman.mapSeenMasternodeBroadcast[inv.hash]; - pfrom->PushMessage("mnb", ss); + ss << gnodeman.mapSeenGridnodeBroadcast[inv.hash]; + pfrom->PushMessage("gnb", ss); pushed = true; } } - if (!pushed && inv.type == MSG_MASTERNODE_PING) { - if (mnodeman.mapSeenMasternodePing.count(inv.hash)) { + if (!pushed && inv.type == MSG_GRIDNODE_PING) { + if (gnodeman.mapSeenGridnodePing.count(inv.hash)) { CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); ss.reserve(1000); - ss << mnodeman.mapSeenMasternodePing[inv.hash]; - pfrom->PushMessage("mnp", ss); + ss << gnodeman.mapSeenGridnodePing[inv.hash]; + pfrom->PushMessage("gnp", ss); pushed = true; } } @@ -6301,7 +6381,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, vector vEraseQueue; CTransaction tx; - //masternode signed transaction + // gridnode signed transaction bool ignoreFees = false; CTxIn vin; vector vchSig; @@ -6310,30 +6390,30 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (strCommand == "tx") { vRecv >> tx; } else if (strCommand == "dstx") { - //these allow masternodes to publish a limited amount of free transactions + // these allow Gridnodes to publish a limited amount of free transactions vRecv >> tx >> vin >> vchSig >> sigTime; - CMasternode* pmn = mnodeman.Find(vin); - if (pmn != NULL) { - if (!pmn->allowFreeTx) { - //multiple peers can send us a valid masternode transaction - if (fDebug) LogPrintf("dstx: Masternode sending too many transactions %s\n", tx.GetHash().ToString()); + CGridnode* pgn = gnodeman.Find(vin); + if (pgn != NULL) { + if (!pgn->allowFreeTx) { + // multiple peers can send us a valid gridnode transaction + if (fDebug) LogPrintf("dstx: Gridnode sending too many transactions %s\n", tx.GetHash().ToString()); return true; } std::string strMessage = tx.GetHash().ToString() + boost::lexical_cast(sigTime); std::string errorMessage = ""; - if (!obfuScationSigner.VerifyMessage(pmn->pubKeyMasternode, vchSig, strMessage, errorMessage)) { - LogPrintf("dstx: Got bad masternode address signature %s \n", vin.ToString()); - //pfrom->Misbehaving(20); + if (!obfuScationSigner.VerifyMessage(pgn->pubKeyGridnode, vchSig, strMessage, errorMessage)) { + LogPrintf("dstx: Got bad gridnode address signature %s \n", vin.ToString()); + // pfrom->Misbehaving(20); return false; } - LogPrintf("dstx: Got Masternode transaction %s\n", tx.GetHash().ToString()); + LogPrintf("dstx: Got Gridnode transaction %s\n", tx.GetHash().ToString()); ignoreFees = true; - pmn->allowFreeTx = false; + pgn->allowFreeTx = false; if (!mapObfuscationBroadcastTxes.count(tx.GetHash())) { CObfuscationBroadcastTx dstx; @@ -6414,8 +6494,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, BOOST_FOREACH (uint256 hash, vEraseQueue) EraseOrphanTx(hash); } else if (tx.IsZerocoinSpend() && AcceptToMemoryPool(mempool, state, tx, true, &fMissingZerocoinInputs, false, ignoreFees)) { - //Presstab: ZCoin has a bunch of code commented out here. Is this something that should have more going on? - //Also there is nothing that handles fMissingZerocoinInputs. Does there need to be? + // Presstab: ZCoin has a bunch of code commented out here. Is this something that should have more going on? + // Also there is nothing that handles fMissingZerocoinInputs. Does there need to be? RelayTransaction(tx); LogPrint("mempool", "AcceptToMemoryPool: Zerocoinspend peer=%d %s : accepted %s (poolsz %u)\n", pfrom->id, pfrom->cleanSubVer, @@ -6522,14 +6602,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, CInv inv(MSG_BLOCK, hashBlock); LogPrint("net", "received block %s peer=%d\n", inv.hash.ToString(), pfrom->id); - //sometimes we will be sent their most recent block and its not the one we want, in that case tell where we are + // sometimes we will be sent their most recent block and its not the one we want, in that case tell where we are if (!mapBlockIndex.count(block.hashPrevBlock)) { if (find(pfrom->vBlockRequested.begin(), pfrom->vBlockRequested.end(), hashBlock) != pfrom->vBlockRequested.end()) { - //we already asked for this block, so lets work backwards and ask for the previous block + // we already asked for this block, so lets work backwards and ask for the previous block pfrom->PushMessage("getblocks", chainActive.GetLocator(), block.hashPrevBlock); pfrom->vBlockRequested.push_back(block.hashPrevBlock); } else { - //ask to sync to this block + // ask to sync to this block pfrom->PushMessage("getblocks", chainActive.GetLocator(), hashBlock); pfrom->vBlockRequested.push_back(hashBlock); } @@ -6548,7 +6628,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, if (lockMain) Misbehaving(pfrom->GetId(), nDoS); } } - //disconnect this node if its old protocol version + // disconnect this node if its old protocol version pfrom->DisconnectOldProtocol(ActiveProtocol(), strCommand); } else { LogPrint("net", "%s : Already processed block %s, skipping ProcessNewBlock()\n", __func__, block.GetHash().GetHex()); @@ -6776,14 +6856,14 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, } } } else { - //probably one the extensions + // probably one the extensions obfuScationPool.ProcessMessageObfuscation(pfrom, strCommand, vRecv); - mnodeman.ProcessMessage(pfrom, strCommand, vRecv); + gnodeman.ProcessMessage(pfrom, strCommand, vRecv); budget.ProcessMessage(pfrom, strCommand, vRecv); - masternodePayments.ProcessMessageMasternodePayments(pfrom, strCommand, vRecv); + GridnodePayments.ProcessMessageGridnodePayments(pfrom, strCommand, vRecv); ProcessMessageSwiftTX(pfrom, strCommand, vRecv); ProcessSpork(pfrom, strCommand, vRecv); - masternodeSync.ProcessMessage(pfrom, strCommand, vRecv); + GridnodeSync.ProcessMessage(pfrom, strCommand, vRecv); } @@ -6796,22 +6876,21 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // it was the one which was commented out int ActiveProtocol() { - // SPORK_14 is used for 70913 (v3.1.0+) - if (IsSporkActive(SPORK_14_NEW_PROTOCOL_ENFORCEMENT)) - return MIN_PEER_PROTO_VERSION_AFTER_ENFORCEMENT; - - // SPORK_15 was used for 70912 (v3.0.5+), commented out now. - //if (IsSporkActive(SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2)) - // return MIN_PEER_PROTO_VERSION_AFTER_ENFORCEMENT; - + boost::asio::io_context io_context; + restclient restclient(io_context); + if (restclient.checkForSporks()) { + //LogPrintf("Protocol has been foced to (%s): We should start rejecting all old protocols now!\n", MIN_PEER_PROTO_VERSION_AFTER_HEDGEHOG); + return MIN_PEER_PROTO_VERSION_AFTER_HEDGEHOG; + } + //LogPrintf("Protocol will remain (%s): There are no new sporks on hedgehog yet!\n", MIN_PEER_PROTO_VERSION_BEFORE_ENFORCEMENT); return MIN_PEER_PROTO_VERSION_BEFORE_ENFORCEMENT; } // requires LOCK(cs_vRecvMsg) bool ProcessMessages(CNode* pfrom) { - //if (fDebug) - // LogPrintf("ProcessMessages(%u messages)\n", pfrom->vRecvMsg.size()); + // if (fDebug) + // LogPrintf("ProcessMessages(%u messages)\n", pfrom->vRecvMsg.size()); // // Message format @@ -6838,10 +6917,10 @@ bool ProcessMessages(CNode* pfrom) // get next message CNetMessage& msg = *it; - //if (fDebug) - // LogPrintf("ProcessMessages(message %u msgsz, %u bytes, complete:%s)\n", - // msg.hdr.nMessageSize, msg.vRecv.size(), - // msg.complete() ? "Y" : "N"); + // if (fDebug) + // LogPrintf("ProcessMessages(message %u msgsz, %u bytes, complete:%s)\n", + // msg.hdr.nMessageSize, msg.vRecv.size(), + // msg.complete() ? "Y" : "N"); // end, if an incomplete message is found if (!msg.complete()) @@ -7023,9 +7102,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle) if (nSyncStarted == 0 || pindexBestHeader->GetBlockTime() > GetAdjustedTime() - 6 * 60 * 60) { // NOTE: was "close to today" and 24h in Bitcoin state.fSyncStarted = true; nSyncStarted++; - //CBlockIndex *pindexStart = pindexBestHeader->pprev ? pindexBestHeader->pprev : pindexBestHeader; - //LogPrint("net", "initial getheaders (%d) to peer=%d (startheight:%d)\n", pindexStart->nHeight, pto->id, pto->nStartingHeight); - //pto->PushMessage("getheaders", chainActive.GetLocator(pindexStart), uint256(0)); + // CBlockIndex *pindexStart = pindexBestHeader->pprev ? pindexBestHeader->pprev : pindexBestHeader; + // LogPrint("net", "initial getheaders (%d) to peer=%d (startheight:%d)\n", pindexStart->nHeight, pto->id, pto->nStartingHeight); + // pto->PushMessage("getheaders", chainActive.GetLocator(pindexStart), uint256(0)); pto->PushMessage("getblocks", chainActive.GetLocator(chainActive.Tip()), uint256(0)); } } diff --git a/daemon/main.h b/daemon/main.h index 20fb46635870..849cb97225ac 100644 --- a/daemon/main.h +++ b/daemon/main.h @@ -165,7 +165,6 @@ extern bool fVerifyingBlocks; extern bool fLargeWorkForkFound; extern bool fLargeWorkInvalidChainFound; -extern unsigned int nStakeMinAge; extern int64_t nLastCoinStakeSearchInterval; extern int64_t nLastCoinStakeSearchTime; extern int64_t nReserveBalance; @@ -256,7 +255,7 @@ bool DisconnectBlocksAndReprocess(int blocks); // ***TODO*** double ConvertBitsToDouble(unsigned int nBits); -int64_t GetMasternodePayment(int nHeight, int64_t blockValue, int nMasternodeCount, bool isZUNIGRIDStake); +int64_t GetGridnodePayment(int nHeight, int64_t blockValue, int nGridnodeCount, bool isZUNIGRIDStake); unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader* pblock, bool fProofOfStake); bool ActivateBestChain(CValidationState& state, CBlock* pblock = NULL, bool fAlreadyChecked = false); @@ -665,4 +664,7 @@ struct CBlockTemplate { std::vector vTxSigOps; }; +/** Check if lock period is active for a transaction */ +bool CheckIfLockPeriodIsActive(CTransaction tx); + #endif // BITCOIN_MAIN_H diff --git a/daemon/massif.out.140836 b/daemon/massif.out.140836 new file mode 100644 index 000000000000..5161f7dfc352 --- /dev/null +++ b/daemon/massif.out.140836 @@ -0,0 +1,917 @@ +desc: (none) +cmd: ./unigridd +time_unit: i +#----------- +snapshot=0 +#----------- +time=0 +mem_heap_B=0 +mem_heap_extra_B=0 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=1 +#----------- +time=13165504 +mem_heap_B=232 +mem_heap_extra_B=16 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=2 +#----------- +time=13324084 +mem_heap_B=81628 +mem_heap_extra_B=12628 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=3 +#----------- +time=13477480 +mem_heap_B=81980 +mem_heap_extra_B=12684 +mem_stacks_B=0 +heap_tree=detailed +n4: 81980 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 72656 0x5ADE61B: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 72656 0x5ADFDEB: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 72656 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72656 0x4011C90: call_init (dl-init.c:30) + n1: 72656 0x4011C90: _dl_init (dl-init.c:119) + n0: 72656 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 7648 0x5ADE62D: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 7648 0x5ADFDEB: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 7648 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 7648 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 7648 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 7648 0x4011C90: call_init (dl-init.c:30) + n1: 7648 0x4011C90: _dl_init (dl-init.c:119) + n0: 7648 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 1411 0x5ADE9A7: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 1411 0x5ADFE25: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 1411 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 1411 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 1411 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 1411 0x4011C90: call_init (dl-init.c:30) + n1: 1411 0x4011C90: _dl_init (dl-init.c:119) + n0: 1411 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n0: 265 in 2 places, all below massif's threshold (1.00%) +#----------- +snapshot=4 +#----------- +time=13586972 +mem_heap_B=167907 +mem_heap_extra_B=11213 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=5 +#----------- +time=13787646 +mem_heap_B=215830 +mem_heap_extra_B=13346 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=6 +#----------- +time=13912511 +mem_heap_B=215830 +mem_heap_extra_B=13346 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=7 +#----------- +time=14246137 +mem_heap_B=215894 +mem_heap_extra_B=13354 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=8 +#----------- +time=14319982 +mem_heap_B=225982 +mem_heap_extra_B=16858 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=9 +#----------- +time=14471708 +mem_heap_B=243307 +mem_heap_extra_B=21093 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=10 +#----------- +time=14588049 +mem_heap_B=243950 +mem_heap_extra_B=21122 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=11 +#----------- +time=14737852 +mem_heap_B=246162 +mem_heap_extra_B=21510 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=12 +#----------- +time=14841199 +mem_heap_B=247802 +mem_heap_extra_B=21526 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=13 +#----------- +time=15010000 +mem_heap_B=250770 +mem_heap_extra_B=21510 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=14 +#----------- +time=15154501 +mem_heap_B=250770 +mem_heap_extra_B=21510 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=15 +#----------- +time=15298981 +mem_heap_B=250770 +mem_heap_extra_B=21510 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=16 +#----------- +time=15523145 +mem_heap_B=256914 +mem_heap_extra_B=21510 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=17 +#----------- +time=15609978 +mem_heap_B=258437 +mem_heap_extra_B=21715 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=18 +#----------- +time=15797558 +mem_heap_B=260524 +mem_heap_extra_B=22116 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=19 +#----------- +time=16021151 +mem_heap_B=262828 +mem_heap_extra_B=22116 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=20 +#----------- +time=16160395 +mem_heap_B=265900 +mem_heap_extra_B=22116 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=21 +#----------- +time=16280795 +mem_heap_B=265900 +mem_heap_extra_B=22116 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=22 +#----------- +time=16401195 +mem_heap_B=265900 +mem_heap_extra_B=22116 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=23 +#----------- +time=16517049 +mem_heap_B=278188 +mem_heap_extra_B=22124 +mem_stacks_B=0 +heap_tree=detailed +n8: 278188 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 90592 0x5ADE61B: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n2: 90592 0x5ADFDEB: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 72656 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72656 0x4011C90: call_init (dl-init.c:30) + n1: 72656 0x4011C90: _dl_init (dl-init.c:119) + n0: 72656 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 17936 0x555D8C4: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 17936 0x4011C90: call_init (dl-init.c:30) + n1: 17936 0x4011C90: _dl_init (dl-init.c:119) + n0: 17936 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 72704 0x498CA99: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 72704 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72704 0x4011C90: call_init (dl-init.c:30) + n1: 72704 0x4011C90: _dl_init (dl-init.c:119) + n0: 72704 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 30720 0x2C83C0: void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CAddress const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 30720 0x4293CE: convertSeed6(std::vector >&, SeedSpec6 const*, unsigned int) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n2: 30720 0x42D870: CMainParams::CMainParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 18432 0x42E1BF: CTestNetParams::CTestNetParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 18432 0x217F51: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 18432 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 18432 0x4C7B03F: (below main) (libc-start.c:264) + n1: 12288 0x217F2B: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n0: 27316 in 388 places, all below massif's threshold (1.00%) + n1: 20000 0x3A7531: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 20000 0x3A7559: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 9576 0x376408: CRPCTable::CRPCTable() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x213282: _GLOBAL__sub_I__ZN9RPCServer9OnStartedEN5boost8functionIFvvEEE (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 9576 0x4C7B03F: (below main) (libc-start.c:264) + n1: 7280 0x4C9DC71: __new_exitfn (cxa_atexit.c:114) + n1: 7280 0x4C9DE56: __internal_atexit (cxa_atexit.c:44) + n1: 7280 0x4C9DE56: __cxa_atexit (cxa_atexit.c:70) + n0: 7280 in 6 places, all below massif's threshold (1.00%) +#----------- +snapshot=24 +#----------- +time=16697682 +mem_heap_B=272044 +mem_heap_extra_B=22116 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=25 +#----------- +time=16816156 +mem_heap_B=272776 +mem_heap_extra_B=22176 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=26 +#----------- +time=16934963 +mem_heap_B=272493 +mem_heap_extra_B=21875 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=27 +#----------- +time=17063244 +mem_heap_B=273351 +mem_heap_extra_B=22089 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=28 +#----------- +time=17179585 +mem_heap_B=273994 +mem_heap_extra_B=22118 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=29 +#----------- +time=17299288 +mem_heap_B=276206 +mem_heap_extra_B=22522 +mem_stacks_B=0 +heap_tree=detailed +n8: 276206 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 90592 0x5ADE61B: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n2: 90592 0x5ADFDEB: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 72656 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72656 0x4011C90: call_init (dl-init.c:30) + n1: 72656 0x4011C90: _dl_init (dl-init.c:119) + n0: 72656 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 17936 0x555D8C4: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 17936 0x4011C90: call_init (dl-init.c:30) + n1: 17936 0x4011C90: _dl_init (dl-init.c:119) + n0: 17936 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 72704 0x498CA99: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 72704 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72704 0x4011C90: call_init (dl-init.c:30) + n1: 72704 0x4011C90: _dl_init (dl-init.c:119) + n0: 72704 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n0: 29942 in 401 places, all below massif's threshold (1.00%) + n1: 26112 0x2C83C0: void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CAddress const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 26112 0x4293CE: convertSeed6(std::vector >&, SeedSpec6 const*, unsigned int) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n2: 26112 0x42D870: CMainParams::CMainParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n2: 13824 0x42E1BF: CTestNetParams::CTestNetParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x217F51: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n0: 1536 in 1 place, below massif's threshold (1.00%) + n1: 12288 0x217F2B: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n1: 20000 0x3A7531: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 20000 0x3A7559: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 9576 0x376408: CRPCTable::CRPCTable() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x213282: _GLOBAL__sub_I__ZN9RPCServer9OnStartedEN5boost8functionIFvvEEE (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 9576 0x4C7B03F: (below main) (libc-start.c:264) + n1: 7280 0x4C9DC71: __new_exitfn (cxa_atexit.c:114) + n1: 7280 0x4C9DE56: __internal_atexit (cxa_atexit.c:44) + n1: 7280 0x4C9DE56: __cxa_atexit (cxa_atexit.c:70) + n0: 7280 in 6 places, all below massif's threshold (1.00%) +#----------- +snapshot=30 +#----------- +time=17420234 +mem_heap_B=277742 +mem_heap_extra_B=22522 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=31 +#----------- +time=17540634 +mem_heap_B=277742 +mem_heap_extra_B=22522 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=32 +#----------- +time=17746098 +mem_heap_B=280814 +mem_heap_extra_B=22522 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=33 +#----------- +time=17854458 +mem_heap_B=280814 +mem_heap_extra_B=22522 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=34 +#----------- +time=18024442 +mem_heap_B=286958 +mem_heap_extra_B=22522 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=35 +#----------- +time=18132885 +mem_heap_B=286958 +mem_heap_extra_B=22522 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=36 +#----------- +time=18269419 +mem_heap_B=287690 +mem_heap_extra_B=22582 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=37 +#----------- +time=18376186 +mem_heap_B=287407 +mem_heap_extra_B=22281 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=38 +#----------- +time=18568128 +mem_heap_B=287474 +mem_heap_extra_B=22302 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=39 +#----------- +time=18712901 +mem_heap_B=288908 +mem_heap_extra_B=22508 +mem_stacks_B=0 +heap_tree=detailed +n9: 288908 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 90592 0x5ADE61B: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n2: 90592 0x5ADFDEB: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 72656 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72656 0x4011C90: call_init (dl-init.c:30) + n1: 72656 0x4011C90: _dl_init (dl-init.c:119) + n0: 72656 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 17936 0x555D8C4: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 17936 0x4011C90: call_init (dl-init.c:30) + n1: 17936 0x4011C90: _dl_init (dl-init.c:119) + n0: 17936 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 72704 0x498CA99: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 72704 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72704 0x4011C90: call_init (dl-init.c:30) + n1: 72704 0x4011C90: _dl_init (dl-init.c:119) + n0: 72704 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 36864 0x2C83C0: void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CAddress const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 36864 0x4293CE: convertSeed6(std::vector >&, SeedSpec6 const*, unsigned int) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n2: 36864 0x42D870: CMainParams::CMainParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n2: 24576 0x42E1BF: CTestNetParams::CTestNetParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x217F51: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n1: 12288 0x42EFE2: CRegTestParams::CRegTestParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x217F77: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n1: 12288 0x217F2B: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n0: 28611 in 401 places, all below massif's threshold (1.00%) + n1: 20000 0x3A7531: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 20000 0x3A7559: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 9576 0x376408: CRPCTable::CRPCTable() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x213282: _GLOBAL__sub_I__ZN9RPCServer9OnStartedEN5boost8functionIFvvEEE (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 9576 0x4C7B03F: (below main) (libc-start.c:264) + n1: 7280 0x4C9DC71: __new_exitfn (cxa_atexit.c:114) + n1: 7280 0x4C9DE56: __internal_atexit (cxa_atexit.c:44) + n1: 7280 0x4C9DE56: __cxa_atexit (cxa_atexit.c:70) + n0: 7280 in 6 places, all below massif's threshold (1.00%) + n1: 3281 0x4A2935D: std::__cxx11::basic_string, std::allocator >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 3281 0x4A2A285: std::__cxx11::basic_string, std::allocator >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n0: 3281 in 6 places, all below massif's threshold (1.00%) +#----------- +snapshot=40 +#----------- +time=18874744 +mem_heap_B=291120 +mem_heap_extra_B=22896 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=41 +#----------- +time=18983651 +mem_heap_B=292656 +mem_heap_extra_B=22896 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=42 +#----------- +time=19171055 +mem_heap_B=295728 +mem_heap_extra_B=22896 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=43 +#----------- +time=19387775 +mem_heap_B=295728 +mem_heap_extra_B=22896 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=44 +#----------- +time=19612022 +mem_heap_B=301872 +mem_heap_extra_B=22896 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=45 +#----------- +time=19827930 +mem_heap_B=328920 +mem_heap_extra_B=25120 +mem_stacks_B=0 +heap_tree=detailed +n10: 328920 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 90592 0x5ADE61B: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n2: 90592 0x5ADFDEB: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 72656 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72656 0x4011C90: call_init (dl-init.c:30) + n1: 72656 0x4011C90: _dl_init (dl-init.c:119) + n0: 72656 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 17936 0x555D8C4: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 17936 0x4011C90: call_init (dl-init.c:30) + n1: 17936 0x4011C90: _dl_init (dl-init.c:119) + n0: 17936 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 72704 0x498CA99: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 72704 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72704 0x4011C90: call_init (dl-init.c:30) + n1: 72704 0x4011C90: _dl_init (dl-init.c:119) + n0: 72704 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 49152 0x2C83C0: void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CAddress const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 49152 0x4293CE: convertSeed6(std::vector >&, SeedSpec6 const*, unsigned int) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n3: 49152 0x42D870: CMainParams::CMainParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n2: 24576 0x42E1BF: CTestNetParams::CTestNetParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x217F51: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n1: 12288 0x42EFE2: CRegTestParams::CRegTestParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x217F77: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n1: 12288 0x217F2B: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n1: 12288 0x217F9D: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n0: 40171 in 532 places, all below massif's threshold (1.00%) + n1: 20000 0x3A7531: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 20000 0x3A7559: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 14560 0x4C9DC71: __new_exitfn (cxa_atexit.c:114) + n1: 14560 0x4C9DE56: __internal_atexit (cxa_atexit.c:44) + n2: 14560 0x4C9DE56: __cxa_atexit (cxa_atexit.c:70) + n0: 10400 in 10 places, all below massif's threshold (1.00%) + n1: 4160 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 4160 0x4C7B03F: (below main) (libc-start.c:264) + n1: 9576 0x376408: CRPCTable::CRPCTable() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x213282: _GLOBAL__sub_I__ZN9RPCServer9OnStartedEN5boost8functionIFvvEEE (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 9576 0x4C7B03F: (below main) (libc-start.c:264) + n1: 7456 0x4C88A7E: _nl_intern_locale_data (loadlocale.c:98) + n1: 7456 0x4C89423: _nl_load_locale_from_archive (loadarchive.c:477) + n1: 7456 0x4C881FD: _nl_find_locale (findlocale.c:153) + n1: 7456 0x4C8A19F: newlocale (newlocale.c:170) + n1: 7456 0x49B2CD1: std::locale::facet::_S_create_c_locale(__locale_struct*&, char const*, __locale_struct*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 7456 0x49A4ADC: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 7456 0x49A5D87: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 7456 0x49614C: SetupEnvironment() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 7456 0x20E114: main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n2: 4709 0x4A2935D: std::__cxx11::basic_string, std::allocator >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 4196 0x4A2A285: std::__cxx11::basic_string, std::allocator >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n0: 4196 in 6 places, all below massif's threshold (1.00%) + n0: 513 in 1 place, below massif's threshold (1.00%) +#----------- +snapshot=46 +#----------- +time=19966572 +mem_heap_B=327897 +mem_heap_extra_B=24959 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=47 +#----------- +time=20065002 +mem_heap_B=350323 +mem_heap_extra_B=26853 +mem_stacks_B=0 +heap_tree=detailed +n12: 350323 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 90592 0x5ADE61B: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n2: 90592 0x5ADFDEB: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 72656 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72656 0x4011C90: call_init (dl-init.c:30) + n1: 72656 0x4011C90: _dl_init (dl-init.c:119) + n0: 72656 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 17936 0x555D8C4: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 17936 0x4011C90: call_init (dl-init.c:30) + n1: 17936 0x4011C90: _dl_init (dl-init.c:119) + n0: 17936 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 72704 0x498CA99: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 72704 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72704 0x4011C90: call_init (dl-init.c:30) + n1: 72704 0x4011C90: _dl_init (dl-init.c:119) + n0: 72704 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 49152 0x2C83C0: void std::vector >::_M_realloc_insert(__gnu_cxx::__normal_iterator > >, CAddress const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 49152 0x4293CE: convertSeed6(std::vector >&, SeedSpec6 const*, unsigned int) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n3: 49152 0x42D870: CMainParams::CMainParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n2: 24576 0x42E1BF: CTestNetParams::CTestNetParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x217F51: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n1: 12288 0x42EFE2: CRegTestParams::CRegTestParams() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x217F77: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n1: 12288 0x217F2B: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n1: 12288 0x217F9D: __static_initialization_and_destruction_0(int, int) [clone .constprop.0] (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 12288 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 12288 0x4C7B03F: (below main) (libc-start.c:264) + n0: 48557 in 642 places, all below massif's threshold (1.00%) + n1: 20000 0x3A7531: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 20000 0x3A7559: std::vector >::_M_default_append(unsigned long) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x3A2634: CTxMemPool::CTxMemPool(CFeeRate const&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x20ED1C: _GLOBAL__sub_I_cs_main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 20000 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 20000 0x4C7B03F: (below main) (libc-start.c:264) + n1: 14560 0x4C9DC71: __new_exitfn (cxa_atexit.c:114) + n1: 14560 0x4C9DE56: __internal_atexit (cxa_atexit.c:44) + n2: 14560 0x4C9DE56: __cxa_atexit (cxa_atexit.c:70) + n0: 10400 in 10 places, all below massif's threshold (1.00%) + n1: 4160 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 4160 0x4C7B03F: (below main) (libc-start.c:264) + n1: 9576 0x376408: CRPCTable::CRPCTable() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x213282: _GLOBAL__sub_I__ZN9RPCServer9OnStartedEN5boost8functionIFvvEEE (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 9576 0x877E9C: __libc_csu_init (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 9576 0x4C7B03F: (below main) (libc-start.c:264) + n1: 8192 0x49F1D03: std::basic_filebuf >::_M_allocate_internal_buffer() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 8192 0x49F5F66: std::basic_filebuf >::open(char const*, std::_Ios_Openmode) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 8192 0x498BD1: ReadConfigFile(std::map, std::allocator >, std::__cxx11::basic_string, std::allocator >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::__cxx11::basic_string, std::allocator > > > >&, std::map, std::allocator >, std::vector, std::allocator >, std::allocator, std::allocator > > >, std::less, std::allocator > >, std::allocator, std::allocator > const, std::vector, std::allocator >, std::allocator, std::allocator > > > > > >&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 8192 0x220882: AppInit(int, char**) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 8192 0x20E123: main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 7456 0x4C88A7E: _nl_intern_locale_data (loadlocale.c:98) + n1: 7456 0x4C89423: _nl_load_locale_from_archive (loadarchive.c:477) + n1: 7456 0x4C881FD: _nl_find_locale (findlocale.c:153) + n1: 7456 0x4C8A19F: newlocale (newlocale.c:170) + n1: 7456 0x49B2CD1: std::locale::facet::_S_create_c_locale(__locale_struct*&, char const*, __locale_struct*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 7456 0x49A4ADC: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 7456 0x49A5D87: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 7456 0x49614C: SetupEnvironment() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 7456 0x20E114: main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 5264 0x4C8A8D1: duplocale (duplocale.c:53) + n0: 5264 in 15 places, all below massif's threshold (1.00%) + n2: 4270 0x4A2935D: std::__cxx11::basic_string, std::allocator >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 4196 0x4A2A285: std::__cxx11::basic_string, std::allocator >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n0: 4196 in 6 places, all below massif's threshold (1.00%) + n0: 74 in 2 places, all below massif's threshold (1.00%) +#----------- +snapshot=48 +#----------- +time=20119199 +mem_heap_B=343453 +mem_heap_extra_B=27171 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=49 +#----------- +time=20498094 +mem_heap_B=343781 +mem_heap_extra_B=27219 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=50 +#----------- +time=20874108 +mem_heap_B=343781 +mem_heap_extra_B=27219 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=51 +#----------- +time=82996071 +mem_heap_B=5586838 +mem_heap_extra_B=27274 +mem_stacks_B=0 +heap_tree=peak +n7: 5586838 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 2097152 0x65259A: secp256k1_context_create (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 2097152 0x453855: ECCVerifyHandle::ECCVerifyHandle() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 2097152 0x23F6FF: AppInit2(boost::thread_group&, CScheduler&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 2097152 0x220D56: AppInit(int, char**) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 2097152 0x20E123: main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 1441792 0x6525B0: secp256k1_context_create (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 1441792 0x453855: ECCVerifyHandle::ECCVerifyHandle() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 1441792 0x23F6FF: AppInit2(boost::thread_group&, CScheduler&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 1441792 0x220D56: AppInit(int, char**) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 1441792 0x20E123: main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 1048576 0x65257A: secp256k1_context_create (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 1048576 0x453855: ECCVerifyHandle::ECCVerifyHandle() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 1048576 0x23F6FF: AppInit2(boost::thread_group&, CScheduler&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 1048576 0x220D56: AppInit(int, char**) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 1048576 0x20E123: main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 655360 0x6525C8: secp256k1_context_create (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 655360 0x453855: ECCVerifyHandle::ECCVerifyHandle() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 655360 0x23F6FF: AppInit2(boost::thread_group&, CScheduler&) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n1: 655360 0x220D56: AppInit(int, char**) (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 655360 0x20E123: main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 180662 in 671 places, all below massif's threshold (1.00%) + n1: 90592 0x5ADE61B: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n2: 90592 0x5ADFDEB: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 72656 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72656 0x4011C90: call_init (dl-init.c:30) + n1: 72656 0x4011C90: _dl_init (dl-init.c:119) + n0: 72656 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n0: 17936 in 1 place, below massif's threshold (1.00%) + n1: 72704 0x498CA99: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 72704 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72704 0x4011C90: call_init (dl-init.c:30) + n1: 72704 0x4011C90: _dl_init (dl-init.c:119) + n0: 72704 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) +#----------- +snapshot=52 +#----------- +time=83295204 +mem_heap_B=1392640 +mem_heap_extra_B=27296 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=53 +#----------- +time=84485160 +mem_heap_B=1392640 +mem_heap_extra_B=27296 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=54 +#----------- +time=84548434 +mem_heap_B=1392678 +mem_heap_extra_B=27258 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=55 +#----------- +time=87762027 +mem_heap_B=1392715 +mem_heap_extra_B=27309 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=56 +#----------- +time=87816284 +mem_heap_B=1393142 +mem_heap_extra_B=27338 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=57 +#----------- +time=87870656 +mem_heap_B=1394806 +mem_heap_extra_B=27402 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=58 +#----------- +time=87929150 +mem_heap_B=1393240 +mem_heap_extra_B=27344 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=59 +#----------- +time=87986896 +mem_heap_B=344116 +mem_heap_extra_B=27252 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=60 +#----------- +time=88041116 +mem_heap_B=315293 +mem_heap_extra_B=23715 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=61 +#----------- +time=88097859 +mem_heap_B=178335 +mem_heap_extra_B=11785 +mem_stacks_B=0 +heap_tree=detailed +n5: 178335 (heap allocation functions) malloc/new/new[], --alloc-fns, etc. + n1: 90592 0x5ADE61B: ??? (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n2: 90592 0x5ADFDEB: asn1_array2tree (in /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0) + n1: 72656 0x555D818: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 72656 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72656 0x4011C90: call_init (dl-init.c:30) + n1: 72656 0x4011C90: _dl_init (dl-init.c:119) + n0: 72656 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 17936 0x555D8C4: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x5531564: ??? (in /usr/lib/x86_64-linux-gnu/libgnutls.so.30.27.0) + n1: 17936 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 17936 0x4011C90: call_init (dl-init.c:30) + n1: 17936 0x4011C90: _dl_init (dl-init.c:119) + n0: 17936 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 72704 0x498CA99: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 72704 0x4011B89: call_init.part.0 (dl-init.c:72) + n1: 72704 0x4011C90: call_init (dl-init.c:30) + n1: 72704 0x4011C90: _dl_init (dl-init.c:119) + n0: 72704 0x4001139: ??? (in /usr/lib/x86_64-linux-gnu/ld-2.31.so) + n1: 7456 0x4C88A7E: _nl_intern_locale_data (loadlocale.c:98) + n1: 7456 0x4C89423: _nl_load_locale_from_archive (loadarchive.c:477) + n1: 7456 0x4C881FD: _nl_find_locale (findlocale.c:153) + n1: 7456 0x4C8A19F: newlocale (newlocale.c:170) + n1: 7456 0x49B2CD1: std::locale::facet::_S_create_c_locale(__locale_struct*&, char const*, __locale_struct*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 7456 0x49A4ADC: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 7456 0x49A5D87: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28) + n1: 7456 0x49614C: SetupEnvironment() (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 7456 0x20E114: main (in /home/marcus/Documents/unigrid/daemon/daemon/unigridd) + n0: 5535 in 697 places, all below massif's threshold (1.00%) + n2: 2048 0x5144C0D: CRYPTO_zalloc (in /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1) + n2: 1928 0x5083C78: ??? (in /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1) + n1: 1920 0x508407E: BN_bin2bn (in /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1) + n0: 1920 in 4 places, all below massif's threshold (1.00%) + n0: 8 in 1 place, below massif's threshold (1.00%) + n0: 120 in 1 place, below massif's threshold (1.00%) +#----------- +snapshot=62 +#----------- +time=88161108 +mem_heap_B=178295 +mem_heap_extra_B=11761 +mem_stacks_B=0 +heap_tree=empty +#----------- +snapshot=63 +#----------- +time=88215395 +mem_heap_B=93403 +mem_heap_extra_B=1821 +mem_stacks_B=0 +heap_tree=empty diff --git a/daemon/masternode-sync.cpp b/daemon/masternode-sync.cpp deleted file mode 100644 index f1a9afb9f466..000000000000 --- a/daemon/masternode-sync.cpp +++ /dev/null @@ -1,405 +0,0 @@ -// Copyright (c) 2014-2015 The Dash developers -// Copyright (c) 2015-2017 The PIVX developers -// Copyright (c) 2018-2019 The UNIGRID organization -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -// clang-format off -#include "main.h" -#include "activemasternode.h" -#include "masternode-sync.h" -#include "masternode-payments.h" -#include "masternode-budget.h" -#include "masternode.h" -#include "masternodeman.h" -#include "spork.h" -#include "util.h" -#include "addrman.h" -// clang-format on - -class CMasternodeSync; -CMasternodeSync masternodeSync; - -CMasternodeSync::CMasternodeSync() -{ - Reset(); -} - -bool CMasternodeSync::IsSynced() -{ - return RequestedMasternodeAssets == MASTERNODE_SYNC_FINISHED; -} - -bool CMasternodeSync::IsBlockchainSynced() -{ - static bool fBlockchainSynced = false; - static int64_t lastProcess = GetTime(); - - // if the last call to this function was more than 60 minutes ago (client was in sleep mode) reset the sync process - if (GetTime() - lastProcess > 60 * 60) { - Reset(); - fBlockchainSynced = false; - } - lastProcess = GetTime(); - - if (fBlockchainSynced) return true; - - if (fImporting || fReindex) return false; - - TRY_LOCK(cs_main, lockMain); - if (!lockMain) return false; - - CBlockIndex* pindex = chainActive.Tip(); - if (pindex == NULL) return false; - - - if (pindex->nTime + 3 * 60 * 60 < GetTime()) - return false; - - fBlockchainSynced = true; - - return true; -} - -void CMasternodeSync::Reset() -{ - lastMasternodeList = 0; - lastMasternodeWinner = 0; - lastBudgetItem = 0; - mapSeenSyncMNB.clear(); - mapSeenSyncMNW.clear(); - mapSeenSyncBudget.clear(); - lastFailure = 0; - nCountFailures = 0; - sumMasternodeList = 0; - sumMasternodeWinner = 0; - sumBudgetItemProp = 0; - sumBudgetItemFin = 0; - countMasternodeList = 0; - countMasternodeWinner = 0; - countBudgetItemProp = 0; - countBudgetItemFin = 0; - RequestedMasternodeAssets = MASTERNODE_SYNC_INITIAL; - RequestedMasternodeAttempt = 0; - nAssetSyncStarted = GetTime(); -} - -void CMasternodeSync::AddedMasternodeList(uint256 hash) -{ - if (mnodeman.mapSeenMasternodeBroadcast.count(hash)) { - if (mapSeenSyncMNB[hash] < MASTERNODE_SYNC_THRESHOLD) { - lastMasternodeList = GetTime(); - mapSeenSyncMNB[hash]++; - } - } else { - lastMasternodeList = GetTime(); - mapSeenSyncMNB.insert(make_pair(hash, 1)); - } -} - -void CMasternodeSync::AddedMasternodeWinner(uint256 hash) -{ - if (masternodePayments.mapMasternodePayeeVotes.count(hash)) { - if (mapSeenSyncMNW[hash] < MASTERNODE_SYNC_THRESHOLD) { - lastMasternodeWinner = GetTime(); - mapSeenSyncMNW[hash]++; - } - } else { - lastMasternodeWinner = GetTime(); - mapSeenSyncMNW.insert(make_pair(hash, 1)); - } -} - -void CMasternodeSync::AddedBudgetItem(uint256 hash) -{ - if (budget.mapSeenMasternodeBudgetProposals.count(hash) || budget.mapSeenMasternodeBudgetVotes.count(hash) || - budget.mapSeenFinalizedBudgets.count(hash) || budget.mapSeenFinalizedBudgetVotes.count(hash)) { - if (mapSeenSyncBudget[hash] < MASTERNODE_SYNC_THRESHOLD) { - lastBudgetItem = GetTime(); - mapSeenSyncBudget[hash]++; - } - } else { - lastBudgetItem = GetTime(); - mapSeenSyncBudget.insert(make_pair(hash, 1)); - } -} - -bool CMasternodeSync::IsBudgetPropEmpty() -{ - return sumBudgetItemProp == 0 && countBudgetItemProp > 0; -} - -bool CMasternodeSync::IsBudgetFinEmpty() -{ - return sumBudgetItemFin == 0 && countBudgetItemFin > 0; -} - -void CMasternodeSync::GetNextAsset() -{ - switch (RequestedMasternodeAssets) { - case (MASTERNODE_SYNC_INITIAL): - case (MASTERNODE_SYNC_FAILED): // should never be used here actually, use Reset() instead - ClearFulfilledRequest(); - RequestedMasternodeAssets = MASTERNODE_SYNC_SPORKS; - break; - case (MASTERNODE_SYNC_SPORKS): - RequestedMasternodeAssets = MASTERNODE_SYNC_LIST; - break; - case (MASTERNODE_SYNC_LIST): - RequestedMasternodeAssets = MASTERNODE_SYNC_MNW; - break; - case (MASTERNODE_SYNC_MNW): - RequestedMasternodeAssets = MASTERNODE_SYNC_BUDGET; - break; - case (MASTERNODE_SYNC_BUDGET): - LogPrintf("CMasternodeSync::GetNextAsset - Sync has finished\n"); - RequestedMasternodeAssets = MASTERNODE_SYNC_FINISHED; - break; - } - RequestedMasternodeAttempt = 0; - nAssetSyncStarted = GetTime(); -} - -std::string CMasternodeSync::GetSyncStatus() -{ - switch (masternodeSync.RequestedMasternodeAssets) { - case MASTERNODE_SYNC_INITIAL: - return _("Synchronization pending..."); - case MASTERNODE_SYNC_SPORKS: - return _("Synchronizing sporks..."); - case MASTERNODE_SYNC_LIST: - return _("Synchronizing masternodes..."); - case MASTERNODE_SYNC_MNW: - return _("Synchronizing masternode winners..."); - case MASTERNODE_SYNC_BUDGET: - return _("Synchronizing budgets..."); - case MASTERNODE_SYNC_FAILED: - return _("Synchronization failed"); - case MASTERNODE_SYNC_FINISHED: - return _("Synchronization finished"); - } - return ""; -} - -void CMasternodeSync::ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) -{ - if (strCommand == "ssc") { //Sync status count - int nItemID; - int nCount; - vRecv >> nItemID >> nCount; - - if (RequestedMasternodeAssets >= MASTERNODE_SYNC_FINISHED) return; - - //this means we will receive no further communication - switch (nItemID) { - case (MASTERNODE_SYNC_LIST): - if (nItemID != RequestedMasternodeAssets) return; - sumMasternodeList += nCount; - countMasternodeList++; - break; - case (MASTERNODE_SYNC_MNW): - if (nItemID != RequestedMasternodeAssets) return; - sumMasternodeWinner += nCount; - countMasternodeWinner++; - break; - case (MASTERNODE_SYNC_BUDGET_PROP): - if (RequestedMasternodeAssets != MASTERNODE_SYNC_BUDGET) return; - sumBudgetItemProp += nCount; - countBudgetItemProp++; - break; - case (MASTERNODE_SYNC_BUDGET_FIN): - if (RequestedMasternodeAssets != MASTERNODE_SYNC_BUDGET) return; - sumBudgetItemFin += nCount; - countBudgetItemFin++; - break; - } - - LogPrint("masternode", "CMasternodeSync:ProcessMessage - ssc - got inventory count %d %d\n", nItemID, nCount); - } -} - -void CMasternodeSync::ClearFulfilledRequest() -{ - TRY_LOCK(cs_vNodes, lockRecv); - if (!lockRecv) return; - - BOOST_FOREACH (CNode* pnode, vNodes) { - pnode->ClearFulfilledRequest("getspork"); - pnode->ClearFulfilledRequest("mnsync"); - pnode->ClearFulfilledRequest("mnwsync"); - pnode->ClearFulfilledRequest("busync"); - } -} - -void CMasternodeSync::Process() -{ - static int tick = 0; - - if (tick++ % MASTERNODE_SYNC_TIMEOUT != 0) return; - - if (IsSynced()) { - /* - Resync if we lose all masternodes from sleep/wake or failure to sync originally - */ - if (mnodeman.CountEnabled() == 0) { - Reset(); - } else - return; - } - - //try syncing again - if (RequestedMasternodeAssets == MASTERNODE_SYNC_FAILED && lastFailure + (1 * 60) < GetTime()) { - Reset(); - } else if (RequestedMasternodeAssets == MASTERNODE_SYNC_FAILED) { - return; - } - - LogPrint("masternode", "CMasternodeSync::Process() - tick %d RequestedMasternodeAssets %d\n", tick, RequestedMasternodeAssets); - - if (RequestedMasternodeAssets == MASTERNODE_SYNC_INITIAL) GetNextAsset(); - - // sporks synced but blockchain is not, wait until we're almost at a recent block to continue - if (Params().NetworkID() != CBaseChainParams::REGTEST && - !IsBlockchainSynced() && RequestedMasternodeAssets > MASTERNODE_SYNC_SPORKS) return; - - TRY_LOCK(cs_vNodes, lockRecv); - if (!lockRecv) return; - - BOOST_FOREACH (CNode* pnode, vNodes) { - if (Params().NetworkID() == CBaseChainParams::REGTEST) { - if (RequestedMasternodeAttempt <= 2) { - pnode->PushMessage("getsporks"); //get current network sporks - } else if (RequestedMasternodeAttempt < 4) { - mnodeman.DsegUpdate(pnode); - } else if (RequestedMasternodeAttempt < 6) { - int nMnCount = mnodeman.CountEnabled(); - pnode->PushMessage("mnget", nMnCount); //sync payees - uint256 n = 0; - pnode->PushMessage("mnvs", n); //sync masternode votes - } else { - RequestedMasternodeAssets = MASTERNODE_SYNC_FINISHED; - } - RequestedMasternodeAttempt++; - return; - } - - //set to synced - if (RequestedMasternodeAssets == MASTERNODE_SYNC_SPORKS) { - if (pnode->HasFulfilledRequest("getspork")) continue; - pnode->FulfilledRequest("getspork"); - - pnode->PushMessage("getsporks"); //get current network sporks - if (RequestedMasternodeAttempt >= 2) GetNextAsset(); - RequestedMasternodeAttempt++; - - return; - } - - if (pnode->nVersion >= masternodePayments.GetMinMasternodePaymentsProto()) { - if (RequestedMasternodeAssets == MASTERNODE_SYNC_LIST) { - LogPrint("masternode", "CMasternodeSync::Process() - lastMasternodeList %lld (GetTime() - MASTERNODE_SYNC_TIMEOUT) %lld\n", lastMasternodeList, GetTime() - MASTERNODE_SYNC_TIMEOUT); - if (lastMasternodeList > 0 && lastMasternodeList < GetTime() - MASTERNODE_SYNC_TIMEOUT * 2 && RequestedMasternodeAttempt >= MASTERNODE_SYNC_THRESHOLD) { //hasn't received a new item in the last five seconds, so we'll move to the - GetNextAsset(); - return; - } - - if (pnode->HasFulfilledRequest("mnsync")) continue; - pnode->FulfilledRequest("mnsync"); - - // timeout - if (lastMasternodeList == 0 && - (RequestedMasternodeAttempt >= MASTERNODE_SYNC_THRESHOLD * 3 || GetTime() - nAssetSyncStarted > MASTERNODE_SYNC_TIMEOUT * 5)) { - if (IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT)) { - LogPrintf("CMasternodeSync::Process - ERROR - Sync has failed, will retry later\n"); - RequestedMasternodeAssets = MASTERNODE_SYNC_FAILED; - RequestedMasternodeAttempt = 0; - lastFailure = GetTime(); - nCountFailures++; - } else { - GetNextAsset(); - } - return; - } - - if (RequestedMasternodeAttempt >= MASTERNODE_SYNC_THRESHOLD * 3) return; - - mnodeman.DsegUpdate(pnode); - RequestedMasternodeAttempt++; - return; - } - - if (RequestedMasternodeAssets == MASTERNODE_SYNC_MNW) { - if (lastMasternodeWinner > 0 && lastMasternodeWinner < GetTime() - MASTERNODE_SYNC_TIMEOUT * 2 && RequestedMasternodeAttempt >= MASTERNODE_SYNC_THRESHOLD) { //hasn't received a new item in the last five seconds, so we'll move to the - GetNextAsset(); - return; - } - - if (pnode->HasFulfilledRequest("mnwsync")) continue; - pnode->FulfilledRequest("mnwsync"); - - // timeout - if (lastMasternodeWinner == 0 && - (RequestedMasternodeAttempt >= MASTERNODE_SYNC_THRESHOLD * 3 || GetTime() - nAssetSyncStarted > MASTERNODE_SYNC_TIMEOUT * 5)) { - if (IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT)) { - LogPrintf("CMasternodeSync::Process - ERROR - Sync has failed, will retry later\n"); - RequestedMasternodeAssets = MASTERNODE_SYNC_FAILED; - RequestedMasternodeAttempt = 0; - lastFailure = GetTime(); - nCountFailures++; - } else { - GetNextAsset(); - } - return; - } - - if (RequestedMasternodeAttempt >= MASTERNODE_SYNC_THRESHOLD * 3) return; - - CBlockIndex* pindexPrev = chainActive.Tip(); - if (pindexPrev == NULL) return; - - int nMnCount = mnodeman.CountEnabled(); - pnode->PushMessage("mnget", nMnCount); //sync payees - RequestedMasternodeAttempt++; - - return; - } - } - - if (pnode->nVersion >= ActiveProtocol()) { - if (RequestedMasternodeAssets == MASTERNODE_SYNC_BUDGET) { - - // We'll start rejecting votes if we accidentally get set as synced too soon - if (lastBudgetItem > 0 && lastBudgetItem < GetTime() - MASTERNODE_SYNC_TIMEOUT * 2 && RequestedMasternodeAttempt >= MASTERNODE_SYNC_THRESHOLD) { - - // Hasn't received a new item in the last five seconds, so we'll move to the - GetNextAsset(); - - // Try to activate our masternode if possible - activeMasternode.ManageStatus(); - - return; - } - - // timeout - if (lastBudgetItem == 0 && - (RequestedMasternodeAttempt >= MASTERNODE_SYNC_THRESHOLD * 3 || GetTime() - nAssetSyncStarted > MASTERNODE_SYNC_TIMEOUT * 5)) { - // maybe there is no budgets at all, so just finish syncing - GetNextAsset(); - activeMasternode.ManageStatus(); - return; - } - - if (pnode->HasFulfilledRequest("busync")) continue; - pnode->FulfilledRequest("busync"); - - if (RequestedMasternodeAttempt >= MASTERNODE_SYNC_THRESHOLD * 3) return; - - uint256 n = 0; - pnode->PushMessage("mnvs", n); //sync masternode votes - RequestedMasternodeAttempt++; - - return; - } - } - } -} diff --git a/daemon/masternode.cpp b/daemon/masternode.cpp deleted file mode 100644 index f74bd75f2c80..000000000000 --- a/daemon/masternode.cpp +++ /dev/null @@ -1,849 +0,0 @@ -// Copyright (c) 2014-2015 The Dash developers -// Copyright (c) 2015-2018 The PIVX developers -// Copyright (c) 2018-2019 The UNIGRID organization -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "masternode.h" -#include "addrman.h" -#include "masternodeman.h" -#include "obfuscation.h" -#include "sync.h" -#include "util.h" -#include - -// keep track of the scanning errors I've seen -map mapSeenMasternodeScanningErrors; -// cache block hashes as we calculate them -std::map mapCacheBlockHashes; - -//Get the last hash that matches the modulus given. Processed in reverse order -bool GetBlockHash(uint256& hash, int nBlockHeight) -{ - if (chainActive.Tip() == NULL) return false; - - if (nBlockHeight == 0) - nBlockHeight = chainActive.Tip()->nHeight; - - if (mapCacheBlockHashes.count(nBlockHeight)) { - hash = mapCacheBlockHashes[nBlockHeight]; - return true; - } - - const CBlockIndex* BlockLastSolved = chainActive.Tip(); - const CBlockIndex* BlockReading = chainActive.Tip(); - - if (BlockLastSolved == NULL || BlockLastSolved->nHeight == 0 || chainActive.Tip()->nHeight + 1 < nBlockHeight) return false; - - int nBlocksAgo = 0; - if (nBlockHeight > 0) nBlocksAgo = (chainActive.Tip()->nHeight + 1) - nBlockHeight; - assert(nBlocksAgo >= 0); - - int n = 0; - for (unsigned int i = 1; BlockReading && BlockReading->nHeight > 0; i++) { - if (n >= nBlocksAgo) { - hash = BlockReading->GetBlockHash(); - mapCacheBlockHashes[nBlockHeight] = hash; - return true; - } - n++; - - if (BlockReading->pprev == NULL) { - assert(BlockReading); - break; - } - BlockReading = BlockReading->pprev; - } - - return false; -} - -CMasternode::CMasternode() -{ - LOCK(cs); - vin = CTxIn(); - addr = CService(); - pubKeyCollateralAddress = CPubKey(); - pubKeyMasternode = CPubKey(); - sig = std::vector(); - activeState = MASTERNODE_ENABLED; - sigTime = GetAdjustedTime(); - lastPing = CMasternodePing(); - cacheInputAge = 0; - cacheInputAgeBlock = 0; - unitTest = false; - allowFreeTx = true; - nActiveState = MASTERNODE_ENABLED, - protocolVersion = PROTOCOL_VERSION; - nLastDsq = 0; - nScanningErrorCount = 0; - nLastScanningErrorBlockHeight = 0; - lastTimeChecked = 0; - nLastDsee = 0; // temporary, do not save. Remove after migration to v12 - nLastDseep = 0; // temporary, do not save. Remove after migration to v12 -} - -CMasternode::CMasternode(const CMasternode& other) -{ - LOCK(cs); - vin = other.vin; - addr = other.addr; - pubKeyCollateralAddress = other.pubKeyCollateralAddress; - pubKeyMasternode = other.pubKeyMasternode; - sig = other.sig; - activeState = other.activeState; - sigTime = other.sigTime; - lastPing = other.lastPing; - cacheInputAge = other.cacheInputAge; - cacheInputAgeBlock = other.cacheInputAgeBlock; - unitTest = other.unitTest; - allowFreeTx = other.allowFreeTx; - nActiveState = MASTERNODE_ENABLED, - protocolVersion = other.protocolVersion; - nLastDsq = other.nLastDsq; - nScanningErrorCount = other.nScanningErrorCount; - nLastScanningErrorBlockHeight = other.nLastScanningErrorBlockHeight; - lastTimeChecked = 0; - nLastDsee = other.nLastDsee; // temporary, do not save. Remove after migration to v12 - nLastDseep = other.nLastDseep; // temporary, do not save. Remove after migration to v12 -} - -CMasternode::CMasternode(const CMasternodeBroadcast& mnb) -{ - LOCK(cs); - vin = mnb.vin; - addr = mnb.addr; - pubKeyCollateralAddress = mnb.pubKeyCollateralAddress; - pubKeyMasternode = mnb.pubKeyMasternode; - sig = mnb.sig; - activeState = MASTERNODE_ENABLED; - sigTime = mnb.sigTime; - lastPing = mnb.lastPing; - cacheInputAge = 0; - cacheInputAgeBlock = 0; - unitTest = false; - allowFreeTx = true; - nActiveState = MASTERNODE_ENABLED, - protocolVersion = mnb.protocolVersion; - nLastDsq = mnb.nLastDsq; - nScanningErrorCount = 0; - nLastScanningErrorBlockHeight = 0; - lastTimeChecked = 0; - nLastDsee = 0; // temporary, do not save. Remove after migration to v12 - nLastDseep = 0; // temporary, do not save. Remove after migration to v12 -} - -// -// When a new masternode broadcast is sent, update our information -// -bool CMasternode::UpdateFromNewBroadcast(CMasternodeBroadcast& mnb) -{ - if (mnb.sigTime > sigTime) { - pubKeyMasternode = mnb.pubKeyMasternode; - pubKeyCollateralAddress = mnb.pubKeyCollateralAddress; - sigTime = mnb.sigTime; - sig = mnb.sig; - protocolVersion = mnb.protocolVersion; - addr = mnb.addr; - lastTimeChecked = 0; - int nDoS = 0; - if (mnb.lastPing == CMasternodePing() || (mnb.lastPing != CMasternodePing() && mnb.lastPing.CheckAndUpdate(nDoS, false))) { - lastPing = mnb.lastPing; - mnodeman.mapSeenMasternodePing.insert(make_pair(lastPing.GetHash(), lastPing)); - } - return true; - } - return false; -} - -// -// Deterministically calculate a given "score" for a Masternode depending on how close it's hash is to -// the proof of work for that block. The further away they are the better, the furthest will win the election -// and get paid this block -// -uint256 CMasternode::CalculateScore(int mod, int64_t nBlockHeight) -{ - if (chainActive.Tip() == NULL) return 0; - - uint256 hash = 0; - uint256 aux = vin.prevout.hash + vin.prevout.n; - - if (!GetBlockHash(hash, nBlockHeight)) { - LogPrint("masternode","CalculateScore ERROR - nHeight %d - Returned 0\n", nBlockHeight); - return 0; - } - - CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); - ss << hash; - uint256 hash2 = ss.GetHash(); - - CHashWriter ss2(SER_GETHASH, PROTOCOL_VERSION); - ss2 << hash; - ss2 << aux; - uint256 hash3 = ss2.GetHash(); - - uint256 r = (hash3 > hash2 ? hash3 - hash2 : hash2 - hash3); - - return r; -} - -void CMasternode::Check(bool forceCheck) -{ - if (ShutdownRequested()) return; - - if (!forceCheck && (GetTime() - lastTimeChecked < MASTERNODE_CHECK_SECONDS)) return; - lastTimeChecked = GetTime(); - - - //once spent, stop doing the checks - if (activeState == MASTERNODE_VIN_SPENT) return; - - - if (!IsPingedWithin(MASTERNODE_REMOVAL_SECONDS)) { - activeState = MASTERNODE_REMOVE; - return; - } - - if (!IsPingedWithin(MASTERNODE_EXPIRATION_SECONDS)) { - activeState = MASTERNODE_EXPIRED; - return; - } - - // if(lastPing.sigTime - sigTime < MASTERNODE_MIN_MNP_SECONDS){ - // activeState = MASTERNODE_PRE_ENABLED; - // return; - // } - - if (!unitTest) { - CValidationState state; - CMutableTransaction tx = CMutableTransaction(); - CTxOut vout = CTxOut(2999.99 * COIN, obfuScationPool.collateralPubKey); - tx.vin.push_back(vin); - tx.vout.push_back(vout); - - { - TRY_LOCK(cs_main, lockMain); - if (!lockMain) return; - - if (!AcceptableInputs(mempool, state, CTransaction(tx), false, NULL)) { - activeState = MASTERNODE_VIN_SPENT; - return; - } - } - } - - activeState = MASTERNODE_ENABLED; // OK -} - -int64_t CMasternode::SecondsSincePayment() -{ - CScript pubkeyScript; - pubkeyScript = GetScriptForDestination(pubKeyCollateralAddress.GetID()); - - int64_t sec = (GetAdjustedTime() - GetLastPaid()); - int64_t month = 60 * 60 * 24 * 30; - if (sec < month) return sec; //if it's less than 30 days, give seconds - - CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); - ss << vin; - ss << sigTime; - uint256 hash = ss.GetHash(); - - // return some deterministic value for unknown/unpaid but force it to be more than 30 days old - return month + hash.GetCompact(false); -} - -int64_t CMasternode::GetLastPaid() -{ - CBlockIndex* pindexPrev = chainActive.Tip(); - - if (pindexPrev == NULL) { - return false; - } - - CScript mnpayee; - mnpayee = GetScriptForDestination(pubKeyCollateralAddress.GetID()); - CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); - ss << vin; - ss << sigTime; - uint256 hash = ss.GetHash(); - - // Use a deterministic offset to break a tie -- 2.5 minutes - int64_t nOffset = hash.GetCompact(false) % 150; - const CBlockIndex* BlockReading = chainActive.Tip(); - - if (BlockReading == NULL) { - return false; - } - - int nMnCount = mnodeman.CountEnabled() * 1.25; - int n = 0; - - for (unsigned int i = 1; BlockReading && BlockReading->nHeight > 0; i++) { - if (n >= nMnCount) { - return 0; - } - - n++; - - if (masternodePayments.mapMasternodeBlocks.count(BlockReading->nHeight)) { - /* - Search for this payee, with at least 2 votes. This will aid in consensus allowing the network - to converge on the same payees quickly, then keep the same schedule. - */ - if (masternodePayments.mapMasternodeBlocks[BlockReading->nHeight].HasPayeeWithVotes(mnpayee, 2)) { - return BlockReading->nTime + nOffset; - } - } - - if (BlockReading->pprev == NULL) { - assert(BlockReading); - break; - } - - BlockReading = BlockReading->pprev; - } - - return 0; -} - -std::string CMasternode::GetStatus() -{ - switch (nActiveState) { - case CMasternode::MASTERNODE_PRE_ENABLED: - return "PRE_ENABLED"; - case CMasternode::MASTERNODE_ENABLED: - return "ENABLED"; - case CMasternode::MASTERNODE_EXPIRED: - return "EXPIRED"; - case CMasternode::MASTERNODE_OUTPOINT_SPENT: - return "OUTPOINT_SPENT"; - case CMasternode::MASTERNODE_REMOVE: - return "REMOVE"; - case CMasternode::MASTERNODE_WATCHDOG_EXPIRED: - return "WATCHDOG_EXPIRED"; - case CMasternode::MASTERNODE_POSE_BAN: - return "POSE_BAN"; - default: - return "UNKNOWN"; - } -} - -bool CMasternode::IsValidNetAddr() -{ - // TODO: regtest is fine with any addresses for now, - // should probably be a bit smarter if one day we start to implement tests for this - return Params().NetworkID() == CBaseChainParams::REGTEST || - (IsReachable(addr) && addr.IsRoutable()); -} - -CMasternodeBroadcast::CMasternodeBroadcast() -{ - vin = CTxIn(); - addr = CService(); - pubKeyCollateralAddress = CPubKey(); - pubKeyMasternode1 = CPubKey(); - sig = std::vector(); - activeState = MASTERNODE_ENABLED; - sigTime = GetAdjustedTime(); - lastPing = CMasternodePing(); - cacheInputAge = 0; - cacheInputAgeBlock = 0; - unitTest = false; - allowFreeTx = true; - protocolVersion = PROTOCOL_VERSION; - nLastDsq = 0; - nScanningErrorCount = 0; - nLastScanningErrorBlockHeight = 0; -} - -CMasternodeBroadcast::CMasternodeBroadcast(CService newAddr, CTxIn newVin, CPubKey pubKeyCollateralAddressNew, CPubKey pubKeyMasternodeNew, int protocolVersionIn) -{ - vin = newVin; - addr = newAddr; - pubKeyCollateralAddress = pubKeyCollateralAddressNew; - pubKeyMasternode = pubKeyMasternodeNew; - sig = std::vector(); - activeState = MASTERNODE_ENABLED; - sigTime = GetAdjustedTime(); - lastPing = CMasternodePing(); - cacheInputAge = 0; - cacheInputAgeBlock = 0; - unitTest = false; - allowFreeTx = true; - protocolVersion = protocolVersionIn; - nLastDsq = 0; - nScanningErrorCount = 0; - nLastScanningErrorBlockHeight = 0; -} - -CMasternodeBroadcast::CMasternodeBroadcast(const CMasternode& mn) -{ - vin = mn.vin; - addr = mn.addr; - pubKeyCollateralAddress = mn.pubKeyCollateralAddress; - pubKeyMasternode = mn.pubKeyMasternode; - sig = mn.sig; - activeState = mn.activeState; - sigTime = mn.sigTime; - lastPing = mn.lastPing; - cacheInputAge = mn.cacheInputAge; - cacheInputAgeBlock = mn.cacheInputAgeBlock; - unitTest = mn.unitTest; - allowFreeTx = mn.allowFreeTx; - protocolVersion = mn.protocolVersion; - nLastDsq = mn.nLastDsq; - nScanningErrorCount = mn.nScanningErrorCount; - nLastScanningErrorBlockHeight = mn.nLastScanningErrorBlockHeight; -} - -bool CMasternodeBroadcast::Create(std::string strService, std::string strKeyMasternode, std::string strTxHash, std::string strOutputIndex, std::string& strErrorRet, CMasternodeBroadcast& mnbRet, bool fOffline) -{ - CTxIn txin; - CPubKey pubKeyCollateralAddressNew; - CKey keyCollateralAddressNew; - CPubKey pubKeyMasternodeNew; - CKey keyMasternodeNew; - - //need correct blocks to send ping - if (!fOffline && !masternodeSync.IsBlockchainSynced()) { - strErrorRet = "Sync in progress. Must wait until sync is complete to start Masternode"; - LogPrint("masternode","CMasternodeBroadcast::Create -- %s\n", strErrorRet); - return false; - } - - if (!obfuScationSigner.GetKeysFromSecret(strKeyMasternode, keyMasternodeNew, pubKeyMasternodeNew)) { - strErrorRet = strprintf("Invalid masternode key %s", strKeyMasternode); - LogPrint("masternode","CMasternodeBroadcast::Create -- %s\n", strErrorRet); - return false; - } - - if (!pwalletMain->GetMasternodeVinAndKeys(txin, pubKeyCollateralAddressNew, keyCollateralAddressNew, strTxHash, strOutputIndex)) { - strErrorRet = strprintf("Could not allocate txin %s:%s for masternode %s", strTxHash, strOutputIndex, strService); - LogPrint("masternode","CMasternodeBroadcast::Create -- %s\n", strErrorRet); - return false; - } - - // The service needs the correct default port to work properly - if(!CheckDefaultPort(strService, strErrorRet, "CMasternodeBroadcast::Create")) - return false; - - return Create(txin, CService(strService), keyCollateralAddressNew, pubKeyCollateralAddressNew, keyMasternodeNew, pubKeyMasternodeNew, strErrorRet, mnbRet); -} - -bool CMasternodeBroadcast::Create(CTxIn txin, CService service, CKey keyCollateralAddressNew, CPubKey pubKeyCollateralAddressNew, CKey keyMasternodeNew, CPubKey pubKeyMasternodeNew, std::string& strErrorRet, CMasternodeBroadcast& mnbRet) -{ - // wait for reindex and/or import to finish - if (fImporting || fReindex) return false; - - LogPrint("masternode", "CMasternodeBroadcast::Create -- pubKeyCollateralAddressNew = %s, pubKeyMasternodeNew.GetID() = %s\n", - CBitcoinAddress(pubKeyCollateralAddressNew.GetID()).ToString(), - pubKeyMasternodeNew.GetID().ToString()); - - CMasternodePing mnp(txin); - if (!mnp.Sign(keyMasternodeNew, pubKeyMasternodeNew)) { - strErrorRet = strprintf("Failed to sign ping, masternode=%s", txin.prevout.hash.ToString()); - LogPrint("masternode","CMasternodeBroadcast::Create -- %s\n", strErrorRet); - mnbRet = CMasternodeBroadcast(); - return false; - } - - mnbRet = CMasternodeBroadcast(service, txin, pubKeyCollateralAddressNew, pubKeyMasternodeNew, PROTOCOL_VERSION); - - if (!mnbRet.IsValidNetAddr()) { - strErrorRet = strprintf("Invalid IP address %s, masternode=%s", mnbRet.addr.ToStringIP (), txin.prevout.hash.ToString()); - LogPrint("masternode","CMasternodeBroadcast::Create -- %s\n", strErrorRet); - mnbRet = CMasternodeBroadcast(); - return false; - } - - mnbRet.lastPing = mnp; - if (!mnbRet.Sign(keyCollateralAddressNew)) { - strErrorRet = strprintf("Failed to sign broadcast, masternode=%s", txin.prevout.hash.ToString()); - LogPrint("masternode","CMasternodeBroadcast::Create -- %s\n", strErrorRet); - mnbRet = CMasternodeBroadcast(); - return false; - } - - return true; -} - -bool CMasternodeBroadcast::CheckDefaultPort(std::string strService, std::string& strErrorRet, std::string strContext) -{ - /* - CService service = CService(strService); - int nDefaultPort = Params().GetDefaultPort(); - - if (service.GetPort() != nDefaultPort) { - strErrorRet = strprintf("Invalid port %u for masternode %s, only %d is supported on %s-net.", - service.GetPort(), strService, nDefaultPort, Params().NetworkIDString()); - LogPrint("masternode", "%s - %s\n", strContext, strErrorRet); - return false; - } - */ - return true; //TODO: We will require a specific port in the future -} - -bool CMasternodeBroadcast::CheckAndUpdate(int& nDos) -{ - // make sure signature isn't in the future (past is OK) - if (sigTime > GetAdjustedTime() + 60 * 60) { - LogPrint("masternode","mnb - Signature rejected, too far into the future %s\n", vin.prevout.hash.ToString()); - nDos = 1; - return false; - } - - // incorrect ping or its sigTime - if(lastPing == CMasternodePing() || !lastPing.CheckAndUpdate(nDos, false, true)) - return false; - - if (protocolVersion < masternodePayments.GetMinMasternodePaymentsProto()) { - LogPrint("masternode","mnb - ignoring outdated Masternode %s protocol version %d\n", vin.prevout.hash.ToString(), protocolVersion); - return false; - } - - CScript pubkeyScript; - pubkeyScript = GetScriptForDestination(pubKeyCollateralAddress.GetID()); - - if (pubkeyScript.size() != 25) { - LogPrint("masternode","mnb - pubkey the wrong size\n"); - nDos = 100; - return false; - } - - CScript pubkeyScript2; - pubkeyScript2 = GetScriptForDestination(pubKeyMasternode.GetID()); - - if (pubkeyScript2.size() != 25) { - LogPrint("masternode","mnb - pubkey2 the wrong size\n"); - nDos = 100; - return false; - } - - if (!vin.scriptSig.empty()) { - LogPrint("masternode","mnb - Ignore Not Empty ScriptSig %s\n", vin.prevout.hash.ToString()); - return false; - } - - std::string errorMessage = ""; - if (!obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, GetNewStrMessage(), errorMessage) - && !obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, GetOldStrMessage(), errorMessage)) - { - // don't ban for old masternodes, their sigs could be broken because of the bug - nDos = protocolVersion < MIN_PEER_MNANNOUNCE ? 0 : 100; - return error("CMasternodeBroadcast::CheckAndUpdate - Got bad Masternode address signature : %s", errorMessage); - } - - // if (Params().NetworkID() == CBaseChainParams::MAIN) { - // if (addr.GetPort() != 51992) return false; - // } else if (addr.GetPort() == 51992) - // return false; - - //search existing Masternode list, this is where we update existing Masternodes with new mnb broadcasts - CMasternode* pmn = mnodeman.Find(vin); - - // no such masternode, nothing to update - if (pmn == NULL) return true; - - // this broadcast is older or equal than the one that we already have - it's bad and should never happen - // unless someone is doing something fishy - // (mapSeenMasternodeBroadcast in CMasternodeMan::ProcessMessage should filter legit duplicates) - if(pmn->sigTime >= sigTime) { - return error("CMasternodeBroadcast::CheckAndUpdate - Bad sigTime %d for Masternode %20s %105s (existing broadcast is at %d)", - sigTime, addr.ToString(), vin.ToString(), pmn->sigTime); - } - - // masternode is not enabled yet/already, nothing to update - if (!pmn->IsEnabled()) return true; - - // mn.pubkey = pubkey, IsVinAssociatedWithPubkey is validated once below, - // after that they just need to match - if (pmn->pubKeyCollateralAddress == pubKeyCollateralAddress && !pmn->IsBroadcastedWithin(MASTERNODE_MIN_MNB_SECONDS)) { - //take the newest entry - LogPrint("masternode","mnb - Got updated entry for %s\n", vin.prevout.hash.ToString()); - if (pmn->UpdateFromNewBroadcast((*this))) { - pmn->Check(); - if (pmn->IsEnabled()) Relay(); - } - masternodeSync.AddedMasternodeList(GetHash()); - } - - return true; -} - -bool CMasternodeBroadcast::CheckInputsAndAdd(int& nDoS) -{ - // we are a masternode with the same vin (i.e. already activated) and this mnb is ours (matches our Masternode privkey) - // so nothing to do here for us - if (fMasterNode && vin.prevout == activeMasternode.vin.prevout && pubKeyMasternode == activeMasternode.pubKeyMasternode) - return true; - - // incorrect ping or its sigTime - if(lastPing == CMasternodePing() || !lastPing.CheckAndUpdate(nDoS, false, true)) return false; - - // search existing Masternode list - CMasternode* pmn = mnodeman.Find(vin); - - if (pmn != NULL) { - // nothing to do here if we already know about this masternode and it's enabled - if (pmn->IsEnabled()) return true; - // if it's not enabled, remove old MN first and continue - else - mnodeman.Remove(pmn->vin); - } - - CValidationState state; - CMutableTransaction tx = CMutableTransaction(); - CTxOut vout = CTxOut(2999.99 * COIN, obfuScationPool.collateralPubKey); - tx.vin.push_back(vin); - tx.vout.push_back(vout); - - { - TRY_LOCK(cs_main, lockMain); - - if (!lockMain) { - // not mnb fault, let it to be checked again later - mnodeman.mapSeenMasternodeBroadcast.erase(GetHash()); - masternodeSync.mapSeenSyncMNB.erase(GetHash()); - return false; - } - - if (!AcceptableInputs(mempool, state, CTransaction(tx), false, NULL)) { - //set nDos - state.IsInvalid(nDoS); - return false; - } - } - - LogPrint("masternode", "mnb - Accepted Masternode entry\n"); - - if (GetInputAge(vin) < MASTERNODE_MIN_CONFIRMATIONS) { - LogPrint("masternode","mnb - Input must have at least %d confirmations\n", MASTERNODE_MIN_CONFIRMATIONS); - // maybe we miss few blocks, let this mnb to be checked again later - mnodeman.mapSeenMasternodeBroadcast.erase(GetHash()); - masternodeSync.mapSeenSyncMNB.erase(GetHash()); - return false; - } - - // verify that sig time is legit in past - // should be at least not earlier than block when 1000 UNIGRID tx got MASTERNODE_MIN_CONFIRMATIONS - uint256 hashBlock = 0; - CTransaction tx2; - GetTransaction(vin.prevout.hash, tx2, hashBlock, true); - BlockMap::iterator mi = mapBlockIndex.find(hashBlock); - - if (mi != mapBlockIndex.end() && (*mi).second) { - CBlockIndex* pMNIndex = (*mi).second; // block for 1000 UNIGRID tx -> 1 confirmation - CBlockIndex* pConfIndex = chainActive[pMNIndex->nHeight + MASTERNODE_MIN_CONFIRMATIONS - 1]; // block where tx got MASTERNODE_MIN_CONFIRMATIONS - if (pConfIndex->GetBlockTime() > sigTime) { - LogPrint("masternode","mnb - Bad sigTime %d for Masternode %s (%i conf block is at %d)\n", - sigTime, vin.prevout.hash.ToString(), MASTERNODE_MIN_CONFIRMATIONS, pConfIndex->GetBlockTime()); - return false; - } - } - - LogPrint("masternode","mnb - Got NEW Masternode entry - %s - %lli \n", vin.prevout.hash.ToString(), sigTime); - CMasternode mn(*this); - mnodeman.Add(mn); - - // if it matches our Masternode privkey, then we've been remotely activated - if (pubKeyMasternode == activeMasternode.pubKeyMasternode && protocolVersion == PROTOCOL_VERSION) { - activeMasternode.EnableHotColdMasterNode(vin, addr); - } - - bool isLocal = addr.IsRFC1918() || addr.IsLocal(); - if (Params().NetworkID() == CBaseChainParams::REGTEST) isLocal = false; - - if (!isLocal) Relay(); - - return true; -} - -void CMasternodeBroadcast::Relay() -{ - CInv inv(MSG_MASTERNODE_ANNOUNCE, GetHash()); - RelayInv(inv); -} - -bool CMasternodeBroadcast::Sign(CKey& keyCollateralAddress) -{ - std::string errorMessage; - sigTime = GetAdjustedTime(); - - std::string strMessage; - if(chainActive.Height() < Params().Zerocoin_Block_V2_Start()) - strMessage = GetOldStrMessage(); - else - strMessage = GetNewStrMessage(); - - if (!obfuScationSigner.SignMessage(strMessage, errorMessage, sig, keyCollateralAddress)) - return error("CMasternodeBroadcast::Sign() - Error: %s", errorMessage); - - if (!obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, strMessage, errorMessage)) - return error("CMasternodeBroadcast::Sign() - Error: %s", errorMessage); - - return true; -} - - -bool CMasternodeBroadcast::VerifySignature() -{ - std::string errorMessage; - - if(!obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, GetNewStrMessage(), errorMessage) - && !obfuScationSigner.VerifyMessage(pubKeyCollateralAddress, sig, GetOldStrMessage(), errorMessage)) - return error("CMasternodeBroadcast::VerifySignature() - Error: %s", errorMessage); - - return true; -} - -std::string CMasternodeBroadcast::GetOldStrMessage() -{ - std::string strMessage; - - std::string vchPubKey(pubKeyCollateralAddress.begin(), pubKeyCollateralAddress.end()); - std::string vchPubKey2(pubKeyMasternode.begin(), pubKeyMasternode.end()); - strMessage = addr.ToString() + boost::lexical_cast(sigTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(protocolVersion); - - return strMessage; -} - -std:: string CMasternodeBroadcast::GetNewStrMessage() -{ - std::string strMessage; - - strMessage = addr.ToString() + boost::lexical_cast(sigTime) + pubKeyCollateralAddress.GetID().ToString() + pubKeyMasternode.GetID().ToString() + boost::lexical_cast(protocolVersion); - - return strMessage; -} - -CMasternodePing::CMasternodePing() -{ - vin = CTxIn(); - blockHash = uint256(0); - sigTime = 0; - vchSig = std::vector(); -} - -CMasternodePing::CMasternodePing(CTxIn& newVin) -{ - vin = newVin; - blockHash = chainActive[chainActive.Height() - 12]->GetBlockHash(); - sigTime = GetAdjustedTime(); - vchSig = std::vector(); -} - -bool CMasternodePing::Sign(CKey& keyMasternode, CPubKey& pubKeyMasternode) -{ - std::string errorMessage; - std::string strMasterNodeSignMessage; - - sigTime = GetAdjustedTime(); - std::string strMessage = vin.ToString() + blockHash.ToString() + boost::lexical_cast(sigTime); - - if (!obfuScationSigner.SignMessage(strMessage, errorMessage, vchSig, keyMasternode)) { - LogPrint("masternode","CMasternodePing::Sign() - Error: %s\n", errorMessage); - return false; - } - - if (!obfuScationSigner.VerifyMessage(pubKeyMasternode, vchSig, strMessage, errorMessage)) { - LogPrint("masternode","CMasternodePing::Sign() - Error: %s\n", errorMessage); - return false; - } - - return true; -} - -bool CMasternodePing::VerifySignature(CPubKey& pubKeyMasternode, int &nDos) { - std::string strMessage = vin.ToString() + blockHash.ToString() + boost::lexical_cast(sigTime); - std::string errorMessage = ""; - - if(!obfuScationSigner.VerifyMessage(pubKeyMasternode, vchSig, strMessage, errorMessage)){ - nDos = 33; - return error("CMasternodePing::VerifySignature - Got bad Masternode ping signature %s Error: %s", vin.ToString(), errorMessage); - } - return true; -} - -bool CMasternodePing::CheckAndUpdate(int& nDos, bool fRequireEnabled, bool fCheckSigTimeOnly) -{ - if (sigTime > GetAdjustedTime() + 60 * 60) { - LogPrint("masternode","CMasternodePing::CheckAndUpdate - Signature rejected, too far into the future %s\n", vin.prevout.hash.ToString()); - nDos = 1; - return false; - } - - if (sigTime <= GetAdjustedTime() - 60 * 60) { - LogPrint("masternode","CMasternodePing::CheckAndUpdate - Signature rejected, too far into the past %s - %d %d \n", vin.prevout.hash.ToString(), sigTime, GetAdjustedTime()); - nDos = 1; - return false; - } - - if(fCheckSigTimeOnly) { - CMasternode* pmn = mnodeman.Find(vin); - if(pmn) return VerifySignature(pmn->pubKeyMasternode, nDos); - return true; - } - - LogPrint("masternode", "CMasternodePing::CheckAndUpdate - New Ping - %s - %s - %lli\n", GetHash().ToString(), blockHash.ToString(), sigTime); - - // see if we have this Masternode - CMasternode* pmn = mnodeman.Find(vin); - if (pmn != NULL && pmn->protocolVersion >= masternodePayments.GetMinMasternodePaymentsProto()) { - if (fRequireEnabled && !pmn->IsEnabled()) return false; - - // LogPrint("masternode","mnping - Found corresponding mn for vin: %s\n", vin.ToString()); - // update only if there is no known ping for this masternode or - // last ping was more then MASTERNODE_MIN_MNP_SECONDS-60 ago comparing to this one - if (!pmn->IsPingedWithin(MASTERNODE_MIN_MNP_SECONDS - 60, sigTime)) { - if (!VerifySignature(pmn->pubKeyMasternode, nDos)) - return false; - - BlockMap::iterator mi = mapBlockIndex.find(blockHash); - if (mi != mapBlockIndex.end() && (*mi).second) { - if ((*mi).second->nHeight < chainActive.Height() - 24) { - LogPrint("masternode","CMasternodePing::CheckAndUpdate - Masternode %s block hash %s is too old\n", vin.prevout.hash.ToString(), blockHash.ToString()); - // Do nothing here (no Masternode update, no mnping relay) - // Let this node to be visible but fail to accept mnping - - return false; - } - } else { - if (fDebug) LogPrint("masternode","CMasternodePing::CheckAndUpdate - Masternode %s block hash %s is unknown\n", vin.prevout.hash.ToString(), blockHash.ToString()); - // maybe we stuck so we shouldn't ban this node, just fail to accept it - // TODO: or should we also request this block? - - return false; - } - - pmn->lastPing = *this; - - //mnodeman.mapSeenMasternodeBroadcast.lastPing is probably outdated, so we'll update it - CMasternodeBroadcast mnb(*pmn); - uint256 hash = mnb.GetHash(); - if (mnodeman.mapSeenMasternodeBroadcast.count(hash)) { - mnodeman.mapSeenMasternodeBroadcast[hash].lastPing = *this; - } - - pmn->Check(true); - if (!pmn->IsEnabled()) return false; - - LogPrint("masternode", "CMasternodePing::CheckAndUpdate - Masternode ping accepted, vin: %s\n", vin.prevout.hash.ToString()); - - Relay(); - return true; - } - LogPrint("masternode", "CMasternodePing::CheckAndUpdate - Masternode ping arrived too early, vin: %s\n", vin.prevout.hash.ToString()); - //nDos = 1; //disable, this is happening frequently and causing banned peers - return false; - } - - LogPrint("masternode", "CMasternodePing::CheckAndUpdate - Couldn't find compatible Masternode entry, vin: %s\n", vin.prevout.hash.ToString()); - return false; -} - -void CMasternodePing::Relay() -{ - CInv inv(MSG_MASTERNODE_PING, GetHash()); - RelayInv(inv); -} diff --git a/daemon/masternodeman.cpp b/daemon/masternodeman.cpp deleted file mode 100644 index f4d1355531d8..000000000000 --- a/daemon/masternodeman.cpp +++ /dev/null @@ -1,1174 +0,0 @@ -// Copyright (c) 2014-2015 The Dash developers -// Copyright (c) 2015-2018 The PIVX developers -// Copyright (c) 2018-2019 The UNIGRID organization -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include "masternodeman.h" -#include "activemasternode.h" -#include "addrman.h" -#include "masternode.h" -#include "obfuscation.h" -#include "spork.h" -#include "util.h" -#include -#include - -#define MN_WINNER_MINIMUM_AGE 8000 // Age in seconds. This should be > MASTERNODE_REMOVAL_SECONDS to avoid misconfigured new nodes in the list. - -/** Masternode manager */ -CMasternodeMan mnodeman; - -struct CompareLastPaid { - bool operator()(const pair& t1, - const pair& t2) const - { - return t1.first < t2.first; - } -}; - -struct CompareScoreTxIn { - bool operator()(const pair& t1, - const pair& t2) const - { - return t1.first < t2.first; - } -}; - -struct CompareScoreMN { - bool operator()(const pair& t1, - const pair& t2) const - { - return t1.first < t2.first; - } -}; - -// -// CMasternodeDB -// - -CMasternodeDB::CMasternodeDB() -{ - pathMN = GetDataDir() / "mncache.dat"; - strMagicMessage = "MasternodeCache"; -} - -bool CMasternodeDB::Write(const CMasternodeMan& mnodemanToSave) -{ - int64_t nStart = GetTimeMillis(); - - // serialize, checksum data up to that point, then append checksum - CDataStream ssMasternodes(SER_DISK, CLIENT_VERSION); - ssMasternodes << strMagicMessage; // masternode cache file specific magic message - ssMasternodes << FLATDATA(Params().MessageStart()); // network specific magic number - ssMasternodes << mnodemanToSave; - uint256 hash = Hash(ssMasternodes.begin(), ssMasternodes.end()); - ssMasternodes << hash; - - // open output file, and associate with CAutoFile - FILE* file = fopen(pathMN.string().c_str(), "wb"); - CAutoFile fileout(file, SER_DISK, CLIENT_VERSION); - if (fileout.IsNull()) - return error("%s : Failed to open file %s", __func__, pathMN.string()); - - // Write and commit header, data - try { - fileout << ssMasternodes; - } catch (std::exception& e) { - return error("%s : Serialize or I/O error - %s", __func__, e.what()); - } - // FileCommit(fileout); - fileout.fclose(); - - LogPrint("masternode","Written info to mncache.dat %dms\n", GetTimeMillis() - nStart); - LogPrint("masternode"," %s\n", mnodemanToSave.ToString()); - - return true; -} - -CMasternodeDB::ReadResult CMasternodeDB::Read(CMasternodeMan& mnodemanToLoad, bool fDryRun) -{ - int64_t nStart = GetTimeMillis(); - // open input file, and associate with CAutoFile - FILE* file = fopen(pathMN.string().c_str(), "rb"); - CAutoFile filein(file, SER_DISK, CLIENT_VERSION); - if (filein.IsNull()) { - error("%s : Failed to open file %s", __func__, pathMN.string()); - return FileError; - } - - // use file size to size memory buffer - int fileSize = boost::filesystem::file_size(pathMN); - int dataSize = fileSize - sizeof(uint256); - // Don't try to resize to a negative number if file is small - if (dataSize < 0) - dataSize = 0; - vector vchData; - vchData.resize(dataSize); - uint256 hashIn; - - // read data and checksum from file - try { - filein.read((char*)&vchData[0], dataSize); - filein >> hashIn; - } catch (std::exception& e) { - error("%s : Deserialize or I/O error - %s", __func__, e.what()); - return HashReadError; - } - filein.fclose(); - - CDataStream ssMasternodes(vchData, SER_DISK, CLIENT_VERSION); - - // verify stored checksum matches input data - uint256 hashTmp = Hash(ssMasternodes.begin(), ssMasternodes.end()); - if (hashIn != hashTmp) { - error("%s : Checksum mismatch, data corrupted", __func__); - return IncorrectHash; - } - - unsigned char pchMsgTmp[4]; - std::string strMagicMessageTmp; - try { - // de-serialize file header (masternode cache file specific magic message) and .. - - ssMasternodes >> strMagicMessageTmp; - - // ... verify the message matches predefined one - if (strMagicMessage != strMagicMessageTmp) { - error("%s : Invalid masternode cache magic message", __func__); - return IncorrectMagicMessage; - } - - // de-serialize file header (network specific magic number) and .. - ssMasternodes >> FLATDATA(pchMsgTmp); - - // ... verify the network matches ours - if (memcmp(pchMsgTmp, Params().MessageStart(), sizeof(pchMsgTmp))) { - error("%s : Invalid network magic number", __func__); - return IncorrectMagicNumber; - } - // de-serialize data into CMasternodeMan object - ssMasternodes >> mnodemanToLoad; - } catch (std::exception& e) { - mnodemanToLoad.Clear(); - error("%s : Deserialize or I/O error - %s", __func__, e.what()); - return IncorrectFormat; - } - - LogPrint("masternode","Loaded info from mncache.dat %dms\n", GetTimeMillis() - nStart); - LogPrint("masternode"," %s\n", mnodemanToLoad.ToString()); - if (!fDryRun) { - LogPrint("masternode","Masternode manager - cleaning....\n"); - mnodemanToLoad.CheckAndRemove(true); - LogPrint("masternode","Masternode manager - result:\n"); - LogPrint("masternode"," %s\n", mnodemanToLoad.ToString()); - } - - return Ok; -} - -void DumpMasternodes() -{ - int64_t nStart = GetTimeMillis(); - - CMasternodeDB mndb; - CMasternodeMan tempMnodeman; - - LogPrint("masternode","Verifying mncache.dat format...\n"); - CMasternodeDB::ReadResult readResult = mndb.Read(tempMnodeman, true); - // there was an error and it was not an error on file opening => do not proceed - if (readResult == CMasternodeDB::FileError) - LogPrint("masternode","Missing masternode cache file - mncache.dat, will try to recreate\n"); - else if (readResult != CMasternodeDB::Ok) { - LogPrint("masternode","Error reading mncache.dat: "); - if (readResult == CMasternodeDB::IncorrectFormat) - LogPrint("masternode","magic is ok but data has invalid format, will try to recreate\n"); - else { - LogPrint("masternode","file format is unknown or invalid, please fix it manually\n"); - return; - } - } - LogPrint("masternode","Writting info to mncache.dat...\n"); - mndb.Write(mnodeman); - - LogPrint("masternode","Masternode dump finished %dms\n", GetTimeMillis() - nStart); -} - -CMasternodeMan::CMasternodeMan() -{ - nDsqCount = 0; -} - -bool CMasternodeMan::Add(CMasternode& mn) -{ - LOCK(cs); - - if (!mn.IsEnabled()) - return false; - - CMasternode* pmn = Find(mn.vin); - if (pmn == NULL) { - LogPrint("masternode", "CMasternodeMan: Adding new Masternode %s - %i now\n", mn.vin.prevout.hash.ToString(), size() + 1); - vMasternodes.push_back(mn); - return true; - } - - return false; -} - -void CMasternodeMan::AskForMN(CNode* pnode, CTxIn& vin) -{ - std::map::iterator i = mWeAskedForMasternodeListEntry.find(vin.prevout); - if (i != mWeAskedForMasternodeListEntry.end()) { - int64_t t = (*i).second; - if (GetTime() < t) return; // we've asked recently - } - - // ask for the mnb info once from the node that sent mnp - - LogPrint("masternode", "CMasternodeMan::AskForMN - Asking node for missing entry, vin: %s\n", vin.prevout.hash.ToString()); - pnode->PushMessage("dseg", vin); - int64_t askAgain = GetTime() + MASTERNODE_MIN_MNP_SECONDS; - mWeAskedForMasternodeListEntry[vin.prevout] = askAgain; -} - -void CMasternodeMan::Check() -{ - LOCK(cs); - - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - mn.Check(); - } -} - -void CMasternodeMan::CheckAndRemove(bool forceExpiredRemoval) -{ - Check(); - - LOCK(cs); - - //remove inactive and outdated - vector::iterator it = vMasternodes.begin(); - while (it != vMasternodes.end()) { - if ((*it).activeState == CMasternode::MASTERNODE_REMOVE || - (*it).activeState == CMasternode::MASTERNODE_VIN_SPENT || - (forceExpiredRemoval && (*it).activeState == CMasternode::MASTERNODE_EXPIRED) || - (*it).protocolVersion < masternodePayments.GetMinMasternodePaymentsProto()) { - LogPrint("masternode", "CMasternodeMan: Removing inactive Masternode %s - %i now\n", (*it).vin.prevout.hash.ToString(), size() - 1); - - //erase all of the broadcasts we've seen from this vin - // -- if we missed a few pings and the node was removed, this will allow is to get it back without them - // sending a brand new mnb - map::iterator it3 = mapSeenMasternodeBroadcast.begin(); - while (it3 != mapSeenMasternodeBroadcast.end()) { - if ((*it3).second.vin == (*it).vin) { - masternodeSync.mapSeenSyncMNB.erase((*it3).first); - mapSeenMasternodeBroadcast.erase(it3++); - } else { - ++it3; - } - } - - // allow us to ask for this masternode again if we see another ping - map::iterator it2 = mWeAskedForMasternodeListEntry.begin(); - while (it2 != mWeAskedForMasternodeListEntry.end()) { - if ((*it2).first == (*it).vin.prevout) { - mWeAskedForMasternodeListEntry.erase(it2++); - } else { - ++it2; - } - } - - it = vMasternodes.erase(it); - } else { - ++it; - } - } - - // check who's asked for the Masternode list - map::iterator it1 = mAskedUsForMasternodeList.begin(); - while (it1 != mAskedUsForMasternodeList.end()) { - if ((*it1).second < GetTime()) { - mAskedUsForMasternodeList.erase(it1++); - } else { - ++it1; - } - } - - // check who we asked for the Masternode list - it1 = mWeAskedForMasternodeList.begin(); - while (it1 != mWeAskedForMasternodeList.end()) { - if ((*it1).second < GetTime()) { - mWeAskedForMasternodeList.erase(it1++); - } else { - ++it1; - } - } - - // check which Masternodes we've asked for - map::iterator it2 = mWeAskedForMasternodeListEntry.begin(); - while (it2 != mWeAskedForMasternodeListEntry.end()) { - if ((*it2).second < GetTime()) { - mWeAskedForMasternodeListEntry.erase(it2++); - } else { - ++it2; - } - } - - // remove expired mapSeenMasternodeBroadcast - map::iterator it3 = mapSeenMasternodeBroadcast.begin(); - while (it3 != mapSeenMasternodeBroadcast.end()) { - if ((*it3).second.lastPing.sigTime < GetTime() - (MASTERNODE_REMOVAL_SECONDS * 2)) { - mapSeenMasternodeBroadcast.erase(it3++); - masternodeSync.mapSeenSyncMNB.erase((*it3).second.GetHash()); - } else { - ++it3; - } - } - - // remove expired mapSeenMasternodePing - map::iterator it4 = mapSeenMasternodePing.begin(); - while (it4 != mapSeenMasternodePing.end()) { - if ((*it4).second.sigTime < GetTime() - (MASTERNODE_REMOVAL_SECONDS * 2)) { - mapSeenMasternodePing.erase(it4++); - } else { - ++it4; - } - } -} - -void CMasternodeMan::Clear() -{ - LOCK(cs); - vMasternodes.clear(); - mAskedUsForMasternodeList.clear(); - mWeAskedForMasternodeList.clear(); - mWeAskedForMasternodeListEntry.clear(); - mapSeenMasternodeBroadcast.clear(); - mapSeenMasternodePing.clear(); - nDsqCount = 0; -} - -int CMasternodeMan::stable_size () -{ - int nStable_size = 0; - int nMinProtocol = ActiveProtocol(); - int64_t nMasternode_Min_Age = MN_WINNER_MINIMUM_AGE; - int64_t nMasternode_Age = 0; - - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - if (mn.protocolVersion < nMinProtocol) { - continue; // Skip obsolete versions - } - if (IsSporkActive (SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT)) { - nMasternode_Age = GetAdjustedTime() - mn.sigTime; - if ((nMasternode_Age) < nMasternode_Min_Age) { - continue; // Skip masternodes younger than (default) 8000 sec (MUST be > MASTERNODE_REMOVAL_SECONDS) - } - } - mn.Check (); - if (!mn.IsEnabled ()) - continue; // Skip not-enabled masternodes - - nStable_size++; - } - - return nStable_size; -} - -int CMasternodeMan::CountEnabled(int protocolVersion) -{ - int i = 0; - protocolVersion = protocolVersion == -1 ? masternodePayments.GetMinMasternodePaymentsProto() : protocolVersion; - - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - mn.Check(); - if (mn.protocolVersion < protocolVersion || !mn.IsEnabled()) continue; - i++; - } - - return i; -} - -void CMasternodeMan::CountNetworks(int protocolVersion, int& ipv4, int& ipv6, int& onion) -{ - protocolVersion = protocolVersion == -1 ? masternodePayments.GetMinMasternodePaymentsProto() : protocolVersion; - - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - mn.Check(); - std::string strHost; - int port; - SplitHostPort(mn.addr.ToString(), port, strHost); - CNetAddr node = CNetAddr(strHost, false); - int nNetwork = node.GetNetwork(); - switch (nNetwork) { - case 1 : - ipv4++; - break; - case 2 : - ipv6++; - break; - case 3 : - onion++; - break; - } - } -} - -void CMasternodeMan::DsegUpdate(CNode* pnode) -{ - LOCK(cs); - - if (Params().NetworkID() == CBaseChainParams::MAIN) { - if (!(pnode->addr.IsRFC1918() || pnode->addr.IsLocal())) { - std::map::iterator it = mWeAskedForMasternodeList.find(pnode->addr); - if (it != mWeAskedForMasternodeList.end()) { - if (GetTime() < (*it).second) { - LogPrint("masternode", "dseg - we already asked peer %i for the list; skipping...\n", pnode->GetId()); - return; - } - } - } - } - - pnode->PushMessage("dseg", CTxIn()); - int64_t askAgain = GetTime() + MASTERNODES_DSEG_SECONDS; - mWeAskedForMasternodeList[pnode->addr] = askAgain; -} - -CMasternode* CMasternodeMan::Find(const CScript& payee) -{ - LOCK(cs); - CScript payee2; - - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - payee2 = GetScriptForDestination(mn.pubKeyCollateralAddress.GetID()); - if (payee2 == payee) - return &mn; - } - return NULL; -} - -CMasternode* CMasternodeMan::Find(const CTxIn& vin) -{ - LOCK(cs); - - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - if (mn.vin.prevout == vin.prevout) - return &mn; - } - return NULL; -} - - -CMasternode* CMasternodeMan::Find(const CPubKey& pubKeyMasternode) -{ - LOCK(cs); - - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - if (mn.pubKeyMasternode == pubKeyMasternode) - return &mn; - } - return NULL; -} - -// -// Deterministically select the oldest/best masternode to pay on the network -// -CMasternode* CMasternodeMan::GetNextMasternodeInQueueForPayment(int nBlockHeight, bool fFilterSigTime, int& nCount) -{ - LOCK(cs); - - CMasternode* pBestMasternode = NULL; - std::vector > vecMasternodeLastPaid; - - /* - Make a vector with all of the last paid times - */ - - int nMnCount = CountEnabled(); - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - mn.Check(); - if (!mn.IsEnabled()) continue; - - // //check protocol version - if (mn.protocolVersion < masternodePayments.GetMinMasternodePaymentsProto()) continue; - - //it's in the list (up to 8 entries ahead of current block to allow propagation) -- so let's skip it - if (masternodePayments.IsScheduled(mn, nBlockHeight)) continue; - - //it's too new, wait for a cycle - if (fFilterSigTime && mn.sigTime + (nMnCount * 2.6 * 60) > GetAdjustedTime()) continue; - - //make sure it has as many confirmations as there are masternodes - if (mn.GetMasternodeInputAge() < nMnCount) continue; - - vecMasternodeLastPaid.push_back(make_pair(mn.SecondsSincePayment(), mn.vin)); - } - - nCount = (int)vecMasternodeLastPaid.size(); - - //when the network is in the process of upgrading, don't penalize nodes that recently restarted - if (fFilterSigTime && nCount < nMnCount / 3) return GetNextMasternodeInQueueForPayment(nBlockHeight, false, nCount); - - // Sort them high to low - sort(vecMasternodeLastPaid.rbegin(), vecMasternodeLastPaid.rend(), CompareLastPaid()); - - // Look at 1/10 of the oldest nodes (by last payment), calculate their scores and pay the best one - // -- This doesn't look at who is being paid in the +8-10 blocks, allowing for double payments very rarely - // -- 1/100 payments should be a double payment on mainnet - (1/(3000/10))*2 - // -- (chance per block * chances before IsScheduled will fire) - int nTenthNetwork = CountEnabled() / 10; - int nCountTenth = 0; - uint256 nHigh = 0; - BOOST_FOREACH (PAIRTYPE(int64_t, CTxIn) & s, vecMasternodeLastPaid) { - CMasternode* pmn = Find(s.second); - if (!pmn) break; - - uint256 n = pmn->CalculateScore(1, nBlockHeight - 100); - if (n > nHigh) { - nHigh = n; - pBestMasternode = pmn; - } - nCountTenth++; - if (nCountTenth >= nTenthNetwork) break; - } - return pBestMasternode; -} - -CMasternode* CMasternodeMan::FindRandomNotInVec(std::vector& vecToExclude, int protocolVersion) -{ - LOCK(cs); - - protocolVersion = protocolVersion == -1 ? masternodePayments.GetMinMasternodePaymentsProto() : protocolVersion; - - int nCountEnabled = CountEnabled(protocolVersion); - LogPrint("masternode", "CMasternodeMan::FindRandomNotInVec - nCountEnabled - vecToExclude.size() %d\n", nCountEnabled - vecToExclude.size()); - if (nCountEnabled - vecToExclude.size() < 1) return NULL; - - int rand = GetRandInt(nCountEnabled - vecToExclude.size()); - LogPrint("masternode", "CMasternodeMan::FindRandomNotInVec - rand %d\n", rand); - bool found; - - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - if (mn.protocolVersion < protocolVersion || !mn.IsEnabled()) continue; - found = false; - BOOST_FOREACH (CTxIn& usedVin, vecToExclude) { - if (mn.vin.prevout == usedVin.prevout) { - found = true; - break; - } - } - if (found) continue; - if (--rand < 1) { - return &mn; - } - } - - return NULL; -} - -CMasternode* CMasternodeMan::GetCurrentMasterNode(int mod, int64_t nBlockHeight, int minProtocol) -{ - int64_t score = 0; - CMasternode* winner = NULL; - - // scan for winner - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - mn.Check(); - if (mn.protocolVersion < minProtocol || !mn.IsEnabled()) continue; - - // calculate the score for each Masternode - uint256 n = mn.CalculateScore(mod, nBlockHeight); - int64_t n2 = n.GetCompact(false); - - // determine the winner - if (n2 > score) { - score = n2; - winner = &mn; - } - } - - return winner; -} - -int CMasternodeMan::GetMasternodeRank(const CTxIn& vin, int64_t nBlockHeight, int minProtocol, bool fOnlyActive) -{ - std::vector > vecMasternodeScores; - int64_t nMasternode_Min_Age = MN_WINNER_MINIMUM_AGE; - int64_t nMasternode_Age = 0; - - //make sure we know about this block - uint256 hash = 0; - if (!GetBlockHash(hash, nBlockHeight)) return -1; - - // scan for winner - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - if (mn.protocolVersion < minProtocol) { - LogPrint("masternode","Skipping Masternode with obsolete version %d\n", mn.protocolVersion); - continue; // Skip obsolete versions - } - - if (IsSporkActive(SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT)) { - nMasternode_Age = GetAdjustedTime() - mn.sigTime; - if ((nMasternode_Age) < nMasternode_Min_Age) { - if (fDebug) LogPrint("masternode","Skipping just activated Masternode. Age: %ld\n", nMasternode_Age); - continue; // Skip masternodes younger than (default) 1 hour - } - } - if (fOnlyActive) { - mn.Check(); - if (!mn.IsEnabled()) continue; - } - uint256 n = mn.CalculateScore(1, nBlockHeight); - int64_t n2 = n.GetCompact(false); - - vecMasternodeScores.push_back(make_pair(n2, mn.vin)); - } - - sort(vecMasternodeScores.rbegin(), vecMasternodeScores.rend(), CompareScoreTxIn()); - - int rank = 0; - BOOST_FOREACH (PAIRTYPE(int64_t, CTxIn) & s, vecMasternodeScores) { - rank++; - if (s.second.prevout == vin.prevout) { - return rank; - } - } - - return -1; -} - -std::vector > CMasternodeMan::GetMasternodeRanks(int64_t nBlockHeight, int minProtocol) -{ - std::vector > vecMasternodeScores; - std::vector > vecMasternodeRanks; - - //make sure we know about this block - uint256 hash = 0; - if (!GetBlockHash(hash, nBlockHeight)) return vecMasternodeRanks; - - // scan for winner - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - mn.Check(); - - if (mn.protocolVersion < minProtocol) continue; - - if (!mn.IsEnabled()) { - vecMasternodeScores.push_back(make_pair(9999, mn)); - continue; - } - - uint256 n = mn.CalculateScore(1, nBlockHeight); - int64_t n2 = n.GetCompact(false); - - vecMasternodeScores.push_back(make_pair(n2, mn)); - } - - sort(vecMasternodeScores.rbegin(), vecMasternodeScores.rend(), CompareScoreMN()); - - int rank = 0; - BOOST_FOREACH (PAIRTYPE(int64_t, CMasternode) & s, vecMasternodeScores) { - rank++; - vecMasternodeRanks.push_back(make_pair(rank, s.second)); - } - - return vecMasternodeRanks; -} - -CMasternode* CMasternodeMan::GetMasternodeByRank(int nRank, int64_t nBlockHeight, int minProtocol, bool fOnlyActive) -{ - std::vector > vecMasternodeScores; - - // scan for winner - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - if (mn.protocolVersion < minProtocol) continue; - if (fOnlyActive) { - mn.Check(); - if (!mn.IsEnabled()) continue; - } - - uint256 n = mn.CalculateScore(1, nBlockHeight); - int64_t n2 = n.GetCompact(false); - - vecMasternodeScores.push_back(make_pair(n2, mn.vin)); - } - - sort(vecMasternodeScores.rbegin(), vecMasternodeScores.rend(), CompareScoreTxIn()); - - int rank = 0; - BOOST_FOREACH (PAIRTYPE(int64_t, CTxIn) & s, vecMasternodeScores) { - rank++; - if (rank == nRank) { - return Find(s.second); - } - } - - return NULL; -} - -void CMasternodeMan::ProcessMasternodeConnections() -{ - //we don't care about this for regtest - if (Params().NetworkID() == CBaseChainParams::REGTEST) return; - - LOCK(cs_vNodes); - BOOST_FOREACH (CNode* pnode, vNodes) { - if (pnode->fObfuScationMaster) { - if (obfuScationPool.pSubmittedToMasternode != NULL && pnode->addr == obfuScationPool.pSubmittedToMasternode->addr) continue; - LogPrint("masternode","Closing Masternode connection peer=%i \n", pnode->GetId()); - pnode->fObfuScationMaster = false; - pnode->Release(); - } - } -} - -void CMasternodeMan::ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) -{ - if (fLiteMode) return; //disable all Obfuscation/Masternode related functionality - if (!masternodeSync.IsBlockchainSynced()) return; - - LOCK(cs_process_message); - - if (strCommand == "mnb") { //Masternode Broadcast - CMasternodeBroadcast mnb; - vRecv >> mnb; - - if (mapSeenMasternodeBroadcast.count(mnb.GetHash())) { //seen - masternodeSync.AddedMasternodeList(mnb.GetHash()); - return; - } - mapSeenMasternodeBroadcast.insert(make_pair(mnb.GetHash(), mnb)); - - int nDoS = 0; - if (!mnb.CheckAndUpdate(nDoS)) { - if (nDoS > 0) - Misbehaving(pfrom->GetId(), nDoS); - - //failed - return; - } - - // make sure the vout that was signed is related to the transaction that spawned the Masternode - // - this is expensive, so it's only done once per Masternode - if (!obfuScationSigner.IsVinAssociatedWithPubkey(mnb.vin, mnb.pubKeyCollateralAddress)) { - LogPrintf("CMasternodeMan::ProcessMessage() : mnb - Got mismatched pubkey and vin\n"); - Misbehaving(pfrom->GetId(), 33); - return; - } - - // make sure it's still unspent - // - this is checked later by .check() in many places and by ThreadCheckObfuScationPool() - if (mnb.CheckInputsAndAdd(nDoS)) { - // use this as a peer - addrman.Add(CAddress(mnb.addr), pfrom->addr, 2 * 60 * 60); - masternodeSync.AddedMasternodeList(mnb.GetHash()); - } else { - LogPrint("masternode","mnb - Rejected Masternode entry %s\n", mnb.vin.prevout.hash.ToString()); - - if (nDoS > 0) - Misbehaving(pfrom->GetId(), nDoS); - } - } - - else if (strCommand == "mnp") { //Masternode Ping - CMasternodePing mnp; - vRecv >> mnp; - - LogPrint("masternode", "mnp - Masternode ping, vin: %s\n", mnp.vin.prevout.hash.ToString()); - - if (mapSeenMasternodePing.count(mnp.GetHash())) return; //seen - mapSeenMasternodePing.insert(make_pair(mnp.GetHash(), mnp)); - - int nDoS = 0; - if (mnp.CheckAndUpdate(nDoS)) return; - - if (nDoS > 0) { - // if anything significant failed, mark that node - Misbehaving(pfrom->GetId(), nDoS); - } else { - // if nothing significant failed, search existing Masternode list - CMasternode* pmn = Find(mnp.vin); - // if it's known, don't ask for the mnb, just return - if (pmn != NULL) return; - } - - // something significant is broken or mn is unknown, - // we might have to ask for a masternode entry once - AskForMN(pfrom, mnp.vin); - - } else if (strCommand == "dseg") { //Get Masternode list or specific entry - - CTxIn vin; - vRecv >> vin; - - if (vin == CTxIn()) { //only should ask for this once - //local network - bool isLocal = (pfrom->addr.IsRFC1918() || pfrom->addr.IsLocal()); - - if (!isLocal && Params().NetworkID() == CBaseChainParams::MAIN) { - std::map::iterator i = mAskedUsForMasternodeList.find(pfrom->addr); - if (i != mAskedUsForMasternodeList.end()) { - int64_t t = (*i).second; - if (GetTime() < t) { - LogPrintf("CMasternodeMan::ProcessMessage() : dseg - peer already asked me for the list\n"); - Misbehaving(pfrom->GetId(), 34); - return; - } - } - int64_t askAgain = GetTime() + MASTERNODES_DSEG_SECONDS; - mAskedUsForMasternodeList[pfrom->addr] = askAgain; - } - } //else, asking for a specific node which is ok - - - int nInvCount = 0; - - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - if (mn.addr.IsRFC1918()) continue; //local network - - if (mn.IsEnabled()) { - LogPrint("masternode", "dseg - Sending Masternode entry - %s \n", mn.vin.prevout.hash.ToString()); - if (vin == CTxIn() || vin == mn.vin) { - CMasternodeBroadcast mnb = CMasternodeBroadcast(mn); - uint256 hash = mnb.GetHash(); - pfrom->PushInventory(CInv(MSG_MASTERNODE_ANNOUNCE, hash)); - nInvCount++; - - if (!mapSeenMasternodeBroadcast.count(hash)) mapSeenMasternodeBroadcast.insert(make_pair(hash, mnb)); - - if (vin == mn.vin) { - LogPrint("masternode", "dseg - Sent 1 Masternode entry to peer %i\n", pfrom->GetId()); - return; - } - } - } - } - - if (vin == CTxIn()) { - pfrom->PushMessage("ssc", MASTERNODE_SYNC_LIST, nInvCount); - LogPrint("masternode", "dseg - Sent %d Masternode entries to peer %i\n", nInvCount, pfrom->GetId()); - } - } - /* - * IT'S SAFE TO REMOVE THIS IN FURTHER VERSIONS - * AFTER MIGRATION TO V12 IS DONE - */ - - // Light version for OLD MASSTERNODES - fake pings, no self-activation - else if (strCommand == "dsee") { //ObfuScation Election Entry - - if (IsSporkActive(SPORK_10_MASTERNODE_PAY_UPDATED_NODES)) return; - - CTxIn vin; - CService addr; - CPubKey pubkey; - CPubKey pubkey2; - vector vchSig; - int64_t sigTime; - int count; - int current; - int64_t lastUpdated; - int protocolVersion; - CScript donationAddress; - int donationPercentage; - std::string strMessage; - - vRecv >> vin >> addr >> vchSig >> sigTime >> pubkey >> pubkey2 >> count >> current >> lastUpdated >> protocolVersion >> donationAddress >> donationPercentage; - - // make sure signature isn't in the future (past is OK) - if (sigTime > GetAdjustedTime() + 60 * 60) { - LogPrintf("CMasternodeMan::ProcessMessage() : dsee - Signature rejected, too far into the future %s\n", vin.prevout.hash.ToString()); - Misbehaving(pfrom->GetId(), 1); - return; - } - - std::string vchPubKey(pubkey.begin(), pubkey.end()); - std::string vchPubKey2(pubkey2.begin(), pubkey2.end()); - - strMessage = addr.ToString() + boost::lexical_cast(sigTime) + vchPubKey + vchPubKey2 + boost::lexical_cast(protocolVersion) + donationAddress.ToString() + boost::lexical_cast(donationPercentage); - - if (protocolVersion < masternodePayments.GetMinMasternodePaymentsProto()) { - LogPrintf("CMasternodeMan::ProcessMessage() : dsee - ignoring outdated Masternode %s protocol version %d < %d\n", vin.prevout.hash.ToString(), protocolVersion, masternodePayments.GetMinMasternodePaymentsProto()); - Misbehaving(pfrom->GetId(), 1); - return; - } - - CScript pubkeyScript; - pubkeyScript = GetScriptForDestination(pubkey.GetID()); - - if (pubkeyScript.size() != 25) { - LogPrintf("CMasternodeMan::ProcessMessage() : dsee - pubkey the wrong size\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - CScript pubkeyScript2; - pubkeyScript2 = GetScriptForDestination(pubkey2.GetID()); - - if (pubkeyScript2.size() != 25) { - LogPrintf("CMasternodeMan::ProcessMessage() : dsee - pubkey2 the wrong size\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - if (!vin.scriptSig.empty()) { - LogPrintf("CMasternodeMan::ProcessMessage() : dsee - Ignore Not Empty ScriptSig %s\n", vin.prevout.hash.ToString()); - Misbehaving(pfrom->GetId(), 100); - return; - } - - std::string errorMessage = ""; - if (!obfuScationSigner.VerifyMessage(pubkey, vchSig, strMessage, errorMessage)) { - LogPrintf("CMasternodeMan::ProcessMessage() : dsee - Got bad Masternode address signature\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - // if (Params().NetworkID() == CBaseChainParams::MAIN) { - // if (addr.GetPort() != 51992) return; - // } else if (addr.GetPort() == 51992) - // return; - - //search existing Masternode list, this is where we update existing Masternodes with new dsee broadcasts - CMasternode* pmn = this->Find(vin); - if (pmn != NULL) { - // count == -1 when it's a new entry - // e.g. We don't want the entry relayed/time updated when we're syncing the list - // mn.pubkey = pubkey, IsVinAssociatedWithPubkey is validated once below, - // after that they just need to match - if (count == -1 && pmn->pubKeyCollateralAddress == pubkey && (GetAdjustedTime() - pmn->nLastDsee > MASTERNODE_MIN_MNB_SECONDS)) { - if (pmn->protocolVersion > GETHEADERS_VERSION && sigTime - pmn->lastPing.sigTime < MASTERNODE_MIN_MNB_SECONDS) return; - if (pmn->nLastDsee < sigTime) { //take the newest entry - LogPrint("masternode", "dsee - Got updated entry for %s\n", vin.prevout.hash.ToString()); - if (pmn->protocolVersion < GETHEADERS_VERSION) { - pmn->pubKeyMasternode = pubkey2; - pmn->sigTime = sigTime; - pmn->sig = vchSig; - pmn->protocolVersion = protocolVersion; - pmn->addr = addr; - //fake ping - pmn->lastPing = CMasternodePing(vin); - } - pmn->nLastDsee = sigTime; - pmn->Check(); - if (pmn->IsEnabled()) { - TRY_LOCK(cs_vNodes, lockNodes); - if (!lockNodes) return; - BOOST_FOREACH (CNode* pnode, vNodes) - if (pnode->nVersion >= masternodePayments.GetMinMasternodePaymentsProto()) - pnode->PushMessage("dsee", vin, addr, vchSig, sigTime, pubkey, pubkey2, count, current, lastUpdated, protocolVersion, donationAddress, donationPercentage); - } - } - } - - return; - } - - static std::map mapSeenDsee; - if (mapSeenDsee.count(vin.prevout) && mapSeenDsee[vin.prevout] == pubkey) { - LogPrint("masternode", "dsee - already seen this vin %s\n", vin.prevout.ToString()); - return; - } - mapSeenDsee.insert(make_pair(vin.prevout, pubkey)); - // make sure the vout that was signed is related to the transaction that spawned the Masternode - // - this is expensive, so it's only done once per Masternode - if (!obfuScationSigner.IsVinAssociatedWithPubkey(vin, pubkey)) { - LogPrintf("CMasternodeMan::ProcessMessage() : dsee - Got mismatched pubkey and vin\n"); - Misbehaving(pfrom->GetId(), 100); - return; - } - - - LogPrint("masternode", "dsee - Got NEW OLD Masternode entry %s\n", vin.prevout.hash.ToString()); - - // make sure it's still unspent - // - this is checked later by .check() in many places and by ThreadCheckObfuScationPool() - - CValidationState state; - CMutableTransaction tx = CMutableTransaction(); - CTxOut vout = CTxOut(2999.99 * COIN, obfuScationPool.collateralPubKey); - tx.vin.push_back(vin); - tx.vout.push_back(vout); - - bool fAcceptable = false; - { - TRY_LOCK(cs_main, lockMain); - if (!lockMain) return; - fAcceptable = AcceptableInputs(mempool, state, CTransaction(tx), false, NULL); - } - - if (fAcceptable) { - if (GetInputAge(vin) < MASTERNODE_MIN_CONFIRMATIONS) { - LogPrintf("CMasternodeMan::ProcessMessage() : dsee - Input must have least %d confirmations\n", MASTERNODE_MIN_CONFIRMATIONS); - Misbehaving(pfrom->GetId(), 20); - return; - } - - // verify that sig time is legit in past - // should be at least not earlier than block when 1000 UNIGRID tx got MASTERNODE_MIN_CONFIRMATIONS - uint256 hashBlock = 0; - CTransaction tx2; - GetTransaction(vin.prevout.hash, tx2, hashBlock, true); - BlockMap::iterator mi = mapBlockIndex.find(hashBlock); - if (mi != mapBlockIndex.end() && (*mi).second) { - CBlockIndex* pMNIndex = (*mi).second; // block for 10000 UNIGRID tx -> 1 confirmation - CBlockIndex* pConfIndex = chainActive[pMNIndex->nHeight + MASTERNODE_MIN_CONFIRMATIONS - 1]; // block where tx got MASTERNODE_MIN_CONFIRMATIONS - if (pConfIndex->GetBlockTime() > sigTime) { - LogPrint("masternode","mnb - Bad sigTime %d for Masternode %s (%i conf block is at %d)\n", - sigTime, vin.prevout.hash.ToString(), MASTERNODE_MIN_CONFIRMATIONS, pConfIndex->GetBlockTime()); - return; - } - } - - // use this as a peer - addrman.Add(CAddress(addr), pfrom->addr, 2 * 60 * 60); - - // add Masternode - CMasternode mn = CMasternode(); - mn.addr = addr; - mn.vin = vin; - mn.pubKeyCollateralAddress = pubkey; - mn.sig = vchSig; - mn.sigTime = sigTime; - mn.pubKeyMasternode = pubkey2; - mn.protocolVersion = protocolVersion; - // fake ping - mn.lastPing = CMasternodePing(vin); - mn.Check(true); - // add v11 masternodes, v12 should be added by mnb only - if (protocolVersion < GETHEADERS_VERSION) { - LogPrint("masternode", "dsee - Accepted OLD Masternode entry %i %i\n", count, current); - Add(mn); - } - if (mn.IsEnabled()) { - TRY_LOCK(cs_vNodes, lockNodes); - if (!lockNodes) return; - BOOST_FOREACH (CNode* pnode, vNodes) - if (pnode->nVersion >= masternodePayments.GetMinMasternodePaymentsProto()) - pnode->PushMessage("dsee", vin, addr, vchSig, sigTime, pubkey, pubkey2, count, current, lastUpdated, protocolVersion, donationAddress, donationPercentage); - } - } else { - LogPrint("masternode","dsee - Rejected Masternode entry %s\n", vin.prevout.hash.ToString()); - - int nDoS = 0; - if (state.IsInvalid(nDoS)) { - LogPrint("masternode","dsee - %s from %i %s was not accepted into the memory pool\n", tx.GetHash().ToString().c_str(), - pfrom->GetId(), pfrom->cleanSubVer.c_str()); - if (nDoS > 0) - Misbehaving(pfrom->GetId(), nDoS); - } - } - } - - else if (strCommand == "dseep") { //ObfuScation Election Entry Ping - - if (IsSporkActive(SPORK_10_MASTERNODE_PAY_UPDATED_NODES)) return; - - CTxIn vin; - vector vchSig; - int64_t sigTime; - bool stop; - vRecv >> vin >> vchSig >> sigTime >> stop; - - //LogPrint("masternode","dseep - Received: vin: %s sigTime: %lld stop: %s\n", vin.ToString().c_str(), sigTime, stop ? "true" : "false"); - - if (sigTime > GetAdjustedTime() + 60 * 60) { - LogPrintf("CMasternodeMan::ProcessMessage() : dseep - Signature rejected, too far into the future %s\n", vin.prevout.hash.ToString()); - Misbehaving(pfrom->GetId(), 1); - return; - } - - if (sigTime <= GetAdjustedTime() - 60 * 60) { - LogPrintf("CMasternodeMan::ProcessMessage() : dseep - Signature rejected, too far into the past %s - %d %d \n", vin.prevout.hash.ToString(), sigTime, GetAdjustedTime()); - Misbehaving(pfrom->GetId(), 1); - return; - } - - std::map::iterator i = mWeAskedForMasternodeListEntry.find(vin.prevout); - if (i != mWeAskedForMasternodeListEntry.end()) { - int64_t t = (*i).second; - if (GetTime() < t) return; // we've asked recently - } - - // see if we have this Masternode - CMasternode* pmn = this->Find(vin); - if (pmn != NULL && pmn->protocolVersion >= masternodePayments.GetMinMasternodePaymentsProto()) { - // LogPrint("masternode","dseep - Found corresponding mn for vin: %s\n", vin.ToString().c_str()); - // take this only if it's newer - if (sigTime - pmn->nLastDseep > MASTERNODE_MIN_MNP_SECONDS) { - std::string strMessage = pmn->addr.ToString() + boost::lexical_cast(sigTime) + boost::lexical_cast(stop); - - std::string errorMessage = ""; - if (!obfuScationSigner.VerifyMessage(pmn->pubKeyMasternode, vchSig, strMessage, errorMessage)) { - LogPrint("masternode","dseep - Got bad Masternode address signature %s \n", vin.prevout.hash.ToString()); - //Misbehaving(pfrom->GetId(), 100); - return; - } - - // fake ping for v11 masternodes, ignore for v12 - if (pmn->protocolVersion < GETHEADERS_VERSION) pmn->lastPing = CMasternodePing(vin); - pmn->nLastDseep = sigTime; - pmn->Check(); - if (pmn->IsEnabled()) { - TRY_LOCK(cs_vNodes, lockNodes); - if (!lockNodes) return; - LogPrint("masternode", "dseep - relaying %s \n", vin.prevout.hash.ToString()); - BOOST_FOREACH (CNode* pnode, vNodes) - if (pnode->nVersion >= masternodePayments.GetMinMasternodePaymentsProto()) - pnode->PushMessage("dseep", vin, vchSig, sigTime, stop); - } - } - return; - } - - LogPrint("masternode", "dseep - Couldn't find Masternode entry %s peer=%i\n", vin.prevout.hash.ToString(), pfrom->GetId()); - - AskForMN(pfrom, vin); - } - - /* - * END OF "REMOVE" - */ -} - -void CMasternodeMan::Remove(CTxIn vin) -{ - LOCK(cs); - - vector::iterator it = vMasternodes.begin(); - while (it != vMasternodes.end()) { - if ((*it).vin == vin) { - LogPrint("masternode", "CMasternodeMan: Removing Masternode %s - %i now\n", (*it).vin.prevout.hash.ToString(), size() - 1); - vMasternodes.erase(it); - break; - } - ++it; - } -} - -void CMasternodeMan::UpdateMasternodeList(CMasternodeBroadcast mnb) -{ - mapSeenMasternodePing.insert(make_pair(mnb.lastPing.GetHash(), mnb.lastPing)); - mapSeenMasternodeBroadcast.insert(make_pair(mnb.GetHash(), mnb)); - masternodeSync.AddedMasternodeList(mnb.GetHash()); - - LogPrint("masternode","CMasternodeMan::UpdateMasternodeList() -- masternode=%s\n", mnb.vin.prevout.ToString()); - - CMasternode* pmn = Find(mnb.vin); - if (pmn == NULL) { - CMasternode mn(mnb); - Add(mn); - } else { - pmn->UpdateFromNewBroadcast(mnb); - } -} - -std::string CMasternodeMan::ToString() const -{ - std::ostringstream info; - - info << "Masternodes: " << (int)vMasternodes.size() << ", peers who asked us for Masternode list: " << (int)mAskedUsForMasternodeList.size() << ", peers we asked for Masternode list: " << (int)mWeAskedForMasternodeList.size() << ", entries in Masternode list we asked for: " << (int)mWeAskedForMasternodeListEntry.size() << ", nDsqCount: " << (int)nDsqCount; - - return info.str(); -} diff --git a/daemon/masternodeman.h b/daemon/masternodeman.h deleted file mode 100644 index 628a1ffd8993..000000000000 --- a/daemon/masternodeman.h +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright (c) 2014-2015 The Dash developers -// Copyright (c) 2015-2018 The PIVX developers -// Copyright (c) 2018-2019 The UNIGRID organization -// Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#ifndef MASTERNODEMAN_H -#define MASTERNODEMAN_H - -#include "base58.h" -#include "key.h" -#include "main.h" -#include "masternode.h" -#include "net.h" -#include "sync.h" -#include "util.h" - -#define MASTERNODES_DUMP_SECONDS (15 * 60) -#define MASTERNODES_DSEG_SECONDS (3 * 60 * 60) - -using namespace std; - -class CMasternodeMan; - -extern CMasternodeMan mnodeman; -void DumpMasternodes(); - -/** Access to the MN database (mncache.dat) - */ -class CMasternodeDB -{ -private: - boost::filesystem::path pathMN; - std::string strMagicMessage; - -public: - enum ReadResult { - Ok, - FileError, - HashReadError, - IncorrectHash, - IncorrectMagicMessage, - IncorrectMagicNumber, - IncorrectFormat - }; - - CMasternodeDB(); - bool Write(const CMasternodeMan& mnodemanToSave); - ReadResult Read(CMasternodeMan& mnodemanToLoad, bool fDryRun = false); -}; - -class CMasternodeMan -{ -private: - // critical section to protect the inner data structures - mutable CCriticalSection cs; - - // critical section to protect the inner data structures specifically on messaging - mutable CCriticalSection cs_process_message; - - // map to hold all MNs - std::vector vMasternodes; - // who's asked for the Masternode list and the last time - std::map mAskedUsForMasternodeList; - // who we asked for the Masternode list and the last time - std::map mWeAskedForMasternodeList; - // which Masternodes we've asked for - std::map mWeAskedForMasternodeListEntry; - -public: - // Keep track of all broadcasts I've seen - map mapSeenMasternodeBroadcast; - // Keep track of all pings I've seen - map mapSeenMasternodePing; - - // keep track of dsq count to prevent masternodes from gaming obfuscation queue - int64_t nDsqCount; - - ADD_SERIALIZE_METHODS; - - template - inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) - { - LOCK(cs); - READWRITE(vMasternodes); - READWRITE(mAskedUsForMasternodeList); - READWRITE(mWeAskedForMasternodeList); - READWRITE(mWeAskedForMasternodeListEntry); - READWRITE(nDsqCount); - - READWRITE(mapSeenMasternodeBroadcast); - READWRITE(mapSeenMasternodePing); - } - - CMasternodeMan(); - CMasternodeMan(CMasternodeMan& other); - - /// Add an entry - bool Add(CMasternode& mn); - - /// Ask (source) node for mnb - void AskForMN(CNode* pnode, CTxIn& vin); - - /// Check all Masternodes - void Check(); - - /// Check all Masternodes and remove inactive - void CheckAndRemove(bool forceExpiredRemoval = false); - - /// Clear Masternode vector - void Clear(); - - int CountEnabled(int protocolVersion = -1); - - void CountNetworks(int protocolVersion, int& ipv4, int& ipv6, int& onion); - - void DsegUpdate(CNode* pnode); - - /// Find an entry - CMasternode* Find(const CScript& payee); - CMasternode* Find(const CTxIn& vin); - CMasternode* Find(const CPubKey& pubKeyMasternode); - - /// Find an entry in the masternode list that is next to be paid - CMasternode* GetNextMasternodeInQueueForPayment(int nBlockHeight, bool fFilterSigTime, int& nCount); - - /// Find a random entry - CMasternode* FindRandomNotInVec(std::vector& vecToExclude, int protocolVersion = -1); - - /// Get the current winner for this block - CMasternode* GetCurrentMasterNode(int mod = 1, int64_t nBlockHeight = 0, int minProtocol = 0); - - std::vector GetFullMasternodeVector() - { - Check(); - return vMasternodes; - } - - std::vector > GetMasternodeRanks(int64_t nBlockHeight, int minProtocol = 0); - int GetMasternodeRank(const CTxIn& vin, int64_t nBlockHeight, int minProtocol = 0, bool fOnlyActive = true); - CMasternode* GetMasternodeByRank(int nRank, int64_t nBlockHeight, int minProtocol = 0, bool fOnlyActive = true); - - void ProcessMasternodeConnections(); - - void ProcessMessage(CNode* pfrom, std::string& strCommand, CDataStream& vRecv); - - /// Return the number of (unique) Masternodes - int size() { return vMasternodes.size(); } - - /// Return the number of Masternodes older than (default) 8000 seconds - int stable_size (); - - std::string ToString() const; - - void Remove(CTxIn vin); - - int GetEstimatedMasternodes(int nBlock); - - /// Update masternode list and maps using provided CMasternodeBroadcast - void UpdateMasternodeList(CMasternodeBroadcast mnb); -}; - -#endif diff --git a/daemon/miner.cpp b/daemon/miner.cpp index 207ed8c2e272..c281eaccea48 100644 --- a/daemon/miner.cpp +++ b/daemon/miner.cpp @@ -11,7 +11,7 @@ #include "amount.h" #include "hash.h" #include "main.h" -#include "masternode-sync.h" +#include "gridnode-sync.h" #include "net.h" #include "pow.h" #include "primitives/block.h" @@ -25,7 +25,7 @@ #include "accumulators.h" #include "blocksignature.h" #include "invalid.h" -#include "masternode-payments.h" +#include "gridnode-payments.h" #include "spork.h" #include "validationinterface.h" #include "zpivchain.h" @@ -156,6 +156,8 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn, CWallet* pwallet, if (!fStakeFound) return NULL; } + LogPrintf("nLastCoinStakeSearchInterval = %ld\n", nLastCoinStakeSearchInterval); + LogPrintf("nLastCoinStakeSearchTime = %ld\n", nLastCoinStakeSearchTime); // Largest block you're willing to create: unsigned int nBlockMaxSize = GetArg("-blockmaxsize", DEFAULT_BLOCK_MAX_SIZE); @@ -423,7 +425,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn, CWallet* pwallet, } if (!fProofOfStake) { - //Masternode and general budget payments + //Gridnode and general budget payments FillBlockPayee(txNew, nFees, fProofOfStake, false); //Make payee @@ -594,7 +596,7 @@ void BitcoinMiner(CWallet* pwallet, bool fProofOfStake) unsigned int nExtraNonce = 0; while (fGenerateBitcoins || fProofOfStake) { - if (chainActive.Tip()->nHeight >= Params().LAST_POW_BLOCK() && !fProofOfStake) { + if (chainActive.Tip() && chainActive.Tip()->nHeight >= Params().LAST_POW_BLOCK() && !fProofOfStake) { MilliSleep(5000); break; } @@ -623,9 +625,11 @@ void BitcoinMiner(CWallet* pwallet, bool fProofOfStake) MilliSleep(5000); continue; } - - while (vNodes.empty() || pwallet->IsLocked() || !fMintableCoins || (pwallet->GetBalance() > 0 && nReserveBalance >= pwallet->GetBalance()) || !masternodeSync.IsSynced()) { + //TODO: uncomment gridnodesync. only turend on to test testnet + while (vNodes.empty() || pwallet->IsLocked() || !fMintableCoins || (pwallet->GetBalance() > 0 && nReserveBalance >= pwallet->GetBalance()) || !GridnodeSync.IsSynced()) { + //LogPrintf("Waiting for mintable coins: %d : %d : %d : %d : %d : %d\n", vNodes.empty(), pwallet->IsLocked(), fMintableCoins, pwallet->GetBalance(), nReserveBalance, GridnodeSync.IsSynced()); nLastCoinStakeSearchInterval = 0; + // Do a separate 1 minute check here to ensure fMintableCoins is updated if (!fMintableCoins) { if (GetTime() - nMintableLastCheck > 1 * 60) // 1 minute check time @@ -634,7 +638,9 @@ void BitcoinMiner(CWallet* pwallet, bool fProofOfStake) fMintableCoins = pwallet->MintableCoins(); } } + MilliSleep(5000); + if (!fGenerateBitcoins && !fProofOfStake) continue; } @@ -654,12 +660,14 @@ void BitcoinMiner(CWallet* pwallet, bool fProofOfStake) // unsigned int nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); CBlockIndex* pindexPrev = chainActive.Tip(); - if (!pindexPrev) + if (!pindexPrev){ continue; + } unique_ptr pblocktemplate(CreateNewBlockWithKey(reservekey, pwallet, fProofOfStake)); - if (!pblocktemplate.get()) + if (!pblocktemplate.get()){ continue; + } CBlock* pblock = &pblocktemplate->block; IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); @@ -726,6 +734,7 @@ void BitcoinMiner(CWallet* pwallet, bool fProofOfStake) } pblock->nNonce += 1; nHashesDone += 1; + if ((pblock->nNonce & 0xFF) == 0) break; } diff --git a/daemon/mint.cpp b/daemon/mint.cpp new file mode 100644 index 000000000000..352b1ab9bdc4 --- /dev/null +++ b/daemon/mint.cpp @@ -0,0 +1,40 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2014 The Bitcoin developers +// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2015-2019 The PIVX developers +// Copyright (c) 2018-2022 The UNIGRID organization +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "mint.h" +#include "amount.h" + +mint::mint() { + this->mintaddress = ""; + this->mintamount = 0; + this->mintheigth = 0; +} + +std::string mint::getAddress() { + return this->mintaddress; +} + +void mint::setAddress(std::string s) { + this->mintaddress = s; +} + +int64_t mint::getAmount() { + return this->mintamount; +} + +void mint::setAmount(int a) { + this->mintamount = a * COIN; +} + +long mint::getHeigth() { + return this->mintheigth; +} + +void mint::setHeigth(long h) { + this->mintheigth = h; +} \ No newline at end of file diff --git a/daemon/mint.h b/daemon/mint.h new file mode 100644 index 000000000000..0f270da39e3b --- /dev/null +++ b/daemon/mint.h @@ -0,0 +1,31 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2014 The Bitcoin developers +// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2015-2019 The PIVX developers +// Copyright (c) 2018-2022 The UNIGRID organization +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef UNIGRID_MINT_H +#define UNIGRID_MINT_H + +#include + +class mint { + public: + mint(); + std::string getAddress(); + void setAddress(std::string s); + int64_t getAmount(); + void setAmount(int a); + long getHeigth(); + void setHeigth(long h); + + private: + + std::string mintaddress; + long mintheigth; + int64_t mintamount; +}; + +#endif \ No newline at end of file diff --git a/daemon/net.cpp b/daemon/net.cpp index a104c8d731e0..22d0421f1916 100644 --- a/daemon/net.cpp +++ b/daemon/net.cpp @@ -396,8 +396,8 @@ CNode* FindNode(const CService& addr) CNode* ConnectNode(CAddress addrConnect, const char* pszDest, bool obfuScationMaster) { if (pszDest == NULL) { - // we clean masternode connections in CMasternodeMan::ProcessMasternodeConnections() - // so should be safe to skip this and connect to local Hot MN on CActiveMasternode::ManageStatus() + // we clean gridnode connections in CGridnodeMan::ProcessGridnodeConnections() + // so should be safe to skip this and connect to local Hot GM on CActiveGridnode::ManageStatus() if (IsLocal(addrConnect) && !obfuScationMaster) return NULL; @@ -1574,9 +1574,9 @@ void static ThreadStakeMinter() boost::this_thread::interruption_point(); } catch (std::exception& e) { LogPrintf("ThreadStakeMinter() exception \n"); - } catch (...) { + } /*catch (std::error) { LogPrintf("ThreadStakeMinter() error \n"); - } + }*/ LogPrintf("ThreadStakeMinter exiting,\n"); } @@ -1897,7 +1897,7 @@ void RelayInv(CInv& inv) { LOCK(cs_vNodes); BOOST_FOREACH (CNode* pnode, vNodes){ - if((pnode->nServices==NODE_BLOOM_WITHOUT_MN) && inv.IsMasterNodeType())continue; + if((pnode->nServices==NODE_BLOOM_WITHOUT_GN) && inv.IsGridnodeType())continue; if (pnode->nVersion >= ActiveProtocol()) pnode->PushInventory(inv); } diff --git a/daemon/net.h b/daemon/net.h index 86912311ddbe..727970b84440 100644 --- a/daemon/net.h +++ b/daemon/net.h @@ -326,7 +326,7 @@ class CNode // until they have initialized their bloom filter. bool fRelayTxes; // Should be 'true' only if we connected to this node to actually mix funds. - // In this case node will be released automatically via CMasternodeMan::ProcessMasternodeConnections(). + // In this case node will be released automatically via CGridnodeMan::ProcessGridnodeConnections(). // Connecting to verify connectability/status or connecting for sending/relaying single message // (even if it's relative to mixing e.g. for blinding) should NOT set this to 'true'. // For such cases node should be released manually (preferably right after corresponding code). diff --git a/daemon/obfuscation-relay.cpp b/daemon/obfuscation-relay.cpp index 1bc17e968b3e..45a81881ea44 100644 --- a/daemon/obfuscation-relay.cpp +++ b/daemon/obfuscation-relay.cpp @@ -8,16 +8,16 @@ CObfuScationRelay::CObfuScationRelay() { - vinMasternode = CTxIn(); + vinGridnode = CTxIn(); nBlockHeight = 0; nRelayType = 0; in = CTxIn(); out = CTxOut(); } -CObfuScationRelay::CObfuScationRelay(CTxIn& vinMasternodeIn, vector& vchSigIn, int nBlockHeightIn, int nRelayTypeIn, CTxIn& in2, CTxOut& out2) +CObfuScationRelay::CObfuScationRelay(CTxIn& vinGridnodeIn, vector& vchSigIn, int nBlockHeightIn, int nRelayTypeIn, CTxIn& in2, CTxOut& out2) { - vinMasternode = vinMasternodeIn; + vinGridnode = vinGridnodeIn; vchSig = vchSigIn; nBlockHeight = nBlockHeightIn; nRelayType = nRelayTypeIn; @@ -29,7 +29,7 @@ std::string CObfuScationRelay::ToString() { std::ostringstream info; - info << "vin: " << vinMasternode.ToString() << " nBlockHeight: " << (int)nBlockHeight << " nRelayType: " << (int)nRelayType << " in " << in.ToString() << " out " << out.ToString(); + info << "vin: " << vinGridnode.ToString() << " nBlockHeight: " << (int)nBlockHeight << " nRelayType: " << (int)nRelayType << " in " << in.ToString() << " out " << out.ToString(); return info.str(); } @@ -83,7 +83,7 @@ bool CObfuScationRelay::VerifyMessage(std::string strSharedKey) void CObfuScationRelay::Relay() { - int nCount = std::min(mnodeman.CountEnabled(ActiveProtocol()), 20); + int nCount = std::min(gnodeman.CountEnabled(ActiveProtocol()), 20); int nRank1 = (rand() % nCount) + 1; int nRank2 = (rand() % nCount) + 1; @@ -100,11 +100,11 @@ void CObfuScationRelay::Relay() void CObfuScationRelay::RelayThroughNode(int nRank) { - CMasternode* pmn = mnodeman.GetMasternodeByRank(nRank, nBlockHeight, ActiveProtocol()); + CGridnode* pgn = gnodeman.GetGridnodeByRank(nRank, nBlockHeight, ActiveProtocol()); - if (pmn != NULL) { - //printf("RelayThroughNode %s\n", pmn->addr.ToString().c_str()); - CNode* pnode = ConnectNode((CAddress)pmn->addr, NULL, false); + if (pgn != NULL) { + //printf("RelayThroughNode %s\n", pgn->addr.ToString().c_str()); + CNode* pnode = ConnectNode((CAddress)pgn->addr, NULL, false); if (pnode) { //printf("Connected\n"); pnode->PushMessage("dsr", (*this)); diff --git a/daemon/obfuscation-relay.h b/daemon/obfuscation-relay.h index e776926e1425..91e148682f0d 100644 --- a/daemon/obfuscation-relay.h +++ b/daemon/obfuscation-relay.h @@ -7,15 +7,15 @@ #ifndef OBFUSCATION_RELAY_H #define OBFUSCATION_RELAY_H -#include "activemasternode.h" +#include "activegridnode.h" #include "main.h" -#include "masternodeman.h" +#include "gridnodeman.h" class CObfuScationRelay { public: - CTxIn vinMasternode; + CTxIn vinGridnode; vector vchSig; vector vchSig2; int nBlockHeight; @@ -24,14 +24,14 @@ class CObfuScationRelay CTxOut out; CObfuScationRelay(); - CObfuScationRelay(CTxIn& vinMasternodeIn, vector& vchSigIn, int nBlockHeightIn, int nRelayTypeIn, CTxIn& in2, CTxOut& out2); + CObfuScationRelay(CTxIn& vinGridnodeIn, vector& vchSigIn, int nBlockHeightIn, int nRelayTypeIn, CTxIn& in2, CTxOut& out2); ADD_SERIALIZE_METHODS; template inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { - READWRITE(vinMasternode); + READWRITE(vinGridnode); READWRITE(vchSig); READWRITE(vchSig2); READWRITE(nBlockHeight); diff --git a/daemon/obfuscation.cpp b/daemon/obfuscation.cpp index 33b725363cc1..69c4b8347b14 100644 --- a/daemon/obfuscation.cpp +++ b/daemon/obfuscation.cpp @@ -8,7 +8,7 @@ #include "coincontrol.h" #include "init.h" #include "main.h" -#include "masternodeman.h" +#include "gridnodeman.h" #include "script/sign.h" #include "swifttx.h" #include "ui_interface.h" @@ -27,16 +27,16 @@ using namespace boost; // The main object for accessing Obfuscation CObfuscationPool obfuScationPool; -// A helper object for signing messages from Masternodes +// A helper object for signing messages from Gridnodes CObfuScationSigner obfuScationSigner; // The current Obfuscations in progress on the network std::vector vecObfuscationQueue; -// Keep track of the used Masternodes -std::vector vecMasternodesUsed; +// Keep track of the used Gridnodes +std::vector vecGridnodesUsed; // Keep track of the scanning errors I've seen map mapObfuscationBroadcastTxes; -// Keep track of the active Masternode -CActiveMasternode activeMasternode; +// Keep track of the active Gridnode +CActiveGridnode activeGridnode; /* *** BEGIN OBFUSCATION MAGIC - UNIGRID ********** Copyright (c) 2014-2015, Dash Developers @@ -46,8 +46,8 @@ CActiveMasternode activeMasternode; void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) { - if (fLiteMode) return; //disable all Obfuscation/Masternode related functionality - if (!masternodeSync.IsBlockchainSynced()) return; + if (fLiteMode) return; //disable all Obfuscation/Gridnode related functionality + if (!GridnodeSync.IsBlockchainSynced()) return; if (strCommand == "dsa") { //Obfuscation Accept Into Pool @@ -56,15 +56,15 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (pfrom->nVersion < ActiveProtocol()) { errorID = ERR_VERSION; LogPrintf("dsa -- incompatible version! \n"); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } - if (!fMasterNode) { + if (!fGridnode) { errorID = ERR_NOT_A_MN; - LogPrintf("dsa -- not a Masternode! \n"); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + LogPrintf("dsa -- not a Gridnode! \n"); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } @@ -73,30 +73,30 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC CTransaction txCollateral; vRecv >> nDenom >> txCollateral; - CMasternode* pmn = mnodeman.Find(activeMasternode.vin); - if (pmn == NULL) { + CGridnode* pgn = gnodeman.Find(activeGridnode.vin); + if (pgn == NULL) { errorID = ERR_MN_LIST; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } if (sessionUsers == 0) { - if (pmn->nLastDsq != 0 && - pmn->nLastDsq + mnodeman.CountEnabled(ActiveProtocol()) / 5 > mnodeman.nDsqCount) { + if (pgn->nLastDsq != 0 && + pgn->nLastDsq + gnodeman.CountEnabled(ActiveProtocol()) / 5 > gnodeman.nDsqCount) { LogPrintf("dsa -- last dsq too recent, must wait. %s \n", pfrom->addr.ToString()); errorID = ERR_RECENT; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } } if (!IsCompatibleWithSession(nDenom, txCollateral, errorID)) { LogPrintf("dsa -- not compatible with existing transactions! \n"); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } else { LogPrintf("dsa -- is compatible, please submit! \n"); - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_ACCEPTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_ACCEPTED, errorID); return; } @@ -117,14 +117,14 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (dsq.IsExpired()) return; - CMasternode* pmn = mnodeman.Find(dsq.vin); - if (pmn == NULL) return; + CGridnode* pgn = gnodeman.Find(dsq.vin); + if (pgn == NULL) return; // if the queue is ready, submit if we can if (dsq.ready) { - if (!pSubmittedToMasternode) return; - if ((CNetAddr)pSubmittedToMasternode->addr != (CNetAddr)addr) { - LogPrintf("dsq - message doesn't match current Masternode - %s != %s\n", pSubmittedToMasternode->addr.ToString(), addr.ToString()); + if (!pSubmittedToGridnode) return; + if ((CNetAddr)pSubmittedToGridnode->addr != (CNetAddr)addr) { + LogPrintf("dsq - message doesn't match current Gridnode - %s != %s\n", pSubmittedToGridnode->addr.ToString(), addr.ToString()); return; } @@ -137,16 +137,16 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (q.vin == dsq.vin) return; } - LogPrint("obfuscation", "dsq last %d last2 %d count %d\n", pmn->nLastDsq, pmn->nLastDsq + mnodeman.size() / 5, mnodeman.nDsqCount); + LogPrint("obfuscation", "dsq last %d last2 %d count %d\n", pgn->nLastDsq, pgn->nLastDsq + gnodeman.size() / 5, gnodeman.nDsqCount); //don't allow a few nodes to dominate the queuing process - if (pmn->nLastDsq != 0 && - pmn->nLastDsq + mnodeman.CountEnabled(ActiveProtocol()) / 5 > mnodeman.nDsqCount) { - LogPrint("obfuscation", "dsq -- Masternode sending too many dsq messages. %s \n", pmn->addr.ToString()); + if (pgn->nLastDsq != 0 && + pgn->nLastDsq + gnodeman.CountEnabled(ActiveProtocol()) / 5 > gnodeman.nDsqCount) { + LogPrint("obfuscation", "dsq -- Gridnode sending too many dsq messages. %s \n", pgn->addr.ToString()); return; } - mnodeman.nDsqCount++; - pmn->nLastDsq = mnodeman.nDsqCount; - pmn->allowFreeTx = true; + gnodeman.nDsqCount++; + pgn->nLastDsq = gnodeman.nDsqCount; + pgn->allowFreeTx = true; LogPrint("obfuscation", "dsq - new Obfuscation queue object - %s\n", addr.ToString()); vecObfuscationQueue.push_back(dsq); @@ -160,15 +160,15 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (pfrom->nVersion < ActiveProtocol()) { LogPrintf("dsi -- incompatible version! \n"); errorID = ERR_VERSION; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } - if (!fMasterNode) { - LogPrintf("dsi -- not a Masternode! \n"); + if (!fGridnode) { + LogPrintf("dsi -- not a Gridnode! \n"); errorID = ERR_NOT_A_MN; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } @@ -183,7 +183,7 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (!IsSessionReady()) { LogPrintf("dsi -- session not complete! \n"); errorID = ERR_SESSION; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } @@ -191,7 +191,7 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (!IsCompatibleWithEntries(out)) { LogPrintf("dsi -- not compatible with existing transactions! \n"); errorID = ERR_EXISTING_TX; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } @@ -211,13 +211,13 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (o.scriptPubKey.size() != 25) { LogPrintf("dsi - non-standard pubkey detected! %s\n", o.scriptPubKey.ToString()); errorID = ERR_NON_STANDARD_PUBKEY; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } if (!o.scriptPubKey.IsNormalPaymentScript()) { LogPrintf("dsi - invalid script! %s\n", o.scriptPubKey.ToString()); errorID = ERR_INVALID_SCRIPT; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } } @@ -241,7 +241,7 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (nValueIn > OBFUSCATION_POOL_MAX) { LogPrintf("dsi -- more than Obfuscation pool max! %s\n", tx.ToString()); errorID = ERR_MAXIMUM; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } @@ -249,13 +249,13 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (nValueIn - nValueOut > nValueIn * .01) { LogPrintf("dsi -- fees are too high! %s\n", tx.ToString()); errorID = ERR_FEES; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } } else { LogPrintf("dsi -- missing input tx! %s\n", tx.ToString()); errorID = ERR_MISSING_TX; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } @@ -264,19 +264,19 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (!AcceptableInputs(mempool, state, CTransaction(tx), false, NULL, false, true)) { LogPrintf("dsi -- transaction not valid! \n"); errorID = ERR_INVALID_TX; - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); return; } } } if (AddEntry(in, nAmount, txCollateral, out, errorID)) { - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_ACCEPTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_ACCEPTED, errorID); Check(); - RelayStatus(sessionID, GetState(), GetEntriesCount(), MASTERNODE_RESET); + RelayStatus(sessionID, GetState(), GetEntriesCount(), GRIDNODE_RESET); } else { - pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), MASTERNODE_REJECTED, errorID); + pfrom->PushMessage("dssu", sessionID, GetState(), GetEntriesCount(), GRIDNODE_REJECTED, errorID); } } else if (strCommand == "dssu") { //Obfuscation status update @@ -284,9 +284,9 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC return; } - if (!pSubmittedToMasternode) return; - if ((CNetAddr)pSubmittedToMasternode->addr != (CNetAddr)pfrom->addr) { - //LogPrintf("dssu - message doesn't match current Masternode - %s != %s\n", pSubmittedToMasternode->addr.ToString(), pfrom->addr.ToString()); + if (!pSubmittedToGridnode) return; + if ((CNetAddr)pSubmittedToGridnode->addr != (CNetAddr)pfrom->addr) { + //LogPrintf("dssu - message doesn't match current Gridnode - %s != %s\n", pSubmittedToGridnode->addr.ToString(), pfrom->addr.ToString()); return; } @@ -326,16 +326,16 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC if (success) { obfuScationPool.Check(); - RelayStatus(obfuScationPool.sessionID, obfuScationPool.GetState(), obfuScationPool.GetEntriesCount(), MASTERNODE_RESET); + RelayStatus(obfuScationPool.sessionID, obfuScationPool.GetState(), obfuScationPool.GetEntriesCount(), GRIDNODE_RESET); } } else if (strCommand == "dsf") { //Obfuscation Final tx if (pfrom->nVersion < ActiveProtocol()) { return; } - if (!pSubmittedToMasternode) return; - if ((CNetAddr)pSubmittedToMasternode->addr != (CNetAddr)pfrom->addr) { - //LogPrintf("dsc - message doesn't match current Masternode - %s != %s\n", pSubmittedToMasternode->addr.ToString(), pfrom->addr.ToString()); + if (!pSubmittedToGridnode) return; + if ((CNetAddr)pSubmittedToGridnode->addr != (CNetAddr)pfrom->addr) { + //LogPrintf("dsc - message doesn't match current Gridnode - %s != %s\n", pSubmittedToGridnode->addr.ToString(), pfrom->addr.ToString()); return; } @@ -357,9 +357,9 @@ void CObfuscationPool::ProcessMessageObfuscation(CNode* pfrom, std::string& strC return; } - if (!pSubmittedToMasternode) return; - if ((CNetAddr)pSubmittedToMasternode->addr != (CNetAddr)pfrom->addr) { - //LogPrintf("dsc - message doesn't match current Masternode - %s != %s\n", pSubmittedToMasternode->addr.ToString(), pfrom->addr.ToString()); + if (!pSubmittedToGridnode) return; + if ((CNetAddr)pSubmittedToGridnode->addr != (CNetAddr)pfrom->addr) { + //LogPrintf("dsc - message doesn't match current Gridnode - %s != %s\n", pSubmittedToGridnode->addr.ToString(), pfrom->addr.ToString()); return; } @@ -384,14 +384,14 @@ void CObfuscationPool::Reset() cachedLastSuccess = 0; lastNewBlock = 0; txCollateral = CMutableTransaction(); - vecMasternodesUsed.clear(); + vecGridnodesUsed.clear(); UnlockCoins(); SetNull(); } void CObfuscationPool::SetNull() { - // MN side + // GM side sessionUsers = 0; vecSessionCollateral.clear(); @@ -399,7 +399,7 @@ void CObfuscationPool::SetNull() entriesCount = 0; lastEntryAccepted = 0; countEntriesAccepted = 0; - sessionFoundMasternode = false; + sessionFoundGridnode = false; // Both sides state = POOL_STATUS_IDLE; @@ -452,7 +452,7 @@ std::string CObfuscationPool::GetStatus() showingObfuScationMessage += 10; std::string suffix = ""; - if (chainActive.Tip()->nHeight - cachedLastSuccess < minBlockSpacing || !masternodeSync.IsBlockchainSynced()) { + if (chainActive.Tip()->nHeight - cachedLastSuccess < minBlockSpacing || !GridnodeSync.IsBlockchainSynced()) { return strAutoDenomResult; } switch (state) { @@ -471,14 +471,14 @@ std::string CObfuscationPool::GetStatus() } else { std::string suffix = ""; if (showingObfuScationMessage % 70 <= 40) - return strprintf(_("Submitted following entries to masternode: %u / %d"), entriesCount, GetMaxPoolTransactions()); + return strprintf(_("Submitted following entries to gridnode: %u / %d"), entriesCount, GetMaxPoolTransactions()); else if (showingObfuScationMessage % 70 <= 50) suffix = "."; else if (showingObfuScationMessage % 70 <= 60) suffix = ".."; else if (showingObfuScationMessage % 70 <= 70) suffix = "..."; - return strprintf(_("Submitted to masternode, waiting for more entries ( %u / %d ) %s"), entriesCount, GetMaxPoolTransactions(), suffix); + return strprintf(_("Submitted to gridnode, waiting for more entries ( %u / %d ) %s"), entriesCount, GetMaxPoolTransactions(), suffix); } case POOL_STATUS_SIGNING: if (showingObfuScationMessage % 70 <= 40) @@ -505,7 +505,7 @@ std::string CObfuscationPool::GetStatus() suffix = ".."; else if (showingObfuScationMessage % 70 <= 70) suffix = "..."; - return strprintf(_("Submitted to masternode, waiting in queue %s"), suffix); + return strprintf(_("Submitted to gridnode, waiting in queue %s"), suffix); ; default: return strprintf(_("Unknown state: id = %u"), state); @@ -513,14 +513,14 @@ std::string CObfuscationPool::GetStatus() } // -// Check the Obfuscation progress and send client updates if a Masternode +// Check the Obfuscation progress and send client updates if a Gridnode // void CObfuscationPool::Check() { - if (fMasterNode) LogPrint("obfuscation", "CObfuscationPool::Check() - entries count %lu\n", entries.size()); + if (fGridnode) LogPrint("obfuscation", "CObfuscationPool::Check() - entries count %lu\n", entries.size()); //printf("CObfuscationPool::Check() %d - %d - %d\n", state, anonTx.CountEntries(), GetTimeMillis()-lastTimeChanged); - if (fMasterNode) { + if (fGridnode) { LogPrint("obfuscation", "CObfuscationPool::Check() - entries count %lu\n", entries.size()); // If entries is full, then move on to the next phase @@ -535,7 +535,7 @@ void CObfuscationPool::Check() LogPrint("obfuscation", "CObfuscationPool::Check() -- FINALIZE TRANSACTIONS\n"); UpdateState(POOL_STATUS_SIGNING); - if (fMasterNode) { + if (fGridnode) { CMutableTransaction txNew; // make our new transaction @@ -561,7 +561,7 @@ void CObfuscationPool::Check() } // If we have all of the signatures, try to compile the transaction - if (fMasterNode && state == POOL_STATUS_SIGNING && SignaturesComplete()) { + if (fGridnode && state == POOL_STATUS_SIGNING && SignaturesComplete()) { LogPrint("obfuscation", "CObfuscationPool::Check() -- SIGNING\n"); UpdateState(POOL_STATUS_TRANSMISSION); @@ -573,13 +573,13 @@ void CObfuscationPool::Check() LogPrint("obfuscation", "CObfuscationPool::Check() -- timeout, RESETTING\n"); UnlockCoins(); SetNull(); - if (fMasterNode) RelayStatus(sessionID, GetState(), GetEntriesCount(), MASTERNODE_RESET); + if (fGridnode) RelayStatus(sessionID, GetState(), GetEntriesCount(), GRIDNODE_RESET); } } void CObfuscationPool::CheckFinalTransaction() { - if (!fMasterNode) return; // check and relay final tx only on masternode + if (!fGridnode) return; // check and relay final tx only on gridnode CWalletTx txNew = CWalletTx(pwalletMain, finalTransaction); @@ -609,8 +609,8 @@ void CObfuscationPool::CheckFinalTransaction() CKey key2; CPubKey pubkey2; - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, strError, key2, pubkey2)) { - LogPrintf("CObfuscationPool::Check() - ERROR: Invalid Masternodeprivkey: '%s'\n", strError); + if (!obfuScationSigner.SetKey(strGridnodePrivKey, strError, key2, pubkey2)) { + LogPrintf("CObfuscationPool::Check() - ERROR: Invalid gridnodeprivkey: '%s'\n", strError); return; } @@ -627,7 +627,7 @@ void CObfuscationPool::CheckFinalTransaction() if (!mapObfuscationBroadcastTxes.count(txNew.GetHash())) { CObfuscationBroadcastTx dstx; dstx.tx = txNew; - dstx.vin = activeMasternode.vin; + dstx.vin = activeGridnode.vin; dstx.vchSig = vchSig; dstx.sigTime = sigTime; @@ -646,7 +646,7 @@ void CObfuscationPool::CheckFinalTransaction() // Reset LogPrint("obfuscation", "CObfuscationPool::Check() -- COMPLETED -- RESETTING\n"); SetNull(); - RelayStatus(sessionID, GetState(), GetEntriesCount(), MASTERNODE_RESET); + RelayStatus(sessionID, GetState(), GetEntriesCount(), GRIDNODE_RESET); } } @@ -658,13 +658,13 @@ void CObfuscationPool::CheckFinalTransaction() // a client submits a transaction then refused to sign, there must be a cost. Otherwise they // would be able to do this over and over again and bring the mixing to a hault. // -// How does this work? Messages to Masternodes come in via "dsi", these require a valid collateral -// transaction for the client to be able to enter the pool. This transaction is kept by the Masternode +// How does this work? Messages to Gridnodes come in via "dsi", these require a valid collateral +// transaction for the client to be able to enter the pool. This transaction is kept by the Gridnode // until the transaction is either complete or fails. // void CObfuscationPool::ChargeFees() { - if (!fMasterNode) return; + if (!fGridnode) return; //we don't need to charge collateral for every offence. int offences = 0; @@ -767,7 +767,7 @@ void CObfuscationPool::ChargeFees() // - Obfuscation is completely free, to pay miners we randomly pay the collateral of users. void CObfuscationPool::ChargeRandomFees() { - if (fMasterNode) { + if (fGridnode) { int i = 0; BOOST_FOREACH (const CTransaction& txCollateral, vecSessionCollateral) { @@ -803,10 +803,10 @@ void CObfuscationPool::ChargeRandomFees() // void CObfuscationPool::CheckTimeout() { - if (!fEnableZeromint && !fMasterNode) return; + if (!fEnableZeromint && !fGridnode) return; // catching hanging sessions - if (!fMasterNode) { + if (!fGridnode) { switch (state) { case POOL_STATUS_TRANSMISSION: LogPrint("obfuscation", "CObfuscationPool::CheckTimeout() -- Session complete -- Running Check()\n"); @@ -836,7 +836,7 @@ void CObfuscationPool::CheckTimeout() } int addLagTime = 0; - if (!fMasterNode) addLagTime = 10000; //if we're the client, give the server a few extra seconds before resetting. + if (!fGridnode) addLagTime = 10000; //if we're the client, give the server a few extra seconds before resetting. if (state == POOL_STATUS_ACCEPTING_ENTRIES || state == POOL_STATUS_QUEUE) { c = 0; @@ -851,8 +851,8 @@ void CObfuscationPool::CheckTimeout() UnlockCoins(); SetNull(); } - if (fMasterNode) { - RelayStatus(sessionID, GetState(), GetEntriesCount(), MASTERNODE_RESET); + if (fGridnode) { + RelayStatus(sessionID, GetState(), GetEntriesCount(), GRIDNODE_RESET); } } else ++it2; @@ -888,7 +888,7 @@ void CObfuscationPool::CheckTimeout() // void CObfuscationPool::CheckForCompleteQueue() { - if (!fEnableZeromint && !fMasterNode) return; + if (!fEnableZeromint && !fGridnode) return; /* Check to see if we're ready for submissions from clients */ // @@ -900,7 +900,7 @@ void CObfuscationPool::CheckForCompleteQueue() CObfuscationQueue dsq; dsq.nDenom = sessionDenom; - dsq.vin = activeMasternode.vin; + dsq.vin = activeGridnode.vin; dsq.time = GetTime(); dsq.ready = true; dsq.Sign(); @@ -1010,7 +1010,7 @@ bool CObfuscationPool::IsCollateralValid(const CTransaction& txCollateral) // bool CObfuscationPool::AddEntry(const std::vector& newInput, const CAmount& nAmount, const CTransaction& txCollateral, const std::vector& newOutput, int& errorID) { - if (!fMasterNode) return false; + if (!fGridnode) return false; BOOST_FOREACH (CTxIn in, newInput) { if (in.prevout.IsNull() || nAmount < 0) { @@ -1110,13 +1110,13 @@ bool CObfuscationPool::SignaturesComplete() } // -// Execute a Obfuscation denomination via a Masternode. +// Execute a Obfuscation denomination via a Gridnode. // This is only ran from clients // void CObfuscationPool::SendObfuscationDenominate(std::vector& vin, std::vector& vout, CAmount amount) { - if (fMasterNode) { - LogPrintf("CObfuscationPool::SendObfuscationDenominate() - Obfuscation from a Masternode is not supported currently.\n"); + if (fGridnode) { + LogPrintf("CObfuscationPool::SendObfuscationDenominate() - Obfuscation from a Gridnode is not supported currently.\n"); return; } @@ -1136,9 +1136,9 @@ void CObfuscationPool::SendObfuscationDenominate(std::vector& vin, std::v // LogPrintf(" vout - %s\n", o.ToString()); - // we should already be connected to a Masternode - if (!sessionFoundMasternode) { - LogPrintf("CObfuscationPool::SendObfuscationDenominate() - No Masternode has been selected yet.\n"); + // we should already be connected to a Gridnode + if (!sessionFoundGridnode) { + LogPrintf("CObfuscationPool::SendObfuscationDenominate() - No Gridnode has been selected yet.\n"); UnlockCoins(); SetNull(); return; @@ -1203,20 +1203,20 @@ void CObfuscationPool::SendObfuscationDenominate(std::vector& vin, std::v Check(); } -// Incoming message from Masternode updating the progress of Obfuscation +// Incoming message from Gridnode updating the progress of Obfuscation // newAccepted: -1 mean's it'n not a "transaction accepted/not accepted" message, just a standard update // 0 means transaction was not accepted // 1 means transaction was accepted bool CObfuscationPool::StatusUpdate(int newState, int newEntriesCount, int newAccepted, int& errorID, int newSessionID) { - if (fMasterNode) return false; + if (fGridnode) return false; if (state == POOL_STATUS_ERROR || state == POOL_STATUS_SUCCESS) return false; UpdateState(newState); entriesCount = newEntriesCount; - if (errorID != MSG_NOERR) strAutoDenomResult = _("Masternode:") + " " + GetMessageByID(errorID); + if (errorID != MSG_NOERR) strAutoDenomResult = _("Gridnode:") + " " + GetMessageByID(errorID); if (newAccepted != -1) { lastEntryAccepted = newAccepted; @@ -1229,36 +1229,36 @@ bool CObfuscationPool::StatusUpdate(int newState, int newEntriesCount, int newAc if (newAccepted == 1 && newSessionID != 0) { sessionID = newSessionID; LogPrintf("CObfuscationPool::StatusUpdate - set sessionID to %d\n", sessionID); - sessionFoundMasternode = true; + sessionFoundGridnode = true; } } if (newState == POOL_STATUS_ACCEPTING_ENTRIES) { if (newAccepted == 1) { LogPrintf("CObfuscationPool::StatusUpdate - entry accepted! \n"); - sessionFoundMasternode = true; - //wait for other users. Masternode will report when ready + sessionFoundGridnode = true; + //wait for other users. Gridnode will report when ready UpdateState(POOL_STATUS_QUEUE); - } else if (newAccepted == 0 && sessionID == 0 && !sessionFoundMasternode) { - LogPrintf("CObfuscationPool::StatusUpdate - entry not accepted by Masternode \n"); + } else if (newAccepted == 0 && sessionID == 0 && !sessionFoundGridnode) { + LogPrintf("CObfuscationPool::StatusUpdate - entry not accepted by Gridnode \n"); UnlockCoins(); UpdateState(POOL_STATUS_ACCEPTING_ENTRIES); - DoAutomaticDenominating(); //try another Masternode + DoAutomaticDenominating(); //try another Gridnode } - if (sessionFoundMasternode) return true; + if (sessionFoundGridnode) return true; } return true; } // -// After we receive the finalized transaction from the Masternode, we must +// After we receive the finalized transaction from the Gridnode, we must // check it to make sure it's what we want, then sign it if we agree. // If we refuse to sign, it's possible we'll be charged collateral // bool CObfuscationPool::SignFinalTransaction(CTransaction& finalTransactionNew, CNode* node) { - if (fMasterNode) return false; + if (fGridnode) return false; finalTransaction = finalTransactionNew; LogPrintf("CObfuscationPool::SignFinalTransaction %s", finalTransaction.ToString()); @@ -1325,7 +1325,7 @@ bool CObfuscationPool::SignFinalTransaction(CTransaction& finalTransactionNew, C LogPrint("obfuscation", "CObfuscationPool::Sign - txNew:\n%s", finalTransaction.ToString()); } - // push all of our signatures to the Masternode + // push all of our signatures to the Gridnode if (sigs.size() > 0 && node != NULL) node->PushMessage("dss", sigs); @@ -1347,7 +1347,7 @@ void CObfuscationPool::NewBlock() // Obfuscation transaction was completed (failed or successful) void CObfuscationPool::CompletedTransaction(bool error, int errorID) { - if (fMasterNode) return; + if (fGridnode) return; if (error) { LogPrintf("CompletedTransaction -- error \n"); @@ -1384,7 +1384,7 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) return false; // Disabled until Obfuscation is completely removed if (!fEnableZeromint) return false; - if (fMasterNode) return false; + if (fGridnode) return false; if (state == POOL_STATUS_ERROR || state == POOL_STATUS_SUCCESS) return false; if (GetEntriesCount() > 0) { strAutoDenomResult = _("Mixing in progress..."); @@ -1397,7 +1397,7 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) return false; } - if (!masternodeSync.IsBlockchainSynced()) { + if (!GridnodeSync.IsBlockchainSynced()) { strAutoDenomResult = _("Can't mix while sync in progress."); return false; } @@ -1413,9 +1413,9 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) return false; } - if (mnodeman.size() == 0) { - LogPrint("obfuscation", "CObfuscationPool::DoAutomaticDenominating - No Masternodes detected\n"); - strAutoDenomResult = _("No Masternodes detected."); + if (gnodeman.size() == 0) { + LogPrint("obfuscation", "CObfuscationPool::DoAutomaticDenominating - No Gridnodes detected\n"); + strAutoDenomResult = _("No Gridnodes detected."); return false; } @@ -1487,8 +1487,8 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) std::vector vOut; - // initial phase, find a Masternode - if (!sessionFoundMasternode) { + // initial phase, find a Gridnode + if (!sessionFoundGridnode) { // Clean if there is anything left from previous session UnlockCoins(); SetNull(); @@ -1520,12 +1520,12 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) } } - //if we've used 90% of the Masternode list then drop all the oldest first - int nThreshold = (int)(mnodeman.CountEnabled(ActiveProtocol()) * 0.9); - LogPrint("obfuscation", "Checking vecMasternodesUsed size %d threshold %d\n", (int)vecMasternodesUsed.size(), nThreshold); - while ((int)vecMasternodesUsed.size() > nThreshold) { - vecMasternodesUsed.erase(vecMasternodesUsed.begin()); - LogPrint("obfuscation", " vecMasternodesUsed size %d threshold %d\n", (int)vecMasternodesUsed.size(), nThreshold); + //if we've used 90% of the Gridnode list then drop all the oldest first + int nThreshold = (int)(gnodeman.CountEnabled(ActiveProtocol()) * 0.9); + LogPrint("obfuscation", "Checking vecGridnodesUsed size %d threshold %d\n", (int)vecGridnodesUsed.size(), nThreshold); + while ((int)vecGridnodesUsed.size() > nThreshold) { + vecGridnodesUsed.erase(vecGridnodesUsed.begin()); + LogPrint("obfuscation", " vecGridnodesUsed size %d threshold %d\n", (int)vecGridnodesUsed.size(), nThreshold); } //don't use the queues all of the time for mixing @@ -1546,8 +1546,8 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) if ((dsq.nDenom & (1 << 4))) continue; bool fUsed = false; - //don't reuse Masternodes - BOOST_FOREACH (CTxIn usedVin, vecMasternodesUsed) { + //don't reuse Gridnodes + BOOST_FOREACH (CTxIn usedVin, vecGridnodesUsed) { if (dsq.vin == usedVin) { fUsed = true; break; @@ -1563,20 +1563,20 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) continue; } - CMasternode* pmn = mnodeman.Find(dsq.vin); - if (pmn == NULL) { - LogPrintf("DoAutomaticDenominating --- dsq vin %s is not in masternode list!", dsq.vin.ToString()); + CGridnode* pgn = gnodeman.Find(dsq.vin); + if (pgn == NULL) { + LogPrintf("DoAutomaticDenominating --- dsq vin %s is not in gridnode list!", dsq.vin.ToString()); continue; } - LogPrintf("DoAutomaticDenominating --- attempt to connect to masternode from queue %s\n", pmn->addr.ToString()); + LogPrintf("DoAutomaticDenominating --- attempt to connect to gridnode from queue %s\n", pgn->addr.ToString()); lastTimeChanged = GetTimeMillis(); - // connect to Masternode and submit the queue request + // connect to Gridnode and submit the queue request CNode* pnode = ConnectNode((CAddress)addr, NULL, true); if (pnode != NULL) { - pSubmittedToMasternode = pmn; - vecMasternodesUsed.push_back(dsq.vin); + pSubmittedToGridnode = pgn; + vecGridnodesUsed.push_back(dsq.vin); sessionDenom = dsq.nDenom; pnode->PushMessage("dsa", sessionDenom, txCollateral); @@ -1586,7 +1586,7 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) return true; } else { LogPrintf("DoAutomaticDenominating --- error connecting \n"); - strAutoDenomResult = _("Error connecting to Masternode."); + strAutoDenomResult = _("Error connecting to Gridnode."); dsq.time = 0; //remove node continue; } @@ -1600,25 +1600,25 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) // otherwise, try one randomly while (i < 10) { - CMasternode* pmn = mnodeman.FindRandomNotInVec(vecMasternodesUsed, ActiveProtocol()); - if (pmn == NULL) { - LogPrintf("DoAutomaticDenominating --- Can't find random masternode!\n"); - strAutoDenomResult = _("Can't find random Masternode."); + CGridnode* pgn = gnodeman.FindRandomNotInVec(vecGridnodesUsed, ActiveProtocol()); + if (pgn == NULL) { + LogPrintf("DoAutomaticDenominating --- Can't find random gridnode!\n"); + strAutoDenomResult = _("Can't find random Gridnode."); return false; } - if (pmn->nLastDsq != 0 && - pmn->nLastDsq + mnodeman.CountEnabled(ActiveProtocol()) / 5 > mnodeman.nDsqCount) { + if (pgn->nLastDsq != 0 && + pgn->nLastDsq + gnodeman.CountEnabled(ActiveProtocol()) / 5 > gnodeman.nDsqCount) { i++; continue; } lastTimeChanged = GetTimeMillis(); - LogPrintf("DoAutomaticDenominating --- attempt %d connection to Masternode %s\n", i, pmn->addr.ToString()); - CNode* pnode = ConnectNode((CAddress)pmn->addr, NULL, true); + LogPrintf("DoAutomaticDenominating --- attempt %d connection to Gridnode %s\n", i, pgn->addr.ToString()); + CNode* pnode = ConnectNode((CAddress)pgn->addr, NULL, true); if (pnode != NULL) { - pSubmittedToMasternode = pmn; - vecMasternodesUsed.push_back(pmn->vin); + pSubmittedToGridnode = pgn; + vecGridnodesUsed.push_back(pgn->vin); std::vector vecAmounts; pwalletMain->ConvertList(vCoins, vecAmounts); @@ -1631,13 +1631,13 @@ bool CObfuscationPool::DoAutomaticDenominating(bool fDryRun) strAutoDenomResult = _("Mixing in progress..."); return true; } else { - vecMasternodesUsed.push_back(pmn->vin); // postpone MN we wasn't able to connect to + vecGridnodesUsed.push_back(pgn->vin); // postpone GM we wasn't able to connect to i++; continue; } } - strAutoDenomResult = _("No compatible Masternode found."); + strAutoDenomResult = _("No compatible Gridnode found."); return false; } @@ -1727,12 +1727,12 @@ bool CObfuscationPool::MakeCollateralAmounts() vecSend.push_back(make_pair(scriptCollateral, OBFUSCATION_COLLATERAL * 4)); - // try to use non-denominated and not mn-like funds + // try to use non-denominated and not gn-like funds bool success = pwalletMain->CreateTransaction(vecSend, wtx, reservekeyChange, nFeeRet, strFail, &coinControl, ONLY_NONDENOMINATED_NOT10000IFMN); if (!success) { // if we failed (most likeky not enough funds), try to use all coins instead - - // MN-like funds should not be touched in any case and we can't mix denominated without collaterals anyway + // GM-like funds should not be touched in any case and we can't mix denominated without collaterals anyway CCoinControl* coinControlNull = NULL; LogPrintf("MakeCollateralAmounts: ONLY_NONDENOMINATED_NOT10000IFMN Error - %s\n", strFail); success = pwalletMain->CreateTransaction(vecSend, wtx, reservekeyChange, @@ -1881,7 +1881,7 @@ bool CObfuscationPool::IsCompatibleWithSession(int64_t nDenom, CTransaction txCo //broadcast that I'm accepting entries, only if it's the first entry through CObfuscationQueue dsq; dsq.nDenom = nDenom; - dsq.vin = activeMasternode.vin; + dsq.vin = activeGridnode.vin; dsq.time = GetTime(); dsq.Sign(); dsq.Relay(); @@ -2076,15 +2076,15 @@ std::string CObfuscationPool::GetMessageByID(int messageID) case ERR_MAXIMUM: return _("Value more than Obfuscation pool maximum allows."); case ERR_MN_LIST: - return _("Not in the Masternode list."); + return _("Not in the Gridnode list."); case ERR_MODE: return _("Incompatible mode."); case ERR_NON_STANDARD_PUBKEY: return _("Non-standard public key detected."); case ERR_NOT_A_MN: - return _("This is not a Masternode."); + return _("This is not a Gridnode."); case ERR_QUEUE_FULL: - return _("Masternode queue is full."); + return _("Gridnode queue is full."); case ERR_RECENT: return _("Last Obfuscation was too recent."); case ERR_SESSION: @@ -2112,7 +2112,7 @@ bool CObfuScationSigner::IsVinAssociatedWithPubkey(CTxIn& vin, CPubKey& pubkey) uint256 hash; if (GetTransaction(vin.prevout.hash, txVin, hash, true)) { BOOST_FOREACH (CTxOut out, txVin.vout) { - if (out.nValue == Params().MasternodeCollateral()) { + if (out.nValue == Params().GridnodeCollateral()) { if (out.scriptPubKey == payee2) return true; } } @@ -2183,7 +2183,7 @@ bool CObfuScationSigner::VerifyMessage(CPubKey pubkey, vector& vc bool CObfuscationQueue::Sign() { - if (!fMasterNode) return false; + if (!fGridnode) return false; std::string strMessage = vin.ToString() + boost::lexical_cast(nDenom) + boost::lexical_cast(time) + boost::lexical_cast(ready); @@ -2191,8 +2191,8 @@ bool CObfuscationQueue::Sign() CPubKey pubkey2; std::string errorMessage = ""; - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, errorMessage, key2, pubkey2)) { - LogPrintf("CObfuscationQueue():Relay - ERROR: Invalid Masternodeprivkey: '%s'\n", errorMessage); + if (!obfuScationSigner.SetKey(strGridnodePrivKey, errorMessage, key2, pubkey2)) { + LogPrintf("CObfuscationQueue():Relay - ERROR: Invalid gridnodeprivkey: '%s'\n", errorMessage); return false; } @@ -2222,14 +2222,14 @@ bool CObfuscationQueue::Relay() bool CObfuscationQueue::CheckSignature() { - CMasternode* pmn = mnodeman.Find(vin); + CGridnode* pgn = gnodeman.Find(vin); - if (pmn != NULL) { + if (pgn != NULL) { std::string strMessage = vin.ToString() + boost::lexical_cast(nDenom) + boost::lexical_cast(time) + boost::lexical_cast(ready); std::string errorMessage = ""; - if (!obfuScationSigner.VerifyMessage(pmn->pubKeyMasternode, vchSig, strMessage, errorMessage)) { - return error("CObfuscationQueue::CheckSignature() - Got bad Masternode address signature %s \n", vin.ToString().c_str()); + if (!obfuScationSigner.VerifyMessage(pgn->pubKeyGridnode, vchSig, strMessage, errorMessage)) { + return error("CObfuscationQueue::CheckSignature() - Got bad Gridnode address signature %s \n", vin.ToString().c_str()); } return true; @@ -2249,7 +2249,7 @@ void CObfuscationPool::RelayFinalTransaction(const int sessionID, const CTransac void CObfuscationPool::RelayIn(const std::vector& vin, const int64_t& nAmount, const CTransaction& txCollateral, const std::vector& vout) { - if (!pSubmittedToMasternode) return; + if (!pSubmittedToGridnode) return; std::vector vin2; std::vector vout2; @@ -2260,7 +2260,7 @@ void CObfuscationPool::RelayIn(const std::vector& vin, const int64_t& n BOOST_FOREACH (CTxDSOut out, vout) vout2.push_back(out); - CNode* pnode = FindNode(pSubmittedToMasternode->addr); + CNode* pnode = FindNode(pSubmittedToGridnode->addr); if (pnode != NULL) { LogPrintf("RelayIn - found master, relaying message - %s \n", pnode->addr.ToString()); pnode->PushMessage("dsi", vin2, nAmount, txCollateral, vout2); @@ -2284,7 +2284,7 @@ void CObfuscationPool::RelayCompletedTransaction(const int sessionID, const bool //TODO: Rename/move to core void ThreadCheckObfuScationPool() { - if (fLiteMode) return; //disable all Obfuscation/Masternode related functionality + if (fLiteMode) return; //disable all Obfuscation/Gridnode related functionality // Make this thread recognisable as the wallet flushing thread RenameThread("unigrid-obfuscation"); @@ -2296,23 +2296,23 @@ void ThreadCheckObfuScationPool() //LogPrintf("ThreadCheckObfuScationPool::check timeout\n"); // try to sync from all available nodes, one step at a time - masternodeSync.Process(); + GridnodeSync.Process(); - if (masternodeSync.IsBlockchainSynced()) { + if (GridnodeSync.IsBlockchainSynced()) { c++; // check if we should activate or ping every few minutes, // start right after sync is considered to be done - if (c % MASTERNODE_PING_SECONDS == 1) activeMasternode.ManageStatus(); + if (c % GRIDNODE_PING_SECONDS == 1) activeGridnode.ManageStatus(); if (c % 60 == 0) { - mnodeman.CheckAndRemove(); - mnodeman.ProcessMasternodeConnections(); - masternodePayments.CleanPaymentList(); + gnodeman.CheckAndRemove(); + gnodeman.ProcessGridnodeConnections(); + GridnodePayments.CleanPaymentList(); CleanTransactionLocksList(); } - //if(c % MASTERNODES_DUMP_SECONDS == 0) DumpMasternodes(); + //if(c % GRIDNODES_DUMP_SECONDS == 0) DumpGridnodes(); obfuScationPool.CheckTimeout(); obfuScationPool.CheckForCompleteQueue(); diff --git a/daemon/obfuscation.h b/daemon/obfuscation.h index e46df95f52f9..70dc98835aae 100644 --- a/daemon/obfuscation.h +++ b/daemon/obfuscation.h @@ -8,20 +8,20 @@ #define OBFUSCATION_H #include "main.h" -#include "masternode-payments.h" -#include "masternode-sync.h" -#include "masternodeman.h" +#include "gridnode-payments.h" +#include "gridnode-sync.h" +#include "gridnodeman.h" #include "obfuscation-relay.h" #include "sync.h" class CTxIn; class CObfuscationPool; class CObfuScationSigner; -class CMasterNodeVote; +class CGridnodeVote; class CBitcoinAddress; class CObfuscationQueue; class CObfuscationBroadcastTx; -class CActiveMasternode; +class CActiveGridnode; // pool states for mixing #define POOL_STATUS_UNKNOWN 0 // waiting for update @@ -35,9 +35,9 @@ class CActiveMasternode; #define POOL_STATUS_SUCCESS 8 // success // status update message constants -#define MASTERNODE_ACCEPTED 1 -#define MASTERNODE_REJECTED 0 -#define MASTERNODE_RESET -1 +#define GRIDNODE_ACCEPTED 1 +#define GRIDNODE_REJECTED 0 +#define GRIDNODE_RESET -1 #define OBFUSCATION_QUEUE_TIMEOUT 30 #define OBFUSCATION_SIGNING_TIMEOUT 15 @@ -53,9 +53,9 @@ static const CAmount OBFUSCATION_POOL_MAX = (99999.99 * COIN); extern CObfuscationPool obfuScationPool; extern CObfuScationSigner obfuScationSigner; extern std::vector vecObfuscationQueue; -extern std::string strMasterNodePrivKey; +extern std::string strGridnodePrivKey; extern map mapObfuscationBroadcastTxes; -extern CActiveMasternode activeMasternode; +extern CActiveGridnode activeGridnode; /** Holds an Obfuscation input */ @@ -192,9 +192,9 @@ class CObfuscationQueue bool GetAddress(CService& addr) { - CMasternode* pmn = mnodeman.Find(vin); - if (pmn != NULL) { - addr = pmn->addr; + CGridnode* pgn = gnodeman.Find(vin); + if (pgn != NULL) { + addr = pgn->addr; return true; } return false; @@ -203,9 +203,9 @@ class CObfuscationQueue /// Get the protocol version bool GetProtocolVersion(int& protocolVersion) { - CMasternode* pmn = mnodeman.Find(vin); - if (pmn != NULL) { - protocolVersion = pmn->protocolVersion; + CGridnode* pgn = gnodeman.Find(vin); + if (pgn != NULL) { + protocolVersion = pgn->protocolVersion; return true; } return false; @@ -213,8 +213,8 @@ class CObfuscationQueue /** Sign this Obfuscation transaction * \return true if all conditions are met: - * 1) we have an active Masternode, - * 2) we have a valid Masternode private key, + * 1) we have an active Gridnode, + * 2) we have a valid Gridnode private key, * 3) we signed the message successfully, and * 4) we verified the message successfully */ @@ -228,7 +228,7 @@ class CObfuscationQueue return (GetTime() - time) > OBFUSCATION_QUEUE_TIMEOUT; // 120 seconds } - /// Check if we have a valid Masternode address + /// Check if we have a valid Gridnode address bool CheckSignature(); }; @@ -248,7 +248,7 @@ class CObfuscationBroadcastTx class CObfuScationSigner { public: - /// Is the inputs associated with this public key? (and there is 10000 UNIGRID - checking if valid masternode) + /// Is the inputs associated with this public key? (and there is 10000 UNIGRID - checking if valid gridnode) bool IsVinAssociatedWithPubkey(CTxIn& vin, CPubKey& pubkey); /// Set the private/public key values, returns true if successful bool GetKeysFromSecret(std::string strSecret, CKey& keyRet, CPubKey& pubkeyRet); @@ -267,7 +267,7 @@ class CObfuscationPool private: mutable CCriticalSection cs_obfuscation; - std::vector entries; // Masternode/clients entries + std::vector entries; // Gridnode/clients entries CMutableTransaction finalTransaction; // the finalized transaction ready for signing int64_t lastTimeChanged; // last time the 'state' changed, in UTC milliseconds @@ -285,7 +285,7 @@ class CObfuscationPool int sessionID; int sessionUsers; //N Users have said they'll join - bool sessionFoundMasternode; //If we've found a compatible Masternode + bool sessionFoundGridnode; //If we've found a compatible Gridnode std::vector vecSessionCollateral; int cachedLastSuccess; @@ -327,7 +327,7 @@ class CObfuscationPool // where collateral should be made out to CScript collateralPubKey; - CMasternode* pSubmittedToMasternode; + CGridnode* pSubmittedToGridnode; int sessionDenom; //Users must submit an denom matching this int cachedNumBlocks; //used for the overview screen @@ -411,16 +411,16 @@ class CObfuscationPool // Set the 'state' value, with some logging and capturing when the state changed void UpdateState(unsigned int newState) { - if (fMasterNode && (newState == POOL_STATUS_ERROR || newState == POOL_STATUS_SUCCESS)) { - // LogPrint("obfuscation", "CObfuscationPool::UpdateState() - Can't set state to ERROR or SUCCESS as a Masternode. \n"); + if (fGridnode && (newState == POOL_STATUS_ERROR || newState == POOL_STATUS_SUCCESS)) { + // LogPrint("obfuscation", "CObfuscationPool::UpdateState() - Can't set state to ERROR or SUCCESS as a Gridnode. \n"); return; } // LogPrintf("CObfuscationPool::UpdateState() == %d | %d \n", state, newState); if (state != newState) { lastTimeChanged = GetTimeMillis(); - if (fMasterNode) { - RelayStatus(obfuScationPool.sessionID, obfuScationPool.GetState(), obfuScationPool.GetEntriesCount(), MASTERNODE_RESET); + if (fGridnode) { + RelayStatus(obfuScationPool.sessionID, obfuScationPool.GetState(), obfuScationPool.GetEntriesCount(), GRIDNODE_RESET); } } state = newState; @@ -467,9 +467,9 @@ class CObfuscationPool bool AddScriptSig(const CTxIn& newVin); /// Check that all inputs are signed. (Are all inputs signed?) bool SignaturesComplete(); - /// As a client, send a transaction to a Masternode to start the denomination process + /// As a client, send a transaction to a Gridnode to start the denomination process void SendObfuscationDenominate(std::vector& vin, std::vector& vout, CAmount amount); - /// Get Masternode updates about the progress of Obfuscation + /// Get Gridnode updates about the progress of Obfuscation bool StatusUpdate(int newState, int newEntriesCount, int newAccepted, int& errorID, int newSessionID = 0); /// As a client, check and sign the final transaction diff --git a/daemon/pow.cpp b/daemon/pow.cpp index f131ccc7870f..c71f2c212d81 100644 --- a/daemon/pow.cpp +++ b/daemon/pow.cpp @@ -39,6 +39,10 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead uint256 bnTargetLimit = (~uint256(0) >> 24); int64_t nTargetSpacing = 60; int64_t nTargetTimespan = 60 * 40; + if(Params().NetworkID() == CBaseChainParams::TESTNET) { + nTargetSpacing = 6; + nTargetTimespan = 6 * 4; + } int64_t nActualSpacing = 0; if (pindexLast->nHeight != 0) diff --git a/daemon/primitives/transaction.cpp b/daemon/primitives/transaction.cpp index 906122a279e1..97212331fcf2 100644 --- a/daemon/primitives/transaction.cpp +++ b/daemon/primitives/transaction.cpp @@ -73,7 +73,7 @@ CTxOut::CTxOut(const CAmount& nValueIn, CScript scriptPubKeyIn) nRounds = -10; } -bool COutPoint::IsMasternodeReward(const CTransaction* tx) const +bool COutPoint::IsGridnodeReward(const CTransaction* tx) const { if(!tx->IsCoinStake()) return false; diff --git a/daemon/primitives/transaction.h b/daemon/primitives/transaction.h index 488686c7eea7..60738efb4588 100644 --- a/daemon/primitives/transaction.h +++ b/daemon/primitives/transaction.h @@ -36,7 +36,7 @@ class COutPoint void SetNull() { hash.SetNull(); n = (uint32_t) -1; } bool IsNull() const { return (hash.IsNull() && n == (uint32_t) -1); } - bool IsMasternodeReward(const CTransaction* tx) const; + bool IsGridnodeReward(const CTransaction* tx) const; friend bool operator<(const COutPoint& a, const COutPoint& b) { diff --git a/daemon/protocol.cpp b/daemon/protocol.cpp index e27b896a1a0c..488c3452f1c5 100644 --- a/daemon/protocol.cpp +++ b/daemon/protocol.cpp @@ -25,15 +25,15 @@ static const char* ppszTypeName[] = "tx lock request", "tx lock vote", "spork", - "mn winner", - "mn scan error", - "mn budget vote", - "mn budget proposal", - "mn budget finalized", - "mn budget finalized vote", - "mn quorum", - "mn announce", - "mn ping", + "gn winner", + "gn scan error", + "gn budget vote", + "gn budget proposal", + "gn budget finalized", + "gn budget finalized vote", + "gn quorum", + "gn announce", + "gn ping", "dstx"}; CMessageHeader::CMessageHeader() @@ -139,7 +139,7 @@ bool CInv::IsKnownType() const return (type >= 1 && type < (int)ARRAYLEN(ppszTypeName)); } -bool CInv::IsMasterNodeType() const{ +bool CInv::IsGridnodeType() const{ return (type >= 6); } diff --git a/daemon/protocol.h b/daemon/protocol.h index d513fc31d3ee..e7f457fb697c 100644 --- a/daemon/protocol.h +++ b/daemon/protocol.h @@ -75,10 +75,10 @@ enum { // but no longer do as of protocol version 70011 (= NO_BLOOM_VERSION) NODE_BLOOM = (1 << 2), - // NODE_BLOOM_WITHOUT_MN means the node has the same features as NODE_BLOOM with the only difference - // that the node doens't want to receive master nodes messages. (the 1<<3 was not picked as constant because on bitcoin 0.14 is witness and we want that update here ) + // NODE_BLOOM_WITHOUT_GN means the node has the same features as NODE_BLOOM with the only difference + // that the node doens't want to receive gridnodes messages. (the 1<<3 was not picked as constant because on bitcoin 0.14 is witness and we want that update here ) - NODE_BLOOM_WITHOUT_MN = (1 << 4), + NODE_BLOOM_WITHOUT_GN = (1 << 4), // Bits 24-31 are reserved for temporary experiments. Just pick a bit that // isn't getting used, or one not being used much, and notify the @@ -145,7 +145,7 @@ class CInv friend bool operator<(const CInv& a, const CInv& b); bool IsKnownType() const; - bool IsMasterNodeType() const; + bool IsGridnodeType() const; const char* GetCommand() const; std::string ToString() const; @@ -164,15 +164,15 @@ enum { MSG_TXLOCK_REQUEST, MSG_TXLOCK_VOTE, MSG_SPORK, - MSG_MASTERNODE_WINNER, - MSG_MASTERNODE_SCANNING_ERROR, + MSG_GRIDNODE_WINNER, + MSG_GRIDNODE_SCANNING_ERROR, MSG_BUDGET_VOTE, MSG_BUDGET_PROPOSAL, MSG_BUDGET_FINALIZED, MSG_BUDGET_FINALIZED_VOTE, - MSG_MASTERNODE_QUORUM, - MSG_MASTERNODE_ANNOUNCE, - MSG_MASTERNODE_PING, + MSG_GRIDNODE_QUORUM, + MSG_GRIDNODE_ANNOUNCE, + MSG_GRIDNODE_PING, MSG_DSTX }; diff --git a/daemon/restclient.cpp b/daemon/restclient.cpp new file mode 100644 index 000000000000..d32311420f0c --- /dev/null +++ b/daemon/restclient.cpp @@ -0,0 +1,290 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2014 The Bitcoin developers +// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2015-2019 The PIVX developers +// Copyright (c) 2018-2022 The UNIGRID organization +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "chain.h" +#include "init.h" +#include "mint.h" +#include "restclient.h" +#include "util.h" + +restclient::restclient(boost::asio::io_context& io_context) : client_socket(io_context) {} + + +bool restclient::getdatafromrestserver(boost::asio::io_context& io_context, int port) +{ + time_t startTime = time(0); + // return true; + + while (true) { + char* host = "127.0.0.1"; + char* target = "/gridspork/mint-supply"; + int version = 11; + + // The io_context is required for all I/O + boost::asio::io_context ioc; + + // The SSL context is required, and holds certificates + boost::asio::ssl::context ctx(boost::asio::ssl::context::tlsv13_client); + + // This holds the root certificate used for verification + // load_root_certificates(ctx); + + // Verify the remote server's certificate + // ctx.set_verify_mode(ssl::verify_peer); + + // These objects perform our I/O + boost::asio::ip::tcp::resolver resolver(ioc); + boost::beast::ssl_stream stream(ioc, ctx); + try { + stream.next_layer().expires_after(std::chrono::seconds(5)); + // Set SNI Hostname (many hosts need this to handshake successfully) + if (!SSL_set_tlsext_host_name(stream.native_handle(), host)) { + boost::beast::error_code ec{static_cast(::ERR_get_error()), boost::asio::error::get_ssl_category()}; + throw boost::beast::system_error{ec}; + } + + // Look up the domain name + std::stringstream ss_port; + ss_port << port; + auto const results = resolver.resolve(host, ss_port.str().c_str()); + + // Make the connection on the IP address we get from a lookup + boost::beast::get_lowest_layer(stream).connect(results); + + // Perform the SSL handshake + stream.handshake(boost::asio::ssl::stream_base::client); + + // Set up an HTTP GET request message + boost::beast::http::request req{boost::beast::http::verb::get, target, version}; + req.set(boost::beast::http::field::host, host); + req.set(boost::beast::http::field::user_agent, BOOST_BEAST_VERSION_STRING); + + // Send the HTTP request to the remote host + boost::beast::http::write(stream, req); + + // This buffer is used for reading and must be persisted + boost::beast::flat_buffer buffer; + + // Declare a container to hold the response + boost::beast::http::response res; + + // Receive the HTTP response + boost::beast::http::read(stream, buffer, res); + + // Write the message to standard out + std::string data = boost::beast::buffers_to_string(res.body().data()); + // Gracefully close the stream + boost::beast::error_code ec; + stream.next_layer().cancel(); + stream.next_layer().close(); + // stream.shutdown(ec); + + // If we get here then the connection is closed gracefully + return parseHedgehogData(data); + } catch (std::exception const& e) { + LogPrintf("Where is my Hedgehog %s. Shuting down unigridd\n", e.what()); + time_t now = time(0); + stream.next_layer().close(); + stream.next_layer().cancel(); + if (difftime(now, startTime) >= 60) { + StartShutdown(); + return false; + } + std::this_thread::sleep_for(1000ms); + } + } +} + +bool restclient::hasMintingSpork(boost::asio::io_context& io_context, int port) +{ + char* host = "127.0.0.1"; + char* target = "/gridspork/mint-storage"; + int version = 11; + + boost::asio::io_context ioc; + boost::asio::ssl::context ctx(boost::asio::ssl::context::tlsv13_client); + boost::beast::ssl_stream stream(ioc, ctx); + + try { + stream.next_layer().expires_after(std::chrono::seconds(5)); + if (!SSL_set_tlsext_host_name(stream.native_handle(), host)) { + boost::beast::error_code ec{static_cast(::ERR_get_error()), boost::asio::error::get_ssl_category()}; + throw boost::beast::system_error{ec}; + } + + boost::asio::ip::tcp::resolver resolver(ioc); + std::stringstream ss_port; + ss_port << port; + auto const results = resolver.resolve(host, ss_port.str().c_str()); + boost::beast::get_lowest_layer(stream).connect(results); + stream.handshake(boost::asio::ssl::stream_base::client); + + boost::beast::http::request req{boost::beast::http::verb::get, target, version}; + req.set(boost::beast::http::field::host, host); + req.set(boost::beast::http::field::user_agent, BOOST_BEAST_VERSION_STRING); + + boost::beast::http::write(stream, req); + + boost::beast::flat_buffer buffer; + boost::beast::http::response res; + boost::beast::http::read(stream, buffer, res); + size_t body_size = boost::beast::buffers_to_string(res.body().data()).size(); + //LogPrintf("hasMintingSpork response size: %u \n", body_size); + stream.next_layer().cancel(); + stream.next_layer().close(); + + return body_size > 2; + } catch (std::exception const& e) { + LogPrintf("Error checking hedgehog for sporks %s \n", e.what()); + return false; + } +} + +bool restclient::checkForSporks() +{ + int hport; + if (mapArgs.count("-hport")) { + hport = std::stoi(mapArgs["-hport"]); + } else { + hport = 52884; + } + boost::asio::io_context io_context; + try { + return hasMintingSpork(io_context, hport); + } catch (std::exception const& e) { + LogPrintf("Error checking hedgehog for sporks %s \n", e.what()); + return false; + } +} + +std::vector restclient::getMints() +{ + return mints; +} + +bool restclient::isTimeToMint(int currIndex) +{ + bool timeToMint = false; + int hport; + if (mapArgs.count("-hport")) { + hport = std::stoi(mapArgs["-hport"]); + } else { + hport = 52884; + } + boost::asio::io_context io_context; + getdatafromrestserver(io_context, hport); + std::vector mints = getMints(); + + for (mint mint : mints) { + if (currIndex == mint.getHeigth()) { + timeToMint = true; + } + } + + if (timeToMint) + LogPrintf("IsTimeToMint(): is it time to mint? %s \n", timeToMint); + + return timeToMint; +} + +mint restclient::getMint(int currIndex) +{ + int hport; + if (mapArgs.count("-hport")) { + hport = std::stoi(mapArgs["-hport"]); + } else { + hport = 52884; + } + boost::asio::io_context io_context; + getdatafromrestserver(io_context, hport); + std::vector mints = getMints(); + + for (mint mint : mints) { + if (currIndex == mint.getHeigth()) { + return mint; + } + } + mint mint; + return mint; +} + +bool restclient::parseHedgehogData(std::string json) +{ + bool ok = false; + + try { + UniValue uv; + ok = uv.read(json); + if (!ok) { + return ok; + } + const UniValue obj = uv.get_obj(); + + std::vector key = obj.getKeys(); + std::vector value = obj.getValues(); + for (int i = 0; i < key.size(); i++) { + if (key.at(i) == "data") { + const UniValue uvd = value.at(i).get_obj(); + std::vector dataKey = uvd.getKeys(); + std::vector dataValue = uvd.getValues(); + if (dataKey.at(0) == "mints") { + auto arrObj = dataValue.at(0).get_obj(); + + std::vector arrKey = arrObj.getKeys(); + std::vector arrValue = arrObj.getValues(); + for (int j = 0; j < arrKey.size(); j++) { + std::string s = arrKey.at(j); + std::string delimiter = "/"; + + size_t pos = 0; + std::string token; + while ((pos = s.find(delimiter)) != std::string::npos) { + token = s.substr(0, pos); + s.erase(0, pos + delimiter.length()); + } + mint m; + + m.setAddress(token); + m.setHeigth(std::stoi(s)); + m.setAmount(arrValue.at(j).get_int64()); + LogPrintf("mmmmmm amount from hedgehog = %ld\n", arrValue.at(j).get_int64()); + LogPrintf("mmmmmm\naddress = %ld\nHeigth = %ld\nAmount = %ld\n", m.getAddress(), m.getHeigth(), m.getAmount()); + mints.push_back(m); + } + } + } + } + } catch (std::exception const& e) { + return false; + } + + return ok; +} \ No newline at end of file diff --git a/daemon/restclient.h b/daemon/restclient.h new file mode 100644 index 000000000000..0828368df4f2 --- /dev/null +++ b/daemon/restclient.h @@ -0,0 +1,43 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2014 The Bitcoin developers +// Copyright (c) 2014-2015 The Dash developers +// Copyright (c) 2015-2019 The PIVX developers +// Copyright (c) 2018-2022 The UNIGRID organization +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef UNIGRID_REST_CLIENT_H +#define UNIGRID_REST_CLIENT_H + +#include +#include +#include +#include + +#include +#include + +#include "mint.h" + +class restclient { +public: + restclient(boost::asio::io_context & io_context); + bool getdatafromrestserver(boost::asio::io_context & io_service, int port); + bool hasMintingSpork(boost::asio::io_context& io_context, int port); + bool isTimeToMint(int currIndex); + bool checkForSporks(); + mint getMint(int currIndex); + std::vector getMints(); +private: + + bool parseHedgehogData(std::string json); + + //boost::asio::ip::tcp::resolver resolver; + boost::asio::ip::tcp::socket client_socket; + //std::string request; + boost::asio::streambuf response; + std::vector mints; +}; + + +#endif \ No newline at end of file diff --git a/daemon/reverse_iterate.h b/daemon/reverse_iterate.h index 3559dbe16ce3..2598c086527a 100644 --- a/daemon/reverse_iterate.h +++ b/daemon/reverse_iterate.h @@ -5,7 +5,7 @@ #pragma once /* - Template used for reverse iteration in C++11 range-based for loops. + Template used for reverse iteration in c++17 range-based for loops. std::vector v = {1, 2, 3, 4, 5}; for (auto x : reverse_iterate(v)) std::cout << x << " "; diff --git a/daemon/robin-hood-hashing b/daemon/robin-hood-hashing index ed07b2987bfe..fb1483621fda 160000 --- a/daemon/robin-hood-hashing +++ b/daemon/robin-hood-hashing @@ -1 +1 @@ -Subproject commit ed07b2987bfe26efc587983a78f4460417cdb66e +Subproject commit fb1483621fda28d4afb31c0097c1a4a457fdd35b diff --git a/daemon/rpcclient.cpp b/daemon/rpcclient.cpp index b02bba00e0df..a387fd564a7b 100644 --- a/daemon/rpcclient.cpp +++ b/daemon/rpcclient.cpp @@ -101,10 +101,10 @@ static const CRPCConvertParam vRPCConvertParams[] = {"setban", 2}, {"setban", 3}, {"spork", 1}, - {"mnbudget", 3}, - {"mnbudget", 4}, - {"mnbudget", 6}, - {"mnbudget", 8}, + {"gnbudget", 3}, + {"gnbudget", 4}, + {"gnbudget", 6}, + {"gnbudget", 8}, {"preparebudget", 2}, {"preparebudget", 3}, {"preparebudget", 5}, @@ -112,10 +112,10 @@ static const CRPCConvertParam vRPCConvertParams[] = {"submitbudget", 3}, {"submitbudget", 5}, {"submitbudget", 7}, - // disabled until removal of the legacy 'masternode' command - //{"startmasternode", 1}, - {"mnvoteraw", 1}, - {"mnvoteraw", 4}, + // disabled until removal of the legacy 'gridnode' command + //{"startgridnode", 1}, + {"gnvoteraw", 1}, + {"gnvoteraw", 4}, {"reservebalance", 0}, {"reservebalance", 1}, {"setstakesplitthreshold", 0}, diff --git a/daemon/rpcmasternode-budget.cpp b/daemon/rpcgridnode-budget.cpp similarity index 83% rename from daemon/rpcmasternode-budget.cpp rename to daemon/rpcgridnode-budget.cpp index e95061df922a..ce69bcde51be 100644 --- a/daemon/rpcmasternode-budget.cpp +++ b/daemon/rpcgridnode-budget.cpp @@ -4,14 +4,14 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "activemasternode.h" +#include "activegridnode.h" #include "db.h" #include "init.h" #include "main.h" -#include "masternode-budget.h" -#include "masternode-payments.h" -#include "masternodeconfig.h" -#include "masternodeman.h" +#include "gridnode-budget.h" +#include "gridnode-payments.h" +#include "gridnodeconfig.h" +#include "gridnodeman.h" #include "rpcserver.h" #include "utilmoneystr.h" @@ -51,7 +51,7 @@ void budgetToJSON(CBudgetProposal* pbudgetProposal, UniValue& bObj) // This command is retained for backwards compatibility, but is depreciated. // Future removal of this command is planned to keep things clean. -UniValue mnbudget(const UniValue& params, bool fHelp) +UniValue gnbudget(const UniValue& params, bool fHelp) { string strCommand; if (params.size() >= 1) @@ -60,7 +60,7 @@ UniValue mnbudget(const UniValue& params, bool fHelp) if (fHelp || (strCommand != "vote-alias" && strCommand != "vote-many" && strCommand != "prepare" && strCommand != "submit" && strCommand != "vote" && strCommand != "getvotes" && strCommand != "getinfo" && strCommand != "show" && strCommand != "projection" && strCommand != "check" && strCommand != "nextblock")) throw runtime_error( - "mnbudget \"command\"... ( \"passphrase\" )\n" + "gnbudget \"command\"... ( \"passphrase\" )\n" "\nVote or show current budgets\n" "This command is depreciated, please see individual command documentation for future reference\n\n" @@ -70,8 +70,8 @@ UniValue mnbudget(const UniValue& params, bool fHelp) " vote-many - Vote on a UNIGRID initiative\n" " vote-alias - Vote on a UNIGRID initiative\n" " vote - Vote on a UNIGRID initiative/budget\n" - " getvotes - Show current masternode budgets\n" - " getinfo - Show current masternode budgets\n" + " getvotes - Show current gridnode budgets\n" + " getinfo - Show current gridnode budgets\n" " show - Show all budgets\n" " projection - Show the projection of which proposals will be paid the next cycle\n" " check - Scan proposals and remove invalid\n" @@ -108,9 +108,9 @@ UniValue mnbudget(const UniValue& params, bool fHelp) if (strCommand == "vote-alias") throw runtime_error( "vote-alias is not supported with this command\n" - "Please use mnbudgetvote instead.\n" + "Please use gnbudgetvote instead.\n" ); - return mnbudgetvote(params, fHelp); + return gnbudgetvote(params, fHelp); } if (strCommand == "projection") { @@ -323,15 +323,15 @@ UniValue submitbudget(const UniValue& params, bool fHelp) throw runtime_error("Proposal FeeTX is not valid - " + hash.ToString() + " - " + strError); } - if (!masternodeSync.IsBlockchainSynced()) { - throw runtime_error("Must wait for client to sync with masternode network. Try again in a minute or so."); + if (!GridnodeSync.IsBlockchainSynced()) { + throw runtime_error("Must wait for client to sync with gridnode network. Try again in a minute or so."); } // if(!budgetProposalBroadcast.IsValid(strError)){ // return "Proposal is not valid - " + budgetProposalBroadcast.GetHash().ToString() + " - " + strError; // } - budget.mapSeenMasternodeBudgetProposals.insert(make_pair(budgetProposalBroadcast.GetHash(), budgetProposalBroadcast)); + budget.mapSeenGridnodeBudgetProposals.insert(make_pair(budgetProposalBroadcast.GetHash(), budgetProposalBroadcast)); budgetProposalBroadcast.Relay(); if(budget.AddProposal(budgetProposalBroadcast)) { return budgetProposalBroadcast.GetHash().ToString(); @@ -339,13 +339,13 @@ UniValue submitbudget(const UniValue& params, bool fHelp) throw runtime_error("Invalid proposal, see debug.log for details."); } -UniValue mnbudgetvote(const UniValue& params, bool fHelp) +UniValue gnbudgetvote(const UniValue& params, bool fHelp) { std::string strCommand; if (params.size() >= 1) { strCommand = params[0].get_str(); - // Backwards compatibility with legacy `mnbudget` command + // Backwards compatibility with legacy `gnbudget` command if (strCommand == "vote") strCommand = "local"; if (strCommand == "vote-many") strCommand = "many"; if (strCommand == "vote-alias") strCommand = "alias"; @@ -354,21 +354,21 @@ UniValue mnbudgetvote(const UniValue& params, bool fHelp) if (fHelp || (params.size() == 3 && (strCommand != "local" && strCommand != "many")) || (params.size() == 4 && strCommand != "alias") || params.size() > 4 || params.size() < 3) throw runtime_error( - "mnbudgetvote \"local|many|alias\" \"votehash\" \"yes|no\" ( \"alias\" )\n" + "gnbudgetvote \"local|many|alias\" \"votehash\" \"yes|no\" ( \"alias\" )\n" "\nVote on a budget proposal\n" "\nArguments:\n" - "1. \"mode\" (string, required) The voting mode. 'local' for voting directly from a masternode, 'many' for voting with a MN controller and casting the same vote for each MN, 'alias' for voting with a MN controller and casting a vote for a single MN\n" + "1. \"mode\" (string, required) The voting mode. 'local' for voting directly from a gridnode, 'many' for voting with a GM controller and casting the same vote for each GM, 'alias' for voting with a GM controller and casting a vote for a single GM\n" "2. \"votehash\" (string, required) The vote hash for the proposal\n" "3. \"votecast\" (string, required) Your vote. 'yes' to vote for the proposal, 'no' to vote against\n" - "4. \"alias\" (string, required for 'alias' mode) The MN alias to cast a vote for.\n" + "4. \"alias\" (string, required for 'alias' mode) The GM alias to cast a vote for.\n" "\nResult:\n" "{\n" " \"overall\": \"xxxx\", (string) The overall status message for the vote cast\n" " \"detail\": [\n" " {\n" - " \"node\": \"xxxx\", (string) 'local' or the MN alias\n" + " \"node\": \"xxxx\", (string) 'local' or the GM alias\n" " \"result\": \"xxxx\", (string) Either 'Success' or 'Failed'\n" " \"error\": \"xxxx\", (string) Error message, if vote failed\n" " }\n" @@ -377,8 +377,8 @@ UniValue mnbudgetvote(const UniValue& params, bool fHelp) "}\n" "\nExamples:\n" + - HelpExampleCli("mnbudgetvote", "\"local\" \"ed2f83cedee59a91406f5f47ec4d60bf5a7f9ee6293913c82976bd2d3a658041\" \"yes\"") + - HelpExampleRpc("mnbudgetvote", "\"local\" \"ed2f83cedee59a91406f5f47ec4d60bf5a7f9ee6293913c82976bd2d3a658041\" \"yes\"")); + HelpExampleCli("gnbudgetvote", "\"local\" \"ed2f83cedee59a91406f5f47ec4d60bf5a7f9ee6293913c82976bd2d3a658041\" \"yes\"") + + HelpExampleRpc("gnbudgetvote", "\"local\" \"ed2f83cedee59a91406f5f47ec4d60bf5a7f9ee6293913c82976bd2d3a658041\" \"yes\"")); uint256 hash = ParseHashV(params[1], "parameter 1"); std::string strVote = params[2].get_str(); @@ -394,34 +394,34 @@ UniValue mnbudgetvote(const UniValue& params, bool fHelp) UniValue resultsObj(UniValue::VARR); if (strCommand == "local") { - CPubKey pubKeyMasternode; - CKey keyMasternode; + CPubKey pubKeyGridnode; + CKey keyGridnode; std::string errorMessage; UniValue statusObj(UniValue::VOBJ); while (true) { - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode)) { + if (!obfuScationSigner.SetKey(strGridnodePrivKey, errorMessage, keyGridnode, pubKeyGridnode)) { failed++; statusObj.push_back(Pair("node", "local")); statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("error", "Masternode signing error, could not set key correctly: " + errorMessage)); + statusObj.push_back(Pair("error", "Gridnode signing error, could not set key correctly: " + errorMessage)); resultsObj.push_back(statusObj); break; } - CMasternode* pmn = mnodeman.Find(activeMasternode.vin); - if (pmn == NULL) { + CGridnode* pgn = gnodeman.Find(activeGridnode.vin); + if (pgn == NULL) { failed++; statusObj.push_back(Pair("node", "local")); statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("error", "Failure to find masternode in list : " + activeMasternode.vin.ToString())); + statusObj.push_back(Pair("error", "Failure to find gridnode in list : " + activeGridnode.vin.ToString())); resultsObj.push_back(statusObj); break; } - CBudgetVote vote(activeMasternode.vin, hash, nVote); - if (!vote.Sign(keyMasternode, pubKeyMasternode)) { + CBudgetVote vote(activeGridnode.vin, hash, nVote); + if (!vote.Sign(keyGridnode, pubKeyGridnode)) { failed++; statusObj.push_back(Pair("node", "local")); statusObj.push_back(Pair("result", "failed")); @@ -433,7 +433,7 @@ UniValue mnbudgetvote(const UniValue& params, bool fHelp) std::string strError = ""; if (budget.UpdateProposal(vote, NULL, strError)) { success++; - budget.mapSeenMasternodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); + budget.mapSeenGridnodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); vote.Relay(); statusObj.push_back(Pair("node", "local")); statusObj.push_back(Pair("result", "success")); @@ -456,41 +456,41 @@ UniValue mnbudgetvote(const UniValue& params, bool fHelp) } if (strCommand == "many") { - BOOST_FOREACH (CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + BOOST_FOREACH (CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { std::string errorMessage; - std::vector vchMasterNodeSignature; - std::string strMasterNodeSignMessage; + std::vector vchGridnodeSignature; + std::string strGridnodeSignMessage; CPubKey pubKeyCollateralAddress; CKey keyCollateralAddress; - CPubKey pubKeyMasternode; - CKey keyMasternode; + CPubKey pubKeyGridnode; + CKey keyGridnode; UniValue statusObj(UniValue::VOBJ); - if (!obfuScationSigner.SetKey(mne.getPrivKey(), errorMessage, keyMasternode, pubKeyMasternode)) { + if (!obfuScationSigner.SetKey(gne.getPrivKey(), errorMessage, keyGridnode, pubKeyGridnode)) { failed++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("error", "Masternode signing error, could not set key correctly: " + errorMessage)); + statusObj.push_back(Pair("error", "Gridnode signing error, could not set key correctly: " + errorMessage)); resultsObj.push_back(statusObj); continue; } - CMasternode* pmn = mnodeman.Find(pubKeyMasternode); - if (pmn == NULL) { + CGridnode* pgn = gnodeman.Find(pubKeyGridnode); + if (pgn == NULL) { failed++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("error", "Can't find masternode by pubkey")); + statusObj.push_back(Pair("error", "Can't find gridnode by pubkey")); resultsObj.push_back(statusObj); continue; } - CBudgetVote vote(pmn->vin, hash, nVote); - if (!vote.Sign(keyMasternode, pubKeyMasternode)) { + CBudgetVote vote(pgn->vin, hash, nVote); + if (!vote.Sign(keyGridnode, pubKeyGridnode)) { failed++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "failed")); statusObj.push_back(Pair("error", "Failure to sign.")); resultsObj.push_back(statusObj); @@ -499,15 +499,15 @@ UniValue mnbudgetvote(const UniValue& params, bool fHelp) std::string strError = ""; if (budget.UpdateProposal(vote, NULL, strError)) { - budget.mapSeenMasternodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); + budget.mapSeenGridnodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); vote.Relay(); success++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "success")); statusObj.push_back(Pair("error", "")); } else { failed++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "failed")); statusObj.push_back(Pair("error", strError.c_str())); } @@ -524,48 +524,48 @@ UniValue mnbudgetvote(const UniValue& params, bool fHelp) if (strCommand == "alias") { std::string strAlias = params[3].get_str(); - std::vector mnEntries; - mnEntries = masternodeConfig.getEntries(); + std::vector gnEntries; + gnEntries = GridnodeConfig.getEntries(); - BOOST_FOREACH(CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + BOOST_FOREACH(CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { - if( strAlias != mne.getAlias()) continue; + if( strAlias != gne.getAlias()) continue; std::string errorMessage; - std::vector vchMasterNodeSignature; - std::string strMasterNodeSignMessage; + std::vector vchGridnodeSignature; + std::string strGridnodeSignMessage; CPubKey pubKeyCollateralAddress; CKey keyCollateralAddress; - CPubKey pubKeyMasternode; - CKey keyMasternode; + CPubKey pubKeyGridnode; + CKey keyGridnode; UniValue statusObj(UniValue::VOBJ); - if(!obfuScationSigner.SetKey(mne.getPrivKey(), errorMessage, keyMasternode, pubKeyMasternode)){ + if(!obfuScationSigner.SetKey(gne.getPrivKey(), errorMessage, keyGridnode, pubKeyGridnode)){ failed++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("error", "Masternode signing error, could not set key correctly: " + errorMessage)); + statusObj.push_back(Pair("error", "Gridnode signing error, could not set key correctly: " + errorMessage)); resultsObj.push_back(statusObj); continue; } - CMasternode* pmn = mnodeman.Find(pubKeyMasternode); - if(pmn == NULL) + CGridnode* pgn = gnodeman.Find(pubKeyGridnode); + if(pgn == NULL) { failed++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("error", "Can't find masternode by pubkey")); + statusObj.push_back(Pair("error", "Can't find gridnode by pubkey")); resultsObj.push_back(statusObj); continue; } - CBudgetVote vote(pmn->vin, hash, nVote); - if(!vote.Sign(keyMasternode, pubKeyMasternode)){ + CBudgetVote vote(pgn->vin, hash, nVote); + if(!vote.Sign(keyGridnode, pubKeyGridnode)){ failed++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "failed")); statusObj.push_back(Pair("error", "Failure to sign.")); resultsObj.push_back(statusObj); @@ -574,15 +574,15 @@ UniValue mnbudgetvote(const UniValue& params, bool fHelp) std::string strError = ""; if(budget.UpdateProposal(vote, NULL, strError)) { - budget.mapSeenMasternodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); + budget.mapSeenGridnodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); vote.Relay(); success++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "success")); statusObj.push_back(Pair("error", "")); } else { failed++; - statusObj.push_back(Pair("node", mne.getAlias())); + statusObj.push_back(Pair("node", gne.getAlias())); statusObj.push_back(Pair("result", "failed")); statusObj.push_back(Pair("error", strError.c_str())); } @@ -613,7 +613,7 @@ UniValue getbudgetvotes(const UniValue& params, bool fHelp) "\nResult:\n" "[\n" " {\n" - " \"mnId\": \"xxxx\", (string) Hash of the masternode's collateral transaction\n" + " \"gnId\": \"xxxx\", (string) Hash of the gridnode's collateral transaction\n" " \"nHash\": \"xxxx\", (string) Hash of the vote\n" " \"Vote\": \"YES|NO\", (string) Vote cast ('YES' or 'NO')\n" " \"nTime\": xxxx, (numeric) Time in seconds since epoch the vote was cast\n" @@ -636,7 +636,7 @@ UniValue getbudgetvotes(const UniValue& params, bool fHelp) std::map::iterator it = pbudgetProposal->mapVotes.begin(); while (it != pbudgetProposal->mapVotes.end()) { UniValue bObj(UniValue::VOBJ); - bObj.push_back(Pair("mnId", (*it).second.vin.prevout.hash.ToString())); + bObj.push_back(Pair("gnId", (*it).second.vin.prevout.hash.ToString())); bObj.push_back(Pair("nHash", (*it).first.ToString().c_str())); bObj.push_back(Pair("Vote", (*it).second.GetVoteString())); bObj.push_back(Pair("nTime", (int64_t)(*it).second.nTime)); @@ -736,7 +736,7 @@ UniValue getbudgetinfo(const UniValue& params, bool fHelp) if (fHelp || params.size() > 1) throw runtime_error( "getbudgetinfo ( \"proposal\" )\n" - "\nShow current masternode budgets\n" + "\nShow current gridnode budgets\n" "\nArguments:\n" "1. \"proposal\" (string, optional) Proposal name\n" @@ -796,16 +796,16 @@ UniValue getbudgetinfo(const UniValue& params, bool fHelp) return ret; } -UniValue mnbudgetrawvote(const UniValue& params, bool fHelp) +UniValue gnbudgetrawvote(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 6) throw runtime_error( - "mnbudgetrawvote \"masternode-tx-hash\" masternode-tx-index \"proposal-hash\" yes|no time \"vote-sig\"\n" + "gnbudgetrawvote \"gridnode-tx-hash\" gridnode-tx-index \"proposal-hash\" yes|no time \"vote-sig\"\n" "\nCompile and relay a proposal vote with provided external signature instead of signing vote internally\n" "\nArguments:\n" - "1. \"masternode-tx-hash\" (string, required) Transaction hash for the masternode\n" - "2. masternode-tx-index (numeric, required) Output index for the masternode\n" + "1. \"gridnode-tx-hash\" (string, required) Transaction hash for the gridnode\n" + "2. gridnode-tx-index (numeric, required) Output index for the gridnode\n" "3. \"proposal-hash\" (string, required) Proposal vote hash\n" "4. yes|no (boolean, required) Vote to cast\n" "5. time (numeric, required) Time since epoch in seconds\n" @@ -815,9 +815,9 @@ UniValue mnbudgetrawvote(const UniValue& params, bool fHelp) "\"status\" (string) Vote status or error message\n" "\nExamples:\n" + - HelpExampleCli("mnbudgetrawvote", "") + HelpExampleRpc("mnbudgetrawvote", "")); + HelpExampleCli("gnbudgetrawvote", "") + HelpExampleRpc("gnbudgetrawvote", "")); - uint256 hashMnTx = ParseHashV(params[0], "mn tx hash"); + uint256 hashMnTx = ParseHashV(params[0], "gn tx hash"); int nMnTxIndex = params[1].get_int(); CTxIn vin = CTxIn(hashMnTx, nMnTxIndex); @@ -837,9 +837,9 @@ UniValue mnbudgetrawvote(const UniValue& params, bool fHelp) if (fInvalid) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Malformed base64 encoding"); - CMasternode* pmn = mnodeman.Find(vin); - if (pmn == NULL) { - return "Failure to find masternode in list : " + vin.ToString(); + CGridnode* pgn = gnodeman.Find(vin); + if (pgn == NULL) { + return "Failure to find gridnode in list : " + vin.ToString(); } CBudgetVote vote(vin, hashProposal, nVote); @@ -852,7 +852,7 @@ UniValue mnbudgetrawvote(const UniValue& params, bool fHelp) std::string strError = ""; if (budget.UpdateProposal(vote, NULL, strError)) { - budget.mapSeenMasternodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); + budget.mapSeenGridnodeBudgetVotes.insert(make_pair(vote.GetHash(), vote)); vote.Relay(); return "Voted successfully"; } else { @@ -860,7 +860,7 @@ UniValue mnbudgetrawvote(const UniValue& params, bool fHelp) } } -UniValue mnfinalbudget(const UniValue& params, bool fHelp) +UniValue gnfinalbudget(const UniValue& params, bool fHelp) { string strCommand; if (params.size() >= 1) @@ -869,7 +869,7 @@ UniValue mnfinalbudget(const UniValue& params, bool fHelp) if (fHelp || (strCommand != "suggest" && strCommand != "vote-many" && strCommand != "vote" && strCommand != "show" && strCommand != "getvotes")) throw runtime_error( - "mnfinalbudget \"command\"... ( \"passphrase\" )\n" + "gnfinalbudget \"command\"... ( \"passphrase\" )\n" "\nVote or show current budgets\n" "\nAvailable commands:\n" @@ -880,7 +880,7 @@ UniValue mnfinalbudget(const UniValue& params, bool fHelp) if (strCommand == "vote-many") { if (params.size() != 2) - throw runtime_error("Correct usage is 'mnfinalbudget vote-many BUDGET_HASH'"); + throw runtime_error("Correct usage is 'gnfinalbudget vote-many BUDGET_HASH'"); std::string strHash = params[1].get_str(); uint256 hash(strHash); @@ -890,42 +890,42 @@ UniValue mnfinalbudget(const UniValue& params, bool fHelp) UniValue resultsObj(UniValue::VOBJ); - BOOST_FOREACH (CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + BOOST_FOREACH (CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { std::string errorMessage; - std::vector vchMasterNodeSignature; - std::string strMasterNodeSignMessage; + std::vector vchGridnodeSignature; + std::string strGridnodeSignMessage; CPubKey pubKeyCollateralAddress; CKey keyCollateralAddress; - CPubKey pubKeyMasternode; - CKey keyMasternode; + CPubKey pubKeyGridnode; + CKey keyGridnode; UniValue statusObj(UniValue::VOBJ); - if (!obfuScationSigner.SetKey(mne.getPrivKey(), errorMessage, keyMasternode, pubKeyMasternode)) { + if (!obfuScationSigner.SetKey(gne.getPrivKey(), errorMessage, keyGridnode, pubKeyGridnode)) { failed++; statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("errorMessage", "Masternode signing error, could not set key correctly: " + errorMessage)); - resultsObj.push_back(Pair(mne.getAlias(), statusObj)); + statusObj.push_back(Pair("errorMessage", "Gridnode signing error, could not set key correctly: " + errorMessage)); + resultsObj.push_back(Pair(gne.getAlias(), statusObj)); continue; } - CMasternode* pmn = mnodeman.Find(pubKeyMasternode); - if (pmn == NULL) { + CGridnode* pgn = gnodeman.Find(pubKeyGridnode); + if (pgn == NULL) { failed++; statusObj.push_back(Pair("result", "failed")); - statusObj.push_back(Pair("errorMessage", "Can't find masternode by pubkey")); - resultsObj.push_back(Pair(mne.getAlias(), statusObj)); + statusObj.push_back(Pair("errorMessage", "Can't find gridnode by pubkey")); + resultsObj.push_back(Pair(gne.getAlias(), statusObj)); continue; } - CFinalizedBudgetVote vote(pmn->vin, hash); - if (!vote.Sign(keyMasternode, pubKeyMasternode)) { + CFinalizedBudgetVote vote(pgn->vin, hash); + if (!vote.Sign(keyGridnode, pubKeyGridnode)) { failed++; statusObj.push_back(Pair("result", "failed")); statusObj.push_back(Pair("errorMessage", "Failure to sign.")); - resultsObj.push_back(Pair(mne.getAlias(), statusObj)); + resultsObj.push_back(Pair(gne.getAlias(), statusObj)); continue; } @@ -940,7 +940,7 @@ UniValue mnfinalbudget(const UniValue& params, bool fHelp) statusObj.push_back(Pair("result", strError.c_str())); } - resultsObj.push_back(Pair(mne.getAlias(), statusObj)); + resultsObj.push_back(Pair(gne.getAlias(), statusObj)); } UniValue returnObj(UniValue::VOBJ); @@ -952,25 +952,25 @@ UniValue mnfinalbudget(const UniValue& params, bool fHelp) if (strCommand == "vote") { if (params.size() != 2) - throw runtime_error("Correct usage is 'mnfinalbudget vote BUDGET_HASH'"); + throw runtime_error("Correct usage is 'gnfinalbudget vote BUDGET_HASH'"); std::string strHash = params[1].get_str(); uint256 hash(strHash); - CPubKey pubKeyMasternode; - CKey keyMasternode; + CPubKey pubKeyGridnode; + CKey keyGridnode; std::string errorMessage; - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, errorMessage, keyMasternode, pubKeyMasternode)) + if (!obfuScationSigner.SetKey(strGridnodePrivKey, errorMessage, keyGridnode, pubKeyGridnode)) return "Error upon calling SetKey"; - CMasternode* pmn = mnodeman.Find(activeMasternode.vin); - if (pmn == NULL) { - return "Failure to find masternode in list : " + activeMasternode.vin.ToString(); + CGridnode* pgn = gnodeman.Find(activeGridnode.vin); + if (pgn == NULL) { + return "Failure to find gridnode in list : " + activeGridnode.vin.ToString(); } - CFinalizedBudgetVote vote(activeMasternode.vin, hash); - if (!vote.Sign(keyMasternode, pubKeyMasternode)) { + CFinalizedBudgetVote vote(activeGridnode.vin, hash); + if (!vote.Sign(keyGridnode, pubKeyGridnode)) { return "Failure to sign."; } @@ -1010,7 +1010,7 @@ UniValue mnfinalbudget(const UniValue& params, bool fHelp) if (strCommand == "getvotes") { if (params.size() != 2) - throw runtime_error("Correct usage is 'mnbudget getvotes budget-hash'"); + throw runtime_error("Correct usage is 'gnbudget getvotes budget-hash'"); std::string strHash = params[1].get_str(); uint256 hash(strHash); diff --git a/daemon/rpcmasternode.cpp b/daemon/rpcgridnode.cpp similarity index 55% rename from daemon/rpcmasternode.cpp rename to daemon/rpcgridnode.cpp index 3b3fa904894e..0fe0184afa88 100644 --- a/daemon/rpcmasternode.cpp +++ b/daemon/rpcgridnode.cpp @@ -4,14 +4,14 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "activemasternode.h" +#include "activegridnode.h" #include "db.h" #include "init.h" #include "main.h" -#include "masternode-budget.h" -#include "masternode-payments.h" -#include "masternodeconfig.h" -#include "masternodeman.h" +#include "gridnode-budget.h" +#include "gridnode-payments.h" +#include "gridnodeconfig.h" +#include "gridnodeman.h" #include "rpcserver.h" #include "utilmoneystr.h" @@ -29,7 +29,7 @@ UniValue getpoolinfo(const UniValue& params, bool fHelp) "\nResult:\n" "{\n" - " \"current\": \"addr\", (string) UNIGRID address of current masternode\n" + " \"current\": \"addr\", (string) UNIGRID address of current gridnode\n" " \"state\": xxxx, (string) unknown\n" " \"entries\": xxxx, (numeric) Number of entries\n" " \"accepted\": xxxx, (numeric) Number of entries accepted\n" @@ -39,7 +39,7 @@ UniValue getpoolinfo(const UniValue& params, bool fHelp) HelpExampleCli("getpoolinfo", "") + HelpExampleRpc("getpoolinfo", "")); UniValue obj(UniValue::VOBJ); - obj.push_back(Pair("current_masternode", mnodeman.GetCurrentMasterNode()->addr.ToString())); + obj.push_back(Pair("current_Gridnode", gnodeman.GetCurrentGridnode()->addr.ToString())); obj.push_back(Pair("state", obfuScationPool.GetState())); obj.push_back(Pair("entries", obfuScationPool.GetEntriesCount())); obj.push_back(Pair("entries_accepted", obfuScationPool.GetCountEntriesAccepted())); @@ -69,7 +69,7 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return listmasternodes(newParams, fHelp); + return listgridnodes(newParams, fHelp); } if (strCommand == "connect") { @@ -78,7 +78,7 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return masternodeconnect(newParams, fHelp); + return gridnodeconnect(newParams, fHelp); } if (strCommand == "count") { @@ -87,7 +87,7 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return getmasternodecount(newParams, fHelp); + return getgridnodecount(newParams, fHelp); } if (strCommand == "current") { @@ -96,7 +96,7 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return masternodecurrent(newParams, fHelp); + return gridnodecurrent(newParams, fHelp); } if (strCommand == "debug") { @@ -105,11 +105,11 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return masternodedebug(newParams, fHelp); + return gridnodedebug(newParams, fHelp); } if (strCommand == "start" || strCommand == "start-alias" || strCommand == "start-many" || strCommand == "start-all" || strCommand == "start-missing" || strCommand == "start-disabled") { - return startmasternode(params, fHelp); + return startgridnode(params, fHelp); } if (strCommand == "genkey") { @@ -118,7 +118,7 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return createmasternodekey(newParams, fHelp); + return creategridnodekey(newParams, fHelp); } if (strCommand == "list-conf") { @@ -127,7 +127,7 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return listmasternodeconf(newParams, fHelp); + return listgridnodeconf(newParams, fHelp); } if (strCommand == "outputs") { @@ -136,7 +136,7 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return getmasternodeoutputs(newParams, fHelp); + return getgridnodeoutputs(newParams, fHelp); } if (strCommand == "status") { @@ -145,7 +145,7 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return getmasternodestatus(newParams, fHelp); + return getgridnodestatus(newParams, fHelp); } if (strCommand == "winners") { @@ -154,7 +154,7 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return getmasternodewinners(newParams, fHelp); + return getgridnodewinners(newParams, fHelp); } if (strCommand == "calcscore") { @@ -163,13 +163,134 @@ UniValue masternode(const UniValue& params, bool fHelp) for (unsigned int i = 1; i < params.size(); i++) { newParams.push_back(params[i]); } - return getmasternodescores(newParams, fHelp); + return getgridnodescores(newParams, fHelp); } return NullUniValue; } -UniValue listmasternodes(const UniValue& params, bool fHelp) +UniValue gridnode(const UniValue& params, bool fHelp) +{ + string strCommand; + if (params.size() >= 1) + strCommand = params[0].get_str(); + + if (fHelp || + (strCommand != "start" && strCommand != "start-alias" && strCommand != "start-many" && strCommand != "start-all" && strCommand != "start-missing" && + strCommand != "start-disabled" && strCommand != "list" && strCommand != "list-conf" && strCommand != "count" && strCommand != "enforce" && + strCommand != "debug" && strCommand != "current" && strCommand != "winners" && strCommand != "genkey" && strCommand != "connect" && + strCommand != "outputs" && strCommand != "status" && strCommand != "calcscore")) { + throw runtime_error("gridnode [passphrase]\n"); + } + + if (strCommand == "list") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return listgridnodes(newParams, fHelp); + } + + if (strCommand == "connect") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return gridnodeconnect(newParams, fHelp); + } + + if (strCommand == "count") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return getgridnodecount(newParams, fHelp); + } + + if (strCommand == "current") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return gridnodecurrent(newParams, fHelp); + } + + if (strCommand == "debug") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return gridnodedebug(newParams, fHelp); + } + + if (strCommand == "start" || strCommand == "start-alias" || strCommand == "start-many" || strCommand == "start-all" || strCommand == "start-missing" || strCommand == "start-disabled") { + return startgridnode(params, fHelp); + } + + if (strCommand == "genkey") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return creategridnodekey(newParams, fHelp); + } + + if (strCommand == "list-conf") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return listgridnodeconf(newParams, fHelp); + } + + if (strCommand == "outputs") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return getgridnodeoutputs(newParams, fHelp); + } + + if (strCommand == "status") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return getgridnodestatus(newParams, fHelp); + } + + if (strCommand == "winners") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return getgridnodewinners(newParams, fHelp); + } + + if (strCommand == "calcscore") { + UniValue newParams(UniValue::VARR); + // forward params but skip command + for (unsigned int i = 1; i < params.size(); i++) { + newParams.push_back(params[i]); + } + return getgridnodescores(newParams, fHelp); + } + + return NullUniValue; +} + +UniValue listgridnodes(const UniValue& params, bool fHelp) { std::string strFilter = ""; @@ -177,8 +298,8 @@ UniValue listmasternodes(const UniValue& params, bool fHelp) if (fHelp || (params.size() > 1)) throw runtime_error( - "listmasternodes ( \"filter\" )\n" - "\nGet a ranked list of masternodes\n" + "listgridnodes ( \"filter\" )\n" + "\nGet a ranked list of Gridnodes\n" "\nArguments:\n" "1. \"filter\" (string, optional) Filter search text. Partial match by txhash, status, or addr.\n" @@ -186,22 +307,22 @@ UniValue listmasternodes(const UniValue& params, bool fHelp) "\nResult:\n" "[\n" " {\n" - " \"rank\": n, (numeric) Masternode Rank (or 0 if not enabled)\n" + " \"rank\": n, (numeric) Gridnode Rank (or 0 if not enabled)\n" " \"txhash\": \"hash\", (string) Collateral transaction hash\n" " \"outidx\": n, (numeric) Collateral transaction output index\n" " \"status\": s, (string) Status (ENABLED/EXPIRED/REMOVE/etc)\n" - " \"addr\": \"addr\", (string) Masternode UNIGRID collateral address\n" - " \"ipaddr\": \"ipaddr\", (string) Masternode UNIGRID IP address\n" - " \"version\": v, (numeric) Masternode protocol version\n" + " \"addr\": \"addr\", (string) Gridnode UNIGRID collateral address\n" + " \"ipaddr\": \"ipaddr\", (string) Gridnode UNIGRID IP address\n" + " \"version\": v, (numeric) Gridnode protocol version\n" " \"lastseen\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) of the last seen\n" - " \"activetime\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) masternode has been active\n" - " \"lastpaid\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) masternode was last paid\n" + " \"activetime\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) gridnode has been active\n" + " \"lastpaid\": ttt, (numeric) The time in seconds since epoch (Jan 1 1970 GMT) gridnode was last paid\n" " }\n" " ,...\n" "]\n" "\nExamples:\n" + - HelpExampleCli("listmasternodes", "") + HelpExampleRpc("listmasternodes", "")); + HelpExampleCli("listgridnodes", "") + HelpExampleRpc("listgridnodes", "")); UniValue ret(UniValue::VARR); int nHeight; @@ -211,24 +332,24 @@ UniValue listmasternodes(const UniValue& params, bool fHelp) if (!pindex) return 0; nHeight = pindex->nHeight; } - std::vector > vMasternodeRanks = mnodeman.GetMasternodeRanks(nHeight); - BOOST_FOREACH (PAIRTYPE(int, CMasternode) & s, vMasternodeRanks) { + std::vector > vGridnodeRanks = gnodeman.GetGridnodeRanks(nHeight); + BOOST_FOREACH (PAIRTYPE(int, CGridnode) & s, vGridnodeRanks) { UniValue obj(UniValue::VOBJ); std::string strVin = s.second.vin.prevout.ToStringShort(); std::string strTxHash = s.second.vin.prevout.hash.ToString(); uint32_t oIdx = s.second.vin.prevout.n; - CMasternode* mn = mnodeman.Find(s.second.vin); + CGridnode* gn = gnodeman.Find(s.second.vin); - if (mn != NULL) { + if (gn != NULL) { if (strFilter != "" && strTxHash.find(strFilter) == string::npos && - mn->Status().find(strFilter) == string::npos && - CBitcoinAddress(mn->pubKeyCollateralAddress.GetID()).ToString().find(strFilter) == string::npos) continue; + gn->Status().find(strFilter) == string::npos && + CBitcoinAddress(gn->pubKeyCollateralAddress.GetID()).ToString().find(strFilter) == string::npos) continue; - std::string strStatus = mn->Status(); + std::string strStatus = gn->Status(); std::string strHost; int port; - SplitHostPort(mn->addr.ToString(), port, strHost); + SplitHostPort(gn->addr.ToString(), port, strHost); CNetAddr node = CNetAddr(strHost, false); std::string strNetwork = GetNetworkName(node.GetNetwork()); @@ -237,12 +358,12 @@ UniValue listmasternodes(const UniValue& params, bool fHelp) obj.push_back(Pair("txhash", strTxHash)); obj.push_back(Pair("outidx", (uint64_t)oIdx)); obj.push_back(Pair("status", strStatus)); - obj.push_back(Pair("addr", CBitcoinAddress(mn->pubKeyCollateralAddress.GetID()).ToString())); - obj.push_back(Pair("ipaddr", mn->addr.ToString())); - obj.push_back(Pair("version", mn->protocolVersion)); - obj.push_back(Pair("lastseen", (int64_t)mn->lastPing.sigTime)); - obj.push_back(Pair("activetime", (int64_t)(mn->lastPing.sigTime - mn->sigTime))); - obj.push_back(Pair("lastpaid", (int64_t)mn->GetLastPaid())); + obj.push_back(Pair("addr", CBitcoinAddress(gn->pubKeyCollateralAddress.GetID()).ToString())); + obj.push_back(Pair("ipaddr", gn->addr.ToString())); + obj.push_back(Pair("version", gn->protocolVersion)); + obj.push_back(Pair("lastseen", (int64_t)gn->lastPing.sigTime)); + obj.push_back(Pair("activetime", (int64_t)(gn->lastPing.sigTime - gn->sigTime))); + obj.push_back(Pair("lastpaid", (int64_t)gn->GetLastPaid())); ret.push_back(obj); } @@ -251,18 +372,18 @@ UniValue listmasternodes(const UniValue& params, bool fHelp) return ret; } -UniValue masternodeconnect(const UniValue& params, bool fHelp) +UniValue gridnodeconnect(const UniValue& params, bool fHelp) { if (fHelp || (params.size() != 1)) throw runtime_error( - "masternodeconnect \"address\"\n" - "\nAttempts to connect to specified masternode address\n" + "gridnodeconnect \"address\"\n" + "\nAttempts to connect to specified gridnode address\n" "\nArguments:\n" "1. \"address\" (string, required) IP or net address to connect to\n" "\nExamples:\n" + - HelpExampleCli("masternodeconnect", "\"192.168.0.6:51992\"") + HelpExampleRpc("masternodeconnect", "\"192.168.0.6:51992\"")); + HelpExampleCli("gridnodeconnect", "\"192.168.0.6:51992\"") + HelpExampleRpc("gridnodeconnect", "\"192.168.0.6:51992\"")); std::string strAddress = params[0].get_str(); @@ -277,38 +398,38 @@ UniValue masternodeconnect(const UniValue& params, bool fHelp) } } -UniValue getmasternodecount(const UniValue& params, bool fHelp) +UniValue getgridnodecount(const UniValue& params, bool fHelp) { if (fHelp || (params.size() > 0)) throw runtime_error( - "getmasternodecount\n" - "\nGet masternode count values\n" + "getgridnodecount\n" + "\nGet gridnode count values\n" "\nResult:\n" "{\n" - " \"total\": n, (numeric) Total masternodes\n" + " \"total\": n, (numeric) Total Gridnodes\n" " \"stable\": n, (numeric) Stable count\n" " \"obfcompat\": n, (numeric) Obfuscation Compatible\n" - " \"enabled\": n, (numeric) Enabled masternodes\n" - " \"inqueue\": n (numeric) Masternodes in queue\n" + " \"enabled\": n, (numeric) Enabled Gridnodes\n" + " \"inqueue\": n (numeric) Gridnodes in queue\n" "}\n" "\nExamples:\n" + - HelpExampleCli("getmasternodecount", "") + HelpExampleRpc("getmasternodecount", "")); + HelpExampleCli("getgridnodecount", "") + HelpExampleRpc("getgridnodecount", "")); UniValue obj(UniValue::VOBJ); int nCount = 0; int ipv4 = 0, ipv6 = 0, onion = 0; if (chainActive.Tip()) - mnodeman.GetNextMasternodeInQueueForPayment(chainActive.Tip()->nHeight, true, nCount); + gnodeman.GetNextGridnodeInQueueForPayment(chainActive.Tip()->nHeight, true, nCount); - mnodeman.CountNetworks(ActiveProtocol(), ipv4, ipv6, onion); + gnodeman.CountNetworks(ActiveProtocol(), ipv4, ipv6, onion); - obj.push_back(Pair("total", mnodeman.size())); - obj.push_back(Pair("stable", mnodeman.stable_size())); - obj.push_back(Pair("obfcompat", mnodeman.CountEnabled(ActiveProtocol()))); - obj.push_back(Pair("enabled", mnodeman.CountEnabled())); + obj.push_back(Pair("total", gnodeman.size())); + obj.push_back(Pair("stable", gnodeman.stable_size())); + obj.push_back(Pair("obfcompat", gnodeman.CountEnabled(ActiveProtocol()))); + obj.push_back(Pair("enabled", gnodeman.CountEnabled())); obj.push_back(Pair("inqueue", nCount)); obj.push_back(Pair("ipv4", ipv4)); obj.push_back(Pair("ipv6", ipv6)); @@ -317,72 +438,72 @@ UniValue getmasternodecount(const UniValue& params, bool fHelp) return obj; } -UniValue masternodecurrent(const UniValue& params, bool fHelp) +UniValue gridnodecurrent(const UniValue& params, bool fHelp) { if (fHelp || (params.size() != 0)) throw runtime_error( - "masternodecurrent\n" - "\nGet current masternode winner\n" + "gridnodecurrent\n" + "\nGet current gridnode winner\n" "\nResult:\n" "{\n" " \"protocol\": xxxx, (numeric) Protocol version\n" " \"txhash\": \"xxxx\", (string) Collateral transaction hash\n" - " \"pubkey\": \"xxxx\", (string) MN Public key\n" + " \"pubkey\": \"xxxx\", (string) GM Public key\n" " \"lastseen\": xxx, (numeric) Time since epoch of last seen\n" - " \"activeseconds\": xxx, (numeric) Seconds MN has been active\n" + " \"activeseconds\": xxx, (numeric) Seconds GM has been active\n" "}\n" "\nExamples:\n" + - HelpExampleCli("masternodecurrent", "") + HelpExampleRpc("masternodecurrent", "")); + HelpExampleCli("gridnodecurrent", "") + HelpExampleRpc("gridnodecurrent", "")); - CMasternode* winner = mnodeman.GetCurrentMasterNode(1); + CGridnode* winner = gnodeman.GetCurrentGridnode(1); if (winner) { UniValue obj(UniValue::VOBJ); obj.push_back(Pair("protocol", (int64_t)winner->protocolVersion)); obj.push_back(Pair("txhash", winner->vin.prevout.hash.ToString())); obj.push_back(Pair("pubkey", CBitcoinAddress(winner->pubKeyCollateralAddress.GetID()).ToString())); - obj.push_back(Pair("lastseen", (winner->lastPing == CMasternodePing()) ? winner->sigTime : (int64_t)winner->lastPing.sigTime)); - obj.push_back(Pair("activeseconds", (winner->lastPing == CMasternodePing()) ? 0 : (int64_t)(winner->lastPing.sigTime - winner->sigTime))); + obj.push_back(Pair("lastseen", (winner->lastPing == CGridnodePing()) ? winner->sigTime : (int64_t)winner->lastPing.sigTime)); + obj.push_back(Pair("activeseconds", (winner->lastPing == CGridnodePing()) ? 0 : (int64_t)(winner->lastPing.sigTime - winner->sigTime))); return obj; } throw runtime_error("unknown"); } -UniValue masternodedebug(const UniValue& params, bool fHelp) +UniValue gridnodedebug(const UniValue& params, bool fHelp) { if (fHelp || (params.size() != 0)) throw runtime_error( - "masternodedebug\n" - "\nPrint masternode status\n" + "gridnodedebug\n" + "\nPrint gridnode status\n" "\nResult:\n" - "\"status\" (string) Masternode status message\n" + "\"status\" (string) Gridnode status message\n" "\nExamples:\n" + - HelpExampleCli("masternodedebug", "") + HelpExampleRpc("masternodedebug", "")); + HelpExampleCli("gridnodedebug", "") + HelpExampleRpc("gridnodedebug", "")); - if (activeMasternode.status != ACTIVE_MASTERNODE_INITIAL || !masternodeSync.IsSynced()) - return activeMasternode.GetStatus(); + if (activeGridnode.status != ACTIVE_GRIDNODE_INITIAL || !GridnodeSync.IsSynced()) + return activeGridnode.GetStatus(); CTxIn vin = CTxIn(); CPubKey pubkey; CKey key; - if (!activeMasternode.GetMasterNodeVin(vin, pubkey, key)) - throw runtime_error("Missing masternode input, please look at the documentation for instructions on masternode creation\n"); + if (!activeGridnode.GetGridnodeVin(vin, pubkey, key)) + throw runtime_error("Missing gridnode input, please look at the documentation for instructions on gridnode creation\n"); else - return activeMasternode.GetStatus(); + return activeGridnode.GetStatus(); } -UniValue startmasternode(const UniValue& params, bool fHelp) +UniValue startgridnode(const UniValue& params, bool fHelp) { std::string strCommand; if (params.size() >= 1) { strCommand = params[0].get_str(); - // Backwards compatibility with legacy 'masternode' super-command forwarder + // Backwards compatibility with legacy 'gridnode' super-command forwarder if (strCommand == "start") strCommand = "local"; if (strCommand == "start-alias") strCommand = "alias"; if (strCommand == "start-all") strCommand = "all"; @@ -395,16 +516,16 @@ UniValue startmasternode(const UniValue& params, bool fHelp) (params.size() == 2 && (strCommand != "local" && strCommand != "all" && strCommand != "many" && strCommand != "missing" && strCommand != "disabled")) || (params.size() == 3 && strCommand != "alias")) throw runtime_error( - "startmasternode \"local|all|many|missing|disabled|alias\" lockwallet ( \"alias\" )\n" - "\nAttempts to start one or more masternode(s)\n" + "startgridnode \"local|all|many|missing|disabled|alias\" lockwallet ( \"alias\" )\n" + "\nAttempts to start one or more gridnode(s)\n" "\nArguments:\n" - "1. set (string, required) Specify which set of masternode(s) to start.\n" + "1. set (string, required) Specify which set of gridnode(s) to start.\n" "2. lockwallet (boolean, required) Lock wallet after completion.\n" - "3. alias (string) Masternode alias. Required if using 'alias' as the set.\n" + "3. alias (string) Gridnode alias. Required if using 'alias' as the set.\n" "\nResult: (for 'local' set):\n" - "\"status\" (string) Masternode status message\n" + "\"status\" (string) Gridnode status message\n" "\nResult: (for other sets):\n" "{\n" @@ -420,65 +541,65 @@ UniValue startmasternode(const UniValue& params, bool fHelp) "}\n" "\nExamples:\n" + - HelpExampleCli("startmasternode", "\"alias\" \"0\" \"my_mn\"") + HelpExampleRpc("startmasternode", "\"alias\" \"0\" \"my_mn\"")); + HelpExampleCli("startgridnode", "\"alias\" \"0\" \"my_mn\"") + HelpExampleRpc("startgridnode", "\"alias\" \"0\" \"my_mn\"")); bool fLock = (params[1].get_str() == "true" ? true : false); EnsureWalletIsUnlocked(); if (strCommand == "local") { - if (!fMasterNode) throw runtime_error("you must set masternode=1 in the configuration\n"); + if (!fGridnode) throw runtime_error("you must set gridnode=1 in the configuration\n"); - if (activeMasternode.status != ACTIVE_MASTERNODE_STARTED) { - activeMasternode.status = ACTIVE_MASTERNODE_INITIAL; // TODO: consider better way - activeMasternode.ManageStatus(); + if (activeGridnode.status != ACTIVE_GRIDNODE_STARTED) { + activeGridnode.status = ACTIVE_GRIDNODE_INITIAL; // TODO: consider better way + activeGridnode.ManageStatus(); if (fLock) pwalletMain->Lock(); } - return activeMasternode.GetStatus(); + return activeGridnode.GetStatus(); } if (strCommand == "all" || strCommand == "many" || strCommand == "missing" || strCommand == "disabled") { if ((strCommand == "missing" || strCommand == "disabled") && - (masternodeSync.RequestedMasternodeAssets <= MASTERNODE_SYNC_LIST || - masternodeSync.RequestedMasternodeAssets == MASTERNODE_SYNC_FAILED)) { - throw runtime_error("You can't use this command until masternode list is synced\n"); + (GridnodeSync.RequestedGridnodeAssets <= GRIDNODE_SYNC_LIST || + GridnodeSync.RequestedGridnodeAssets == GRIDNODE_SYNC_FAILED)) { + throw runtime_error("You can't use this command until gridnode list is synced\n"); } - std::vector mnEntries; - mnEntries = masternodeConfig.getEntries(); + std::vector gnEntries; + gnEntries = GridnodeConfig.getEntries(); int successful = 0; int failed = 0; UniValue resultsObj(UniValue::VARR); - BOOST_FOREACH (CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + BOOST_FOREACH (CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { std::string errorMessage; int nIndex; - if (!mne.castOutputIndex(nIndex)) + if (!gne.castOutputIndex(nIndex)) continue; - CTxIn vin = CTxIn(uint256(mne.getTxHash()), uint32_t(nIndex)); - CMasternode* pmn = mnodeman.Find(vin); - CMasternodeBroadcast mnb; + CTxIn vin = CTxIn(uint256(gne.getTxHash()), uint32_t(nIndex)); + CGridnode* pgn = gnodeman.Find(vin); + CGridnodeBroadcast gnb; - if (pmn != NULL) { + if (pgn != NULL) { if (strCommand == "missing") continue; - if (strCommand == "disabled" && pmn->IsEnabled()) continue; + if (strCommand == "disabled" && pgn->IsEnabled()) continue; } - bool result = activeMasternode.CreateBroadcast(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), errorMessage, mnb); + bool result = activeGridnode.CreateBroadcast(gne.getIp(), gne.getPrivKey(), gne.getTxHash(), gne.getOutputIndex(), errorMessage, gnb); UniValue statusObj(UniValue::VOBJ); - statusObj.push_back(Pair("alias", mne.getAlias())); + statusObj.push_back(Pair("alias", gne.getAlias())); statusObj.push_back(Pair("result", result ? "success" : "failed")); if (result) { successful++; statusObj.push_back(Pair("error", "")); - mnodeman.UpdateMasternodeList(mnb); - mnb.Relay(); + gnodeman.UpdateGridnodeList(gnb); + gnb.Relay(); } else { failed++; statusObj.push_back(Pair("error", errorMessage)); @@ -490,7 +611,7 @@ UniValue startmasternode(const UniValue& params, bool fHelp) pwalletMain->Lock(); UniValue returnObj(UniValue::VOBJ); - returnObj.push_back(Pair("overall", strprintf("Successfully started %d masternodes, failed to start %d, total %d", successful, failed, successful + failed))); + returnObj.push_back(Pair("overall", strprintf("Successfully started %d Gridnodes, failed to start %d, total %d", successful, failed, successful + failed))); returnObj.push_back(Pair("detail", resultsObj)); return returnObj; @@ -507,20 +628,20 @@ UniValue startmasternode(const UniValue& params, bool fHelp) UniValue statusObj(UniValue::VOBJ); statusObj.push_back(Pair("alias", alias)); - BOOST_FOREACH (CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - if (mne.getAlias() == alias) { + BOOST_FOREACH (CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { + if (gne.getAlias() == alias) { found = true; std::string errorMessage; - CMasternodeBroadcast mnb; + CGridnodeBroadcast gnb; - bool result = activeMasternode.CreateBroadcast(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), errorMessage, mnb); + bool result = activeGridnode.CreateBroadcast(gne.getIp(), gne.getPrivKey(), gne.getTxHash(), gne.getOutputIndex(), errorMessage, gnb); statusObj.push_back(Pair("result", result ? "successful" : "failed")); if (result) { successful++; - mnodeman.UpdateMasternodeList(mnb); - mnb.Relay(); + gnodeman.UpdateGridnodeList(gnb); + gnb.Relay(); } else { failed++; statusObj.push_back(Pair("errorMessage", errorMessage)); @@ -541,7 +662,7 @@ UniValue startmasternode(const UniValue& params, bool fHelp) pwalletMain->Lock(); UniValue returnObj(UniValue::VOBJ); - returnObj.push_back(Pair("overall", strprintf("Successfully started %d masternodes, failed to start %d, total %d", successful, failed, successful + failed))); + returnObj.push_back(Pair("overall", strprintf("Successfully started %d Gridnodes, failed to start %d, total %d", successful, failed, successful + failed))); returnObj.push_back(Pair("detail", resultsObj)); return returnObj; @@ -549,18 +670,18 @@ UniValue startmasternode(const UniValue& params, bool fHelp) return NullUniValue; } -UniValue createmasternodekey(const UniValue& params, bool fHelp) +UniValue creategridnodekey(const UniValue& params, bool fHelp) { if (fHelp || (params.size() != 0)) throw runtime_error( - "createmasternodekey\n" - "\nCreate a new masternode private key\n" + "creategridnodekey\n" + "\nCreate a new gridnode private key\n" "\nResult:\n" - "\"key\" (string) Masternode private key\n" + "\"key\" (string) Gridnode private key\n" "\nExamples:\n" + - HelpExampleCli("createmasternodekey", "") + HelpExampleRpc("createmasternodekey", "")); + HelpExampleCli("creategridnodekey", "") + HelpExampleRpc("creategridnodekey", "")); CKey secret; secret.MakeNewKey(false); @@ -568,12 +689,12 @@ UniValue createmasternodekey(const UniValue& params, bool fHelp) return CBitcoinSecret(secret).ToString(); } -UniValue getmasternodeoutputs(const UniValue& params, bool fHelp) +UniValue getgridnodeoutputs(const UniValue& params, bool fHelp) { if (fHelp || (params.size() != 0)) throw runtime_error( - "getmasternodeoutputs\n" - "\nPrint all masternode transaction outputs\n" + "getgridnodeoutputs\n" + "\nPrint all gridnode transaction outputs\n" "\nResult:\n" "[\n" @@ -585,10 +706,10 @@ UniValue getmasternodeoutputs(const UniValue& params, bool fHelp) "]\n" "\nExamples:\n" + - HelpExampleCli("getmasternodeoutputs", "") + HelpExampleRpc("getmasternodeoutputs", "")); + HelpExampleCli("getgridnodeoutputs", "") + HelpExampleRpc("getgridnodeoutputs", "")); // Find possible candidates - vector possibleCoins = activeMasternode.SelectCoinsMasternode(); + vector possibleCoins = activeGridnode.SelectCoinsGridnode(); UniValue ret(UniValue::VARR); BOOST_FOREACH (COutput& out, possibleCoins) { @@ -601,7 +722,7 @@ UniValue getmasternodeoutputs(const UniValue& params, bool fHelp) return ret; } -UniValue listmasternodeconf(const UniValue& params, bool fHelp) +UniValue listgridnodeconf(const UniValue& params, bool fHelp) { std::string strFilter = ""; @@ -609,8 +730,8 @@ UniValue listmasternodeconf(const UniValue& params, bool fHelp) if (fHelp || (params.size() > 1)) throw runtime_error( - "listmasternodeconf ( \"filter\" )\n" - "\nPrint masternode.conf in JSON format\n" + "listgridnodeconf ( \"filter\" )\n" + "\nPrint gridnode.conf in JSON format\n" "\nArguments:\n" "1. \"filter\" (string, optional) Filter search text. Partial match on alias, address, txHash, or status.\n" @@ -618,105 +739,105 @@ UniValue listmasternodeconf(const UniValue& params, bool fHelp) "\nResult:\n" "[\n" " {\n" - " \"alias\": \"xxxx\", (string) masternode alias\n" - " \"address\": \"xxxx\", (string) masternode IP address\n" - " \"privateKey\": \"xxxx\", (string) masternode private key\n" + " \"alias\": \"xxxx\", (string) gridnode alias\n" + " \"address\": \"xxxx\", (string) gridnode IP address\n" + " \"privateKey\": \"xxxx\", (string) gridnode private key\n" " \"txHash\": \"xxxx\", (string) transaction hash\n" " \"outputIndex\": n, (numeric) transaction output index\n" - " \"status\": \"xxxx\" (string) masternode status\n" + " \"status\": \"xxxx\" (string) gridnode status\n" " }\n" " ,...\n" "]\n" "\nExamples:\n" + - HelpExampleCli("listmasternodeconf", "") + HelpExampleRpc("listmasternodeconf", "")); + HelpExampleCli("listgridnodeconf", "") + HelpExampleRpc("listgridnodeconf", "")); - std::vector mnEntries; - mnEntries = masternodeConfig.getEntries(); + std::vector gnEntries; + gnEntries = GridnodeConfig.getEntries(); UniValue ret(UniValue::VARR); - BOOST_FOREACH (CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + BOOST_FOREACH (CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { int nIndex; - if (!mne.castOutputIndex(nIndex)) + if (!gne.castOutputIndex(nIndex)) continue; - CTxIn vin = CTxIn(uint256(mne.getTxHash()), uint32_t(nIndex)); - CMasternode* pmn = mnodeman.Find(vin); + CTxIn vin = CTxIn(uint256(gne.getTxHash()), uint32_t(nIndex)); + CGridnode* pgn = gnodeman.Find(vin); - std::string strStatus = pmn ? pmn->Status() : "MISSING"; + std::string strStatus = pgn ? pgn->Status() : "MISSING"; - if (strFilter != "" && mne.getAlias().find(strFilter) == string::npos && - mne.getIp().find(strFilter) == string::npos && - mne.getTxHash().find(strFilter) == string::npos && + if (strFilter != "" && gne.getAlias().find(strFilter) == string::npos && + gne.getIp().find(strFilter) == string::npos && + gne.getTxHash().find(strFilter) == string::npos && strStatus.find(strFilter) == string::npos) continue; - UniValue mnObj(UniValue::VOBJ); - mnObj.push_back(Pair("alias", mne.getAlias())); - mnObj.push_back(Pair("address", mne.getIp())); - mnObj.push_back(Pair("privateKey", mne.getPrivKey())); - mnObj.push_back(Pair("txHash", mne.getTxHash())); - mnObj.push_back(Pair("outputIndex", mne.getOutputIndex())); - mnObj.push_back(Pair("status", strStatus)); - ret.push_back(mnObj); + UniValue gnObj(UniValue::VOBJ); + gnObj.push_back(Pair("alias", gne.getAlias())); + gnObj.push_back(Pair("address", gne.getIp())); + gnObj.push_back(Pair("privateKey", gne.getPrivKey())); + gnObj.push_back(Pair("txHash", gne.getTxHash())); + gnObj.push_back(Pair("outputIndex", gne.getOutputIndex())); + gnObj.push_back(Pair("status", strStatus)); + ret.push_back(gnObj); } return ret; } -UniValue getmasternodestatus(const UniValue& params, bool fHelp) +UniValue getgridnodestatus(const UniValue& params, bool fHelp) { if (fHelp || (params.size() != 0)) throw runtime_error( - "getmasternodestatus\n" - "\nPrint masternode status\n" + "getgridnodestatus\n" + "\nPrint gridnode status\n" "\nResult:\n" "{\n" " \"txhash\": \"xxxx\", (string) Collateral transaction hash\n" " \"outputidx\": n, (numeric) Collateral transaction output index number\n" - " \"netaddr\": \"xxxx\", (string) Masternode network address\n" - " \"addr\": \"xxxx\", (string) UNIGRID address for masternode payments\n" - " \"status\": \"xxxx\", (string) Masternode status\n" - " \"message\": \"xxxx\" (string) Masternode status message\n" + " \"netaddr\": \"xxxx\", (string) Gridnode network address\n" + " \"addr\": \"xxxx\", (string) UNIGRID address for gridnode payments\n" + " \"status\": \"xxxx\", (string) Gridnode status\n" + " \"message\": \"xxxx\" (string) Gridnode status message\n" "}\n" "\nExamples:\n" + - HelpExampleCli("getmasternodestatus", "") + HelpExampleRpc("getmasternodestatus", "")); + HelpExampleCli("getgridnodestatus", "") + HelpExampleRpc("getgridnodestatus", "")); - if (!fMasterNode) throw runtime_error("This is not a masternode"); + if (!fGridnode) throw runtime_error("This is not a gridnode"); - CMasternode* pmn = mnodeman.Find(activeMasternode.vin); + CGridnode* pgn = gnodeman.Find(activeGridnode.vin); - if (pmn) { - UniValue mnObj(UniValue::VOBJ); - mnObj.push_back(Pair("txhash", activeMasternode.vin.prevout.hash.ToString())); - mnObj.push_back(Pair("outputidx", (uint64_t)activeMasternode.vin.prevout.n)); - mnObj.push_back(Pair("netaddr", activeMasternode.service.ToString())); - mnObj.push_back(Pair("addr", CBitcoinAddress(pmn->pubKeyCollateralAddress.GetID()).ToString())); - mnObj.push_back(Pair("status", activeMasternode.status)); - mnObj.push_back(Pair("message", activeMasternode.GetStatus())); - return mnObj; + if (pgn) { + UniValue gnObj(UniValue::VOBJ); + gnObj.push_back(Pair("txhash", activeGridnode.vin.prevout.hash.ToString())); + gnObj.push_back(Pair("outputidx", (uint64_t)activeGridnode.vin.prevout.n)); + gnObj.push_back(Pair("netaddr", activeGridnode.service.ToString())); + gnObj.push_back(Pair("addr", CBitcoinAddress(pgn->pubKeyCollateralAddress.GetID()).ToString())); + gnObj.push_back(Pair("status", activeGridnode.status)); + gnObj.push_back(Pair("message", activeGridnode.GetStatus())); + return gnObj; } - throw runtime_error("Masternode not found in the list of available masternodes. Current status: " + activeMasternode.GetStatus()); + throw runtime_error("Gridnode not found in the list of available Gridnodes. Current status: " + activeGridnode.GetStatus()); } -UniValue getmasternodewinners(const UniValue& params, bool fHelp) +UniValue getgridnodewinners(const UniValue& params, bool fHelp) { if (fHelp || params.size() > 3) throw runtime_error( - "getmasternodewinners ( blocks \"filter\" )\n" - "\nPrint the masternode winners for the last n blocks\n" + "getgridnodewinners ( blocks \"filter\" )\n" + "\nPrint the gridnode winners for the last n blocks\n" "\nArguments:\n" "1. blocks (numeric, optional) Number of previous blocks to show (default: 10)\n" - "2. filter (string, optional) Search filter matching MN address\n" + "2. filter (string, optional) Search filter matching GM address\n" "\nResult (single winner):\n" "[\n" " {\n" " \"nHeight\": n, (numeric) block height\n" " \"winner\": {\n" - " \"address\": \"xxxx\", (string) UNIGRID MN Address\n" + " \"address\": \"xxxx\", (string) UNIGRID GM Address\n" " \"nVotes\": n, (numeric) Number of votes for winner\n" " }\n" " }\n" @@ -729,7 +850,7 @@ UniValue getmasternodewinners(const UniValue& params, bool fHelp) " \"nHeight\": n, (numeric) block height\n" " \"winner\": [\n" " {\n" - " \"address\": \"xxxx\", (string) UNIGRID MN Address\n" + " \"address\": \"xxxx\", (string) UNIGRID GM Address\n" " \"nVotes\": n, (numeric) Number of votes for winner\n" " }\n" " ,...\n" @@ -739,7 +860,7 @@ UniValue getmasternodewinners(const UniValue& params, bool fHelp) "]\n" "\nExamples:\n" + - HelpExampleCli("getmasternodewinners", "") + HelpExampleRpc("getmasternodewinners", "")); + HelpExampleCli("getgridnodewinners", "") + HelpExampleRpc("getgridnodewinners", "")); int nHeight; { @@ -802,24 +923,24 @@ UniValue getmasternodewinners(const UniValue& params, bool fHelp) return ret; } -UniValue getmasternodescores(const UniValue& params, bool fHelp) +UniValue getgridnodescores(const UniValue& params, bool fHelp) { if (fHelp || params.size() > 1) throw runtime_error( - "getmasternodescores ( blocks )\n" - "\nPrint list of winning masternode by score\n" + "getgridnodescores ( blocks )\n" + "\nPrint list of winning gridnode by score\n" "\nArguments:\n" "1. blocks (numeric, optional) Show the last n blocks (default 10)\n" "\nResult:\n" "{\n" - " xxxx: \"xxxx\" (numeric : string) Block height : Masternode hash\n" + " xxxx: \"xxxx\" (numeric : string) Block height : Gridnode hash\n" " ,...\n" "}\n" "\nExamples:\n" + - HelpExampleCli("getmasternodescores", "") + HelpExampleRpc("getmasternodescores", "")); + HelpExampleCli("getgridnodescores", "") + HelpExampleRpc("getgridnodescores", "")); int nLast = 10; @@ -832,25 +953,25 @@ UniValue getmasternodescores(const UniValue& params, bool fHelp) } UniValue obj(UniValue::VOBJ); - std::vector vMasternodes = mnodeman.GetFullMasternodeVector(); + std::vector vGridnodes = gnodeman.GetFullGridnodeVector(); for (int nHeight = chainActive.Tip()->nHeight - nLast; nHeight < chainActive.Tip()->nHeight + 20; nHeight++) { uint256 nHigh = 0; - CMasternode* pBestMasternode = NULL; - BOOST_FOREACH (CMasternode& mn, vMasternodes) { - uint256 n = mn.CalculateScore(1, nHeight - 100); + CGridnode* pBestGridnode = NULL; + BOOST_FOREACH (CGridnode& gn, vGridnodes) { + uint256 n = gn.CalculateScore(1, nHeight - 100); if (n > nHigh) { nHigh = n; - pBestMasternode = &mn; + pBestGridnode = &gn; } } - if (pBestMasternode) - obj.push_back(Pair(strprintf("%d", nHeight), pBestMasternode->vin.prevout.hash.ToString().c_str())); + if (pBestGridnode) + obj.push_back(Pair(strprintf("%d", nHeight), pBestGridnode->vin.prevout.hash.ToString().c_str())); } return obj; } -bool DecodeHexMnb(CMasternodeBroadcast& mnb, std::string strHexMnb) +bool DecodeHexMnb(CGridnodeBroadcast& gnb, std::string strHexMnb) { if (!IsHex(strHexMnb)) return false; @@ -858,34 +979,34 @@ bool DecodeHexMnb(CMasternodeBroadcast& mnb, std::string strHexMnb) vector mnbData(ParseHex(strHexMnb)); CDataStream ssData(mnbData, SER_NETWORK, PROTOCOL_VERSION); try { - ssData >> mnb; + ssData >> gnb; } catch (const std::exception&) { return false; } return true; } -UniValue createmasternodebroadcast(const UniValue& params, bool fHelp) +UniValue creategridnodebroadcast(const UniValue& params, bool fHelp) { string strCommand; if (params.size() >= 1) strCommand = params[0].get_str(); if (fHelp || (strCommand != "alias" && strCommand != "all") || (strCommand == "alias" && params.size() < 2)) throw runtime_error( - "createmasternodebroadcast \"command\" ( \"alias\")\n" - "\nCreates a masternode broadcast message for one or all masternodes configured in masternode.conf\n" + + "creategridnodebroadcast \"command\" ( \"alias\")\n" + "\nCreates a gridnode broadcast message for one or all Gridnodes configured in gridnode.conf\n" + HelpRequiringPassphrase() + "\n" "\nArguments:\n" - "1. \"command\" (string, required) \"alias\" for single masternode, \"all\" for all masternodes\n" - "2. \"alias\" (string, required if command is \"alias\") Alias of the masternode\n" + "1. \"command\" (string, required) \"alias\" for single gridnode, \"all\" for all Gridnodes\n" + "2. \"alias\" (string, required if command is \"alias\") Alias of the gridnode\n" "\nResult (all):\n" "{\n" " \"overall\": \"xxx\", (string) Overall status message indicating number of successes.\n" " \"detail\": [ (array) JSON array of broadcast objects.\n" " {\n" - " \"alias\": \"xxx\", (string) Alias of the masternode.\n" + " \"alias\": \"xxx\", (string) Alias of the gridnode.\n" " \"success\": true|false, (boolean) Success status.\n" " \"hex\": \"xxx\" (string, if success=true) Hex encoded broadcast message.\n" " \"error_message\": \"xxx\" (string, if success=false) Error message, if any.\n" @@ -896,14 +1017,14 @@ UniValue createmasternodebroadcast(const UniValue& params, bool fHelp) "\nResult (alias):\n" "{\n" - " \"alias\": \"xxx\", (string) Alias of the masternode.\n" + " \"alias\": \"xxx\", (string) Alias of the gridnode.\n" " \"success\": true|false, (boolean) Success status.\n" " \"hex\": \"xxx\" (string, if success=true) Hex encoded broadcast message.\n" " \"error_message\": \"xxx\" (string, if success=false) Error message, if any.\n" "}\n" "\nExamples:\n" + - HelpExampleCli("createmasternodebroadcast", "alias mymn1") + HelpExampleRpc("createmasternodebroadcast", "alias mymn1")); + HelpExampleCli("creategridnodebroadcast", "alias mymn1") + HelpExampleRpc("creategridnodebroadcast", "alias mymn1")); EnsureWalletIsUnlocked(); @@ -918,18 +1039,18 @@ UniValue createmasternodebroadcast(const UniValue& params, bool fHelp) UniValue statusObj(UniValue::VOBJ); statusObj.push_back(Pair("alias", alias)); - BOOST_FOREACH (CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { - if (mne.getAlias() == alias) { + BOOST_FOREACH (CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { + if (gne.getAlias() == alias) { found = true; std::string errorMessage; - CMasternodeBroadcast mnb; + CGridnodeBroadcast gnb; - bool success = activeMasternode.CreateBroadcast(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), errorMessage, mnb, true); + bool success = activeGridnode.CreateBroadcast(gne.getIp(), gne.getPrivKey(), gne.getTxHash(), gne.getOutputIndex(), errorMessage, gnb, true); statusObj.push_back(Pair("success", success)); if (success) { CDataStream ssMnb(SER_NETWORK, PROTOCOL_VERSION); - ssMnb << mnb; + ssMnb << gnb; statusObj.push_back(Pair("hex", HexStr(ssMnb.begin(), ssMnb.end()))); } else { statusObj.push_back(Pair("error_message", errorMessage)); @@ -951,30 +1072,30 @@ UniValue createmasternodebroadcast(const UniValue& params, bool fHelp) if (fImporting || fReindex) throw JSONRPCError(RPC_INTERNAL_ERROR, "Wait for reindex and/or import to finish"); - std::vector mnEntries; - mnEntries = masternodeConfig.getEntries(); + std::vector gnEntries; + gnEntries = GridnodeConfig.getEntries(); int successful = 0; int failed = 0; UniValue resultsObj(UniValue::VARR); - BOOST_FOREACH (CMasternodeConfig::CMasternodeEntry mne, masternodeConfig.getEntries()) { + BOOST_FOREACH (CGridnodeConfig::CGridnodeEntry gne, GridnodeConfig.getEntries()) { std::string errorMessage; - CTxIn vin = CTxIn(uint256S(mne.getTxHash()), uint32_t(atoi(mne.getOutputIndex().c_str()))); - CMasternodeBroadcast mnb; + CTxIn vin = CTxIn(uint256S(gne.getTxHash()), uint32_t(atoi(gne.getOutputIndex().c_str()))); + CGridnodeBroadcast gnb; - bool success = activeMasternode.CreateBroadcast(mne.getIp(), mne.getPrivKey(), mne.getTxHash(), mne.getOutputIndex(), errorMessage, mnb, true); + bool success = activeGridnode.CreateBroadcast(gne.getIp(), gne.getPrivKey(), gne.getTxHash(), gne.getOutputIndex(), errorMessage, gnb, true); UniValue statusObj(UniValue::VOBJ); - statusObj.push_back(Pair("alias", mne.getAlias())); + statusObj.push_back(Pair("alias", gne.getAlias())); statusObj.push_back(Pair("success", success)); if (success) { successful++; CDataStream ssMnb(SER_NETWORK, PROTOCOL_VERSION); - ssMnb << mnb; + ssMnb << gnb; statusObj.push_back(Pair("hex", HexStr(ssMnb.begin(), ssMnb.end()))); } else { failed++; @@ -985,7 +1106,7 @@ UniValue createmasternodebroadcast(const UniValue& params, bool fHelp) } UniValue returnObj(UniValue::VOBJ); - returnObj.push_back(Pair("overall", strprintf("Successfully created broadcast messages for %d masternodes, failed to create %d, total %d", successful, failed, successful + failed))); + returnObj.push_back(Pair("overall", strprintf("Successfully created broadcast messages for %d Gridnodes, failed to create %d, total %d", successful, failed, successful + failed))); returnObj.push_back(Pair("detail", resultsObj)); return returnObj; @@ -993,90 +1114,90 @@ UniValue createmasternodebroadcast(const UniValue& params, bool fHelp) return NullUniValue; } -UniValue decodemasternodebroadcast(const UniValue& params, bool fHelp) +UniValue decodegridnodebroadcast(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "decodemasternodebroadcast \"hexstring\"\n" - "\nCommand to decode masternode broadcast messages\n" + "decodegridnodebroadcast \"hexstring\"\n" + "\nCommand to decode gridnode broadcast messages\n" "\nArgument:\n" - "1. \"hexstring\" (string) The hex encoded masternode broadcast message\n" + "1. \"hexstring\" (string) The hex encoded gridnode broadcast message\n" "\nResult:\n" "{\n" - " \"vin\": \"xxxx\" (string) The unspent output which is holding the masternode collateral\n" - " \"addr\": \"xxxx\" (string) IP address of the masternode\n" + " \"vin\": \"xxxx\" (string) The unspent output which is holding the gridnode collateral\n" + " \"addr\": \"xxxx\" (string) IP address of the gridnode\n" " \"pubkeycollateral\": \"xxxx\" (string) Collateral address's public key\n" - " \"pubkeymasternode\": \"xxxx\" (string) Masternode's public key\n" + " \"pubkeyGridnode\": \"xxxx\" (string) Gridnode's public key\n" " \"vchsig\": \"xxxx\" (string) Base64-encoded signature of this message (verifiable via pubkeycollateral)\n" " \"sigtime\": \"nnn\" (numeric) Signature timestamp\n" - " \"protocolversion\": \"nnn\" (numeric) Masternode's protocol version\n" - " \"nlastdsq\": \"nnn\" (numeric) The last time the masternode sent a DSQ message (for mixing) (DEPRECATED)\n" - " \"lastping\" : { (object) JSON object with information about the masternode's last ping\n" - " \"vin\": \"xxxx\" (string) The unspent output of the masternode which is signing the message\n" + " \"protocolversion\": \"nnn\" (numeric) Gridnode's protocol version\n" + " \"nlastdsq\": \"nnn\" (numeric) The last time the gridnode sent a DSQ message (for mixing) (DEPRECATED)\n" + " \"lastping\" : { (object) JSON object with information about the gridnode's last ping\n" + " \"vin\": \"xxxx\" (string) The unspent output of the gridnode which is signing the message\n" " \"blockhash\": \"xxxx\" (string) Current chaintip blockhash minus 12\n" " \"sigtime\": \"nnn\" (numeric) Signature time for this ping\n" - " \"vchsig\": \"xxxx\" (string) Base64-encoded signature of this ping (verifiable via pubkeymasternode)\n" + " \"vchsig\": \"xxxx\" (string) Base64-encoded signature of this ping (verifiable via pubkeyGridnode)\n" "}\n" "\nExamples:\n" + - HelpExampleCli("decodemasternodebroadcast", "hexstring") + HelpExampleRpc("decodemasternodebroadcast", "hexstring")); + HelpExampleCli("decodegridnodebroadcast", "hexstring") + HelpExampleRpc("decodegridnodebroadcast", "hexstring")); - CMasternodeBroadcast mnb; + CGridnodeBroadcast gnb; - if (!DecodeHexMnb(mnb, params[0].get_str())) - throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Masternode broadcast message decode failed"); + if (!DecodeHexMnb(gnb, params[0].get_str())) + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Gridnode broadcast message decode failed"); - if (!mnb.VerifySignature()) - throw JSONRPCError(RPC_INVALID_PARAMETER, "Masternode broadcast signature verification failed"); + if (!gnb.VerifySignature()) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Gridnode broadcast signature verification failed"); UniValue resultObj(UniValue::VOBJ); - resultObj.push_back(Pair("vin", mnb.vin.prevout.ToString())); - resultObj.push_back(Pair("addr", mnb.addr.ToString())); - resultObj.push_back(Pair("pubkeycollateral", CBitcoinAddress(mnb.pubKeyCollateralAddress.GetID()).ToString())); - resultObj.push_back(Pair("pubkeymasternode", CBitcoinAddress(mnb.pubKeyMasternode.GetID()).ToString())); - resultObj.push_back(Pair("vchsig", EncodeBase64(&mnb.sig[0], mnb.sig.size()))); - resultObj.push_back(Pair("sigtime", mnb.sigTime)); - resultObj.push_back(Pair("protocolversion", mnb.protocolVersion)); - resultObj.push_back(Pair("nlastdsq", mnb.nLastDsq)); + resultObj.push_back(Pair("vin", gnb.vin.prevout.ToString())); + resultObj.push_back(Pair("addr", gnb.addr.ToString())); + resultObj.push_back(Pair("pubkeycollateral", CBitcoinAddress(gnb.pubKeyCollateralAddress.GetID()).ToString())); + resultObj.push_back(Pair("pubkeyGridnode", CBitcoinAddress(gnb.pubKeyGridnode.GetID()).ToString())); + resultObj.push_back(Pair("vchsig", EncodeBase64(&gnb.sig[0], gnb.sig.size()))); + resultObj.push_back(Pair("sigtime", gnb.sigTime)); + resultObj.push_back(Pair("protocolversion", gnb.protocolVersion)); + resultObj.push_back(Pair("nlastdsq", gnb.nLastDsq)); UniValue lastPingObj(UniValue::VOBJ); - lastPingObj.push_back(Pair("vin", mnb.lastPing.vin.prevout.ToString())); - lastPingObj.push_back(Pair("blockhash", mnb.lastPing.blockHash.ToString())); - lastPingObj.push_back(Pair("sigtime", mnb.lastPing.sigTime)); - lastPingObj.push_back(Pair("vchsig", EncodeBase64(&mnb.lastPing.vchSig[0], mnb.lastPing.vchSig.size()))); + lastPingObj.push_back(Pair("vin", gnb.lastPing.vin.prevout.ToString())); + lastPingObj.push_back(Pair("blockhash", gnb.lastPing.blockHash.ToString())); + lastPingObj.push_back(Pair("sigtime", gnb.lastPing.sigTime)); + lastPingObj.push_back(Pair("vchsig", EncodeBase64(&gnb.lastPing.vchSig[0], gnb.lastPing.vchSig.size()))); resultObj.push_back(Pair("lastping", lastPingObj)); return resultObj; } -UniValue relaymasternodebroadcast(const UniValue& params, bool fHelp) +UniValue relaygridnodebroadcast(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "relaymasternodebroadcast \"hexstring\"\n" - "\nCommand to relay masternode broadcast messages\n" + "relaygridnodebroadcast \"hexstring\"\n" + "\nCommand to relay gridnode broadcast messages\n" "\nArguments:\n" - "1. \"hexstring\" (string) The hex encoded masternode broadcast message\n" + "1. \"hexstring\" (string) The hex encoded gridnode broadcast message\n" "\nExamples:\n" + - HelpExampleCli("relaymasternodebroadcast", "hexstring") + HelpExampleRpc("relaymasternodebroadcast", "hexstring")); + HelpExampleCli("relaygridnodebroadcast", "hexstring") + HelpExampleRpc("relaygridnodebroadcast", "hexstring")); - CMasternodeBroadcast mnb; + CGridnodeBroadcast gnb; - if (!DecodeHexMnb(mnb, params[0].get_str())) - throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Masternode broadcast message decode failed"); + if (!DecodeHexMnb(gnb, params[0].get_str())) + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Gridnode broadcast message decode failed"); - if (!mnb.VerifySignature()) - throw JSONRPCError(RPC_INVALID_PARAMETER, "Masternode broadcast signature verification failed"); + if (!gnb.VerifySignature()) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Gridnode broadcast signature verification failed"); - mnodeman.UpdateMasternodeList(mnb); - mnb.Relay(); + gnodeman.UpdateGridnodeList(gnb); + gnb.Relay(); - return strprintf("Masternode broadcast sent (service %s, vin %s)", mnb.addr.ToString(), mnb.vin.ToString()); + return strprintf("Gridnode broadcast sent (service %s, vin %s)", gnb.addr.ToString(), gnb.vin.ToString()); } diff --git a/daemon/rpcmining.cpp b/daemon/rpcmining.cpp index cd34f94621f0..9b9beeac764a 100644 --- a/daemon/rpcmining.cpp +++ b/daemon/rpcmining.cpp @@ -380,8 +380,8 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp) " { ... } (json object) vote candidate\n" " ,...\n" " ],\n" - " \"masternode_payments\" : true|false, (boolean) true, if masternode payments are enabled\n" - " \"enforce_masternode_payments\" : true|false (boolean) true, if masternode payments are enforced\n" + " \"Gridnode_payments\" : true|false, (boolean) true, if gridnode payments are enabled\n" + " \"enforce_Gridnode_payments\" : true|false (boolean) true, if gridnode payments are enforced\n" "}\n" "\nExamples:\n" + @@ -593,8 +593,8 @@ UniValue getblocktemplate(const UniValue& params, bool fHelp) result.push_back(Pair("payee_amount", "")); } - result.push_back(Pair("masternode_payments", pblock->nTime > Params().StartMasternodePayments())); - result.push_back(Pair("enforce_masternode_payments", true)); + result.push_back(Pair("Gridnode_payments", pblock->nTime > Params().StartGridnodePayments())); + result.push_back(Pair("enforce_Gridnode_payments", true)); return result; } diff --git a/daemon/rpcmisc.cpp b/daemon/rpcmisc.cpp index 24f97eb23709..b3589efe84f6 100644 --- a/daemon/rpcmisc.cpp +++ b/daemon/rpcmisc.cpp @@ -11,7 +11,7 @@ #include "frontendprops.h" #include "init.h" #include "main.h" -#include "masternode-sync.h" +#include "gridnode-sync.h" #include "net.h" #include "netbase.h" #include "rpcserver.h" @@ -170,6 +170,8 @@ UniValue getinfo(const UniValue& params, bool fHelp) nStaking = true; else if (mapHashedBlocks.count(chainActive.Tip()->nHeight - 1) && nLastCoinStakeSearchInterval) nStaking = true; + LogPrintf("nstaking = %ld\n", nStaking); + LogPrintf("nLastCoinStakeSearchInterval = %ld\n", nLastCoinStakeSearchInterval); obj.push_back(Pair("staking status", (nStaking ? "Staking Active" : "Staking Not Active"))); obj.push_back(Pair("errors", GetWarnings("statusbar"))); @@ -234,7 +236,7 @@ UniValue getfrontendinfo(const UniValue& params, bool fHelp) } -UniValue mnsync(const UniValue& params, bool fHelp) +UniValue gnsync(const UniValue& params, bool fHelp) { std::string strMode; if (params.size() == 1) @@ -242,7 +244,7 @@ UniValue mnsync(const UniValue& params, bool fHelp) if (fHelp || params.size() != 1 || (strMode != "status" && strMode != "reset")) { throw runtime_error( - "mnsync \"status|reset\"\n" + "gnsync \"status|reset\"\n" "\nReturns the sync status or resets sync.\n" "\nArguments:\n" @@ -251,55 +253,55 @@ UniValue mnsync(const UniValue& params, bool fHelp) "\nResult ('status' mode):\n" "{\n" " \"IsBlockchainSynced\": true|false, (boolean) 'true' if blockchain is synced\n" - " \"lastMasternodeList\": xxxx, (numeric) Timestamp of last MN list message\n" - " \"lastMasternodeWinner\": xxxx, (numeric) Timestamp of last MN winner message\n" - " \"lastBudgetItem\": xxxx, (numeric) Timestamp of last MN budget message\n" + " \"lastGridnodeList\": xxxx, (numeric) Timestamp of last GM list message\n" + " \"lastGridnodeWinner\": xxxx, (numeric) Timestamp of last GM winner message\n" + " \"lastBudgetItem\": xxxx, (numeric) Timestamp of last GM budget message\n" " \"lastFailure\": xxxx, (numeric) Timestamp of last failed sync\n" " \"nCountFailures\": n, (numeric) Number of failed syncs (total)\n" - " \"sumMasternodeList\": n, (numeric) Number of MN list messages (total)\n" - " \"sumMasternodeWinner\": n, (numeric) Number of MN winner messages (total)\n" - " \"sumBudgetItemProp\": n, (numeric) Number of MN budget messages (total)\n" - " \"sumBudgetItemFin\": n, (numeric) Number of MN budget finalization messages (total)\n" - " \"countMasternodeList\": n, (numeric) Number of MN list messages (local)\n" - " \"countMasternodeWinner\": n, (numeric) Number of MN winner messages (local)\n" - " \"countBudgetItemProp\": n, (numeric) Number of MN budget messages (local)\n" - " \"countBudgetItemFin\": n, (numeric) Number of MN budget finalization messages (local)\n" - " \"RequestedMasternodeAssets\": n, (numeric) Status code of last sync phase\n" - " \"RequestedMasternodeAttempt\": n, (numeric) Status code of last sync attempt\n" + " \"sumGridnodeList\": n, (numeric) Number of GM list messages (total)\n" + " \"sumGridnodeWinner\": n, (numeric) Number of GM winner messages (total)\n" + " \"sumBudgetItemProp\": n, (numeric) Number of GM budget messages (total)\n" + " \"sumBudgetItemFin\": n, (numeric) Number of GM budget finalization messages (total)\n" + " \"countGridnodeList\": n, (numeric) Number of GM list messages (local)\n" + " \"countGridnodeWinner\": n, (numeric) Number of GM winner messages (local)\n" + " \"countBudgetItemProp\": n, (numeric) Number of GM budget messages (local)\n" + " \"countBudgetItemFin\": n, (numeric) Number of GM budget finalization messages (local)\n" + " \"RequestedGridnodeAssets\": n, (numeric) Status code of last sync phase\n" + " \"RequestedGridnodeAttempt\": n, (numeric) Status code of last sync attempt\n" "}\n" "\nResult ('reset' mode):\n" "\"status\" (string) 'success'\n" "\nExamples:\n" + - HelpExampleCli("mnsync", "\"status\"") + HelpExampleRpc("mnsync", "\"status\"")); + HelpExampleCli("gnsync", "\"status\"") + HelpExampleRpc("gnsync", "\"status\"")); } if (strMode == "status") { UniValue obj(UniValue::VOBJ); - obj.push_back(Pair("IsBlockchainSynced", masternodeSync.IsBlockchainSynced())); - obj.push_back(Pair("lastMasternodeList", masternodeSync.lastMasternodeList)); - obj.push_back(Pair("lastMasternodeWinner", masternodeSync.lastMasternodeWinner)); - obj.push_back(Pair("lastBudgetItem", masternodeSync.lastBudgetItem)); - obj.push_back(Pair("lastFailure", masternodeSync.lastFailure)); - obj.push_back(Pair("nCountFailures", masternodeSync.nCountFailures)); - obj.push_back(Pair("sumMasternodeList", masternodeSync.sumMasternodeList)); - obj.push_back(Pair("sumMasternodeWinner", masternodeSync.sumMasternodeWinner)); - obj.push_back(Pair("sumBudgetItemProp", masternodeSync.sumBudgetItemProp)); - obj.push_back(Pair("sumBudgetItemFin", masternodeSync.sumBudgetItemFin)); - obj.push_back(Pair("countMasternodeList", masternodeSync.countMasternodeList)); - obj.push_back(Pair("countMasternodeWinner", masternodeSync.countMasternodeWinner)); - obj.push_back(Pair("countBudgetItemProp", masternodeSync.countBudgetItemProp)); - obj.push_back(Pair("countBudgetItemFin", masternodeSync.countBudgetItemFin)); - obj.push_back(Pair("RequestedMasternodeAssets", masternodeSync.RequestedMasternodeAssets)); - obj.push_back(Pair("RequestedMasternodeAttempt", masternodeSync.RequestedMasternodeAttempt)); + obj.push_back(Pair("IsBlockchainSynced", GridnodeSync.IsBlockchainSynced())); + obj.push_back(Pair("lastGridnodeList", GridnodeSync.lastGridnodeList)); + obj.push_back(Pair("lastGridnodeWinner", GridnodeSync.lastGridnodeWinner)); + obj.push_back(Pair("lastBudgetItem", GridnodeSync.lastBudgetItem)); + obj.push_back(Pair("lastFailure", GridnodeSync.lastFailure)); + obj.push_back(Pair("nCountFailures", GridnodeSync.nCountFailures)); + obj.push_back(Pair("sumGridnodeList", GridnodeSync.sumGridnodeList)); + obj.push_back(Pair("sumGridnodeWinner", GridnodeSync.sumGridnodeWinner)); + obj.push_back(Pair("sumBudgetItemProp", GridnodeSync.sumBudgetItemProp)); + obj.push_back(Pair("sumBudgetItemFin", GridnodeSync.sumBudgetItemFin)); + obj.push_back(Pair("countGridnodeList", GridnodeSync.countGridnodeList)); + obj.push_back(Pair("countGridnodeWinner", GridnodeSync.countGridnodeWinner)); + obj.push_back(Pair("countBudgetItemProp", GridnodeSync.countBudgetItemProp)); + obj.push_back(Pair("countBudgetItemFin", GridnodeSync.countBudgetItemFin)); + obj.push_back(Pair("RequestedGridnodeAssets", GridnodeSync.RequestedGridnodeAssets)); + obj.push_back(Pair("RequestedGridnodeAttempt", GridnodeSync.RequestedGridnodeAttempt)); return obj; } if (strMode == "reset") { - masternodeSync.Reset(); + GridnodeSync.Reset(); return "success"; } return "failure"; @@ -665,7 +667,7 @@ UniValue getstakingstatus(const UniValue& params, bool fHelp) " \"walletunlocked\": true|false, (boolean) if the wallet is unlocked\n" " \"mintablecoins\": true|false, (boolean) if the wallet has mintable coins\n" " \"enoughcoins\": true|false, (boolean) if available coins are greater than reserve balance\n" - " \"mnsync\": true|false, (boolean) if masternode data is synced\n" + " \"gnsync\": true|false, (boolean) if gridnode data is synced\n" " \"staking status\": true|false, (boolean) if the wallet is staking or not\n" "}\n" @@ -686,7 +688,7 @@ UniValue getstakingstatus(const UniValue& params, bool fHelp) obj.push_back(Pair("mintablecoins", pwalletMain->MintableCoins())); obj.push_back(Pair("enoughcoins", nReserveBalance <= pwalletMain->GetBalance())); } - obj.push_back(Pair("mnsync", masternodeSync.IsSynced())); + obj.push_back(Pair("gnsync", GridnodeSync.IsSynced())); bool nStaking = false; if (mapHashedBlocks.count(chainActive.Tip()->nHeight)) diff --git a/daemon/rpcserver.cpp b/daemon/rpcserver.cpp index e61c7b093d6e..70725497ea85 100644 --- a/daemon/rpcserver.cpp +++ b/daemon/rpcserver.cpp @@ -369,34 +369,34 @@ static const CRPCCommand vRPCCommands[] = {"hidden", "setmocktime", &setmocktime, true, false, false}, /* UNIGRID features */ - {"unigrid", "masternode", &masternode, true, true, false}, - {"unigrid", "listmasternodes", &listmasternodes, true, true, false}, - {"unigrid", "getmasternodecount", &getmasternodecount, true, true, false}, - {"unigrid", "masternodeconnect", &masternodeconnect, true, true, false}, - {"unigrid", "createmasternodebroadcast", &createmasternodebroadcast, true, true, false}, - {"unigrid", "decodemasternodebroadcast", &decodemasternodebroadcast, true, true, false}, - {"unigrid", "relaymasternodebroadcast", &relaymasternodebroadcast, true, true, false}, - {"unigrid", "masternodecurrent", &masternodecurrent, true, true, false}, - {"unigrid", "masternodedebug", &masternodedebug, true, true, false}, - {"unigrid", "startmasternode", &startmasternode, true, true, false}, - {"unigrid", "createmasternodekey", &createmasternodekey, true, true, false}, - {"unigrid", "getmasternodeoutputs", &getmasternodeoutputs, true, true, false}, - {"unigrid", "listmasternodeconf", &listmasternodeconf, true, true, false}, - {"unigrid", "getmasternodestatus", &getmasternodestatus, true, true, false}, - {"unigrid", "getmasternodewinners", &getmasternodewinners, true, true, false}, - {"unigrid", "getmasternodescores", &getmasternodescores, true, true, false}, - {"unigrid", "mnbudget", &mnbudget, true, true, false}, + {"unigrid", "gridnode", &gridnode, true, true, false}, + {"unigrid", "listgridnodes", &listgridnodes, true, true, false}, + {"unigrid", "getgridnodecount", &getgridnodecount, true, true, false}, + {"unigrid", "gridnodeconnect", &gridnodeconnect, true, true, false}, + {"unigrid", "creategridnodebroadcast", &creategridnodebroadcast, true, true, false}, + {"unigrid", "decodegridnodebroadcast", &decodegridnodebroadcast, true, true, false}, + {"unigrid", "relaygridnodebroadcast", &relaygridnodebroadcast, true, true, false}, + {"unigrid", "gridnodecurrent", &gridnodecurrent, true, true, false}, + {"unigrid", "gridnodedebug", &gridnodedebug, true, true, false}, + {"unigrid", "startgridnode", &startgridnode, true, true, false}, + {"unigrid", "creategridnodekey", &creategridnodekey, true, true, false}, + {"unigrid", "getgridnodeoutputs", &getgridnodeoutputs, true, true, false}, + {"unigrid", "listgridnodeconf", &listgridnodeconf, true, true, false}, + {"unigrid", "getgridnodestatus", &getgridnodestatus, true, true, false}, + {"unigrid", "getgridnodewinners", &getgridnodewinners, true, true, false}, + {"unigrid", "getgridnodescores", &getgridnodescores, true, true, false}, + {"unigrid", "gnbudget", &gnbudget, true, true, false}, {"unigrid", "preparebudget", &preparebudget, true, true, false}, {"unigrid", "submitbudget", &submitbudget, true, true, false}, - {"unigrid", "mnbudgetvote", &mnbudgetvote, true, true, false}, + {"unigrid", "gnbudgetvote", &gnbudgetvote, true, true, false}, {"unigrid", "getbudgetvotes", &getbudgetvotes, true, true, false}, {"unigrid", "getnextsuperblock", &getnextsuperblock, true, true, false}, {"unigrid", "getbudgetprojection", &getbudgetprojection, true, true, false}, {"unigrid", "getbudgetinfo", &getbudgetinfo, true, true, false}, - {"unigrid", "mnbudgetrawvote", &mnbudgetrawvote, true, true, false}, - {"unigrid", "mnfinalbudget", &mnfinalbudget, true, true, false}, + {"unigrid", "gnbudgetrawvote", &gnbudgetrawvote, true, true, false}, + {"unigrid", "gnfinalbudget", &gnfinalbudget, true, true, false}, {"unigrid", "checkbudgets", &checkbudgets, true, true, false}, - {"unigrid", "mnsync", &mnsync, true, true, false}, + {"unigrid", "gnsync", &gnsync, true, true, false}, {"unigrid", "spork", &spork, true, true, false}, {"unigrid", "getpoolinfo", &getpoolinfo, true, true, false}, diff --git a/daemon/rpcserver.h b/daemon/rpcserver.h index 588d438599f3..97d340c42755 100644 --- a/daemon/rpcserver.h +++ b/daemon/rpcserver.h @@ -270,40 +270,41 @@ extern UniValue invalidateblock(const UniValue& params, bool fHelp); extern UniValue reconsiderblock(const UniValue& params, bool fHelp); extern UniValue getaccumulatorvalues(const UniValue& params, bool fHelp); -extern UniValue getpoolinfo(const UniValue& params, bool fHelp); // in rpcmasternode.cpp -extern UniValue masternode(const UniValue& params, bool fHelp); -extern UniValue listmasternodes(const UniValue& params, bool fHelp); -extern UniValue getmasternodecount(const UniValue& params, bool fHelp); -extern UniValue createmasternodebroadcast(const UniValue& params, bool fHelp); -extern UniValue decodemasternodebroadcast(const UniValue& params, bool fHelp); -extern UniValue relaymasternodebroadcast(const UniValue& params, bool fHelp); -extern UniValue masternodeconnect(const UniValue& params, bool fHelp); -extern UniValue masternodecurrent(const UniValue& params, bool fHelp); -extern UniValue masternodedebug(const UniValue& params, bool fHelp); -extern UniValue startmasternode(const UniValue& params, bool fHelp); -extern UniValue createmasternodekey(const UniValue& params, bool fHelp); -extern UniValue getmasternodeoutputs(const UniValue& params, bool fHelp); -extern UniValue listmasternodeconf(const UniValue& params, bool fHelp); -extern UniValue getmasternodestatus(const UniValue& params, bool fHelp); -extern UniValue getmasternodewinners(const UniValue& params, bool fHelp); -extern UniValue getmasternodescores(const UniValue& params, bool fHelp); - -extern UniValue mnbudget(const UniValue& params, bool fHelp); // in rpcmasternode-budget.cpp +extern UniValue getpoolinfo(const UniValue& params, bool fHelp); // in rpcGridnode.cpp +extern UniValue masternode(const UniValue& params, bool fHelp); // deprecated only left in for legacy support +extern UniValue gridnode(const UniValue& params, bool fHelp); +extern UniValue listgridnodes(const UniValue& params, bool fHelp); +extern UniValue getgridnodecount(const UniValue& params, bool fHelp); +extern UniValue creategridnodebroadcast(const UniValue& params, bool fHelp); +extern UniValue decodegridnodebroadcast(const UniValue& params, bool fHelp); +extern UniValue relaygridnodebroadcast(const UniValue& params, bool fHelp); +extern UniValue gridnodeconnect(const UniValue& params, bool fHelp); +extern UniValue gridnodecurrent(const UniValue& params, bool fHelp); +extern UniValue gridnodedebug(const UniValue& params, bool fHelp); +extern UniValue startgridnode(const UniValue& params, bool fHelp); +extern UniValue creategridnodekey(const UniValue& params, bool fHelp); +extern UniValue getgridnodeoutputs(const UniValue& params, bool fHelp); +extern UniValue listgridnodeconf(const UniValue& params, bool fHelp); +extern UniValue getgridnodestatus(const UniValue& params, bool fHelp); +extern UniValue getgridnodewinners(const UniValue& params, bool fHelp); +extern UniValue getgridnodescores(const UniValue& params, bool fHelp); + +extern UniValue gnbudget(const UniValue& params, bool fHelp); // in rpcgridnode-budget.cpp extern UniValue preparebudget(const UniValue& params, bool fHelp); extern UniValue submitbudget(const UniValue& params, bool fHelp); -extern UniValue mnbudgetvote(const UniValue& params, bool fHelp); +extern UniValue gnbudgetvote(const UniValue& params, bool fHelp); extern UniValue getbudgetvotes(const UniValue& params, bool fHelp); extern UniValue getnextsuperblock(const UniValue& params, bool fHelp); extern UniValue getbudgetprojection(const UniValue& params, bool fHelp); extern UniValue getbudgetinfo(const UniValue& params, bool fHelp); -extern UniValue mnbudgetrawvote(const UniValue& params, bool fHelp); -extern UniValue mnfinalbudget(const UniValue& params, bool fHelp); +extern UniValue gnbudgetrawvote(const UniValue& params, bool fHelp); +extern UniValue gnfinalbudget(const UniValue& params, bool fHelp); extern UniValue checkbudgets(const UniValue& params, bool fHelp); extern UniValue getinfo(const UniValue& params, bool fHelp); // in rpcmisc.cpp extern UniValue getbootstrappinginfo(const UniValue& params, bool fHelp); extern UniValue getfrontendinfo(const UniValue& params, bool fHelp); -extern UniValue mnsync(const UniValue& params, bool fHelp); +extern UniValue gnsync(const UniValue& params, bool fHelp); extern UniValue spork(const UniValue& params, bool fHelp); extern UniValue validateaddress(const UniValue& params, bool fHelp); extern UniValue createmultisig(const UniValue& params, bool fHelp); diff --git a/daemon/rpcwallet.cpp b/daemon/rpcwallet.cpp index c8f500dfe56f..c3b17ac065b1 100644 --- a/daemon/rpcwallet.cpp +++ b/daemon/rpcwallet.cpp @@ -8,6 +8,7 @@ #include "amount.h" #include "base58.h" +#include "coincontrol.h" #include "core_io.h" #include "init.h" #include "net.h" @@ -324,6 +325,9 @@ UniValue getaddressesbyaccount(const UniValue& params, bool fHelp) void SendMoney(const CTxDestination& address, CAmount nValue, CWalletTx& wtxNew, bool fUseIX = false) { + // TESTING CHANGE ADDRESSES + CCoinControl coinControl; + //coinControl.destChange = wtxNew.strFromAccount; // Check amount if (nValue <= 0) throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid amount"); @@ -344,7 +348,7 @@ void SendMoney(const CTxDestination& address, CAmount nValue, CWalletTx& wtxNew, // Create and send the transaction CReserveKey reservekey(pwalletMain); CAmount nFeeRequired; - if (!pwalletMain->CreateTransaction(scriptPubKey, nValue, wtxNew, reservekey, nFeeRequired, strError, NULL, ALL_COINS, fUseIX, (CAmount)0)) { + if (!pwalletMain->CreateTransaction(scriptPubKey, nValue, wtxNew, reservekey, nFeeRequired, strError, &coinControl, ALL_COINS, fUseIX, (CAmount)0)) { if (nValue + nFeeRequired > pwalletMain->GetBalance()) strError = strprintf("Error: This transaction requires a transaction fee of at least %s because of its amount, complexity, or use of recently received funds!", FormatMoney(nFeeRequired)); LogPrintf("SendMoney() : %s\n", strError); @@ -396,7 +400,7 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp) wtx.mapValue["to"] = params[3].get_str(); EnsureWalletIsUnlocked(); - + LogPrintf("Send from account : %s\n", wtx.strFromAccount); SendMoney(address.Get(), nAmount, wtx); return wtx.GetHash().GetHex(); @@ -1351,17 +1355,17 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe // Received if (listReceived.size() > 0 && wtx.GetDepthInMainChain() >= nMinDepth) { - //! check for masternode payment - bool bHasMasternodePayment = false; - CTxDestination masternodeAddress; + //! check for gridnode payment + bool bHasGridnodePayment = false; + CTxDestination GridnodeAddress; if (wtx.vout.size() == 5) { - ExtractDestination(wtx.vout[3].scriptPubKey, masternodeAddress); - bHasMasternodePayment = true; + ExtractDestination(wtx.vout[3].scriptPubKey, GridnodeAddress); + bHasGridnodePayment = true; nFee += wtx.vout[3].nValue; } else if (wtx.vout.size() == 4 && wtx.vout[1].scriptPubKey != wtx.vout[2].scriptPubKey) { - ExtractDestination(wtx.vout[2].scriptPubKey, masternodeAddress); - bHasMasternodePayment = true; + ExtractDestination(wtx.vout[2].scriptPubKey, GridnodeAddress); + bHasGridnodePayment = true; nFee += wtx.vout[2].nValue; } @@ -1385,15 +1389,15 @@ void ListTransactions(const CWalletTx& wtx, const string& strAccount, int nMinDe else entry.push_back(Pair("category", "generate")); - if (bHasMasternodePayment && masternodeAddress == r.destination) - entry.push_back(Pair("generatedfrom", "masternode reward")); + if (bHasGridnodePayment && GridnodeAddress == r.destination) + entry.push_back(Pair("generatedfrom", "gridnode reward")); else entry.push_back(Pair("generatedfrom", "stake")); } else { entry.push_back(Pair("category", "receive")); } - if (!wtx.IsCoinStake() || (bHasMasternodePayment && masternodeAddress == r.destination)) { + if (!wtx.IsCoinStake() || (bHasGridnodePayment && GridnodeAddress == r.destination)) { entry.push_back(Pair("amount", ValueFromAmount(r.amount))); entry.push_back(Pair("vout", r.vout)); } else { @@ -2401,7 +2405,7 @@ UniValue printMultiSend() UniValue ret(UniValue::VARR); UniValue act(UniValue::VOBJ); act.push_back(Pair("MultiSendStake Activated?", pwalletMain->fMultiSendStake)); - act.push_back(Pair("MultiSendMasternode Activated?", pwalletMain->fMultiSendMasternodeReward)); + act.push_back(Pair("MultiSendGridnode Activated?", pwalletMain->fMultiSendGridnodeReward)); ret.push_back(act); if (pwalletMain->vDisabledAddresses.size() >= 1) { @@ -2497,7 +2501,7 @@ UniValue multisend(const UniValue& params, bool fHelp) if (CBitcoinAddress(pwalletMain->vMultiSend[0].first).IsValid()) { pwalletMain->fMultiSendStake = true; - if (!walletdb.WriteMSettings(true, pwalletMain->fMultiSendMasternodeReward, pwalletMain->nLastMultiSendHeight)) { + if (!walletdb.WriteMSettings(true, pwalletMain->fMultiSendGridnodeReward, pwalletMain->nLastMultiSendHeight)) { UniValue obj(UniValue::VOBJ); obj.push_back(Pair("error", "MultiSend activated but writing settings to DB failed")); UniValue arr(UniValue::VARR); @@ -2509,12 +2513,12 @@ UniValue multisend(const UniValue& params, bool fHelp) } throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Unable to activate MultiSend, check MultiSend vector"); - } else if (strCommand == "enablemasternode" || strCommand == "activatemasternode") { + } else if (strCommand == "enableGridnode" || strCommand == "activateGridnode") { if (pwalletMain->vMultiSend.size() < 1) throw JSONRPCError(RPC_INVALID_REQUEST, "Unable to activate MultiSend, check MultiSend vector"); if (CBitcoinAddress(pwalletMain->vMultiSend[0].first).IsValid()) { - pwalletMain->fMultiSendMasternodeReward = true; + pwalletMain->fMultiSendGridnodeReward = true; if (!walletdb.WriteMSettings(pwalletMain->fMultiSendStake, true, pwalletMain->nLastMultiSendHeight)) { UniValue obj(UniValue::VOBJ); @@ -2588,7 +2592,7 @@ UniValue multisend(const UniValue& params, bool fHelp) " print - displays the current MultiSend vector \n" " clear - deletes the current MultiSend vector \n" " enablestake/activatestake - activates the current MultiSend vector to be activated on stake rewards\n" - " enablemasternode/activatemasternode - activates the current MultiSend vector to be activated on masternode rewards\n" + " enableGridnode/activateGridnode - activates the current MultiSend vector to be activated on gridnode rewards\n" " disable/deactivate - disables the current MultiSend vector \n" " delete
- deletes an address from the MultiSend vector \n" " disable
- prevents a specific address from sending MultiSend transactions\n" diff --git a/daemon/scheduler.h b/daemon/scheduler.h index 3faeb513e524..ef40f2868805 100644 --- a/daemon/scheduler.h +++ b/daemon/scheduler.h @@ -10,7 +10,7 @@ // // NOTE: // boost::thread / boost::function / boost::chrono should be ported to -// std::thread / std::function / std::chrono when we support C++11. +// std::thread / std::function / std::chrono when we support c++17. // #include #include diff --git a/daemon/spork.cpp b/daemon/spork.cpp index 905766c18b37..2fceb877fba7 100644 --- a/daemon/spork.cpp +++ b/daemon/spork.cpp @@ -8,7 +8,7 @@ #include "base58.h" #include "key.h" #include "main.h" -#include "masternode-budget.h" +#include "gridnode-budget.h" #include "net.h" #include "protocol.h" #include "sync.h" @@ -61,7 +61,7 @@ void LoadSporksFromDB() void ProcessSpork(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) { - if (fLiteMode) return; //disable all obfuscation/masternode related functionality + if (fLiteMode) return; //disable all obfuscation/gridnode related functionality if (strCommand == "spork") { //LogPrintf("ProcessSpork::spork\n"); @@ -130,10 +130,10 @@ int64_t GetSporkValue(int nSporkID) if (nSporkID == SPORK_2_SWIFTTX) r = SPORK_2_SWIFTTX_DEFAULT; if (nSporkID == SPORK_3_SWIFTTX_BLOCK_FILTERING) r = SPORK_3_SWIFTTX_BLOCK_FILTERING_DEFAULT; if (nSporkID == SPORK_5_MAX_VALUE) r = SPORK_5_MAX_VALUE_DEFAULT; - if (nSporkID == SPORK_7_MASTERNODE_SCANNING) r = SPORK_7_MASTERNODE_SCANNING_DEFAULT; - if (nSporkID == SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT) r = SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT; - if (nSporkID == SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT) r = SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT; - if (nSporkID == SPORK_10_MASTERNODE_PAY_UPDATED_NODES) r = SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT; + if (nSporkID == SPORK_7_GRIDNODE_SCANNING) r = SPORK_7_GRIDNODE_SCANNING_DEFAULT; + if (nSporkID == SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT) r = SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT_DEFAULT; + if (nSporkID == SPORK_9_GRIDNODE_BUDGET_ENFORCEMENT) r = SPORK_9_GRIDNODE_BUDGET_ENFORCEMENT_DEFAULT; + if (nSporkID == SPORK_10_GRIDNODE_PAY_UPDATED_NODES) r = SPORK_10_GRIDNODE_PAY_UPDATED_NODES_DEFAULT; if (nSporkID == SPORK_13_ENABLE_SUPERBLOCKS) r = SPORK_13_ENABLE_SUPERBLOCKS_DEFAULT; if (nSporkID == SPORK_14_NEW_PROTOCOL_ENFORCEMENT) r = SPORK_14_NEW_PROTOCOL_ENFORCEMENT_DEFAULT; if (nSporkID == SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2) r = SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2_DEFAULT; @@ -141,7 +141,7 @@ int64_t GetSporkValue(int nSporkID) if (nSporkID == SPORK_17_OLD_DEVFUND_ENFORCEMENT) r = SPORK_17_OLD_DEVFUND_ENFORCEMENT_DEFAULT; if (nSporkID == SPORK_18_BLACKLIST_BLOCK_REFERENCE) r = SPORK_18_BLACKLIST_BLOCK_REFERENCE_DEFAULT; if (nSporkID == SPORK_19_BLOCK_REWARDS_V2) r = SPORK_19_BLOCK_REWARDS_V2_DEFAULT; - if (nSporkID == SPORK_20_UNDONKEY_MNREWARDS) r = SPORK_20_UNDONKEY_MNREWARDS_DEFAULT; + if (nSporkID == SPORK_20_UNDONKEY_GNREWARDS) r = SPORK_20_UNDONKEY_GNREWARDS_DEFAULT; if (r == -1) LogPrintf("%s : Unknown Spork %d\n", __func__, nSporkID); @@ -230,17 +230,17 @@ bool CSporkManager::Sign(CSporkMessage& spork) std::string errorMessage = ""; if (!obfuScationSigner.SetKey(strMasterPrivKey, errorMessage, key2, pubkey2)) { - LogPrintf("CMasternodePayments::Sign - ERROR: Invalid masternodeprivkey: '%s'\n", errorMessage); + LogPrintf("CGridnodePayments::Sign - ERROR: Invalid gridnodeprivkey: '%s'\n", errorMessage); return false; } if (!obfuScationSigner.SignMessage(strMessage, errorMessage, spork.vchSig, key2)) { - LogPrintf("CMasternodePayments::Sign - Sign message failed"); + LogPrintf("CGridnodePayments::Sign - Sign message failed"); return false; } if (!obfuScationSigner.VerifyMessage(pubkey2, spork.vchSig, strMessage, errorMessage)) { - LogPrintf("CMasternodePayments::Sign - Verify message failed"); + LogPrintf("CGridnodePayments::Sign - Verify message failed"); return false; } @@ -292,10 +292,10 @@ int CSporkManager::GetSporkIDByName(std::string strName) if (strName == "SPORK_2_SWIFTTX") return SPORK_2_SWIFTTX; if (strName == "SPORK_3_SWIFTTX_BLOCK_FILTERING") return SPORK_3_SWIFTTX_BLOCK_FILTERING; if (strName == "SPORK_5_MAX_VALUE") return SPORK_5_MAX_VALUE; - if (strName == "SPORK_7_MASTERNODE_SCANNING") return SPORK_7_MASTERNODE_SCANNING; - if (strName == "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT") return SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT; - if (strName == "SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT") return SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT; - if (strName == "SPORK_10_MASTERNODE_PAY_UPDATED_NODES") return SPORK_10_MASTERNODE_PAY_UPDATED_NODES; + if (strName == "SPORK_7_GRIDNODE_SCANNING") return SPORK_7_GRIDNODE_SCANNING; + if (strName == "SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT") return SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT; + if (strName == "SPORK_9_GRIDNODE_BUDGET_ENFORCEMENT") return SPORK_9_GRIDNODE_BUDGET_ENFORCEMENT; + if (strName == "SPORK_10_GRIDNODE_PAY_UPDATED_NODES") return SPORK_10_GRIDNODE_PAY_UPDATED_NODES; if (strName == "SPORK_13_ENABLE_SUPERBLOCKS") return SPORK_13_ENABLE_SUPERBLOCKS; if (strName == "SPORK_14_NEW_PROTOCOL_ENFORCEMENT") return SPORK_14_NEW_PROTOCOL_ENFORCEMENT; if (strName == "SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2") return SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2; @@ -303,7 +303,7 @@ int CSporkManager::GetSporkIDByName(std::string strName) if (strName == "SPORK_17_OLD_DEVFUND_ENFORCEMENT") return SPORK_17_OLD_DEVFUND_ENFORCEMENT; if (strName == "SPORK_18_BLACKLIST_BLOCK_REFERENCE") return SPORK_18_BLACKLIST_BLOCK_REFERENCE; if (strName == "SPORK_19_BLOCK_REWARDS_V2") return SPORK_19_BLOCK_REWARDS_V2; - if (strName == "SPORK_20_UNDONKEY_MNREWARDS") return SPORK_20_UNDONKEY_MNREWARDS; + if (strName == "SPORK_20_UNDONKEY_GNREWARDS") return SPORK_20_UNDONKEY_GNREWARDS; return -1; } @@ -313,10 +313,10 @@ std::string CSporkManager::GetSporkNameByID(int id) if (id == SPORK_2_SWIFTTX) return "SPORK_2_SWIFTTX"; if (id == SPORK_3_SWIFTTX_BLOCK_FILTERING) return "SPORK_3_SWIFTTX_BLOCK_FILTERING"; if (id == SPORK_5_MAX_VALUE) return "SPORK_5_MAX_VALUE"; - if (id == SPORK_7_MASTERNODE_SCANNING) return "SPORK_7_MASTERNODE_SCANNING"; - if (id == SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT) return "SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT"; - if (id == SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT) return "SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT"; - if (id == SPORK_10_MASTERNODE_PAY_UPDATED_NODES) return "SPORK_10_MASTERNODE_PAY_UPDATED_NODES"; + if (id == SPORK_7_GRIDNODE_SCANNING) return "SPORK_7_GRIDNODE_SCANNING"; + if (id == SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT) return "SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT"; + if (id == SPORK_9_GRIDNODE_BUDGET_ENFORCEMENT) return "SPORK_9_GRIDNODE_BUDGET_ENFORCEMENT"; + if (id == SPORK_10_GRIDNODE_PAY_UPDATED_NODES) return "SPORK_10_GRIDNODE_PAY_UPDATED_NODES"; if (id == SPORK_13_ENABLE_SUPERBLOCKS) return "SPORK_13_ENABLE_SUPERBLOCKS"; if (id == SPORK_14_NEW_PROTOCOL_ENFORCEMENT) return "SPORK_14_NEW_PROTOCOL_ENFORCEMENT"; if (id == SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2) return "SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2"; @@ -324,7 +324,7 @@ std::string CSporkManager::GetSporkNameByID(int id) if (id == SPORK_17_OLD_DEVFUND_ENFORCEMENT) return "SPORK_17_OLD_DEVFUND_ENFORCEMENT"; if (id == SPORK_18_BLACKLIST_BLOCK_REFERENCE) return "SPORK_18_BLACKLIST_BLOCK_REFERENCE"; if (id == SPORK_19_BLOCK_REWARDS_V2) return "SPORK_19_BLOCK_REWARDS_V2"; - if (id == SPORK_20_UNDONKEY_MNREWARDS) return "SPORK_20_UNDONKEY_MNREWARDS"; + if (id == SPORK_20_UNDONKEY_GNREWARDS) return "SPORK_20_UNDONKEY_GNREWARDS"; return "Unknown"; } diff --git a/daemon/spork.h b/daemon/spork.h index 595aa158c825..70ed581853c8 100644 --- a/daemon/spork.h +++ b/daemon/spork.h @@ -33,10 +33,10 @@ using namespace boost; #define SPORK_2_SWIFTTX_DEFAULT 978307200 //2001-1-1 #define SPORK_3_SWIFTTX_BLOCK_FILTERING_DEFAULT 1424217600 //2015-2-18 #define SPORK_5_MAX_VALUE_DEFAULT 1000 //1000 UNIGRID -#define SPORK_7_MASTERNODE_SCANNING_DEFAULT 978307200 //2001-1-1 -#define SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT_DEFAULT 4070908800 //OFF -#define SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT_DEFAULT 4070908800 //OFF -#define SPORK_10_MASTERNODE_PAY_UPDATED_NODES_DEFAULT 4070908800 //OFF +#define SPORK_7_GRIDNODE_SCANNING_DEFAULT 978307200 //2001-1-1 +#define SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT_DEFAULT 4070908800 //OFF +#define SPORK_9_GRIDNODE_BUDGET_ENFORCEMENT_DEFAULT 4070908800 //OFF +#define SPORK_10_GRIDNODE_PAY_UPDATED_NODES_DEFAULT 4070908800 //OFF #define SPORK_13_ENABLE_SUPERBLOCKS_DEFAULT 4070908800 //OFF #define SPORK_14_NEW_PROTOCOL_ENFORCEMENT_DEFAULT 4070908800 //OFF #define SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2_DEFAULT 4070908800 //OFF @@ -44,7 +44,7 @@ using namespace boost; #define SPORK_17_OLD_DEVFUND_ENFORCEMENT_DEFAULT 4070908800 //OFF #define SPORK_18_BLACKLIST_BLOCK_REFERENCE_DEFAULT 0 //OFF #define SPORK_19_BLOCK_REWARDS_V2_DEFAULT 4070908800 //OFF -#define SPORK_20_UNDONKEY_MNREWARDS_DEFAULT 4070908800 //OFF +#define SPORK_20_UNDONKEY_GNREWARDS_DEFAULT 4070908800 //OFF class CSporkMessage; class CSporkManager; diff --git a/daemon/sporknames.h b/daemon/sporknames.h index c64e00776ac1..a475dfffde66 100644 --- a/daemon/sporknames.h +++ b/daemon/sporknames.h @@ -8,10 +8,10 @@ #define SPORK_2_SWIFTTX 10001 #define SPORK_3_SWIFTTX_BLOCK_FILTERING 10002 #define SPORK_5_MAX_VALUE 10004 -#define SPORK_7_MASTERNODE_SCANNING 10006 -#define SPORK_8_MASTERNODE_PAYMENT_ENFORCEMENT 10007 -#define SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT 10008 -#define SPORK_10_MASTERNODE_PAY_UPDATED_NODES 10009 +#define SPORK_7_GRIDNODE_SCANNING 10006 +#define SPORK_8_GRIDNODE_PAYMENT_ENFORCEMENT 10007 +#define SPORK_9_GRIDNODE_BUDGET_ENFORCEMENT 10008 +#define SPORK_10_GRIDNODE_PAY_UPDATED_NODES 10009 #define SPORK_13_ENABLE_SUPERBLOCKS 10012 #define SPORK_14_NEW_PROTOCOL_ENFORCEMENT 10013 #define SPORK_15_NEW_PROTOCOL_ENFORCEMENT_2 10014 @@ -19,6 +19,6 @@ #define SPORK_17_OLD_DEVFUND_ENFORCEMENT 10016 #define SPORK_18_BLACKLIST_BLOCK_REFERENCE 10017 #define SPORK_19_BLOCK_REWARDS_V2 10018 -#define SPORK_20_UNDONKEY_MNREWARDS 10019 +#define SPORK_20_UNDONKEY_GNREWARDS 10019 #endif /* UNIGRID_SPORKNAMES_H */ diff --git a/daemon/stakeinput.cpp b/daemon/stakeinput.cpp index b2c4b70a81de..ee6ae97288a3 100644 --- a/daemon/stakeinput.cpp +++ b/daemon/stakeinput.cpp @@ -80,7 +80,7 @@ bool CZUnigridStake::GetModifier(uint64_t& nStakeModifier) int64_t nTimeBlockFrom = pindex->GetBlockTime(); while (true) { - if (pindex->GetBlockTime() - nTimeBlockFrom > 60*60) { + if (pindex->GetBlockTime() - nTimeBlockFrom > 60 * 60) { nStakeModifier = pindex->nAccumulatorCheckpoint.Get64(); return true; } diff --git a/daemon/swifttx.cpp b/daemon/swifttx.cpp index 29d63df4d0a1..425ca7d1b111 100644 --- a/daemon/swifttx.cpp +++ b/daemon/swifttx.cpp @@ -6,10 +6,10 @@ #include "swifttx.h" -#include "activemasternode.h" +#include "activegridnode.h" #include "base58.h" #include "key.h" -#include "masternodeman.h" +#include "gridnodeman.h" #include "net.h" #include "obfuscation.h" #include "protocol.h" @@ -34,15 +34,15 @@ int nCompleteTXLocks; //txlock - Locks transaction // //step 1.) Broadcast intention to lock transaction inputs, "txlreg", CTransaction -//step 2.) Top SWIFTTX_SIGNATURES_TOTAL masternodes, open connect to top 1 masternode. +//step 2.) Top SWIFTTX_SIGNATURES_TOTAL Gridnodes, open connect to top 1 gridnode. // Send "txvote", CTransaction, Signature, Approve -//step 3.) Top 1 masternode, waits for SWIFTTX_SIGNATURES_REQUIRED messages. Upon success, sends "txlock' +//step 3.) Top 1 gridnode, waits for SWIFTTX_SIGNATURES_REQUIRED messages. Upon success, sends "txlock' void ProcessMessageSwiftTX(CNode* pfrom, std::string& strCommand, CDataStream& vRecv) { - if (fLiteMode) return; //disable all obfuscation/masternode related functionality + if (fLiteMode) return; //disable all obfuscation/gridnode related functionality if (!IsSporkActive(SPORK_2_SWIFTTX)) return; - if (!masternodeSync.IsBlockchainSynced()) return; + if (!GridnodeSync.IsBlockchainSynced()) return; if (strCommand == "ix") { //LogPrintf("ProcessMessageSwiftTX::ix\n"); @@ -147,23 +147,23 @@ void ProcessMessageSwiftTX(CNode* pfrom, std::string& strCommand, CDataStream& v if (ProcessConsensusVote(pfrom, ctx)) { //Spam/Dos protection /* - Masternodes will sometimes propagate votes before the transaction is known to the client. + Gridnodes will sometimes propagate votes before the transaction is known to the client. This tracks those messages and allows it at the same rate of the rest of the network, if a peer violates it, it will simply be ignored */ if (!mapTxLockReq.count(ctx.txHash) && !mapTxLockReqRejected.count(ctx.txHash)) { - if (!mapUnknownVotes.count(ctx.vinMasternode.prevout.hash)) { - mapUnknownVotes[ctx.vinMasternode.prevout.hash] = GetTime() + (60 * 10); + if (!mapUnknownVotes.count(ctx.vinGridnode.prevout.hash)) { + mapUnknownVotes[ctx.vinGridnode.prevout.hash] = GetTime() + (60 * 10); } - if (mapUnknownVotes[ctx.vinMasternode.prevout.hash] > GetTime() && - mapUnknownVotes[ctx.vinMasternode.prevout.hash] - GetAverageVoteTime() > 60 * 10) { - LogPrintf("ProcessMessageSwiftTX::ix - masternode is spamming transaction votes: %s %s\n", - ctx.vinMasternode.ToString().c_str(), + if (mapUnknownVotes[ctx.vinGridnode.prevout.hash] > GetTime() && + mapUnknownVotes[ctx.vinGridnode.prevout.hash] - GetAverageVoteTime() > 60 * 10) { + LogPrintf("ProcessMessageSwiftTX::ix - gridnode is spamming transaction votes: %s %s\n", + ctx.vinGridnode.ToString().c_str(), ctx.txHash.ToString().c_str()); return; } else { - mapUnknownVotes[ctx.vinMasternode.prevout.hash] = GetTime() + (60 * 10); + mapUnknownVotes[ctx.vinGridnode.prevout.hash] = GetTime() + (60 * 10); } } RelayInv(inv); @@ -238,7 +238,7 @@ int64_t CreateNewLock(CTransaction tx) /* Use a blockheight newer than the input. - This prevents attackers from using transaction mallibility to predict which masternodes + This prevents attackers from using transaction mallibility to predict which Gridnodes they'll use. */ int nBlockHeight = (chainActive.Tip()->nHeight - nTxAge) + 4; @@ -264,17 +264,17 @@ int64_t CreateNewLock(CTransaction tx) // check if we need to vote on this transaction void DoConsensusVote(CTransaction& tx, int64_t nBlockHeight) { - if (!fMasterNode) return; + if (!fGridnode) return; - int n = mnodeman.GetMasternodeRank(activeMasternode.vin, nBlockHeight, MIN_SWIFTTX_PROTO_VERSION); + int n = gnodeman.GetGridnodeRank(activeGridnode.vin, nBlockHeight, MIN_SWIFTTX_PROTO_VERSION); if (n == -1) { - LogPrint("swiftx", "SwiftX::DoConsensusVote - Unknown Masternode\n"); + LogPrint("swiftx", "SwiftX::DoConsensusVote - Unknown Gridnode\n"); return; } if (n > SWIFTTX_SIGNATURES_TOTAL) { - LogPrint("swiftx", "SwiftX::DoConsensusVote - Masternode not in the top %d (%d)\n", SWIFTTX_SIGNATURES_TOTAL, n); + LogPrint("swiftx", "SwiftX::DoConsensusVote - Gridnode not in the top %d (%d)\n", SWIFTTX_SIGNATURES_TOTAL, n); return; } /* @@ -284,7 +284,7 @@ void DoConsensusVote(CTransaction& tx, int64_t nBlockHeight) LogPrint("swiftx", "SwiftX::DoConsensusVote - In the top %d (%d)\n", SWIFTTX_SIGNATURES_TOTAL, n); CConsensusVote ctx; - ctx.vinMasternode = activeMasternode.vin; + ctx.vinGridnode = activeGridnode.vin; ctx.txHash = tx.GetHash(); ctx.nBlockHeight = nBlockHeight; if (!ctx.Sign()) { @@ -305,28 +305,28 @@ void DoConsensusVote(CTransaction& tx, int64_t nBlockHeight) //received a consensus vote bool ProcessConsensusVote(CNode* pnode, CConsensusVote& ctx) { - int n = mnodeman.GetMasternodeRank(ctx.vinMasternode, ctx.nBlockHeight, MIN_SWIFTTX_PROTO_VERSION); + int n = gnodeman.GetGridnodeRank(ctx.vinGridnode, ctx.nBlockHeight, MIN_SWIFTTX_PROTO_VERSION); - CMasternode* pmn = mnodeman.Find(ctx.vinMasternode); - if (pmn != NULL) - LogPrint("swiftx", "SwiftX::ProcessConsensusVote - Masternode ADDR %s %d\n", pmn->addr.ToString().c_str(), n); + CGridnode* pgn = gnodeman.Find(ctx.vinGridnode); + if (pgn != NULL) + LogPrint("swiftx", "SwiftX::ProcessConsensusVote - Gridnode ADDR %s %d\n", pgn->addr.ToString().c_str(), n); if (n == -1) { //can be caused by past versions trying to vote with an invalid protocol - LogPrint("swiftx", "SwiftX::ProcessConsensusVote - Unknown Masternode\n"); - mnodeman.AskForMN(pnode, ctx.vinMasternode); + LogPrint("swiftx", "SwiftX::ProcessConsensusVote - Unknown Gridnode\n"); + gnodeman.AskForMN(pnode, ctx.vinGridnode); return false; } if (n > SWIFTTX_SIGNATURES_TOTAL) { - LogPrint("swiftx", "SwiftX::ProcessConsensusVote - Masternode not in the top %d (%d) - %s\n", SWIFTTX_SIGNATURES_TOTAL, n, ctx.GetHash().ToString().c_str()); + LogPrint("swiftx", "SwiftX::ProcessConsensusVote - Gridnode not in the top %d (%d) - %s\n", SWIFTTX_SIGNATURES_TOTAL, n, ctx.GetHash().ToString().c_str()); return false; } if (!ctx.SignatureValid()) { LogPrintf("SwiftX::ProcessConsensusVote - Signature invalid\n"); - // don't ban, it could just be a non-synced masternode - mnodeman.AskForMN(pnode, ctx.vinMasternode); + // don't ban, it could just be a non-synced gridnode + gnodeman.AskForMN(pnode, ctx.vinGridnode); return false; } @@ -475,7 +475,7 @@ int GetTransactionLockSignatures(uint256 txHash) uint256 CConsensusVote::GetHash() const { - return vinMasternode.prevout.hash + vinMasternode.prevout.n + txHash; + return vinGridnode.prevout.hash + vinGridnode.prevout.n + txHash; } @@ -485,14 +485,14 @@ bool CConsensusVote::SignatureValid() std::string strMessage = txHash.ToString().c_str() + boost::lexical_cast(nBlockHeight); //LogPrintf("verify strMessage %s \n", strMessage.c_str()); - CMasternode* pmn = mnodeman.Find(vinMasternode); + CGridnode* pgn = gnodeman.Find(vinGridnode); - if (pmn == NULL) { - LogPrintf("SwiftX::CConsensusVote::SignatureValid() - Unknown Masternode\n"); + if (pgn == NULL) { + LogPrintf("SwiftX::CConsensusVote::SignatureValid() - Unknown Gridnode\n"); return false; } - if (!obfuScationSigner.VerifyMessage(pmn->pubKeyMasternode, vchMasterNodeSignature, strMessage, errorMessage)) { + if (!obfuScationSigner.VerifyMessage(pgn->pubKeyGridnode, vchGridnodeSignature, strMessage, errorMessage)) { LogPrintf("SwiftX::CConsensusVote::SignatureValid() - Verify message failed\n"); return false; } @@ -508,19 +508,19 @@ bool CConsensusVote::Sign() CPubKey pubkey2; std::string strMessage = txHash.ToString().c_str() + boost::lexical_cast(nBlockHeight); //LogPrintf("signing strMessage %s \n", strMessage.c_str()); - //LogPrintf("signing privkey %s \n", strMasterNodePrivKey.c_str()); + //LogPrintf("signing privkey %s \n", strGridnodePrivKey.c_str()); - if (!obfuScationSigner.SetKey(strMasterNodePrivKey, errorMessage, key2, pubkey2)) { - LogPrintf("CConsensusVote::Sign() - ERROR: Invalid masternodeprivkey: '%s'\n", errorMessage.c_str()); + if (!obfuScationSigner.SetKey(strGridnodePrivKey, errorMessage, key2, pubkey2)) { + LogPrintf("CConsensusVote::Sign() - ERROR: Invalid gridnodeprivkey: '%s'\n", errorMessage.c_str()); return false; } - if (!obfuScationSigner.SignMessage(strMessage, errorMessage, vchMasterNodeSignature, key2)) { + if (!obfuScationSigner.SignMessage(strMessage, errorMessage, vchGridnodeSignature, key2)) { LogPrintf("CConsensusVote::Sign() - Sign message failed"); return false; } - if (!obfuScationSigner.VerifyMessage(pubkey2, vchMasterNodeSignature, strMessage, errorMessage)) { + if (!obfuScationSigner.VerifyMessage(pubkey2, vchGridnodeSignature, strMessage, errorMessage)) { LogPrintf("CConsensusVote::Sign() - Verify message failed"); return false; } @@ -532,15 +532,15 @@ bool CConsensusVote::Sign() bool CTransactionLock::SignaturesValid() { BOOST_FOREACH (CConsensusVote vote, vecConsensusVotes) { - int n = mnodeman.GetMasternodeRank(vote.vinMasternode, vote.nBlockHeight, MIN_SWIFTTX_PROTO_VERSION); + int n = gnodeman.GetGridnodeRank(vote.vinGridnode, vote.nBlockHeight, MIN_SWIFTTX_PROTO_VERSION); if (n == -1) { - LogPrintf("CTransactionLock::SignaturesValid() - Unknown Masternode\n"); + LogPrintf("CTransactionLock::SignaturesValid() - Unknown Gridnode\n"); return false; } if (n > SWIFTTX_SIGNATURES_TOTAL) { - LogPrintf("CTransactionLock::SignaturesValid() - Masternode not in the top %s\n", SWIFTTX_SIGNATURES_TOTAL); + LogPrintf("CTransactionLock::SignaturesValid() - Gridnode not in the top %s\n", SWIFTTX_SIGNATURES_TOTAL); return false; } diff --git a/daemon/swifttx.h b/daemon/swifttx.h index 539d5fe04087..e70e31e666d8 100644 --- a/daemon/swifttx.h +++ b/daemon/swifttx.h @@ -16,7 +16,7 @@ #include "util.h" /* - At 15 signatures, 1/2 of the masternode network can be owned by + At 15 signatures, 1/2 of the gridnode network can be owned by one party without comprimising the security of SwiftX (1000/2150.0)**10 = 0.00047382219560689856 (1000/2900.0)**10 = 2.3769498616783657e-05 @@ -70,10 +70,10 @@ int64_t GetAverageVoteTime(); class CConsensusVote { public: - CTxIn vinMasternode; + CTxIn vinGridnode; uint256 txHash; int nBlockHeight; - std::vector vchMasterNodeSignature; + std::vector vchGridnodeSignature; uint256 GetHash() const; @@ -86,8 +86,8 @@ class CConsensusVote inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { READWRITE(txHash); - READWRITE(vinMasternode); - READWRITE(vchMasterNodeSignature); + READWRITE(vinGridnode); + READWRITE(vchGridnodeSignature); READWRITE(nBlockHeight); } }; diff --git a/daemon/test/budget_tests.cpp b/daemon/test/budget_tests.cpp index 2aab30b3e882..31324776ec40 100644 --- a/daemon/test/budget_tests.cpp +++ b/daemon/test/budget_tests.cpp @@ -3,7 +3,7 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include "masternode-budget.h" +#include "gridnode-budget.h" #include "tinyformat.h" #include "utilmoneystr.h" diff --git a/daemon/tinyformat.h b/daemon/tinyformat.h index 68926d6a8e06..6fae159af6d2 100644 --- a/daemon/tinyformat.h +++ b/daemon/tinyformat.h @@ -36,7 +36,7 @@ // * Simplicity and minimalism. A single header file to include and distribute // with your projects. // * Augment rather than replace the standard stream formatting mechanism -// * C++98 support, with optional C++11 niceties +// * C++98 support, with optional c++17 niceties // // // Main interface example usage @@ -113,8 +113,8 @@ namespace tfm = tinyformat; // Error handling; calls assert() by default. #define TINYFORMAT_ERROR(reasonString) throw std::runtime_error(reasonString) -// Define for C++11 variadic templates which make the code shorter & more -// general. If you don't define this, C++11 support is autodetected below. +// Define for c++17 variadic templates which make the code shorter & more +// general. If you don't define this, c++17 support is autodetected below. // #define TINYFORMAT_USE_VARIADIC_TEMPLATES @@ -853,7 +853,7 @@ void format(FormatIterator& fmtIter, const T1& value1) fmtIter.finish(); } -// General version for C++11 +// General version for c++17 template void format(FormatIterator& fmtIter, const T1& value1, const Args&... args) { @@ -890,7 +890,7 @@ TINYFORMAT_FOREACH_ARGNUM(TINYFORMAT_MAKE_FORMAT_DETAIL) #ifdef TINYFORMAT_USE_VARIADIC_TEMPLATES -// C++11 - the simple case +// c++17 - the simple case template void format(std::ostream& out, const char* fmt, const T1& v1, const Args&... args) { diff --git a/daemon/unigrid-tx.cpp b/daemon/unigrid-tx.cpp index 58c9db0bc38c..0c9251be81ea 100644 --- a/daemon/unigrid-tx.cpp +++ b/daemon/unigrid-tx.cpp @@ -370,7 +370,7 @@ static void MutateTxSign(CMutableTransaction& tx, const string& flagStr) UniValue prevtxsObj = registers["prevtxs"]; { for (unsigned int previdx = 0; previdx < prevtxsObj.size(); previdx++) { - UniValue prevOut = prevtxsObj[previdx]; + const UniValue prevOut = prevtxsObj[previdx]; if (!prevOut.isObject()) throw runtime_error("expected prevtxs internal object"); diff --git a/daemon/unigridd.cpp b/daemon/unigridd.cpp index f59f9c24d152..6f1be98ec15a 100644 --- a/daemon/unigridd.cpp +++ b/daemon/unigridd.cpp @@ -9,7 +9,7 @@ #include "clientversion.h" #include "init.h" #include "main.h" -#include "masternodeconfig.h" +#include "gridnodeconfig.h" #include "noui.h" #include "scheduler.h" #include "rpcserver.h" diff --git a/daemon/univalue/.gitignore b/daemon/univalue/.gitignore new file mode 100644 index 000000000000..520508b112ba --- /dev/null +++ b/daemon/univalue/.gitignore @@ -0,0 +1,33 @@ +.deps/ +INSTALL +Makefile +Makefile.in +aclocal.m4 +autom4te.cache/ +compile +config.log +config.status +config.guess +config.sub +configure +depcomp +install-sh +missing +stamp-h1 +univalue-config.h* +test-driver +libtool +ltmain.sh +test-suite.log + +*.tar.gz +*.a +*.la +*.lo +*.logs +*.o +*.pc +*.trs + +.dirstamp +.libs diff --git a/daemon/univalue/.travis.yml b/daemon/univalue/.travis.yml index 132743d34930..43a1ed362e7e 100644 --- a/daemon/univalue/.travis.yml +++ b/daemon/univalue/.travis.yml @@ -25,7 +25,6 @@ addons: - pkg-config before_script: - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew uninstall libtool; brew install libtool; fi - if [ -n "$USE_SHELL" ]; then export CONFIG_SHELL="$USE_SHELL"; fi - test -n "$USE_SHELL" && eval '"$USE_SHELL" -c "./autogen.sh"' || ./autogen.sh diff --git a/daemon/univalue/Makefile.am b/daemon/univalue/Makefile.am index 287bb97fec50..0f5ba599548f 100644 --- a/daemon/univalue/Makefile.am +++ b/daemon/univalue/Makefile.am @@ -12,6 +12,7 @@ pkgconfig_DATA = pc/libunivalue.pc libunivalue_la_SOURCES = \ lib/univalue.cpp \ + lib/univalue_get.cpp \ lib/univalue_read.cpp \ lib/univalue_write.cpp @@ -94,6 +95,7 @@ TEST_FILES = \ $(TEST_DATA_DIR)/fail41.json \ $(TEST_DATA_DIR)/fail42.json \ $(TEST_DATA_DIR)/fail44.json \ + $(TEST_DATA_DIR)/fail45.json \ $(TEST_DATA_DIR)/fail3.json \ $(TEST_DATA_DIR)/fail4.json \ $(TEST_DATA_DIR)/fail5.json \ @@ -104,6 +106,7 @@ TEST_FILES = \ $(TEST_DATA_DIR)/pass1.json \ $(TEST_DATA_DIR)/pass2.json \ $(TEST_DATA_DIR)/pass3.json \ + $(TEST_DATA_DIR)/pass4.json \ $(TEST_DATA_DIR)/round1.json \ $(TEST_DATA_DIR)/round2.json \ $(TEST_DATA_DIR)/round3.json \ diff --git a/daemon/univalue/README.md b/daemon/univalue/README.md index 36aa786a4c5d..46df8d316fa6 100644 --- a/daemon/univalue/README.md +++ b/daemon/univalue/README.md @@ -12,6 +12,12 @@ an arbitrary depth. This class is aligned with the JSON standard, [RFC 7159](https://tools.ietf.org/html/rfc7159.html). +## Motivation + +UniValue is a reaction to json_spirit, seeking to minimize template +and memory use, providing a straightforward RAII class compatible with +link-time optimization and embedded uses. + ## Installation This project is a standard GNU @@ -25,8 +31,3 @@ $ ./configure $ make ``` -## Design - -UniValue provides a single dynamic RAII C++ object class, -and minimizes template use (contra json_spirit). - diff --git a/daemon/univalue/TODO b/daemon/univalue/TODO index 5530048e923e..37e3d4da5dc5 100644 --- a/daemon/univalue/TODO +++ b/daemon/univalue/TODO @@ -1,7 +1,7 @@ Rearrange tree for easier 'git subtree' style use -Move towards C++11 etc. +Move towards c++17 etc. Namespace support - must come up with useful shorthand, avoiding long Univalue::Univalue::Univalue usages forced upon library users. diff --git a/daemon/univalue/autogen.sh b/daemon/univalue/autogen.sh old mode 100644 new mode 100755 diff --git a/daemon/univalue/configure.ac b/daemon/univalue/configure.ac index 8298332ac132..67d499e96647 100644 --- a/daemon/univalue/configure.ac +++ b/daemon/univalue/configure.ac @@ -1,7 +1,7 @@ m4_define([libunivalue_major_version], [1]) m4_define([libunivalue_minor_version], [1]) -m4_define([libunivalue_micro_version], [3]) -m4_define([libunivalue_interface_age], [3]) +m4_define([libunivalue_micro_version], [4]) +m4_define([libunivalue_interface_age], [4]) # If you need a modifier for the version number. # Normally empty, but can be used to make "fixup" releases. m4_define([libunivalue_extraversion], []) @@ -14,7 +14,7 @@ m4_define([libunivalue_age], [m4_eval(libunivalue_binary_age - libunivalue_inter m4_define([libunivalue_version], [libunivalue_major_version().libunivalue_minor_version().libunivalue_micro_version()libunivalue_extraversion()]) -AC_INIT([univalue], [1.0.3], +AC_INIT([univalue], [1.0.5], [http://github.com/jgarzik/univalue/]) dnl make the compilation flags quiet unless V=1 is used diff --git a/daemon/univalue/gen/gen.cpp b/daemon/univalue/gen/gen.cpp index 17f361941d9e..be3d4ccf72b7 100644 --- a/daemon/univalue/gen/gen.cpp +++ b/daemon/univalue/gen/gen.cpp @@ -1,6 +1,6 @@ // Copyright 2014 BitPay Inc. // Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or https://opensource.org/licenses/mit-license.php. // // To re-create univalue_escapes.h: @@ -12,8 +12,6 @@ #include #include "univalue.h" -using namespace std; - static bool initEscapes; static std::string escapes[256]; diff --git a/daemon/univalue/include/univalue.h b/daemon/univalue/include/univalue.h index cc92cd2a9c55..225533ce30bd 100644 --- a/daemon/univalue/include/univalue.h +++ b/daemon/univalue/include/univalue.h @@ -1,19 +1,19 @@ // Copyright 2014 BitPay Inc. // Copyright 2015 Bitcoin Core Developers // Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or https://opensource.org/licenses/mit-license.php. #ifndef __UNIVALUE_H__ #define __UNIVALUE_H__ #include +#include #include #include #include #include -#include // .get_int64() #include // std::pair class UniValue { @@ -69,7 +69,8 @@ class UniValue { size_t size() const { return values.size(); } bool getBool() const { return isTrue(); } - bool checkObject(const std::map& memberTypes); + void getObjMap(std::map& kv) const; + bool checkObject(const std::map& memberTypes) const; const UniValue& operator[](const std::string& key) const; const UniValue& operator[](size_t index) const; bool exists(const std::string& key) const { size_t i; return findKey(key, i); } @@ -104,8 +105,13 @@ class UniValue { UniValue tmpVal(val_); return push_back(tmpVal); } + bool push_back(double val_) { + UniValue tmpVal(val_); + return push_back(tmpVal); + } bool push_backV(const std::vector& vec); + void __pushKV(const std::string& key, const UniValue& val); bool pushKV(const std::string& key, const UniValue& val); bool pushKV(const std::string& key, const std::string& val_) { UniValue tmpVal(VSTR, val_); @@ -123,6 +129,10 @@ class UniValue { UniValue tmpVal(val_); return pushKV(key, tmpVal); } + bool pushKV(const std::string& key, bool val_) { + UniValue tmpVal((bool)val_); + return pushKV(key, tmpVal); + } bool pushKV(const std::string& key, int val_) { UniValue tmpVal((int64_t)val_); return pushKV(key, tmpVal); @@ -137,7 +147,7 @@ class UniValue { unsigned int indentLevel = 0) const; bool read(const char *raw, size_t len); - bool read(const char *raw); + bool read(const char *raw) { return read(raw, strlen(raw)); } bool read(const std::string& rawStr) { return read(rawStr.data(), rawStr.size()); } diff --git a/daemon/univalue/lib/.gitignore b/daemon/univalue/lib/.gitignore new file mode 100644 index 000000000000..ee7fc2851cd5 --- /dev/null +++ b/daemon/univalue/lib/.gitignore @@ -0,0 +1,2 @@ +gen +.libs diff --git a/daemon/univalue/lib/univalue.cpp b/daemon/univalue/lib/univalue.cpp index b9491a967b7d..2b966ad859b4 100644 --- a/daemon/univalue/lib/univalue.cpp +++ b/daemon/univalue/lib/univalue.cpp @@ -1,80 +1,15 @@ // Copyright 2014 BitPay Inc. // Copyright 2015 Bitcoin Core Developers // Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or https://opensource.org/licenses/mit-license.php. #include -#include #include -#include #include -#include #include -#include #include "univalue.h" -namespace -{ -static bool ParsePrechecks(const std::string& str) -{ - if (str.empty()) // No empty string allowed - return false; - if (str.size() >= 1 && (json_isspace(str[0]) || json_isspace(str[str.size()-1]))) // No padding allowed - return false; - if (str.size() != strlen(str.c_str())) // No embedded NUL characters allowed - return false; - return true; -} - -bool ParseInt32(const std::string& str, int32_t *out) -{ - if (!ParsePrechecks(str)) - return false; - char *endp = NULL; - errno = 0; // strtol will not set errno if valid - long int n = strtol(str.c_str(), &endp, 10); - if(out) *out = (int32_t)n; - // Note that strtol returns a *long int*, so even if strtol doesn't report a over/underflow - // we still have to check that the returned value is within the range of an *int32_t*. On 64-bit - // platforms the size of these types may be different. - return endp && *endp == 0 && !errno && - n >= std::numeric_limits::min() && - n <= std::numeric_limits::max(); -} - -bool ParseInt64(const std::string& str, int64_t *out) -{ - if (!ParsePrechecks(str)) - return false; - char *endp = NULL; - errno = 0; // strtoll will not set errno if valid - long long int n = strtoll(str.c_str(), &endp, 10); - if(out) *out = (int64_t)n; - // Note that strtoll returns a *long long int*, so even if strtol doesn't report a over/underflow - // we still have to check that the returned value is within the range of an *int64_t*. - return endp && *endp == 0 && !errno && - n >= std::numeric_limits::min() && - n <= std::numeric_limits::max(); -} - -bool ParseDouble(const std::string& str, double *out) -{ - if (!ParsePrechecks(str)) - return false; - if (str.size() >= 2 && str[0] == '0' && str[1] == 'x') // No hexadecimal floats allowed - return false; - std::istringstream text(str); - text.imbue(std::locale::classic()); - double result; - text >> result; - if(out) *out = result; - return text.eof() && !text.fail(); -} -} - -using namespace std; - const UniValue NullUniValue; void UniValue::clear() @@ -100,15 +35,15 @@ bool UniValue::setBool(bool val_) return true; } -static bool validNumStr(const string& s) +static bool validNumStr(const std::string& s) { - string tokenVal; + std::string tokenVal; unsigned int consumed; enum jtokentype tt = getJsonToken(tokenVal, consumed, s.data(), s.data() + s.size()); return (tt == JTOK_NUMBER); } -bool UniValue::setNumStr(const string& val_) +bool UniValue::setNumStr(const std::string& val_) { if (!validNumStr(val_)) return false; @@ -121,7 +56,7 @@ bool UniValue::setNumStr(const string& val_) bool UniValue::setInt(uint64_t val_) { - ostringstream oss; + std::ostringstream oss; oss << val_; @@ -130,7 +65,7 @@ bool UniValue::setInt(uint64_t val_) bool UniValue::setInt(int64_t val_) { - ostringstream oss; + std::ostringstream oss; oss << val_; @@ -139,7 +74,7 @@ bool UniValue::setInt(int64_t val_) bool UniValue::setFloat(double val_) { - ostringstream oss; + std::ostringstream oss; oss << std::setprecision(16) << val_; @@ -148,7 +83,7 @@ bool UniValue::setFloat(double val_) return ret; } -bool UniValue::setStr(const string& val_) +bool UniValue::setStr(const std::string& val_) { clear(); typ = VSTR; @@ -189,13 +124,22 @@ bool UniValue::push_backV(const std::vector& vec) return true; } +void UniValue::__pushKV(const std::string& key, const UniValue& val_) +{ + keys.push_back(key); + values.push_back(val_); +} + bool UniValue::pushKV(const std::string& key, const UniValue& val_) { if (typ != VOBJ) return false; - keys.push_back(key); - values.push_back(val_); + size_t idx; + if (findKey(key, idx)) + values[idx] = val_; + else + __pushKV(key, val_); return true; } @@ -204,14 +148,22 @@ bool UniValue::pushKVs(const UniValue& obj) if (typ != VOBJ || obj.typ != VOBJ) return false; - for (unsigned int i = 0; i < obj.keys.size(); i++) { - keys.push_back(obj.keys[i]); - values.push_back(obj.values.at(i)); - } + for (size_t i = 0; i < obj.keys.size(); i++) + __pushKV(obj.keys[i], obj.values.at(i)); return true; } +void UniValue::getObjMap(std::map& kv) const +{ + if (typ != VOBJ) + return; + + kv.clear(); + for (size_t i = 0; i < keys.size(); i++) + kv[keys[i]] = values[i]; +} + bool UniValue::findKey(const std::string& key, size_t& retIdx) const { for (size_t i = 0; i < keys.size(); i++) { @@ -224,8 +176,11 @@ bool UniValue::findKey(const std::string& key, size_t& retIdx) const return false; } -bool UniValue::checkObject(const std::map& t) +bool UniValue::checkObject(const std::map& t) const { + if (typ != VOBJ) + return false; + for (std::map::const_iterator it = t.begin(); it != t.end(); ++it) { size_t idx = 0; @@ -285,75 +240,3 @@ const UniValue& find_value(const UniValue& obj, const std::string& name) return NullUniValue; } -const std::vector& UniValue::getKeys() const -{ - if (typ != VOBJ) - throw std::runtime_error("JSON value is not an object as expected"); - return keys; -} - -const std::vector& UniValue::getValues() const -{ - if (typ != VOBJ && typ != VARR) - throw std::runtime_error("JSON value is not an object or array as expected"); - return values; -} - -bool UniValue::get_bool() const -{ - if (typ != VBOOL) - throw std::runtime_error("JSON value is not a boolean as expected"); - return getBool(); -} - -const std::string& UniValue::get_str() const -{ - if (typ != VSTR) - throw std::runtime_error("JSON value is not a string as expected"); - return getValStr(); -} - -int UniValue::get_int() const -{ - if (typ != VNUM) - throw std::runtime_error("JSON value is not an integer as expected"); - int32_t retval; - if (!ParseInt32(getValStr(), &retval)) - throw std::runtime_error("JSON integer out of range"); - return retval; -} - -int64_t UniValue::get_int64() const -{ - if (typ != VNUM) - throw std::runtime_error("JSON value is not an integer as expected"); - int64_t retval; - if (!ParseInt64(getValStr(), &retval)) - throw std::runtime_error("JSON integer out of range"); - return retval; -} - -double UniValue::get_real() const -{ - if (typ != VNUM) - throw std::runtime_error("JSON value is not a number as expected"); - double retval; - if (!ParseDouble(getValStr(), &retval)) - throw std::runtime_error("JSON double out of range"); - return retval; -} - -const UniValue& UniValue::get_obj() const -{ - if (typ != VOBJ) - throw std::runtime_error("JSON value is not an object as expected"); - return *this; -} - -const UniValue& UniValue::get_array() const -{ - if (typ != VARR) - throw std::runtime_error("JSON value is not an array as expected"); - return *this; -} - diff --git a/daemon/univalue/lib/univalue_get.cpp b/daemon/univalue/lib/univalue_get.cpp new file mode 100644 index 000000000000..8b2da7555a07 --- /dev/null +++ b/daemon/univalue/lib/univalue_get.cpp @@ -0,0 +1,148 @@ +// Copyright 2014 BitPay Inc. +// Copyright 2015 Bitcoin Core Developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or https://opensource.org/licenses/mit-license.php. + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "univalue.h" + +namespace +{ +static bool ParsePrechecks(const std::string& str) +{ + if (str.empty()) // No empty string allowed + return false; + if (str.size() >= 1 && (json_isspace(str[0]) || json_isspace(str[str.size()-1]))) // No padding allowed + return false; + if (str.size() != strlen(str.c_str())) // No embedded NUL characters allowed + return false; + return true; +} + +bool ParseInt32(const std::string& str, int32_t *out) +{ + if (!ParsePrechecks(str)) + return false; + char *endp = NULL; + errno = 0; // strtol will not set errno if valid + long int n = strtol(str.c_str(), &endp, 10); + if(out) *out = (int32_t)n; + // Note that strtol returns a *long int*, so even if strtol doesn't report a over/underflow + // we still have to check that the returned value is within the range of an *int32_t*. On 64-bit + // platforms the size of these types may be different. + return endp && *endp == 0 && !errno && + n >= std::numeric_limits::min() && + n <= std::numeric_limits::max(); +} + +bool ParseInt64(const std::string& str, int64_t *out) +{ + if (!ParsePrechecks(str)) + return false; + char *endp = NULL; + errno = 0; // strtoll will not set errno if valid + long long int n = strtoll(str.c_str(), &endp, 10); + if(out) *out = (int64_t)n; + // Note that strtoll returns a *long long int*, so even if strtol doesn't report a over/underflow + // we still have to check that the returned value is within the range of an *int64_t*. + return endp && *endp == 0 && !errno && + n >= std::numeric_limits::min() && + n <= std::numeric_limits::max(); +} + +bool ParseDouble(const std::string& str, double *out) +{ + if (!ParsePrechecks(str)) + return false; + if (str.size() >= 2 && str[0] == '0' && str[1] == 'x') // No hexadecimal floats allowed + return false; + std::istringstream text(str); + text.imbue(std::locale::classic()); + double result; + text >> result; + if(out) *out = result; + return text.eof() && !text.fail(); +} +} + +const std::vector& UniValue::getKeys() const +{ + if (typ != VOBJ) + throw std::runtime_error("JSON value is not an object as expected"); + return keys; +} + +const std::vector& UniValue::getValues() const +{ + if (typ != VOBJ && typ != VARR) + throw std::runtime_error("JSON value is not an object or array as expected"); + return values; +} + +bool UniValue::get_bool() const +{ + if (typ != VBOOL) + throw std::runtime_error("JSON value is not a boolean as expected"); + return getBool(); +} + +const std::string& UniValue::get_str() const +{ + if (typ != VSTR) + throw std::runtime_error("JSON value is not a string as expected"); + return getValStr(); +} + +int UniValue::get_int() const +{ + if (typ != VNUM) + throw std::runtime_error("JSON value is not an integer as expected"); + int32_t retval; + if (!ParseInt32(getValStr(), &retval)) + throw std::runtime_error("JSON integer out of range"); + return retval; +} + +int64_t UniValue::get_int64() const +{ + if (typ != VNUM) + throw std::runtime_error("JSON value is not an integer as expected"); + int64_t retval; + if (!ParseInt64(getValStr(), &retval)) + throw std::runtime_error("JSON integer out of range"); + return retval; +} + +double UniValue::get_real() const +{ + if (typ != VNUM) + throw std::runtime_error("JSON value is not a number as expected"); + double retval; + if (!ParseDouble(getValStr(), &retval)) + throw std::runtime_error("JSON double out of range"); + return retval; +} + +const UniValue& UniValue::get_obj() const +{ + if (typ != VOBJ) + throw std::runtime_error("JSON value is not an object as expected"); + return *this; +} + +const UniValue& UniValue::get_array() const +{ + if (typ != VARR) + throw std::runtime_error("JSON value is not an array as expected"); + return *this; +} + diff --git a/daemon/univalue/lib/univalue_read.cpp b/daemon/univalue/lib/univalue_read.cpp index 2bd83238b486..7c17c4bec808 100644 --- a/daemon/univalue/lib/univalue_read.cpp +++ b/daemon/univalue/lib/univalue_read.cpp @@ -1,6 +1,6 @@ // Copyright 2014 BitPay Inc. // Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or https://opensource.org/licenses/mit-license.php. #include #include @@ -8,7 +8,13 @@ #include "univalue.h" #include "univalue_utffilter.h" -using namespace std; +/* + * According to stackexchange, the original json test suite wanted + * to limit depth to 22. Widely-deployed PHP bails at depth 512, + * so we will follow PHP's lead, which should be more than sufficient + * (further stackexchange comments indicate depth > 32 rarely occurs). + */ +static const size_t MAX_JSON_DEPTH = 512; static bool json_isdigit(int ch) { @@ -42,7 +48,7 @@ static const char *hatoui(const char *first, const char *last, return first; } -enum jtokentype getJsonToken(string& tokenVal, unsigned int& consumed, +enum jtokentype getJsonToken(std::string& tokenVal, unsigned int& consumed, const char *raw, const char *end) { tokenVal.clear(); @@ -114,7 +120,7 @@ enum jtokentype getJsonToken(string& tokenVal, unsigned int& consumed, case '8': case '9': { // part 1: int - string numStr; + std::string numStr; const char *first = raw; @@ -174,7 +180,7 @@ enum jtokentype getJsonToken(string& tokenVal, unsigned int& consumed, case '"': { raw++; // skip " - string valStr; + std::string valStr; JSONUTF8StringFilter writer(valStr); while (true) { @@ -255,9 +261,9 @@ bool UniValue::read(const char *raw, size_t size) clear(); uint32_t expectMask = 0; - vector stack; + std::vector stack; - string tokenVal; + std::string tokenVal; unsigned int consumed; enum jtokentype tok = JTOK_NONE; enum jtokentype last_tok = JTOK_NONE; @@ -267,7 +273,7 @@ bool UniValue::read(const char *raw, size_t size) tok = getJsonToken(tokenVal, consumed, raw, end); if (tok == JTOK_NONE || tok == JTOK_ERR) - return false; + goto return_fail; raw += consumed; bool isValueOpen = jsonTokenIsValue(tok) || @@ -275,33 +281,33 @@ bool UniValue::read(const char *raw, size_t size) if (expect(VALUE)) { if (!isValueOpen) - return false; + goto return_fail; clearExpect(VALUE); } else if (expect(ARR_VALUE)) { bool isArrValue = isValueOpen || (tok == JTOK_ARR_CLOSE); if (!isArrValue) - return false; + goto return_fail; clearExpect(ARR_VALUE); } else if (expect(OBJ_NAME)) { bool isObjName = (tok == JTOK_OBJ_CLOSE || tok == JTOK_STRING); if (!isObjName) - return false; + goto return_fail; } else if (expect(COLON)) { if (tok != JTOK_COLON) - return false; + goto return_fail; clearExpect(COLON); } else if (!expect(COLON) && (tok == JTOK_COLON)) { - return false; + goto return_fail; } if (expect(NOT_VALUE)) { if (isValueOpen) - return false; + goto return_fail; clearExpect(NOT_VALUE); } @@ -325,6 +331,9 @@ bool UniValue::read(const char *raw, size_t size) stack.push_back(newTop); } + if (stack.size() > MAX_JSON_DEPTH) + goto return_fail; + if (utyp == VOBJ) setExpect(OBJ_NAME); else @@ -335,12 +344,12 @@ bool UniValue::read(const char *raw, size_t size) case JTOK_OBJ_CLOSE: case JTOK_ARR_CLOSE: { if (!stack.size() || (last_tok == JTOK_COMMA)) - return false; + goto return_fail; VType utyp = (tok == JTOK_OBJ_CLOSE ? VOBJ : VARR); UniValue *top = stack.back(); if (utyp != top->getType()) - return false; + goto return_fail; stack.pop_back(); clearExpect(OBJ_NAME); @@ -350,11 +359,11 @@ bool UniValue::read(const char *raw, size_t size) case JTOK_COLON: { if (!stack.size()) - return false; + goto return_fail; UniValue *top = stack.back(); if (top->getType() != VOBJ) - return false; + goto return_fail; setExpect(VALUE); break; @@ -363,7 +372,7 @@ bool UniValue::read(const char *raw, size_t size) case JTOK_COMMA: { if (!stack.size() || (last_tok == JTOK_COMMA) || (last_tok == JTOK_ARR_OPEN)) - return false; + goto return_fail; UniValue *top = stack.back(); if (top->getType() == VOBJ) @@ -437,18 +446,19 @@ bool UniValue::read(const char *raw, size_t size) } default: - return false; + goto return_fail; } } while (!stack.empty ()); /* Check that nothing follows the initial construct (parsed above). */ tok = getJsonToken(tokenVal, consumed, raw, end); if (tok != JTOK_NONE) - return false; + goto return_fail; return true; -} -bool UniValue::read(const char *raw) { - return read(raw, strlen(raw)); +return_fail: + clear(); + return false; } + diff --git a/daemon/univalue/lib/univalue_utffilter.h b/daemon/univalue/lib/univalue_utffilter.h index b4a9ddc0a310..c24ac58eaf2b 100644 --- a/daemon/univalue/lib/univalue_utffilter.h +++ b/daemon/univalue/lib/univalue_utffilter.h @@ -1,6 +1,6 @@ // Copyright 2016 Wladimir J. van der Laan // Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or https://opensource.org/licenses/mit-license.php. #ifndef UNIVALUE_UTFFILTER_H #define UNIVALUE_UTFFILTER_H @@ -13,7 +13,7 @@ class JSONUTF8StringFilter { public: - JSONUTF8StringFilter(std::string &s): + explicit JSONUTF8StringFilter(std::string &s): str(s), is_valid(true), codepoint(0), state(0), surpair(0) { } diff --git a/daemon/univalue/lib/univalue_write.cpp b/daemon/univalue/lib/univalue_write.cpp index cf2783599116..db039fcb00d1 100644 --- a/daemon/univalue/lib/univalue_write.cpp +++ b/daemon/univalue/lib/univalue_write.cpp @@ -1,18 +1,15 @@ // Copyright 2014 BitPay Inc. // Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or https://opensource.org/licenses/mit-license.php. #include -#include #include #include "univalue.h" #include "univalue_escapes.h" -using namespace std; - -static string json_escape(const string& inS) +static std::string json_escape(const std::string& inS) { - string outS; + std::string outS; outS.reserve(inS.size() * 2); for (unsigned int i = 0; i < inS.size(); i++) { @@ -28,10 +25,10 @@ static string json_escape(const string& inS) return outS; } -string UniValue::write(unsigned int prettyIndent, - unsigned int indentLevel) const +std::string UniValue::write(unsigned int prettyIndent, + unsigned int indentLevel) const { - string s; + std::string s; s.reserve(1024); unsigned int modIndent = indentLevel; @@ -62,12 +59,12 @@ string UniValue::write(unsigned int prettyIndent, return s; } -static void indentStr(unsigned int prettyIndent, unsigned int indentLevel, string& s) +static void indentStr(unsigned int prettyIndent, unsigned int indentLevel, std::string& s) { s.append(prettyIndent * indentLevel, ' '); } -void UniValue::writeArray(unsigned int prettyIndent, unsigned int indentLevel, string& s) const +void UniValue::writeArray(unsigned int prettyIndent, unsigned int indentLevel, std::string& s) const { s += "["; if (prettyIndent) @@ -89,7 +86,7 @@ void UniValue::writeArray(unsigned int prettyIndent, unsigned int indentLevel, s s += "]"; } -void UniValue::writeObject(unsigned int prettyIndent, unsigned int indentLevel, string& s) const +void UniValue::writeObject(unsigned int prettyIndent, unsigned int indentLevel, std::string& s) const { s += "{"; if (prettyIndent) diff --git a/daemon/univalue/test/.gitignore b/daemon/univalue/test/.gitignore new file mode 100644 index 000000000000..7b27cf0da290 --- /dev/null +++ b/daemon/univalue/test/.gitignore @@ -0,0 +1,8 @@ + +object +unitester +test_json +no_nul + +*.trs +*.log diff --git a/daemon/univalue/test/fail45.json b/daemon/univalue/test/fail45.json new file mode 100644 index 000000000000..03a30d88009a --- /dev/null +++ b/daemon/univalue/test/fail45.json @@ -0,0 +1 @@ +[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] diff --git a/daemon/univalue/test/object.cpp b/daemon/univalue/test/object.cpp index f1f2e63b3d6f..a1684939075c 100644 --- a/daemon/univalue/test/object.cpp +++ b/daemon/univalue/test/object.cpp @@ -1,7 +1,7 @@ // Copyright (c) 2014 BitPay Inc. // Copyright (c) 2014-2016 The Bitcoin Core developers // Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or https://opensource.org/licenses/mit-license.php. #include #include @@ -19,9 +19,10 @@ #define BOOST_CHECK_THROW(stmt, excMatch) { \ try { \ (stmt); \ + assert(0 && "No exception caught"); \ } catch (excMatch & e) { \ } catch (...) { \ - assert(0); \ + assert(0 && "Wrong exception caught"); \ } \ } #define BOOST_CHECK_NO_THROW(stmt) { \ @@ -205,14 +206,23 @@ BOOST_AUTO_TEST_CASE(univalue_array) BOOST_CHECK(arr.push_backV(vec)); + BOOST_CHECK(arr.push_back((uint64_t) 400ULL)); + BOOST_CHECK(arr.push_back((int64_t) -400LL)); + BOOST_CHECK(arr.push_back((int) -401)); + BOOST_CHECK(arr.push_back(-40.1)); + BOOST_CHECK_EQUAL(arr.empty(), false); - BOOST_CHECK_EQUAL(arr.size(), 5); + BOOST_CHECK_EQUAL(arr.size(), 9); BOOST_CHECK_EQUAL(arr[0].getValStr(), "1023"); BOOST_CHECK_EQUAL(arr[1].getValStr(), "zippy"); BOOST_CHECK_EQUAL(arr[2].getValStr(), "pippy"); BOOST_CHECK_EQUAL(arr[3].getValStr(), "boing"); BOOST_CHECK_EQUAL(arr[4].getValStr(), "going"); + BOOST_CHECK_EQUAL(arr[5].getValStr(), "400"); + BOOST_CHECK_EQUAL(arr[6].getValStr(), "-400"); + BOOST_CHECK_EQUAL(arr[7].getValStr(), "-401"); + BOOST_CHECK_EQUAL(arr[8].getValStr(), "-40.1"); BOOST_CHECK_EQUAL(arr[999].getValStr(), ""); @@ -251,6 +261,12 @@ BOOST_AUTO_TEST_CASE(univalue_object) strKey = "temperature"; BOOST_CHECK(obj.pushKV(strKey, (double) 90.012)); + strKey = "moon"; + BOOST_CHECK(obj.pushKV(strKey, true)); + + strKey = "spoon"; + BOOST_CHECK(obj.pushKV(strKey, false)); + UniValue obj2(UniValue::VOBJ); BOOST_CHECK(obj2.pushKV("cat1", 9000)); BOOST_CHECK(obj2.pushKV("cat2", 12345)); @@ -258,7 +274,7 @@ BOOST_AUTO_TEST_CASE(univalue_object) BOOST_CHECK(obj.pushKVs(obj2)); BOOST_CHECK_EQUAL(obj.empty(), false); - BOOST_CHECK_EQUAL(obj.size(), 9); + BOOST_CHECK_EQUAL(obj.size(), 11); BOOST_CHECK_EQUAL(obj["age"].getValStr(), "100"); BOOST_CHECK_EQUAL(obj["first"].getValStr(), "John"); @@ -267,6 +283,8 @@ BOOST_AUTO_TEST_CASE(univalue_object) BOOST_CHECK_EQUAL(obj["time"].getValStr(), "3600"); BOOST_CHECK_EQUAL(obj["calories"].getValStr(), "12"); BOOST_CHECK_EQUAL(obj["temperature"].getValStr(), "90.012"); + BOOST_CHECK_EQUAL(obj["moon"].getValStr(), "1"); + BOOST_CHECK_EQUAL(obj["spoon"].getValStr(), ""); BOOST_CHECK_EQUAL(obj["cat1"].getValStr(), "9000"); BOOST_CHECK_EQUAL(obj["cat2"].getValStr(), "12345"); @@ -279,6 +297,8 @@ BOOST_AUTO_TEST_CASE(univalue_object) BOOST_CHECK(obj.exists("time")); BOOST_CHECK(obj.exists("calories")); BOOST_CHECK(obj.exists("temperature")); + BOOST_CHECK(obj.exists("moon")); + BOOST_CHECK(obj.exists("spoon")); BOOST_CHECK(obj.exists("cat1")); BOOST_CHECK(obj.exists("cat2")); @@ -292,6 +312,8 @@ BOOST_AUTO_TEST_CASE(univalue_object) objTypes["time"] = UniValue::VNUM; objTypes["calories"] = UniValue::VNUM; objTypes["temperature"] = UniValue::VNUM; + objTypes["moon"] = UniValue::VBOOL; + objTypes["spoon"] = UniValue::VBOOL; objTypes["cat1"] = UniValue::VNUM; objTypes["cat2"] = UniValue::VNUM; BOOST_CHECK(obj.checkObject(objTypes)); @@ -302,6 +324,27 @@ BOOST_AUTO_TEST_CASE(univalue_object) obj.clear(); BOOST_CHECK(obj.empty()); BOOST_CHECK_EQUAL(obj.size(), 0); + BOOST_CHECK_EQUAL(obj.getType(), UniValue::VNULL); + + BOOST_CHECK_EQUAL(obj.setObject(), true); + UniValue uv; + uv.setInt(42); + obj.__pushKV("age", uv); + BOOST_CHECK_EQUAL(obj.size(), 1); + BOOST_CHECK_EQUAL(obj["age"].getValStr(), "42"); + + uv.setInt(43); + obj.pushKV("age", uv); + BOOST_CHECK_EQUAL(obj.size(), 1); + BOOST_CHECK_EQUAL(obj["age"].getValStr(), "43"); + + obj.pushKV("name", "foo bar"); + + std::map kv; + obj.getObjMap(kv); + BOOST_CHECK_EQUAL(kv["age"].getValStr(), "43"); + BOOST_CHECK_EQUAL(kv["name"].getValStr(), "foo bar"); + } static const char *json1 = diff --git a/daemon/univalue/test/pass4.json b/daemon/univalue/test/pass4.json new file mode 100644 index 000000000000..f5a680b31c6f --- /dev/null +++ b/daemon/univalue/test/pass4.json @@ -0,0 +1 @@ +[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] diff --git a/daemon/univalue/test/unitester.cpp b/daemon/univalue/test/unitester.cpp index 2c37794a4bdb..1a6c9ef69f33 100644 --- a/daemon/univalue/test/unitester.cpp +++ b/daemon/univalue/test/unitester.cpp @@ -1,6 +1,6 @@ // Copyright 2014 BitPay Inc. // Distributed under the MIT/X11 software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or https://opensource.org/licenses/mit-license.php. #include #include @@ -17,8 +17,7 @@ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) #endif -using namespace std; -string srcdir(JSON_TEST_SRC); +std::string srcdir(JSON_TEST_SRC); static bool test_failed = false; #define d_assert(expr) { if (!(expr)) { test_failed = true; fprintf(stderr, "%s failed\n", filename.c_str()); } } @@ -30,9 +29,9 @@ static std::string rtrim(std::string s) return s; } -static void runtest(string filename, const string& jdata) +static void runtest(std::string filename, const std::string& jdata) { - string prefix = filename.substr(0, 4); + std::string prefix = filename.substr(0, 4); bool wantPass = (prefix == "pass") || (prefix == "roun"); bool wantFail = (prefix == "fail"); @@ -56,19 +55,19 @@ static void runtest(string filename, const string& jdata) static void runtest_file(const char *filename_) { - string basename(filename_); - string filename = srcdir + "/" + basename; + std::string basename(filename_); + std::string filename = srcdir + "/" + basename; FILE *f = fopen(filename.c_str(), "r"); assert(f != NULL); - string jdata; + std::string jdata; char buf[4096]; while (!feof(f)) { int bread = fread(buf, 1, sizeof(buf), f); assert(!ferror(f)); - string s(buf, bread); + std::string s(buf, bread); jdata += s; } @@ -115,6 +114,7 @@ static const char *filenames[] = { "fail41.json", // invalid unicode: unfinished UTF-8 "fail42.json", // valid json with garbage following a nul byte "fail44.json", // unterminated string + "fail45.json", // nested beyond max depth "fail3.json", "fail4.json", // extra comma "fail5.json", @@ -125,6 +125,7 @@ static const char *filenames[] = { "pass1.json", "pass2.json", "pass3.json", + "pass4.json", "round1.json", // round-trip test "round2.json", // unicode "round3.json", // bare string diff --git a/daemon/util.cpp b/daemon/util.cpp index 1eaabdc6d75d..d7ceece7dab3 100644 --- a/daemon/util.cpp +++ b/daemon/util.cpp @@ -108,10 +108,10 @@ std::string to_internal(const std::string&); using namespace std; // UNIGRID only features -// Masternode -bool fMasterNode = false; -string strMasterNodePrivKey = ""; -string strMasterNodeAddr = ""; +// Gridnode +bool fGridnode = false; +string strGridnodePrivKey = ""; +string strGridnodeAddr = ""; bool fLiteMode = false; // SwiftX bool fEnableSwiftTX = true; @@ -125,7 +125,7 @@ const int64_t AUTOMINT_DELAY = (60 * 5); // Wait at least 5 minutes until Automi int nAnonymizeUnigridAmount = 1000; int nLiquidityProvider = 0; /** Spork enforcement enabled time */ -int64_t enforceMasternodePaymentsTime = 4085657524; +int64_t enforceGridnodePaymentsTime = 4085657524; bool fSucessfullyLoaded = false; /** All denominations used by obfuscation */ std::vector obfuScationDenominations; @@ -243,10 +243,10 @@ bool LogAcceptCategory(const char* category) if (ptrCategory->count(string("unigrid"))) { ptrCategory->insert(string("obfuscation")); ptrCategory->insert(string("swiftx")); - ptrCategory->insert(string("masternode")); - ptrCategory->insert(string("mnpayments")); + ptrCategory->insert(string("gridnode")); + ptrCategory->insert(string("gnpayments")); ptrCategory->insert(string("zero")); - ptrCategory->insert(string("mnbudget")); + ptrCategory->insert(string("gnbudget")); } } const set& setCategories = *ptrCategory.get(); @@ -343,7 +343,7 @@ void ParseParameters(int argc, const char* const argv[]) InterpretNegativeSetting(str, strValue); mapArgs[str] = strValue; - mapMultiArgs[str].push_back(strValue); + mapMultiArgs[str].push_back(strValue); } } @@ -504,9 +504,9 @@ boost::filesystem::path GetConfigFile() return pathConfigFile; } -boost::filesystem::path GetMasternodeConfigFile() +boost::filesystem::path GetGridnodeConfigFile() { - boost::filesystem::path pathConfigFile(GetArg("-mnconf", "masternode.conf")); + boost::filesystem::path pathConfigFile(GetArg("-gnconf", "gridnode.conf")); if (!pathConfigFile.is_complete()) pathConfigFile = GetDataDir() / pathConfigFile; return pathConfigFile; } @@ -551,8 +551,8 @@ void ReadConfigFile(map& mapSettingsRet, strHeader += rpc_user; strHeader += "\nrpcpassword="; strHeader += rpc_passwd; - strHeader += "\naddnode=seed1.unigrid.org\naddnode=seed2.unigrid.org\naddnode=seed3.unigrid.org\naddnode=seed4.unigrid.org\naddnode=seed5.unigrid.org\naddnode=seed6.unigrid.org\n"; - strHeader += "unigridstake=1\nmaxconnections=250"; + //strHeader += "\naddnode=seed1.unigrid.org\naddnode=seed2.unigrid.org\naddnode=seed3.unigrid.org\naddnode=seed4.unigrid.org\naddnode=seed5.unigrid.org\naddnode=seed6.unigrid.org\n"; + strHeader += "\nunigridstake=1\nmaxconnections=250"; fwrite(strHeader.c_str(), std::strlen(strHeader.c_str()), 1, configFile); fclose(configFile); } diff --git a/daemon/util.h b/daemon/util.h index 4bf0d5fd7d4d..b59dc8493674 100644 --- a/daemon/util.h +++ b/daemon/util.h @@ -32,7 +32,7 @@ //UNIGRID only features -extern bool fMasterNode; +extern bool fGridnode; extern bool fLiteMode; extern bool fEnableSwiftTX; extern int nSwiftTXDepth; @@ -42,8 +42,8 @@ extern int nPreferredDenom; extern int nAnonymizeUnigridAmount; extern int nLiquidityProvider; extern bool fEnableZeromint; -extern int64_t enforceMasternodePaymentsTime; -extern std::string strMasterNodeAddr; +extern int64_t enforceGridnodePaymentsTime; +extern std::string strGridnodeAddr; extern int keysLoaded; extern bool fSucessfullyLoaded; extern std::vector obfuScationDenominations; @@ -71,7 +71,7 @@ int LogPrintStr(const std::string& str); #define LogPrintf(...) LogPrint(NULL, __VA_ARGS__) /** - * When we switch to C++11, this can be switched to variadic templates instead + * When we switch to c++17, this can be switched to variadic templates instead * of this macro-based construction (see tinyformat.h). */ #define MAKE_ERROR_AND_LOG_FUNC(n) \ @@ -120,7 +120,7 @@ bool TryCreateDirectory(const boost::filesystem::path& p); boost::filesystem::path GetDefaultDataDir(const std::string name = "UNIGRID"); const boost::filesystem::path& GetDataDir(bool fNetSpecific = true); boost::filesystem::path GetConfigFile(); -boost::filesystem::path GetMasternodeConfigFile(); +boost::filesystem::path GetGridnodeConfigFile(); boost::filesystem::path GetSslCert(); boost::filesystem::path GetSslKey(); #ifndef WIN32 diff --git a/daemon/validationinterface.cpp b/daemon/validationinterface.cpp index 3013809465e8..61d93d551465 100644 --- a/daemon/validationinterface.cpp +++ b/daemon/validationinterface.cpp @@ -16,29 +16,29 @@ CMainSignals& GetMainSignals() void RegisterValidationInterface(CValidationInterface* pwalletIn) { // XX42 g_signals.EraseTransaction.connect(boost::bind(&CValidationInterface::EraseFromWallet, pwalletIn, _1)); - g_signals.UpdatedBlockTip.connect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, _1)); - g_signals.SyncTransaction.connect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, _1, _2)); - g_signals.NotifyTransactionLock.connect(boost::bind(&CValidationInterface::NotifyTransactionLock, pwalletIn, _1)); - g_signals.UpdatedTransaction.connect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, _1)); - g_signals.SetBestChain.connect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, _1)); - g_signals.Inventory.connect(boost::bind(&CValidationInterface::Inventory, pwalletIn, _1)); + g_signals.UpdatedBlockTip.connect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, boost::placeholders::_1)); + g_signals.SyncTransaction.connect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, boost::placeholders::_1, boost::placeholders::_2)); + g_signals.NotifyTransactionLock.connect(boost::bind(&CValidationInterface::NotifyTransactionLock, pwalletIn, boost::placeholders::_1)); + g_signals.UpdatedTransaction.connect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, boost::placeholders::_1)); + g_signals.SetBestChain.connect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, boost::placeholders::_1)); + g_signals.Inventory.connect(boost::bind(&CValidationInterface::Inventory, pwalletIn, boost::placeholders::_1)); g_signals.Broadcast.connect(boost::bind(&CValidationInterface::ResendWalletTransactions, pwalletIn)); - g_signals.BlockChecked.connect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, _1, _2)); + g_signals.BlockChecked.connect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, boost::placeholders::_1, boost::placeholders::_2)); // XX42 g_signals.ScriptForMining.connect(boost::bind(&CValidationInterface::GetScriptForMining, pwalletIn, _1)); - g_signals.BlockFound.connect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, _1)); + g_signals.BlockFound.connect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, boost::placeholders::_1)); } void UnregisterValidationInterface(CValidationInterface* pwalletIn) { - g_signals.BlockFound.disconnect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, _1)); + g_signals.BlockFound.disconnect(boost::bind(&CValidationInterface::ResetRequestCount, pwalletIn, boost::placeholders::_1)); // XX42 g_signals.ScriptForMining.disconnect(boost::bind(&CValidationInterface::GetScriptForMining, pwalletIn, _1)); - g_signals.BlockChecked.disconnect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, _1, _2)); + g_signals.BlockChecked.disconnect(boost::bind(&CValidationInterface::BlockChecked, pwalletIn, boost::placeholders::_1, boost::placeholders::_2)); g_signals.Broadcast.disconnect(boost::bind(&CValidationInterface::ResendWalletTransactions, pwalletIn)); - g_signals.Inventory.disconnect(boost::bind(&CValidationInterface::Inventory, pwalletIn, _1)); - g_signals.SetBestChain.disconnect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, _1)); - g_signals.UpdatedTransaction.disconnect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, _1)); - g_signals.NotifyTransactionLock.disconnect(boost::bind(&CValidationInterface::NotifyTransactionLock, pwalletIn, _1)); - g_signals.SyncTransaction.disconnect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, _1, _2)); - g_signals.UpdatedBlockTip.disconnect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, _1)); + g_signals.Inventory.disconnect(boost::bind(&CValidationInterface::Inventory, pwalletIn, boost::placeholders::_1)); + g_signals.SetBestChain.disconnect(boost::bind(&CValidationInterface::SetBestChain, pwalletIn, boost::placeholders::_1)); + g_signals.UpdatedTransaction.disconnect(boost::bind(&CValidationInterface::UpdatedTransaction, pwalletIn, boost::placeholders::_1)); + g_signals.NotifyTransactionLock.disconnect(boost::bind(&CValidationInterface::NotifyTransactionLock, pwalletIn, boost::placeholders::_1)); + g_signals.SyncTransaction.disconnect(boost::bind(&CValidationInterface::SyncTransaction, pwalletIn, boost::placeholders::_1, boost::placeholders::_2)); + g_signals.UpdatedBlockTip.disconnect(boost::bind(&CValidationInterface::UpdatedBlockTip, pwalletIn, boost::placeholders::_1)); // XX42 g_signals.EraseTransaction.disconnect(boost::bind(&CValidationInterface::EraseFromWallet, pwalletIn, _1)); } diff --git a/daemon/validationinterface.h b/daemon/validationinterface.h index d83c7d7b9b27..9813c62f46c9 100644 --- a/daemon/validationinterface.h +++ b/daemon/validationinterface.h @@ -10,6 +10,7 @@ #include #include +#include class CBlock; struct CBlockLocator; diff --git a/daemon/version.h b/daemon/version.h index e1b2479fe726..546c55e16f25 100644 --- a/daemon/version.h +++ b/daemon/version.h @@ -13,7 +13,7 @@ #include #include -static const int PROTOCOL_VERSION = 70932; +static const int PROTOCOL_VERSION = 70933; //! initial proto version, to be increased after version/verack negotiation static const int INIT_PROTO_VERSION = 209; @@ -22,10 +22,9 @@ static const int INIT_PROTO_VERSION = 209; static const int GETHEADERS_VERSION = 70077; //! disconnect from peers older than this proto version -static const int MIN_PEER_PROTO_VERSION_BEFORE_ENFORCEMENT = 70921; -static const int MIN_PEER_PROTO_VERSION_AFTER_ENFORCEMENT = 70930; - -//! masternodes older than this proto version use old strMessage format for mnannounce +static const int MIN_PEER_PROTO_VERSION_BEFORE_ENFORCEMENT = 70930; +static const int MIN_PEER_PROTO_VERSION_AFTER_HEDGEHOG = 70933; +//! Gridnodes older than this proto version use old strMessage format for mnannounce static const int MIN_PEER_MNANNOUNCE = 70913; //! nTime field added to CAddress, starting with this version; diff --git a/daemon/wallet.cpp b/daemon/wallet.cpp index 4463f6b2dbc0..4ef16685bd3a 100644 --- a/daemon/wallet.cpp +++ b/daemon/wallet.cpp @@ -13,7 +13,7 @@ #include "checkpoints.h" #include "coincontrol.h" #include "kernel.h" -#include "masternode-budget.h" +#include "gridnode-budget.h" #include "net.h" #include "primitives/transaction.h" #include "script/script.h" @@ -26,6 +26,7 @@ #include "util.h" #include "utilmoneystr.h" #include "zpivchain.h" +#include "restclient.h" #include "denomination_functions.h" #include "libzerocoin/Denominations.h" @@ -37,6 +38,7 @@ #include #include #include +#include using namespace std; @@ -466,7 +468,7 @@ void CWallet::AddToSpends(const uint256& wtxid) AddToSpends(txin.prevout, wtxid); } -bool CWallet::GetMasternodeVinAndKeys(CTxIn& txinRet, CPubKey& pubKeyRet, CKey& keyRet, std::string strTxHash, std::string strOutputIndex) +bool CWallet::GetGridnodeVinAndKeys(CTxIn& txinRet, CPubKey& pubKeyRet, CKey& keyRet, std::string strTxHash, std::string strOutputIndex) { // wait for reindex and/or import to finish if (fImporting || fReindex) return false; @@ -475,7 +477,7 @@ bool CWallet::GetMasternodeVinAndKeys(CTxIn& txinRet, CPubKey& pubKeyRet, CKey& std::vector vPossibleCoins; AvailableCoins(vPossibleCoins, true, NULL, false, ONLY_10000); if (vPossibleCoins.empty()) { - LogPrintf("CWallet::GetMasternodeVinAndKeys -- Could not locate any valid masternode vin\n"); + LogPrintf("CWallet::GetGridnodeVinAndKeys -- Could not locate any valid gridnode vin\n"); return false; } @@ -497,7 +499,7 @@ bool CWallet::GetMasternodeVinAndKeys(CTxIn& txinRet, CPubKey& pubKeyRet, CKey& if (out.tx->GetHash() == txHash && out.i == nOutputIndex) // found it! return GetVinAndKeysFromOutput(out, txinRet, pubKeyRet, keyRet); - LogPrintf("CWallet::GetMasternodeVinAndKeys -- Could not locate specified masternode vin\n"); + LogPrintf("CWallet::GetGridnodeVinAndKeys -- Could not locate specified gridnode vin\n"); return false; } @@ -1106,7 +1108,7 @@ CAmount CWalletTx::GetAnonymizableCredit(bool fUseCache) const const CTxIn vin = CTxIn(hashTx, i); if (pwallet->IsSpent(hashTx, i) || pwallet->IsLockedCoin(hashTx, i)) continue; - if (fMasterNode && vout[i].nValue == Params().MasternodeCollateral()) continue; // do not count MN-like outputs + if (fGridnode && vout[i].nValue == Params().GridnodeCollateral()) continue; // do not count GM-like outputs const int rounds = pwallet->GetInputObfuscationRounds(vin); if (rounds >= -2 && rounds < nZeromintPercentage) { @@ -1170,7 +1172,7 @@ CAmount CWalletTx::GetUnlockedCredit() const const CTxOut& txout = vout[i]; if (pwallet->IsSpent(hashTx, i) || pwallet->IsLockedCoin(hashTx, i)) continue; - if (fMasterNode && vout[i].nValue == Params().MasternodeCollateral()) continue; // do not count MN-like outputs + if (fGridnode && vout[i].nValue == Params().GridnodeCollateral()) continue; // do not count GM-like outputs nCredit += pwallet->GetCredit(txout, ISMINE_SPENDABLE); if (!MoneyRange(nCredit)) @@ -1201,7 +1203,7 @@ CAmount CWalletTx::GetLockedCredit() const // Add locked coins if (pwallet->IsLockedCoin(hashTx, i)) nCredit += pwallet->GetCredit(txout, ISMINE_SPENDABLE); - else if (fMasterNode && vout[i].nValue == Params().MasternodeCollateral()) + else if (fGridnode && vout[i].nValue == Params().GridnodeCollateral()) nCredit += pwallet->GetCredit(txout, ISMINE_SPENDABLE); if (!MoneyRange(nCredit)) @@ -1316,7 +1318,7 @@ CAmount CWalletTx::GetLockedWatchOnlyCredit() const // Add locked coins if (pwallet->IsLockedCoin(hashTx, i)) nCredit += pwallet->GetCredit(txout, ISMINE_WATCH_ONLY); - else if (fMasterNode && vout[i].nValue == Params().MasternodeCollateral()) + else if (fGridnode && vout[i].nValue == Params().GridnodeCollateral()) nCredit += pwallet->GetCredit(txout, ISMINE_WATCH_ONLY); if (!MoneyRange(nCredit)) @@ -1948,13 +1950,13 @@ void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed, const if (nCoinType == ONLY_DENOMINATED) { found = IsDenominatedAmount(pcoin->vout[i].nValue); } else if (nCoinType == ONLY_NOT10000IFMN) { - found = !(fMasterNode && pcoin->vout[i].nValue == Params().MasternodeCollateral()); + found = !(fGridnode && pcoin->vout[i].nValue >= Params().GridnodeCollateral()); } else if (nCoinType == ONLY_NONDENOMINATED_NOT10000IFMN) { if (IsCollateralAmount(pcoin->vout[i].nValue)) continue; // do not use collateral amounts found = !IsDenominatedAmount(pcoin->vout[i].nValue); - if (found && fMasterNode) found = pcoin->vout[i].nValue != Params().MasternodeCollateral(); // do not use Hot MN funds + if (found && fGridnode) found = pcoin->vout[i].nValue != Params().GridnodeCollateral(); // do not use Hot GM funds } else if (nCoinType == ONLY_10000) { - found = pcoin->vout[i].nValue == Params().MasternodeCollateral(); + found = pcoin->vout[i].nValue >= Params().GridnodeCollateral(); } else { found = true; } @@ -2095,14 +2097,14 @@ bool CWallet::SelectStakeCoins(std::list >& listInp } //check for min age - if (GetAdjustedTime() - nTxTime < nStakeMinAge) + if (GetAdjustedTime() - nTxTime < Params().GetStakeMinAge()) continue; //check that it is matured if (out.nDepth < (out.tx->IsCoinStake() ? Params().COINBASE_MATURITY() : 10)) continue; - if (fMasterNode && out.tx->vout[out.i].nValue == Params().MasternodeCollateral()) { + if (fGridnode && out.tx->vout[out.i].nValue == Params().GridnodeCollateral()) { continue; } @@ -2172,7 +2174,7 @@ bool CWallet::MintableCoins() nTxTime = mapBlockIndex.at(out.tx->hashBlock)->GetBlockTime(); } - if (GetAdjustedTime() - nTxTime > nStakeMinAge) + if (GetAdjustedTime() - nTxTime > Params().GetStakeMinAge()) return true; } } @@ -2386,7 +2388,7 @@ bool CWallet::SelectCoinsByDenominations(int nDenom, CAmount nValueMin, CAmount if (!(nDenom & (1 << 5))) fFoundDot1 = true; BOOST_FOREACH (const COutput& out, vCoins) { - // masternode-like input should not be selected by AvailableCoins now anyway + // gridnode-like input should not be selected by AvailableCoins now anyway //if(out.tx->vout[out.i].nValue == 10000*COIN) continue; if (nValueRet + out.tx->vout[out.i].nValue <= nValueMax) { bool fAccepted = false; @@ -2483,7 +2485,7 @@ bool CWallet::SelectCoinsDark(CAmount nValueMin, CAmount nValueMax, std::vector< if (out.tx->vout[out.i].nValue < CENT) continue; //do not allow collaterals to be selected if (IsCollateralAmount(out.tx->vout[out.i].nValue)) continue; - if (fMasterNode && out.tx->vout[out.i].nValue == Params().MasternodeCollateral()) continue; //masternode input + if (fGridnode && out.tx->vout[out.i].nValue == Params().GridnodeCollateral()) continue; //gridnode input if (nValueRet + out.tx->vout[out.i].nValue <= nValueMax) { CTxIn vin = CTxIn(out.tx->GetHash(), out.i); @@ -2693,16 +2695,74 @@ bool CWallet::CreateTransaction(const vector >& vecSend, CReserveKey& reservekey, CAmount& nFeeRet, std::string& strFailReason, - const CCoinControl* coinControl, + CCoinControl* coinControl, AvailableCoinsType coin_type, bool useIX, CAmount nFeePay) { + + // call hedgehog + + // use GetAddresses() to return map of addresses if (useIX && nFeePay < CENT) nFeePay = CENT; CAmount nValue = 0; + boost::asio::io_context io_context; + restclient restclient(io_context); + int hport = 52884; + if (mapArgs.count("-hport")) { + hport = std::stoi(mapArgs["-hport"]); + } + + bool isMintedAddress = false; + mint minted; + + if (restclient.getdatafromrestserver(io_context, hport)) { + std::vector mints = restclient.getMints(); + std::set addresses; + + addresses = GetAddresses(); + for (mint mint : mints) { + CBitcoinAddress mintAddress = CBitcoinAddress(mint.getAddress()); + CScript mintPubKey = GetScriptForDestination(mintAddress.Get()); + + for (CTxDestination localMint : addresses) { + if (mintAddress.Get() == localMint) { + minted = mint; + isMintedAddress = true; + } + } + } + } + + BOOST_FOREACH (const PAIRTYPE(CScript, CAmount) & s, vecSend) { + // compare CScript with addresses from + // GetAddresses() + // if minting true + /*if (sendAddress != receiveAddress) { + strFailReason = _("Transactions outside same address are locked"); + return false; + } + // if + if (sendAddress == receiveAddress) { + changeAddress == sendAddress + }*/ + if (isMintedAddress) { + bool sendToLocal = false; + CBitcoinAddress localMinted = minted.getAddress(); + if (GetScriptForDestination(localMinted.Get()) == s.first) { + coinControl->destChange = localMinted.Get(); + sendToLocal = true; + } + if (!sendToLocal) { + LogPrintf("CreateTransactions() error: trying to send from a locked minted address"); + strFailReason = _("Trying to send from a locket minted address"); + return false; + } + } + if (nValue < 0) { strFailReason = _("Transaction amounts must be positive"); return false; @@ -2720,7 +2780,7 @@ bool CWallet::CreateTransaction(const vector >& vecSend, { LOCK2(cs_main, cs_wallet); - { + { nFeeRet = 0; if (nFeePay > 0) nFeeRet = nFeePay; while (true) { @@ -2812,11 +2872,12 @@ bool CWallet::CreateTransaction(const vector >& vecSend, // change transaction isn't always pay-to-unigrid-address CScript scriptChange; bool combineChange = false; - + // + //LogPrintf("reservekey.ReturnKey() : %s", reservekey.ReturnKey()); // coin control: send change to custom address if (coinControl && !boost::get(&coinControl->destChange)) { scriptChange = GetScriptForDestination(coinControl->destChange); - + LogPrintf("Sending via coinCOntrol"); vector::iterator it = txNew.vout.begin(); while (it != txNew.vout.end()) { if (scriptChange == it->scriptPubKey) { @@ -2923,7 +2984,7 @@ bool CWallet::CreateTransaction(const vector >& vecSend, return true; } -bool CWallet::CreateTransaction(CScript scriptPubKey, const CAmount& nValue, CWalletTx& wtxNew, CReserveKey& reservekey, CAmount& nFeeRet, std::string& strFailReason, const CCoinControl* coinControl, AvailableCoinsType coin_type, bool useIX, CAmount nFeePay) +bool CWallet::CreateTransaction(CScript scriptPubKey, const CAmount& nValue, CWalletTx& wtxNew, CReserveKey& reservekey, CAmount& nFeeRet, std::string& strFailReason, CCoinControl* coinControl, AvailableCoinsType coin_type, bool useIX, CAmount nFeePay) { vector > vecSend; vecSend.push_back(make_pair(scriptPubKey, nValue)); @@ -2989,7 +3050,7 @@ bool CWallet::CreateCoinStake(const CKeyStore& keystore, unsigned int nBits, int } else { block.nVersion = 4; } - + LogPrintf("aaaaaaa Stakeinput = %ld", stakeInput.get()->GetIndexFrom()->nHeight); //iterates each utxo inside of CheckStakeKernelHash() if (Stake(stakeInput.get(), nBits, block.GetBlockTime(), nTxNewTime, hashProofOfStake)) { LOCK(cs_main); @@ -3031,7 +3092,7 @@ bool CWallet::CreateCoinStake(const CKeyStore& keystore, unsigned int nBits, int if (nBytes >= DEFAULT_BLOCK_MAX_SIZE / 5) return error("CreateCoinStake : exceeded coinstake size limit"); - //Masternode payment + //Gridnode payment FillBlockPayee(txNew, nMinFee, true, stakeInput->IsZUNIGRID()); uint256 hashTxOut = txNew.GetHash(); @@ -3515,7 +3576,7 @@ void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool) if (!HaveKey(keypool.vchPubKey.GetID())) throw runtime_error("ReserveKeyFromKeyPool() : unknown key in key pool"); assert(keypool.vchPubKey.IsValid()); - LogPrintf("keypool reserve %d\n", nIndex); + //LogPrintf("keypool reserve %d\n", nIndex); } } @@ -3536,7 +3597,7 @@ void CWallet::ReturnKey(int64_t nIndex) LOCK(cs_wallet); setKeyPool.insert(nIndex); } - LogPrintf("keypool return %d\n", nIndex); + //LogPrintf("keypool return %d\n", nIndex); } bool CWallet::GetKeyFromPool(CPubKey& result) @@ -3704,6 +3765,17 @@ set CWallet::GetAccountAddresses(string strAccount) const return result; } +set CWallet::GetAddresses() const +{ + LOCK(cs_wallet); + set result; + for(auto item : mapAddressBook) { + const CTxDestination address = item.first; + result.insert(address); + } + return result; +} + bool CReserveKey::GetReservedKey(CPubKey& pubkey) { if (nIndex == -1) { @@ -4002,8 +4074,8 @@ void CWallet::AutoZeromint() // Don't bother Autominting if Zerocoin Protocol isn't active if (GetAdjustedTime() > GetSporkValue(SPORK_16_ZEROCOIN_MAINTENANCE_MODE)) return; - // Wait until blockchain + masternodes are fully synced and wallet is unlocked. - if (!masternodeSync.IsSynced() || IsLocked()){ + // Wait until blockchain + Gridnodes are fully synced and wallet is unlocked. + if (!GridnodeSync.IsSynced() || IsLocked()){ // Re-adjust startup time in case syncing needs a long time. nStartupTime = GetAdjustedTime(); return; @@ -4017,7 +4089,7 @@ void CWallet::AutoZeromint() } CAmount nZerocoinBalance = GetZerocoinBalance(false); //false includes both pending and mature zerocoins. Need total balance for this so nothing is overminted. - CAmount nBalance = GetUnlockedCoins(); // We only consider unlocked coins, this also excludes masternode-vins + CAmount nBalance = GetUnlockedCoins(); // We only consider unlocked coins, this also excludes gridnode-vins // from being accidentally minted CAmount nMintAmount = 0; CAmount nToMintAmount = 0; @@ -4119,7 +4191,7 @@ void CWallet::AutoCombineDust() // we use 50 bytes as a base tx size (2 output: 2*34 + overhead: 10 -> 90 to be certain) unsigned int txSizeEstimate = 90; - //find masternode rewards that need to be combined + //find gridnode rewards that need to be combined CCoinControl* coinControl = new CCoinControl(); CAmount nTotalRewardsValue = 0; BOOST_FOREACH (const COutput& out, vCoins) { @@ -4217,7 +4289,7 @@ bool CWallet::MultiSend() continue; COutPoint outpoint(out.tx->GetHash(), out.i); - bool sendMSonMNReward = fMultiSendMasternodeReward && outpoint.IsMasternodeReward(out.tx); + bool sendMSonMNReward = fMultiSendGridnodeReward && outpoint.IsGridnodeReward(out.tx); bool sendMSOnStake = fMultiSendStake && out.tx->IsCoinStake() && !sendMSonMNReward; //output is either mnreward or stake reward, not both if (!(sendMSOnStake || sendMSonMNReward)) @@ -4288,7 +4360,7 @@ bool CWallet::MultiSend() //write nLastMultiSendHeight to DB CWalletDB walletdb(strWalletFile); nLastMultiSendHeight = chainActive.Tip()->nHeight; - if (!walletdb.WriteMSettings(fMultiSendStake, fMultiSendMasternodeReward, nLastMultiSendHeight)) + if (!walletdb.WriteMSettings(fMultiSendStake, fMultiSendGridnodeReward, nLastMultiSendHeight)) LogPrintf("Failed to write MultiSend setting to DB\n"); LogPrintf("MultiSend successfully sent\n"); @@ -4300,7 +4372,7 @@ bool CWallet::MultiSend() mnSent = true; //stop iterating if we have sent out all the MultiSend(s) - if ((stakeSent && mnSent) || (stakeSent && !fMultiSendMasternodeReward) || (mnSent && !fMultiSendStake)) + if ((stakeSent && mnSent) || (stakeSent && !fMultiSendGridnodeReward) || (mnSent && !fMultiSendStake)) return true; } diff --git a/daemon/wallet.h b/daemon/wallet.h index ed0a5005ecdc..79ac86abcd17 100644 --- a/daemon/wallet.h +++ b/daemon/wallet.h @@ -86,7 +86,7 @@ enum AvailableCoinsType { ONLY_DENOMINATED = 2, ONLY_NOT10000IFMN = 3, ONLY_NONDENOMINATED_NOT10000IFMN = 4, // ONLY_NONDENOMINATED and not 10000 UNIGRID at the same time - ONLY_10000 = 5, // find masternode outputs including locked ones (use with caution) + ONLY_10000 = 5, // find gridnode outputs including locked ones (use with caution) STAKABLE_COINS = 6 // UTXO's that are valid for staking }; @@ -262,7 +262,7 @@ class CWallet : public CCryptoKeyStore, public CValidationInterface //MultiSend std::vector > vMultiSend; bool fMultiSendStake; - bool fMultiSendMasternodeReward; + bool fMultiSendGridnodeReward; bool fMultiSendNotify; std::string strMultiSendChangeAddress; int nLastMultiSendHeight; @@ -313,7 +313,7 @@ class CWallet : public CCryptoKeyStore, public CValidationInterface //MultiSend vMultiSend.clear(); fMultiSendStake = false; - fMultiSendMasternodeReward = false; + fMultiSendGridnodeReward = false; fMultiSendNotify = false; strMultiSendChangeAddress = ""; nLastMultiSendHeight = 0; @@ -349,12 +349,12 @@ class CWallet : public CCryptoKeyStore, public CValidationInterface bool isMultiSendEnabled() { - return fMultiSendMasternodeReward || fMultiSendStake; + return fMultiSendGridnodeReward || fMultiSendStake; } void setMultiSendDisabled() { - fMultiSendMasternodeReward = false; + fMultiSendGridnodeReward = false; fMultiSendStake = false; } @@ -389,8 +389,8 @@ class CWallet : public CCryptoKeyStore, public CValidationInterface std::map > AvailableCoinsByAddress(bool fConfirmed = true, CAmount maxCoinValue = 0); bool SelectCoinsMinConf(const CAmount& nTargetValue, int nConfMine, int nConfTheirs, std::vector vCoins, std::set >& setCoinsRet, CAmount& nValueRet) const; - /// Get 1000DASH output and keys which can be used for the Masternode - bool GetMasternodeVinAndKeys(CTxIn& txinRet, CPubKey& pubKeyRet, CKey& keyRet, std::string strTxHash = "", std::string strOutputIndex = ""); + /// Get 1000DASH output and keys which can be used for the Gridnode + bool GetGridnodeVinAndKeys(CTxIn& txinRet, CPubKey& pubKeyRet, CKey& keyRet, std::string strTxHash = "", std::string strOutputIndex = ""); /// Extract txin information and keys from output bool GetVinAndKeysFromOutput(COutput out, CTxIn& txinRet, CPubKey& pubKeyRet, CKey& keyRet); @@ -489,17 +489,17 @@ class CWallet : public CCryptoKeyStore, public CValidationInterface CAmount GetUnconfirmedWatchOnlyBalance() const; CAmount GetImmatureWatchOnlyBalance() const; CAmount GetLockedWatchOnlyBalance() const; - bool CreateTransaction(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string& strFailReason, const CCoinControl* coinControl); + bool CreateTransaction(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string& strFailReason, CCoinControl* coinControl); bool CreateTransaction(const std::vector >& vecSend, CWalletTx& wtxNew, CReserveKey& reservekey, CAmount& nFeeRet, std::string& strFailReason, - const CCoinControl* coinControl = NULL, + CCoinControl* coinControl = NULL, AvailableCoinsType coin_type = ALL_COINS, bool useIX = false, CAmount nFeePay = 0); - bool CreateTransaction(CScript scriptPubKey, const CAmount& nValue, CWalletTx& wtxNew, CReserveKey& reservekey, CAmount& nFeeRet, std::string& strFailReason, const CCoinControl* coinControl = NULL, AvailableCoinsType coin_type = ALL_COINS, bool useIX = false, CAmount nFeePay = 0); + bool CreateTransaction(CScript scriptPubKey, const CAmount& nValue, CWalletTx& wtxNew, CReserveKey& reservekey, CAmount& nFeeRet, std::string& strFailReason, CCoinControl* coinControl = NULL, AvailableCoinsType coin_type = ALL_COINS, bool useIX = false, CAmount nFeePay = 0); bool CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey, std::string strCommand = "tx"); bool AddAccountingEntry(const CAccountingEntry&, CWalletDB & pwalletdb); std::string PrepareObfuscationDenominate(int minRounds, int maxRounds); @@ -527,6 +527,7 @@ class CWallet : public CCryptoKeyStore, public CValidationInterface std::map GetAddressBalances(); std::set GetAccountAddresses(std::string strAccount) const; + std::set GetAddresses() const; bool GetBudgetSystemCollateralTX(CWalletTx& tx, uint256 hash, bool useIX); bool GetBudgetFinalizationCollateralTX(CWalletTx& tx, uint256 hash, bool useIX); // Only used for budget finalization diff --git a/daemon/walletdb.cpp b/daemon/walletdb.cpp index 3547babaedc4..ba7d21d252f2 100644 --- a/daemon/walletdb.cpp +++ b/daemon/walletdb.cpp @@ -195,10 +195,10 @@ bool CWalletDB::EraseMultiSend(std::vector > vMultiS return ret; } //presstab HyperStake -bool CWalletDB::WriteMSettings(bool fMultiSendStake, bool fMultiSendMasternode, int nLastMultiSendHeight) +bool CWalletDB::WriteMSettings(bool fMultiSendStake, bool fMultiSendGridnode, int nLastMultiSendHeight) { nWalletDBUpdated++; - std::pair enabledMS(fMultiSendStake, fMultiSendMasternode); + std::pair enabledMS(fMultiSendStake, fMultiSendGridnode); std::pair, int> pSettings(enabledMS, nLastMultiSendHeight); return Write(std::string("msettingsv2"), pSettings, true); @@ -639,7 +639,7 @@ bool ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, CW std::pair, int> pSettings; ssValue >> pSettings; pwallet->fMultiSendStake = pSettings.first.first; - pwallet->fMultiSendMasternodeReward = pSettings.first.second; + pwallet->fMultiSendGridnodeReward = pSettings.first.second; pwallet->nLastMultiSendHeight = pSettings.second; } else if (strType == "mdisabled") //presstab HyperStake { diff --git a/daemon/walletdb.h b/daemon/walletdb.h index 5ffdff12f023..ef9e04f89f6b 100644 --- a/daemon/walletdb.h +++ b/daemon/walletdb.h @@ -119,7 +119,7 @@ class CWalletDB : public CDB bool WriteStakeSplitThreshold(uint64_t nStakeSplitThreshold); bool WriteMultiSend(std::vector > vMultiSend); bool EraseMultiSend(std::vector > vMultiSend); - bool WriteMSettings(bool fMultiSendStake, bool fMultiSendMasternode, int nLastMultiSendHeight); + bool WriteMSettings(bool fMultiSendStake, bool fMultiSendGridnode, int nLastMultiSendHeight); bool WriteMSDisabledAddresses(std::vector vDisabledAddresses); bool EraseMSDisabledAddresses(std::vector vDisabledAddresses); bool WriteAutoCombineSettings(bool fEnable, CAmount nCombineThreshold); diff --git a/depends/Makefile b/depends/Makefile index a8b9fdda782a..056d36e2f04e 100644 --- a/depends/Makefile +++ b/depends/Makefile @@ -1,5 +1,33 @@ .NOTPARALLEL : +# Pattern rule to print variables, e.g. make print-top_srcdir +print-%: + @echo $* = $($*) + +# When invoking a sub-make, keep only the command line variable definitions +# matching the pattern in the filter function. +# +# e.g. invoking: +# $ make A=1 C=1 print-MAKEOVERRIDES print-MAKEFLAGS +# +# with the following in the Makefile: +# MAKEOVERRIDES := $(filter A=% B=%,$(MAKEOVERRIDES)) +# +# will print: +# MAKEOVERRIDES = A=1 +# MAKEFLAGS = -- A=1 +# +# this is because as the GNU make manual says: +# The command line variable definitions really appear in the variable +# MAKEOVERRIDES, and MAKEFLAGS contains a reference to this variable. +# +# and since the GNU make manual also says: +# variables defined on the command line are passed to the sub-make through +# MAKEFLAGS +# +# this means that sub-makes will be invoked as if: +# $(MAKE) A=1 blah blah +MAKEOVERRIDES := $(filter V=%,$(MAKEOVERRIDES)) SOURCES_PATH ?= $(BASEDIR)/sources WORK_PATH = $(BASEDIR)/work BASE_CACHE ?= $(BASEDIR)/built @@ -7,6 +35,7 @@ SDK_PATH ?= $(BASEDIR)/SDKs NO_WALLET ?= NO_ZMQ ?= NO_UPNP ?= +NO_NATPMP ?= FALLBACK_DOWNLOAD_PATH ?= https://bitcoincore.org/depends-sources BUILD = $(shell ./config.guess) @@ -18,7 +47,6 @@ DOWNLOAD_CONNECT_TIMEOUT:=30 DOWNLOAD_RETRIES:=3 HOST_ID_SALT ?= salt BUILD_ID_SALT ?= salt -PREFIX_DIR = "$(CURDIR)/build/$(HOST)/" host:=$(BUILD) ifneq ($(HOST),) @@ -53,6 +81,11 @@ full_host_os:=$(subst $(host_arch)-$(host_vendor)-,,$(canonical_host)) host_os:=$(findstring linux,$(full_host_os)) host_os+=$(findstring darwin,$(full_host_os)) host_os+=$(findstring mingw32,$(full_host_os)) + +ifeq (android,$(findstring android,$(full_host_os))) +host_os:=android +endif + host_os:=$(strip $(host_os)) ifeq ($(host_os),) host_os=$(full_host_os) @@ -90,11 +123,20 @@ $(host_arch)_$(host_os)_id_string+=$(shell $(host_CXX) --version 2>/dev/null) $(host_arch)_$(host_os)_id_string+=$(shell $(host_RANLIB) --version 2>/dev/null) $(host_arch)_$(host_os)_id_string+=$(shell $(host_STRIP) --version 2>/dev/null) +ifneq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) +# Make sure that cache is invalidated when switching between system and +# depends-managed, pinned clang +build_id_string+=system_clang +$(host_arch)_$(host_os)_id_string+=system_clang +endif + wallet_packages_$(NO_WALLET) = $(wallet_packages) upnp_packages_$(NO_UPNP) = $(upnp_packages) +natpmp_packages_$(NO_NATPMP) = $(natpmp_packages) +zmq_packages_$(NO_ZMQ) = $(zmq_packages) -packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(wallet_packages_) $(upnp_packages_) +packages += $($(host_arch)_$(host_os)_packages) $($(host_os)_packages) $(qt_packages_) $(wallet_packages_) $(upnp_packages_) $(natpmp_packages_) native_packages += $($(host_arch)_$(host_os)_native_packages) $($(host_os)_native_packages) ifneq ($(zmq_packages_),) @@ -105,11 +147,11 @@ all_packages = $(packages) $(native_packages) meta_depends = Makefile funcs.mk builders/default.mk hosts/default.mk hosts/$(host_os).mk builders/$(build_os).mk +$(host_arch)_$(host_os)_native_binutils?=$($(host_os)_native_binutils) $(host_arch)_$(host_os)_native_toolchain?=$($(host_os)_native_toolchain) include funcs.mk -toolchain_path=$($($(host_arch)_$(host_os)_native_toolchain)_prefixbin) final_build_id_long+=$(shell $(build_SHA256SUM) config.site.in) final_build_id+=$(shell echo -n "$(final_build_id_long)" | $(build_SHA256SUM) | cut -c-$(HASH_LENGTH)) $(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages) @@ -120,25 +162,49 @@ $(host_prefix)/.stamp_$(final_build_id): $(native_packages) $(packages) $(AT)cd $(@D); $(foreach package,$^, tar xf $($(package)_cached); ) $(AT)touch $@ +# $PATH is not preserved between ./configure and make by convention. Its +# modification and overriding at ./configure time is (as I understand it) +# supposed to be captured by the AC_{PROG_{,OBJ}CXX,PATH_{PROG,TOOL}} macros, +# which will expand the program names to their full absolute paths. The notable +# exception is command line overriding: ./configure CC=clang, which skips the +# program name expansion step, and works because the user implicitly indicates +# with CC=clang that clang will be available in $PATH at all times, and is most +# likely part of the user's system. +# +# Therefore, when we "seed the autoconf cache"/"override well-known program +# vars" by setting AR= in our config.site, either one of two things needs +# to be true for the build system to work correctly: +# +# 1. If we refer to the program by name (e.g. AR=riscv64-gnu-linux-ar), the +# tool needs to be available in $PATH at all times. +# +# 2. If the tool is _**not**_ expected to be available in $PATH at all times +# (such as is the case for our native_cctools binutils tools), it needs to +# be referred to by its absolute path, such as would be output by the +# AC_PATH_{PROG,TOOL} macros. +# +# Minor note: it is also okay to refer to tools by their absolute path even if +# we expect them to be available in $PATH at all times, more specificity does +# not hurt. $(host_prefix)/share/config.site : config.site.in $(host_prefix)/.stamp_$(final_build_id) $(AT)@mkdir -p $(@D) $(AT)sed -e 's|@HOST@|$(host)|' \ - -e 's|@CC@|$(toolchain_path)$(host_CC)|' \ - -e 's|@CXX@|$(toolchain_path)$(host_CXX)|' \ - -e 's|@AR@|$(toolchain_path)$(host_AR)|' \ - -e 's|@RANLIB@|$(toolchain_path)$(host_RANLIB)|' \ - -e 's|@NM@|$(toolchain_path)$(host_NM)|' \ - -e 's|@STRIP@|$(toolchain_path)$(host_STRIP)|' \ + -e 's|@CC@|$(host_CC)|' \ + -e 's|@CXX@|$(host_CXX)|' \ + -e 's|@AR@|$(host_AR)|' \ + -e 's|@RANLIB@|$(host_RANLIB)|' \ + -e 's|@NM@|$(host_NM)|' \ + -e 's|@STRIP@|$(host_STRIP)|' \ -e 's|@build_os@|$(build_os)|' \ -e 's|@host_os@|$(host_os)|' \ -e 's|@CFLAGS@|$(strip $(host_CFLAGS) $(host_$(release_type)_CFLAGS))|' \ -e 's|@CXXFLAGS@|$(strip $(host_CXXFLAGS) $(host_$(release_type)_CXXFLAGS))|' \ -e 's|@CPPFLAGS@|$(strip $(host_CPPFLAGS) $(host_$(release_type)_CPPFLAGS))|' \ -e 's|@LDFLAGS@|$(strip $(host_LDFLAGS) $(host_$(release_type)_LDFLAGS))|' \ - -e 's|@allow_host_packages@|$(ALLOW_HOST_PACKAGES)|' \ -e 's|@no_zmq@|$(NO_ZMQ)|' \ -e 's|@no_wallet@|$(NO_WALLET)|' \ -e 's|@no_upnp@|$(NO_UPNP)|' \ + -e 's|@no_natpmp@|$(NO_NATPMP)|' \ -e 's|@debug@|$(DEBUG)|' \ $< > $@ $(AT)touch $@ @@ -179,7 +245,7 @@ install: check-packages $(host_prefix)/share/config.site download-one: check-sources $(all_sources) download-osx: - @$(MAKE) -s HOST=x86_64-apple-darwin14 download-one + @$(MAKE) -s HOST=x86_64-apple-darwin download-one download-linux: @$(MAKE) -s HOST=x86_64-unknown-linux-gnu download-one download-win: @@ -188,4 +254,4 @@ download: download-osx download-linux download-win $(foreach package,$(all_packages),$(eval $(call ext_add_stages,$(package)))) -.PHONY: install cached clean clean-all download-one download-osx download-linux download-win download check-packages check-sources +.PHONY: install cached clean clean-all download-one download-osx download-linux download-win download check-packages check-sources \ No newline at end of file diff --git a/depends/README.md b/depends/README.md index f60a25640276..0232495cac08 100644 --- a/depends/README.md +++ b/depends/README.md @@ -22,7 +22,7 @@ Common `host-platform-triplets` for cross compilation are: - `i686-w64-mingw32` for Win32 - `x86_64-w64-mingw32` for Win64 -- `x86_64-apple-darwin11` for MacOSX +- `x86_64-apple-darwin19` for MacOSX - `arm-linux-gnueabihf` for Linux ARM 32 bit - `aarch64-linux-gnu` for Linux ARM 64 bit diff --git a/depends/builders/darwin.mk b/depends/builders/darwin.mk index 27f550ab036a..65c650737768 100644 --- a/depends/builders/darwin.mk +++ b/depends/builders/darwin.mk @@ -1,17 +1,17 @@ -build_darwin_CC: = $(shell xcrun -f clang) -build_darwin_CXX: = $(shell xcrun -f clang++) -build_darwin_AR: = $(shell xcrun -f ar) -build_darwin_RANLIB: = $(shell xcrun -f ranlib) -build_darwin_STRIP: = $(shell xcrun -f strip) -build_darwin_OTOOL: = $(shell xcrun -f otool) -build_darwin_NM: = $(shell xcrun -f nm) +build_darwin_CC:=$(shell xcrun -f clang) -isysroot$(shell xcrun --show-sdk-path) +build_darwin_CXX:=$(shell xcrun -f clang++) -isysroot$(shell xcrun --show-sdk-path) +build_darwin_AR:=$(shell xcrun -f ar) +build_darwin_RANLIB:=$(shell xcrun -f ranlib) +build_darwin_STRIP:=$(shell xcrun -f strip) +build_darwin_OTOOL:=$(shell xcrun -f otool) +build_darwin_NM:=$(shell xcrun -f nm) build_darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) -build_darwin_SHA256SUM = shasum -a 256 -build_darwin_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o +build_darwin_SHA256SUM=shasum -a 256 +build_darwin_DOWNLOAD=curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) -o #darwin host on darwin builder. overrides darwin host preferences. -darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) -darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) -stdlib=libc++ +darwin_CC=$(shell xcrun -f clang) -mmacosx-version-min=$(OSX_MIN_VERSION) -isysroot$(shell xcrun --show-sdk-path) +darwin_CXX:=$(shell xcrun -f clang++) -mmacosx-version-min=$(OSX_MIN_VERSION) -stdlib=libc++ -fvisibility=hidden -isysroot$(shell xcrun --show-sdk-path) darwin_AR:=$(shell xcrun -f ar) darwin_RANLIB:=$(shell xcrun -f ranlib) darwin_STRIP:=$(shell xcrun -f strip) @@ -19,4 +19,5 @@ darwin_LIBTOOL:=$(shell xcrun -f libtool) darwin_OTOOL:=$(shell xcrun -f otool) darwin_NM:=$(shell xcrun -f nm) darwin_INSTALL_NAME_TOOL:=$(shell xcrun -f install_name_tool) -darwin_native_toolchain= +darwin_native_binutils= +darwin_native_toolchain= \ No newline at end of file diff --git a/depends/hosts/darwin.mk b/depends/hosts/darwin.mk index a1c943d60bbd..2f8b825d8309 100644 --- a/depends/hosts/darwin.mk +++ b/depends/hosts/darwin.mk @@ -14,4 +14,4 @@ darwin_release_CXXFLAGS=$(darwin_release_CFLAGS) darwin_debug_CFLAGS=-O1 darwin_debug_CXXFLAGS=$(darwin_debug_CFLAGS) -darwin_native_toolchain=native_cctools +darwin_native_toolchain=native_cctools \ No newline at end of file diff --git a/depends/hosts/default.mk b/depends/hosts/default.mk index 144e5f88b782..5ef3091536e8 100644 --- a/depends/hosts/default.mk +++ b/depends/hosts/default.mk @@ -13,9 +13,18 @@ default_host_OTOOL = $(host_toolchain)otool default_host_NM = $(host_toolchain)nm define add_host_tool_func +ifneq ($(filter $(origin $1),undefined default),) +# Do not consider the well-known var $1 if it is undefined or is taking a value +# that is predefined by "make" (e.g. the make variable "CC" has a predefined +# value of "cc") $(host_os)_$1?=$$(default_host_$1) $(host_arch)_$(host_os)_$1?=$$($(host_os)_$1) $(host_arch)_$(host_os)_$(release_type)_$1?=$$($(host_os)_$1) +else +$(host_os)_$1=$(or $($1),$($(host_os)_$1),$(default_host_$1)) +$(host_arch)_$(host_os)_$1=$(or $($1),$($(host_arch)_$(host_os)_$1),$$($(host_os)_$1)) +$(host_arch)_$(host_os)_$(release_type)_$1=$(or $($1),$($(host_arch)_$(host_os)_$(release_type)_$1),$$($(host_os)_$1)) +endif host_$1=$$($(host_arch)_$(host_os)_$1) endef @@ -27,4 +36,4 @@ host_$(release_type)_$1 = $$($(host_arch)_$(host_os)_$(release_type)_$1) endef $(foreach tool,CC CXX AR RANLIB STRIP NM LIBTOOL OTOOL INSTALL_NAME_TOOL,$(eval $(call add_host_tool_func,$(tool)))) -$(foreach flags,CFLAGS CXXFLAGS CPPFLAGS LDFLAGS, $(eval $(call add_host_flags_func,$(flags)))) +$(foreach flags,CFLAGS CXXFLAGS CPPFLAGS LDFLAGS, $(eval $(call add_host_flags_func,$(flags)))) \ No newline at end of file diff --git a/depends/hosts/linux.mk b/depends/hosts/linux.mk index b13a0f1ad714..e035d2d1939b 100644 --- a/depends/hosts/linux.mk +++ b/depends/hosts/linux.mk @@ -1,5 +1,5 @@ linux_CFLAGS=-pipe -linux_CXXFLAGS=$(linux_CFLAGS) +linux_CXXFLAGS=$(linux_CFLAGS) -static-libstdc++ linux_release_CFLAGS=-O2 linux_release_CXXFLAGS=$(linux_release_CFLAGS) @@ -7,7 +7,7 @@ linux_release_CXXFLAGS=$(linux_release_CFLAGS) linux_debug_CFLAGS=-O1 linux_debug_CXXFLAGS=$(linux_debug_CFLAGS) -linux_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC +linux_debug_CPPFLAGS=-D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -D_LIBCPP_DEBUG=1 ifeq (86,$(findstring 86,$(build_arch))) i686_linux_CC=gcc -m32 @@ -28,4 +28,4 @@ i686_linux_CC=$(default_host_CC) -m32 i686_linux_CXX=$(default_host_CXX) -m32 x86_64_linux_CC=$(default_host_CC) -m64 x86_64_linux_CXX=$(default_host_CXX) -m64 -endif +endif \ No newline at end of file diff --git a/depends/packages/bdb.mk b/depends/packages/bdb.mk index 6c9876c2c7c7..c0c9a2ac9815 100644 --- a/depends/packages/bdb.mk +++ b/depends/packages/bdb.mk @@ -9,7 +9,8 @@ define $(package)_set_vars $(package)_config_opts=--disable-shared --enable-cxx --disable-replication $(package)_config_opts_mingw32=--enable-mingw $(package)_config_opts_linux=--with-pic -$(package)_cxxflags=-std=c++11 +$(package)_cxxflags=-std=c++14 + endef define $(package)_preprocess_cmds diff --git a/depends/packages/boost.mk b/depends/packages/boost.mk index e0b6444e4bd0..4f6e71efcbc8 100644 --- a/depends/packages/boost.mk +++ b/depends/packages/boost.mk @@ -1,8 +1,9 @@ package=boost -$(package)_version=1_71_0 -$(package)_download_path=https://dl.bintray.com/boostorg/release/1.71.0/source/ -$(package)_file_name=$(package)_$($(package)_version).tar.bz2 -$(package)_sha256_hash=d73a8da01e8bf8c7eda40b4c84915071a8c8a0df4a6734537ddde4a8580524ee +$(package)_version=1_73_0 +$(package)_download_path=https://boostorg.jfrog.io/artifactory/main/release/$(subst _,.,$($(package)_version))/source/ +$(package)_file_name=boost_$($(package)_version).tar.bz2 +$(package)_sha256_hash=4eb3b8d442b426dc35346235c8733b5ae35ba431690e38c6a8263dce9fcbb402 +$(package)_dependencies=native_b2 define $(package)_set_vars $(package)_config_opts_release=variant=release @@ -18,7 +19,6 @@ $(package)_config_opts_i686_linux=address-model=32 architecture=x86 $(package)_toolset_$(host_os)=gcc $(package)_archiver_$(host_os)=$($(package)_ar) $(package)_toolset_darwin=darwin -$(package)_archiver_darwin=$($(package)_libtool) $(package)_config_libraries=system,filesystem,program_options,thread,test,chrono,coroutine,context $(package)_cxxflags=-std=c++11 -fvisibility=hidden $(package)_cxxflags_linux=-fPIC @@ -38,4 +38,4 @@ endef define $(package)_stage_cmds ./b2 -d0 -j4 --prefix=$($(package)_staging_prefix_dir) $($(package)_config_opts) install -endef +endef \ No newline at end of file diff --git a/depends/packages/curl.mk b/depends/packages/curl.mk index 06d862fc5cdd..e90c116af63d 100644 --- a/depends/packages/curl.mk +++ b/depends/packages/curl.mk @@ -35,7 +35,7 @@ $(package)_config_opts_aarch64-linux-gnu=$($(package)_config_opts_arm) # darwin specific settings $(package)_config_opts_darwin=--with-sysroot="$(DARWIN_SDK_PATH)" --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --enable-proxy --without-gnutls --with-darwinssl --with-ssl --disable-telnet --enable-threaded-resolver -$(package)_config_opts_x86_64-apple-darwin11=$($(package)_config_opts_darwin) +$(package)_config_opts_x86_64-apple-darwin19=$($(package)_config_opts_darwin) # set settings based on host_os $(package)_config_env = $(if $($(package)_config_env_$(host_os)), $($(package)_config_env_$(host_os)), $($(package)_config_env_default)) diff --git a/depends/packages/native_b2.mk b/depends/packages/native_b2.mk new file mode 100644 index 000000000000..aaa37cdcfa7a --- /dev/null +++ b/depends/packages/native_b2.mk @@ -0,0 +1,20 @@ +package=native_b2 +$(package)_version=$(boost_version) +$(package)_download_path=$(boost_download_path) +$(package)_file_name=$(boost_file_name) +$(package)_sha256_hash=$(boost_sha256_hash) +$(package)_build_subdir=tools/build/src/engine +ifneq (,$(findstring clang,$($(package)_cxx))) +$(package)_toolset_$(host_os)=clang +else +$(package)_toolset_$(host_os)=gcc +endif + +define $(package)_build_cmds + CXX="$($(package)_cxx)" CXXFLAGS="$($(package)_cxxflags)" ./build.sh "$($(package)_toolset_$(host_os))" +endef + +define $(package)_stage_cmds + mkdir -p "$($(package)_staging_prefix_dir)"/bin/ && \ + cp b2 "$($(package)_staging_prefix_dir)"/bin/ +endef diff --git a/depends/packages/native_cctools.mk b/depends/packages/native_cctools.mk index 44d238cc4c2a..3b1c66e50cb0 100644 --- a/depends/packages/native_cctools.mk +++ b/depends/packages/native_cctools.mk @@ -1,46 +1,30 @@ package=native_cctools -$(package)_version=807d6fd1be5d2224872e381870c0a75387fe05e6 -$(package)_download_path=https://github.com/theuni/cctools-port/archive +$(package)_version=2ef2e931cf641547eb8a68cfebde61003587c9fd +$(package)_download_path=https://github.com/tpoechtrager/cctools-port/archive $(package)_file_name=$($(package)_version).tar.gz -$(package)_sha256_hash=a09c9ba4684670a0375e42d9d67e7f12c1f62581a27f28f7c825d6d7032ccc6a +$(package)_sha256_hash=6b73269efdf5c58a070e7357b66ee760501388549d6a12b423723f45888b074b $(package)_build_subdir=cctools -$(package)_clang_version=3.7.1 -$(package)_clang_download_path=http://llvm.org/releases/$($(package)_clang_version) -$(package)_clang_download_file=clang+llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz -$(package)_clang_file_name=clang-llvm-$($(package)_clang_version)-x86_64-linux-gnu-ubuntu-14.04.tar.xz -$(package)_clang_sha256_hash=99b28a6b48e793705228a390471991386daa33a9717cd9ca007fcdde69608fd9 -$(package)_extra_sources=$($(package)_clang_file_name) - -define $(package)_fetch_cmds -$(call fetch_file,$(package),$($(package)_download_path),$($(package)_download_file),$($(package)_file_name),$($(package)_sha256_hash)) && \ -$(call fetch_file,$(package),$($(package)_clang_download_path),$($(package)_clang_download_file),$($(package)_clang_file_name),$($(package)_clang_sha256_hash)) -endef - -define $(package)_extract_cmds - mkdir -p $($(package)_extract_dir) && \ - echo "$($(package)_sha256_hash) $($(package)_source)" > $($(package)_extract_dir)/.$($(package)_file_name).hash && \ - echo "$($(package)_clang_sha256_hash) $($(package)_source_dir)/$($(package)_clang_file_name)" >> $($(package)_extract_dir)/.$($(package)_file_name).hash && \ - $(build_SHA256SUM) -c $($(package)_extract_dir)/.$($(package)_file_name).hash && \ - mkdir -p toolchain/bin toolchain/lib/clang/3.5/include && \ - tar --strip-components=1 -C toolchain -xf $($(package)_source_dir)/$($(package)_clang_file_name) && \ - rm -f toolchain/lib/libc++abi.so* && \ - echo "#!/bin/sh" > toolchain/bin/$(host)-dsymutil && \ - echo "exit 0" >> toolchain/bin/$(host)-dsymutil && \ - chmod +x toolchain/bin/$(host)-dsymutil && \ - tar --strip-components=1 -xf $($(package)_source) -endef +$(package)_dependencies=native_libtapi define $(package)_set_vars -$(package)_config_opts=--target=$(host) --disable-lto-support -$(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib -$(package)_cc=$($(package)_extract_dir)/toolchain/bin/clang -$(package)_cxx=$($(package)_extract_dir)/toolchain/bin/clang++ + $(package)_config_opts=--target=$(host) --enable-lto-support + $(package)_config_opts+=--with-llvm-config=$(llvm_config_prog) + $(package)_ldflags+=-Wl,-rpath=\\$$$$$$$$\$$$$$$$$ORIGIN/../lib + $(package)_cc=$(clang_prog) + $(package)_cxx=$(clangxx_prog) endef +ifneq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) define $(package)_preprocess_cmds - cd $($(package)_build_subdir); ./autogen.sh && \ - sed -i.old "/define HAVE_PTHREADS/d" ld64/src/ld/InputFiles.h + mkdir -p $($(package)_staging_prefix_dir)/lib && \ + cp $(llvm_lib_dir)/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \ + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub cctools endef +else +define $(package)_preprocess_cmds + cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub cctools +endef +endif define $(package)_config_cmds $($(package)_autoconf) @@ -51,15 +35,9 @@ define $(package)_build_cmds endef define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install && \ - cd $($(package)_extract_dir)/toolchain && \ - mkdir -p $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include && \ - mkdir -p $($(package)_staging_prefix_dir)/bin $($(package)_staging_prefix_dir)/include && \ - cp bin/clang $($(package)_staging_prefix_dir)/bin/ &&\ - cp -P bin/clang++ $($(package)_staging_prefix_dir)/bin/ &&\ - cp lib/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \ - cp -rf lib/clang/$($(package)_clang_version)/include/* $($(package)_staging_prefix_dir)/lib/clang/$($(package)_clang_version)/include/ && \ - cp bin/llvm-dsymutil $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \ - if `test -d include/c++/`; then cp -rf include/c++/ $($(package)_staging_prefix_dir)/include/; fi && \ - if `test -d lib/c++/`; then cp -rf lib/c++/ $($(package)_staging_prefix_dir)/lib/; fi + $(MAKE) DESTDIR=$($(package)_staging_dir) install endef + +define $(package)_postprocess_cmds + rm -rf share +endef \ No newline at end of file diff --git a/depends/packages/native_cdrkit.mk b/depends/packages/native_cdrkit.mk index cf694edb30e9..4c5db15675ac 100644 --- a/depends/packages/native_cdrkit.mk +++ b/depends/packages/native_cdrkit.mk @@ -23,4 +23,4 @@ endef define $(package)_postprocess_cmds rm bin/isovfy bin/isoinfo bin/isodump bin/isodebug bin/devdump -endef +endef \ No newline at end of file diff --git a/depends/packages/native_clang.mk b/depends/packages/native_clang.mk new file mode 100644 index 000000000000..6dd237b0edb7 --- /dev/null +++ b/depends/packages/native_clang.mk @@ -0,0 +1,28 @@ +package=native_clang +$(package)_version=10.0.1 +$(package)_download_path=https://github.com/llvm/llvm-project/releases/download/llvmorg-$($(package)_version) +ifneq (,$(findstring aarch64,$(BUILD))) +$(package)_file_name=clang+llvm-$($(package)_version)-aarch64-linux-gnu.tar.xz +$(package)_sha256_hash=90dc69a4758ca15cd0ffa45d07fbf5bf4309d47d2c7745a9f0735ecffde9c31f +else +$(package)_file_name=clang+llvm-$($(package)_version)-x86_64-linux-gnu-ubuntu-16.04.tar.xz +$(package)_sha256_hash=48b83ef827ac2c213d5b64f5ad7ed082c8bcb712b46644e0dc5045c6f462c231 +endif + +define $(package)_preprocess_cmds + rm -f $($(package)_extract_dir)/lib/libc++abi.so* +endef + +define $(package)_stage_cmds + mkdir -p $($(package)_staging_prefix_dir)/lib/clang/$($(package)_version)/include && \ + mkdir -p $($(package)_staging_prefix_dir)/bin && \ + mkdir -p $($(package)_staging_prefix_dir)/include/llvm-c && \ + cp bin/clang $($(package)_staging_prefix_dir)/bin/ && \ + cp -P bin/clang++ $($(package)_staging_prefix_dir)/bin/ && \ + cp bin/dsymutil $($(package)_staging_prefix_dir)/bin/$(host)-dsymutil && \ + cp bin/llvm-config $($(package)_staging_prefix_dir)/bin/ && \ + cp include/llvm-c/ExternC.h $($(package)_staging_prefix_dir)/include/llvm-c && \ + cp include/llvm-c/lto.h $($(package)_staging_prefix_dir)/include/llvm-c && \ + cp lib/libLTO.so $($(package)_staging_prefix_dir)/lib/ && \ + cp -r lib/clang/$($(package)_version)/include/* $($(package)_staging_prefix_dir)/lib/clang/$($(package)_version)/include/ +endef \ No newline at end of file diff --git a/depends/packages/native_libtapi.mk b/depends/packages/native_libtapi.mk new file mode 100644 index 000000000000..1633213a4233 --- /dev/null +++ b/depends/packages/native_libtapi.mk @@ -0,0 +1,19 @@ +package=native_libtapi +$(package)_version=664b8414f89612f2dfd35a9b679c345aa5389026 +$(package)_download_path=https://github.com/tpoechtrager/apple-libtapi/archive +$(package)_file_name=$($(package)_version).tar.gz +$(package)_sha256_hash=62e419c12d1c9fad67cc1cd523132bc00db050998337c734c15bc8d73cc02b61 + +ifeq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) +$(package)_dependencies=native_clang +endif + +define $(package)_build_cmds + CC=$(clang_prog) CXX=$(clangxx_prog) INSTALLPREFIX=$($(package)_staging_prefix_dir) ./build.sh +endef + +define $(package)_stage_cmds + ./install.sh && \ + mkdir -p $($(package)_staging_prefix_dir)/include/llvm-c && \ + cp src/llvm/include/llvm-c/lto.h $($(package)_staging_prefix_dir)/include/llvm-c +endef diff --git a/depends/packages/packages.mk b/depends/packages/packages.mk index 2b2daa3aac0a..feea6997a93f 100644 --- a/depends/packages/packages.mk +++ b/depends/packages/packages.mk @@ -6,6 +6,12 @@ upnp_packages=miniupnpc darwin_native_packages = native_biplist native_ds_store native_mac_alias +$(host_arch)_$(host_os)_native_packages += native_b2 + ifneq ($(build_os),darwin) -darwin_native_packages += native_cctools native_cdrkit native_libdmg-hfsplus +darwin_native_packages += native_libtapi native_cctools native_libdmg-hfsplus endif + +ifeq ($(strip $(FORCE_USE_SYSTEM_CLANG)),) +darwin_native_packages+= native_clang +endif \ No newline at end of file diff --git a/depends/packages/protobuf.mk b/depends/packages/protobuf.mk index 54d3fd924519..9770004097fc 100644 --- a/depends/packages/protobuf.mk +++ b/depends/packages/protobuf.mk @@ -4,7 +4,7 @@ $(package)_download_path=$(native_$(package)_download_path) $(package)_file_name=$(native_$(package)_file_name) $(package)_sha256_hash=$(native_$(package)_sha256_hash) $(package)_dependencies=native_$(package) -$(package)_cxxflags=-std=c++11 +$(package)_cxxflags=-std=c++14 define $(package)_set_vars $(package)_config_opts=--disable-shared --with-protoc=$(build_prefix)/bin/protoc diff --git a/depends/packages/qrencode.mk b/depends/packages/qrencode.mk deleted file mode 100644 index 44fdf1c2952b..000000000000 --- a/depends/packages/qrencode.mk +++ /dev/null @@ -1,22 +0,0 @@ -package=qrencode -$(package)_version=3.4.4 -$(package)_download_path=https://fukuchi.org/works/qrencode/ -$(package)_file_name=$(package)-$($(package)_version).tar.bz2 -$(package)_sha256_hash=efe5188b1ddbcbf98763b819b146be6a90481aac30cfc8d858ab78a19cde1fa5 - -define $(package)_set_vars -$(package)_config_opts=--disable-shared -without-tools --disable-sdltest -$(package)_config_opts_linux=--with-pic -endef - -define $(package)_config_cmds - $($(package)_autoconf) -endef - -define $(package)_build_cmds - $(MAKE) -endef - -define $(package)_stage_cmds - $(MAKE) DESTDIR=$($(package)_staging_dir) install -endef diff --git a/depends/packages/zeromq.mk b/depends/packages/zeromq.mk index 3f97221e10ee..fa9e42c3b686 100644 --- a/depends/packages/zeromq.mk +++ b/depends/packages/zeromq.mk @@ -8,7 +8,8 @@ $(package)_patches=0001-fix-build-with-older-mingw64.patch define $(package)_set_vars $(package)_config_opts=--without-docs --disable-shared --without-libsodium --disable-curve --disable-curve-keygen --disable-perf $(package)_config_opts_linux=--with-pic - $(package)_cxxflags=-std=c++11 + $(package)_cxxflags=-std=c++14 + endef define $(package)_preprocess_cmds diff --git a/doc/build-windows.md b/doc/build-windows.md index 371cfe5dbf22..76e1d8cb6845 100644 --- a/doc/build-windows.md +++ b/doc/build-windows.md @@ -114,6 +114,6 @@ Footnotes 1: Starting from Ubuntu Xenial 16.04, both the 32 and 64 bit Mingw-w64 packages install two different compiler options to allow a choice between either posix or win32 threads. The default option is win32 threads which is the more efficient since it will result in binary code that links directly with the Windows kernel32.lib. Unfortunately, the headers -required to support win32 threads conflict with some of the classes in the C++11 standard library, in particular std::mutex. +required to support win32 threads conflict with some of the classes in the c++17 standard library, in particular std::mutex. It's not possible to build the UNIGRID code using the win32 version of the Mingw-w64 cross compilers (at least not without modifying headers in the UNIGRID source code). \ No newline at end of file diff --git a/doc/files.md b/doc/files.md index 3023ff02bf31..09e248e560bd 100644 --- a/doc/files.md +++ b/doc/files.md @@ -10,9 +10,9 @@ * debug.log: contains debug information and general logging generated by unigridd * fee_estimates.dat: stores statistics used to estimate minimum transaction fees and priorities required for confirmation: since 0.10.0 * budget.dat: stores data for budget objects -* masternode.conf: contains configuration settings for remote masternodes -* mncache.dat: stores data for masternode list -* mnpayments.dat: stores data for masternode payments +* gridnode.conf: contains configuration settings for remote Gridnodes +* gncache.dat: stores data for gridnode list +* gnpayments.dat: stores data for gridnode payments * peers.dat: peer IP address database (custom format); since 0.7.0 * wallet.dat: personal wallet (BDB) with keys and transactions diff --git a/doc/gridnode_conf.md b/doc/gridnode_conf.md new file mode 100644 index 000000000000..10eada096ff9 --- /dev/null +++ b/doc/gridnode_conf.md @@ -0,0 +1,32 @@ +Multi gridnode config +======================= + +The multi gridnode config allows you to control multiple Gridnodes from a single wallet. The wallet needs to have a valid collateral output of 10000 coins for each gridnode. To use this, place a file named gridnode.conf in the data directory of your install: + * Windows: %APPDATA%\UNIGRID\ + * Mac OS: ~/Library/Application Support/UNIGRID/ + * Unix/Linux: ~/.unigrid/ + +The new gridnode.conf format consists of a space seperated text file. Each line consisting of an alias, IP address followed by port, gridnode private key, collateral output transaction id, collateral output index, donation address and donation percentage (the latter two are optional and should be in format "address:percentage"). + +Example: +``` +gn1 127.0.0.2:51996 93HaYBVUCYjEMeeH1Y4sBGLALQZE1Yc1K64xiqgX37tGBDQL8Xg 2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c 0 +gn2 127.0.0.3:51996 93WaAb3htPJEV8E9aQcN23Jt97bPex7YvWfgMDTUdWJvzmrMqey aa9f1034d973377a5e733272c3d0eced1de22555ad45d6b24abadff8087948d4 0 7gnwGHt17heGpG9Crfeh4KGpYNFugPhJdh:33 +gn3 127.0.0.4:51996 92Da1aYg6sbenP6uwskJgEY2XWB5LwJ7bXRqc3UPeShtHWJDjDv db478e78e3aefaa8c12d12ddd0aeace48c3b451a8b41c570d0ee375e2a02dfd9 1 7gnwGHt17heGpG9Crfeh4KGpYNFugPhJdh +``` + +In the example above: +* the collateral for gn1 consists of transaction 2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c, output index 0 has amount 10000 +* gridnode 2 will donate 33% of its income +* gridnode 3 will donate 100% of its income + + +The following new RPC commands are supported: +* list-conf: shows the parsed gridnode.conf +* start-alias \ +* stop-alias \ +* start-many +* stop-many +* outputs: list available collateral output transaction ids and corresponding collateral output indexes + +When using the multi gridnode setup, it is advised to run the wallet with 'gridnode=0' as it is not needed anymore. diff --git a/doc/guide-startmany.md b/doc/guide-startmany.md index b4294f0af0c4..4d4a7ab23dc8 100644 --- a/doc/guide-startmany.md +++ b/doc/guide-startmany.md @@ -10,20 +10,20 @@ There are many ways to setup a wallet to support start-many. This guide will wal This is the way to go if you are consolidating multiple wallets into one that supports start-many. -### From your single-instance MasterNode Wallet +### From your single-instance Gridnode Wallet Open your QT Wallet and go to console (from the menu select Tools => Debug Console) -Dump the private key from your MasterNode's pulic key. +Dump the private key from your Gridnode's pulic key. ``` walletpassphrase [your_wallet_passphrase] 600 -dumpprivkey [mn_public_key] +dumpprivkey [gn_public_key] ``` Copy the resulting priviate key. You'll use it in the next step. -### From your multi-instance MasterNode Wallet +### From your multi-instance Gridnode Wallet Open your QT Wallet and go to console (from the menu select Tools => Debug Console) @@ -36,53 +36,53 @@ importprivkey [single_instance_private_key] The wallet will re-scan and you will see your available balance increase by the amount that was in the imported wallet. -[Skip Option 2. and go to Create masternode.conf file](#masternodeconf) +[Skip Option 2. and go to Create gridnode.conf file](#Gridnodeconf) ## Option 2. Starting with a new wallet -[If you used Option 1 above, then you can skip down to Create masternode.conf file.](#masternodeconf) +[If you used Option 1 above, then you can skip down to Create gridnode.conf file.](#Gridnodeconf) ### Create New Wallet Addresses 1. Open the QT Wallet. 2. Click the Receive tab. 3. Fill in the form to request a payment. - * Label: mn01 + * Label: gn01 * Amount: 1000 (optional) * Click *Request payment* 5. Click the *Copy Address* button -Create a new wallet address for each MasterNode. +Create a new wallet address for each Gridnode. Close your QT Wallet. ### Send 10,000 UNIGRID to New Addresses -Just like setting up a standard MN. Send exactly 10,000 UNIGRID to each new address created above. +Just like setting up a standard GM. Send exactly 10,000 UNIGRID to each new address created above. -### Create New Masternode Private Keys +### Create New Gridnode Private Keys Open your QT Wallet and go to console (from the menu select Tools => Debug Console) Issue the following: -```masternode genkey``` +```gridnode genkey``` -*Note: A masternode private key will need to be created for each MasterNode you run. You should not use the same masternode private key for multiple MasterNodes.* +*Note: A gridnode private key will need to be created for each Gridnode you run. You should not use the same gridnode private key for multiple Gridnodes.* Close your QT Wallet. -## Create masternode.conf file +## Create gridnode.conf file Remember... this is local. Make sure your QT is not running. -Create the masternode.conf file in the same directory as your wallet.dat. +Create the gridnode.conf file in the same directory as your wallet.dat. -Copy the masternode private key and correspondig collateral output transaction that holds the 1K UNIGRID. +Copy the gridnode private key and correspondig collateral output transaction that holds the 1K UNIGRID. -The masternode private key may be an existing key from [Option 1](#option1), or a newly generated key from [Option 2](#option2). +The gridnode private key may be an existing key from [Option 1](#option1), or a newly generated key from [Option 2](#option2). -*Please note, the masternode priviate key is not the same as a wallet private key. Never put your wallet private key in the masternode.conf file. That is equivalent to putting your 10,000 UNIGRID on the remote server and defeats the purpose of a hot/cold setup.* +*Please note, the gridnode priviate key is not the same as a wallet private key. Never put your wallet private key in the gridnode.conf file. That is equivalent to putting your 10,000 UNIGRID on the remote server and defeats the purpose of a hot/cold setup.* ### Get the collateral output @@ -90,17 +90,17 @@ Open your QT Wallet and go to console (from the menu select Tools => Debug Conso Issue the following: -```masternode outputs``` +```gridnode outputs``` Make note of the hash (which is your collaterla_output) and index. -### Enter your MasterNode details into your masternode.conf file -[From the unigrid github repo](https://github.com/unigrid-crypto/unigrid/blob/master/doc/masternode_conf.md) +### Enter your Gridnode details into your gridnode.conf file +[From the unigrid github repo](https://github.com/unigrid-crypto/unigrid/blob/master/doc/Gridnode_conf.md) -The new masternode.conf format consists of a space seperated text file. Each line consisting of an alias, IP address followed by port, masternode private key, collateral output transaction id and collateral output index, donation address and donation percentage (the latter two are optional and should be in format "address:percentage"). +The new gridnode.conf format consists of a space seperated text file. Each line consisting of an alias, IP address followed by port, gridnode private key, collateral output transaction id and collateral output index, donation address and donation percentage (the latter two are optional and should be in format "address:percentage"). ``` -alias ipaddress:port masternode_private_key collateral_output collateral_output_index donationin_address:donation_percentage +alias ipaddress:port Gridnode_private_key collateral_output collateral_output_index donationin_address:donation_percentage ``` @@ -108,26 +108,26 @@ alias ipaddress:port masternode_private_key collateral_output collateral_output_ Example: ``` -mn01 127.0.0.1:51992 93HaYBVUCYjEMeeH1Y4sBGLALQZE1Yc1K64xiqgX37tGBDQL8Xg 2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c 0 -mn02 127.0.0.2:51992 93WaAb3htPJEV8E9aQcN23Jt97bPex7YvWfgMDTUdWJvzmrMqey aa9f1034d973377a5e733272c3d0eced1de22555ad45d6b24abadff8087948d4 0 7gnwGHt17heGpG9Crfeh4KGpYNFugPhJdh:25 +gn01 127.0.0.1:51992 93HaYBVUCYjEMeeH1Y4sBGLALQZE1Yc1K64xiqgX37tGBDQL8Xg 2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c 0 +gn02 127.0.0.2:51992 93WaAb3htPJEV8E9aQcN23Jt97bPex7YvWfgMDTUdWJvzmrMqey aa9f1034d973377a5e733272c3d0eced1de22555ad45d6b24abadff8087948d4 0 7gnwGHt17heGpG9Crfeh4KGpYNFugPhJdh:25 ``` ## What about the unigrid.conf file? -If you are using a masternode.conf file you no longer need the unigrid.conf file. The exception is if you need custom settings (thanks oblox). +If you are using a gridnode.conf file you no longer need the unigrid.conf file. The exception is if you need custom settings (thanks oblox). ## Update unigrid.conf on server -If you generated a new masternode private key, you will need to update the remote unigrid.conf files. +If you generated a new gridnode private key, you will need to update the remote unigrid.conf files. Shut down the daemon and then edit the file. ```sudo nano .unigrid/unigrid.conf``` -### Edit the masternodeprivkey -If you generated a new masternode private key, you will need to update the masternodeprivkey value in your remote unigrid.conf file. +### Edit the gridnodeprivkey +If you generated a new gridnode private key, you will need to update the gridnodeprivkey value in your remote unigrid.conf file. -## Start your MasterNodes +## Start your Gridnodes ### Remote @@ -147,11 +147,11 @@ Finally... time to start from local. From the menu select Tools => Debug Console -If you want to review your masternode.conf setting before starting the MasterNodes, issue the following in the Debug Console: +If you want to review your gridnode.conf setting before starting the Gridnodes, issue the following in the Debug Console: -```masternode list-conf``` +```gridnode list-conf``` Give it the eye-ball test. If satisfied, you can start your nodes one of two ways. -1. masternode start-alias [alias_from_masternode.conf]. Example ```masternode start-alias mn01``` -2. masternode start-many +1. gridnode start-alias [alias_from_Gridnode.conf]. Example ```gridnode start-alias gn01``` +2. gridnode start-many diff --git a/doc/masternode-budget.md b/doc/masternode-budget.md index 5d934a6845c2..832ddb56aa15 100644 --- a/doc/masternode-budget.md +++ b/doc/masternode-budget.md @@ -1,4 +1,4 @@ -Masternode Budget API +Gridnode Budget API ======================= UNIGRID now supports full decentralized budgets that are paid directly from the blockchain via superblocks once per month. @@ -9,18 +9,18 @@ Budgets go through a series of stages before being paid: * voting - lobby for votes on your proposal * get enough votes - make it into the budget * finalization - at the end of each payment period, proposals are sorted then compiled into a finalized budget -* finalized budget voting - masternodes that agree with the finalization will vote on that budget +* finalized budget voting - Gridnodes that agree with the finalization will vote on that budget * payment - the winning finalized budget is paid Prepare collateral transaction ------------------------ -mnbudget prepare \ \ \ \ \ \ [use_ix(true|false)] +gnbudget prepare \ \ \ \ \ \ [use_ix(true|false)] Example: ``` -mnbudget prepare cool-project http://www.cool-project/one.json 12 100000 y6R9oN12KnB9zydzTLc3LikD9cCjjQzYG7 1200 true +gnbudget prepare cool-project http://www.cool-project/one.json 12 100000 y6R9oN12KnB9zydzTLc3LikD9cCjjQzYG7 1200 true ``` Output: `464a0eb70ea91c94295214df48c47baa72b3876cfb658744aaf863c7b5bf1ff0` - This is the collateral hash, copy this output for the next step @@ -32,11 +32,11 @@ In this transaction we prepare collateral for "_cool-project_". This proposal wi Submit proposal to network ------------------------ -mnbudget submit \ \ \ \ \ \ \ +gnbudget submit \ \ \ \ \ \ \ Example: ``` -mnbudget submit cool-project http://www.cool-project/one.json 12 100000 y6R9oN12KnB9zydzTLc3LikD9cCjjQzYG7 1200 464a0eb70ea91c94295214df48c47baa72b3876cfb658744aaf863c7b5bf1ff0 +gnbudget submit cool-project http://www.cool-project/one.json 12 100000 y6R9oN12KnB9zydzTLc3LikD9cCjjQzYG7 1200 464a0eb70ea91c94295214df48c47baa72b3876cfb658744aaf863c7b5bf1ff0 ``` Output: `a2b29778ae82e45a973a94309ffa6aa2e2388b8f95b39ab3739f0078835f0491` - This is your proposal hash, which other nodes will use to vote on it @@ -46,11 +46,11 @@ Lobby for votes Double check your information: -mnbudget getinfo \ +gnbudget getinfo \ Example: ``` -mnbudget getinfo cool-project +gnbudget getinfo cool-project ``` Output: ``` @@ -75,13 +75,13 @@ Output: } ``` -If everything looks correct, you can ask for votes from other masternodes. To vote on a proposal, load a wallet with _masternode.conf_ file. You do not need to access your cold wallet to vote for proposals. +If everything looks correct, you can ask for votes from other Gridnodes. To vote on a proposal, load a wallet with _Gridnode.conf_ file. You do not need to access your cold wallet to vote for proposals. -mnbudget vote \ [yes|no] +gnbudget vote \ [yes|no] Example: ``` -mnbudget vote a2b29778ae82e45a973a94309ffa6aa2e2388b8f95b39ab3739f0078835f0491 yes +gnbudget vote a2b29778ae82e45a973a94309ffa6aa2e2388b8f95b39ab3739f0078835f0491 yes ``` Output: `Voted successfully` - Your vote has been submitted and accepted. @@ -89,11 +89,11 @@ Output: `Voted successfully` - Your vote has been submitted and accepted. Make it into the budget ------------------------ -After you get enough votes, execute `mnbudget projection` to see if you made it into the budget. If you the budget was finalized at this moment which proposals would be in it. Note: Proposals must be active at least 1 day on the network and receive 10% of the masternode network in yes votes in order to qualify (E.g. if there is 2500 masternodes, you will need 250 yes votes.) +After you get enough votes, execute `gnbudget projection` to see if you made it into the budget. If you the budget was finalized at this moment which proposals would be in it. Note: Proposals must be active at least 1 day on the network and receive 10% of the gridnode network in yes votes in order to qualify (E.g. if there is 2500 Gridnodes, you will need 250 yes votes.) Example: ``` -mnbudget projection +gnbudget projection ``` Output: @@ -145,19 +145,19 @@ RPC Commands ------------------------ The following new RPC commands are supported: -- mnbudget "command"... ( "passphrase" ) +- gnbudget "command"... ( "passphrase" ) * prepare - Prepare proposal for network by signing and creating tx * submit - Submit proposal for network * vote-many - Vote on a UNIGRID initiative * vote-alias - Vote on a UNIGRID initiative * vote - Vote on a UNIGRID initiative/budget - * getvotes - Show current masternode budgets - * getinfo - Show current masternode budgets + * getvotes - Show current gridnode budgets + * getinfo - Show current gridnode budgets * show - Show all budgets * projection - Show the projection of which proposals will be paid the next cycle * check - Scan proposals and remove invalid -- mnfinalbudget "command"... ( "passphrase" ) +- gnfinalbudget "command"... ( "passphrase" ) * vote-many - Vote on a finalized budget * vote - Vote on a finalized budget * show - Show existing finalized budgets diff --git a/doc/masternode_conf.md b/doc/masternode_conf.md deleted file mode 100644 index 7738e400f34e..000000000000 --- a/doc/masternode_conf.md +++ /dev/null @@ -1,32 +0,0 @@ -Multi masternode config -======================= - -The multi masternode config allows you to control multiple masternodes from a single wallet. The wallet needs to have a valid collateral output of 10000 coins for each masternode. To use this, place a file named masternode.conf in the data directory of your install: - * Windows: %APPDATA%\UNIGRID\ - * Mac OS: ~/Library/Application Support/UNIGRID/ - * Unix/Linux: ~/.unigrid/ - -The new masternode.conf format consists of a space seperated text file. Each line consisting of an alias, IP address followed by port, masternode private key, collateral output transaction id, collateral output index, donation address and donation percentage (the latter two are optional and should be in format "address:percentage"). - -Example: -``` -mn1 127.0.0.2:51996 93HaYBVUCYjEMeeH1Y4sBGLALQZE1Yc1K64xiqgX37tGBDQL8Xg 2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c 0 -mn2 127.0.0.3:51996 93WaAb3htPJEV8E9aQcN23Jt97bPex7YvWfgMDTUdWJvzmrMqey aa9f1034d973377a5e733272c3d0eced1de22555ad45d6b24abadff8087948d4 0 7gnwGHt17heGpG9Crfeh4KGpYNFugPhJdh:33 -mn3 127.0.0.4:51996 92Da1aYg6sbenP6uwskJgEY2XWB5LwJ7bXRqc3UPeShtHWJDjDv db478e78e3aefaa8c12d12ddd0aeace48c3b451a8b41c570d0ee375e2a02dfd9 1 7gnwGHt17heGpG9Crfeh4KGpYNFugPhJdh -``` - -In the example above: -* the collateral for mn1 consists of transaction 2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c, output index 0 has amount 10000 -* masternode 2 will donate 33% of its income -* masternode 3 will donate 100% of its income - - -The following new RPC commands are supported: -* list-conf: shows the parsed masternode.conf -* start-alias \ -* stop-alias \ -* start-many -* stop-many -* outputs: list available collateral output transaction ids and corresponding collateral output indexes - -When using the multi masternode setup, it is advised to run the wallet with 'masternode=0' as it is not needed anymore. diff --git a/test.sh b/test.sh new file mode 100755 index 000000000000..7cde42b8858f --- /dev/null +++ b/test.sh @@ -0,0 +1,228 @@ +#!/bin/bash +# Copyright (c) 2017-2018 The Swipp developers +# Copyright (c) 2022 The Unigrid Foundation +# Distributed under the MIT/X11 software license, see the accompanying +# file COPYING or http://www.opensource.org/licenses/mit-license.php. + +UNIGRID_BINARY=daemon/unigridd +UNIGRID_CLIBINARY=daemon/unigrid-cli +UNIGRID_ARGS="-debug -testnet -hport=52883 -datadir=" +MINER_BINARY=cpuminer-opt/cpuminer +MINER_ARGS=" -a quark --userpass=%s:%s --url=http://127.0.0.1:%d" +TMP_TEMPLATE=/tmp/unigrid.XXXXXXX +STATUS_COMMAND="ps -eo pid,args | grep unigridd | grep debug" + +RED=$(tput setaf 1) +GREEN=$(tput setaf 2) +MAGENTA=$(tput setaf 5) +RESET=$(tput sgr0) + +# Return a randomly generated UUID. + +uuid() { + cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1 +} + +# Stall and wait for the process in $1 to exit. Returns instantly if the +# process is not running. +# +# $1 [pid] The process id to wait for. + +waitpid() { + tail --pid=$1 -f /dev/null +} + +# Return true/false exit value depending on if the process in $1 exists. +# +# $1 [pid] The process id to check for. + +pidexists() { + kill -0 $1 &> /dev/null +} + +# Start the unigrid daemon executable specified in UNIGRID_BINARY. +# +# $1 [ip] IP address to bind daemon to. +# $2 [port] Port to bind daemon to. +# $3 [rpcport] Port to run the rpc interface on. + +start_unigrid_exe() { + dir=$(mktemp -d $TMP_TEMPLATE) + echo directory: $dir + user=$(uuid) + echo $user > $dir/.user + + password=$(uuid) + echo $password > $dir/.password + + extraargs="-rpcuser=$user -rpcpassword=$password " + extraargs+="-externalip=$1 -bind=$1:$2 -rpcport=$3 " + + for i in "${peers[@]}"; do + extraargs+="-connect=$i " + done + + echo $GREEN"Starting unigrid instance"$RESET ">" $UNIGRID_BINARY $UNIGRID_ARGS$dir $extraargs + $UNIGRID_BINARY $UNIGRID_ARGS$dir $extraargs & + pid=$! + + echo $pid > $dir/.pid + sleep 2 + + if ! pidexists $pid; then + echo Failed to start unigrid instance "$1$dir $extrargs" \ + Aborting startup... + stop + exit 1 + fi +} + +# Create a list of peers in the given interval and put them into $peers. +# Exclude the IP specified in $1. Peers are generated frm 127.0.10. +# to 127.0.10.. +# +# $1 [ip] IP (peer) to exclude from the final list. +# $2 [startindex] The index to start from when generating peer list. +# $3 [endindex] The index to end at when generating peer list. + +get_peers() { + tmp_peers=() + for j in $(seq $2 $3); do + tmp_peers[$j]="127.0.10."$j + done + peers=(${tmp_peers[@]/$1*/}) +} + +start() { + echo Preparing Unigrid instances... + + for i in $(seq 1 $1); do + ip="127.0.10."$i + get_peers $ip 1 $1 + start_unigrid_exe $ip 51996 $((15074 + $i)) + done +} + +stop() { + echo Stopping all running Unigrid instances... + + + if ls /tmp/unigrid.* 1> /dev/null 2>&1; then + for i in /tmp/unigrid.*/.pid; do + kill $(<$i) &> /dev/null # We don't care if the kill fails + waitpid $(<$i) + done + fi + + echo Deleting data directories... + rm -rf /tmp/unigrid.* +} + +command() { + get_node_parameters $1 + $UNIGRID_CLIBINARY -rpcuser=$node_user -rpcpassword=$node_password\ + -rpcport=$node_rpcport "${@:2}" +} + +status() { + running_nodes=$(eval $STATUS_COMMAND) + SAVEIFS=$IFS; IFS=$'\n'; running_nodes=($running_nodes); IFS=$SAVEIFS + + i=0; + + if [ "$running_nodes" != "" ]; then + for (( ; i < ${#running_nodes[@]}; i++ )); do + privkey=$(command $i dumpprivkey $(command $i getaddressesbyaccount "" | grep -Po "[a-zA-Z0-9]+")) + echo $GREEN[$i, $privkey]$RESET: ${running_nodes[$i]} + done + fi + + echo $MAGENTA"There are $i nodes up and running."$RESET +} + +get_node_parameters() { + running_nodes=$(eval $STATUS_COMMAND) + SAVEIFS=$IFS; IFS=$'\n'; running_nodes=($running_nodes); IFS=$SAVEIFS + + re="-datadir=([^ ]+) -rpcuser=([^ ]+) -rpcpassword=([^ ]+) [^ ]+ [^ ]+ -rpcport=([^ ]+)" + if [[ ${running_nodes[$1]} =~ $re ]]; then + node_datadir=${BASH_REMATCH[1]} + node_user=${BASH_REMATCH[2]} + node_password=${BASH_REMATCH[3]} + node_rpcport=${BASH_REMATCH[4]} + else + echo $RED"The" specified Unigrid node is not running and could \ + not be found. Exiting...$RESET + exit 1 + fi +} + +mine() { + echo Initiating mining on Unigrid node instance $1. Please hit CTRL-C to stop... + get_node_parameters $1 + $MINER_BINARY $(printf "$MINER_ARGS" $node_user $node_password $node_rpcport) +} + +case $1 in + start) + if [ "$#" -lt 2 ]; then + echo $RED"Syntax" for starting unigrid test instances is \ + "\"start \"", where n denotes the number of nodes. \ + Exiting...$RESET + exit 1 + fi + + if [ "$(eval $STATUS_COMMAND)" != "" ]; then + echo $RED"Already started."$RESET + exit 1 + fi + + start $2 + ;; + + stop) + stop + ;; + + command) + if [ "$#" -lt 3 ]; then + echo $RED"Syntax" for sending a command to a Unigrid node \ + is incorrect. The correct syntax is \ + "\"command \"", where n denotes \ + the node number as shown by "\"status\"".$RESET + exit 1 + fi + + command $2 "${@:3}" + ;; + + status) + status + ;; + + mine) + if [ "$#" -lt 2 ]; then + echo $RED"Syntax" for initiating a mining session is \ + "\"mine \"", where n denotes the node number as shown \ + by "\"status\"".$RESET + exit 1 + fi + + if [ ! -f $MINER_BINARY ]; then + echo $RED"Miner" binary not found. Please compile the miner \ + before executing this operation. + exit 1 + fi + + mine $2 + ;; + + # unknown option + *) + echo Please specify one of the following: start/stop/run. \ + Exiting... + exit 1 + ;; +esac + +exit 0