code:
2E0DGP       IO83
5P6MJ        JO54
AA2UK        FM29
AA4HV        EM55
AA4QE        EM78
AA7UN        DN32
AB6BT        CM88
AB9QZ        EN41
AC4VM        EM78
AC9QI        EN52
AD0PL        EM48
AD9H         EN61
AF5NP        EM10
AF7M         DM42
AG4QX        EL87
AH0U         CM97
AK3Q         EM79
CC6IJM       FO03
CE4SFG       FF45
CF7GEM       CN89
CO2DC        EL83
CO2ER        EL83
CO2YQ        EL83
CO3LT        EL93
CT1FIU       IN50
CT7AEL       IM69
CU2DX        HM77
DL5UZ        JN49
DL6BEN       JO44
EA1AAE       IN81
EA5IGV       IM99
EA5ISK       IM99
EA5WO        IM99
EA5YI        IM99
EA7OM        IM87
EB3ENW       JN11
F6CAX        JO00
F6GCP        JN18
G4IUA        IO91
GI4FUE       IO74
HK2PMR       FJ29
HK4SAN       FJ26
HK6JCF       FJ25
I3FGX        JN55
IK2DJV       JN45
IK5BSC       JN53
IK8IJN       JM78
IN3BJS       JN55
IS0FWY       JM49
IU8CNE       JN71
IW4EJK       JN54
JA9AVA       PM86
JA9LJS       PM86
JR3IIR       PM74
K0AY         FN20
K1BMW        CM99
K1GG         EM97
K1HTV        FM18
K1VOI        FN32
K2AK         DM41
K2RMA        EM90
K2SST        EM85
K2TE         EL98
K3DBD        FN20
K3ZGA        EL98
K4DL         EM63
K4ELI        EM74
K4OP         EM77
K4SHQ        EM64
K5CIA        EM12
K5EJ         EM45
K5KLA        EL49
K5RCD        EL09
K5RWD        EL09
K5WP         EM71
K6JQ         CM88
K6MKF        CM97
K6RIM        CM87
K6SJT        DM13
K7CAH        CN87
K7NN         DM42
K7VNE        DM43
K9LRE        EM57
K9PY         EN61
KA1AQP       FN42
KA4RSZ       EM73
KA5JTM       EL29
KA6A         EM13
KA8TBW       EN61
KA9KQH       EM59
KB2M         EL99
KB5IKR       EM70
KC6AWX       CM88
KC9H         EN62
KC9UPE       EN53
KC9WIB       EN61
KC9WNZ       EM48
KD9E         EM58
KE0HQZ       EN12
KE0N         EN34
KE7HHW       DN13
KF4ZLO       EM78
KG5GCC       EM50
KG6TT        CM88
KG7GPM       DN17
KI7JFH       CN85
KI7MT        DN46
KK0M         CM97
KK6PTO       DM14
KM2J         EL87
KM4DDJ       EM76
KM4PJJ       EM72
KN1SIX       EM90
KN4CRD       EM73
KN9TVE       EN52
KO4PU        EM67
KP2L         EM93
KP4KD        EL95
KP4PR        FK68
KP4SX        FK78
KR6EN        EM59
KS0CW        FM16
KS4OT        EM83
KW4HT        EM64
LA5SJA       KQ50
LU6UBM       FF84
LU8AFR       GF05
LU8DQS       GF05
LU8EKC       GF05
LV7QFH       EM95
LZ1OI        KN22
M0LVL        IO84
M0OIC        IO92
M6RUG        IO83
MI0KOA       IO74
MM0LGS       IO85
N0BAK        EN34
N1SER        EM90
N2BJ         EN61
N2PPI        FN30
N3HI         DM03
N3MK         FM27
N4HYK        EL87
N4LAG        EM85
N4MKA        EM84
N5AYB        EL17
N5BCA        EM12
N5BSA        EM12
N5SLY        EM13
N6GP         DM13
N6OJ         CM88
N6PM         DM13
N6QQ         DM03
N6UK         DM14
N7IP         DN26
N7IY         CN84
N7NT         DM43
N7ZO         CN85
N8EHW        EN81
N8HMG        EN91
N8JAF        EM89
N9MUF        EN51
N9NTC        EN53
NA6L         DM12
NE6I         DM12
NN3V         DM13
NQ6F         DM12
NS2X         EM76
NU4T         EM74
NV8B         EN63
NX8Y         EN80
NY4I         EL87
ON3BZ        JO20
ON3EA        JO21
ON3LMA       JO20
ON7ZV        JO20
OT1V         JO20
OX6EYS       LB60
OZ1FHU       JO55
PA2GP        JO33
PD0LH        JO22
PD9BG        JO21
PE2K         JO22
PR7MB        HI22
PY2LK        GG66
PY2RJ        GG66
PY2XIZ       GG66
PY2YZB       GG66
PY4OY        GG78
PY7BC        HI21
RW0SR        OO22
SM6THE       JO68
SV2WT        KN10
TI4DJ        EK70
UT7QF        KN77
VA3DAZ       EN82
VA3LU        EN58
VE7AHT       CN89
VE9GJ        FN77
W0OGH        DM52
W0TW         EN74
W0YF         EN11
W1PFZ        FN42
W2HRO        FN20
W2PKY        EL88
W3BI         FN20
W3BS         EM55
W3KM         FN20
W3MR         FM18
W4EIS        EM13
W4GE         FM02
W4JSI        EM64
W4SFG        EM74
W4WYI        EM83
W5JPT        EM11
W5ZTX        EL29
W6AER        CM87
W6AUN        DM79
W6NWS        FM05
W6RYO        DM08
W7AUF        CN85
W7CT         DN41
W7DMC        CN85
W7SUR        DM49
W7VP         CN87
W8AKS        EM97
W8FHF        EN90
W8HC         EM98
W8MSC        EN82
W8OI         EM88
W8RES        EM79
W8WEJ        EM99
W8WKE        EL16
W9CTH        EM69
W9EO         DM04
W9WB         EN51
W9YSX        EM79
WA0LIF       EN35
WA1SXK       EM95
WA2HIP       FN54
WA4MIT       EM63
WA4VJK       EM66
WA6PHR       CM94
WA7DVD       DN40
WA9DU        EM69
WA9EIC       EN60
WA9JWL       EN70
WA9NNN       EN61
WB2JEP       DM33
WB2KSP       FN31
WB2REM       EL97
WB3FSR       FN20
WB5OZA       EM30
WB5TKI       EL29
WB5UDI       EM20
WB5XX        EM33
WB7UZO       CN78
WD4KAV       CN87
WD5IQR       EM10
WE5EE        EL49
WL7CG        BP61
WP4NSE       FK68
WS5W         EM13
WV5Y         EL29
WV8DOH       EM99
WV9L         EM59
WW7B         DM33
YV5BM        FK60


code:
#ifndef  BOOST_SERIALIZATION_STRING_HPP
#define BOOST_SERIALIZATION_STRING_HPP

// MS compatible compilers support #pragma once
#if defined(_MSC_VER)
# pragma once
#endif

/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
// serialization/string.hpp:
// serialization for stl string templates

// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
// Use, modification and distribution is subject to the Boost Software
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)

//  See http://www.boost.org for updates, documentation, and revision history.

#include <string>

#include <boost/config.hpp>
#include <boost/serialization/level.hpp>

BOOST_CLASS_IMPLEMENTATION(std::string, boost::serialization::primitive_type)
#ifndef BOOST_NO_STD_WSTRING
BOOST_CLASS_IMPLEMENTATION(std::wstring, boost::serialization::primitive_type)
#endif

#endif // BOOST_SERIALIZATION_STRING_HPP

license: mit


code:
/*
 [auto_generated]
 boost/numeric/odeint/external/thrust/thrust_operations.hpp

 [begin_description]
 Operations of thrust zipped iterators. Is the counterpart of the thrust_algebra.
 [end_description]

 Copyright 2010-2013 Mario Mulansky
 Copyright 2010-2012 Karsten Ahnert

 Distributed under the Boost Software License, Version 1.0.
 (See accompanying file LICENSE_1_0.txt or
 copy at http://www.boost.org/LICENSE_1_0.txt)
 */

#ifndef BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_OPERATIONS_HPP_INCLUDED
#define BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_OPERATIONS_HPP_INCLUDED

namespace boost {
namespace numeric {
namespace odeint {

#include <thrust/tuple.h>
#include <thrust/iterator/zip_iterator.h>

/**ToDo extend to scale_sum13 for rk78 */

struct thrust_operations
{
    template< class Fac1 = double , class Fac2 = Fac1 >
    struct scale_sum2
    {
        const Fac1 m_alpha1;
        const Fac2 m_alpha2;

        scale_sum2( const Fac1 alpha1 , const Fac2 alpha2 )
        : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }

        template< class Tuple >
        __host__ __device__
        void operator()( Tuple t ) const
        {
            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) + m_alpha2 * thrust::get<2>(t);
        }
    };

    template< class Fac1 = double , class Fac2 = Fac1 >
    struct scale_sum_swap2
    {
        const Fac1 m_alpha1;
        const Fac2 m_alpha2;

        scale_sum_swap2( const Fac1 alpha1 , const Fac2 alpha2 )
        : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) { }

        template< class Tuple >
        __host__ __device__
        void operator()( Tuple t ) const
        {
            typename thrust::tuple_element<0,Tuple>::type tmp = thrust::get<0>(t);
            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) + m_alpha2 * thrust::get<2>(t);
            thrust::get<1>(t) = tmp;
        }
    };

    template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 >
    struct scale_sum3
    {
        const Fac1 m_alpha1;
        const Fac2 m_alpha2;
        const Fac3 m_alpha3;

        scale_sum3( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 )
        : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) { }

        template< class Tuple >
        __host__ __device__
        void operator()( Tuple t ) const
        {
            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
                    m_alpha2 * thrust::get<2>(t) +
                    m_alpha3 * thrust::get<3>(t);
        }
    };

    template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 >
    struct scale_sum4
    {
        const Fac1 m_alpha1;
        const Fac2 m_alpha2;
        const Fac3 m_alpha3;
        const Fac4 m_alpha4;

        scale_sum4( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 , const Fac4 alpha4 )
        : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) , m_alpha4( alpha4 ){ }

        template< class Tuple >
        __host__ __device__
        void operator()( Tuple t ) const
        {
            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
                    m_alpha2 * thrust::get<2>(t) +
                    m_alpha3 * thrust::get<3>(t) +
                    m_alpha4 * thrust::get<4>(t);
        }
    };

    template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 ,
            class Fac4 = Fac3 , class Fac5 = Fac4 >
    struct scale_sum5
    {
        const Fac1 m_alpha1;
        const Fac2 m_alpha2;
        const Fac3 m_alpha3;
        const Fac4 m_alpha4;
        const Fac5 m_alpha5;

        scale_sum5( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 ,
                const Fac4 alpha4 , const Fac5 alpha5 )
        : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) ,
          m_alpha4( alpha4 ) , m_alpha5( alpha5 ) { }

        template< class Tuple >
        __host__ __device__
        void operator()( Tuple t ) const
        {
            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
                    m_alpha2 * thrust::get<2>(t) +
                    m_alpha3 * thrust::get<3>(t) +
                    m_alpha4 * thrust::get<4>(t) +
                    m_alpha5 * thrust::get<5>(t);
        }
    };

    template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 ,
            class Fac4 = Fac3 , class Fac5 = Fac4 , class Fac6 = Fac5 >
    struct scale_sum6
    {
        const Fac1 m_alpha1;
        const Fac2 m_alpha2;
        const Fac3 m_alpha3;
        const Fac4 m_alpha4;
        const Fac5 m_alpha5;
        const Fac6 m_alpha6;

        scale_sum6( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 ,
                const Fac4 alpha4 , const Fac5 alpha5 , const Fac6 alpha6 )
        : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) ,
          m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) { }

        template< class Tuple >
        __host__ __device__
        void operator()( Tuple t ) const
        {
            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
                    m_alpha2 * thrust::get<2>(t) +
                    m_alpha3 * thrust::get<3>(t) +
                    m_alpha4 * thrust::get<4>(t) +
                    m_alpha5 * thrust::get<5>(t) +
                    m_alpha6 * thrust::get<6>(t);
        }
    };

    template< class Fac1 = double , class Fac2 = Fac1 , class Fac3 = Fac2 , class Fac4 = Fac3 ,
            class Fac5 = Fac4 , class Fac6 = Fac5 , class Fac7 = Fac6 >
    struct scale_sum7
    {
        const Fac1 m_alpha1;
        const Fac2 m_alpha2;
        const Fac3 m_alpha3;
        const Fac4 m_alpha4;
        const Fac5 m_alpha5;
        const Fac6 m_alpha6;
        const Fac7 m_alpha7;

        scale_sum7( const Fac1 alpha1 , const Fac2 alpha2 , const Fac3 alpha3 ,
                const Fac4 alpha4 , const Fac5 alpha5 , const Fac6 alpha6 , const Fac7 alpha7 )
        : m_alpha1( alpha1 ) , m_alpha2( alpha2 ) , m_alpha3( alpha3 ) ,
          m_alpha4( alpha4 ) , m_alpha5( alpha5 ) , m_alpha6( alpha6 ) , m_alpha7( alpha7 ) { }

        template< class Tuple >
        __host__ __device__
        void operator()( Tuple t ) const
        {
            thrust::get<0>(t) = m_alpha1 * thrust::get<1>(t) +
                    m_alpha2 * thrust::get<2>(t) +
                    m_alpha3 * thrust::get<3>(t) +
                    m_alpha4 * thrust::get<4>(t) +
                    m_alpha5 * thrust::get<5>(t) +
                    m_alpha6 * thrust::get<6>(t) +
                    m_alpha7 * thrust::get<7>(t) ;
        }
    };

    template< class Fac1 = double >
    struct rel_error
    {
        const Fac1 m_eps_abs , m_eps_rel , m_a_x , m_a_dxdt;

        rel_error( const Fac1 eps_abs , const Fac1 eps_rel , const Fac1 a_x , const Fac1 a_dxdt )
        : m_eps_abs( eps_abs ) , m_eps_rel( eps_rel ) , m_a_x( a_x ) , m_a_dxdt( a_dxdt ) { }

        template< class Tuple >
        __host__ __device__
        void operator()( Tuple t ) const
        {
            using std::abs;
            thrust::get< 0 >( t ) = abs( thrust::get< 0 >( t ) ) /
                    ( m_eps_abs + m_eps_rel * ( m_a_x * abs( thrust::get< 1 >( t ) + m_a_dxdt * abs( thrust::get< 2 >( t ) ) ) ) );
        }

        typedef void result_type;
    };

};

} // odeint
} // numeric
} // boost

#endif // BOOST_NUMERIC_ODEINT_EXTERNAL_THRUST_THRUST_OPERATIONS_HPP_INCLUDED


code:
# - Returns a version string from Git
#
# These functions force a re-configure on each git commit so that you can
# trust the values of the variables in your build system.
#
#  get_git_head_revision(<source_dir> <refspecvar> <hashvar> [<additional arguments to git describe> ...])
#
# Returns the refspec and sha hash of the current head revision
#
#  git_describe(<source-dir> <var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe on the source tree, and adjusting
# the output so that it tests false if an error occurs.
#
#  git_get_exact_tag(<source-dir> <var> [<additional arguments to git describe> ...])
#
# Returns the results of git describe --exact-match on the source tree,
# and adjusting the output so that it tests false if there was no exact
# matching tag.
#
#  git_local_changes(<source-dir> <var>)
#
# Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes.
# Uses the return code of "git diff-index --quiet HEAD --".
# Does not regard untracked files.
#
# Requires CMake 2.6 or newer (uses the 'function' command)
#
# Original Author:
# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net>
# http://academic.cleardefinition.com
# Iowa State University HCI Graduate Program/VRAC
#
# Copyright Iowa State University 2009-2010.
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)

if(__get_git_revision_description)
	return()
endif()
set(__get_git_revision_description YES)

# We must run the following at "include" time, not at function call time,
# to find the path to this module rather than the path to a calling list file
get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)

function(get_git_head_revision _source_dir _refspecvar _hashvar)
	set(GIT_PARENT_DIR "${_source_dir}")
	set(GIT_DIR "${GIT_PARENT_DIR}/.git")
	while(NOT EXISTS "${GIT_DIR}")	# .git dir not found, search parent directories
		set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
		get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
		if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
			# We have reached the root directory, we are not in git
			set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
			set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
			return()
		endif()
		set(GIT_DIR "${GIT_PARENT_DIR}/.git")
	endwhile()
	# check if this is a submodule
	if(NOT IS_DIRECTORY ${GIT_DIR})
		file(READ ${GIT_DIR} submodule)
		string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
		get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
		get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
	endif()
	set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
	if(NOT EXISTS "${GIT_DATA}")
		file(MAKE_DIRECTORY "${GIT_DATA}")
	endif()

	if(NOT EXISTS "${GIT_DIR}/HEAD")
		return()
	endif()
	set(HEAD_FILE "${GIT_DATA}/HEAD")
	configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)

	configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
		"${GIT_DATA}/grabRef.cmake"
		@ONLY)
	include("${GIT_DATA}/grabRef.cmake")

	set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
	set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
endfunction()

function(git_describe _source_dir _var)
	if(NOT GIT_FOUND)
		find_package(Git QUIET)
	endif()
	get_git_head_revision(${_source_dir} refspec hash)
	if(NOT GIT_FOUND)
		set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
		return()
	endif()
	if(NOT hash)
		set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
		return()
	endif()

	# TODO sanitize
	#if((${ARGN}" MATCHES "&&") OR
	#	(ARGN MATCHES "||") OR
	#	(ARGN MATCHES "\\;"))
	#	message("Please report the following error to the project!")
	#	message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
	#endif()

	#message(STATUS "Arguments to execute_process: ${ARGN}")

	execute_process(COMMAND
		"${GIT_EXECUTABLE}"
		describe
		${hash}
		${ARGN}
		WORKING_DIRECTORY
		"${_source_dir}"
		RESULT_VARIABLE
		res
		OUTPUT_VARIABLE
		out
		ERROR_QUIET
		OUTPUT_STRIP_TRAILING_WHITESPACE)
	if(NOT res EQUAL 0)
		set(out "${out}-${res}-NOTFOUND")
	endif()

	set(${_var} "${out}" PARENT_SCOPE)
endfunction()

function(git_get_exact_tag _source_dir _var)
	git_describe(${_source_dir} out --exact-match ${ARGN})
	set(${_var} "${out}" PARENT_SCOPE)
endfunction()

function(git_local_changes _source_dir _var)
	if(NOT GIT_FOUND)
		find_package(Git QUIET)
	endif()
	get_git_head_revision(${_source_dir} refspec hash)
	if(NOT GIT_FOUND)
		set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
		return()
	endif()
	if(NOT hash)
		set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
		return()
	endif()

	execute_process(COMMAND
		"${GIT_EXECUTABLE}"
		diff-index --quiet HEAD --
		WORKING_DIRECTORY
		"${_source_dir}"
		RESULT_VARIABLE
		res
		OUTPUT_VARIABLE
		out
		ERROR_QUIET
		OUTPUT_STRIP_TRAILING_WHITESPACE)
	if(res EQUAL 0)
		set(${_var} "CLEAN" PARENT_SCOPE)
	else()
		set(${_var} "DIRTY" PARENT_SCOPE)
	endif()
endfunction()


code:
/*=============================================================================
    Copyright (c) 2001-2011 Joel de Guzman

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

    This is an auto-generated file. Do not edit!
==============================================================================*/
#if FUSION_MAX_VECTOR_SIZE <= 10
#include <boost/fusion/tuple/detail/preprocessed/tuple_tie10.hpp>
#elif FUSION_MAX_VECTOR_SIZE <= 20
#include <boost/fusion/tuple/detail/preprocessed/tuple_tie20.hpp>
#elif FUSION_MAX_VECTOR_SIZE <= 30
#include <boost/fusion/tuple/detail/preprocessed/tuple_tie30.hpp>
#elif FUSION_MAX_VECTOR_SIZE <= 40
#include <boost/fusion/tuple/detail/preprocessed/tuple_tie40.hpp>
#elif FUSION_MAX_VECTOR_SIZE <= 50
#include <boost/fusion/tuple/detail/preprocessed/tuple_tie50.hpp>
#else
#error "FUSION_MAX_VECTOR_SIZE out of bounds for preprocessed headers"
#endif


code:
//  (C) Copyright Gennadiy Rozental 2001.
//  Distributed under the Boost Software License, Version 1.0.
//  (See accompanying file LICENSE_1_0.txt or copy at
//  http://www.boost.org/LICENSE_1_0.txt)

//  See http://www.boost.org/libs/test for the library home page.
//
//! @file
//! @brief Deprecated header.
//! @deprecated Use @c boost/test/unit_test.hpp instead.
// ***************************************************************************

#ifndef BOOST_TEST_AUTO_UNIT_TEST_HPP_071894GER
#define BOOST_TEST_AUTO_UNIT_TEST_HPP_071894GER

#include <boost/test/unit_test.hpp>

#endif // BOOST_TEST_AUTO_UNIT_TEST_HPP_071894GER


code:
// Boost.Range library
//
//  Copyright Neil Groves 2014. Use, modification and
//  distribution is subject to the Boost Software License, Version
//  1.0. (See accompanying file LICENSE_1_0.txt or copy at
//  http://www.boost.org/LICENSE_1_0.txt)
//
// For more information, see http://www.boost.org/libs/range/
//
#define BOOST_RANGE_combined_exp_pred(d, data) BOOST_PP_TUPLE_ELEM(3, 0, data)

#define BOOST_RANGE_combined_exp_op(d, data) \
 ( \
    BOOST_PP_DEC( \
       BOOST_PP_TUPLE_ELEM(3, 0, data) \
    ), \
    BOOST_PP_TUPLE_ELEM(3, 1, data), \
    BOOST_PP_MUL_D( \
       d, \
       BOOST_PP_TUPLE_ELEM(3, 2, data), \
       BOOST_PP_TUPLE_ELEM(3, 1, data) \
    ) \
 )

#define BOOST_RANGE_combined_exp(x, n) \
  BOOST_PP_TUPLE_ELEM(3, 2, \
  BOOST_PP_WHILE(BOOST_RANGE_combined_exp_pred, \
                 BOOST_RANGE_combined_exp_op, (n, x, 1)))

#define BOOST_RANGE_combined_bitset_pred(n, state) \
    BOOST_PP_TUPLE_ELEM(2,1,state)

#define BOOST_RANGE_combined_bitset_op(d, state) \
    (BOOST_PP_DIV_D(d, BOOST_PP_TUPLE_ELEM(2,0,state), 2), \
     BOOST_PP_DEC(BOOST_PP_TUPLE_ELEM(2,1,state)))

#define BOOST_RANGE_combined_bitset(i, n) \
BOOST_PP_MOD(BOOST_PP_TUPLE_ELEM(2, 0, \
      BOOST_PP_WHILE(BOOST_RANGE_combined_bitset_pred, \
                     BOOST_RANGE_combined_bitset_op, (i,n))), 2)

#define BOOST_RANGE_combined_range_iterator(z, n, i) \
  typename range_iterator< \
      BOOST_PP_CAT(R,n)          \
      BOOST_PP_IF( \
          BOOST_RANGE_combined_bitset(i,n), \
          BOOST_PP_IDENTITY(const), \
          BOOST_PP_EMPTY)() \
  >::type

#define BOOST_RANGE_combined_args(z, n, i) \
  BOOST_PP_CAT(R, n) \
  BOOST_PP_IF(BOOST_RANGE_combined_bitset(i,n), const&, &)  \
  BOOST_PP_CAT(r, n)

#define BOOST_RANGE_combine_impl(z, i, n)\
    template<BOOST_PP_ENUM_PARAMS(n, typename R)> \
    inline range::combined_range< \
        boost::tuple<BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, i)> \
    > \
    combine(BOOST_PP_ENUM(n, BOOST_RANGE_combined_args, i)) \
    { \
        typedef tuple< \
            BOOST_PP_ENUM(n, BOOST_RANGE_combined_range_iterator, i) \
        > rng_tuple_t;   \
        return range::combined_range<rng_tuple_t>( \
            rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, begin)), \
            rng_tuple_t(BOOST_PP_ENUM(n, BOOST_RANGE_combined_seq, end))); \
    }

#define BOOST_RANGE_combine(z, n, data) \
  BOOST_PP_REPEAT(BOOST_RANGE_combined_exp(2,n), BOOST_RANGE_combine_impl, n)