ADOL-C-2.6.3/0000755000175200017520000000000013037353015011067 5ustar coincoinADOL-C-2.6.3/README0000644000175200017520000000637612562202137011763 0ustar coincoin ADOL-C This new version of ADOL-C features new library functions for - sparse Jacobians and sparse Hessians - external differentiated functions - optimal checkpointing - adapted differentiation of fixed point iterations - parallel differentiation of OpenMP-parallel loops - Lie derivatives of scalar, vector and covector fields and many bug fixes. Furthermore the source code was adapted to allow a compilation with WINDOWS compilers. See file "INSTALL" for generic installation instructions and special instructions for the installation on a WINDOWS platform. The complete documentation can be found in the subdirectory "doc". LOCAL INSTALLATION ================== 1. Run configure with possibly using one of these options: --prefix=PREFIX install library and header files in PREFIX (default: ${HOME}/adolc_base) --enable-sparse build sparse drivers [default=no] --with-openmp-flag=FLAG use FLAG to enable OpenMP at compile time [default=none] --enable-docexa build documented examples [default=no] --enable-addexa build additional examples [default=no] --enable-parexa build parallel example [default=no], if yes -with-openmp-flag=FLAG required --with-cflags=FLAGS use CFLAGS=FLAGS (default: -O3 -Wall -ansi) --with-cxxflags=FLAGS use CXXFLAGS=FLAGS (default: -O3 -Wall) 2. Type make 3. Type make install By default, `make install' will install all the files in ${PREFIX}/lib and ${PREFIX}/include. You can specify another installation directory by using the --prefix-option in the configure call. This procedure provides all makefiles required in the approporate directories. Execute 'configure --help' for more details on other available option. Nonlocal installation ===================== As mentioned in INSTALL one can configure the adolc package to be installed in a different directory than "${HOME}/adolc_base" by using the "--prefix=PATH" configure option. This is typically used for global installations. Common PATHs are "/usr" and "/usr/local/", and others are known to be used. Fine control over the installation directories can be gained by supplying additional configure options. See "./configure --help" for details. Completing the installation by executing "make install" requires write permissions for all target directories. Make sure to have them or the result may be surprising otherwise. A global installation can be helpfull if many users need the library. By adding the library's path to "/etc/ld.so.conf" the usage of LD_LIBRARY_PATH and the "-L" link switch becomes unnecessary. In many cases, for instance for PATH=/usr/local, the use of the -I directive for compiling sources becomes unnecessary too. Examples ======== Examples must be configured to build by using the configure switches --enable-docexa or --enable-addexa. They will never be installed by make install but can be found in the appropriate example subdirectory. Windows Compilation with Visual Studio ====================================== Please refer to the file windows/Readme_VC++.txt for building the library and ADOL-C/examples/Readme_VC++.txt for the documented examples. Enjoy this new version! ADOL-C-2.6.3/ADOL-C/0000755000175200017520000000000013037353015011766 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/0000755000175200017520000000000013037353015013604 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/Readme_VC++.txt0000644000175200017520000000045611412425466016272 0ustar coincoinIn order to compile the examples with Visual studio use the solution file adolc_examples.sln. This solution builds all 6 documented examples. Individual examples may be build using their own project file. The project file from windows/adolc.vcxproj must be added as a Reference for linking correctly. ADOL-C-2.6.3/ADOL-C/examples/tapeless_vector.vcxproj0000644000175200017520000001725112565364772020452 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj {869E4942-ABB6-64D9-910C-7127B9BD4C17} Application true v140 Application true v140 Application false v140 Application false v140 true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed Default MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed false Default true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase false true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) ADOL-C-2.6.3/ADOL-C/examples/README0000644000175200017520000000272311227416777014506 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 295 2009-02-25 13:32:25Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- The directory contains the examples described in the manual The subdirectory additional_examples contains further example code for numerous drivers and applications of ADOL-C -------------------------------------------------------------- CONTENTS OF THE DIRECTORY detexam.cpp ---> Computation of determinants speelpenning.cpp ---> Speelpenning's product powexam.cpp ---> Computation of n-th power odexam.cpp ---> Nonlinear ordinary differential equation based on the Robertson test problem tapeless_scalar.cpp ---> coordinate transform with tapeless scalar forward mode tapeless_vector.cpp ---> coordinate with tapeless vector forward mode ADOL-C-2.6.3/ADOL-C/examples/odexam.cpp0000644000175200017520000000720011452356477015602 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: odexam.cpp Revision: $Id: odexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Nonlinear ordinary differential equation based on the Robertson test problem, described in the manual Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include // use of active double #include // use of "Easy To Use" ODE drivers #include // use of ADOL-C allocation utilities #include // use of taping // NOTICE: If one wants to include all ADOL-C interfaces without // getting in trouble to find out the right header files // // #include "adolc/adolc.h" // // will do the right work. #include using namespace std; /****************************************************************************/ /* ADOUBLE ROUTINE */ void tracerhs(short int tag, double* py, double* pyprime) { adouble y[3]; // we left the parameters passive adouble yprime[3]; trace_on(tag); y[0] <<= py[0]; y[1] <<= py[1]; y[2] <<= py[2]; // initialize and mark independents yprime[0] = -sin(y[2]) + 1.0e8*y[2]*(1.0-1.0/y[0]); yprime[1] = -10.0*y[0] + 3.0e7*y[2]*(1-y[1]); yprime[2] = -yprime[0] - yprime[1]; yprime[0] >>= pyprime[0]; yprime[1] >>= pyprime[1]; yprime[2] >>= pyprime[2]; // mark and pass dependents trace_off(1); // write tape array onto a file } // end tracerhs /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,j,deg; int n = 3; double py[3]; double pyp[3]; cout << "MODIFIED ROBERTSON TEST PROBLEM (ADOL-C Documented Example)\n\n"; cout << "degree of Taylor series =?\n"; cin >> deg; short** nz = new short*[n]; double **X; double ***Z; double ***B; X = myalloc2(n,deg+1); Z = myalloc3(n,n,deg); B = myalloc3(n,n,deg); for(i=0; i nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj {5BBECE46-5467-9A31-7E5E-3DBBA59C611F} Application true v140 Application true v140 Application false v140 Application false v140 true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed Default MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed false Default true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase false true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) ADOL-C-2.6.3/ADOL-C/examples/powexam.cpp0000644000175200017520000000737411452356477016021 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: powexam.cpp Revision: $Id: powexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: computation of n-th power, described in the manual Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include /* use of ALL ADOL-C interfaces */ #include using namespace std; /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble power(adouble x, int n) { adouble z = 1; if (n>0) /* Recursion and branches */ { int nh = n/2; /* that do not depend on */ z = power(x,nh); /* adoubles are fine !!!! */ z *= z; if (2*nh != n) z *= x; return z; } /* end if */ else { if (n==0) /* The local adouble z dies */ return z; /* as it goes out of scope. */ else return 1/power(x,-n); } /* end else */ } /* end power */ /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,tag = 1; int n; cout << "COMPUTATION OF N-TH POWER (ADOL-C Documented Example)\n\n"; cout << "monomial degree=? \n"; /* input the desired degree */ cin >> n; /* allocations and initializations */ double** X; double** Y; X = myalloc2(1,n+4); Y = myalloc2(1,n+4); X[0][0] = 0.5; /* function value = 0. coefficient */ X[0][1] = 1.0; /* first derivative = 1. coefficient */ for(i=0; i>= Y[0][0]; /* only one dependent adouble */ trace_off(); /* no global adouble has died */ /* end of active section */ double u[1]; /* weighting vector */ u[0]=1; /* for reverse call */ for(i=0; i C++ program to create a tape of the function of interest. createTape.cpp useTape --> C++ program which uses the tape created with createTape to compute the gradient. useTape.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/tapesave/createTape.cpp0000644000175200017520000000715211452356477024226 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: createTape.cpp Revision: $Id: createTape.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: How to create a tape with ADOL-C ================================ Application of ADOL-C to the example function of Tony Wong to obtain the tape, which will be saved on HD for future use Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ /* use of ALL ADOL-C interfaces */ #include /****************************************************************************/ /* ACTIVATING FUNCTIONS */ /* Example of a C function */ double myf ( double x, double y, double z) { return x*x + y*y*y + z*z*z*z + 2.0*x*x*x*x*y*y*y + z*z*z*z*x*x*x*x*x + 3.0*z*z*z*y; } /* Example of the corresponding 'active' C function */ adouble myf ( adouble x, adouble y, adouble z) { return x*x + y*y*y + z*z*z*z + 2.0*x*x*x*x*y*y*y + z*z*z*z*x*x*x*x*x + 3.0*z*z*z*y; } /****************************************************************************/ /* GENERATING THE EVALUATION TAPE */ int main() { double xyz[3], f; /* variables */ adouble ax, ay, az, af; /* active varaibles */ xyz[0] = 1.2; xyz[1] = 2.6; /* initialize any values */ xyz[2] = 0.03; /* TRACING THE EVALUATION TAPE */ trace_on(1); /* start tracing of an evaluation tape with the identifier 1 */ ax <<= xyz[0]; /* marking independent variables */ ay <<= xyz[1]; az <<= xyz[2]; af = myf(ax,ay,az); /* calling the 'active' version of the function to be differentiated to generate a tape of the evaluation process; NOTE: Instead of calling a C function the whole evaluation code can be placed here (see example file DEX/powerexam.C) */ af >>= f; /* marking the only one dependent variable */ trace_off(1); /* stop tracing */ /* NOTE: trace_off(..) is called with the value 1 (for the optional ! argument). This forces ADOL-C to save the generated tapes ! on harddisc. In particular these are the files ! ! _adol-op_tape.1 (operations = opcodes) ! _adol-in_tape.1 (integers = locations) ! _adol-rl_tape.1 (real values = doubles) ! ! The appendix '1' is determined by the used tape ! identifier, which was passed to trace_on(..). */ } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/tapesave/Makefile.in0000644000175200017520000004610112565145701023477 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = createTape$(EXEEXT) useTape$(EXEEXT) subdir = ADOL-C/examples/additional_examples/tapesave DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_createTape_OBJECTS = createTape.$(OBJEXT) createTape_OBJECTS = $(am_createTape_OBJECTS) createTape_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_useTape_OBJECTS = useTape.$(OBJEXT) useTape_OBJECTS = $(am_useTape_OBJECTS) useTape_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(createTape_SOURCES) $(useTape_SOURCES) DIST_SOURCES = $(createTape_SOURCES) $(useTape_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig createTape_SOURCES = createTape.cpp useTape_SOURCES = useTape.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/tapesave/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/tapesave/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list createTape$(EXEEXT): $(createTape_OBJECTS) $(createTape_DEPENDENCIES) $(EXTRA_createTape_DEPENDENCIES) @rm -f createTape$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(createTape_OBJECTS) $(createTape_LDADD) $(LIBS) useTape$(EXEEXT): $(useTape_OBJECTS) $(useTape_DEPENDENCIES) $(EXTRA_useTape_DEPENDENCIES) @rm -f useTape$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(useTape_OBJECTS) $(useTape_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/createTape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/useTape.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/tapesave/useTape.cpp0000644000175200017520000000556611452356477023566 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: createTape.cpp Revision: $Id: useTape.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: How to use a tape with ADOL-C ============================= Application of ADOL-C to the example function of Tony Wong to use a tape, which was previously saved on HD Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ /* use of ALL ADOL-C interfaces */ #include #include /****************************************************************************/ /* USING THE EVALUATION TAPE */ int main() { double xyz[3], f, gradf[3]; /* variables */ xyz[0] = 1.0; xyz[1] = 1.0; /* initialize any values */ xyz[2] = 1.0; /* USING THE TAPE FOR DERIVATIVE COMPUTATION */ function(1, /* the tape identifier 1 (tag) */ 1, /* number of dependent variables = dimension of f */ 3, /* number of independent variables = dimension of xyz */ xyz, /* the point where the function has to be differentiated */ &f); /* contains the function value (after calling 'function(..)') */ gradient(1, /* the tape identifier 1 (tag) */ 3, /* number of independent variables = dimension of xyz */ xyz, /* the point where the function has to be differentiated */ gradf); /* contains the gradient (after calling 'gradient(..)') */ /* print the results */ fprintf(stdout,"f = %E\n",f); fprintf(stdout,"df = (%E, %E, %E)\n",gradf[0],gradf[1],gradf[2]); return 0; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/openmp_exam/0000755000175200017520000000000013037353015022122 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/openmp_exam/README0000644000175200017520000000237311227416777023025 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 268 2008-12-15 10:32:03Z awalther $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- This directory contains example programs that perform derivative computation in serial and parallel based on OpenMP parallelization -------------------------------------------------------------- CONTENTS OF THE DIRECTORY liborser --> a simple financial example problem for the computation of greeks function evaluation and derivative calculation is performed serial liborser.cpp liborpar --> a simple financial example problem for the computation of greeks function evaluation and derivative calculation is performed parallel using OpenMP liborpar.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/openmp_exam/Makefile.in0000644000175200017520000004607012565145701024204 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @PAREXA_TRUE@noinst_PROGRAMS = liborser$(EXEEXT) liborpar$(EXEEXT) subdir = ADOL-C/examples/additional_examples/openmp_exam DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_liborpar_OBJECTS = liborpar.$(OBJEXT) liborpar_OBJECTS = $(am_liborpar_OBJECTS) liborpar_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_liborser_OBJECTS = liborser.$(OBJEXT) liborser_OBJECTS = $(am_liborser_OBJECTS) liborser_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(liborpar_SOURCES) $(liborser_SOURCES) DIST_SOURCES = $(liborpar_SOURCES) $(liborser_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig liborser_SOURCES = liborser.cpp liborpar_SOURCES = liborpar.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/openmp_exam/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/openmp_exam/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list liborpar$(EXEEXT): $(liborpar_OBJECTS) $(liborpar_DEPENDENCIES) $(EXTRA_liborpar_DEPENDENCIES) @rm -f liborpar$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(liborpar_OBJECTS) $(liborpar_LDADD) $(LIBS) liborser$(EXEEXT): $(liborser_OBJECTS) $(liborser_DEPENDENCIES) $(EXTRA_liborser_DEPENDENCIES) @rm -f liborser$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(liborser_OBJECTS) $(liborser_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborpar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liborser.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/openmp_exam/liborser.cpp0000644000175200017520000001127712334626426024467 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: liborser.cpp Revision: $Id: liborser.cpp 503 2014-05-14 08:45:10Z kulshres $ Contents: example for differentiation of OpemMP parallel programs serial version for comparisons Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /* Program to compute deltas and vegas of swaption portfolio from forward and reverse mode pathwise sensitivities in parallel written by Andrea Walther in 2008-11 based on code written by written by Mike Giles in 2005-7 which is again based on code written by Zhao and Glasserman at Columbia University */ using namespace std; #include #include #include #include #include /* calculate path values */ template void path_calc(const int N, const int Nmat, const double delta, ADdouble L[], const double lambda[], ADdouble z[]) { int i, n; double lam, con1; ADdouble v, vrat; ADdouble sqez; for(n=0; n void portfolio(const int N, const int Nmat, const double delta, const int Nopt, const int maturities[], const double swaprates[], const ADdouble L[], ADdouble& v ) { int i, m, n; ADdouble b, s, swapval, *B, *S; B = new ADdouble[N]; S = new ADdouble[N]; b = 1.0; s = 0.0; for (n=Nmat; n>= v[i]; trace_off(1); for(i=0;i #include #include #include #include "adolc/adolc.h" #ifdef _OPENMP #include #include #endif /* calculate path values */ template void path_calc(const int N, const int Nmat, const double delta, ADdouble L[], const double lambda[], ADdouble z[]) { int i, n; double lam, con1; ADdouble v, vrat; ADdouble sqez; for(n=0; n void portfolio(const int N, const int Nmat, const double delta, const int Nopt, const int maturities[], const double swaprates[], const ADdouble L[], ADdouble& v ) { int i, m, n; ADdouble b, s, swapval, *B, *S; B = new ADdouble[N]; S = new ADdouble[N]; b = 1.0; s = 0.0; for (n=Nmat; n>= v[init]; trace_off(1); for(l=init;l #include #include /****************************************************************************/ /* NAMESPACES AND DEFINES */ using namespace std; #define TAPE_F 1 #define TAPE_G 2 #define TAPE_H 3 /****************************************************************************/ /* MAIN PROGRAM */ int main() { const int n = 4, m_H = 2; double* x0 = myalloc(n); double vf[n], vg[n], vh[n]; adouble aX[n], af[n], ag[n], ah[m_H]; const double mc = 1.0, ml = 1.0, l = 1.0, g = 9.81; /**************************** * Trace for vector field f * ****************************/ trace_on(TAPE_F); { for (int i = 0; i < n; i++) aX[i] <<= x0[i]; af[0] = aX[2]; af[1] = aX[3]; af[2] = (ml*l*pow(aX[3],2)*sin(aX[1]) + ml*g*sin(aX[1])*cos(aX[1]))/(ml*pow(sin(aX[1]),2)+mc); af[3] = -(ml*l*pow(aX[3],2)*sin(aX[1])*cos(aX[1]) + (ml + mc)*g*sin(aX[1]))/(l*(ml*pow(sin(aX[1]),2)+mc)); for (int i = 0; i < n; i++) af[i] >>= vf[i]; } trace_off(); /**************************** * Trace for vector field g * ****************************/ trace_on(TAPE_G); { for (int i = 0; i < n; i++) aX[i] <<= x0[i]; ag[0] = 0; ag[1] = 0; ag[2] = 1/(ml*pow(sin(aX[1]),2)+mc); ag[3] = -cos(aX[1])/(l*(ml*pow(sin(aX[1]),2)+mc)); for (int i = 0; i < n; i++) ag[i] >>= vg[i]; } trace_off(); /********************************** * Trace for scalar fields h1, h2 * **********************************/ trace_on(TAPE_H); { for (int i = 0; i < n; i++) aX[i] <<= x0[i]; ah[0] = aX[0] + l*sin(aX[1]); ah[1] = l*cos(aX[1]); for (int i = 0; i < m_H; i++) ah[i] >>= vh[i]; } trace_off(); const int d = 12; x0[0] = 1.; x0[1] = 0.2; x0[2] = -0.5; x0[3] = -0.4; cout.precision(6); cout << scientific; /*************************************************** * calculation of Lie derivatives of scalar fields * ***************************************************/ double** scalar = myalloc2(m_H, d+1); cout << "Lie derivatives:" << endl << endl; // calculate Lie derivatives using Lie drivers lie_scalar(TAPE_F, TAPE_H, n, m_H, x0, d, scalar); for (int i = 0; i <= d; i++) { for (int j = 0; j < m_H; j++) cout << "Lfh_" << i << "_" << j << " =\t" << scalar[j][i] << endl; cout << endl; } cout << endl; myfree2(scalar); /**************************************************************** * calculation of gradients of Lie derivatives of scalar fields * ****************************************************************/ double*** gradient = myalloc3(m_H, n, d+1); cout << "gradients of Lie derivatives:" << endl << endl; // calculate gradients of Lie derivatives using Lie drivers lie_gradient(TAPE_F, TAPE_H, n, m_H, x0, d, gradient); for (int i = 0; i <= d; i++) { for (int j = 0; j < m_H; j++) cout << "dLfh_" << i << "_" << j << " =\t" << gradient[j][0][i] << "\t" << gradient[j][1][i] << "\t" << gradient[j][2][i] << "\t" << gradient[j][3][i] << endl; cout << endl; } cout << endl; myfree3(gradient); /******************************* * calculation of Lie brackets * *******************************/ double** bracket = myalloc2(n, d+1); cout << "Lie brackets:" << endl << endl; // calculate Lie brackets using Lie drivers lie_bracket(TAPE_F, TAPE_G, n, x0, d, bracket); for (int i = 0; i <= d; i++) { for (int j = 0; j < n; j++) cout << "adfg_" << i << "_" << j << " =\t" << bracket[j][i] << endl; cout << endl; } myfree2(bracket); myfree(x0); cout << "Press RETURN to continue" << endl; cin.get(); return 0; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/lie/Makefile.in0000644000175200017520000004517612565145701022453 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = GantryCrane$(EXEEXT) subdir = ADOL-C/examples/additional_examples/lie DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_GantryCrane_OBJECTS = GantryCrane.$(OBJEXT) GantryCrane_OBJECTS = $(am_GantryCrane_OBJECTS) GantryCrane_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(GantryCrane_SOURCES) DIST_SOURCES = $(GantryCrane_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig GantryCrane_SOURCES = GantryCrane.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lie/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lie/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list GantryCrane$(EXEEXT): $(GantryCrane_OBJECTS) $(GantryCrane_DEPENDENCIES) $(EXTRA_GantryCrane_DEPENDENCIES) @rm -f GantryCrane$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(GantryCrane_OBJECTS) $(GantryCrane_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GantryCrane.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/taylor/0000755000175200017520000000000013037353015021124 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/taylor/Makefile.in0000644000175200017520000005112212565145701023200 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = taylorexam$(EXEEXT) inversexam$(EXEEXT) \ @ADDEXA_TRUE@ accessexam$(EXEEXT) trigger$(EXEEXT) \ @ADDEXA_TRUE@ coordinates$(EXEEXT) subdir = ADOL-C/examples/additional_examples/taylor DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_accessexam_OBJECTS = accessexam.$(OBJEXT) accessexam_OBJECTS = $(am_accessexam_OBJECTS) accessexam_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_coordinates_OBJECTS = coordinates.$(OBJEXT) coordinates_OBJECTS = $(am_coordinates_OBJECTS) coordinates_LDADD = $(LDADD) am_inversexam_OBJECTS = inversexam.$(OBJEXT) inversexam_OBJECTS = $(am_inversexam_OBJECTS) inversexam_LDADD = $(LDADD) am_taylorexam_OBJECTS = taylorexam.$(OBJEXT) taylorexam_OBJECTS = $(am_taylorexam_OBJECTS) taylorexam_LDADD = $(LDADD) am_trigger_OBJECTS = trigger.$(OBJEXT) trigger_OBJECTS = $(am_trigger_OBJECTS) trigger_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(accessexam_SOURCES) $(coordinates_SOURCES) \ $(inversexam_SOURCES) $(taylorexam_SOURCES) $(trigger_SOURCES) DIST_SOURCES = $(accessexam_SOURCES) $(coordinates_SOURCES) \ $(inversexam_SOURCES) $(taylorexam_SOURCES) $(trigger_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig taylorexam_SOURCES = taylorexam.cpp inversexam_SOURCES = inversexam.cpp accessexam_SOURCES = accessexam.cpp trigger_SOURCES = trigger.cpp coordinates_SOURCES = coordinates.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/taylor/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/taylor/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list accessexam$(EXEEXT): $(accessexam_OBJECTS) $(accessexam_DEPENDENCIES) $(EXTRA_accessexam_DEPENDENCIES) @rm -f accessexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(accessexam_OBJECTS) $(accessexam_LDADD) $(LIBS) coordinates$(EXEEXT): $(coordinates_OBJECTS) $(coordinates_DEPENDENCIES) $(EXTRA_coordinates_DEPENDENCIES) @rm -f coordinates$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(coordinates_OBJECTS) $(coordinates_LDADD) $(LIBS) inversexam$(EXEEXT): $(inversexam_OBJECTS) $(inversexam_DEPENDENCIES) $(EXTRA_inversexam_DEPENDENCIES) @rm -f inversexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(inversexam_OBJECTS) $(inversexam_LDADD) $(LIBS) taylorexam$(EXEEXT): $(taylorexam_OBJECTS) $(taylorexam_DEPENDENCIES) $(EXTRA_taylorexam_DEPENDENCIES) @rm -f taylorexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(taylorexam_OBJECTS) $(taylorexam_LDADD) $(LIBS) trigger$(EXEEXT): $(trigger_OBJECTS) $(trigger_DEPENDENCIES) $(EXTRA_trigger_DEPENDENCIES) @rm -f trigger$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(trigger_OBJECTS) $(trigger_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accessexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coordinates.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inversexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taylorexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trigger.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/taylor/inversexam.cpp0000644000175200017520000001277311452356477024041 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: inversexam.cpp Revision: $Id: inversexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Test driver 'inverse_tensor_eval(..)' allows to compute higher order derivatives of inverse functions Copyright (c) Andrea Walther, Andreas Griewank This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,n,d,p,dim; /*--------------------------------------------------------------------------*/ cout << "INVERSEXAM (ADOL-C Example)\n\n"; /* inputs */ cout << " Number of independents = ?\n "; cin >> n; // number of dependents = number of independents !! cout << " Degree = ?\n "; cin >> d; cout << " Number of directions = ?\n "; cin >> p; /*--------------------------------------------------------------------------*/ int* multi = new int[d]; /* allocations and inits */ double* xp = new double[n]; double* yp = new double[n]; double** S = new double*[n]; double* test = new double[n]; double** tensoren; adouble* x = new adouble[n]; adouble* y = new adouble[n]; for (i=0; i>= yp[i] ; trace_off(); /*--------------------------------------------------------------------------*/ d = d-1; /* 1. inverse_tensor_eval */ dim = binomi(p+d,d); tensoren = myalloc2(n,dim); cout <<"TASK 1:\n"; cout <<" d = "< #include /****************************************************************************/ /* MAIN */ int main() { int i,j,n,d,p,dim; /*--------------------------------------------------------------------------*/ printf(" TRIGGER CIRCUIT EXAMPLE (ADOL-C Example)\n\n"); /* inputs */ printf(" # of indeps = 7, # of deps = 7 (fixed)\n"); n = 7; p = 3; d = 4; /*--------------------------------------------------------------------------*/ double* xp = new double[n]; /* allocations and inits */ double* Fhp = new double[n]; double** S = new double*[n]; double** tensors; int* multi = new int[d]; int* add = new int[5]; for(i=0;i>= Fhp[i]; trace_off(); /*--------------------------------------------------------------------------*/ printf("\n Fh(x,0) = \n ("); /* inverse_tensor_eval */ for(i=0;i #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,m,n,d,p,dim; /*--------------------------------------------------------------------------*/ cout << "TAYLOREXAM (ADOL-C Example)\n\n"; /* inputs */ cout << " Number of indenpendents = ?\n "; cin >> n; cout << " Number of dependents = (<=n) ?\n "; cin >> m; cout << " Degree = ?\n "; cin >> d; cout << " Number of directions = ?\n "; cin >> p; /*--------------------------------------------------------------------------*/ int* multi = new int[d]; /* allocations and inits */ double* xp = new double[n]; double* yp = new double[m]; double** S = new double*[n]; double* test = new double[m]; double** tensoren; adouble* x = new adouble[n]; adouble* y = new adouble[m]; for (i=0; i>= yp[i] ; trace_off(); /*--------------------------------------------------------------------------*/ d = d-1; /* 1. tensor_eval */ dim = binomi(p+d,d); cout <<"TASK 1:\n"; cout <<" d = "< #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,n,d,p,dim; double zp[4]; double gp[2]; double zd[2]; /*--------------------------------------------------------------------------*/ cout << "COORDINATES (ADOL-C Example)\n\n"; /* inputs */ cout << " Cartesian coordinates:\n"; cout << " z_1: (e.g. 4) \n"; cin >> zp[0]; cout << " z_2: (e.g. 3) \n"; cin >> zp[1]; cout << "\n Polar coordinates:\n"; cout << " z_3: (e.g. 5) \n"; cin >> zp[2]; cout << " z_4: (e.g. 0.64350110879) \n"; cin >> zp[3]; cout << "\n Highest derivative degree = 3\n"; /*--------------------------------------------------------------------------*/ /* allocations and inits */ n = 4; p = 2; d = 3; double** S = new double*[n]; double** tensor = new double*[n]; double**** tensorentry; for (i=0; i>= gp[0]; g[1] >>= gp[1]; z[0] >>= zd[0]; z[2] >>= zd[1]; trace_off(); /*--------------------------------------------------------------------------*/ dim = binomi(p+d,d); /* inverse_tensor_eval */ for(i=0;i Evaluation of higher order tensors taylorexam.cpp accessexam --> Access to higher order tensors accessexam.cpp inversexam --> Evaluation of derivatives of inverse functions inversexam.cpp trigger --> Evaluation of derivatives of inverse functions using a trigger circuit model as function trigger.cpp coordinates --> Evaluation of derivatives of inverse functions using transformation between Cartesian and polar coordinates coordinates.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/taylor/accessexam.cpp0000644000175200017520000001230211452356477023760 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: accessexam.cpp Revision: $Id: accessexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Test driver 'tensor_value(..)' and access of higher order tensors by void pointer strategy Copyright (c) Andrea Walther, Andreas Griewank This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,n,m,d,p,dim; /*--------------------------------------------------------------------------*/ cout << "ACCESSEXAM (ADOL-C Example)\n\n"; /* inputs */ cout << " demonstrates accees to higher order " << "partial derivatives (tensors)\n\n"; cout << " Number of independents ?\n "; cin >> n; cout << " Number of dependents (2 <= m <=n) ?\n "; cin >> m; d = 5; cout << " Degree = " << d <<"\n"; cout << " Number of directions ?\n "; cin >> p; /*--------------------------------------------------------------------------*/ int* multi = new int[d]; /* allocations and inits */ double* xp = new double[n]; double* yp = new double[m]; double** S = new double*[n]; double* test = new double[m]; double** tensorhelp; double****** tensor; for (i=0; i>= yp[i] ; trace_off(); /*--------------------------------------------------------------------------*/ dim = binomi(p+d,d); /* tensor_eval */ tensorhelp = myalloc2(n,dim); cout <<" d = "< example for the exploitation of a fixpoint iteration in the differentiation process fixpoint_exam.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/fixpoint_exam/Makefile.in0000644000175200017520000004531012565145701024542 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = fixpoint_exam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/fixpoint_exam DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_fixpoint_exam_OBJECTS = fixpoint_exam.$(OBJEXT) fixpoint_exam_OBJECTS = $(am_fixpoint_exam_OBJECTS) fixpoint_exam_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(fixpoint_exam_SOURCES) DIST_SOURCES = $(fixpoint_exam_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig fixpoint_exam_SOURCES = fixpoint_exam.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/fixpoint_exam/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/fixpoint_exam/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list fixpoint_exam$(EXEEXT): $(fixpoint_exam_OBJECTS) $(fixpoint_exam_DEPENDENCIES) $(EXTRA_fixpoint_exam_DEPENDENCIES) @rm -f fixpoint_exam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(fixpoint_exam_OBJECTS) $(fixpoint_exam_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixpoint_exam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/fixpoint_exam/Makefile.am0000644000175200017520000000171512565145675024544 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include LIBS = -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = fixpoint_exam endif fixpoint_exam_SOURCES = fixpoint_exam.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/fixpoint_exam/fixpoint_exam.cpp0000644000175200017520000000461711452356477026070 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fixpoint_exam.cpp Revision: $Id: fixpoint_exam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for differentiation of fixpoint iterations Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #define imax 100 #define imax_deriv 100 // fixpoint iteration // double version int fixpoint_iter(double *x, double *u, double *y, int dim_x, int dim_u); double norm(double *x, int dim_x); // adouble version int fixpoint_iter_act(adouble *x, adouble *u, adouble *y, int dim_x, int dim_u); adouble norm(adouble *x, int dim_x); int tag_full, tag_part, tag_fixpoint; int main() { adouble x[1]; adouble u[1]; adouble y[1]; adouble diff[1]; double eps=1.0e-6; double up[1]; double yp[1]; double grad[1]; int i; tag_full = 1; tag_part = 2; tag_fixpoint = 3; trace_on(tag_full); i = 0; u[0] <<= 0.5; y[0] = 1.57079632679; do { i++; x[0] = y[0]; fixpoint_iter_act(x,u,y,1,1); printf(" i = %3d y = %12.9f\n",i,y[0].value()); diff[0] = x[0]-y[0]; } while((norm(diff,1)>eps) && (i>= yp[0]; trace_off(1); up[0] = 0.5; gradient(tag_full,1,up,grad); printf("\n full taping:\n gradient = ( %f )\n",grad[0]); printf("\n taping with fixpoint facility:\n\n"); trace_on(tag_part); i = 0; u[0] <<= 0.5; x[0] = 1.57079632679; fp_iteration(tag_fixpoint,fixpoint_iter,fixpoint_iter_act,norm,norm,eps,eps,imax,imax_deriv,x,u,y,1,1); y[0] >>= yp[0]; trace_off(1); up[0] = 0.5; gradient(tag_part,1,up,grad); printf("\n=> gradient = ( %f )\n",grad[0]); return 0; } int fixpoint_iter(double *x, double *u, double *y, int dim_x, int dim_u) { y[0] = u[0]*(x[0]+cos(x[0])); return 0; } double norm(double *x, int dim_x) { return fabs(x[0]); } int fixpoint_iter_act(adouble *x, adouble *u, adouble *y, int dim_x, int dim_u) { y[0] = u[0]*(x[0]+cos(x[0])); return 0; } adouble norm(adouble *x, int dim_x) { return fabs(x[0]); } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/lighthouse/0000755000175200017520000000000013037353015021765 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/lighthouse/cubic-iter.cpp0000644000175200017520000000725312334664415024536 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cubic-iter-2.cpp Revision: $Id: cubic-iter.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: example for cubic lighthouse example of Griewank's Book using iterative solvers Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble g( adouble z, adouble t ) { adouble v1, v15, v2, v3, res; v1 = z - 2.0; v15 = v1*v1*v1; v15 += 0.4; v2 = tan(t); v15 -= z * v2; v3 = 3.0*v1*v1-v2; v3 = fabs(v3); res = z - v15/v3; return res; } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j, vc, ic; int tag = 1; double z, dz, z0, dz0, t, tmin, tmax, tdist; double x[2], gradg[2]; /*--------------------------------------------------------------------------*/ /* Preparation */ fprintf(stdout,"CUBIC LIGHTHOUSE Using ITERATION (ADOL-C Example)\n\n"); tmin = 0.1; tmax = 0.3; z0 = 2.1; dz0 = 0.0; fprintf(stdout,"How many values = ? \n"); scanf("%d",&vc); fprintf(stdout,"How many iterations = ? \n"); scanf("%d",&ic); /*--------------------------------------------------------------------------*/ /* 0. time (taping) */ t = 0.1; trace_on(tag); adouble az,at; az <<= z0; at <<= t; az = g(az,at); az >>= z; trace_off(); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ tdist = (tmax-tmin)/((double) (vc-1)); x[1] = tmin; for (i=0; i Cubic lighthouse example using Cardan's formula with two tapes. cubic.cpp cubic-2 --> Cubic lighthouse example using Cardan's formula with one tape and condassign(..). cubic-2.cpp cubic-iter --> Cubic lighthouse example: iterative computation of lightpoints including derivatives. cubic-iter.cpp cubic-iter-2 --> Cubic lighthouse example: iterative computation of one lightpoint including the derivative. cubic-iter-2.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/lighthouse/Makefile.in0000644000175200017520000005002112565145701024036 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = cubic$(EXEEXT) cubic-2$(EXEEXT) \ @ADDEXA_TRUE@ cubic-iter$(EXEEXT) cubic-iter-2$(EXEEXT) subdir = ADOL-C/examples/additional_examples/lighthouse DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_cubic_OBJECTS = cubic.$(OBJEXT) cubic_OBJECTS = $(am_cubic_OBJECTS) cubic_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_cubic_2_OBJECTS = cubic-2.$(OBJEXT) cubic_2_OBJECTS = $(am_cubic_2_OBJECTS) cubic_2_LDADD = $(LDADD) am_cubic_iter_OBJECTS = cubic-iter.$(OBJEXT) cubic_iter_OBJECTS = $(am_cubic_iter_OBJECTS) cubic_iter_LDADD = $(LDADD) am_cubic_iter_2_OBJECTS = cubic-iter-2.$(OBJEXT) cubic_iter_2_OBJECTS = $(am_cubic_iter_2_OBJECTS) cubic_iter_2_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(cubic_SOURCES) $(cubic_2_SOURCES) $(cubic_iter_SOURCES) \ $(cubic_iter_2_SOURCES) DIST_SOURCES = $(cubic_SOURCES) $(cubic_2_SOURCES) \ $(cubic_iter_SOURCES) $(cubic_iter_2_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig cubic_SOURCES = cubic.cpp cubic_2_SOURCES = cubic-2.cpp cubic_iter_SOURCES = cubic-iter.cpp cubic_iter_2_SOURCES = cubic-iter-2.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lighthouse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lighthouse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list cubic$(EXEEXT): $(cubic_OBJECTS) $(cubic_DEPENDENCIES) $(EXTRA_cubic_DEPENDENCIES) @rm -f cubic$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cubic_OBJECTS) $(cubic_LDADD) $(LIBS) cubic-2$(EXEEXT): $(cubic_2_OBJECTS) $(cubic_2_DEPENDENCIES) $(EXTRA_cubic_2_DEPENDENCIES) @rm -f cubic-2$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cubic_2_OBJECTS) $(cubic_2_LDADD) $(LIBS) cubic-iter$(EXEEXT): $(cubic_iter_OBJECTS) $(cubic_iter_DEPENDENCIES) $(EXTRA_cubic_iter_DEPENDENCIES) @rm -f cubic-iter$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cubic_iter_OBJECTS) $(cubic_iter_LDADD) $(LIBS) cubic-iter-2$(EXEEXT): $(cubic_iter_2_OBJECTS) $(cubic_iter_2_DEPENDENCIES) $(EXTRA_cubic_iter_2_DEPENDENCIES) @rm -f cubic-iter-2$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(cubic_iter_2_OBJECTS) $(cubic_iter_2_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cubic-2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cubic-iter-2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cubic-iter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cubic.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/lighthouse/cubic-2.cpp0000644000175200017520000000752312334664415023734 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cubic-2.cpp Revision: $Id: cubic-2.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: example for cubic lighthouse example of Griewank's Book using Cardan's formula with conditionals Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #define PI 3.1415926536 /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble activeCubicLighthouse( adouble t ) { adouble p, q, d, r, u, u1, u2, v, a, b, c, z; /*---------------------*/ p = tan(t); q = p - 0.2; p /= 3.0; d = q*q; d -= p*p*p; /* 1. branch ----------*/ r = sqrt(d); u = q + r; u1 = pow(fabs(u),1.0/3.0); u2 = -u1; condassign(u,u,u1,u2); v = q - r; u1 = pow(fabs(v),1.0/3.0); u2 = -u1; condassign(v,v,u1,u2); c = u + v; /* 2. branch ----------*/ p = fabs(p); p = sqrt(p); q /= p*p*p; a = acos(q); a /= 3.0; z = cos(a); b = a + PI/3.0; b = -cos(b); z = fmin(z,b); b = a - PI/3.0; b = -cos(b); z = fmin(z,b); z = 2.0*z*p; /*---------------------*/ condassign(z,d,c); z += 2.0; return z; } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, vc; int tag = 1; double z, t, tmin, tmax, tdist, dz; /*--------------------------------------------------------------------------*/ /* Preparation */ fprintf(stdout,"CUBIC LIGHTHOUSE Using CARDAN (ADOL-C Example)\n\n"); tmin = 0.15; tmax = 0.24; fprintf(stdout,"How many values = ? \n"); scanf("%d",&vc); /*--------------------------------------------------------------------------*/ t = 0.1; adouble az,at; trace_on(tag); at <<= t; az = activeCubicLighthouse(at); az >>= z; trace_off(); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ tdist = (tmax-tmin)/((double) (vc-1)); t = tmin; for (i=0; i #include /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble g( adouble z, adouble t ) { adouble v1, v15, v2, v3, res; v1 = z - 2.0; v15 = v1*v1*v1; v15 += 0.4; v2 = tan(t); v15 -= z * v2; v3 = 3.0*v1*v1-v2; v3 = fabs(v3); res = z - v15/v3; return res; } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int j, ic; int tag = 1; double z, dz, z0, dz0, t; double x[2], gradg[2]; /*--------------------------------------------------------------------------*/ /* Preparation */ fprintf(stdout,"CUBIC LIGHTHOUSE Using ITERATION 2 (ADOL-C Example)\n\n"); z0 = 2.1; dz0 = 0.0; fprintf(stdout,"t = ? \n"); scanf("%le",&t); fprintf(stdout,"How many iterations = ? \n"); scanf("%d",&ic); /*--------------------------------------------------------------------------*/ /* 0. time (taping) */ trace_on(tag); adouble az,at; az <<= z0; at <<= t; az = g(az,at); az >>= z; trace_off(); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ x[1] = t; x[0] = z0; dz = dz0; fprintf(stdout," %e %e\n",x[0],dz); for (j=0; j #include #define PI 3.1415926536 /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble activeCubicLighthouse1( adouble t ) { adouble p, q, d, r, u, u1,u2, v, c; /*---------------------*/ p = tan(t); q = p - 0.2; p /= 3.0; d = q*q; d -= p*p*p; /* 1. branch ----------*/ r = sqrt(d); u = q + r; u1 = pow(fabs(u),1.0/3.0); u2 = -u1; condassign(u,u,u1,u2); v = q - r; u1 = pow(fabs(v),1.0/3.0); u2 = -u1; condassign(v,v,u1,u2); c = u + v; /*---------------------*/ c += 2.0; return c; } /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble activeCubicLighthouse2( adouble t ) { adouble p, q, d, r, u, v, c, a, z, b; /*---------------------*/ p = tan(t); q = p - 0.2; p /= 3.0; d = q*q; d -= p*p*p; /* 2. branch ----------*/ p = fabs(p); p = sqrt(p); q /= p*p*p; a = acos(q); a /= 3.0; z = cos(a); b = a + PI/3.0; b = -cos(b); z = fmin(z,b); b = a - PI/3.0; b = -cos(b); z = fmin(z,b); z = 2.0*z*p; /*---------------------*/ z += 2.0; return z; } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, vc; int tag1 = 1, tag2 = 2; double z, z1, z2, t, tmin, tmax, tdist, dz; /*--------------------------------------------------------------------------*/ /* Preparation */ fprintf(stdout,"CUBIC LIGHTHOUSE Using CARDAN (ADOL-C Example)\n\n"); tmin = 0.15; tmax = 0.24; fprintf(stdout,"How many values = ? \n"); scanf("%d",&vc); /*--------------------------------------------------------------------------*/ t = 0.1; adouble az,at; trace_on(tag1); at <<= t; az = activeCubicLighthouse1(at); az >>= z; trace_off(); trace_on(tag2); at <<= t; az = activeCubicLighthouse2(at); az >>= z; trace_off(); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag1,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); tapestats(tag2,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ tdist = (tmax-tmin)/((double) (vc-1)); t = tmin; for (i=0; i #include using namespace std; __global__ void kernel(double* inx, double* outy, double* outderiv) { const int index = threadIdx.x ; const int index1 = threadIdx.y; const int index2 = blockIdx.x; const int dim = blockDim.x*blockDim.y; const int index3 = blockDim.x; // Declare dependent and independent variables as adoubles adtlc::adouble y[3]; adtlc::adouble x[3]; // Read out point for function evaluation for(int i=0;i<3;i++) x[i]=inx[index2*dim+index*3+i]; // Set direction for calculation of derivatives x[index1].setADValue(1); // Function evaluation y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]); y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]); y[2] = atan(x[1]/x[0]); for(int i=0; i<3; i++) outy[(index2*index3+index)*3+i]=y[i].getValue(); for(int i=0; i<3; i++) outderiv[(index2*dim+index*3+index1)*3+i]=y[i].getADValue(); } cudaError_t kernellaunch(double* inx, double* outy, double* outderiv, int n) { // Create 16 blocks int Blocks=16; // Two dimensional (M/Blocks) x 3 blocks dim3 threadsPerBlock(n/Blocks,3); // Call kernel function with 16 blocks with (M/Blocks) x 3 threads per block kernel <<< Blocks, threadsPerBlock >>>( inx, outy, outderiv); cudaError_t cudaErr = cudaGetLastError(); return cudaErr; } int main(){ int M=1024; double* deriv = new double[9*M]; double* y = new double[3*M]; double* x = new double[3*M]; // Initialize x_i for(int k=0; k < M; k++){ for (int i=0; i<3; ++i) x[k*3+i] =i + 1/(k+1);} // Allocate array for independent and dependent variables and Jacobian matrices on GPU double * devx; cudaMalloc((void**)&devx, 3*M*sizeof(double)); double * devy; cudaMalloc((void**)&devy, 3*M*sizeof(double)); double * devderiv; cudaMalloc((void**)&devderiv, 3*3*M*sizeof(double)); // Copy values of independent variables from host to GPU cudaMemcpy(devx, x, sizeof(double)*3*M, cudaMemcpyHostToDevice); // Call function to specify amount of blocks and threads to be used kernellaunch(devx, devy, devderiv,M); // Copy values of dependent variables and Jacobian matrices from GPU to host cudaMemcpy(y, devy, sizeof(double)*3*M, cudaMemcpyDeviceToHost); cudaMemcpy(deriv, devderiv, sizeof(double)*M*3*3, cudaMemcpyDeviceToHost); } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/cuda/Makefile.am0000644000175200017520000000113712106465576022600 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 408 2013-02-12 16:19:10Z kulshres $ ## ## Copyright (C) Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## EXTRA_DIST = liborgpu.cu traceless_cuda.cu ADOL-C-2.6.3/ADOL-C/examples/additional_examples/cuda/liborgpu.cu0000644000175200017520000001563412106465576022727 0ustar coincoin /*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: liborgpu.cu Revision: $Id: liborgpu.cu 408 2013-02-12 16:19:10Z kulshres $ Contents: example for differentiation of GPU parallel programs Copyright (c) Andrea Walther, Alina Koniaeva This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /* Program to compute deltas and vegas of swaption portfolio from forward and reverse mode pathwise sensitivities in parallel written by Andrea Walther in 2008-11 based on code written by written by Mike Giles in 2005-7 which is again based on code written by Zhao and Glasserman at Columbia University */ #include "adoublecuda.h" #include #include #include #include #include #include #include #include #include using namespace std; // LIBOR interval #define delta 0.25 // data for swaption portfolio #define Nopt 15 #define N 80 #define Nmat 40 //kernel code __global__ void portfolio_kernel(double* inx, double* outy, double* dery) { int i,n,m; double lambda[N]; for (i=0;i 0) y = y-100.0*swapval; } // apply discount // for (n=0; n>>(inx, outy, dery); cudaError_t cudaErr = cudaGetLastError(); return cudaErr; } /* -------------------------------------------------------- */ int main(){ cudaError_t cudaErr; int i, j, npath; double vtot,*v, *lambda, **z,**grad, *gradtot, **xp; npath=10; lambda = new double[N]; v = new double[npath]; gradtot = new double[N]; z = new double*[npath]; grad = new double*[npath]; xp = new double*[npath]; //array for values of the independent variables (on host) double* host = (double*) malloc((N+Nmat)*npath*sizeof(double)); //array for result of function evaluations (on host) double* hostres =(double*) malloc(npath*sizeof(double)); //array for result of gradient evaluations (on host) double* hostder = (double*)malloc((N+Nmat)*npath*sizeof(double)); //array for independent variables (on GPU) double *devx; //array for result of function evaluations (on GPU) double *devy; //array for result of gradient evaluations (on GPU) double *dery; for (i=0; i < npath; i++) { z[i] = new double[Nmat]; grad[i] = new double[N+Nmat]; xp[i] = new double[N+Nmat]; } for (i=0;i&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/examples/additional_examples/cuda DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = liborgpu.cu traceless_cuda.cu all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/cuda/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/cuda/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/lufact/0000755000175200017520000000000013037353015021070 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/lufact/Makefile.am0000644000175200017520000000217412565145675023150 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include LIBS = -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C EXTRA_DIST = LU.h MAINTAINERCLEANFILES = Makefile.in tape.tex *~ *.orig if ADDEXA noinst_PROGRAMS = LUsolve LUdet endif LUsolve_SOURCES = LUsolve.cpp LU.cpp LUdet_SOURCES = LUdet.cpp LU.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/lufact/LUsolve.cpp0000644000175200017520000001264012334664415023200 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: LUsolve.cpp Revision: $Id: LUsolve.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: example for * Computation of the determinant of a matrix by LU-decomposition of the system matrix without pivoting * application of tapedoc to observe taping of the new op_codes for the elementary operations y += x1 * x2; y -= x1 * x2; Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include "LU.h" /****************************************************************************/ /* MAIN PROGRAM */ int main() { /*------------------------------------------------------------------------*/ /* variables */ const int tag = 1; // tape tag const int size = 5; // system size const int indep = size*size+size; // # of indeps const int depen = size; // # of deps double A[size][size], a1[size], a2[size], // passive variables b[size], x[size]; adouble **AA, *AAp, *Abx; // active variables double *args = myalloc1(indep); // arguments double **jac = myalloc2(depen,indep); // the Jacobian double *laghessvec = myalloc1(indep); // Hessian-vector product int i,j; /*------------------------------------------------------------------------*/ /* Info */ fprintf(stdout,"LINEAR SYSTEM SOLVING by " "LU-DECOMPOSITION (ADOL-C Example)\n\n"); /*------------------------------------------------------------------------*/ /* Allocation und initialization of the system matrix */ AA = new adouble*[size]; AAp = new adouble[size*size]; for (i=0; i>= x[i]; trace_off(); fprintf(stdout," x[0] (original): %16.4E\n",x[0]); /*------------------------------------------------------------------------*/ /* Recomputation */ function(tag,depen,indep,args,x); fprintf(stdout," x[0] (from tape): %16.4E\n",x[0]); /*------------------------------------------------------------------------*/ /* Computation of Jacobian */ jacobian(tag,depen,indep,args,jac); fprintf(stdout," Jacobian:\n"); for (i=0; i Computation of the determinant of a matrix by LU-decomposition of the system matrix without pivoting LUdet.cpp LU.cpp LU.h LUsolve --> Solution of a linear equation system by LU-decomposition of the system matrix without pivoting LUsolve.cpp LU.cpp LU.h ADOL-C-2.6.3/ADOL-C/examples/additional_examples/lufact/LUdet.cpp0000644000175200017520000001236412334664415022627 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: LUdet.cpp Revision: $Id: LUdet.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: example for * Computation of the determinant of a matrix by LU-decomposition of the system matrix without pivoting * application of tapedoc to observe taping of the new op_codes for the elementary operations y += x1 * x2; y -= x1 * x2; Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include "LU.h" /****************************************************************************/ /* MAIN PROGRAM */ int main() { /*------------------------------------------------------------------------*/ /* variables */ const int tag = 1; // tape tag const int size = 5; // system size const int indep = size*size; // # of indeps const int depen = 1; // # of deps double A[size][size], a1[size], a2[size], det; // passive variables adouble **AA, *AAp, Adet; // active variables double *args = myalloc1(indep); // arguments double *grad = myalloc1(indep); // the gradient double **hess = myalloc2(indep,indep); // the hessian int i,j; /*------------------------------------------------------------------------*/ /* Info */ fprintf(stdout,"DETERMINANT by LU-DECOMPOSITION (ADOL-C Example)\n\n"); /*------------------------------------------------------------------------*/ /* Allcoation und initialization of the system matrix */ AA = new adouble*[size]; AAp = new adouble[size*size]; for (i=0; i>= det; trace_off(); fprintf(stdout," Determinant (original): %16.4E\n",det); /*------------------------------------------------------------------------*/ /* Recomputation of determinant */ function(tag,depen,indep,args,&det); fprintf(stdout," Determinant (from tape): %16.4E\n",det); /*------------------------------------------------------------------------*/ /* Computation of gradient */ gradient(tag,indep,args,grad); fprintf(stdout," Gradient:\n"); for (i=0; i=0; i--) { for (j=i+1; j&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = LUsolve$(EXEEXT) LUdet$(EXEEXT) subdir = ADOL-C/examples/additional_examples/lufact DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_LUdet_OBJECTS = LUdet.$(OBJEXT) LU.$(OBJEXT) LUdet_OBJECTS = $(am_LUdet_OBJECTS) LUdet_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_LUsolve_OBJECTS = LUsolve.$(OBJEXT) LU.$(OBJEXT) LUsolve_OBJECTS = $(am_LUsolve_OBJECTS) LUsolve_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(LUdet_SOURCES) $(LUsolve_SOURCES) DIST_SOURCES = $(LUdet_SOURCES) $(LUsolve_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C EXTRA_DIST = LU.h MAINTAINERCLEANFILES = Makefile.in tape.tex *~ *.orig LUsolve_SOURCES = LUsolve.cpp LU.cpp LUdet_SOURCES = LUdet.cpp LU.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lufact/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/lufact/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list LUdet$(EXEEXT): $(LUdet_OBJECTS) $(LUdet_DEPENDENCIES) $(EXTRA_LUdet_DEPENDENCIES) @rm -f LUdet$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(LUdet_OBJECTS) $(LUdet_LDADD) $(LIBS) LUsolve$(EXEEXT): $(LUsolve_OBJECTS) $(LUsolve_DEPENDENCIES) $(EXTRA_LUsolve_DEPENDENCIES) @rm -f LUsolve$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(LUsolve_OBJECTS) $(LUsolve_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LU.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LUdet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LUsolve.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/lufact/LU.h0000644000175200017520000000276011452356477021604 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: LU.h Revision: $Id: LU.h 171 2010-10-04 13:57:19Z kulshres $ Contents: example for 'active' LU-decomposition and according solver Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #ifndef _LU_H #define _LU_H /****************************************************************************/ /* INCLUDES */ #include // use of ALL ADOL-C interfaces /****************************************************************************/ /* Simple LU-factorization according to Crout's algorithm without pivoting */ void LUfact(int n, adouble **A); /****************************************************************************/ /* Solution of A*x=b by forward and backward substitution */ void LUsolve(int n, adouble **A, adouble *bx); /****************************************************************************/ /* END OF FILE */ #endif ADOL-C-2.6.3/ADOL-C/examples/additional_examples/scal/0000755000175200017520000000000013037353015020534 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/scal/README0000644000175200017520000000144111227416777021432 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY scalexam --> Validation of some operations by application to algebraic identities scalexam.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/scal/scalexam.cpp0000644000175200017520000001641212334664415023051 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: scalexam.cpp Revision: $Id: scalexam.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: This program can be used to verify the consistency and correctness of derivatives computed by ADOL-C in its forward and reverse mode. Ther use is required to select one integer input id. For positive n = id the monomial x^n is evaluated recursively at x=0.5 and all its nonzero Taylor coeffcients at this point are evaluated in the forward and reverse mode. A negative choice of id >= -9 leads to one of nine identities, whose derivatives should be trivial. These identities may be used to check the correctness of particular code segments in the ADOL-C sources uni5_.c and *o_rev.c. No timings are performed in this example program. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include using namespace std; /****************************************************************************/ /* POWER */ /* The monomial evaluation routine which has been obtained from the original version by retyping all `doubles' as `adoubles' */ adouble power( adouble x, int n ) { adouble z = 1; if (n > 0) { int nh =n/2; z = power(x,nh); z *= z; if (2*nh != n) z *= x; return z; } else if (n == 0) return z; else return 1.0/power(x,-n); } /****************************************************************************/ /* MAIN */ int main() { int n, i, id; int tag = 0; /*--------------------------------------------------------------------------*/ fprintf(stdout,"SCALEXAM (ADOL-C Example)\n\n"); fprintf(stdout,"problem number(-1 .. -10) / degree of monomial =? \n"); scanf("%d",&id); n = id >0 ? id : 3; double *xp,*yp; xp = new double[n+4]; yp = new double[n+4]; yp[0] = 0; xp[0] = 0.5; xp[1] = 1.0; /*--------------------------------------------------------------------------*/ int dum = 1; trace_on(tag,dum); // Begin taping all calculations with 'adoubles' adouble y,x; x <<= xp[0]; if (id >= 0) { fprintf(stdout,"Evaluate and differentiate recursive power routine \n"); y = power(x,n); } else { fprintf(stdout, "Check Operations and Functions by Algebraic Identities \n"); switch (id) { case -1 : fprintf(stdout, "Addition/Subtraction: y = x + x - (2.0/3)*x - x/3 \n"); y = x + x - (2.0/3)*x - x/3 ; break; case -2 : fprintf(stdout,"Multiplication/divison: y = x*x/x \n"); y = x*x/x; break; case -3 : fprintf(stdout,"Square root and power: y = sqrt(pow(x,2)) \n"); y = sqrt(pow(x,2)); break; case -4 : fprintf(stdout,"Exponential and log: y = exp(log(log(exp(x)))) \n"); y = exp(log(log(exp(x)))); break; case -5 : fprintf(stdout,"Trig identity: y = x + sin(2*x)-2*cos(x)*sin(x) \n"); y = x + sin(2.0*x)-2.0*cos(x)*sin(x); break; case -6 : fprintf(stdout,"Check out quadrature macro \n"); y = exp(myquad(myquad(exp(x)))); break; case -7 : fprintf(stdout,"Arcsin: y = sin(asin(acos(cos(x)))) \n"); y = sin(asin(acos(cos(x)))); break; case -8 : fprintf(stdout, "Hyperbolic tangent: y = x + tanh(x)-sinh(x)/cosh(x) \n"); y = x + tanh(x)-sinh(x)/cosh(x) ; break; case -9 : fprintf(stdout,"Absolute value: y = x + fabs(x) - fabs(-x) \n"); y = x + fabs(-x) - fabs(x); break; case -10 : fprintf(stdout,"atan2: y = atan2(sin(x-0.5+pi),cos(x-0.5+pi)) \n"); y = atan2(sin(x),cos(x)); break; default : fprintf(stdout," Please select problem number >= -10 \n"); exit(-1); } } y >>= yp[0]; trace_off(); // The (partial) execution trace is completed. /*--------------------------------------------------------------------------*/ if( id < 0 ) fprintf(stdout,"Round-off error: %14.6E\n",(y-x).value()); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ double *res; res = new double[n+2]; double u[1]; u[0] = 1; fprintf(stdout, "\nThe two Taylor coefficients in each row should agree\n\n"); double ***V = (double***)new double**[1]; V[0] = new double*[1]; V[0][0] = new double[n+2]; double **U = new double*[1]; U[0] = new double[1]; U[0][0] = 1; double** xpoint = &xp; double** ypoint = &yp; double** respoint = &res; // tape_doc(tag,depen,indep,*xpoint,*respoint); fprintf(stdout," \n \t forward \t reverse \n"); for (i=0; i < n+2; i++) { xp[i+2]=0; forward(tag,1,1,i,i+1,xpoint,respoint); fprintf(stdout,"%d\t%14.6E\t\t%14.6E\n",i,res[i],yp[i]); reverse(tag,1,1,i,u,ypoint); // call higher order scalar reverse reverse(tag,1,1,i,1,U,V); yp[i+1] = yp[i]/(i+1); if (V[0][0][i] != yp[i]) fprintf(stdout,"%d-th component in error %14.6E\n",i,V[0][0][i]-yp[i]); } cout << "\nWhen n<0 all rows except the first two should vanish \n"; return 1; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/scal/Makefile.in0000644000175200017520000004512212565145701022613 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = scalexam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/scal DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_scalexam_OBJECTS = scalexam.$(OBJEXT) scalexam_OBJECTS = $(am_scalexam_OBJECTS) scalexam_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(scalexam_SOURCES) DIST_SOURCES = $(scalexam_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig scalexam_SOURCES = scalexam.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/scal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/scal/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list scalexam$(EXEEXT): $(scalexam_OBJECTS) $(scalexam_DEPENDENCIES) $(EXTRA_scalexam_DEPENDENCIES) @rm -f scalexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(scalexam_OBJECTS) $(scalexam_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalexam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/scal/Makefile.am0000644000175200017520000000170212565145675022610 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include LIBS = -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = scalexam endif scalexam_SOURCES = scalexam.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/Makefile.in0000644000175200017520000004733412562262246021701 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/examples/additional_examples DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = clock hessmat lufact ode sparse tapesave timing detexam \ helm lighthouse scal speelpenning taylor pow checkpointing \ ext_diff_func fixpoint_exam openmp_exam cuda param lie DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ MAINTAINERCLEANFILES = Makefile.in *~ @ADDEXA_TRUE@SUBDIRS = clock hessmat lufact ode sparse tapesave timing \ @ADDEXA_TRUE@ detexam helm lighthouse scal speelpenning taylor pow \ @ADDEXA_TRUE@ checkpointing ext_diff_func fixpoint_exam openmp_exam \ @ADDEXA_TRUE@ cuda param lie @PAREXA_TRUE@SUBDIRS = clock hessmat lufact ode sparse tapesave timing \ @PAREXA_TRUE@ detexam helm lighthouse scal speelpenning taylor pow \ @PAREXA_TRUE@ checkpointing ext_diff_func fixpoint_exam openmp_exam \ @PAREXA_TRUE@ cuda param lie all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/helm/0000755000175200017520000000000013037353015020537 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/helm/helm-auto-exam.cpp0000644000175200017520000000720011452356477024103 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: helm-auto-exam.cpp Revision: $Id: helm-auto-exam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for Helmholtz energy example Computes gradient using AD driver reverse(..) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* CONSTANTS & VARIABLES */ const double TE = 0.01; /* originally 0.0 */ const double R = sqrt(2.0); /****************************************************************************/ /* HELMHOLTZ ENERGY */ adouble energy( int n, adouble x[], double bv[] ) { adouble he, xax, bx, tem; int i,j; xax = 0; bx = 0; he = 0; for (i=0; i>= result; trace_off(); fprintf(stdout, "%14.6E -- energy\n",result); /*--------------------------------------------------------------------------*/ reverse(1,1,n,0,1.0,grad); /* reverse computation of gradient */ /*--------------------------------------------------------------------------*/ for (l=0; l #include #include #include /****************************************************************************/ /* CONSTANTS & VARIABLES */ #define delta 0.000001 #define TE 0.01 #define R sqrt(2.0) /****************************************************************************/ /* HELMHOLTZ ENERGY */ double energy( int n, double x[], double bv[] ) { double he, xax, bx, tem; int i,j; xax = 0; bx = 0; he = 0; for (i=0; i Computation of the gradient of the Helmholtz energy function by divided differences helm-diff-exam.cpp helm-auto-exam --> Computation of the gradient of the Helmholtz energy function by automatic differentiation helm-auto-exam.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/helm/Makefile.in0000644000175200017520000004614512565145701022624 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = helm-auto$(EXEEXT) helm-diff$(EXEEXT) subdir = ADOL-C/examples/additional_examples/helm DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_helm_auto_OBJECTS = helm-auto-exam.$(OBJEXT) helm_auto_OBJECTS = $(am_helm_auto_OBJECTS) helm_auto_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_helm_diff_OBJECTS = helm-diff-exam.$(OBJEXT) helm_diff_OBJECTS = $(am_helm_diff_OBJECTS) helm_diff_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(helm_auto_SOURCES) $(helm_diff_SOURCES) DIST_SOURCES = $(helm_auto_SOURCES) $(helm_diff_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig helm_auto_SOURCES = helm-auto-exam.cpp helm_diff_SOURCES = helm-diff-exam.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/helm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/helm/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list helm-auto$(EXEEXT): $(helm_auto_OBJECTS) $(helm_auto_DEPENDENCIES) $(EXTRA_helm_auto_DEPENDENCIES) @rm -f helm-auto$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(helm_auto_OBJECTS) $(helm_auto_LDADD) $(LIBS) helm-diff$(EXEEXT): $(helm_diff_OBJECTS) $(helm_diff_DEPENDENCIES) $(EXTRA_helm_diff_DEPENDENCIES) @rm -f helm-diff$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(helm_diff_OBJECTS) $(helm_diff_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helm-auto-exam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helm-diff-exam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/checkpointing/0000755000175200017520000000000013037353015022437 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/checkpointing/Makefile.am0000644000175200017520000000170412565145675024515 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include LIBS = -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = checkpointing endif checkpointing_SOURCES = checkpointing.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/checkpointing/README0000644000175200017520000000127611227416777023343 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 267 2008-12-15 13:19:25Z awalther $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY checkpointing --> Integration of ode with automated checkpointing of time step loop checkpointing.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/checkpointing/Makefile.in0000644000175200017520000004531012565145701024515 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = checkpointing$(EXEEXT) subdir = ADOL-C/examples/additional_examples/checkpointing DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_checkpointing_OBJECTS = checkpointing.$(OBJEXT) checkpointing_OBJECTS = $(am_checkpointing_OBJECTS) checkpointing_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(checkpointing_SOURCES) DIST_SOURCES = $(checkpointing_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig checkpointing_SOURCES = checkpointing.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/checkpointing/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/checkpointing/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list checkpointing$(EXEEXT): $(checkpointing_OBJECTS) $(checkpointing_DEPENDENCIES) $(EXTRA_checkpointing_DEPENDENCIES) @rm -f checkpointing$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(checkpointing_OBJECTS) $(checkpointing_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkpointing.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/checkpointing/checkpointing.cpp0000644000175200017520000000567011452356477026016 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: checkpointing.cpp Revision: $Id: checkpointing.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for checkpointing Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #define h 0.01 #define steps 100 // time step function // double version int euler_step(int n, double *y); // adouble version int euler_step_act(int n, adouble *y); int tag_full, tag_part, tag_check; int main() { // time interval double t0, tf; // state, double and adouble version adouble y[2]; int n; // control, double and adouble version adouble con[2]; double conp[2]; // target value; double f; //variables for derivative caluclation double grad[2]; int i; // tape identifiers tag_full = 1; tag_part = 2; tag_check = 3; // two input and output variables for checkpointing function n = 2; // time interval t0 = 0.0; tf = 1.0; //control conp[0] = 1.0; conp[1] = 1.0; // basis variant: full taping of time step loop trace_on(tag_full); con[0] <<= conp[0]; con[1] <<= conp[1]; y[0] = con[0]; y[1] = con[1]; for(i=0;i>= f; trace_off(1); gradient(tag_full,2,conp,grad); printf(" full taping:\n gradient=( %f, %f)\n\n",grad[0],grad[1]); // Now using checkpointing facilities // define checkpointing procedure // generate checkpointing context => define active variante of the time step CP_Context cpc(euler_step_act); // double variante of the time step function cpc.setDoubleFct(euler_step); // number of time steps to perform cpc.setNumberOfSteps(steps); // number of checkpoint cpc.setNumberOfCheckpoints(5); // dimension of input/output cpc.setDimensionXY(n); // input vector cpc.setInput(y); // output vector cpc.setOutput(y); // tape number for checkpointing cpc.setTapeNumber(tag_check); // always retape or not ? cpc.setAlwaysRetaping(false); trace_on(tag_part); con[0] <<= conp[0]; con[1] <<= conp[1]; y[0] = con[0]; y[1] = con[1]; cpc.checkpointing(); y[0] + y[1] >>= f; trace_off(1); gradient(tag_part,2,conp,grad); printf(" taping with checkpointing facility:\n gradient=( %f, %f)\n\n",grad[0],grad[1]); return 0; } int euler_step(int n, double *y) { // Euler step, double version y[0] = y[0]+h*y[0]; y[1] = y[1]+h*2*y[1]; return 1; } int euler_step_act(int n, adouble *y) { // Euler step, adouble version y[0] = y[0]+h*y[0]; y[1] = y[1]+h*2*y[1]; return 1; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/detexam/0000755000175200017520000000000013037353015021241 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/detexam/Makefile.in0000644000175200017520000004616112565145701023324 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = detexam$(EXEEXT) detexam-old$(EXEEXT) subdir = ADOL-C/examples/additional_examples/detexam DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_detexam_OBJECTS = detexam.$(OBJEXT) detexam_OBJECTS = $(am_detexam_OBJECTS) detexam_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_detexam_old_OBJECTS = detexam-old.$(OBJEXT) detexam_old_OBJECTS = $(am_detexam_old_OBJECTS) detexam_old_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(detexam_SOURCES) $(detexam_old_SOURCES) DIST_SOURCES = $(detexam_SOURCES) $(detexam_old_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(builddir)/../clock/libclock.la -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig detexam_SOURCES = detexam.cpp detexam_old_SOURCES = detexam-old.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/detexam/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/detexam/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list detexam$(EXEEXT): $(detexam_OBJECTS) $(detexam_DEPENDENCIES) $(EXTRA_detexam_DEPENDENCIES) @rm -f detexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(detexam_OBJECTS) $(detexam_LDADD) $(LIBS) detexam-old$(EXEEXT): $(detexam_old_OBJECTS) $(detexam_old_DEPENDENCIES) $(EXTRA_detexam_old_DEPENDENCIES) @rm -f detexam-old$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(detexam_old_OBJECTS) $(detexam_old_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detexam-old.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detexam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/detexam/detexam-old.cpp0000644000175200017520000001557612334664415024176 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: detexam-old.cpp Revision: $Id: detexam-old.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: computation of determinants Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include "../clock/myclock.h" /****************************************************************************/ /* DOUBLE ROUTINE */ int n,it; double** PA; double pdet( int k, int m ) { if (m == 0) return 1.0; else { double* pt = PA[k-1]; double t = 0; int p = 1; int s; if (k%2) s = 1; else s = -1; for (int i=0; i= p) { t += *pt*s*pdet(k-1, m-p); s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble** A; adouble det( int k, int m ) { if (m == 0) return 1.0; else { adouble* pt = A[k-1]; adouble t = 0; int p = 1; int s; if (k%2) s = 1; else s = -1; for (int i=0; i= p) { t += *pt*s*det(k-1, m-p); s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j; int tag = 1; /*--------------------------------------------------------------------------*/ /* Input */ fprintf(stdout,"COMPUTATION OF DETERMINANTS (old type) (ADOL-C Example)\n\n"); fprintf(stdout,"order of matrix = ? \n"); scanf("%d",&n); A = new adouble*[n]; PA = new double*[n]; int n2 = n*n; double* a = new double[n2]; double diag = 0; int m = 1; /*--------------------------------------------------------------------------*/ /* Preparation */ double* pa = a; for (i=0; i>= detout; trace_off(); double t01 = myclock(); fprintf(stdout,"\n %f =? %f should be the same \n",detout,diag); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ int itu = 8-n; itu = itu*itu*itu*itu; itu = itu > 0 ? itu : 1; double raus; /*--------------------------------------------------------------------------*/ double t10 = myclock(); /* 1. time (original) */ for (it = 0; it < itu; it++) raus = pdet(n,m-1); double t11 = myclock(); double rtu = itu/(t11-t10); double* B = new double[n2]; double* detaut = new double[1]; /*--------------------------------------------------------------------------*/ double t40 = myclock(); /* 4. time (forward no keep) */ for (it = 0; it < itu; it++) forward(tag,1,n2,0,0,a,detaut); double t41 = myclock(); /*--------------------------------------------------------------------------*/ double t20 = myclock(); /* 2. time (forward+keep) */ for (it = 0; it < itu; it++) forward(tag,1,n2,0,1,a,detaut); double t21 = myclock(); double u[1]; u[0] = 1.0; /*--------------------------------------------------------------------------*/ double t30 = myclock(); /* 3. time (reverse) */ for (it = 0; it < itu; it++) reverse(tag,1,n2,0,u,B); double t31 = myclock(); /*--------------------------------------------------------------------------*/ /* output of results */ // optional generation of tape_doc.tex // tape_doc(tag,1,n2,a,detaut); fprintf(stdout,"\n first base? : \n"); for (i=0; i #include "../clock/myclock.h" /****************************************************************************/ /* DOUBLE ROUTINE */ int n,it; double** PA; double pdet( int k, int m ) { if (m == 0) return 1.0 ; else { double* pt = PA[k-1]; double t = 0; int p = 1; int s; if (k%2) s = 1; else s = -1; for (int i=0; i= p) { if (m == p) { if (s>0) t += *pt; else t -= *pt; } else { if (s>0) t += *pt*pdet(k-1, m-p); else t -= *pt*pdet(k-1, m-p); } s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble** A; adouble zero = 0; adouble det( int k, int m ) { if (m == 0) return 1.0; else { adouble* pt = A[k-1]; adouble t = zero; int p = 1; int s; if (k%2) s = 1; else s = -1; for (int i=0; i= p) { if (m == p) { if (s>0) t += *pt; else t -= *pt; } else { if (s>0) t += *pt*det(k-1, m-p); else t -= *pt*det(k-1, m-p); } s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j; int tag = 1; fprintf(stdout,"COMPUTATION OF DETERMINANTS Type 1 (ADOL-C Example)\n\n"); fprintf(stdout,"order of matrix = ? \n"); scanf("%d",&n); A = new adouble*[n]; PA = new double*[n]; int n2 = n*n; double* a = new double[n2]; /*--------------------------------------------------------------------------*/ /* Preparation */ double diag = 0; int m = 1; double* pa = a; for (i=0; i>= detout; trace_off(); double t01 = myclock(); fprintf(stdout,"\n %f =? %f should be the same \n",detout,diag); /*--------------------------------------------------------------------------*/ size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ int itu = 8-n; itu = itu*itu*itu*itu; itu = itu > 0 ? itu : 1; double raus; /*--------------------------------------------------------------------------*/ double t10 = myclock(); /* 1. time (original) */ for (it = 0; it < itu; it++) raus = pdet(n,m-1); double t11 = myclock(); double rtu = itu/(t11-t10); double* B = new double[n2]; double* detaut = new double[1]; /*--------------------------------------------------------------------------*/ double t40 = myclock(); /* 4. time (forward no keep) */ for (it = 0; it < itu; it++) forward(tag,1,n2,0,a,detaut); double t41 = myclock(); /*--------------------------------------------------------------------------*/ double t20 = myclock(); /* 2. time (forward+keep) */ for(it = 0; it < itu; it++) forward(tag,1,n2,1,a,detaut); double t21 = myclock(); // fprintf(stdout,"\n %f =? %f should be the same \n",detout,*detaut); double u[1]; u[0] = 1.0; /*--------------------------------------------------------------------------*/ double t30 = myclock(); /* 3. time (reverse) */ for (it = 0; it < itu; it++) reverse(tag,1,n2,0,u,B); double t31 = myclock(); /*--------------------------------------------------------------------------*/ /* output of results */ // optional generation of tape_doc.tex // tape_doc(tag,1,n2,a,detaut); fprintf(stdout,"\n first base? : \n"); for (i=0; i Computation of determinants (signs set by evaluation of passive "if"-statements) detexam.cpp detexam-old --> Old computation of determinants (signs set by multiplication with +/-1) detexam-old.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/speelpenning/0000755000175200017520000000000013037353015022301 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/speelpenning/speelpenning.cpp0000644000175200017520000001675012334664415025515 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: speelpenning.cpp Revision: $Id: speelpenning.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: example for computation of sparse hessians Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include "../clock/myclock.h" /****************************************************************************/ /* MACROS */ #define abs(x) ((x >= 0) ? (x) : -(x)) #define maxabs(x,y) (((x)>abs(y)) ? (x) : abs(y)) #define TAG 1 /****************************************************************************/ /* MAIN PROGRAM */ int main() { int n,i,it; size_t tape_stats[STAT_SIZE]; /*--------------------------------------------------------------------------*/ /* Input */ fprintf(stdout,"SPEELPENNINGS PRODUCT Type 1 (ADOL-C Example)\n\n"); fprintf(stdout,"number of independent variables = ? \n"); scanf("%d",&n); int itu; fprintf(stdout,"number of evaluations = ? \n"); scanf("%d",&itu); /*--------------------------------------------------------------------------*/ double yp=0.0; /* 0. time (undifferentiated double code) */ double *xp = new double[n]; /* Init */ for (i=0;i>= yout; delete [] x; trace_off(); double t11 = myclock(); fprintf(stdout,"%E =? %E function values should be the same \n",yout,yp); /*--------------------------------------------------------------------------*/ tapestats(TAG,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); /*--------------------------------------------------------------------------*/ double **r = new double*[1]; r[0] = new double[1]; r[0][0] = yp; double err; double *z = new double[n]; double *g = new double[n]; double* h = new double[n]; double *ind = new double[n]; /*--------------------------------------------------------------------------*/ double t60 = myclock(); /* 6. time (forward no keep) */ for (it=0; it zero timing due to small problem dimension \n"); return 1; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/speelpenning/Makefile.am0000644000175200017520000000175312565145675024363 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include LIBS = $(builddir)/../clock/libclock.la -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = speelpenning endif speelpenning_SOURCES = speelpenning.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/speelpenning/README0000644000175200017520000000134111227416777023176 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY speelpenning --> Speelpennings product speelpenning.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/speelpenning/Makefile.in0000644000175200017520000004532312565145701024363 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = speelpenning$(EXEEXT) subdir = ADOL-C/examples/additional_examples/speelpenning DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_speelpenning_OBJECTS = speelpenning.$(OBJEXT) speelpenning_OBJECTS = $(am_speelpenning_OBJECTS) speelpenning_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(speelpenning_SOURCES) DIST_SOURCES = $(speelpenning_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(builddir)/../clock/libclock.la -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig speelpenning_SOURCES = speelpenning.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/speelpenning/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/speelpenning/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list speelpenning$(EXEEXT): $(speelpenning_OBJECTS) $(speelpenning_DEPENDENCIES) $(EXTRA_speelpenning_DEPENDENCIES) @rm -f speelpenning$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(speelpenning_OBJECTS) $(speelpenning_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speelpenning.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/0000755000175200017520000000000013037353015021101 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/Makefile.in0000644000175200017520000006652312565145701023170 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = detexam$(EXEEXT) speelpenning$(EXEEXT) \ @ADDEXA_TRUE@ griewankexam$(EXEEXT) michalewitzexam$(EXEEXT) \ @ADDEXA_TRUE@ rosenbrockexam$(EXEEXT) powexam$(EXEEXT) \ @ADDEXA_TRUE@ helmholtzexam$(EXEEXT) shuttlexam$(EXEEXT) \ @ADDEXA_TRUE@ gearexam$(EXEEXT) pargearexam$(EXEEXT) \ @ADDEXA_TRUE@ simplevec$(EXEEXT) eutrophexam$(EXEEXT) \ @ADDEXA_TRUE@ robertsonexam$(EXEEXT) ficexam$(EXEEXT) \ @ADDEXA_TRUE@ experimental$(EXEEXT) subdir = ADOL-C/examples/additional_examples/timing DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_detexam_OBJECTS = sfunc_determinant.$(OBJEXT) sgenmain.$(OBJEXT) detexam_OBJECTS = $(am_detexam_OBJECTS) detexam_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_eutrophexam_OBJECTS = vgenmain.$(OBJEXT) eutrophexam_OBJECTS = $(am_eutrophexam_OBJECTS) eutrophexam_DEPENDENCIES = $(builddir)/../ode/libeutroph.la am_experimental_OBJECTS = sfunc_experimental.$(OBJEXT) \ sgenmain.$(OBJEXT) experimental_OBJECTS = $(am_experimental_OBJECTS) experimental_LDADD = $(LDADD) am_ficexam_OBJECTS = vgenmain.$(OBJEXT) ficexam_OBJECTS = $(am_ficexam_OBJECTS) ficexam_DEPENDENCIES = $(builddir)/../ode/libfic.la am_gearexam_OBJECTS = vfunc_gear.$(OBJEXT) vgenmain.$(OBJEXT) gearexam_OBJECTS = $(am_gearexam_OBJECTS) gearexam_LDADD = $(LDADD) am_griewankexam_OBJECTS = sfunc_griewank.$(OBJEXT) sgenmain.$(OBJEXT) griewankexam_OBJECTS = $(am_griewankexam_OBJECTS) griewankexam_LDADD = $(LDADD) am_helmholtzexam_OBJECTS = sfunc_helmholtz.$(OBJEXT) \ sgenmain.$(OBJEXT) helmholtzexam_OBJECTS = $(am_helmholtzexam_OBJECTS) helmholtzexam_LDADD = $(LDADD) am_michalewitzexam_OBJECTS = sfunc_michalewitz.$(OBJEXT) \ sgenmain.$(OBJEXT) michalewitzexam_OBJECTS = $(am_michalewitzexam_OBJECTS) michalewitzexam_LDADD = $(LDADD) am_pargearexam_OBJECTS = vfunc_pargear.$(OBJEXT) rotations.$(OBJEXT) \ vgenmain.$(OBJEXT) pargearexam_OBJECTS = $(am_pargearexam_OBJECTS) pargearexam_LDADD = $(LDADD) am_powexam_OBJECTS = sfunc_power.$(OBJEXT) sgenmain.$(OBJEXT) powexam_OBJECTS = $(am_powexam_OBJECTS) powexam_LDADD = $(LDADD) am_robertsonexam_OBJECTS = vgenmain.$(OBJEXT) robertsonexam_OBJECTS = $(am_robertsonexam_OBJECTS) robertsonexam_DEPENDENCIES = $(builddir)/../ode/librobertson.la am_rosenbrockexam_OBJECTS = sfunc_rosenbrock.$(OBJEXT) \ sgenmain.$(OBJEXT) rosenbrockexam_OBJECTS = $(am_rosenbrockexam_OBJECTS) rosenbrockexam_LDADD = $(LDADD) am_shuttlexam_OBJECTS = vfunc_shuttle.$(OBJEXT) vgenmain.$(OBJEXT) shuttlexam_OBJECTS = $(am_shuttlexam_OBJECTS) shuttlexam_LDADD = $(LDADD) am_simplevec_OBJECTS = vfunc_simplevec.$(OBJEXT) vgenmain.$(OBJEXT) simplevec_OBJECTS = $(am_simplevec_OBJECTS) simplevec_LDADD = $(LDADD) am_speelpenning_OBJECTS = sfunc_speelpenning.$(OBJEXT) \ sgenmain.$(OBJEXT) speelpenning_OBJECTS = $(am_speelpenning_OBJECTS) speelpenning_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(detexam_SOURCES) $(eutrophexam_SOURCES) \ $(experimental_SOURCES) $(ficexam_SOURCES) $(gearexam_SOURCES) \ $(griewankexam_SOURCES) $(helmholtzexam_SOURCES) \ $(michalewitzexam_SOURCES) $(pargearexam_SOURCES) \ $(powexam_SOURCES) $(robertsonexam_SOURCES) \ $(rosenbrockexam_SOURCES) $(shuttlexam_SOURCES) \ $(simplevec_SOURCES) $(speelpenning_SOURCES) DIST_SOURCES = $(detexam_SOURCES) $(eutrophexam_SOURCES) \ $(experimental_SOURCES) $(ficexam_SOURCES) $(gearexam_SOURCES) \ $(griewankexam_SOURCES) $(helmholtzexam_SOURCES) \ $(michalewitzexam_SOURCES) $(pargearexam_SOURCES) \ $(powexam_SOURCES) $(robertsonexam_SOURCES) \ $(rosenbrockexam_SOURCES) $(shuttlexam_SOURCES) \ $(simplevec_SOURCES) $(speelpenning_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(builddir)/../clock/libclock.la -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C CTRLFILES = detexam.ctrl \ eutrophexam.ctrl \ experimental.ctrl \ ficexam.ctrl \ gearexam.ctrl \ griewankexam.ctrl \ helmholtzexam.ctrl \ michalewitzexam.ctrl \ pargearexam.ctrl \ powexam.ctrl \ robertsonexam.ctrl \ rosenbrockexam.ctrl \ shuttlexam.ctrl \ simplevec.ctrl \ speelpenning.ctrl EXTRA_DIST = rotations.h $(CTRLFILES) MAINTAINERCLEANFILES = Makefile.in in_tape.1 op_tape.1 vs_tape1 *~ *.orig detexam_SOURCES = sfunc_determinant.cpp sgenmain.cpp speelpenning_SOURCES = sfunc_speelpenning.cpp sgenmain.cpp griewankexam_SOURCES = sfunc_griewank.cpp sgenmain.cpp michalewitzexam_SOURCES = sfunc_michalewitz.cpp sgenmain.cpp rosenbrockexam_SOURCES = sfunc_rosenbrock.cpp sgenmain.cpp powexam_SOURCES = sfunc_power.cpp sgenmain.cpp helmholtzexam_SOURCES = sfunc_helmholtz.cpp sgenmain.cpp shuttlexam_SOURCES = vfunc_shuttle.cpp vgenmain.cpp gearexam_SOURCES = vfunc_gear.cpp vgenmain.cpp pargearexam_SOURCES = vfunc_pargear.cpp rotations.cpp vgenmain.cpp simplevec_SOURCES = vfunc_simplevec.cpp vgenmain.cpp eutrophexam_SOURCES = vgenmain.cpp eutrophexam_LDADD = $(builddir)/../ode/libeutroph.la robertsonexam_SOURCES = vgenmain.cpp robertsonexam_LDADD = $(builddir)/../ode/librobertson.la ficexam_SOURCES = vgenmain.cpp ficexam_LDADD = $(builddir)/../ode/libfic.la experimental_SOURCES = sfunc_experimental.cpp sgenmain.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/timing/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/timing/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list detexam$(EXEEXT): $(detexam_OBJECTS) $(detexam_DEPENDENCIES) $(EXTRA_detexam_DEPENDENCIES) @rm -f detexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(detexam_OBJECTS) $(detexam_LDADD) $(LIBS) eutrophexam$(EXEEXT): $(eutrophexam_OBJECTS) $(eutrophexam_DEPENDENCIES) $(EXTRA_eutrophexam_DEPENDENCIES) @rm -f eutrophexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(eutrophexam_OBJECTS) $(eutrophexam_LDADD) $(LIBS) experimental$(EXEEXT): $(experimental_OBJECTS) $(experimental_DEPENDENCIES) $(EXTRA_experimental_DEPENDENCIES) @rm -f experimental$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(experimental_OBJECTS) $(experimental_LDADD) $(LIBS) ficexam$(EXEEXT): $(ficexam_OBJECTS) $(ficexam_DEPENDENCIES) $(EXTRA_ficexam_DEPENDENCIES) @rm -f ficexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(ficexam_OBJECTS) $(ficexam_LDADD) $(LIBS) gearexam$(EXEEXT): $(gearexam_OBJECTS) $(gearexam_DEPENDENCIES) $(EXTRA_gearexam_DEPENDENCIES) @rm -f gearexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(gearexam_OBJECTS) $(gearexam_LDADD) $(LIBS) griewankexam$(EXEEXT): $(griewankexam_OBJECTS) $(griewankexam_DEPENDENCIES) $(EXTRA_griewankexam_DEPENDENCIES) @rm -f griewankexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(griewankexam_OBJECTS) $(griewankexam_LDADD) $(LIBS) helmholtzexam$(EXEEXT): $(helmholtzexam_OBJECTS) $(helmholtzexam_DEPENDENCIES) $(EXTRA_helmholtzexam_DEPENDENCIES) @rm -f helmholtzexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(helmholtzexam_OBJECTS) $(helmholtzexam_LDADD) $(LIBS) michalewitzexam$(EXEEXT): $(michalewitzexam_OBJECTS) $(michalewitzexam_DEPENDENCIES) $(EXTRA_michalewitzexam_DEPENDENCIES) @rm -f michalewitzexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(michalewitzexam_OBJECTS) $(michalewitzexam_LDADD) $(LIBS) pargearexam$(EXEEXT): $(pargearexam_OBJECTS) $(pargearexam_DEPENDENCIES) $(EXTRA_pargearexam_DEPENDENCIES) @rm -f pargearexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(pargearexam_OBJECTS) $(pargearexam_LDADD) $(LIBS) powexam$(EXEEXT): $(powexam_OBJECTS) $(powexam_DEPENDENCIES) $(EXTRA_powexam_DEPENDENCIES) @rm -f powexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(powexam_OBJECTS) $(powexam_LDADD) $(LIBS) robertsonexam$(EXEEXT): $(robertsonexam_OBJECTS) $(robertsonexam_DEPENDENCIES) $(EXTRA_robertsonexam_DEPENDENCIES) @rm -f robertsonexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(robertsonexam_OBJECTS) $(robertsonexam_LDADD) $(LIBS) rosenbrockexam$(EXEEXT): $(rosenbrockexam_OBJECTS) $(rosenbrockexam_DEPENDENCIES) $(EXTRA_rosenbrockexam_DEPENDENCIES) @rm -f rosenbrockexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(rosenbrockexam_OBJECTS) $(rosenbrockexam_LDADD) $(LIBS) shuttlexam$(EXEEXT): $(shuttlexam_OBJECTS) $(shuttlexam_DEPENDENCIES) $(EXTRA_shuttlexam_DEPENDENCIES) @rm -f shuttlexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(shuttlexam_OBJECTS) $(shuttlexam_LDADD) $(LIBS) simplevec$(EXEEXT): $(simplevec_OBJECTS) $(simplevec_DEPENDENCIES) $(EXTRA_simplevec_DEPENDENCIES) @rm -f simplevec$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(simplevec_OBJECTS) $(simplevec_LDADD) $(LIBS) speelpenning$(EXEEXT): $(speelpenning_OBJECTS) $(speelpenning_DEPENDENCIES) $(EXTRA_speelpenning_DEPENDENCIES) @rm -f speelpenning$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(speelpenning_OBJECTS) $(speelpenning_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotations.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_determinant.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_experimental.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_griewank.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_helmholtz.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_michalewitz.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_power.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_rosenbrock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfunc_speelpenning.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sgenmain.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_gear.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_pargear.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_shuttle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_simplevec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vgenmain.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/sgenmain.cpp0000644000175200017520000012434412334664415023426 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sgenmain.cpp Revision: $Id: sgenmain.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: Scalar Generic Main File: for use with function modules containing several scalar examples (e.g. the determinant example in sfunc_determinant.cpp) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SGENMAIN_C_ /****************************************************************************/ /* INCLUDES */ #include #include "../clock/myclock.h" #include #include /****************************************************************************/ /* MACROS */ #define TIMEFORMAT " %12.6E units, %12.6E seconds\n" /****************************************************************************/ /* EXTERNAL STUFF FROM FUNCTION MODULES*/ /*--------------------------------------------------------------------------*/ /* Control file name */ const extern char* controlFileName; /*--------------------------------------------------------------------------*/ /* Dimensions */ extern int indepDim; /*--------------------------------------------------------------------------*/ /* Init Problem Parameters */ extern void initProblemParameters( void ); /*--------------------------------------------------------------------------*/ /* Initialize indeps */ extern void initIndependents( double* indeps ); /*--------------------------------------------------------------------------*/ /* Original scalar function */ extern double originalScalarFunction( double* indeps ); /*--------------------------------------------------------------------------*/ /* Taping scalar function */ extern double tapingScalarFunction( int tag, double* indeps ); /****************************************************************************/ /* CONTROL STUFF */ enum controlParameter { cpDimension, cpAverageCount, cpDegree, cpVecCountFW, cpVecCountRV, cpVecCountTR, cpZosFW, cpFosFW, cpHosFW, cpFovFW, cpHovFW, cpFosRV, cpHosRV, cpFovRV, cpHovRV, cpFunction, cpJacobian, cpVecJac, cpJacVec, cpHessian, cpHessVec, cpLagHessVec, cpTensor, cpInvTensor, cpCount }; /****************************************************************************/ /* PROVIDE RANDOM INITs */ //unsigned short int dx[3]; /* variable needed by erand48(.) */ void initRand ( void ) /* a function to initialize dx using actual time */ { struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j, k; int tag = 1; /* tape tag */ int taskCount = 0; int pFW, pRV, pTR, degree, keep; /* forward/reverse parameters */ int evalCount; /* # of evaluations */ /****************************************************************************/ /* READ CONTROL PARAMETERS FROM FILE */ int controlParameters[cpCount]; FILE* controlFile; /*------------------------------------------------------------------------*/ /* open file to read */ if ((controlFile = fopen(controlFileName,"r")) == NULL) { fprintf(stdout,"ERROR: Could not open control file %s\n", controlFileName); exit(-1); } /*------------------------------------------------------------------------*/ /* read all values */ for (i=0; i always */ fprintf(stdout,"\nTASK %d: Original function evaluation\n", taskCount++); t00 = myclock(); for (i=0; i always */ fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: Taping the function\n", taskCount++); t00 = myclock(); /* NOTE: taping will be performed ONCE only */ depTape = tapingScalarFunction(tag,indeps); t01 = myclock(); size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); fprintf(stdout," "); fprintf(stdout,TIMEFORMAT,(t01-t00)*timeUnit*evalCount, (t01-t00)); /****************************************************************************/ /* 2. ZOS_FORWARD */ if (controlParameters[cpZosFW]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forward(tag, m=1, n=%d, keep, X[n], Y[m])\n", taskCount++,indepDim); fprintf(stdout," ---> zos_forward\n"); /*----------------------------------------------------------------------*/ /* NO KEEP */ t00 = myclock(); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); fprintf(stdout," Should be the same values:\n"); fprintf(stdout," (original) %12.8E =? %12.8E (forward from tape)\n", depOrig,depTape); } } /****************************************************************************/ /* 3. FOS_FORWARD */ if (controlParameters[cpFosFW]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forward(tag, m=1, n=%d, d=1, keep, X[n][d+1], Y[d+1])\n", taskCount++,indepDim); fprintf(stdout," ---> fos_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); fprintf(stdout," Should be the same values:\n"); fprintf(stdout," (original) %12.8E =? %12.8E (forward from tape)\n", depOrig,YP[0]); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hos_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); fprintf(stdout," Should be the same values:\n"); fprintf(stdout," (original) %12.8E =? %12.8E (forward from tape)\n", depOrig,YP[0]); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fov_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hov_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPPP = new double**[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fos_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZP = new double[indepDim]; u = (double)rand(); /*----------------------------------------------------------------------*/ /* Forward with keep*/ forward(tag,1,indepDim,1,indeps,&depTape); /*----------------------------------------------------------------------*/ /* Reverse */ t00 = myclock(); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] ZP; } /****************************************************************************/ /* 8. HOS_REVERSE */ if (controlParameters[cpHosRV]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: reverse(tag, m=1, n=%d, d=%d, u, Z[n][d+1])\n", taskCount++,indepDim,degree); fprintf(stdout," ---> hos_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fov_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPP = new double*[pRV]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hov_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPPP = new double**[pRV]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); fprintf(stdout," Should be the same values:\n"); fprintf(stdout," (original) %12.8E =? %12.8E (forward from tape)\n", depOrig,depTape); } } /****************************************************************************/ /* 12. JACOBIAN */ if (controlParameters[cpJacobian]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: gradient(tag, n=%d, X[n], G[n])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ JP = new double[indepDim]; /*----------------------------------------------------------------------*/ /* Gradient evaluation */ t00 = myclock(); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] JP; } /****************************************************************************/ /* 13. VECJAC */ if (controlParameters[cpVecJac]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: vec_jac(tag, m=1, n=%d, repeat, X[n], U[m], V[n])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[1]; UP[0] = (double)rand(); VP = new double[indepDim]; /*----------------------------------------------------------------------*/ /* Evaluation without repeat */ t00 = myclock(); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] UP; delete[] VP; } /****************************************************************************/ /* 14. JACVEC */ if (controlParameters[cpJacVec]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: jac_vec(tag, m=1, n=%d, X[n], V[n], U[m])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[1]; VP = new double[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] UP; delete[] VP; } /****************************************************************************/ /* 15. HESSIAN */ if (controlParameters[cpHessian]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: hessian(tag, n=%d, X[n], lower triangle of H[n][n])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ HPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] VP; delete[] WP; } /****************************************************************************/ /* 17. LAGHESSVEC */ if (controlParameters[cpLagHessVec]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: lagra_hess_vec(tag, m=1, n=%d, X[n], U[m], V[n], W[n])\n", taskCount++,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[1]; UP[0] = (double)rand(); VP = new double[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] VP; delete[] WP; delete[] UP; } /****************************************************************************/ /* 18. TENSOR */ if (controlParameters[cpTensor]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: tensor_eval(tag, m =1, n=%d, d=%d, p=%d, X[n], tensor[m][dim], S[n][p])\n", taskCount++,indepDim,degree, pTR); fprintf(stdout,"\n dim = ((p+d) over d)\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ dim = binomi(pTR+degree,degree); TPP = new double*[1]; TPP[0] = new double[dim]; SPP = new double*[indepDim]; for (i=0; i 1) {} /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] TPP[0]; delete[] TPP; for (i=0; i 1) {} /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] TPP[0]; delete[] TPP; delete[] SPP[0]; delete[] SPP; } return 1; } #undef _SGENMAIN_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/powexam.ctrl0000644000175200017520000000150711227416777023470 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/rosenbrockexam.ctrl0000644000175200017520000000150711227416777025032 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/griewankexam.ctrl0000644000175200017520000000150711227416777024472 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/sfunc_helmholtz.cpp0000644000175200017520000001261011452356477025027 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_helmholtz.cpp Revision: $Id: sfunc_helmholtz.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Helmholtz energy function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_HELMHOLTZ_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "helmholtzexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ double *bv = NULL; const double R = sqrt(2.0); const double TE= 0.01; /* originally 0.0 */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"HELMHOLTZ ENERGY (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; double r = 1.0/indepDim; if (bv) delete[] bv; bv = new double[indepDim]; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_HELMHOLTZ_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/sfunc_rosenbrock.cpp0000644000175200017520000001131711452356477025173 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_rosenbrock.cpp Revision: $Id: sfunc_rosenbrock.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Rosenbrock's function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_ROSENBROCK_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "rosenbrockexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"ROSENBROCKs FUNCTION (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_ROSENBROCK_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/sfunc_griewank.cpp0000644000175200017520000001133511452356477024633 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_griewank.cpp Revision: $Id: sfunc_griewank.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Griewanks function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_GRIEWANK_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "griewankexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ const double D = 4000.0; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"GRIEWANKs FUNCTION (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_GRIEWANK_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/sfunc_determinant.cpp0000644000175200017520000001403011452356477025331 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_determinant.cpp Revision: $Id: sfunc_determinant.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing the determinant example Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_DETERMINANT_C_ /****************************************************************************/ /* INCLUDES */ #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "detexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ int matrixDim; int mRec; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"COMPUTATION OF DETERMINANTS Type 2 (ADOL-C Example)\n\n"); if (indepDim > 0) matrixDim = indepDim; else { fprintf(stdout," order of matrix = ? "); fscanf(stdin,"%d",&matrixDim); fprintf(stdout,"\n"); } indepDim = matrixDim * matrixDim; } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i, j; double* iP = indeps; mRec = 1; for (i=0; i= p) { if (m == p) { if (s > 0) t += *pt; else t -= *pt; } else { if (s > 0) t += (*pt)*det(k-1, m-p, indeps); else t -= (*pt)*det(k-1, m-p, indeps); } s = -s; } ++pt; p = p1; } return t; } } /*--------------------------------------------------------------------------*/ /* The interface function */ double originalScalarFunction( double* indeps ) { return det(matrixDim, mRec-1, indeps); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The recursive determinant function */ adouble activeDet( int k, int m, adouble* indeps ) { int i; if (m == 0) return 1.0; else { adouble* pt = indeps + ((k-1)*matrixDim); adouble t = 0; int p = 1; int p1, s; if (k%2) s = 1; else s = -1; for (i=0; i= p) { if (m == p) { if (s > 0) t += *pt; else t -= *pt; } else { if (s > 0) t += (*pt)*activeDet(k-1, m-p, indeps); else t -= (*pt)*activeDet(k-1, m-p, indeps); } s = -s; } ++pt; p = p1; } return t; } } /*--------------------------------------------------------------------------*/ /* The interface function */ double tapingScalarFunction( int tag, double* indeps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_DETERMINANT_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/detexam.ctrl0000644000175200017520000000150711227416777023437 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/robertsonexam.ctrl0000644000175200017520000000144111227416777024675 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/gearexam.ctrl0000644000175200017520000000144111227416777023576 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/michalewitzexam.ctrl0000644000175200017520000000150711227416777025203 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/pargearexam.ctrl0000644000175200017520000000144111227416777024301 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/vfunc_gear.cpp0000644000175200017520000002650711452356477023754 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_gear.cpp Revision: $Id: vfunc_gear.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Example of function module containing the machine tool example of gearing Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_GEAR_C_ /****************************************************************************/ /* INCLUDES */ #include #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "gearexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ //static unsigned short int dx[3]; /* variable needed by erand48(.) */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"GEAREXAM (ADOL-C Example)\n\n"); /* number of indeps & deps */ indepDim = 3; depDim = 3; /* Init erand48(); */ struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { for (int i=0; i>= *iP++; trace_off(); } #undef _VFUNC_GEAR_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/vfunc_pargear.cpp0000644000175200017520000005453711452356477024463 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_pargear.cpp Revision: $Id: vfunc_pargear.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Example of function module containing the machine tool example of gearing (parametrized version) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_PARGEAR_C_ /****************************************************************************/ /* INCLUDES */ #include #include "rotations.h" #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ #define Pi 3.141592654 /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "pargearexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; int radMotDegree; int verMotDegree; int horMotDegree; int helMotDegree; int angMotDegree; int modRolDegree; /*--------------------------------------------------------------------------*/ /* important machine tool parameters */ // example bet06-23 convex pinion flank int konvex= 1; // konvexe oder konkave Flanke int zz= 6; // Zaehnezahl double xmk= -17.50195; // Messerversatz double ymk= 80.0; // MK-Versatz double kopspw= 0.0; // Kopfspanwinkel double flaspw= 0.0; // Flankenspanwinkel double meschw= 0.0; // Messerschwenkwinkel double flkrrd= 101.44158; // Spitzenradius, Flugkreisr. double e= 0.0; // MK-Exzentrizitaet double exzenw= 0.0; // Exzentrizitaetswinkel double thetas= 0.0; // Messerkopfschwenkung double thetan= 0.0; // Messerkopfneigung double xmw= 24.63350; // MK-x double ymw= -73.69500; // MK-y double zmw= 96.15919; // MK-z double thetaw=-314.52420; // Wiegenwinkel=Waelztrommelwinkel double m= 0.0; // Erzeugungs-Achsversatz double zwr= 0.0; // Verschiebung Werkradachse double delta= 14.62090; // Kegelwinkel double omega= 0.0; double c= 0.0; double r= 2.1; // Kopfradius double rs= 2594.425; // Sphaerikradius double ys= 876.147; // Sphaerik-Mitte-Y double zs= -2442.015; // Sphaerik-Mitte-Z /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ //static unsigned short int dx[3]; /* variable needed by erand48(.) */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"PARGEAREXAM (ADOL-C Example)\n\n"); /* number of indeps & deps */ depDim = 3; indepDim = 3; fprintf(stdout," Radial motion degree = ? [-1=no polynomial,0,...,6]"); fscanf(stdin,"%d",&radMotDegree); fprintf(stdout,"\n"); if (radMotDegree>=0) indepDim += radMotDegree + 1; fprintf(stdout," Vertical motion degree = ? "); fscanf(stdin,"%d",&verMotDegree); fprintf(stdout,"\n"); if (verMotDegree>=0) indepDim += verMotDegree + 1; fprintf(stdout," Horizontal motion degree = ? "); fscanf(stdin,"%d",&horMotDegree); fprintf(stdout,"\n"); if (horMotDegree>=0) indepDim += horMotDegree + 1; fprintf(stdout," Helical motion degree = ? "); fscanf(stdin,"%d",&helMotDegree); fprintf(stdout,"\n"); if (helMotDegree>=0) indepDim += helMotDegree + 1; fprintf(stdout," Angular motion degree = ? "); fscanf(stdin,"%d",&angMotDegree); fprintf(stdout,"\n"); if (angMotDegree>=0) indepDim += angMotDegree + 1; fprintf(stdout," Modified roll degree = ? "); fscanf(stdin,"%d",&modRolDegree); fprintf(stdout,"\n"); if (modRolDegree>=0) indepDim += modRolDegree + 1; /* Init erand48(); */ struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { for (int i=0; i (-xNeu) f[1] += hgZmw; // FLB1-z-Achse zeigt nach rechts -> (yNeu) f[2] += hgYmw; // FLB1-y-Achse zeigt aus der Wiege -> (zNeu) // Wiegenwinkel thetaW, entspricht dem wert t=0 D3(f,hgThetaW); // ZUSATZBEWEGUNG Radial motion if (radialMotionDegree >= 0) { ah = 0.0; for (i=radialMotionDegree; i>0; i--) { ah += radialMotionCoeff[i]; ah *= z[2]; } ah += radialMotionCoeff[0]; f[1] += ah; // radiale Verschiebung des Messerkopfes } // Wiegenbewegung mit Parameter t D3(f,z[2]); // ZUSATZBEWEGUNG Vertical motion if (verticalMotionDegree >= 0) { ah = 0.0; for (i=verticalMotionDegree; i>0; i--) { ah += verticalMotionCoeff[i]; ah *= z[2]; } ah += verticalMotionCoeff[0]; f[0] += ah; // Achsversatz in positive x-Richtung } // originaler Achsversatz f[0] += hgM; // ZUSATZBEWEGUNG Horizontal motion if (horizontalMotionDegree >= 0) { ah = 0.0; for (i=horizontalMotionDegree; i>0; i--) { ah += horizontalMotionCoeff[i]; ah *= z[2]; } ah += horizontalMotionCoeff[0]; f[1] += ah; // Achsversatz in positive y-Richtung } // ZUSATZBEWEGUNG Helical motion if (helicalMotionDegree >= 0) { ah = 0.0; for (i=helicalMotionDegree; i>0; i--) { ah += helicalMotionCoeff[i]; ah *= z[2]; } ah += helicalMotionCoeff[0]; f[2] -= ah; // Tiefenposition in negative z-Richtung } // Eindrehen in Orientierung des Werkrades f[0] = -f[0]; ah = f[1]; f[1] = -f[2]; f[2] = -ah; // ZUSATZBEWEGUNG Angular motion if (angularMotionDegree >= 0) { ah = 0.0; for (i=angularMotionDegree; i>0; i--) { ah += angularMotionCoeff[i]; ah *= z[2]; } ah += angularMotionCoeff[0]; D1(f,ah); // umgekehrte Drehung um die x-Achse } // Teilkegeloeffnungswinkel delta - y-Achsen entgegengesetzt D1(f,hgDelta); // neue Verschiebung der Werkradachse f[2] += hgZwr; // z-Achse zeigt zu Spitze // ZUSATZBEWEGUNG Modified roll if (modifiedRollDegree >= 0) { ah = 0.0; for (i=modifiedRollDegree; i>1; i--) { ah += modifiedRollCoeff[i]; ah *= z[2]; } if (modifiedRollDegree > 0) ah += modifiedRollCoeff[1]; ah += hgOmega; ah *= z[2]; ah += modifiedRollCoeff[0]; } else { ah = hgOmega; ah *= z[2]; } ah += hgC*z[1]; // c*v + omega * t // gekoppelte Werkraddrehung in Abhaengigkeit von t und v D3(f,ah); } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indeps, double* deps ) { int i = 3; double * radMotCoeff = indeps+i; i += radMotDegree; double * verMotCoeff = indeps+i; i += verMotDegree; double * horMotCoeff = indeps+i; i += horMotDegree; double * helMotCoeff = indeps+i; i += helMotDegree; double * angMotCoeff = indeps+i; i += angMotDegree; double * modRolCoeff = indeps+i; gearFunction( indeps, deps, // jetzt kommen die ganzen Parameter xmk, // Messerversatz ymk, // MK-Versatz kopspw, // Kopfspanwinkel flaspw, // Flankenspanwinkel meschw, // Messerschwenkwinkel flkrrd, // Flugkreisradius e, // Exzentrizitaet exzenw, // Exzentrizitaetswinkel thetas, // Messerkopfschwenkung thetan, // Messerkopfneigung xmw, // MK-x ymw, // MK-y zmw, // MK-z thetaw, // Wiegenwinkel m, // Achsversatz zwr, // Verschiebung Werkradachse delta, // Teilkegeloeffnungswinkel omega, // c, r, // Kopfradius rs, // Sphaerikradius ys, // Sphaerik-Mitte-Y zs, // Sphaerik-Mitte-Z // jetzt die Zusatzbewegungen radMotDegree, radMotCoeff, verMotDegree, verMotCoeff, horMotDegree, horMotCoeff, helMotDegree, helMotCoeff, angMotDegree, angMotCoeff, modRolDegree, modRolCoeff ); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The model function */ /*--------------------------------------------------------------------------*/ // parametrized cutting edge void def_messer( adouble * z, adouble * messer, // jetzt kommen die Parameter double hgR, // Kopfradius double hgRs, // Sphaerikradius double hgYs, // Sphaerik-Mitte-Y double hgZs // Sphaerik-Mitte-Z ) { double u0, uOri, phi0; adouble h; phi0= asin((hgR+hgYs)/(hgR+hgRs)); if (konvex==1) { u0=hgRs*phi0; uOri=1.0; } else { u0=hgRs*(phi0-Pi); uOri=-1.0; }; h= (z[0]-u0)/(uOri*hgRs); messer[0]=hgZs+hgRs*cos(h); messer[1]=0.0; messer[2]=-hgYs-hgRs*sin(h); } /*--------------------------------------------------------------------------*/ // the main function void activeGearFunction( adouble* z, // (u,v,t) Parametrisierung der Bewegung der Messerschneide adouble* f, // (x,y,z) Bewegte Messerschneide // jetzt kommen die ganzen Parameter double hgXmk, // Messerversatz double hgYmk, // MK-Versatz double hgKopSpW, // Kopfspanwinkel double hgFlaSpW, // Flankenspanwinkel double hgMeSchW, // Messerschwenkwinkel double hgFlKrRd, // Flugkreisradius double hgE, // Exzentrizitaet double hgExzenW, // Exzentrizitaetswinkel double hgThetaS, // Messerkopfschwenkung double hgThetaN, // Messerkopfneigung double hgXmw, // MK-x double hgYmw, // MK-y double hgZmw, // MK-z double hgThetaW, // Wiegenwinkel double hgM, // Achsversatz double hgZwr, // Verschiebung Werkradachse double hgDelta, // Teilkegeloeffnungswinkel double hgOmega, // double hgC, double hgR, // Kopfradius double hgRs, // Sphaerikradius double hgYs, // Sphaerik-Mitte-Y double hgZs, // Sphaerik-Mitte-Z // jetzt die Zusatzbewegungen int radialMotionDegree, adouble* radialMotionCoeff, int verticalMotionDegree, adouble* verticalMotionCoeff, int horizontalMotionDegree, adouble* horizontalMotionCoeff, int helicalMotionDegree, adouble* helicalMotionCoeff, int angularMotionDegree, adouble* angularMotionCoeff, int modifiedRollDegree, adouble* modifiedRollCoeff ) { int i; adouble ah; // Definition der Schneide def_messer(z,f,hgR,hgRs,hgYs,hgZs); // Position der Schneide am Messerkopf // (jetzt die Ber"ucksichtigung von hgKopSpW, hgFlaSpW, hgMeSchW) D2T(f,hgMeSchW); // Messerschwenkwinkel Theta_M D3T(f,hgFlaSpW); // Flankenspanwinkel Theta_F D1(f,hgKopSpW); // Kopfspanwinkel Theta_K // Position der Schneide am Messerkopf f[0] += hgFlKrRd; // Flugkreisradius f[1] -= hgXmk; // Messerversatz // Messerkopfrotation mit Parameter v D3(f,z[1]); // Lage des Messerkopfs auf der Wiege f[2] -= hgYmk; // Beruecksichtigung der Messerkopf-Exzentrizitaet f[0] += hgE * cos(hgExzenW); f[1] -= hgE * sin(hgExzenW); // Eindrehen in Orientierung der Wiege ah = f[0]; f[0] = f[1]; f[1] = ah; f[2] = -f[2]; // Beruecksichtigung von Messerkopf-Schwenkwinkel hgThetaS // und der Messerkopfneigung hgThetaN D3T(f,hgThetaS); // Einschwenken in die Neigungsachse D1T(f,hgThetaN); // Neigung um x-Achse D3(f,hgThetaS); // Rueckschwenken aus der Neigungsachse // Verschiebung f[0] -= hgXmw; // FLB1-x-Achse zeigt nach oben -> (-xNeu) f[1] += hgZmw; // FLB1-z-Achse zeigt nach rechts -> (yNeu) f[2] += hgYmw; // FLB1-y-Achse zeigt aus der Wiege -> (zNeu) // Wiegenwinkel thetaW, entspricht dem wert t=0 D3(f,hgThetaW); // ZUSATZBEWEGUNG Radial motion if (radialMotionDegree >= 0) { ah = 0.0; for (i=radialMotionDegree; i>0; i--) { ah += radialMotionCoeff[i]; ah *= z[2]; } ah += radialMotionCoeff[0]; f[1] += ah; // radiale Verschiebung des Messerkopfes } // Wiegenbewegung mit Parameter t D3(f,z[2]); // ZUSATZBEWEGUNG Vertical motion if (verticalMotionDegree >= 0) { ah = 0.0; for (i=verticalMotionDegree; i>0; i--) { ah += verticalMotionCoeff[i]; ah *= z[2]; } ah += verticalMotionCoeff[0]; f[0] += ah; // Achsversatz in positive x-Richtung } // originaler Achsversatz f[0] += hgM; // ZUSATZBEWEGUNG Horizontal motion if (horizontalMotionDegree >= 0) { ah = 0.0; for (i=horizontalMotionDegree; i>0; i--) { ah += horizontalMotionCoeff[i]; ah *= z[2]; } ah += horizontalMotionCoeff[0]; f[1] += ah; // Achsversatz in positive y-Richtung } // ZUSATZBEWEGUNG Helical motion if (helicalMotionDegree >= 0) { ah = 0.0; for (i=helicalMotionDegree; i>0; i--) { ah += helicalMotionCoeff[i]; ah *= z[2]; } ah += helicalMotionCoeff[0]; f[2] -= ah; // Tiefenposition in negative z-Richtung } // Eindrehen in Orientierung des Werkrades f[0] = -f[0]; ah = f[1]; f[1] = -f[2]; f[2] = -ah; // ZUSATZBEWEGUNG Angular motion if (angularMotionDegree >= 0) { ah = 0.0; for (i=angularMotionDegree; i>0; i--) { ah += angularMotionCoeff[i]; ah *= z[2]; } ah += angularMotionCoeff[0]; D1(f,ah); // umgekehrte Drehung um die x-Achse } // Teilkegeloeffnungswinkel delta - y-Achsen entgegengesetzt D1(f,hgDelta); // neue Verschiebung der Werkradachse f[2] += hgZwr; // z-Achse zeigt zu Spitze // ZUSATZBEWEGUNG Modified roll if (modifiedRollDegree >= 0) { ah = 0.0; for (i=modifiedRollDegree; i>1; i--) { ah += modifiedRollCoeff[i]; ah *= z[2]; } if (modifiedRollDegree > 0) ah += modifiedRollCoeff[1]; ah += hgOmega; ah *= z[2]; ah += modifiedRollCoeff[0]; } else { ah = hgOmega; ah *= z[2]; } ah += hgC*z[1]; // c*v + omega * t // gekoppelte Werkraddrehung in Abhaengigkeit von t und v D3(f,ah); } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indeps, double* deps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* activeDeps = new adouble[depDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= *iP++; trace_off(); delete [] activeDeps; delete [] activeIndeps; } #undef _VFUNC_GEAR_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/eutrophexam.ctrl0000644000175200017520000000144111227416777024346 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/rotations.h0000644000175200017520000000707511227420735023310 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: rotations.h Revision: $Id: rotations.h 42 2009-07-15 18:37:17Z awalther $ Contents: ... contains elementary rotations used by the machine tool example of gearing (vfunc_pargear.C) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #ifndef _ROTATIONS_H_ #define _ROTATIONS_H_ class adouble; /****************************************************************************/ /* ELEMENTARY ROTATIONS */ /*--------------------------------------------------------------------------*/ void D1 ( double * vec, double & alpha ); void D1 ( double * depVec, double * indepVec, double & alpha ); void D1T ( double * vec, double & alpha ); void D1T ( double * depVec, double * indepVec, double & alpha ); /*--------------------------------------------------------------------------*/ void D2 ( double * vec, double & alpha ); void D2 ( double * depVec, double * indepVec, double & alpha ); void D2T ( double * vec, double & alpha ); void D2T ( double * depVec, double * indepVec, double & alpha ); /*--------------------------------------------------------------------------*/ void D3 ( double * vec, double & alpha ); void D3 ( double * depVec, double * indepVec, double & alpha ); void D3T ( double * vec, double & alpha ); void D3T ( double * depVec, double * indepVec, double & alpha ); /****************************************************************************/ /* ACTIVATED ELEMENTARY ROTATIONS */ /*--------------------------------------------------------------------------*/ void D1 ( adouble * vec, double & alpha ); void D1 ( adouble * depVec, adouble * indepVec, double & alpha ); void D1T ( adouble * vec, double & alpha ); void D1T ( adouble * depVec, adouble * indepVec, double & alpha ); void D1 ( adouble * vec, adouble & alpha ); void D1 ( adouble * depVec, adouble * indepVec, adouble & alpha ); void D1T ( adouble * vec, adouble & alpha ); void D1T ( adouble * depVec, adouble * indepVec, adouble & alpha ); /*--------------------------------------------------------------------------*/ void D2 ( adouble * vec, double & alpha ); void D2 ( adouble * depVec, adouble * indepVec, double & alpha ); void D2T ( adouble * vec, double & alpha ); void D2T ( adouble * depVec, adouble * indepVec, double & alpha ); void D2 ( adouble * vec, adouble & alpha ); void D2 ( adouble * depVec, adouble * indepVec, adouble & alpha ); void D2T ( adouble * vec, adouble & alpha ); void D2T ( adouble * depVec, adouble * indepVec, adouble & alpha ); /*--------------------------------------------------------------------------*/ void D3 ( adouble * vec, double & alpha ); void D3 ( adouble * depVec, adouble * indepVec, double & alpha ); void D3T ( adouble * vec, double & alpha ); void D3T ( adouble * depVec, adouble * indepVec, double & alpha ); void D3 ( adouble * vec, adouble & alpha ); void D3 ( adouble * depVec, adouble * indepVec, adouble & alpha ); void D3T ( adouble * vec, adouble & alpha ); void D3T ( adouble * depVec, adouble * indepVec, adouble & alpha ); #endif ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/vfunc_shuttle.cpp0000644000175200017520000001724411452356477024524 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_shuttle.cpp Revision: $Id: vfunc_shuttle.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Example of function module containing the shuttle example (based on shuttlexam.c of version 1.7) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_SHUTTLE_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "shuttlexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ const double Pi = 3.141592654; const double ae = 20902900.0; const double mu = 0.14E+17; const double a = 40.0; const double S = 2690.0; const double crtd = 180.0/Pi; const double cl = 0.84-0.48*(38.0-a*crtd)/26.0; const double C0 = 3.974960446019; const double C1 = -0.01448947694635; const double C2 = -0.2156171551995e-4; const double C3 = -0.1089609507291e-7; const double V0 = 0.0; const double ma = 5964.496499824; const double Om = .72921159e-4; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"SHUTTLEXAM (ADOL-C Example)\n\n"); /* number of indeps & deps */ indepDim = 14; depDim = 7; } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { indeps[0] = 264039.328; /* H */ indeps[1] = 177.718047; /* x */ indeps[2] = 32.0417885; /* l */ indeps[3] = 24317.0798; /* V */ indeps[4] = -0.749986488; /* g */ indeps[5] = 62.7883367; /* A */ indeps[6] = 41.100771834; /* b */ indeps[7] = -318; /* Hp */ indeps[8] = 0.01; /* xp */ indeps[9] = 0.1; /* lp */ indeps[10] = -3.6; /* Vp */ indeps[11] = 0.001; /* gp */ indeps[12] = 0.1; /* Ap */ indeps[13] = 0.06; /* bp */ } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The shuttle function */ void shuttle( double* indeps, double* deps ) { double r,gr,rho,L,cd,Z; double sing,cosg,sinA,cosA,sinl,cosl,tanl; r = indeps[0]+ae; gr = mu/(r*r); rho= 0.002378*exp(-indeps[0]/23800.0); L = 0.5*rho*cl*S*indeps[3]*indeps[3]; cd = 0.78-0.58*(38.0-a*crtd)/26.0; Z = .5*rho*cd*S*indeps[3]*indeps[3]; // evaluate the dynamic equations ... sinA = sin(indeps[5]); cosA = cos(indeps[5]); sing = sin(indeps[4]); cosg = cos(indeps[4]); sinl = sin(indeps[2]); cosl = cos(indeps[2]); tanl = sinl/cosl; deps[0] = indeps[3]*sing-indeps[7]; deps[1] = indeps[3]*cosg*sinA/(r*cosl)-indeps[8]; deps[2] = indeps[3]*cosg*cosA/r-indeps[9]; deps[3] = -Z/ma-gr*sing-Om*Om*r*cosl *(sinl*cosA*cosg-cosl*sing)-indeps[10]; deps[4] = L*cos(indeps[6])/(ma*indeps[3]) +cosl/indeps[3]*(indeps[3]*indeps[3]/r-gr) +2*Om*cosl*sinA +Om*Om*r*cosl/indeps[3]*(sinl*cosA*sing+cosl*cosg) -indeps[11]; deps[5] = L*sin(indeps[6])/(ma*indeps[3]*cosg)+indeps[3]/r*cosg*sinA*tanl -2*Om*(cosl*cosA*sing/cosg-sinl) +Om*Om*r*cosl*sinl*sinA/(indeps[3]*cosg)-indeps[12]; deps[6] = Z/ma -(C0+(indeps[3]-V0)*(C1+(indeps[3]-V0)*(C2+(indeps[3]-V0)*C3))); } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indeps, double* deps ) { shuttle(indeps,deps); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The active shuttle function */ void activeShuttle( adouble* indeps, adouble* deps ) { adouble r,gr,rho,L,cd,Z; adouble sing,cosg,sinA,cosA,sinl,cosl,tanl; r = indeps[0]+ae; gr = mu/(r*r); rho= 0.002378*exp(-indeps[0]/23800.0); L = 0.5*rho*cl*S*indeps[3]*indeps[3]; cd = 0.78-0.58*(38.0-a*crtd)/26.0; Z = .5*rho*cd*S*indeps[3]*indeps[3]; // evaluate the dynamic equations ... sinA = sin(indeps[5]); cosA = cos(indeps[5]); sing = sin(indeps[4]); cosg = cos(indeps[4]); sinl = sin(indeps[2]); cosl = cos(indeps[2]); tanl = sinl/cosl; deps[0] = indeps[3]*sing-indeps[7]; deps[1] = indeps[3]*cosg*sinA/(r*cosl)-indeps[8]; deps[2] = indeps[3]*cosg*cosA/r-indeps[9]; deps[3] = -Z/ma-gr*sing-Om*Om*r*cosl *(sinl*cosA*cosg-cosl*sing)-indeps[10]; deps[4] = L*cos(indeps[6])/(ma*indeps[3]) +cosl/indeps[3]*(indeps[3]*indeps[3]/r-gr) +2*Om*cosl*sinA +Om*Om*r*cosl/indeps[3]*(sinl*cosA*sing+cosl*cosg) -indeps[11]; deps[5] = L*sin(indeps[6])/(ma*indeps[3]*cosg)+indeps[3]/r*cosg*sinA*tanl -2*Om*(cosl*cosA*sing/cosg-sinl) +Om*Om*r*cosl*sinl*sinA/(indeps[3]*cosg)-indeps[12]; deps[6] = Z/ma -(C0+(indeps[3]-V0)*(C1+(indeps[3]-V0)*(C2+(indeps[3]-V0)*C3))); } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indeps, double* deps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* activeDeps = new adouble[depDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= *iP++; trace_off(); } #undef _VFUNC_SHUTTLE_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/ficexam.ctrl0000644000175200017520000000150711227416777023424 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/helmholtzexam.ctrl0000644000175200017520000000150611227416777024670 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/vgenmain.cpp0000644000175200017520000012112512334664415023423 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vgenmain.cpp Revision: $Id: vgenmain.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: Vector Generic Main File: for use with function modules containing several vector function examples (e.g. the sinple example in vfunc_simplevec.cpp) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VGENMAIN_C_ /****************************************************************************/ /* INCLUDES */ #include #include "../clock/myclock.h" #include #include /****************************************************************************/ /* MACROS */ #define TIMEFORMAT " %12.6E units, %12.6E seconds\n" /****************************************************************************/ /* EXTERNAL STUFF FROM FUNCTION MODULES*/ /*--------------------------------------------------------------------------*/ /* Control file name */ const extern char* controlFileName; /*--------------------------------------------------------------------------*/ /* Dimensions */ extern int indepDim; extern int depDim; /*--------------------------------------------------------------------------*/ /* Init Problem Parameters */ extern void initProblemParameters( void ); /*--------------------------------------------------------------------------*/ /* Initialize indeps */ extern void initIndependents( double* indeps ); /*--------------------------------------------------------------------------*/ /* Original scalar function */ extern void originalVectorFunction( double* indeps, double* deps ); /*--------------------------------------------------------------------------*/ /* Taping scalar function */ extern void tapingVectorFunction( int tag, double* indeps, double* deps ); /****************************************************************************/ /* CONTROL STUFF */ enum controlParameter { cpIndepDimension, cpDepDimension, cpAverageCount, cpDegree, cpVecCountFW, cpVecCountRV, cpVecCountTR, cpZosFW, cpFosFW, cpHosFW, cpFovFW, cpHovFW, cpFosRV, cpHosRV, cpFovRV, cpHovRV, cpFunction, cpJacobian, cpVecJac, cpJacVec, cpLagHessVec, cpTensor, cpInvTensor, cpCount }; /****************************************************************************/ /* PROVIDE RANDOM INITs */ //unsigned short int dx[3]; /* variable needed by erand48(.) */ void initRand ( void ) /* a function to initialize dx using actual time */ { struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i, j, k; int tag = 1; /* tape tag */ int taskCount = 0; int pFW, pRV, pTR, degree, keep; /* forward/reverse parameters */ int evalCount; /* # of evaluations */ /****************************************************************************/ /* READ CONTROL PARAMETERS FROM FILE */ int controlParameters[cpCount]; FILE* controlFile; /*------------------------------------------------------------------------*/ /* open file to read */ if ((controlFile = fopen(controlFileName,"r")) == NULL) { fprintf(stdout,"ERROR: Could not open control file %s\n", controlFileName); exit(-1); } /*------------------------------------------------------------------------*/ /* read all values */ for (i=0; i always */ fprintf(stdout,"\nTASK %d: Original function evaluation\n", taskCount++); t00 = myclock(1); for (i=0; i always */ fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: Taping the function\n", taskCount++); t00 = myclock(1); /* NOTE: taping will be performed ONCE only */ tapingVectorFunction(tag,indeps,deps); t01 = myclock(); size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); fprintf(stdout," "); fprintf(stdout,TIMEFORMAT,(t01-t00)*timeUnit*evalCount, (t01-t00)); /****************************************************************************/ /* 2. ZOS_FORWARD */ if (controlParameters[cpZosFW]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forward(tag, m=%d, n=%d, keep, X[n], Y[m])\n", taskCount++,depDim,indepDim); fprintf(stdout," ---> zos_forward\n"); /*----------------------------------------------------------------------*/ /* NO KEEP */ t00 = myclock(1); for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } } /****************************************************************************/ /* 3. FOS_FORWARD */ if (controlParameters[cpFosFW]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forward(tag, m=%d, n=%d, d=1, keep, X[n][d+1], Y[m][d+1])\n", taskCount++,depDim,indepDim); fprintf(stdout," ---> fos_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hos_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fov_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hov_forward\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ XPPP = new double**[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fos_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZP = new double[indepDim]; UP = new double[depDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] ZP; delete[] UP; } /****************************************************************************/ /* 8. HOS_REVERSE */ if (controlParameters[cpHosRV]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: reverse(tag, m=%d, n=%d, d=%d, u[m], Z[n][d+1])\n", taskCount++,depDim,indepDim,degree); fprintf(stdout," ---> hos_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPP = new double*[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i fov_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPP = new double*[pRV]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i hov_reverse\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ ZPPP = new double**[pRV]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } } /****************************************************************************/ /* 12. JACOBIAN */ if (controlParameters[cpJacobian]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: jacobian(tag, m=%d, n=%d, X[n], J[m][n])\n", taskCount++,depDim,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ JPP = new double*[depDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] UP; delete[] VP; } /****************************************************************************/ /* 14. JACVEC */ if (controlParameters[cpJacVec]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: jac_vec(tag, m=%d, n=%d, X[n], V[n], U[m])\n", taskCount++,depDim,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[depDim]; VP = new double[indepDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] UP; delete[] VP; } /****************************************************************************/ /* 15. LAGHESSVEC */ if (controlParameters[cpLagHessVec]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: lagra_hess_vec(tag, m=%d, n=%d, X[n], U[m], V[n], W[n])\n", taskCount++,depDim,indepDim); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ UP = new double[depDim]; for (i=0; i 1) { fprintf(stdout,"\n Return value: %d\n",retVal); } /*----------------------------------------------------------------------*/ /* Free tensors */ delete[] VP; delete[] WP; delete[] UP; } /****************************************************************************/ /* 16. TENSOR */ if (controlParameters[cpTensor]) { fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: tensor_eval(tag, m =%d, n=%d, d=%d, p=%d, X[n], tensor[m][dim], S[n][p])\n", taskCount++,depDim,indepDim,degree, pTR); fprintf(stdout,"\n dim = ((p+d) over d)\n"); /*----------------------------------------------------------------------*/ /* Allocation & initialisation of tensors */ dim = binomi(pTR+degree,degree); TPP = new double*[depDim]; for (i=0; i 1) {} /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i 1) {} /*----------------------------------------------------------------------*/ /* Free tensors */ for (i=0; i keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 1 test Hessian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/simplevec.ctrl0000644000175200017520000000144111227416777023774 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/README0000644000175200017520000001042411227416777022000 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## ------------------------------------------------------------- This directory contains example programs that perform user time measurements and checks of nearly all ADOL-C drivers applied to several test problems. -------------------------------------------------------------- CONTENTS OF THE DIRECTORY (A) SCALAR VALUED TEST FUNCTIONS/PROBLEMS ----------------------------------------- detexam --> Computation of determinants sfunc_determinant.cpp detexam.ctrl speelpenning --> Speelpenning's product sfunc_speelpenning.cpp speelpenning.ctrl griewankexam --> Griewank's function [1st ICSC'96] sfunc_griewank.cpp griewankexam.ctrl michalewitzexam --> Michalewitz' function [1st ICSC'96] sfunc_michalewitz.cpp michalewitzexam.ctrl rosenbrockexam --> Rosenbrock's test function sfunc_rosenbrock.cpp rosenbrockexam.ctrl powexam --> Computation of n-th power sfunc_power.cpp powexam.ctrl helmholtzexam --> Helmholtz energy function sfunc_helmholtz.cpp helmholtzexam.ctrl experimental --> Generic example to make experiments with modifications of Speelpennings product sfunc_experimental.cpp experimental.ctrl NOTE: all above example programs make use of the "generic" module sgenmain.cpp and the clock utility provided in subdirectory ../clock. (B) VECTOR VALUED TEST FUNCTIONS/PROBLEMS ----------------------------------------- simplevec --> A simple vector example (scalable dimensions) vfunc_simplevec.cpp simplevec.ctrl gearexam --> Virtual Machine Tool of gearing (R^3 --> R^3) vfunc_gear.C gearexam.ctrl pargearexam --> Virtual Machine Tool of gearing (R^3 x R^? --> R^3) parametrized version vfunc_pargear.cpp pargearexam.ctrl rotations.cpp shuttlexam --> Another vector example with practical background (R^14 --> R^7) vfunc_shuttle.cpp shuttlexam.ctrl eutrophexam --> An ODE example (R^5 --> R^5) ../ode/vfunc_eutroph.cpp eutrophexam.ctrl robertsonexam --> Another ODE example: Robertson test problem (R^3 --> R^3) ../ode/vfunc_robertson.cpp robertsonexam.ctrl ficexam --> Another ODE example: flow in channel (scalable dimension) ../ode/vfunc_fic.cpp ficexam.ctrl NOTE: all above example programs make use of the "generic" module vgenmain.cpp and the clock utility provided in subdirectory ../clock. -------------------------------------------------------------- THE CONTROL FILES The control files *.ctrl can be used to specify some problem parameters and to decide, for which ADOL-C routines/drivers time measurements or checks should be performed. Following flag values are possible 0 don't perform anything 1 perform timings > 1 perform timings and special tests specified by the value (check of results etc.) NOTE: Most checks we think of are not implemented up to now! The modification of the "generic" modules sgenmain.cpp and vgenmain.cpp in order to make some own tests should be fairly easy. ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/sfunc_michalewitz.cpp0000644000175200017520000001103211452356477025336 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_michalewitz.cpp Revision: $Id: sfunc_michalewitz.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Michalewitz' function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_MICHALEWITZ_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "michalewitzexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ #define Pi 3.141592654 const double M = 10.0; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"MICHALEWITZ' FUNCTION (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_MICHALEWITZ_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/experimental.ctrl0000644000175200017520000000151011227416777024477 0ustar coincoin0 problem dimension (n) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 0 test zos_forward or not 0 test fos_forward or not 0 test hos_forward or not 0 test fov_forward or not 0 test hov_forward or not 0 test fos_reverse or not 0 test hos_reverse or not 0 test fov_reverse or not 0 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 0 test Hessian or not 0 test Hessian-Vector-Product or not 0 test Lagrange-Hessian-Vector-Product or not 0 test Tensors or not 0 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/shuttlexam.ctrl0000644000175200017520000000144111227416777024203 0ustar coincoin0 problem dimension (n) 0 problem dimension (m) 0 # of evaluations to average over use forward 0 optional degree for higher order stuff (--> keep) 0 # of vectors in vector forward mode (p) 0 # of vectors in vector reverse mode (p) 0 # of vectors in tensor_eval (p) 1 test zos_forward or not 1 test fos_forward or not 1 test hos_forward or not 1 test fov_forward or not 1 test hov_forward or not 1 test fos_reverse or not 1 test hos_reverse or not 1 test fov_reverse or not 1 test hov_reverse or not 1 test Function or not 1 test Gradient/Jacobian or not 1 test Vector-Gradient/Jacobian-Product or not 1 test Gradient/Jacobian-Vector-Product or not 1 test Lagrange-Hessian-Vector-Product or not 1 test Tensors or not 1 test Inverse tensors or not ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/rotations.cpp0000644000175200017520000002754311452356477023660 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: rotations.cpp Revision: $Id: rotations.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: ... contains elementary rotations used by the machine tool example of gearing (vfunc_pargear.C) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _ROTATIONS_C_ /****************************************************************************/ /* INCLUDES */ #include #include "rotations.h" #include /****************************************************************************/ /* ELEMENTARY ROTATIONS */ /*--------------------------------------------------------------------------*/ void D1 ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec2=locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] - locSin*vec[2]; vec[2]=tmpVec2; } void D1 ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D1(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] - locSin*indepVec[2]; depVec[2]=locSin*indepVec[1] + locCos*indepVec[2]; } void D1T ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec2=-locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] + locSin*vec[2]; vec[2]=tmpVec2; } void D1T ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D1T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] + locSin*indepVec[2]; depVec[2]=-locSin*indepVec[1] + locCos*indepVec[2]; } /*--------------------------------------------------------------------------*/ void D2 ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec2=-locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] + locSin*vec[2]; vec[2]=tmpVec2; } void D2 ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D2(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=-locSin*indepVec[0] + locCos*indepVec[2]; } void D2T ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec2=locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] - locSin*vec[2]; vec[2]=tmpVec2; } void D2T ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D2T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=locSin*indepVec[0] + locCos*indepVec[2]; } /*--------------------------------------------------------------------------*/ void D3 ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec1=locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] - locSin*vec[1]; vec[1]=tmpVec1; } void D3 ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D3(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[1]; depVec[1]=locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } void D3T ( double * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); double tmpVec1=-locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] + locSin*vec[1]; vec[1]=tmpVec1; } void D3T ( double * depVec, double * indepVec, double & alpha ) { if ( indepVec == depVec ) { D3T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[1]; depVec[1]=-locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } /****************************************************************************/ /* ACTIVATED ELEMENTARY ROTATIONS */ /*--------------------------------------------------------------------------*/ void D1 ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec2=locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] - locSin*vec[2]; vec[2]=tmpVec2; } void D1 ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D1(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] - locSin*indepVec[2]; depVec[2]=locSin*indepVec[1] + locCos*indepVec[2]; } void D1 ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec2=locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] - locSin*vec[2]; vec[2]=tmpVec2; } void D1 ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D1(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] - locSin*indepVec[2]; depVec[2]=locSin*indepVec[1] + locCos*indepVec[2]; } void D1T ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec2=-locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] + locSin*vec[2]; vec[2]=tmpVec2; } void D1T ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D1T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] + locSin*indepVec[2]; depVec[2]=-locSin*indepVec[1] + locCos*indepVec[2]; } void D1T ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec2=-locSin*vec[1] + locCos*vec[2]; vec[1]=locCos*vec[1] + locSin*vec[2]; vec[2]=tmpVec2; } void D1T ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D1T(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=indepVec[0]; depVec[1]=locCos*indepVec[1] + locSin*indepVec[2]; depVec[2]=-locSin*indepVec[1] + locCos*indepVec[2]; } /*--------------------------------------------------------------------------*/ void D2 ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec2=-locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] + locSin*vec[2]; vec[2]=tmpVec2; } void D2 ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D2(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=-locSin*indepVec[0] + locCos*indepVec[2]; } void D2 ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec2=-locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] + locSin*vec[2]; vec[2]=tmpVec2; } void D2 ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D2(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=-locSin*indepVec[0] + locCos*indepVec[2]; } void D2T ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec2=locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] - locSin*vec[2]; vec[2]=tmpVec2; } void D2T ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D2T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=locSin*indepVec[0] + locCos*indepVec[2]; } void D2T ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec2=locSin*vec[0] + locCos*vec[2]; vec[0]=locCos*vec[0] - locSin*vec[2]; vec[2]=tmpVec2; } void D2T ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D2T(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[2]; depVec[1]=indepVec[1]; depVec[2]=locSin*indepVec[0] + locCos*indepVec[2]; } /*--------------------------------------------------------------------------*/ void D3 ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec1=locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] - locSin*vec[1]; vec[1]=tmpVec1; } void D3 ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D3(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[1]; depVec[1]=locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } void D3 ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec1=locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] - locSin*vec[1]; vec[1]=tmpVec1; } void D3 ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D3(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=locCos*indepVec[0] - locSin*indepVec[1]; depVec[1]=locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } void D3T ( adouble * vec, double & alpha ) { double locCos=cos(alpha); double locSin=sin(alpha); adouble tmpVec1=-locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] + locSin*vec[1]; vec[1]=tmpVec1; } void D3T ( adouble * depVec, adouble * indepVec, double & alpha ) { if ( indepVec == depVec ) { D3T(depVec,alpha); return; } double locCos=cos(alpha); double locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[1]; depVec[1]=-locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } void D3T ( adouble * vec, adouble & alpha ) { adouble locCos=cos(alpha); adouble locSin=sin(alpha); adouble tmpVec1=-locSin*vec[0] + locCos*vec[1]; vec[0]=locCos*vec[0] + locSin*vec[1]; vec[1]=tmpVec1; } void D3T ( adouble * depVec, adouble * indepVec, adouble & alpha ) { if ( indepVec == depVec ) { D3T(depVec,alpha); return; } adouble locCos=cos(alpha); adouble locSin=sin(alpha); depVec[0]=locCos*indepVec[0] + locSin*indepVec[1]; depVec[1]=-locSin*indepVec[0] + locCos*indepVec[1]; depVec[2]=indepVec[2]; } #undef _ROTATIONS_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/sfunc_speelpenning.cpp0000644000175200017520000001064411452356477025515 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_speelpenning.cpp Revision: $Id: sfunc_speelpenning.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing Speepennings product Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_SPEELPENNING_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "speelpenning.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"SPEELPENNINGS PRODUCT Type 2 (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_SPEELPENNING_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/vfunc_simplevec.cpp0000644000175200017520000001230511452356477025014 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_simplevec.cpp Revision: $Id: vfunc_simplevec.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: Example of function module containing a simple vector example Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indeps ) (6) void originalVectorFunction( double* indeps, double* deps ) (7) void tapingVectorFunction( int tag, double* indeps, double* deps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_SIMPLEVEC_C_ /****************************************************************************/ /* INCLUDES */ #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "simplevec.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ //static unsigned short int dx[3]; /* variable needed by erand48(.) */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"A SIMPLE VECTOR FUNCTION (ADOL-C Example)\n\n"); /* number of indeps & deps */ if (indepDim < 1) { fprintf(stdout," # of independents = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } if (depDim < 1) { fprintf(stdout," # of dependents = ? "); fscanf(stdin,"%d",&depDim); fprintf(stdout,"\n"); } /* Init erand48(); */ struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { for (int i=0; i>= *iP++; trace_off(); } #undef _VFUNC_SIMPLEVEC_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/Makefile.am0000644000175200017520000000604312565145675023160 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include LIBS = $(builddir)/../clock/libclock.la -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C CTRLFILES = detexam.ctrl \ eutrophexam.ctrl \ experimental.ctrl \ ficexam.ctrl \ gearexam.ctrl \ griewankexam.ctrl \ helmholtzexam.ctrl \ michalewitzexam.ctrl \ pargearexam.ctrl \ powexam.ctrl \ robertsonexam.ctrl \ rosenbrockexam.ctrl \ shuttlexam.ctrl \ simplevec.ctrl \ speelpenning.ctrl EXTRA_DIST = rotations.h $(CTRLFILES) MAINTAINERCLEANFILES = Makefile.in in_tape.1 op_tape.1 vs_tape1 *~ *.orig if ADDEXA noinst_PROGRAMS = detexam speelpenning griewankexam michalewitzexam \ rosenbrockexam powexam helmholtzexam shuttlexam \ gearexam pargearexam simplevec eutrophexam \ robertsonexam ficexam experimental endif detexam_SOURCES = sfunc_determinant.cpp sgenmain.cpp speelpenning_SOURCES = sfunc_speelpenning.cpp sgenmain.cpp griewankexam_SOURCES = sfunc_griewank.cpp sgenmain.cpp michalewitzexam_SOURCES = sfunc_michalewitz.cpp sgenmain.cpp rosenbrockexam_SOURCES = sfunc_rosenbrock.cpp sgenmain.cpp powexam_SOURCES = sfunc_power.cpp sgenmain.cpp helmholtzexam_SOURCES = sfunc_helmholtz.cpp sgenmain.cpp shuttlexam_SOURCES = vfunc_shuttle.cpp vgenmain.cpp gearexam_SOURCES = vfunc_gear.cpp vgenmain.cpp pargearexam_SOURCES = vfunc_pargear.cpp rotations.cpp vgenmain.cpp simplevec_SOURCES = vfunc_simplevec.cpp vgenmain.cpp eutrophexam_SOURCES = vgenmain.cpp eutrophexam_LDADD = $(builddir)/../ode/libeutroph.la robertsonexam_SOURCES = vgenmain.cpp robertsonexam_LDADD = $(builddir)/../ode/librobertson.la ficexam_SOURCES = vgenmain.cpp ficexam_LDADD = $(builddir)/../ode/libfic.la experimental_SOURCES = sfunc_experimental.cpp sgenmain.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/sfunc_power.cpp0000644000175200017520000001135111452356477024156 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_power.cpp Revision: $Id: sfunc_power.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing the power example Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_POWER_C_ /****************************************************************************/ /* INCLUDES */ #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "powexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ int exponent; //static unsigned short int dx[3]; /* variable needed by erand48(.) */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"COMPUTATION OF n-th POWER (ADOL-C Example)\n\n"); indepDim = 1; fprintf(stdout," n = ? "); fscanf(stdin,"%d",&exponent); fprintf(stdout,"\n"); /* Init erand48(); */ struct tm s; time_t t; time(&t); s=*localtime(&t); srand(s.tm_sec*s.tm_min); /* dx[0]=rand(); dx[1]=rand(); dx[2]=rand();*/ } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { indeps[0] = (double)rand(); } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The recursive determinant function */ double power( double x, int n ) { double z = 1; if (n > 0) { int nh =n/2; z = power(x,nh); z *= z; if (2*nh != n) z *= x; return z; } else if (n == 0) return z; else return 1.0/power(x,-n); } /*--------------------------------------------------------------------------*/ /* The interface function */ double originalScalarFunction( double* indeps ) { return power(indeps[0],exponent); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The recursive power function */ adouble activePower( adouble x, int n) { adouble z = 1; if (n > 0) { int nh =n/2; z = activePower(x,nh); z *= z; if (2*nh != n) z *= x; return z; } else if (n == 0) return z; else return 1.0/activePower(x,-n); } /*--------------------------------------------------------------------------*/ /* The interface function */ double tapingScalarFunction( int tag, double* indeps ) { trace_on(tag); adouble activeIndep; activeIndep <<= *indeps; adouble ares = activePower(activeIndep,exponent); double res = 0; ares >>= res; trace_off(); return res; } #undef _SFUNC_POWER_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/timing/sfunc_experimental.cpp0000644000175200017520000001101211452356477025511 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sfunc_experimental.cpp Revision: $Id: sfunc_experimental.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: function module containing an experimental function Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) void initProblemParameters( void ) (4) void initIndependents( double* indeps ) (5) double originalScalarFunction( double* indeps ) (6) double tapingScalarFunction( int tag, double* indeps ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _SFUNC_EXPERIMENTAL_C_ /****************************************************************************/ /* INCLUDES */ #include #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "experimental.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ //#define CODE sqrt(indeps[i]) #define CODE sin(indeps[i]) //#define CODE indeps[i]*indeps[i] /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"EXPERIMENTAL EXAMPLE (ADOL-C Example)\n\n"); if (indepDim <= 0) { fprintf(stdout," number of independent variables = ? "); fscanf(stdin,"%d",&indepDim); fprintf(stdout,"\n"); } } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i; for (i=0; i>= res; trace_off(); return res; } #undef _SFUNC_EXPERIMENTAL_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/0000755000175200017520000000000013037353015020745 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/README0000644000175200017520000000273112106465576021644 0ustar coincoin############################################################################## ## README -- additional information ## $Id: README 408 2013-02-12 16:19:10Z kulshres $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY ipopt --> example code for the coupling of ADOL-C and Ipopt directories: LuksanVlcek1 MittelmannDistCntrlNeumA both examples from Ipopt/Ipopt/examples/ScalableProblems The directories contain examples for the coupling of Ipopt and ADOL-C. The user just has to adapted the evaluation of the target function and the constraints everything else is done automatically. LuksanVlcek1_sparse MittelmannDistCntrlNeumA_sparse same examples as above but with automatic exploitation of sparsity, hence the installation of the ColPack package is required. The makefiles from the specific Ipopt installation should be used and extended according to the Makefile examples contained in the directories. ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/0000755000175200017520000000000013037353015024625 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/ADOL-C_sparseNLP.hpp0000644000175200017520000001302312404050706030161 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_sparseNLP.hpp Revision: $$ Contents: class myADOL-C_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.hpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #ifndef __MYADOLCNLP_HPP__ #define __MYADOLCNLP_HPP__ #include #include #include #define tag_f 1 #define tag_g 2 #define tag_L 3 #define HPOFF 30 using namespace Ipopt; class MyADOLC_sparseNLP : public TNLP { public: /** default constructor */ MyADOLC_sparseNLP(); /** default destructor */ virtual ~MyADOLC_sparseNLP(); /**@name Overloaded from TNLP */ //@{ /** Method to return some info about the nlp */ virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style); /** Method to return the bounds for my problem */ virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u); /** Method to return the starting point for the algorithm */ virtual bool get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda); /** Template to return the objective value */ template bool eval_obj(Index n, const T *x, T& obj_value); /** Template to compute contraints */ template bool eval_constraints(Index n, const T *x, Index m, T *g); /** Original method from Ipopt to return the objective value */ /** remains unchanged */ virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); /** Original method from Ipopt to return the gradient of the objective */ /** remains unchanged */ virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); /** Original method from Ipopt to return the constraint residuals */ /** remains unchanged */ virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); /** Original method from Ipopt to return: * 1) The structure of the jacobian (if "values" is NULL) * 2) The values of the jacobian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values); /** Original method from Ipopt to return: * 1) The structure of the hessian of the lagrangian (if "values" is NULL) * 2) The values of the hessian of the lagrangian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values); //@} /** @name Solution Methods */ //@{ /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ virtual void finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g, const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq); //@} //*************** start ADOL-C part *********************************** /** Method to generate the required tapes */ virtual void generate_tapes(Index n, Index m, Index& nnz_jac_g, Index& nnz_h_lag); //*************** end ADOL-C part *********************************** private: /**@name Methods to block default compiler methods. * The compiler automatically generates the following three methods. * Since the default compiler implementation is generally not what * you want (for all but the most simple classes), we usually * put the declarations of these methods in the private section * and never implement them. This prevents the compiler from * implementing an incorrect "default" behavior without us * knowing. (See Scott Meyers book, "Effective C++") * */ //@{ // MyADOLC_sparseNLP(); MyADOLC_sparseNLP(const MyADOLC_sparseNLP&); MyADOLC_sparseNLP& operator=(const MyADOLC_sparseNLP&); //@} //@{ double *obj_lam; //** variables for sparsity exploitation unsigned int *rind_g; /* row indices */ unsigned int *cind_g; /* column indices */ double *jacval; /* values */ unsigned int *rind_L; /* row indices */ unsigned int *cind_L; /* column indices */ double *hessval; /* values */ int nnz_jac; int nnz_L; int options_g[4]; int options_L[4]; //@} }; #endif ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/Makefile0000644000175200017520000000407012247105556026275 0ustar coincoin# ---------------------------------------------------------------------------- # ADOL-C -- Automatic Differentiation by Overloading in C++ # File: Makefile # Revision: $$ # Contents: Makefile for class myADOLC_NPL_sparse to interface ADOL-C with Ipopt # # Copyright (c) Andrea Walther # # This file is part of ADOL-C. This software is provided as open source. # Any use, reproduction, or distribution of the software constitutes # recipient's acceptance of the terms of the accompanying license file. # # This code is based on the corresponding makefile contained in the # Ipopt package with the author Andreas Waechter #--------------------------------------------------------------------------- ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGE entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = cpp_example # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = cpp_example.o \ ADOL-C_sparseNLP.o # Definitions for ADOL-C # CHANGE THIS TO YOUR ADOL-C BASE DIRECTORY ADPATH = $(HOME)/AD/ADOL-C/adolc_base_coin/include/adolc ADLIBDIR = $(HOME)/AD/ADOL-C/adolc_base_coin/lib # CHANGEME: Additional libraries ADDLIBS = -Wl,--rpath -Wl,$(ADLIBDIR) -L$(ADLIBDIR) -l${adolclib} $(HOME)/AD/ADOL-C/adolc_base_coin/lib/libColPack.a # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = -I$(ADPATH) ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Ipopt. # ########################################################################## HERE YOU SHOULD USE THE SETTING OF YOUR IPOPT INSTALLATION THIS SHOULD WORK WITH COPY AND PASTE ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/cpp_example.cpp0000644000175200017520000000372612404050706027634 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cpp_example.cpp Revision: $$ Contents: example for class myADOLC_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file corresponding file cpp_example.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #include #include #include "ADOL-C_sparseNLP.hpp" using namespace Ipopt; int main(int argv, char* argc[]) { // Create an instance of your nlp... SmartPtr myadolc_nlp = new MyADOLC_sparseNLP(); // Create an instance of the IpoptApplication SmartPtr app = new IpoptApplication(); // Initialize the IpoptApplication and process the options ApplicationReturnStatus status; status = app->Initialize(); if (status != Solve_Succeeded) { printf("\n\n*** Error during initialization!\n"); return (int) status; } status = app->OptimizeTNLP(myadolc_nlp); if (status == Solve_Succeeded) { // Retrieve some statistics about the solve Index iter_count = app->Statistics()->IterationCount(); printf("\n\n*** The problem solved in %d iterations!\n", iter_count); Number final_obj = app->Statistics()->FinalObjective(); printf("\n\n*** The final value of the objective function is %e.\n", final_obj); } return (int) status; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1_sparse/ADOL-C_sparseNLP.cpp0000644000175200017520000001765712404050706030175 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_sparseNLP.cpp Revision: $$ Contents: class myADOLC_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ /** C++ Example NLP for interfacing a problem with IPOPT and ADOL-C. * MyADOLC_sparseNLP implements a C++ example showing how to interface * with IPOPT and ADOL-C through the TNLP interface. This class * implements the Example 5.1 from "Sparse and Parially Separable * Test Problems for Unconstrained and Equality Constrained * Optimization" by L. Luksan and J. Vlcek taking sparsity * into account. * * exploitation of sparsity !! * */ #include #include "ADOL-C_sparseNLP.hpp" using namespace Ipopt; /* Constructor. */ MyADOLC_sparseNLP::MyADOLC_sparseNLP() {} MyADOLC_sparseNLP::~MyADOLC_sparseNLP() {} bool MyADOLC_sparseNLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { n = 4000; m = n-2; generate_tapes(n, m, nnz_jac_g, nnz_h_lag); // use the C style indexing (0-based) index_style = C_STYLE; return true; } bool MyADOLC_sparseNLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) { // none of the variables have bounds for (Index i=0; i bool MyADOLC_sparseNLP::eval_obj(Index n, const T *x, T& obj_value) { T a1, a2; obj_value = 0.; for (Index i=0; i bool MyADOLC_sparseNLP::eval_constraints(Index n, const T *x, Index m, T* g) { for (Index i=0; i(x), &nnz_L, &rind_L, &cind_L, &hessval, options_L); for(Index idx = 0; idx >= dummy; trace_off(); trace_on(tag_g); for(Index idx=0;idx>= dummy; trace_off(); trace_on(tag_L); for(Index idx=0;idx>= dummy; trace_off(); rind_g = NULL; cind_g = NULL; rind_L = NULL; cind_L = NULL; options_g[0] = 0; /* sparsity pattern by index domains (default) */ options_g[1] = 0; /* safe mode (default) */ options_g[2] = 0; options_g[3] = 0; /* column compression (default) */ jacval=NULL; hessval=NULL; sparse_jac(tag_g, m, n, 0, xp, &nnz_jac, &rind_g, &cind_g, &jacval, options_g); nnz_jac_g = nnz_jac; options_L[0] = 0; options_L[1] = 1; sparse_hess(tag_L, n, 0, xp, &nnz_L, &rind_L, &cind_L, &hessval, options_L); nnz_h_lag = nnz_L; delete[] lam; delete[] g; delete[] xa; delete[] zu; delete[] zl; delete[] lamp; delete[] xp; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/0000755000175200017520000000000013037353015027207 5ustar coincoin././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/ADOL-C_sparseNLP.hppADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/ADOL-C_sparse0000644000175200017520000001302212404050706031402 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_sparseNLP.hpp Revision: $$ Contents: class myADOL-C_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.hpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #ifndef __MYADOLCNLP_HPP__ #define __MYADOLCNLP_HPP__ #include #include #include #define tag_f 1 #define tag_g 2 #define tag_L 3 #define HPOFF 30 using namespace Ipopt; class MyADOLC_sparseNLP : public TNLP { public: /** default constructor */ MyADOLC_sparseNLP(); /** default destructor */ virtual ~MyADOLC_sparseNLP(); /**@name Overloaded from TNLP */ //@{ /** Method to return some info about the nlp */ virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style); /** Method to return the bounds for my problem */ virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u); /** Method to return the starting point for the algorithm */ virtual bool get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda); /** Template to return the objective value */ template bool eval_obj(Index n, const T *x, T& obj_value); /** Template to compute contraints */ template bool eval_constraints(Index n, const T *x, Index m, T *g); /** Original method from Ipopt to return the objective value */ /** remains unchanged */ virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); /** Original method from Ipopt to return the gradient of the objective */ /** remains unchanged */ virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); /** Original method from Ipopt to return the constraint residuals */ /** remains unchanged */ virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); /** Original method from Ipopt to return: * 1) The structure of the jacobian (if "values" is NULL) * 2) The values of the jacobian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values); /** Original method from Ipopt to return: * 1) The structure of the hessian of the lagrangian (if "values" is NULL) * 2) The values of the hessian of the lagrangian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values); //@} /** @name Solution Methods */ //@{ /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ virtual void finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g, const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq); //@} //*************** start ADOL-C part *********************************** /** Method to generate the required tapes */ virtual void generate_tapes(Index n, Index m, Index& nnz_jac_g, Index& nnz_h_lag); //*************** end ADOL-C part *********************************** private: /**@name Methods to block default compiler methods. * The compiler automatically generates the following three methods. * Since the default compiler implementation is generally not what * you want (for all but the most simple classes), we usually * put the declarations of these methods in the private section * and never implement them. This prevents the compiler from * implementing an incorrect "default" behavior without us * knowing. (See Scott Meyers book, "Effective C++") * */ //@{ // MyADOLC_sparseNLP(); MyADOLC_sparseNLP(const MyADOLC_sparseNLP&); MyADOLC_sparseNLP& operator=(const MyADOLC_sparseNLP&); //@} //@{ double *obj_lam; //** variables for sparsity exploitation unsigned int *rind_g; /* row indices */ unsigned int *cind_g; /* column indices */ double *jacval; /* values */ unsigned int *rind_L; /* row indices */ unsigned int *cind_L; /* column indices */ double *hessval; /* values */ int nnz_jac; int nnz_L; int options_g[4]; int options_L[4]; //@} }; #endif ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/Makefile0000644000175200017520000000407112247105556030660 0ustar coincoin# ---------------------------------------------------------------------------- # ADOL-C -- Automatic Differentiation by Overloading in C++ # File: Makefile # Revision: $$ # Contents: Makefile for class myADOLC_NPL_sparse to interface ADOL-C with Ipopt # # Copyright (c) Andrea Walther # # This file is part of ADOL-C. This software is provided as open source. # Any use, reproduction, or distribution of the software constitutes # recipient's acceptance of the terms of the accompanying license file. # # This code is based on the corresponding makefile contained in the # Ipopt package with the author Andreas Waechter #--------------------------------------------------------------------------- ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGE entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = cpp_example # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = cpp_example.o \ ADOL-C_sparseNLP.o # Definitions for ADOL-C # CHANGE THIS TO YOUR ADOL-C BASE DIRECTORY ADPATH = $(HOME)/AD/ADOL-C/adolc_base_coin/include/adolc ADLIBDIR = $(HOME)/AD/ADOL-C/adolc_base_coin/lib # CHANGEME: Additional libraries ADDLIBS = -Wl,--rpath -Wl,$(ADLIBDIR) -L$(ADLIBDIR) -l${adolclib} $(HOME)/AD/ADOL-C/adolc_base_coin/lib/libColPack.a # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = -I$(ADPATH) ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Ipopt. # ########################################################################## HERE YOU SHOULD USE THE SETTING OF YOUR IPOPT INSTALLATION THIS SHOULD WORK WITH COPY AND PASTE ././@LongLink0000000000000000000000000000014700000000000011567 Lustar rootrootADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/cpp_example.cppADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/cpp_example.c0000644000175200017520000000372612404050706031656 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cpp_example.cpp Revision: $$ Contents: example for class myADOLC_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file corresponding file cpp_example.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #include #include #include "ADOL-C_sparseNLP.hpp" using namespace Ipopt; int main(int argv, char* argc[]) { // Create an instance of your nlp... SmartPtr myadolc_nlp = new MyADOLC_sparseNLP(); // Create an instance of the IpoptApplication SmartPtr app = new IpoptApplication(); // Initialize the IpoptApplication and process the options ApplicationReturnStatus status; status = app->Initialize(); if (status != Solve_Succeeded) { printf("\n\n*** Error during initialization!\n"); return (int) status; } status = app->OptimizeTNLP(myadolc_nlp); if (status == Solve_Succeeded) { // Retrieve some statistics about the solve Index iter_count = app->Statistics()->IterationCount(); printf("\n\n*** The problem solved in %d iterations!\n", iter_count); Number final_obj = app->Statistics()->FinalObjective(); printf("\n\n*** The final value of the objective function is %e.\n", final_obj); } return (int) status; } ././@LongLink0000000000000000000000000000015400000000000011565 Lustar rootrootADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/ADOL-C_sparseNLP.cppADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA_sparse/ADOL-C_sparse0000644000175200017520000002457312404050706031417 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_sparseNLP.cpp Revision: $$ Contents: class myADOLC_sparseNPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ /** C++ Example NLP for interfacing a problem with IPOPT and ADOL-C. * MyADOL-C_sparseNLP implements a C++ example showing how to interface * with IPOPT and ADOL-C through the TNLP interface. This class * implements a distributed control problem with homogeneous * Neumann boundary conditions, as formulated by Hans Mittelmann as * Examples 4-6 in "Optimization Techniques for Solving Elliptic * Control Problems with Control and State Constraints. Part 2: * Distributed Control" taking sparsity into account. * * exploitation of sparsity !! * */ #include #include "ADOL-C_sparseNLP.hpp" #define alpha_ 0.01 #define b_0j_ 1. #define b_1j_ 1. #define b_i0_ 1. #define b_i1_ 1. double *y_d_; int N_; double h_; double hh_; int y_index(int i, int j) { return j + (N_+2)*i; } int u_index(int i, int j) { return (N_+2)*(N_+2) + (j-1) + (N_)*(i-1); } int pde_index(int i, int j) { return (j-1) + N_*(i-1); } double y_d_cont(double x1, double x2) { return 3. + 5.*(x1*(x1-1.)*x2*(x2-1.)); } adouble fint_cont(double x1, double x2, adouble y, adouble u) { adouble diff_y = y-y_d_cont(x1,x2); return 0.5*(diff_y*diff_y + alpha_*u*u); } adouble d_cont(double x1, double x2, adouble y, adouble u) { return -exp(y) - u; } double fint_cont(double x1, double x2, double y, double u) { double diff_y = y-y_d_cont(x1,x2); return 0.5*(diff_y*diff_y + alpha_*u*u); } double d_cont(double x1, double x2, double y, double u) { return -exp(y) - u; } using namespace Ipopt; /* Constructor. */ MyADOLC_sparseNLP::MyADOLC_sparseNLP() {} MyADOLC_sparseNLP::~MyADOLC_sparseNLP() {} bool MyADOLC_sparseNLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { N_ = 15; h_ = (1.0/(N_+1)); hh_= (h_*h_); y_d_ = new double[(N_+2)*(N_+2)]; for (int j=0; j<= N_+1; j++) { for (int i=0; i<= N_+1; i++) { y_d_[y_index(i,j)] = y_d_cont(h_*1.*i,h_*1.*j); } } n = (N_+2)*(N_+2) + N_*N_; m = N_*N_ + 4*N_; generate_tapes(n, m, nnz_jac_g, nnz_h_lag); // use the C style indexing (0-based) index_style = C_STYLE; return true; } bool MyADOLC_sparseNLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) { // none of the variables have bounds for (Index i=0; i bool MyADOLC_sparseNLP::eval_obj(Index n, const T *x, T& obj_value) { // return the value of the objective function obj_value = 0.; for (int i=1; i<=N_; i++) { for (int j=1; j<= N_; j++) { int iy = y_index(i,j); int iu = u_index(i,j); obj_value += fint_cont(h_*1.*i, h_*1.*j, x[iy], x[iu]); } } obj_value *= hh_; return true; } template bool MyADOLC_sparseNLP::eval_constraints(Index n, const T *x, Index m, T* g) { T val; // compute the discretized PDE for each interior grid point for (int i=1; i<=N_; i++) { for (int j=1; j<=N_; j++) { // Start with the discretized Laplacian operator val = 4.* x[y_index(i,j)] - x[y_index(i-1,j)] - x[y_index(i+1,j)] - x[y_index(i,j-1)] - x[y_index(i,j+1)]; // Add the forcing term (including the step size here) val += hh_*d_cont(h_*1.*i, h_*1.*j,x[y_index(i,j)], x[u_index(i,j)]); g[pde_index(i,j)] = val; } } int ig = N_*N_; // set up the Neumann boundary conditions for (int i=1; i<= N_; i++) { g[ig] = (1.+h_*b_i0_)*x[y_index(i,0)] - x[y_index(i,1)]; ig++; } for (int i=1; i<= N_; i++) { g[ig] = (1.+h_*b_i1_)*x[y_index(i,N_+1)] - x[y_index(i,N_)]; ig++; } for (int j=1; j<= N_; j++) { g[ig] = (1.+h_*b_0j_)*x[y_index(0,j)] - x[y_index(1,j)]; ig++; } for (int j=1; j<= N_; j++) { g[ig] = (1.+h_*b_1j_)*x[y_index(N_+1,j)] - x[y_index(N_,j)]; ig++; } return true; } //************************************************************************* // // // Nothing has to be changed below this point !! // // //************************************************************************* bool MyADOLC_sparseNLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) { eval_obj(n,x,obj_value); return true; } bool MyADOLC_sparseNLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) { gradient(tag_f,n,x,grad_f); return true; } bool MyADOLC_sparseNLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) { eval_constraints(n,x,m,g); return true; } bool MyADOLC_sparseNLP::eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values) { if (values == NULL) { // return the structure of the jacobian for(Index idx=0; idx(x), &nnz_L, &rind_L, &cind_L, &hessval, options_L); for(Index idx = 0; idx < nnz_L ; idx++) { values[idx] = hessval[idx]; } } return true; } void MyADOLC_sparseNLP::finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g, const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq) { printf("\n\nObjective value\n"); printf("f(x*) = %e\n", obj_value); // memory deallocation of ADOL-C variables delete[] obj_lam; delete[] y_d_; free(rind_g); free(cind_g); free(rind_L); free(cind_L); free(jacval); free(hessval); } //*************** ADOL-C part *********************************** void MyADOLC_sparseNLP::generate_tapes(Index n, Index m, Index& nnz_jac_g, Index& nnz_h_lag) { Number *xp = new double[n]; Number *lamp = new double[m]; Number *zl = new double[m]; Number *zu = new double[m]; adouble *xa = new adouble[n]; adouble *g = new adouble[m]; double *lam = new double[m]; double sig; adouble obj_value; double dummy; int i,j,k,l,ii; obj_lam = new double[m+1]; get_starting_point(n, 1, xp, 0, zl, zu, m, 0, lamp); trace_on(tag_f); for(Index idx=0;idx>= dummy; trace_off(); trace_on(tag_g); for(Index idx=0;idx>= dummy; trace_off(); trace_on(tag_L); for(Index idx=0;idx>= dummy; trace_off(); rind_g = NULL; cind_g = NULL; rind_L = NULL; cind_L = NULL; options_g[0] = 0; /* sparsity pattern by index domains (default) */ options_g[1] = 0; /* safe mode (default) */ options_g[2] = 0; options_g[3] = 0; /* column compression (default) */ jacval=NULL; hessval=NULL; sparse_jac(tag_g, m, n, 0, xp, &nnz_jac, &rind_g, &cind_g, &jacval, options_g); nnz_jac_g = nnz_jac; options_L[0] = 0; options_L[1] = 1; sparse_hess(tag_L, n, 0, xp, &nnz_L, &rind_L, &cind_L, &hessval, options_L); nnz_h_lag = nnz_L; delete[] lam; delete[] g; delete[] xa; delete[] zu; delete[] zl; delete[] lamp; delete[] xp; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1/0000755000175200017520000000000013037353015023250 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1/ADOL-C_NLP.cpp0000644000175200017520000001722112404052315025363 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_NLP.cpp Revision: $$ Contents: class myADOLC_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ /** C++ Example NLP for interfacing a problem with IPOPT and ADOL-C. * MyADOL-C_NLP implements a C++ example showing how to interface * with IPOPT and ADOL-C through the TNLP interface. This class * implements the Example 5.1 from "Sparse and Parially Separable * Test Problems for Unconstrained and Equality Constrained * Optimization" by L. Luksan and J. Vlcek ignoring sparsity. * * no exploitation of sparsity !! * */ #include #include "ADOL-C_NLP.hpp" using namespace Ipopt; /* Constructor. */ MyADOLC_NLP::MyADOLC_NLP() {} MyADOLC_NLP::~MyADOLC_NLP(){} bool MyADOLC_NLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { n = 20; m = n-2; // in this example the jacobian is dense. Hence, it contains n*m nonzeros nnz_jac_g = n*m; // the hessian is also dense and has n*n total nonzeros, but we // only need the lower left corner (since it is symmetric) nnz_h_lag = n*(n-1)/2+n; generate_tapes(n, m); // use the C style indexing (0-based) index_style = C_STYLE; return true; } bool MyADOLC_NLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) { // none of the variables have bounds for (Index i=0; i bool MyADOLC_NLP::eval_obj(Index n, const T *x, T& obj_value) { T a1, a2; obj_value = 0.; for (Index i=0; i bool MyADOLC_NLP::eval_constraints(Index n, const T *x, Index m, T* g) { for (Index i=0; i(x),Hess); Index idx = 0; for(Index i = 0; i>= dummy; trace_off(); trace_on(tag_g); for(Index i=0;i>= dummy; trace_off(); trace_on(tag_L); for(Index i=0;i>= dummy; trace_off(); delete[] xa; delete[] xp; delete[] g; delete[] lam; delete[] lamp; delete[] zu; delete[] zl; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1/Makefile0000644000175200017520000000405312247105556024721 0ustar coincoin# ---------------------------------------------------------------------------- # ADOL-C -- Automatic Differentiation by Overloading in C++ # File: Makefile # Revision: $$ # Contents: Makefile for class myADOLC_NPL to interface ADOL-C with Ipopt # # Copyright (c) Andrea Walther # # This file is part of ADOL-C. This software is provided as open source. # Any use, reproduction, or distribution of the software constitutes # recipient's acceptance of the terms of the accompanying license file. # # This code is based on the corresponding makefile contained in the # Ipopt package with the author Andreas Waechter #--------------------------------------------------------------------------- ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGE entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = cpp_example # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = cpp_example.o \ ADOL-C_NLP.o # Definitions for ADOL-C # CHANGE THIS TO YOUR ADOL-C BASE DIRECTORY ADPATH = $(HOME)/AD/ADOL-C/adolc_base_coin/include/adolc ADLIBDIR = $(HOME)/AD/ADOL-C/adolc_base_coin/lib # CHANGEME: Additional libraries ADDLIBS = -Wl,--rpath -Wl,$(ADLIBDIR) -L$(ADLIBDIR) -l${adolclib} $(HOME)/AD/ADOL-C/adolc_base_coin/lib/libColPack.a # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = -I$(ADPATH) ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Ipopt. # ########################################################################## HERE YOU SHOULD USE THE SETTING OF YOUR IPOPT INSTALLATION THIS SHOULD WORK WITH COPY AND PASTEADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1/ADOL-C_NLP.hpp0000644000175200017520000001200012404050706025360 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_NLP.hpp Revision: $$ Contents: class myADOL-C_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.hpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #ifndef __MYADOLCNLP_HPP__ #define __MYADOLCNLP_HPP__ #include #include #define tag_f 1 #define tag_g 2 #define tag_L 3 using namespace Ipopt; class MyADOLC_NLP : public TNLP { public: /** default constructor */ MyADOLC_NLP(); /** default destructor */ virtual ~MyADOLC_NLP(); /**@name Overloaded from TNLP */ //@{ /** Method to return some info about the nlp */ virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style); /** Method to return the bounds for my problem */ virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u); /** Method to return the starting point for the algorithm */ virtual bool get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda); /** Template to return the objective value */ template bool eval_obj(Index n, const T *x, T& obj_value); /** Template to compute contraints */ template bool eval_constraints(Index n, const T *x, Index m, T *g); /** Original method from Ipopt to return the objective value */ /** remains unchanged */ virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); /** Original method from Ipopt to return the gradient of the objective */ /** remains unchanged */ virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); /** Original method from Ipopt to return the constraint residuals */ /** remains unchanged */ virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); /** Original method from Ipopt to return: * 1) The structure of the jacobian (if "values" is NULL) * 2) The values of the jacobian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values); /** Original method from Ipopt to return: * 1) The structure of the hessian of the lagrangian (if "values" is NULL) * 2) The values of the hessian of the lagrangian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values); //@} /** @name Solution Methods */ //@{ /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ virtual void finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g, const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq); //@} //*************** start ADOL-C part *********************************** /** Method to generate the required tapes */ virtual void generate_tapes(Index n, Index m); //*************** end ADOL-C part *********************************** private: /**@name Methods to block default compiler methods. * The compiler automatically generates the following three methods. * Since the default compiler implementation is generally not what * you want (for all but the most simple classes), we usually * put the declarations of these methods in the private section * and never implement them. This prevents the compiler from * implementing an incorrect "default" behavior without us * knowing. (See Scott Meyers book, "Effective C++") * */ //@{ // MyADOLC_NLP(); MyADOLC_NLP(const MyADOLC_NLP&); MyADOLC_NLP& operator=(const MyADOLC_NLP&); //@} //@{ double **Jac; double *obj_lam; double **Hess; //@} }; #endif ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/LuksanVlcek1/cpp_example.cpp0000644000175200017520000000370412404050706026253 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cpp_example.cpp Revision: $$ Contents: example for class myADOLC_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file corresponding file cpp_example.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #include #include #include "ADOL-C_NLP.hpp" using namespace Ipopt; int main(int argv, char* argc[]) { // Create an instance of your nlp... SmartPtr myadolc_nlp = new MyADOLC_NLP(); // Create an instance of the IpoptApplication SmartPtr app = new IpoptApplication(); // Initialize the IpoptApplication and process the options ApplicationReturnStatus status; status = app->Initialize(); if (status != Solve_Succeeded) { printf("\n\n*** Error during initialization!\n"); return (int) status; } status = app->OptimizeTNLP(myadolc_nlp); if (status == Solve_Succeeded) { // Retrieve some statistics about the solve Index iter_count = app->Statistics()->IterationCount(); printf("\n\n*** The problem solved in %d iterations!\n", iter_count); Number final_obj = app->Statistics()->FinalObjective(); printf("\n\n*** The final value of the objective function is %e.\n", final_obj); } return (int) status; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/0000755000175200017520000000000013037353015025632 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/Makefile0000644000175200017520000000405112247105556027301 0ustar coincoin# ---------------------------------------------------------------------------- # ADOL-C -- Automatic Differentiation by Overloading in C++ # File: Makefile # Revision: $$ # Contents: Makefile for class myADOLC_NPL to interface ADOL-C with Ipopt # # Copyright (c) Andrea Walther # # This file is part of ADOL-C. This software is provided as open source. # Any use, reproduction, or distribution of the software constitutes # recipient's acceptance of the terms of the accompanying license file. # # This code is based on the corresponding makefile contained in the # Ipopt package with the author Andreas Waechter #--------------------------------------------------------------------------- ########################################################################## # You can modify this example makefile to fit for your own program. # # Usually, you only need to change the five CHANGE entries below. # ########################################################################## # CHANGEME: This should be the name of your executable EXE = cpp_example # CHANGEME: Here is the name of all object files corresponding to the source # code that you wrote in order to define the problem statement OBJS = cpp_example.o \ ADOL-C_NLP.o # Definitions for ADOL-C # CHANGE THIS TO YOUR ADOL-C BASE DIRECTORY ADPATH = $(HOME)/AD/ADOL-C/adolc_base_210/include/adolc ADLIBDIR = $(HOME)/AD/ADOL-C/adolc_base_210/lib # CHANGEME: Additional libraries ADDLIBS = -Wl,--rpath -Wl,$(ADLIBDIR) -L$(ADLIBDIR) -l${adolclib} $(HOME)/AD/ADOL-C/adolc_base_210/lib/libColPack.a # CHANGEME: Additional flags for compilation (e.g., include flags) ADDINCFLAGS = -I$(ADPATH) ########################################################################## # Usually, you don't have to change anything below. Note that if you # # change certain compiler options, you might have to recompile Ipopt. # ########################################################################## HERE YOU SHOULD USE THE SETTING OF YOUR IPOPT INSTALLATION THIS SHOULD WORK WITH COPY AND PASTE ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/ADOL-C_NLP.hpp0000644000175200017520000001200012404050706027742 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_NLP.hpp Revision: $$ Contents: class myADOL-C_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.hpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #ifndef __MYADOLCNLP_HPP__ #define __MYADOLCNLP_HPP__ #include #include #define tag_f 1 #define tag_g 2 #define tag_L 3 using namespace Ipopt; class MyADOLC_NLP : public TNLP { public: /** default constructor */ MyADOLC_NLP(); /** default destructor */ virtual ~MyADOLC_NLP(); /**@name Overloaded from TNLP */ //@{ /** Method to return some info about the nlp */ virtual bool get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style); /** Method to return the bounds for my problem */ virtual bool get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u); /** Method to return the starting point for the algorithm */ virtual bool get_starting_point(Index n, bool init_x, Number* x, bool init_z, Number* z_L, Number* z_U, Index m, bool init_lambda, Number* lambda); /** Template to return the objective value */ template bool eval_obj(Index n, const T *x, T& obj_value); /** Template to compute contraints */ template bool eval_constraints(Index n, const T *x, Index m, T *g); /** Original method from Ipopt to return the objective value */ /** remains unchanged */ virtual bool eval_f(Index n, const Number* x, bool new_x, Number& obj_value); /** Original method from Ipopt to return the gradient of the objective */ /** remains unchanged */ virtual bool eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f); /** Original method from Ipopt to return the constraint residuals */ /** remains unchanged */ virtual bool eval_g(Index n, const Number* x, bool new_x, Index m, Number* g); /** Original method from Ipopt to return: * 1) The structure of the jacobian (if "values" is NULL) * 2) The values of the jacobian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values); /** Original method from Ipopt to return: * 1) The structure of the hessian of the lagrangian (if "values" is NULL) * 2) The values of the hessian of the lagrangian (if "values" is not NULL) */ /** remains unchanged */ virtual bool eval_h(Index n, const Number* x, bool new_x, Number obj_factor, Index m, const Number* lambda, bool new_lambda, Index nele_hess, Index* iRow, Index* jCol, Number* values); //@} /** @name Solution Methods */ //@{ /** This method is called when the algorithm is complete so the TNLP can store/write the solution */ virtual void finalize_solution(SolverReturn status, Index n, const Number* x, const Number* z_L, const Number* z_U, Index m, const Number* g, const Number* lambda, Number obj_value, const IpoptData* ip_data, IpoptCalculatedQuantities* ip_cq); //@} //*************** start ADOL-C part *********************************** /** Method to generate the required tapes */ virtual void generate_tapes(Index n, Index m); //*************** end ADOL-C part *********************************** private: /**@name Methods to block default compiler methods. * The compiler automatically generates the following three methods. * Since the default compiler implementation is generally not what * you want (for all but the most simple classes), we usually * put the declarations of these methods in the private section * and never implement them. This prevents the compiler from * implementing an incorrect "default" behavior without us * knowing. (See Scott Meyers book, "Effective C++") * */ //@{ // MyADOLC_NLP(); MyADOLC_NLP(const MyADOLC_NLP&); MyADOLC_NLP& operator=(const MyADOLC_NLP&); //@} //@{ double **Jac; double *obj_lam; double **Hess; //@} }; #endif ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/cpp_example.cpp0000644000175200017520000000370412404050706030635 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: cpp_example.cpp Revision: $$ Contents: example for class myADOLC_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file corresponding file cpp_example.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ //************************************************************************* // // // Nothing has to be changed in this file !! // // //************************************************************************* #include #include #include "ADOL-C_NLP.hpp" using namespace Ipopt; int main(int argv, char* argc[]) { // Create an instance of your nlp... SmartPtr myadolc_nlp = new MyADOLC_NLP(); // Create an instance of the IpoptApplication SmartPtr app = new IpoptApplication(); // Initialize the IpoptApplication and process the options ApplicationReturnStatus status; status = app->Initialize(); if (status != Solve_Succeeded) { printf("\n\n*** Error during initialization!\n"); return (int) status; } status = app->OptimizeTNLP(myadolc_nlp); if (status == Solve_Succeeded) { // Retrieve some statistics about the solve Index iter_count = app->Statistics()->IterationCount(); printf("\n\n*** The problem solved in %d iterations!\n", iter_count); Number final_obj = app->Statistics()->FinalObjective(); printf("\n\n*** The final value of the objective function is %e.\n", final_obj); } return (int) status; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ipopt/MittelmannDistCntrlNeumA/ADOL-C_NLP.cpp0000644000175200017520000002412112404050706027744 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ADOL-C_NLP.cpp Revision: $$ Contents: class myADOLC_NPL for interfacing with Ipopt Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. This code is based on the file MyNLP.cpp contained in the Ipopt package with the authors: Carl Laird, Andreas Waechter ----------------------------------------------------------------------------*/ /** C++ Example NLP for interfacing a problem with IPOPT and ADOL-C. * MyADOL-C_NLP implements a C++ example showing how to interface * with IPOPT and ADOL-C through the TNLP interface. This class * implements a distributed control problem with homogeneous * Neumann boundary conditions, as formulated by Hans Mittelmann as * Examples 4-6 in "Optimization Techniques for Solving Elliptic * Control Problems with Control and State Constraints. Part 2: * Distributed Control" ignoring sparsity. * * no exploitation of sparsity !! * */ #include #include "ADOL-C_NLP.hpp" #define alpha_ 0.01 #define b_0j_ 1. #define b_1j_ 1. #define b_i0_ 1. #define b_i1_ 1. double *y_d_; int N_; double h_; double hh_; int y_index(int i, int j) { return j + (N_+2)*i; } int u_index(int i, int j) { return (N_+2)*(N_+2) + (j-1) + (N_)*(i-1); } int pde_index(int i, int j) { return (j-1) + N_*(i-1); } double y_d_cont(double x1, double x2) { return 3. + 5.*(x1*(x1-1.)*x2*(x2-1.)); } adouble fint_cont(double x1, double x2, adouble y, adouble u) { adouble diff_y = y-y_d_cont(x1,x2); return 0.5*(diff_y*diff_y + alpha_*u*u); } adouble d_cont(double x1, double x2, adouble y, adouble u) { return -exp(y) - u; } double fint_cont(double x1, double x2, double y, double u) { double diff_y = y-y_d_cont(x1,x2); return 0.5*(diff_y*diff_y + alpha_*u*u); } double d_cont(double x1, double x2, double y, double u) { return -exp(y) - u; } using namespace Ipopt; /* Constructor. */ MyADOLC_NLP::MyADOLC_NLP() {} MyADOLC_NLP::~MyADOLC_NLP(){} bool MyADOLC_NLP::get_nlp_info(Index& n, Index& m, Index& nnz_jac_g, Index& nnz_h_lag, IndexStyleEnum& index_style) { N_ = 10; h_ = (1.0/(N_+1)); hh_= (h_*h_); y_d_ = new double[(N_+2)*(N_+2)]; for (int j=0; j<= N_+1; j++) { for (int i=0; i<= N_+1; i++) { y_d_[y_index(i,j)] = y_d_cont(h_*1.*i,h_*1.*j); } } n = (N_+2)*(N_+2) + N_*N_; m = N_*N_ + 4*N_; // in this example the jacobian is dense. Hence, it contains n*m nonzeros nnz_jac_g = n*m; // the hessian is also dense and has n*n total nonzeros, but we // only need the lower left corner (since it is symmetric) nnz_h_lag = n*(n-1)/2+n; generate_tapes(n, m); // use the C style indexing (0-based) index_style = C_STYLE; return true; } bool MyADOLC_NLP::get_bounds_info(Index n, Number* x_l, Number* x_u, Index m, Number* g_l, Number* g_u) { // none of the variables have bounds for (Index i=0; i bool MyADOLC_NLP::eval_obj(Index n, const T *x, T& obj_value) { // return the value of the objective function obj_value = 0.; for (int i=1; i<=N_; i++) { for (int j=1; j<= N_; j++) { int iy = y_index(i,j); int iu = u_index(i,j); obj_value += fint_cont(h_*1.*i, h_*1.*j, x[iy], x[iu]); } } obj_value *= hh_; return true; } template bool MyADOLC_NLP::eval_constraints(Index n, const T *x, Index m, T* g) { T val; // compute the discretized PDE for each interior grid point for (int i=1; i<=N_; i++) { for (int j=1; j<=N_; j++) { // Start with the discretized Laplacian operator val = 4.* x[y_index(i,j)] - x[y_index(i-1,j)] - x[y_index(i+1,j)] - x[y_index(i,j-1)] - x[y_index(i,j+1)]; // Add the forcing term (including the step size here) val += hh_*d_cont(h_*1.*i, h_*1.*j,x[y_index(i,j)], x[u_index(i,j)]); g[pde_index(i,j)] = val; } } int ig = N_*N_; // set up the Neumann boundary conditions for (int i=1; i<= N_; i++) { g[ig] = (1.+h_*b_i0_)*x[y_index(i,0)] - x[y_index(i,1)]; ig++; } for (int i=1; i<= N_; i++) { g[ig] = (1.+h_*b_i1_)*x[y_index(i,N_+1)] - x[y_index(i,N_)]; ig++; } for (int j=1; j<= N_; j++) { g[ig] = (1.+h_*b_0j_)*x[y_index(0,j)] - x[y_index(1,j)]; ig++; } for (int j=1; j<= N_; j++) { g[ig] = (1.+h_*b_1j_)*x[y_index(N_+1,j)] - x[y_index(N_,j)]; ig++; } return true; } //************************************************************************* // // // Nothing has to be changed below this point !! // // //************************************************************************* bool MyADOLC_NLP::eval_f(Index n, const Number* x, bool new_x, Number& obj_value) { eval_obj(n,x,obj_value); return true; } bool MyADOLC_NLP::eval_grad_f(Index n, const Number* x, bool new_x, Number* grad_f) { gradient(tag_f,n,x,grad_f); return true; } bool MyADOLC_NLP::eval_g(Index n, const Number* x, bool new_x, Index m, Number* g) { eval_constraints(n,x,m,g); return true; } bool MyADOLC_NLP::eval_jac_g(Index n, const Number* x, bool new_x, Index m, Index nele_jac, Index* iRow, Index *jCol, Number* values) { if (values == NULL) { // return the structure of the jacobian, // assuming that the Jacobian is dense Index idx = 0; for(Index i=0; i(x),Hess); Index idx = 0; for(Index i = 0; i>= dummy; trace_off(); trace_on(tag_g); for(Index i=0;i>= dummy; trace_off(); trace_on(tag_L); for(Index i=0;i>= dummy; trace_off(); delete[] xa; delete[] xp; delete[] g; delete[] lam; delete[] lamp; delete[] zu; delete[] zl; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/clock/0000755000175200017520000000000013037353015020705 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/clock/Makefile.in0000644000175200017520000004622412565145701022770 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/examples/additional_examples/clock DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libclock_la_LIBADD = am_libclock_la_OBJECTS = myclock.lo libclock_la_OBJECTS = $(am_libclock_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libclock_la_SOURCES) DIST_SOURCES = $(libclock_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libclock.la libclock_la_SOURCES = myclock.h myclock.cpp MAINTAINERCLEANFILES = Makefile.in *~ *.orig all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/clock/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/clock/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libclock.la: $(libclock_la_OBJECTS) $(libclock_la_DEPENDENCIES) $(EXTRA_libclock_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libclock_la_OBJECTS) $(libclock_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/myclock.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/clock/myclock.cpp0000644000175200017520000000231111452356477023065 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: myclock.cpp Revision: $Id: myclock.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: timing utilities Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include "myclock.h" /****************************************************************************/ /* CLOCK UTILITIES */ double myclock( int normalize ) { struct timeb tb; ftime(&tb); return ((double)tb.time+(double)tb.millitm/1000.); } void normalize() {} ADOL-C-2.6.3/ADOL-C/examples/additional_examples/clock/myclock.h0000644000175200017520000000244411227420735022526 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: myclock.h Revision: $Id: myclock.h 42 2009-07-15 18:37:17Z awalther $ Contents: timing utilities Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #ifndef _MYCLOCK_H_ #define _MYCLOCK_H_ /****************************************************************************/ /* CLOCKS PER SECOND */ extern double clocksPerSecond; /****************************************************************************/ /* CLOCK */ double myclock(int normalize = 0); /****************************************************************************/ /* NORMALIZE CLOCK */ void normalizeMyclock( void ); #endif ADOL-C-2.6.3/ADOL-C/examples/additional_examples/clock/Makefile.am0000644000175200017520000000127312565145675022764 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## noinst_LTLIBRARIES = libclock.la libclock_la_SOURCES = myclock.h myclock.cpp MAINTAINERCLEANFILES = Makefile.in *~ *.orig ADOL-C-2.6.3/ADOL-C/examples/additional_examples/sparse/0000755000175200017520000000000013037353015021107 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/sparse/sparse_hessian.cpp0000644000175200017520000001665711732376410024645 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse_hessian.cpp Revision: $Id: sparse_hessian.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for computation of sparse hessians Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #include #include #include #define tag 1 double feval(double *x); adouble feval_ad(adouble *x); void printmat(const char* kette, int n, int m, double** M); int main() { int n=6; double f, x[6]; adouble fad, xad[6]; int i, j; /****************************************************************************/ /******* function evaluation ***************/ /****************************************************************************/ for(i=0;i>= f; trace_off(); printf("\n f = %e\n\n\n",f); /****************************************************************************/ /******** For comparisons: Full Hessian ********/ /****************************************************************************/ double **H; H = myalloc2(n,n); hessian(tag,n,x,H); printmat(" H",n,n,H); printf("\n"); /****************************************************************************/ /******* sparse Hessians, complete driver ***************/ /****************************************************************************/ /* coordinate format for Hessian */ unsigned int *rind = NULL; unsigned int *cind = NULL; double *values = NULL; int nnz; int options[2]; options[0] = 0; /* safe mode (default) */ options[1] = 0; /* indirect recovery (default) */ sparse_hess(tag, n, 0, x, &nnz, &rind, &cind, &values, options); printf("In sparse format:\n"); for (i=0;i repeat = 1 */ sparse_hess(tag, n, 0, x, &nnz, &rind, &cind, &values, options); printf("In sparse format:\n"); for (i=0;i Example to illustrate the use of sparse_jac(..), jac_pat(..), generate_seed_jac(..), sparse_jacobian.cpp sparse_hessian --> Example to illustrate the use of sparse_hess(..), hess_pat(..), generate_seed_hess(..) sparse_hessian.cpp jacpatexam --> Example to validate jac_pat(..) and the underlying forward/reverse calls jacpatexam.cpp NOTE: this example program makes use of the clock utility provided in subdirectory ../clock. ADOL-C-2.6.3/ADOL-C/examples/additional_examples/sparse/jacpatexam.cpp0000644000175200017520000004773311732376410023752 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: jacpatexam.cpp Revision: $Id: jacpatexam.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for computation of jacobian sparsity pattern Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include "../clock/myclock.h" #include #include #include using namespace std; /****************************************************************************/ /* DEFINES */ #define TAG 11 /****************************************************************************/ /* EVALUATION FUNCTIONS */ /*--------------------------------------------------------------------------*/ const unsigned int N = 5, M = 6; void eval_small(short tag, double *xp, double *yp) { unsigned int i,j; trace_on(tag); adouble *x,*y; x = new adouble[N]; y = new adouble[M]; for (i=0;i>= yp[j]; delete []x; delete []y; trace_off(1); // force a numbered tape file to be written cout << "\nproblem definition in "<<__FILE__<<", lines "<>= yp[j]; delete []x; delete []y; trace_off(1); // force a numbered tape file to be written cout << "\nproblem definition in "<<__FILE__<<", lines "<> choice ; cout << "\n\nOutput Jacobian pattern? (y/n) ?\b"; cin >> outp; cout << "\n\nCompare with the full Jacobian calculation? (y/n) ?\b"; cin >> full_jac; if (( full_jac == 'y' ) || ( full_jac == 'Y')) full_jac = 1; else full_jac = 0; cout << "----------------------------------------------------------------\n"; /*--------------------------------------------------------------------------*/ if ( choice < 0 ) // Take function in the "eval(...)" routines ------------- { if ( choice > -4 ) { base = new double[N]; for (i=0;i= 0 ) : Take a written tape ------------------------------ { tag = choice; cout << "\nproblem definition in tape "<> basepoint; base = new double[indep]; value = new double[depen]; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; nzref = nz; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; cout << "\n\n\n"; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; cout << "\n\n\n"; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; for (i=0;i maxnz ) maxnz = jacpat[i][0]; } nz_rel = (int) ceil (100*nz / ((double)depen*indep)); cout << nz << " non-zero Jacobian elements of total " << depen*indep << " elements <= " << nz_rel << "%\n"; cout << "min " << minnz << " non-zeros per row; max " << maxnz << " non-zeros per row;\n"; if ( nz != nzref ) cout << "\n\n!!! This method found a different number of non-zeros !!!\n\n"; cout << "\n\n\n"; for (i=0;i&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@@SPARSE_TRUE@noinst_PROGRAMS = sparse_jacobian$(EXEEXT) \ @ADDEXA_TRUE@@SPARSE_TRUE@ sparse_hessian$(EXEEXT) \ @ADDEXA_TRUE@@SPARSE_TRUE@ jacpatexam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/sparse DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am__jacpatexam_SOURCES_DIST = jacpatexam.cpp @SPARSE_TRUE@am_jacpatexam_OBJECTS = jacpatexam.$(OBJEXT) jacpatexam_OBJECTS = $(am_jacpatexam_OBJECTS) @SPARSE_TRUE@jacpatexam_DEPENDENCIES = \ @SPARSE_TRUE@ $(builddir)/../clock/libclock.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am__sparse_hessian_SOURCES_DIST = sparse_hessian.cpp @SPARSE_TRUE@am_sparse_hessian_OBJECTS = sparse_hessian.$(OBJEXT) sparse_hessian_OBJECTS = $(am_sparse_hessian_OBJECTS) sparse_hessian_LDADD = $(LDADD) am__sparse_jacobian_SOURCES_DIST = sparse_jacobian.cpp @SPARSE_TRUE@am_sparse_jacobian_OBJECTS = sparse_jacobian.$(OBJEXT) sparse_jacobian_OBJECTS = $(am_sparse_jacobian_OBJECTS) sparse_jacobian_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(jacpatexam_SOURCES) $(sparse_hessian_SOURCES) \ $(sparse_jacobian_SOURCES) DIST_SOURCES = $(am__jacpatexam_SOURCES_DIST) \ $(am__sparse_hessian_SOURCES_DIST) \ $(am__sparse_jacobian_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig @SPARSE_TRUE@sparse_jacobian_SOURCES = sparse_jacobian.cpp @SPARSE_TRUE@sparse_hessian_SOURCES = sparse_hessian.cpp @SPARSE_TRUE@jacpatexam_SOURCES = jacpatexam.cpp @SPARSE_TRUE@jacpatexam_LDADD = $(builddir)/../clock/libclock.la all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/sparse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/sparse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list jacpatexam$(EXEEXT): $(jacpatexam_OBJECTS) $(jacpatexam_DEPENDENCIES) $(EXTRA_jacpatexam_DEPENDENCIES) @rm -f jacpatexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(jacpatexam_OBJECTS) $(jacpatexam_LDADD) $(LIBS) sparse_hessian$(EXEEXT): $(sparse_hessian_OBJECTS) $(sparse_hessian_DEPENDENCIES) $(EXTRA_sparse_hessian_DEPENDENCIES) @rm -f sparse_hessian$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(sparse_hessian_OBJECTS) $(sparse_hessian_LDADD) $(LIBS) sparse_jacobian$(EXEEXT): $(sparse_jacobian_OBJECTS) $(sparse_jacobian_DEPENDENCIES) $(EXTRA_sparse_jacobian_DEPENDENCIES) @rm -f sparse_jacobian$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(sparse_jacobian_OBJECTS) $(sparse_jacobian_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jacpatexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparse_hessian.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparse_jacobian.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/sparse/sparse_jacobian.cpp0000644000175200017520000002125311732376410024745 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse_jacobian.cpp Revision: $Id: sparse_jacobian.cpp 299 2012-03-21 16:08:40Z kulshres $ Contents: example for computation of sparse jacobians Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #include #include #include #define tag 1 void ceval_ad(adouble *x, adouble *c); void ceval(double *x, double *c); void printmat(const char* name, int n, int m, double** M); int main() { int n=6, m=3; double x[6], c[3]; adouble xad[6], cad[3]; int i, j; /****************************************************************************/ /******* function evaluation ***************/ /****************************************************************************/ for(i=0;i>= c[i]; trace_off(); printf("\n c = "); for(j=0;j reverse mode, */ /* sometimes better than forward mode */ /* due to sparsity structure */ sparse_jac(tag, m, n, 0, x, &nnz, &rind, &cind, &values, options); printf("In sparse format (using row compression): \n"); for (i=0;i repeat = 1 */ sparse_jac(tag, m, n, 1, x, &nnz, &rind, &cind, &values, options); printf("In sparse format:\n"); for (i=0;i reverse mode, */ /* sometimes better than forward mode */ /* due to sparsity structure */ sparse_jac(tag, m, n, 0, x, &nnz, &rind, &cind, &values, options); printf("In sparse format (using row compression): \n"); for (i=0;i&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = paramexam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/param DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_paramexam_OBJECTS = paramexam.$(OBJEXT) paramexam_OBJECTS = $(am_paramexam_OBJECTS) paramexam_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(paramexam_SOURCES) DIST_SOURCES = $(paramexam_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(builddir)/../clock/libclock.la -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/examples/additional_examples/clock AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig paramexam_SOURCES = paramexam.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/param/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/param/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list paramexam$(EXEEXT): $(paramexam_OBJECTS) $(paramexam_DEPENDENCIES) $(EXTRA_paramexam_DEPENDENCIES) @rm -f paramexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(paramexam_OBJECTS) $(paramexam_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramexam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/param/Makefile.am0000644000175200017520000000176612565145675023000 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id$ ## ## Copyright (C) Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/examples/additional_examples/clock LIBS = $(builddir)/../clock/libclock.la -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = paramexam endif paramexam_SOURCES = paramexam.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/param/paramexam.cpp0000644000175200017520000001766112373412350023404 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: paramexam.cpp Revision: $Id$ Contents: example for parameter dependent functions Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include "myclock.h" using namespace std; /****************************************************************************/ /* CONSTANTS & VARIABLES */ const double TE = 0.01; /* originally 0.0 */ const double R = sqrt(2.0); /****************************************************************************/ /* HELMHOLTZ ENERGY */ adouble energy( int n, adouble x[], double bv[] ) { adouble he, xax, bx, tem; int i,j; xax = 0; bx = 0; he = 0; for (i=0; i>= result; trace_off(); reverse(1,1,n,0,1.0,grad); /* reverse computation of gradient */ hessian2(1,n,px,hess); tt1e = myclock(); /*--------------------------------------------------------------------------*/ imd_rev = 1; /* Tracing with keep */ tt2s = myclock(); trace_on(2,imd_rev); for (j=0; j>= result_p; trace_off(); reverse(2,1,n,0,1.0,grad_p); /* reverse computation of gradient */ hessian2(2,n,px,hess_p); tt2e = myclock(); /*--------------------------------------------------------------------------*/ for (j=0; j>= result_a; trace_off(); reverse(3,1,2*n,0,1.0,grad_a); /* reverse computation of gradient */ hessian2(3,2*n,lpx,hess_a); tt3e = myclock(); /*--------------------------------------------------------------------------*/ printTapeStats(stdout,1); printTapeStats(stdout,2); printTapeStats(stdout,3); fprintf(stdout, "%14.6E -- energy\n",result); fprintf(stdout, "%14.6E -- energy\n",result_p); fprintf(stdout, "%14.6E -- energy\n",result_a); /*--------------------------------------------------------------------------*/ for (l=0; l>= result; trace_off(); reverse(1,1,n,0,1.0,grad); /* reverse computation of gradient */ hessian2(1,n,px,hess); trt1e = myclock(); fprintf(stdout, "%14.6E -- energy\n",result); fprintf(stdout, "%14.6E -- energy\n",result_p); fprintf(stdout, "%14.6E -- energy\n",result_a); for (l=0; l Integration of ode with time step as external differentiated function ext_diff_func.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ext_diff_func/Makefile.in0000644000175200017520000004531012565145701024473 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = ext_diff_func$(EXEEXT) subdir = ADOL-C/examples/additional_examples/ext_diff_func DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_ext_diff_func_OBJECTS = ext_diff_func.$(OBJEXT) ext_diff_func_OBJECTS = $(am_ext_diff_func_OBJECTS) ext_diff_func_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(ext_diff_func_SOURCES) DIST_SOURCES = $(ext_diff_func_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig ext_diff_func_SOURCES = ext_diff_func.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/ext_diff_func/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/ext_diff_func/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list ext_diff_func$(EXEEXT): $(ext_diff_func_OBJECTS) $(ext_diff_func_DEPENDENCIES) $(EXTRA_ext_diff_func_DEPENDENCIES) @rm -f ext_diff_func$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(ext_diff_func_OBJECTS) $(ext_diff_func_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ext_diff_func.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ext_diff_func/ext_diff_func.cpp0000644000175200017520000000766012562202137025735 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ext_diff_func.cpp Revision: $Id: ext_diff_func.cpp 608 2015-08-10 20:06:55Z kulshres $ Contents: example for external differentiated functions Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #define h 0.01 #define steps 100 // time step function // double version int euler_step(int n, double *yin, int m, double *yout); // adouble version void euler_step_act(int n, adouble *yin, int m, adouble *yout); // versions for usage as external differentiated function ADOLC_ext_fct zos_for_euler_step; ADOLC_ext_fct_fos_reverse fos_rev_euler_step; ext_diff_fct *edf; int tag_full, tag_part, tag_ext_fct; int main() { // time interval double t0, tf; // state, double and adouble version adouble y[2]; adouble ynew[2]; int n, m; // control, double and adouble version adouble con[2]; double conp[2]; // target value; double f; //variables for derivative caluclation double yp[2], ynewp[2]; double u[2], z[2]; double grad[2]; int i,j; // tape identifiers tag_full = 1; tag_part = 2; tag_ext_fct = 3; // two input variables for external differentiated function n = 2; // two output variables for external differentiated function m = 2; // time interval t0 = 0.0; tf = 1.0; //control conp[0] = 1.0; conp[1] = 1.0; trace_on(tag_full); con[0] <<= conp[0]; con[1] <<= conp[1]; y[0] = con[0]; y[1] = con[1]; for(i=0;i>= f; trace_off(1); gradient(tag_full,2,conp,grad); printf(" full taping:\n gradient=( %f, %f)\n\n",grad[0],grad[1]); // Now using external function facilities // tape external differentiated function trace_on(tag_ext_fct); y[0] <<= conp[0]; y[1] <<= conp[1]; euler_step_act(2,y,2,ynew); ynew[0] >>= f; ynew[1] >>= f; trace_off(1); // register external function edf = reg_ext_fct(euler_step); // information for Zero-Order-Scalar (=zos) forward // yp = new double[2]; // ynewp = new double[2]; edf->zos_forward = zos_for_euler_step; edf->dp_x = yp; edf->dp_y = ynewp; // information for First-Order-Scalar (=fos) reverse edf->fos_reverse = fos_rev_euler_step; edf->dp_U = u; edf->dp_Z = z; trace_on(tag_part); con[0] <<= conp[0]; con[1] <<= conp[1]; y[0] = con[0]; y[1] = con[1]; for(i=0;i>= f; trace_off(1); gradient(tag_part,2,conp,grad); printf(" taping with external function facility:\n gradient=( %f, %f)\n\n",grad[0],grad[1]); return 0; } void euler_step_act(int n, adouble *yin, int m, adouble *yout) { // Euler step, adouble version yout[0] = yin[0]+h*yin[0]; yout[1] = yin[1]+h*2*yin[1]; } int euler_step(int n, double *yin, int m, double *yout) { // Euler step, double version yout[0] = yin[0]+h*yin[0]; yout[1] = yin[1]+h*2*yin[1]; return 1; } int zos_for_euler_step(int n, double *yin, int m, double *yout) { int rc; set_nested_ctx(tag_ext_fct,true); rc = zos_forward(tag_ext_fct, 2, 2, 0, yin, yout); set_nested_ctx(tag_ext_fct,false); return rc; } int fos_rev_euler_step(int n, double *u, int m, double *z, double */* unused */, double */*unused*/) { int rc; set_nested_ctx(tag_ext_fct,true); zos_forward(tag_ext_fct, 2, 2, 1, edf->dp_x, edf->dp_y); rc = fos_reverse(tag_ext_fct, 2, 2, u, z); set_nested_ctx(tag_ext_fct,false); return rc; } ADOL-C-2.6.3/ADOL-C/examples/additional_examples/hessmat/0000755000175200017520000000000013037353015021256 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/hessmat/Makefile.in0000644000175200017520000004511112565145701023333 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = hessmat$(EXEEXT) subdir = ADOL-C/examples/additional_examples/hessmat DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_hessmat_OBJECTS = hessmat.$(OBJEXT) hessmat_OBJECTS = $(am_hessmat_OBJECTS) hessmat_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(hessmat_SOURCES) DIST_SOURCES = $(hessmat_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig hessmat_SOURCES = hessmat.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/hessmat/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/hessmat/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list hessmat$(EXEEXT): $(hessmat_OBJECTS) $(hessmat_DEPENDENCIES) $(EXTRA_hessmat_DEPENDENCIES) @rm -f hessmat$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(hessmat_OBJECTS) $(hessmat_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hessmat.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/hessmat/hessmat.cpp0000644000175200017520000002002212100524437023420 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hessmat.cpp Revision: $Id: hessmat.cpp 387 2013-01-25 15:47:43Z kulshres $ Contents: example for testing the routines: hov_wk_forward ( = Higher Order Vector forward With Keep ) hos_ov_reverse ( = Higher Order Scalar reverse over vectors) Copyright (c) Andrea Walther, Andreas Kowarz, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include #include using namespace std; /****************************************************************************/ /* MAIN */ int main() { int i,j,l,m,n,d,q,bd, keep; /*--------------------------------------------------------------------------*/ /* inputs */ cout << "vector x Hessian x matrix for the function \n\n"; cout << " y[0] = cos(x[0])* ...*cos(x[n]) \n"; cout << " y[1] = x[0]^n \n"; cout << " y[2] = condassign(y[i],y[0]>y[1],y[1],y[0]) \n"; cout << " y[3] = sin(x[0])+ ...+sin(x[n]) \n"; cout << " y[4] = exp(x[0])- ...-exp(x[n]) \n"; cout << " y[5] = pow(y[1],3) \n"; cout << " y[6] += y[5]*y[4] \n"; cout << " y[7] -= y[6]*y[5] \n"; cout << " y[j] = 1/x[0]/ .../x[n], j > 3 \n\n"; cout << " Number of independents = ?\n "; cin >> n; cout << " Number of dependents = ?\n "; cin >> m; cout << " Degree d (for forward) = ?\n"; cin >> d; cout << " keep (degree of corresponding reverse = keep-1) = ?\n"; cout << " keep <= d+1 must be valid \n"; cin >> keep; cout << " Number of directions = ?\n "; cin >> q; /*--------------------------------------------------------------------------*/ /* allocations and inits */ double* xp = new double[n]; /* passive indeps */ double* yp = new double[m]; /* passive depends */ /* vector x Hessian x matrix = Upp x H x XPPP */ double* Up = myalloc(m); /* vector on left-hand side */ double** Upp = myalloc(m,d+1); /* vector on left-hand side */ double*** Xppp = myalloc(n,q,d); /* matrix on right-hand side */ double*** Zppp = myalloc(q,n,d+1); /* result of Up x H x XPPP */ double*** Yppp = myalloc(m,q,d); /* results of needed hos_wk_forward */ /* check results with usual lagra-Hess-vec */ double** Xpp = myalloc(n,d); double** V = myalloc(n,q); double** W = myalloc(q,n); double** H = myalloc(n,n); double** Ypp = myalloc(m,d); double** Zpp = myalloc(n,d+1); /* inits */ for (l=0; ly[1]),y[1],y[0]); #else condassign(y[i],(y[0]>y[1]),y[1],y[0]); #endif break; case 3 : y[i] -= sin(x[j]); break; case 4 : y[i] -= exp(x[j]); break; case 5 : y[5] = pow(y[1],3); case 6 : y[6] += y[5]*y[4]; case 7 : y[7] -= y[6]*y[5]; default : y[i] /= x[j]; } } for (i=0; i>= yp[i] ; trace_off(); /*--------------------------------------------------------------------------*/ /* work on the tape */ /* compute results of lagra_hess_vec */ /* the following is equal to calls inside of lagra_hess_vec(..) */ /* direct calls to the basic routines hos_forward and hos_reverse */ /* seem to be faster than call of lagra_hess_vec(..) */ /* at least in some of our test cases */ hos_forward(1,m,n,d,keep,xp,Xpp,yp,Ypp); hos_reverse(1,m,n,keep-1,Up,Zpp); printf("\n Results of hos_reverse:\n\n"); for (i=0; i<=d; i++) { printf(" d = %d \n",i); for (j=0;j Computation of hessian x matrix hessmat.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/pow/0000755000175200017520000000000013037353015020417 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/pow/Makefile.am0000644000175200017520000000170012565145675022471 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include LIBS = -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = powexam endif powexam_SOURCES = powexam.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/pow/README0000644000175200017520000000135611227416777021322 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## CONTENTS OF THE DIRECTORY powexam --> calculate x^e, both given as user input powexam.cpp ADOL-C-2.6.3/ADOL-C/examples/additional_examples/pow/powexam.cpp0000644000175200017520000001033311452356477022621 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: powexam.cpp Revision: $Id: powexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for computation of n-th power Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include // use of ALL ADOL-C interfaces #include using namespace std; #include /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,tag = 1; int n; double e; cout << "COMPUTATION OF x^e\n\n"; cout << "e=? \n"; // input the desired degree cin >> e; n = (int) e; if (n < 0) n = -n; // allocations and initializations double** X; double** Y; X = myalloc2(1,n+4); Y = myalloc2(1,n+4); cout << "value of x=? \n"; cin >> X[0][0]; // function value = 0. coefficient X[0][1] = 1.0; // first derivative = 1. coefficient X[0][2] = 0.0; // second derivative = 2. coefficient for(i=1; i>= Y[0][0]; // only one dependent adouble trace_off(); // no global adouble has died // end of active section */ double u[1]; // weighting vector u[0]=1; // for reverse call for(i=0; i>= Y[0][0]; // only one dependent adouble trace_off(); // no global adouble has died // end of active section */ u[0]=1; // for reverse call for(i=0; i&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = powexam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/pow DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_powexam_OBJECTS = powexam.$(OBJEXT) powexam_OBJECTS = $(am_powexam_OBJECTS) powexam_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(powexam_SOURCES) DIST_SOURCES = $(powexam_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig powexam_SOURCES = powexam.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/pow/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/pow/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list powexam$(EXEEXT): $(powexam_OBJECTS) $(powexam_DEPENDENCIES) $(EXTRA_powexam_DEPENDENCIES) @rm -f powexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(powexam_OBJECTS) $(powexam_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/powexam.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ode/0000755000175200017520000000000013037353015020361 5ustar coincoinADOL-C-2.6.3/ADOL-C/examples/additional_examples/ode/vfunc_fic.cpp0000644000175200017520000003017411452356477023052 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_fic.cpp Revision: $Id: vfunc_fic.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for function module containing the flow in a channel Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indEPS_ ) (6) void originalVectorFunction( double* indEPS_, double* dEPS_ ) (7) void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_FIC_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "ficexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ int nIntern; double r__; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"FICEXAM Flow in a channel (ADOL-C Example)\n\n"); /* number of indeps & deps */ if (indepDim > 0) nIntern = indepDim; else { fprintf(stdout," number of independents/8 = ? "); fscanf(stdin,"%d",&nIntern); fprintf(stdout,"\n"); } indepDim = nIntern*8; depDim = indepDim; } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { int i, j, var; double xt, h; h = 1.0/nIntern; xt = 0.0; for (i=1; i<=nIntern; i++) { var = 8*(i-1); indeps[var] = xt*xt*(3.0-2.0*xt); indeps[var+1] = 6.0 * xt * (1.0 - xt); indeps[var+2] = 6.0 * (1.0 -2.0*xt); indeps[var+3] = -12.0; for (j=1; j<=4; j++) indeps[var+3+j] = 0.0; xt = xt + h; } r__ = 0; } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The fic function */ int pdficfj ( int n, double* x, double* fvec, double r__, int nIntern ) { /* Initialized data */ static double rho[4] = { .0694318413734436035, .330009490251541138, .66999053955078125, .930568158626556396 }; /* System generated locals */ int i__1; /* Local variables */ static double h__; static int i__, j, k, m; static double w[5], nf, hm, dw[40] /* was [5][8] */, rhnfhk[1280] /* was [4][8][8][5] */, rhoijh; static int eqn, var; --fvec; --x; /* Function Body */ /* Initialization. */ h__ = 1. / (double) (nIntern); hm = 1.; for (m = 0; m <= 4; ++m) { for (i__ = 1; i__ <= 4; ++i__) { rhoijh = hm; for (j = 0; j <= 7; ++j) { nf = 1.; for (k = 0; k <= 7; ++k) { rhnfhk[i__ + (j + (k + (m << 3) << 3) << 2) - 1] = rhoijh / nf; nf *= (double) (k + 1); } rhoijh *= rho[i__ - 1]; } } hm *= h__; } /* Evaluate the function */ /* Initialize arrays. */ i__1 = n; for (j = 1; j <= i__1; ++j) { fvec[j] = 0.; } for (k = 1; k <= 8; ++k) { for (j = 1; j <= 5; ++j) { dw[j + k * 5 - 6] = 0.; } } /* Set up the boundary equations at t = 0. u(0) = 0, u'(0) = 0. */ fvec[1] = x[1]; fvec[2] = x[2]; i__1 = nIntern; for (i__ = 1; i__ <= i__1; ++i__) { var = i__ - 1 << 3; /* Set up the collocation equations. */ eqn = var + 2; for (k = 1; k <= 4; ++k) { for (m = 1; m <= 5; ++m) { w[m - 1] = 0.; for (j = m; j <= 4; ++j) { w[m - 1] += rhnfhk[k + (j - m + (j - m + (j - m << 3) << 3) << 2) - 1] * x[var + j]; dw[m + j * 5 - 6] = rhnfhk[k + (j - m + (j - m + (j - m << 3) << 3) << 2) - 1]; } for (j = 1; j <= 4; ++j) { w[m - 1] += rhnfhk[k + (j + 4 - m + (j + 4 - m + (4 - m + 1 << 3) << 3) << 2) - 1] * x[var + 4 + j]; dw[m + (j + 4) * 5 - 6] = rhnfhk[k + (j + 4 - m + (j + 4 - m + (4 - m + 1 << 3) << 3) << 2) - 1]; } } fvec[eqn + k] = w[4] - r__ * (w[1] * w[2] - w[0] * w[3]); } /* Set up the continuity equations. */ eqn = var + 6; for (m = 1; m <= 4; ++m) { w[m - 1] = 0.; for (j = m; j <= 4; ++j) { w[m - 1] += rhnfhk[(j - m + (j - m << 3)) * 32] * x[var + j] ; dw[m + j * 5 - 6] = rhnfhk[(j - m + (j - m << 3)) * 32]; } for (j = 1; j <= 4; ++j) { w[m - 1] += rhnfhk[(j + 4 - m + (4 - m + 1 << 3)) * 32] * x[ var + 4 + j]; dw[m + (j + 4) * 5 - 6] = rhnfhk[(j + 4 - m + (4 - m + 1 << 3) ) * 32]; } } if (i__ == nIntern) { goto L230; } for (m = 1; m <= 4; ++m) { fvec[eqn + m] = x[var + 8 + m] - w[m - 1]; } } /* Set up the boundary equations at t = 1. u(1) = 1, u'(1) = 0. */ L230: fvec[n - 1] = w[0] - 1.; fvec[n] = w[1]; return 0; } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indeps, double* deps ) { pdficfj(indepDim,indeps,deps,r__,nIntern); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The active fic function */ int dficfj( int n, adouble* x, adouble* fvec, double r__, int nIntern ) { /* Initialized data */ static adouble rho[4] = { .0694318413734436035, .330009490251541138, .66999053955078125, .930568158626556396 }; /* System generated locals */ int i__1; /* Local variables */ static adouble h__; static int i__, j, k, m; static adouble nf, hm, dw[40] /* was [5][8] */, rhnfhk[1280] /* was [4][8][8][5] */, rhoijh; static int eqn, var; adouble w[5]; --fvec; --x; /* Function Body */ /* Initialization. */ h__ = 1. / (double) (nIntern); hm = 1.; for (m = 0; m <= 4; ++m) { for (i__ = 1; i__ <= 4; ++i__) { rhoijh = hm; for (j = 0; j <= 7; ++j) { nf = 1.; for (k = 0; k <= 7; ++k) { rhnfhk[i__ + (j + (k + (m << 3) << 3) << 2) - 1] = rhoijh / nf; nf *= (double) (k + 1); } rhoijh *= rho[i__ - 1]; } } hm *= h__; } /* Evaluate the function */ /* Initialize arrays. */ i__1 = n; for (j = 1; j <= i__1; ++j) { fvec[j] = 0.; } for (k = 1; k <= 8; ++k) { for (j = 1; j <= 5; ++j) { dw[j + k * 5 - 6] = 0.; } } /* Set up the boundary equations at t = 0. u(0) = 0, u'(0) = 0. */ fvec[1] = x[1]; fvec[2] = x[2]; i__1 = nIntern; for (i__ = 1; i__ <= i__1; ++i__) { var = i__ - 1 << 3; /* Set up the collocation equations. */ eqn = var + 2; for (k = 1; k <= 4; ++k) { for (m = 1; m <= 5; ++m) { w[m - 1] = 0.; for (j = m; j <= 4; ++j) { w[m - 1] += rhnfhk[k + (j - m + (j - m + (j - m << 3) << 3) << 2) - 1] * x[var + j]; dw[m + j * 5 - 6] = rhnfhk[k + (j - m + (j - m + (j - m << 3) << 3) << 2) - 1]; } for (j = 1; j <= 4; ++j) { w[m - 1] += rhnfhk[k + (j + 4 - m + (j + 4 - m + (4 - m + 1 << 3) << 3) << 2) - 1] * x[var + 4 + j]; dw[m + (j + 4) * 5 - 6] = rhnfhk[k + (j + 4 - m + (j + 4 - m + (4 - m + 1 << 3) << 3) << 2) - 1]; } } fvec[eqn + k] = w[4] - r__ * (w[1] * w[2] - w[0] * w[3]); } /* Set up the continuity equations. */ eqn = var + 6; for (m = 1; m <= 4; ++m) { w[m - 1] = 0.; for (j = m; j <= 4; ++j) { w[m - 1] += rhnfhk[(j - m + (j - m << 3)) * 32] * x[var + j] ; dw[m + j * 5 - 6] = rhnfhk[(j - m + (j - m << 3)) * 32]; } for (j = 1; j <= 4; ++j) { w[m - 1] += rhnfhk[(j + 4 - m + (4 - m + 1 << 3)) * 32] * x[ var + 4 + j]; dw[m + (j + 4) * 5 - 6] = rhnfhk[(j + 4 - m + (4 - m + 1 << 3) ) * 32]; } } if (i__ != nIntern) { for (m = 1; m <= 4; ++m) { fvec[eqn + m] = x[var + 8 + m] - w[m - 1]; } } } /* Set up the boundary equations at t = 1. u(1) = 1, u'(1) = 0. */ fvec[n - 1] = w[0] - 1.; fvec[n] = w[1]; return 0; } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indeps, double* deps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* activeDeps = new adouble[depDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= *iP++; trace_off(); } #undef _VFUNC_FIC_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ode/vfunc_eutroph.cpp0000644000175200017520000002041011452356477023767 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_eutroph.cpp Revision: $Id: vfunc_eutroph.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for function module containing the eutroph example (based on eutroph.C of version 1.7) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indEPS_ ) (6) void originalVectorFunction( double* indEPS_, double* dEPS_ ) (7) void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_EUTROPH_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "eutrophexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ const double IK = 0.11 ; const double FRZ = 0.3 ; const double EFFUZ = 0.6; const double PRITZ = 1.0e-3; const double RESP = 5.0e-3; const double sinK = 5.0e-3; const double PRITA = 0.1; const double RZ = 1.0e-2; const double K2 = 4.0e-2; const double K3 = 5.0e-1; const double KSP = 2.0e2; const double KSF = 1.0; const double BETA = 100.0/1.25; const double ALPHA = 0.002; const double TRZ = 2.0; const double EPS_P = 0.4; const double FI1 = 230.4; const double FI3 = 282.8; const double FI4 = 127.5; const double FI5 = 141.9; const double p = 40.0; const double DEPTH = 45; const double MORITZ= 0.075; const double Q = 0.786E6; const double VND = 0.265E9; /* fix controls */ const double PRFOS = 0.5*p; const double M = 0.1; const double ZMIX = (45+RZ)/2; const double QIV = 0.297E-02/3; /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"EUTROPHEXAM (ADOL-C Example)\n\n"); /* number of indEPS_ & dEPS_ */ indepDim = 5; depDim = 5; } /****************************************************************************/ /* INITIALIZE INDEPS_ */ void initIndependents( double* indEPS_ ) { indEPS_[0] = 0.5; indEPS_[1] = 0.0005; indEPS_[2] = 4.0; indEPS_[3] = 0.01; /* originally 0.0 */ indEPS_[4] = 0.02; /* originally 0.0 */ } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The eutroph function */ void eutroph( double* indEPS_, double* dEPS_ ) { double T, TEMP, FOTOP, I, PIDI, EPS_, temp, temp2, GROW; double V; T = indEPS_[4]; TEMP = 9.5+7.9*sin(T+FI1); FOTOP = 12.0+4.19*sin(T+280.0); I = 229.0+215.0*sin(T+FI3)+15.3*sin(2.0*T+FI4)+ 21.7*sin(3.0*T+FI5); PIDI = 0.8+.25*cos(T)-.12*cos(2.*T); V = VND; if (T < 72) I *= 0.603; EPS_ = ALPHA * indEPS_[0] + indEPS_[3] + EPS_P; temp = I * exp(-EPS_*ZMIX); temp2 = 2*IK*FOTOP; GROW = 1.2*FOTOP/EPS_/ZMIX * (1.333 * atan (I / temp2) -IK*FOTOP / I * log( 1 + pow((I /temp2 ),2)) -1.333 * atan (temp / temp2) +IK*FOTOP/temp* log( 1+pow(temp/temp2, 2) )) * indEPS_[2] /(KSF+indEPS_[2]) * 0.366 * pow(K2,0.52) * exp(0.09*TEMP) * pow(indEPS_[0],(1-0.52)); dEPS_[0] = GROW - RESP * TEMP * indEPS_[0] - FRZ * indEPS_[0] * indEPS_[1] - sinK * PIDI * indEPS_[0] + (PRITA - indEPS_[0]) * Q/VND; dEPS_[1] = FRZ * indEPS_[0] / K2 * indEPS_[1] / 1000 * EFFUZ*KSP / KSP+indEPS_[0] - RZ * indEPS_[1] - MORITZ * indEPS_[1] + (PRITZ - indEPS_[1] ) * Q/V; dEPS_[2] = K3 * (-GROW + RESP * TEMP * indEPS_[0] + FRZ * indEPS_[0] * indEPS_[1] * (1 - EFFUZ*KSP /(KSP+indEPS_[0]) ) + RZ * K2 * 1000 * indEPS_[1] + MORITZ * K2 * 1000 * indEPS_[1] ) + (PRFOS - indEPS_[2])* Q/V; dEPS_[3] = (- indEPS_[3] * Q + BETA * M / TRZ)/VND; dEPS_[4] = 1; } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indEPS_, double* dEPS_ ) { eutroph(indEPS_,dEPS_); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The active eutroph function */ void activeEutroph( adouble* indEPS_, adouble* dEPS_ ) { adouble T, TEMP, FOTOP, I, PIDI, EPS_, temp, temp2, GROW; double V; T = indEPS_[4]; TEMP = 9.5+7.9*sin(T+FI1); FOTOP = 12.0+4.19*sin(T+280.0); I = 229.0+215.0*sin(T+FI3)+15.3*sin(2.0*T+FI4)+ 21.7*sin(3.0*T+FI5); PIDI = 0.8+.25*cos(T)-.12*cos(2.*T); V = VND; if (T < 72) I *= 0.603; EPS_ = ALPHA * indEPS_[0] + indEPS_[3] + EPS_P; temp = I * exp(-EPS_*ZMIX); temp2 = 2*IK*FOTOP; GROW = 1.2*FOTOP/EPS_/ZMIX * (1.333 * atan (I / temp2) -IK*FOTOP / I * log( 1 + pow((I /temp2 ),2)) -1.333 * atan (temp / temp2) +IK*FOTOP/temp* log( 1+pow(temp/temp2, 2) )) * indEPS_[2] /(KSF+indEPS_[2]) * 0.366 * pow(K2,0.52) * exp(0.09*TEMP) * pow(indEPS_[0],(1-0.52)); dEPS_[0] = GROW - RESP * TEMP * indEPS_[0] - FRZ * indEPS_[0] * indEPS_[1] - sinK * PIDI * indEPS_[0] + (PRITA - indEPS_[0]) * Q/VND; dEPS_[1] = FRZ * indEPS_[0] / K2 * indEPS_[1] / 1000 * EFFUZ*KSP / KSP+indEPS_[0] - RZ * indEPS_[1] - MORITZ * indEPS_[1] + (PRITZ - indEPS_[1] ) * Q/V; dEPS_[2] = K3 * (-GROW + RESP * TEMP * indEPS_[0] + FRZ * indEPS_[0] * indEPS_[1] * (1 - EFFUZ*KSP /(KSP+indEPS_[0]) ) + RZ * K2 * 1000 * indEPS_[1] + MORITZ * K2 * 1000 * indEPS_[1] ) + (PRFOS - indEPS_[2])* Q/V; dEPS_[3] = (- indEPS_[3] * Q + BETA * M / TRZ)/VND; dEPS_[4] = 1; } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) { int i; trace_on(tag); adouble* activeIndEPS_ = new adouble[indepDim]; adouble* activeDEPS_ = new adouble[depDim]; adouble* aIP = activeIndEPS_; double* iP = indEPS_; for (i=0; i>= *iP++; trace_off(); } #undef _VFUNC_EUTROPH_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ode/Makefile.am0000644000175200017520000000274112565145675022441 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include LIBS = $(builddir)/../clock/libclock.la -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig if ADDEXA noinst_PROGRAMS = odexam od2exam od3exam endif noinst_LTLIBRARIES = librobertson.la libeutroph.la libfic.la librobertson_la_SOURCES = vfunc_robertson.cpp libeutroph_la_SOURCES = vfunc_eutroph.cpp libfic_la_SOURCES = vfunc_fic.cpp odexam_SOURCES = vgenodemain.cpp odexam_LDADD = librobertson.la od2exam_SOURCES = vgenodemain.cpp od2exam_LDADD = libeutroph.la od3exam_SOURCES = vgenodemain.cpp od3exam_LDADD = libfic.la ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ode/README0000644000175200017520000000320011227416777021252 0ustar coincoin############################################################################## ## README -- additional information ## Revision: $Id: README 299 2009-02-26 09:20:11Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, ## Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## -------------------------------------------------------------- This directory contains example programs that perform user time measurements of the special ADOL-C drivers forode(..) and accode(..) usually used to solve ordinary differential equations (ODEs). For a demonstration how to apply the drivers to solve ODEs have a look at the documented example code ../../odexam.cpp -------------------------------------------------------------- CONTENTS OF THE DIRECTORY odexam --> A simple ODE example (R^3 --> R^3) [based on the Robertson test problem] vfunc_robertson.cpp od2exam --> Another ODE example (R^5 --> R^5) [based on a eutrophy problem] vfunc_eutroph.cpp od3exam --> Another ODE example (scalable dimension) [flow in channel] vfunc_fic.cpp NOTE: all example programs make use of the "generic" module vgenodemain.cpp and the clock utility provided in subdirectory ../clock. ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ode/vgenodemain.cpp0000644000175200017520000003023312334664415023372 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vgenodemain.cpp Revision: $Id: vgenodemain.cpp 511 2014-05-14 13:01:01Z kulshres $ Contents: example for ODE Generic Main File: for use with function modules containing vector examples (e.g. vgen_eutroph.C) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indEPS_ ) (6) void originalVectorFunction( double* indEPS_, double* dEPS_ ) (7) void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include #include "../clock/myclock.h" #include /****************************************************************************/ /* MACROS */ #define TIMEFORMAT " %12.6E units, %12.6E scunits, %12.6E seconds\n" /****************************************************************************/ /* EXTERNAL STUFF FROM FUNCTION MODULES*/ /*--------------------------------------------------------------------------*/ /* Dimensions */ extern int indepDim; extern int depDim; /*--------------------------------------------------------------------------*/ /* Init Problem Parameters */ extern void initProblemParameters( void ); /*--------------------------------------------------------------------------*/ /* Initialize indeps */ extern void initIndependents( double* indeps ); /*--------------------------------------------------------------------------*/ /* original RHS */ extern void originalVectorFunction( double* indeps, double* deps ); /*--------------------------------------------------------------------------*/ /* taping RHS */ extern void tapingVectorFunction( int tag, double* indeps, double* deps ); /****************************************************************************/ /* MAIN */ int main() { int degree, evalCount, taskCount; int tag = 1; /* tape tag */ int i, j, k, yes; double tau; fprintf(stdout,"GENERIC ODE EXAMPLE (ADOL-C Example)\n\n"); /*------------------------------------------------------------------------*/ /* Initialize all problem parameters (including dimension) */ initProblemParameters(); if (indepDim != depDim) { fprintf(stdout," ERROR indepDim (%d) != depDim (%d)\n",indepDim,depDim); exit(-1); } /*------------------------------------------------------------------------*/ /* Check main parameters */ fprintf(stdout," Highest derivatives =? \n "); scanf("%d",°ree); fprintf(stdout," Number of evaluations =? \n "); scanf("%d",&evalCount); fprintf(stdout," Nonzero scaling paramater =?\n "); scanf("%le",&tau); /*------------------------------------------------------------------------*/ /* Initialize the independent variables */ double* indeps = new double[indepDim]; double* deps = new double[depDim]; double** indeps2 = myalloc(indepDim,degree+1); initIndependents(indeps); for (i=0; i always */ taskCount = 0; fprintf(stdout,"\nTASK %d: Original function evaluation\n", taskCount++); double t00 = myclock(); for (i=1; i<=evalCount; i++) { indeps[1] = 1.0/i; originalVectorFunction(indeps,deps); } double t01 = myclock(); double rtu, stu; if (t01-t00) { stu = 2.0/(t01-t00)/((double)degree)/(((double)degree)+1.0); rtu = 1.0/(t01-t00); fprintf(stdout," "); fprintf(stdout,TIMEFORMAT,1.0,2.0/((double)degree)/(((double)degree)+1.0), (t01-t00)/evalCount); } else { fprintf(stdout," !!! zero timing !!!\n"); fprintf(stdout," set time unit to 1.0\n"); rtu = 1.0; stu = 2.0/((double)degree)/(((double)degree)+1.0); } /****************************************************************************/ /* 1. TAPING THE FUNCTION */ /* ---> always */ fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: Taping the function\n", taskCount++); t00 = myclock(1); /* NOTE: taping will be performed ONCE only */ tapingVectorFunction(tag,indeps,deps); t01 = myclock(); size_t tape_stats[STAT_SIZE]; tapestats(tag,tape_stats); fprintf(stdout,"\n independents %zu\n",tape_stats[NUM_INDEPENDENTS]); fprintf(stdout," dependents %zu\n",tape_stats[NUM_DEPENDENTS]); fprintf(stdout," operations %zu\n",tape_stats[NUM_OPERATIONS]); fprintf(stdout," operations buffer size %zu\n",tape_stats[OP_BUFFER_SIZE]); fprintf(stdout," locations buffer size %zu\n",tape_stats[LOC_BUFFER_SIZE]); fprintf(stdout," constants buffer size %zu\n",tape_stats[VAL_BUFFER_SIZE]); fprintf(stdout," maxlive %zu\n",tape_stats[NUM_MAX_LIVES]); fprintf(stdout," valstack size %zu\n\n",tape_stats[TAY_STACK_SIZE]); fprintf(stdout," "); fprintf(stdout,TIMEFORMAT,(t01-t00)*rtu*evalCount, (t01-t00)*stu*evalCount, (t01-t00)); /****************************************************************************/ /* 2. FORODE */ fprintf(stdout,"--------------------------------------------------------"); fprintf(stdout,"\nTASK %d: forode(tag, n=%d, tau=%f, dnew=%d, X[n][d+1])\n", taskCount++,indepDim,tau,degree); t00 = myclock(); for (j=0; j %14.6E\n", i,err); } return 1; } /****************************************************************************/ /* THAT'S ALL */ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ode/vfunc_robertson.cpp0000644000175200017520000001131011452356477024315 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: vfunc_robertson.cpp Revision: $Id: vfunc_robertson.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: example for function module containing the Robertson test problem (based on odexam.C of version 1.7) Each << function module >> contains: (1) const char* const controlFileName (2) int indepDim; (3) int depDim; (4) void initProblemParameters( void ) (5) void initIndependents( double* indEPS_ ) (6) void originalVectorFunction( double* indEPS_, double* dEPS_ ) (7) void tapingVectorFunction( int tag, double* indEPS_, double* dEPS_ ) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #define _VFUNC_ROBERTSON_C_ /****************************************************************************/ /* INCLUDES */ #include #include /****************************************************************************/ /* GLOBAL VARIABLES */ /*--------------------------------------------------------------------------*/ /* Control file name */ const char* controlFileName = "robertsonexam.ctrl"; /*--------------------------------------------------------------------------*/ /* Dimensions */ int indepDim; int depDim; /*--------------------------------------------------------------------------*/ /* Other problem dependent parameters */ /****************************************************************************/ /* INIT PROBLEM PARAMETERS */ void initProblemParameters( void ) { fprintf(stdout,"ROBERTSONEXAM (ADOL-C Example)\n\n"); /* number of indeps & deps */ indepDim = 3; depDim = 3; } /****************************************************************************/ /* INITIALIZE INDEPs */ void initIndependents( double* indeps ) { indeps[0] = 1.0; indeps[1] = 0.01; /* originally 0.0 */ indeps[2] = 0.02; /* originally 0.0 */ } /****************************************************************************/ /* ORIGINAL SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The Robertson test problem */ void robertson( double* indeps, double* deps ) { deps[0] = -sin(indeps[2]) + 1.0e8*indeps[2]*(1.0-1.0/indeps[0]); deps[1] = -10.0*indeps[0] + 3.0e7*indeps[2]*(1.0-indeps[1]); deps[2] = -deps[0] - deps[1]; } /*--------------------------------------------------------------------------*/ /* The interface function */ void originalVectorFunction( double* indeps, double* deps ) { robertson(indeps,deps); } /****************************************************************************/ /* TAPING SCALAR FUNCTION */ /*--------------------------------------------------------------------------*/ /* The active Robertson test problem */ void activeRobertson( adouble* indeps, adouble* deps ) { deps[0] = -sin(indeps[2]) + 1.0e8*indeps[2]*(1.0-1.0/indeps[0]); deps[1] = -10.0*indeps[0] + 3.0e7*indeps[2]*(1.0-indeps[1]); deps[2] = -deps[0] - deps[1]; } /*--------------------------------------------------------------------------*/ /* The interface function */ void tapingVectorFunction( int tag, double* indeps, double* deps ) { int i; trace_on(tag); adouble* activeIndeps = new adouble[indepDim]; adouble* activeDeps = new adouble[depDim]; adouble* aIP = activeIndeps; double* iP = indeps; for (i=0; i>= *iP++; trace_off(); } #undef _VFUNC_ROBERTSON_C_ ADOL-C-2.6.3/ADOL-C/examples/additional_examples/ode/Makefile.in0000644000175200017520000005253412565145701022445 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ADDEXA_TRUE@noinst_PROGRAMS = odexam$(EXEEXT) od2exam$(EXEEXT) \ @ADDEXA_TRUE@ od3exam$(EXEEXT) subdir = ADOL-C/examples/additional_examples/ode DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libeutroph_la_LIBADD = am_libeutroph_la_OBJECTS = vfunc_eutroph.lo libeutroph_la_OBJECTS = $(am_libeutroph_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libfic_la_LIBADD = am_libfic_la_OBJECTS = vfunc_fic.lo libfic_la_OBJECTS = $(am_libfic_la_OBJECTS) librobertson_la_LIBADD = am_librobertson_la_OBJECTS = vfunc_robertson.lo librobertson_la_OBJECTS = $(am_librobertson_la_OBJECTS) PROGRAMS = $(noinst_PROGRAMS) am_od2exam_OBJECTS = vgenodemain.$(OBJEXT) od2exam_OBJECTS = $(am_od2exam_OBJECTS) od2exam_DEPENDENCIES = libeutroph.la am_od3exam_OBJECTS = vgenodemain.$(OBJEXT) od3exam_OBJECTS = $(am_od3exam_OBJECTS) od3exam_DEPENDENCIES = libfic.la am_odexam_OBJECTS = vgenodemain.$(OBJEXT) odexam_OBJECTS = $(am_odexam_OBJECTS) odexam_DEPENDENCIES = librobertson.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libeutroph_la_SOURCES) $(libfic_la_SOURCES) \ $(librobertson_la_SOURCES) $(od2exam_SOURCES) \ $(od3exam_SOURCES) $(odexam_SOURCES) DIST_SOURCES = $(libeutroph_la_SOURCES) $(libfic_la_SOURCES) \ $(librobertson_la_SOURCES) $(od2exam_SOURCES) \ $(od3exam_SOURCES) $(odexam_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = $(builddir)/../clock/libclock.la -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = librobertson.la libeutroph.la libfic.la librobertson_la_SOURCES = vfunc_robertson.cpp libeutroph_la_SOURCES = vfunc_eutroph.cpp libfic_la_SOURCES = vfunc_fic.cpp odexam_SOURCES = vgenodemain.cpp odexam_LDADD = librobertson.la od2exam_SOURCES = vgenodemain.cpp od2exam_LDADD = libeutroph.la od3exam_SOURCES = vgenodemain.cpp od3exam_LDADD = libfic.la all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/ode/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/additional_examples/ode/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libeutroph.la: $(libeutroph_la_OBJECTS) $(libeutroph_la_DEPENDENCIES) $(EXTRA_libeutroph_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libeutroph_la_OBJECTS) $(libeutroph_la_LIBADD) $(LIBS) libfic.la: $(libfic_la_OBJECTS) $(libfic_la_DEPENDENCIES) $(EXTRA_libfic_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libfic_la_OBJECTS) $(libfic_la_LIBADD) $(LIBS) librobertson.la: $(librobertson_la_OBJECTS) $(librobertson_la_DEPENDENCIES) $(EXTRA_librobertson_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(librobertson_la_OBJECTS) $(librobertson_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list od2exam$(EXEEXT): $(od2exam_OBJECTS) $(od2exam_DEPENDENCIES) $(EXTRA_od2exam_DEPENDENCIES) @rm -f od2exam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(od2exam_OBJECTS) $(od2exam_LDADD) $(LIBS) od3exam$(EXEEXT): $(od3exam_OBJECTS) $(od3exam_DEPENDENCIES) $(EXTRA_od3exam_DEPENDENCIES) @rm -f od3exam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(od3exam_OBJECTS) $(od3exam_LDADD) $(LIBS) odexam$(EXEEXT): $(odexam_OBJECTS) $(odexam_DEPENDENCIES) $(EXTRA_odexam_DEPENDENCIES) @rm -f odexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(odexam_OBJECTS) $(odexam_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_eutroph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_fic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vfunc_robertson.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vgenodemain.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/odexam.vcxproj0000644000175200017520000002025612565364772016524 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj {9E9CADB9-BFA1-6178-7679-6BB8495565A5} Application true v140 Application true v140 Application false v140 Application false v140 true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed Default MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed false Default true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase false true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) $(ProjectDir)..\src;%(AdditionalIncludeDirectories) $(ProjectDir)..\src;%(AdditionalIncludeDirectories) ADOL-C-2.6.3/ADOL-C/examples/detexam.cpp0000644000175200017520000000746411452356477015770 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: detexam.cpp Revision: $Id: detexam.cpp 171 2010-10-04 13:57:19Z kulshres $ Contents: computation of determinants, described in the manual Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include // use of active doubles #include // use of basic forward/reverse // interfaces of ADOL-C #include // use of taping #include using namespace std; /****************************************************************************/ /* ADOUBLE ROUTINE */ int n; adouble **A; // A is an n x n matrix adouble zero = 0; adouble det(int k, int m) // k <= n is the order of the submatrix { if (m == 0) // its column indices return 1.0; else // are encoded in m { adouble *pt = A[k-1]; adouble t = zero; int p = 1; int s; if (k%2) s = 1; else s = -1; for(int i=0; i= p) { if (m == p) { if (s>0) t += *pt; else t -= *pt; } else { if (s>0) t += *pt*det(k-1, m-p); // recursive call to det else t -= *pt*det(k-1, m-p); // recursive call to det } s = -s; } ++pt; p = p1; } return t; } } /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,j, m = 1; int tag = 1; int keep = 1; cout << "COMPUTATION OF DETERMINANTS (ADOL-C Documented Example)\n\n"; cout << "order of matrix = ? \n"; // select matrix size cin >> n; A = new adouble*[n]; adouble ad; trace_on(tag,keep); // tag=1=keep double detout = 0.0, diag = 1.0;// here keep the intermediates for for (i=0; i>= detout; printf("\n %f - %f = %f (should be 0)\n",detout,diag,detout-diag); trace_off(); double u[1]; u[0] = 1.0; double* B = new double[n*n]; reverse(tag,1,n*n,0,u,B); // call reverse to calculate the gradient cout << " \n first base? : "; for (i=0; i // use of active doubles #include // use of "Easy to Use" drivers // gradient(.) and hessian(.) #include // use of taping #include using namespace std; #include #include /****************************************************************************/ /* MAIN PROGRAM */ int main() { int n,i,j; size_t tape_stats[STAT_SIZE]; cout << "SPEELPENNINGS PRODUCT (ADOL-C Documented Example)\n\n"; cout << "number of independent variables = ? \n"; cin >> n; double *xp = new double[n]; double yp = 0.0; adouble *x = new adouble[n]; adouble y = 1; for(i=0; i>= yp; delete[] x; trace_off(1); tapestats(1,tape_stats); // reading of tape statistics cout<<"maxlive "<j) // lower half of hessian errh += fabs(H[i][j]-g[i]/xp[j]); } // end for } // end for cout << yp-1/(1.0+n) << " error in function \n"; cout << errg <<" error in gradient \n"; cout << errh <<" consistency check \n"; return 0; } // end main ADOL-C-2.6.3/ADOL-C/examples/Makefile.am0000644000175200017520000000326512565145675015666 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include LIBS = -l${adolclib} AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig ADOLC-*.tap EXTRA_DIST = adolc_examples.sln \ detexam.vcxproj speelpenning.vcxproj odexam.vcxproj \ tapeless_scalar.vcxproj tapeless_vector.vcxproj \ Readme_VC++.txt if ADDEXA SUBDIRS = additional_examples endif if PAREXA SUBDIRS = additional_examples endif if DOCEXA noinst_PROGRAMS = detexam speelpenning powexam odexam luexam \ tapeless_scalar tapeless_vector endif detexam_SOURCES = detexam.cpp speelpenning_SOURCES = speelpenning.cpp powexam_SOURCES = powexam.cpp odexam_SOURCES = odexam.cpp luexam_SOURCES = luexam.cpp tapeless_scalar_SOURCES = tapeless_scalar.cpp tapeless_vector_SOURCES = tapeless_vector.cpp ADOL-C-2.6.3/ADOL-C/examples/powexam.vcxproj0000644000175200017520000001724112565364772016727 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj {1098784F-EC9E-ABB1-82E1-E06ABFF7478F} Application true v140 Application true v140 Application false v140 Application false v140 true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed Default MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed false Default true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase false true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) ADOL-C-2.6.3/ADOL-C/examples/adolc_examples.sln0000644000175200017520000001213712565364772017327 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "detexam", "detexam.vcxproj", "{6CE9090C-04DC-7E4E-7467-F305FA21EF94}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "odexam", "odexam.vcxproj", "{9E9CADB9-BFA1-6178-7679-6BB8495565A5}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "powexam", "powexam.vcxproj", "{1098784F-EC9E-ABB1-82E1-E06ABFF7478F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "speelpenning", "speelpenning.vcxproj", "{93451EA1-D8E6-FE67-0D00-5E591FEE771C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tapeless_scalar", "tapeless_scalar.vcxproj", "{5BBECE46-5467-9A31-7E5E-3DBBA59C611F}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tapeless_vector", "tapeless_vector.vcxproj", "{869E4942-ABB6-64D9-910C-7127B9BD4C17}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution nosparse|Win32 = nosparse|Win32 nosparse|x64 = nosparse|x64 sparse|Win32 = sparse|Win32 sparse|x64 = sparse|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {6CE9090C-04DC-7E4E-7467-F305FA21EF94}.nosparse|Win32.ActiveCfg = nosparse|Win32 {6CE9090C-04DC-7E4E-7467-F305FA21EF94}.nosparse|Win32.Build.0 = nosparse|Win32 {6CE9090C-04DC-7E4E-7467-F305FA21EF94}.nosparse|x64.ActiveCfg = nosparse|x64 {6CE9090C-04DC-7E4E-7467-F305FA21EF94}.nosparse|x64.Build.0 = nosparse|x64 {6CE9090C-04DC-7E4E-7467-F305FA21EF94}.sparse|Win32.ActiveCfg = sparse|Win32 {6CE9090C-04DC-7E4E-7467-F305FA21EF94}.sparse|Win32.Build.0 = sparse|Win32 {6CE9090C-04DC-7E4E-7467-F305FA21EF94}.sparse|x64.ActiveCfg = sparse|x64 {6CE9090C-04DC-7E4E-7467-F305FA21EF94}.sparse|x64.Build.0 = sparse|x64 {9E9CADB9-BFA1-6178-7679-6BB8495565A5}.nosparse|Win32.ActiveCfg = nosparse|Win32 {9E9CADB9-BFA1-6178-7679-6BB8495565A5}.nosparse|Win32.Build.0 = nosparse|Win32 {9E9CADB9-BFA1-6178-7679-6BB8495565A5}.nosparse|x64.ActiveCfg = nosparse|x64 {9E9CADB9-BFA1-6178-7679-6BB8495565A5}.nosparse|x64.Build.0 = nosparse|x64 {9E9CADB9-BFA1-6178-7679-6BB8495565A5}.sparse|Win32.ActiveCfg = sparse|Win32 {9E9CADB9-BFA1-6178-7679-6BB8495565A5}.sparse|Win32.Build.0 = sparse|Win32 {9E9CADB9-BFA1-6178-7679-6BB8495565A5}.sparse|x64.ActiveCfg = sparse|x64 {9E9CADB9-BFA1-6178-7679-6BB8495565A5}.sparse|x64.Build.0 = sparse|x64 {1098784F-EC9E-ABB1-82E1-E06ABFF7478F}.nosparse|Win32.ActiveCfg = nosparse|Win32 {1098784F-EC9E-ABB1-82E1-E06ABFF7478F}.nosparse|Win32.Build.0 = nosparse|Win32 {1098784F-EC9E-ABB1-82E1-E06ABFF7478F}.nosparse|x64.ActiveCfg = nosparse|x64 {1098784F-EC9E-ABB1-82E1-E06ABFF7478F}.nosparse|x64.Build.0 = nosparse|x64 {1098784F-EC9E-ABB1-82E1-E06ABFF7478F}.sparse|Win32.ActiveCfg = sparse|Win32 {1098784F-EC9E-ABB1-82E1-E06ABFF7478F}.sparse|Win32.Build.0 = sparse|Win32 {1098784F-EC9E-ABB1-82E1-E06ABFF7478F}.sparse|x64.ActiveCfg = sparse|x64 {1098784F-EC9E-ABB1-82E1-E06ABFF7478F}.sparse|x64.Build.0 = sparse|x64 {93451EA1-D8E6-FE67-0D00-5E591FEE771C}.nosparse|Win32.ActiveCfg = nosparse|Win32 {93451EA1-D8E6-FE67-0D00-5E591FEE771C}.nosparse|Win32.Build.0 = nosparse|Win32 {93451EA1-D8E6-FE67-0D00-5E591FEE771C}.nosparse|x64.ActiveCfg = nosparse|x64 {93451EA1-D8E6-FE67-0D00-5E591FEE771C}.nosparse|x64.Build.0 = nosparse|x64 {93451EA1-D8E6-FE67-0D00-5E591FEE771C}.sparse|Win32.ActiveCfg = sparse|Win32 {93451EA1-D8E6-FE67-0D00-5E591FEE771C}.sparse|Win32.Build.0 = sparse|Win32 {93451EA1-D8E6-FE67-0D00-5E591FEE771C}.sparse|x64.ActiveCfg = sparse|x64 {93451EA1-D8E6-FE67-0D00-5E591FEE771C}.sparse|x64.Build.0 = sparse|x64 {5BBECE46-5467-9A31-7E5E-3DBBA59C611F}.nosparse|Win32.ActiveCfg = nosparse|Win32 {5BBECE46-5467-9A31-7E5E-3DBBA59C611F}.nosparse|Win32.Build.0 = nosparse|Win32 {5BBECE46-5467-9A31-7E5E-3DBBA59C611F}.nosparse|x64.ActiveCfg = nosparse|x64 {5BBECE46-5467-9A31-7E5E-3DBBA59C611F}.nosparse|x64.Build.0 = nosparse|x64 {5BBECE46-5467-9A31-7E5E-3DBBA59C611F}.sparse|Win32.ActiveCfg = sparse|Win32 {5BBECE46-5467-9A31-7E5E-3DBBA59C611F}.sparse|Win32.Build.0 = sparse|Win32 {5BBECE46-5467-9A31-7E5E-3DBBA59C611F}.sparse|x64.ActiveCfg = sparse|x64 {5BBECE46-5467-9A31-7E5E-3DBBA59C611F}.sparse|x64.Build.0 = sparse|x64 {869E4942-ABB6-64D9-910C-7127B9BD4C17}.nosparse|Win32.ActiveCfg = nosparse|Win32 {869E4942-ABB6-64D9-910C-7127B9BD4C17}.nosparse|Win32.Build.0 = nosparse|Win32 {869E4942-ABB6-64D9-910C-7127B9BD4C17}.nosparse|x64.ActiveCfg = nosparse|x64 {869E4942-ABB6-64D9-910C-7127B9BD4C17}.nosparse|x64.Build.0 = nosparse|x64 {869E4942-ABB6-64D9-910C-7127B9BD4C17}.sparse|Win32.ActiveCfg = sparse|Win32 {869E4942-ABB6-64D9-910C-7127B9BD4C17}.sparse|Win32.Build.0 = sparse|Win32 {869E4942-ABB6-64D9-910C-7127B9BD4C17}.sparse|x64.ActiveCfg = sparse|x64 {869E4942-ABB6-64D9-910C-7127B9BD4C17}.sparse|x64.Build.0 = sparse|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ADOL-C-2.6.3/ADOL-C/examples/luexam.cpp0000644000175200017520000001756612160137617015626 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: luexam.cpp Revision: $Id: luexam.cpp 431 2013-06-18 20:14:07Z kulshres $ Contents: computation of LU factorization with pivoting Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include using namespace std; adouble findmaxindex(const size_t n, const advector& col, const size_t k) { adouble idx = k; for (size_t j = k + 1; j < n; j++ ) condassign(idx,(fabs(col[j]) - fabs(col[idx])), adouble((double)j)); return idx; } // Assuming A is stored row-wise in the vector void lufactorize(const size_t n, advector& A, advector& p) { adouble idx, tmp; for (size_t j = 0; j < n; j++) p[j] = j; for (size_t k = 0; k < n; k++) { advector column(n); for(size_t j = 0; j < n; j++) condassign(column[j], adouble(double(j - k + 1)), A[j*n + k]); idx = findmaxindex(n, column, k); tmp = p[k]; p[k] = p[idx]; p[idx] = tmp; for(size_t j = 0; j < n; j++) { tmp = A[k*n + j]; A[k*n + j] = A[idx*n + j]; A[idx*n + j] = tmp; } tmp = 1.0/A[k*n + k]; for (size_t i = k + 1; i < n; i++) { A[i*n + k] *= tmp; for (size_t j = k + 1; j < n; j++) { A[i*n + j] -= A[i*n + k] * A[k*n+j]; } } } } void Lsolve(const size_t n, const advector& A, const advector& p, advector& b, advector& x) { for (size_t j = 0; j < n; j++) { x[j] = b[p[j]]; for (size_t k = j+1; k = i) outf << setw(8) << A[i*n + j].value() << " "; else outf << setw(8) << 0.0 << " "; outf << "\n"; } } double norm2(const double *const v, const size_t n) { size_t j; double abs,scale,sum; scale=0.0; sum=0.0; for (j=0; j> n; cout << "---------------------------------\nNow tracing:\n"; rhs = new double[n*n + n]; mat = rhs + n; ans = new double[n]; cout << "file name for matrix = ?\n"; cin >> matrixname; cout << "file name for rhs = ?\n"; cin >> rhsname; matf.open(matrixname.c_str()); for (size_t i = 0; i < n*n; i++) matf >> mat[i]; matf.close(); rhsf.open(rhsname.c_str()); for (size_t i = 0; i < n; i++) rhsf >> rhs[i]; rhsf.close(); { trace_on(tag,keep); // tag=1=keep advector A(n*n), b(n), x(n), p(n); for(size_t i = 0; i < n; i++) b[i] <<= rhs[i]; for(size_t i = 0; i < n*n; i++) A[i] <<= mat[i]; lufactorize(n, A, p); Lsolve(n, A, p, b, x); Rsolve(n, A, x); for(size_t i = 0; i < n; i++) x[i] >>= ans[i]; trace_off(); } err = normresidue(mat, n, rhs, n, ans); normb = norm2(rhs, n); normx = norm2(ans, n); cout << "Norm rhs = " << normb <<"\n"; cout << "Norm solution = " << normx <<"\n"; cout << "Norm of residue = " << err <<"\t relative error = " << err/normx << "\n"; cout << "---------------------------------\nNow computing from trace:\n"; cout << "file name for matrix = ?\n"; cin >> matrixname; cout << "file name for rhs = ?\n"; cin >> rhsname; matf.open(matrixname.c_str()); for (size_t i = 0; i < n*n; i++) matf >> mat[i]; matf.close(); rhsf.open(rhsname.c_str()); for (size_t i = 0; i < n; i++) rhsf >> rhs[i]; rhsf.close(); zos_forward(tag, n, n*n + n, keep, rhs, ans); err = normresidue(mat, n, rhs, n, ans); normb = norm2(rhs, n); normx = norm2(ans, n); cout << "Norm rhs = " << normb <<"\n"; cout << "Norm solution = " << normx <<"\n"; cout << "Norm of residue = " << err <<"\t relative error = " << err/normx <<"\n"; double *ansbar = new double[n]; double *matcol = new double[n]; double *rhsbar = new double[n*n+n]; double *matbar = rhsbar + n; double scprod = 0.0; memset(rhsbar, 0, (n*n+n)*sizeof(double)); memset(ansbar, 0, n*sizeof(double)); for (size_t k = 0; k < n; k++) { cout << "computing gradient of element " << k + 1 << " of solution w.r.t. matrix elements and rhs\n"; ansbar[k] = 1.0; fos_reverse(tag, n, n*n+n, ansbar, rhsbar); for (size_t i = 0; i < n*n + n; i++) cout << "bar[" << i << "] = " << rhsbar[i] << "\n"; for (size_t j = 0; j < n; j++) { for (size_t i = 0; i < n; i++) matcol[i] = mat[i*n + j]; scprod = scalar(rhsbar, matcol, n); cout << "gradient w.r.t. rhs times column " << j + 1 << " of matrix = " << scprod << "\n"; } ansbar[k] = 0.0; } delete[] ansbar; delete[] matcol; delete[] rhsbar; delete[] rhs; delete[] ans; } ADOL-C-2.6.3/ADOL-C/examples/detexam.vcxproj0000644000175200017520000001724112565364772016676 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj {6CE9090C-04DC-7E4E-7467-F305FA21EF94} Application true v140 Application true v140 Application false v140 Application false v140 true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed Default MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed false Default true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase false true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) ADOL-C-2.6.3/ADOL-C/examples/speelpenning.vcxproj0000644000175200017520000001724612565364772017743 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj {93451EA1-D8E6-FE67-0D00-5E591FEE771C} Application true v140 Application true v140 Application false v140 Application false v140 true true true true WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed Default MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MaxSpeed false Default true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase MachineX86 true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) WIN64;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) $(ProjectDir)..\include;%(AdditionalIncludeDirectories) Level3 ProgramDatabase false true Console $(ProjectDir)..\..\MSVisualStudio\v14\$(IntDir)adolc.lib;%(AdditionalDependencies) ADOL-C-2.6.3/ADOL-C/examples/winpackage.sh0000755000175200017520000000113411412425466016260 0ustar coincoinNAMES=(detexam odexam powexam speelpenning tapeless_scalar tapeless_vector) if [[ $# < 1 ]]; then echo "usage: $0 config [arch]" echo "where config is sparse|nosparse" echo "and arch is optionally Win32 or x64" echo "if ommitted arch defaults to Win32" exit 0 fi if [[ $# > 1 ]]; then case $2 in win32|Win32) conf=$1 arch=. cf=$1_win32 ;; x64) conf=x64/$1 arch=x64 cf=$1_x64 ;; esac else conf=$1 arch=. cf=$1_win32 fi mkdir -p tmp mkdir -p tmp/bin for i in ${NAMES[*]} ; do cp $conf/$i.exe tmp/bin done cd tmp zip -r ../adolc_examples_$cf.zip ./ cd .. rm -rf tmp ADOL-C-2.6.3/ADOL-C/examples/Makefile.in0000644000175200017520000006406112565145701015666 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @DOCEXA_TRUE@noinst_PROGRAMS = detexam$(EXEEXT) speelpenning$(EXEEXT) \ @DOCEXA_TRUE@ powexam$(EXEEXT) odexam$(EXEEXT) luexam$(EXEEXT) \ @DOCEXA_TRUE@ tapeless_scalar$(EXEEXT) tapeless_vector$(EXEEXT) subdir = ADOL-C/examples DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_detexam_OBJECTS = detexam.$(OBJEXT) detexam_OBJECTS = $(am_detexam_OBJECTS) detexam_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_luexam_OBJECTS = luexam.$(OBJEXT) luexam_OBJECTS = $(am_luexam_OBJECTS) luexam_LDADD = $(LDADD) am_odexam_OBJECTS = odexam.$(OBJEXT) odexam_OBJECTS = $(am_odexam_OBJECTS) odexam_LDADD = $(LDADD) am_powexam_OBJECTS = powexam.$(OBJEXT) powexam_OBJECTS = $(am_powexam_OBJECTS) powexam_LDADD = $(LDADD) am_speelpenning_OBJECTS = speelpenning.$(OBJEXT) speelpenning_OBJECTS = $(am_speelpenning_OBJECTS) speelpenning_LDADD = $(LDADD) am_tapeless_scalar_OBJECTS = tapeless_scalar.$(OBJEXT) tapeless_scalar_OBJECTS = $(am_tapeless_scalar_OBJECTS) tapeless_scalar_LDADD = $(LDADD) am_tapeless_vector_OBJECTS = tapeless_vector.$(OBJEXT) tapeless_vector_OBJECTS = $(am_tapeless_vector_OBJECTS) tapeless_vector_LDADD = $(LDADD) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(detexam_SOURCES) $(luexam_SOURCES) $(odexam_SOURCES) \ $(powexam_SOURCES) $(speelpenning_SOURCES) \ $(tapeless_scalar_SOURCES) $(tapeless_vector_SOURCES) DIST_SOURCES = $(detexam_SOURCES) $(luexam_SOURCES) $(odexam_SOURCES) \ $(powexam_SOURCES) $(speelpenning_SOURCES) \ $(tapeless_scalar_SOURCES) $(tapeless_vector_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = additional_examples DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = -l${adolclib} LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include AM_LDFLAGS = -L$(top_builddir)/ADOL-C MAINTAINERCLEANFILES = Makefile.in *~ *.orig ADOLC-*.tap EXTRA_DIST = adolc_examples.sln \ detexam.vcxproj speelpenning.vcxproj odexam.vcxproj \ tapeless_scalar.vcxproj tapeless_vector.vcxproj \ Readme_VC++.txt @ADDEXA_TRUE@SUBDIRS = additional_examples @PAREXA_TRUE@SUBDIRS = additional_examples detexam_SOURCES = detexam.cpp speelpenning_SOURCES = speelpenning.cpp powexam_SOURCES = powexam.cpp odexam_SOURCES = odexam.cpp luexam_SOURCES = luexam.cpp tapeless_scalar_SOURCES = tapeless_scalar.cpp tapeless_vector_SOURCES = tapeless_vector.cpp all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/examples/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/examples/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list detexam$(EXEEXT): $(detexam_OBJECTS) $(detexam_DEPENDENCIES) $(EXTRA_detexam_DEPENDENCIES) @rm -f detexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(detexam_OBJECTS) $(detexam_LDADD) $(LIBS) luexam$(EXEEXT): $(luexam_OBJECTS) $(luexam_DEPENDENCIES) $(EXTRA_luexam_DEPENDENCIES) @rm -f luexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(luexam_OBJECTS) $(luexam_LDADD) $(LIBS) odexam$(EXEEXT): $(odexam_OBJECTS) $(odexam_DEPENDENCIES) $(EXTRA_odexam_DEPENDENCIES) @rm -f odexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(odexam_OBJECTS) $(odexam_LDADD) $(LIBS) powexam$(EXEEXT): $(powexam_OBJECTS) $(powexam_DEPENDENCIES) $(EXTRA_powexam_DEPENDENCIES) @rm -f powexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(powexam_OBJECTS) $(powexam_LDADD) $(LIBS) speelpenning$(EXEEXT): $(speelpenning_OBJECTS) $(speelpenning_DEPENDENCIES) $(EXTRA_speelpenning_DEPENDENCIES) @rm -f speelpenning$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(speelpenning_OBJECTS) $(speelpenning_LDADD) $(LIBS) tapeless_scalar$(EXEEXT): $(tapeless_scalar_OBJECTS) $(tapeless_scalar_DEPENDENCIES) $(EXTRA_tapeless_scalar_DEPENDENCIES) @rm -f tapeless_scalar$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(tapeless_scalar_OBJECTS) $(tapeless_scalar_LDADD) $(LIBS) tapeless_vector$(EXEEXT): $(tapeless_vector_OBJECTS) $(tapeless_vector_DEPENDENCIES) $(EXTRA_tapeless_vector_DEPENDENCIES) @rm -f tapeless_vector$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(tapeless_vector_OBJECTS) $(tapeless_vector_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/detexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/luexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/powexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speelpenning.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tapeless_scalar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tapeless_vector.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/examples/tapeless_vector.cpp0000644000175200017520000000400012150623520017500 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: tapeless_vector.cpp Revision: $Id: tapeless_vector.cpp 429 2013-05-27 09:28:48Z kulshres $ Contents: computation of coordinate transform, vector tapeless forward mode described in the manual Copyright (c) Andrea Walther, Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include using namespace std; #include typedef adtl::adouble adouble; int main(int argc, char *argv[]) { adtl::setNumDir(3); adouble x[3], y[3]; for (int i=0; i<3;++i) // Initialize x_i { x[i] = i + 1.0; for (int j=0; j<3;++j) if (i==j) x[i].setADValue(j,1); } cout << endl << "Transform from Cartesian to spherical polar coordinates" << endl << endl; y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]); y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]); y[2] = atan(x[1]/x[0]); cout << "cartesian coordinates: " << endl; cout << "x[0] = " << x[0].getValue() << " x[1] = " << x[1].getValue() << " x[2] = " << x[2].getValue() << endl << endl; cout << "cpherical polar coordinates: " << endl; cout << "y[0] = " << y[0].getValue() << " y[1] = " << y[1].getValue() << " y[2] = " << y[2].getValue() << endl < using namespace std; #include typedef adtl::adouble adouble; int main(int argc, char *argv[]) { adouble x[3], y[3]; for (int i=0; i<3;++i) // Initialize x_i x[i] = i + 1.0; cout << endl << "Compute transform from Cartesian to spherical polar coordinates" << endl << endl; // derivative of y with respect to x0 double one=1.0; x[0].setADValue(&one); y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]); y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]); y[2] = atan(x[1]/x[0]); cout << "cartesian coordinates: " << endl; cout << "x[0] = " << x[0].getValue() << " x[1] = " << x[1].getValue() << " x[2] = " << x[2].getValue() << endl << endl; cout << "cpherical polar coordinates: " << endl; cout << "y[0] = " << y[0].getValue() << " y[1] = " << y[1].getValue() << " y[2] = " << y[2].getValue() << endl < // use of taping #include using namespace std; #include #include /****************************************************************************/ /* MAIN PROGRAM */ int main() { int n,i,j; size_t tape_stats[STAT_SIZE]; cout << "SPEELPENNINGS PRODUCT (ADOL-C Documented Example)\n\n"; cout << "number of independent variables = 100 \n"; n = 100; double *xp = new double[n]; double yp = 0.0; adouble *x = new adouble[n]; adouble y = 1; for(i=0; i>= yp; delete[] x; trace_off(); tapestats(1,tape_stats); // reading of tape statistics cout<<"maxlive "<j) // lower half of hessian errh += fabs(H[i][j]-g[i]/xp[j]); } // end for } // end for cout << yp-1/(1.0+n) << " error in function \n"; cout << errg <<" error in gradient \n"; cout << errh <<" consistency check \n"; if ((errg < 10e-8) && (errh < 10e-8)) printf("TEST PASSED\n"); return 1; } // end main ADOL-C-2.6.3/ADOL-C/test/Makefile.am0000644000175200017520000000261412301171726015004 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 61 2009-12-07 14:49:34Z awalther $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## noinst_PROGRAMS = powexam speelpenning fminmax speelpenning_SOURCES = speelpenning.cpp powexam_SOURCES = powexam.cpp fminmax_SOURCES = fminmax.cpp powexam_LDADD = ../lib${adolclib}.la speelpenning_LDADD = ../lib${adolclib}.la fminmax_LDADD = ../lib${adolclib}.la AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Cygwin AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include EXTRA_DIST = run_tests # This line is necessary to allow VPATH compilation with MS compilers # on Cygwin DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/inc test: powexam speelpenning chmod u+x $(srcdir)/run_tests $(srcdir)/run_tests ADOL-C-2.6.3/ADOL-C/test/fminmax.cpp0000644000175200017520000000025212470347706015121 0ustar coincoin#include int main(int, char **) { double x = 3, y = 4; double a,b; a = fmax(x, y); b = fmin(x, y); return 0; } ADOL-C-2.6.3/ADOL-C/test/powexam.cpp0000644000175200017520000000774711466462255015163 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: powexam.cpp Revision: $Id: powexam.cpp 42 2009-07-15 18:37:17Z awalther $ Contents: computation of n-th power for testing Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /****************************************************************************/ /* INCLUDES */ #include /* use of ALL ADOL-C interfaces */ #include using namespace std; /****************************************************************************/ /* ADOUBLE ROUTINE */ adouble power(adouble x, int n) { adouble z = 1; if (n>0) /* Recursion and branches */ { int nh = n/2; /* that do not depend on */ z = power(x,nh); /* adoubles are fine !!!! */ z *= z; if (2*nh != n) z *= x; return z; } /* end if */ else { if (n==0) /* The local adouble z dies */ return z; /* as it goes out of scope. */ else return 1/power(x,-n); } /* end else */ } /* end power */ /****************************************************************************/ /* MAIN PROGRAM */ int main() { int i,tag = 1; int n; cout << "COMPUTATION OF N-TH POWER (ADOL-C Documented Example)\n\n"; cout << "monomial degree=5 \n"; /* input the desired degree */ n = 5; /* allocations and initializations */ double** X; double** Y; X = myalloc2(1,n+4); Y = myalloc2(1,n+4); X[0][0] = 0.5; /* function value = 0. coefficient */ X[0][1] = 1.0; /* first derivative = 1. coefficient */ for(i=0; i>= Y[0][0]; /* only one dependent adouble */ trace_off(); /* no global adouble has died */ /* end of active section */ double u[1]; /* weighting vector */ double maxerr = 0; u[0]=1; /* for reverse call */ for(i=0; i maxerr) maxerr = abs(Y[0][i]-y.value()); } else { Z[0][i] = Z[0][i-1]/i; /* scale derivative to Taylorcoeff. */ cout << Y[0][i] << " - " << Z[0][i] << " = " << Y[0][i]-Z[0][i] << " (should be 0)\n"; if (abs( Y[0][i]-Z[0][i]) > maxerr) maxerr = abs(Y[0][i]-y.value()); } reverse(tag,1,1,i,u,Z); /* evaluate the (i+1)-st deriv. */ } /* end for */ if (maxerr < 10e-8) printf("TEST PASSED\n"); return 1; } /* end main */ ADOL-C-2.6.3/ADOL-C/test/Makefile.in0000644000175200017520000004742012562262246015030 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = powexam$(EXEEXT) speelpenning$(EXEEXT) \ fminmax$(EXEEXT) subdir = ADOL-C/test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_fminmax_OBJECTS = fminmax.$(OBJEXT) fminmax_OBJECTS = $(am_fminmax_OBJECTS) fminmax_DEPENDENCIES = ../lib${adolclib}.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_powexam_OBJECTS = powexam.$(OBJEXT) powexam_OBJECTS = $(am_powexam_OBJECTS) powexam_DEPENDENCIES = ../lib${adolclib}.la am_speelpenning_OBJECTS = speelpenning.$(OBJEXT) speelpenning_OBJECTS = $(am_speelpenning_OBJECTS) speelpenning_DEPENDENCIES = ../lib${adolclib}.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(fminmax_SOURCES) $(powexam_SOURCES) \ $(speelpenning_SOURCES) DIST_SOURCES = $(fminmax_SOURCES) $(powexam_SOURCES) \ $(speelpenning_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ speelpenning_SOURCES = speelpenning.cpp powexam_SOURCES = powexam.cpp fminmax_SOURCES = fminmax.cpp powexam_LDADD = ../lib${adolclib}.la speelpenning_LDADD = ../lib${adolclib}.la fminmax_LDADD = ../lib${adolclib}.la AM_CFLAGS = @ac_adolc_cflags@ AM_CXXFLAGS = @ac_adolc_cxxflags@ # Here list all include flags, relative to this "srcdir" directory. This # "cygpath" stuff is necessary to compile with native compilers on Cygwin AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include EXTRA_DIST = run_tests # This line is necessary to allow VPATH compilation with MS compilers # on Cygwin DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/inc all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list fminmax$(EXEEXT): $(fminmax_OBJECTS) $(fminmax_DEPENDENCIES) $(EXTRA_fminmax_DEPENDENCIES) @rm -f fminmax$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(fminmax_OBJECTS) $(fminmax_LDADD) $(LIBS) powexam$(EXEEXT): $(powexam_OBJECTS) $(powexam_DEPENDENCIES) $(EXTRA_powexam_DEPENDENCIES) @rm -f powexam$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(powexam_OBJECTS) $(powexam_LDADD) $(LIBS) speelpenning$(EXEEXT): $(speelpenning_OBJECTS) $(speelpenning_DEPENDENCIES) $(EXTRA_speelpenning_DEPENDENCIES) @rm -f speelpenning$(EXEEXT) $(AM_V_CXXLD)$(CXXLINK) $(speelpenning_OBJECTS) $(speelpenning_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fminmax.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/powexam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/speelpenning.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am test: powexam speelpenning chmod u+x $(srcdir)/run_tests $(srcdir)/run_tests # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/test/run_tests0000755000175200017520000000272512106465576014743 0ustar coincoin############################################################################## ## run_unitTest ## Revision: $Id: run_tests 408 2013-02-12 16:19:10Z kulshres $ ## ## Copyright (C) Andrea Walther ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## srcdir="." retval=0 echo " " echo Running tests... echo " " echo Testing powexam... ./powexam >tmpfile 2>&1 grep "TEST PASSED" tmpfile 1>/dev/null 2>&1 if test $? = 0; then echo " " echo " Test passed!" echo " " else retval=-1 echo " " echo " ---- 8< ---- Start of test program output ---- 8< ----" cat tmpfile echo " ---- 8< ---- End of test program output ---- 8< ----" echo " " echo " ******** Test FAILED! ********" echo "Output of the test program is above." fi rm -rf tmpfile echo Testing speelpenning... ./speelpenning >tmpfile 2>&1 grep "TEST PASSED" tmpfile 1>/dev/null 2>&1 if test $? = 0; then echo " " echo " Test passed!" echo " " else retval=-1 echo " " echo " ---- 8< ---- Start of test program output ---- 8< ----" cat tmpfile echo " ---- 8< ---- End of test program output ---- 8< ----" echo " " echo " ******** Test FAILED! ********" echo "Output of the test program is above." fi rm -rf tmpfile exit $retval ADOL-C-2.6.3/ADOL-C/Makefile.in0000644000175200017520000006457612562262246014064 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @BUILD_ADOLC_AMPI_SUPPORT_TRUE@am__append_1 = src/libadolcampi.la @BUILD_ADOLC_AMPI_SUPPORT_TRUE@@DARWIN_TRUE@am__append_2 = -Wl,-undefined,dynamic_lookup @SPARSE_TRUE@am__append_3 = src/sparse/libsparse.la subdir = ADOL-C DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) lib@adolclib@_la_DEPENDENCIES = src/libadolcsrc.la $(am__append_1) \ src/drivers/libdrivers.la src/tapedoc/libtapedoc.la \ src/lie/liblie.la $(am__append_3) am_lib@adolclib@_la_OBJECTS = dummy.lo lib@adolclib@_la_OBJECTS = $(am_lib@adolclib@_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = lib@adolclib@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(lib@adolclib@_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(lib@adolclib@_la_SOURCES) DIST_SOURCES = $(lib@adolclib@_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = src . test include examples DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = $(saveCC) CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = $(saveCXX) CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign @ADDEXA_FALSE@@DOCEXA_FALSE@@PAREXA_FALSE@SUBDIRS = src . test include @ADDEXA_FALSE@@DOCEXA_FALSE@@PAREXA_TRUE@SUBDIRS = src . test examples \ @ADDEXA_FALSE@@DOCEXA_FALSE@@PAREXA_TRUE@ include @ADDEXA_TRUE@@DOCEXA_FALSE@SUBDIRS = src . test examples include @DOCEXA_TRUE@SUBDIRS = src . test examples include MAINTAINERCLEANFILES = Makefile.in lib_LTLIBRARIES = lib@adolclib@.la lib@adolclib@_la_LDFLAGS = -version-info 3:0:1 -no-undefined \ $(am__append_2) lib@adolclib@_la_SOURCES = dummy.cpp lib@adolclib@_la_LIBADD = src/libadolcsrc.la $(am__append_1) \ src/drivers/libdrivers.la src/tapedoc/libtapedoc.la \ src/lie/liblie.la $(am__append_3) BUILT_SOURCES = dummy.cpp all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } lib@adolclib@.la: $(lib@adolclib@_la_OBJECTS) $(lib@adolclib@_la_DEPENDENCIES) $(EXTRA_lib@adolclib@_la_DEPENDENCIES) $(AM_V_CXXLD)$(lib@adolclib@_la_LINK) -rpath $(libdir) $(lib@adolclib@_la_OBJECTS) $(lib@adolclib@_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libLTLIBRARIES \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES dummy.cpp: touch $@ test: cd test; $(MAKE) test .PHONY: test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/include/0000755000175200017520000000000013037353015013411 5ustar coincoinADOL-C-2.6.3/ADOL-C/include/Makefile.am0000644000175200017520000000114212032277512015444 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 38 2009-06-17 15:48:09Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## SUBDIRS = adolcADOL-C-2.6.3/ADOL-C/include/Makefile.in0000644000175200017520000004546512470354460015501 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = adolc all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/include/adolc/0000755000175200017520000000000013037353015014473 5ustar coincoinADOL-C-2.6.3/ADOL-C/include/adolc/checkpointing.h0000644000175200017520000001043212500402400017454 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: checkpointing.h Revision: $Id: checkpointing.h 600 2015-03-12 21:28:32Z kulshres $ Contents: Provides all checkointing interfaces. Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_CHECKPOINTING_H) #define ADOLC_CHECKPOINTING_H 1 #include #include #if defined(__cplusplus) /****************************************************************************/ /* This is all C++ */ typedef int (*ADOLC_TimeStepFuncion) (int n, adouble *x); typedef int (*ADOLC_TimeStepFuncion_double) (int n, double *x); typedef void *(*ADOLC_saveFct) (); typedef void (*ADOLC_restoreFct) (void *); typedef struct CpInfos { ADOLC_TimeStepFuncion function; ADOLC_TimeStepFuncion_double function_double; ADOLC_saveFct saveNonAdoubles; ADOLC_restoreFct restoreNonAdoubles; int steps; int checkpoints; int tapeNumber; /* tape number to be used for checkpointing */ int retaping; /* != 0 forces retaping before every reverse step */ int n; /* number of variables in input and output (n=m) */ adouble *adp_x; /* input of the first step */ adouble *adp_y; /* output of the last step; will be set by ADOLC */ /* these are internal checkpointing variables => do not use */ int check; int capo; int fine; int info; int currentCP; double *dp_internal_for; double *dp_internal_rev; double **dpp_internal_rev; locint index; /* please do not change */ char modeForward; char modeReverse; char *allmem; /* this is dummy to get externfcts and checkpointing both use buffer_temp without a problem */ } CpInfos; ADOLC_DLL_EXPORT CpInfos *reg_timestep_fct(ADOLC_TimeStepFuncion timeStepFunction); ADOLC_DLL_EXPORT int checkpointing (CpInfos *cpInfos); /* if tape with one program and use the tapes with another programm call this * function within the latter */ ADOLC_DLL_EXPORT void reinit_checkpointing(); class CP_Context { public: inline CP_Context(ADOLC_TimeStepFuncion tsf); inline ~CP_Context() {} inline void setDoubleFct(ADOLC_TimeStepFuncion_double tsf); inline void setSaveFct(ADOLC_saveFct sf); inline void setRestoreFct(ADOLC_restoreFct rf); inline void setNumberOfSteps(int number); inline void setNumberOfCheckpoints(int number); inline void setTapeNumber(int tapeNumber); inline void setDimensionXY(int n); inline void setInput(adouble *x); inline void setOutput(adouble *y); inline void setAlwaysRetaping(bool state); inline int checkpointing(); private: inline CP_Context() {} CpInfos *cpInfos; }; CP_Context::CP_Context(ADOLC_TimeStepFuncion tsf) { cpInfos = reg_timestep_fct(tsf); } void CP_Context::setDoubleFct(ADOLC_TimeStepFuncion_double tsf) { cpInfos->function_double = tsf; } void CP_Context::setSaveFct(ADOLC_saveFct sf) { cpInfos->saveNonAdoubles = sf; } void CP_Context::setRestoreFct(ADOLC_restoreFct rf) { cpInfos->restoreNonAdoubles = rf; } void CP_Context::setNumberOfSteps(int number) { cpInfos->steps = number; } void CP_Context::setNumberOfCheckpoints(int number) { cpInfos->checkpoints = number; } void CP_Context::setTapeNumber(int tapeNumber) { cpInfos->tapeNumber = tapeNumber; } void CP_Context::setDimensionXY(int n) { cpInfos->n = n; } void CP_Context::setInput(adouble *x) { cpInfos->adp_x = x; } void CP_Context::setOutput(adouble *y) { cpInfos->adp_y = y; } void CP_Context::setAlwaysRetaping(bool state) { if (state) cpInfos->retaping = 1; else cpInfos->retaping = 0; } int CP_Context::checkpointing() { return ::checkpointing(cpInfos); } #endif /* CPLUSPLUS */ /****************************************************************************/ #endif /* ADOLC_CHECKPOINTING_H */ ADOL-C-2.6.3/ADOL-C/include/adolc/externfcts.h0000644000175200017520000002536512500402400017027 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: externfcts.h Revision: $Id: externfcts.h 600 2015-03-12 21:28:32Z kulshres $ Contents: public functions and data types for extern (differentiated) functions. Copyright (c) Andreas Kowarz, Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_EXTERNFCTS_H) #define ADOLC_EXTERNFCTS_H 1 #include #include BEGIN_C_DECLS typedef int (ADOLC_ext_fct) (int n, double *x, int m, double *y); typedef int (ADOLC_ext_fct_fos_forward) (int n, double *dp_x, double *dp_X, int m, double *dp_y, double *dp_Y); typedef int (ADOLC_ext_fct_fov_forward) (int n, double *dp_x, int p, double **dpp_X, int m, double *dp_y, double **dpp_Y); typedef int (ADOLC_ext_fct_hos_forward) (int n, double *dp_x, int d, double **dpp_X, int m, double *dp_y, double **dpp_Y); typedef int (ADOLC_ext_fct_hov_forward) (int n, double *dp_x, int d, int p, double ***dppp_X, int m, double *dp_y, double ***dppp_Y); typedef int (ADOLC_ext_fct_fos_reverse) (int m, double *dp_U, int n, double *dp_Z, double *dp_x, double *dp_y); typedef int (ADOLC_ext_fct_fov_reverse) (int m, int p, double **dpp_U, int n, double **dpp_Z, double *dp_x, double *dp_y); typedef int (ADOLC_ext_fct_hos_reverse) (int m, double *dp_U, int n, int d, double **dpp_Z); typedef int (ADOLC_ext_fct_hov_reverse) (int m, int p, double **dpp_U, int n, int d, double ***dppp_Z, short **spp_nz); /** * we add a second set of function pointers with a signature expanded by a an integer array iArr * and a parameter iArrLength motivated by externalizing sparse solvers where the sparsity format * may be triples (i,j,A[i][j]) and a number of nonzero entries nz where all these integers are to * be packed into iArr. Doing this will still allow the integers to be stored in the locint part * of the tape. * The alternative to doing this is the introduction of a separate stack to contain the extra data * but this would break the self-containment of the tape. */ typedef int (ADOLC_ext_fct_iArr) (int iArrLength, int *iArr, int n, double *x, int m, double *y); typedef int (ADOLC_ext_fct_iArr_fos_forward) (int iArrLength, int *iArr, int n, double *dp_x, double *dp_X, int m, double *dp_y, double *dp_Y); typedef int (ADOLC_ext_fct_iArr_fov_forward) (int iArrLength, int *iArr, int n, double *dp_x, int p, double **dpp_X, int m, double *dp_y, double **dpp_Y); typedef int (ADOLC_ext_fct_iArr_hos_forward) (int iArrLength, int *iArr, int n, double *dp_x, int d, double **dpp_X, int m, double *dp_y, double **dpp_Y); typedef int (ADOLC_ext_fct_iArr_hov_forward) (int iArrLength, int *iArr, int n, double *dp_x, int d, int p, double ***dppp_X, int m, double *dp_y, double ***dppp_Y); typedef int (ADOLC_ext_fct_iArr_fos_reverse) (int iArrLength, int *iArr, int m, double *dp_U, int n, double *dp_Z, double *dp_x, double *dp_y); typedef int (ADOLC_ext_fct_iArr_fov_reverse) (int iArrLength, int *iArr, int m, int p, double **dpp_U, int n, double **dpp_Z, double *dp_x, double *dp_y); typedef int (ADOLC_ext_fct_iArr_hos_reverse) (int iArrLength, int *iArr, int m, double *dp_U, int n, int d, double **dpp_Z); typedef int (ADOLC_ext_fct_iArr_hov_reverse) (int iArrLength, int *iArr, int m, int p, double **dpp_U, int n, int d, double ***dppp_Z, short **spp_nz); /** * A variable of this type has to be instantiated by reg_ext_fct (see below) and a pointer to it is * returned. Within reg_ext_fct the memberse function and index are properly set. * is likely to be wrong in this case. Use pointers instead. */ typedef struct { /** * DO NOT touch - the function pointer is set through reg_ext_fct */ ADOLC_ext_fct *function; ADOLC_ext_fct_iArr *function_iArr; /** * DO NOT touch - the index is set through reg_ext_fct */ locint index; /** * below are function pointers used for call back from the corresponding ADOL-C trace interpreters; * these function pointers are initialized to 0 by reg_ext_fct; * the user needs to set eplicitly the function pointers for the trace interpreters called in the * application driver */ /** * this points to a method implementing a forward execution of the externally differentiated function dp_y=f(dp_x); * the pointer would typically be set to the same function pointer supplied in the call to reg_ext_fct, * i.e. zos_forward would be equal to function (above) * but there are cases when it makes sense for this to be different as illustrated * in examples/additional_examples/ext_diff_func/ext_diff_func.cpp */ ADOLC_ext_fct *zos_forward; ADOLC_ext_fct_iArr *zos_forward_iArr; /** * this points to a method implementing a forward execution of the externally differentiated function dp_y=f(dp_x) * and computing the projection dp_Y=Jacobian*dp_x * see also the explanation of the dp_X/Y members below. */ ADOLC_ext_fct_fos_forward *fos_forward; ADOLC_ext_fct_iArr_fos_forward *fos_forward_iArr; /** * this points to a method implementing a forward execution of the externally differentiated function dp_y=f(dp_x) * and computing the projection dpp_Y=Jacobian*dpp_x * see also the explanation of the dpp_X/Y members below. */ ADOLC_ext_fct_fov_forward *fov_forward; ADOLC_ext_fct_iArr_fov_forward *fov_forward_iArr; /** * higher order scalar forward for external functions is currently not implemented in uni5_for.c */ ADOLC_ext_fct_hos_forward *hos_forward; ADOLC_ext_fct_iArr_hos_forward *hos_forward_iArr; /** * higher order vector forward for external functions is currently not implemented in uni5_for.c */ ADOLC_ext_fct_hov_forward *hov_forward; ADOLC_ext_fct_iArr_hov_forward *hov_forward_iArr; /** * this points to a method computing the projection dp_Z=transpose(dp_U) * Jacobian * see also the explanation of the dp_U/Z members below. */ ADOLC_ext_fct_fos_reverse *fos_reverse; ADOLC_ext_fct_iArr_fos_reverse *fos_reverse_iArr; /** * this points to a method computing the projection dpp_Z=transpose(dpp_U) * Jacobian * see also the explanation of the dpp_U/Z members below. */ ADOLC_ext_fct_fov_reverse *fov_reverse; ADOLC_ext_fct_iArr_fov_reverse *fov_reverse_iArr; /** * higher order scalar reverse for external functions is currently not implemented in ho_rev.c */ ADOLC_ext_fct_hos_reverse *hos_reverse; ADOLC_ext_fct_iArr_hos_reverse *hos_reverse_iArr; /** * higher order vector reverse for external functions is currently not implemented in ho_rev.c */ ADOLC_ext_fct_hov_reverse *hov_reverse; ADOLC_ext_fct_iArr_hov_reverse *hov_reverse_iArr; /** * The names of the variables below correspond to the formal parameters names in the call back * functions above; */ /** * function and all _forward calls: function argument, dimension [n] */ double *dp_x; /** * fos_forward: tangent direction, dimension [n] */ double *dp_X; /** * fov_forward: seed matrix for p directions, dimensions [n][p] * hos_forward: argument Taylor polynomial coefficients up to order d. dimensions [n][d] */ double **dpp_X; /** * hov_forward: argument Taylor polynomial coefficients up to order d in p directions. dimensions [n][p][d] */ double ***dppp_X; /** * function and all _forward calls: function result, dimension [m] */ double *dp_y; /** * fos_forward: Jacobian projection, dimension [m] */ double *dp_Y; /** * fov_forward: Jacobian projection in p directions, dimension [m][p] * hos_forward: result Taylor polynomial coefficients up to order d. dimensions [m][d] */ double **dpp_Y; /** * hov_forward: result Taylor polynomial coefficients up to order d in p directions. dimensions [m][p][d] */ double ***dppp_Y; /** * fos_reverse and hos_reverse: weight vector, dimension [m] */ double *dp_U; /** * fov_reverse and hov_reverse: p weight vectors, dimensions [p][m] */ double **dpp_U; /** * fos_reverse: Jacobian projection, dimension [n] */ double *dp_Z; /** * fov_reverse: Jacobian projection for p weight vectors, dimensions [p][n] * hos_reverse: adjoint Taylor polynomial coefficients up to order d, dimensions [n][d+1] */ double **dpp_Z; /** * hov_reverse: adjoint Taylor polynomial coefficients up to order d for p weight vectors, dimension [p][n][d+1] */ double ***dppp_Z; /** * hov_reverse: non-zero pattern of dppp_Z, dimension [p][n], see also the hov_reverse ADOL-C driver */ short **spp_nz; /** * track maximal value of n when function is invoked */ locint max_n; /** * track maximal value of m when function is invoked */ locint max_m; /** * make the call such that Adol-C may be used inside * of the externally differentiated function; * defaults to non-0; * this implies certain storage duplication that can * be avoided if no nested use of Adol-C takes place */ char nestedAdolc; /** * if 0, then the 'function' does not change dp_x; * defaults to non-0 which implies dp_x values are saved in taylors */ char dp_x_changes; /** * if 0, then the value of dp_y prior to calling 'function' * is not required for reverse; * defaults to non-0 which implies dp_y values are saved in taylors */ char dp_y_priorRequired; /** * This is an all-memory pointer for allocating and deallocating * all other pointers can point to memory within here. */ char* allmem; } ext_diff_fct; END_C_DECLS #if defined(__cplusplus) /****************************************************************************/ /* This is all C++ */ ADOLC_DLL_EXPORT ext_diff_fct *reg_ext_fct(ADOLC_ext_fct ext_fct); ADOLC_DLL_EXPORT ext_diff_fct *reg_ext_fct(ADOLC_ext_fct_iArr ext_fct); ADOLC_DLL_EXPORT int call_ext_fct (ext_diff_fct *edfct, int n, adouble *xa, int m, adouble *ya); ADOLC_DLL_EXPORT int call_ext_fct (ext_diff_fct *edfct, int iArrLength, int* iArr, int n, adouble *xa, int m, adouble *ya); /** * zeros out the edf pointers and sets bools to defaults */ ADOLC_DLL_EXPORT void edf_zero(ext_diff_fct *edfct); #endif /* __CPLUSPLUS */ /****************************************************************************/ #endif /* ADOLC_EXTERNFCTS_H */ ADOL-C-2.6.3/ADOL-C/include/adolc/internal/0000755000175200017520000000000013037353015016307 5ustar coincoinADOL-C-2.6.3/ADOL-C/include/adolc/internal/adolc_settings.h0000644000175200017520000000241512761540643021474 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc_settings.h Revision: $Id$ Contents: ADOL-C Settings: These parameters might affect the performance of the ADOL-C system; and are set by the configure script during the build. Do not edit this file. Copyright (c) Kshitij Kulshreshtha, Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOLC_SETTINGS_H) #define ADOLC_ADOLC_SETTINGS_H 1 /*--------------------------------------------------------------------------*/ /* ADOL-C data types */ typedef uint32_t locint; /* ensure locint is unsigned */ typedef double revreal; /*--------------------------------------------------------------------------*/ /* Enable/disable asinh, acosh,atanh, erf */ #undef ATRIG_ERF /*--------------------------------------------------------------------------*/ /* Enable/disable advanced branching */ #undef ADOLC_ADVANCED_BRANCHING #endif ADOL-C-2.6.3/ADOL-C/include/adolc/internal/Makefile.am0000644000175200017520000000136612373412415020353 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id$ ## ## Copyright (C) Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## libinternalincludedir = $(pkgincludedir)/internal libinternalinclude_HEADERS = adolc_settings.h \ adubfunc.h paramfunc.h \ common.h usrparms.h EXTRA_DIST = adolc_settings.h.in ADOL-C-2.6.3/ADOL-C/include/adolc/internal/adolc_settings.h.in0000644000175200017520000000246412373412350022075 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc_settings.h Revision: $Id: adolc_settings.h.in 537 2014-08-15 14:10:48Z kulshres $ Contents: ADOL-C Settings: These parameters might affect the performance of the ADOL-C system; and are set by the configure script during the build. Do not edit this file. Copyright (c) Kshitij Kulshreshtha, Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOLC_SETTINGS_H) #define ADOLC_ADOLC_SETTINGS_H 1 /*--------------------------------------------------------------------------*/ /* ADOL-C data types */ typedef @UINT_TYPE@ locint; /* ensure locint is unsigned */ typedef @REAL_TYPE@ revreal; /*--------------------------------------------------------------------------*/ /* Enable/disable asinh, acosh,atanh, erf */ @ATRIG_ERF@ /*--------------------------------------------------------------------------*/ /* Enable/disable advanced branching */ @ADVBRANCH@ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/internal/adubfunc.h0000644000175200017520000001140612633764260020262 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adubfunc.h Revision: $Id$ Contents: operators and functions returning temporaries Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if defined(_IN_CLASS_) && _IN_CLASS_ #if defined(_IN_BADOUBLE_) || defined(_IN_ADUB_) /*--------------------------------------------------------------------------*/ /* Comparison (friends) */ #if defined(ADOLC_ADVANCED_BRANCHING) friend ADOLC_DLL_EXPORT adub operator != ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator == ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator <= ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator >= ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator > ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator < ( const badouble&, const badouble& ); #endif /*--------------------------------------------------------------------------*/ /* sign operators (friends) */ friend ADOLC_DLL_EXPORT adub operator + ( const badouble& x ); friend ADOLC_DLL_EXPORT adub operator - ( const badouble& x ); /*--------------------------------------------------------------------------*/ /* binary operators (friends) */ friend ADOLC_DLL_EXPORT adub operator + ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator + ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub operator + ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub operator - ( const badouble&, const badouble& ); inline friend adub operator - ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub operator - ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub operator * ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator * ( double, const badouble& ); inline friend adub operator * ( const badouble&, double ); inline friend adub operator / ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub operator / ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator / ( double, const badouble& ); /*--------------------------------------------------------------------------*/ /* unary operators (friends) */ friend ADOLC_DLL_EXPORT adub exp ( const badouble& ); friend ADOLC_DLL_EXPORT adub log ( const badouble& ); friend ADOLC_DLL_EXPORT adub sqrt ( const badouble& ); friend ADOLC_DLL_EXPORT adub sin ( const badouble& ); friend ADOLC_DLL_EXPORT adub cos ( const badouble& ); friend ADOLC_DLL_EXPORT adub tan ( const badouble& ); friend ADOLC_DLL_EXPORT adub asin ( const badouble& ); friend ADOLC_DLL_EXPORT adub acos ( const badouble& ); friend ADOLC_DLL_EXPORT adub atan ( const badouble& ); /*--------------------------------------------------------------------------*/ /* special operators (friends) */ /* no internal use of condassign: */ friend ADOLC_DLL_EXPORT adub pow ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub log10 ( const badouble& ); /* Additional ANSI C standard Math functions Added by DWJ on 8/6/90 */ friend ADOLC_DLL_EXPORT adub sinh ( const badouble& ); friend ADOLC_DLL_EXPORT adub cosh ( const badouble& ); friend ADOLC_DLL_EXPORT adub tanh ( const badouble& ); #if defined(ATRIG_ERF) friend ADOLC_DLL_EXPORT adub asinh ( const badouble& ); friend ADOLC_DLL_EXPORT adub acosh ( const badouble& ); friend ADOLC_DLL_EXPORT adub atanh ( const badouble& ); friend ADOLC_DLL_EXPORT adub erf ( const badouble& ); #endif friend ADOLC_DLL_EXPORT adub fabs ( const badouble& ); friend ADOLC_DLL_EXPORT adub ceil ( const badouble& ); friend ADOLC_DLL_EXPORT adub floor ( const badouble& ); friend ADOLC_DLL_EXPORT adub fmax ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub fmax ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub fmax ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub fmin ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub fmin ( double, const badouble& ); friend ADOLC_DLL_EXPORT adub fmin ( const badouble&, double ); friend ADOLC_DLL_EXPORT adub ldexp ( const badouble&, int ); friend ADOLC_DLL_EXPORT adub frexp ( const badouble&, int* ); /*--------------------------------------------------------------------------*/ #endif #endif ADOL-C-2.6.3/ADOL-C/include/adolc/internal/common.h0000644000175200017520000000750712565371243017771 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: common.h Revision: $Id: common.h 634 2015-08-20 15:30:43Z kulshres $ Contents: Common (global) ADOL-C header Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_COMMON_H) #define ADOLC_COMMON_H 1 #include /*--------------------------------------------------------------------------*/ /* standard includes */ #if !defined(__cplusplus) # include # include #else # include # include #endif /*--------------------------------------------------------------------------*/ /* type definitions */ typedef unsigned int uint; /*--------------------------------------------------------------------------*/ /* OpenMP includes */ #if defined(_OPENMP) #include #endif /*--------------------------------------------------------------------------*/ /* system dependent configuration */ #if defined(ADOLC_INTERNAL) # if HAVE_CONFIG_H # include "config.h" /* malloc/calloc/realloc replacments */ # undef ADOLC_NO_MALLOC # undef ADOLC_NO_REALLOC # if !defined(HAVE_MALLOC) # define ADOLC_NO_MALLOC 1 # else # if (HAVE_MALLOC == 0) # define ADOLC_NO_MALLOC 1 # endif /* HAVE_MALLOC == 0 */ # endif /* HAVE_MALLOC */ # if !defined(HAVE_REALLOC) # define ADOLC_NO_REALLOC 1 # else # if (HAVE_REALLOC == 0) # define ADOLC_NO_REALLOC 1 # endif /* HAVE_REALLOC == 0 */ # endif /* HAVE_REALLOC */ # if defined(ADOLC_NO_MALLOC) # include "rpl_malloc.h" # define malloc rpl_malloc # define calloc rpl_calloc # endif /* ADOLC_NO_MALLOC */ # if defined(ADOLC_NO_REALLOC) # include "rpl_malloc.h" # define realloc rpl_realloc # endif /* ADOLC_NO_REALLOC */ # ifndef HAVE_TRUNC # define trunc(x) ( (x<0) ? ceil(x) : floor(x) ) # endif # endif /* HAVE_CONFIG_H */ #endif /* ADOLC_INTERNAL */ /*--------------------------------------------------------------------------*/ /* user parameters and settings */ #include #include /*--------------------------------------------------------------------------*/ /* windows dll exports/imports */ #if defined(ADOLC_DLL) # define ADOLC_DLL_EXPORT __declspec(dllexport) # define ADOLC_DLL_EXPIMP __declspec(dllexport) #elif defined(_MSC_VER) # define ADOLC_DLL_EXPORT # define ADOLC_DLL_EXPIMP __declspec(dllimport) #else # define ADOLC_DLL_EXPORT # define ADOLC_DLL_EXPIMP #endif /*--------------------------------------------------------------------------*/ /* further helpful macros */ #if defined(__cplusplus) # define BEGIN_C_DECLS extern "C" { # define END_C_DECLS } #else # define BEGIN_C_DECLS # define END_C_DECLS #endif #define MAXDEC(a,b) do { revreal __r = (b); if ( __r > (a) ) (a) = __r; } while (0) #define MAXDECI(a,b) do { int __r = (b); if ( __r > (a) ) (a) = __r; } while (0) #define MINDECR(a,b) do { revreal __r = (b); if ( __r < (a) ) (a) = __r; } while (0) #define MINDEC(a,b) do { int __r = (b); if ( __r < (a) ) (a) = __r; } while (0) #define MAX_ADOLC(a,b) ( (a)<(b)? (b):(a) ) #define MIN_ADOLC(a,b) ( (a)>(b)? (b):(a) ) /*--------------------------------------------------------------------------*/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/internal/Makefile.in0000644000175200017520000004275312470354460020374 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include/adolc/internal DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/adolc_settings.h.in $(libinternalinclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = adolc_settings.h CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libinternalincludedir)" HEADERS = $(libinternalinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libinternalincludedir = $(pkgincludedir)/internal libinternalinclude_HEADERS = adolc_settings.h \ adubfunc.h paramfunc.h \ common.h usrparms.h EXTRA_DIST = adolc_settings.h.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/internal/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/internal/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): adolc_settings.h: $(top_builddir)/config.status $(srcdir)/adolc_settings.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libinternalincludeHEADERS: $(libinternalinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libinternalinclude_HEADERS)'; test -n "$(libinternalincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libinternalincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libinternalincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libinternalincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libinternalincludedir)" || exit $$?; \ done uninstall-libinternalincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libinternalinclude_HEADERS)'; test -n "$(libinternalincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libinternalincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libinternalincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libinternalincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libinternalincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libinternalincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-libinternalincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/include/adolc/internal/paramfunc.h0000644000175200017520000001477712761540625020464 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: paramfunc.h Revision: $Id$ Contents: operators for parameter dependent functions Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if defined(_IN_CLASS_) && _IN_CLASS_ #if defined(_IN_BADOUBLE_) || defined(_IN_ADUB_) || defined(_IN_PDOUBLE_) #if defined(ADOLC_ADVANCED_BRANCHING) inline friend adub operator != ( const pdouble&, const badouble&); friend ADOLC_DLL_EXPORT adub operator != ( const badouble&, const pdouble&); inline friend adub operator == ( const pdouble&, const badouble&); friend ADOLC_DLL_EXPORT adub operator == ( const badouble&, const pdouble&); inline friend adub operator <= ( const pdouble&, const badouble&); friend ADOLC_DLL_EXPORT adub operator <= ( const badouble&, const pdouble&); inline friend adub operator >= ( const pdouble&, const badouble&); friend ADOLC_DLL_EXPORT adub operator >= ( const badouble&, const pdouble&); inline friend adub operator > ( const pdouble&, const badouble&); friend ADOLC_DLL_EXPORT adub operator > ( const badouble&, const pdouble&); inline friend adub operator < ( const pdouble&, const badouble&); friend ADOLC_DLL_EXPORT adub operator < ( const badouble&, const pdouble&); #else #if defined(_IN_BADOUBLE_) || defined(_IN_PDOUBLE_) inline friend int operator != ( const pdouble&, const badouble&); inline friend int operator != ( const badouble&, const pdouble&); inline friend int operator == ( const pdouble&, const badouble&); inline friend int operator == ( const badouble&, const pdouble&); inline friend int operator <= ( const pdouble&, const badouble&); inline friend int operator <= ( const badouble&, const pdouble&); inline friend int operator >= ( const pdouble&, const badouble&); inline friend int operator >= ( const badouble&, const pdouble&); inline friend int operator > ( const pdouble&, const badouble&); inline friend int operator > ( const badouble&, const pdouble&); inline friend int operator < ( const pdouble&, const badouble&); inline friend int operator < ( const badouble&, const pdouble&); #endif #endif inline friend adub operator + ( const pdouble&, const badouble&); inline friend adub operator + ( const pdouble&, double); inline friend adub operator + ( double, const pdouble&); friend ADOLC_DLL_EXPORT adub operator + ( const badouble&, const pdouble&); friend ADOLC_DLL_EXPORT adub operator - ( const pdouble&); friend ADOLC_DLL_EXPORT adub operator - ( const badouble&, const pdouble&); inline friend adub operator - ( const pdouble&, double ); inline friend adub operator - ( double, const pdouble& ); inline friend adub operator - ( const pdouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub operator * ( const badouble&, const pdouble&); inline friend adub operator * ( const pdouble&, const badouble& ); inline friend adub operator * ( const pdouble&, double ); inline friend adub operator * ( double, const pdouble& ); friend ADOLC_DLL_EXPORT adub recipr( const pdouble& ); inline friend adub operator / ( const badouble&, const pdouble& ); inline friend adub operator / ( double, const pdouble& ); inline friend adub operator / ( const pdouble&, double ); friend ADOLC_DLL_EXPORT adub operator / ( const pdouble&, const badouble& ); friend ADOLC_DLL_EXPORT adub pow ( const badouble&, const pdouble& ); friend ADOLC_DLL_EXPORT adouble pow ( const pdouble&, const badouble& ); inline friend adub fmax ( const pdouble&, const badouble& ); inline friend adub fmax ( const badouble&, const pdouble& ); inline friend adub fmin ( const pdouble&, const badouble& ); inline friend adub fmin ( const badouble&, const pdouble& ); /*--------------------------------------------------------------------------*/ /* unary operators (friends) */ inline friend ADOLC_DLL_EXPORT adub exp ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub log ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub sqrt ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub sin ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub cos ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub tan ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub asin ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub acos ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub atan ( const pdouble& ); /*--------------------------------------------------------------------------*/ /* special operators (friends) */ /* no internal use of condassign: */ inline friend ADOLC_DLL_EXPORT adub pow ( const pdouble&, double ); inline friend ADOLC_DLL_EXPORT adub log10 ( const pdouble& ); /* Additional ANSI C standard Math functions Added by DWJ on 8/6/90 */ inline friend ADOLC_DLL_EXPORT adub sinh ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub cosh ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub tanh ( const pdouble& ); #if defined(ATRIG_ERF) inline friend ADOLC_DLL_EXPORT adub asinh ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub acosh ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub atanh ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub erf ( const pdouble& ); #endif inline friend ADOLC_DLL_EXPORT adub fabs ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub ceil ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub floor ( const pdouble& ); inline friend ADOLC_DLL_EXPORT adub fmax ( const pdouble&, const pdouble& ); inline friend ADOLC_DLL_EXPORT adub fmax ( double, const pdouble& ); inline friend ADOLC_DLL_EXPORT adub fmax ( const pdouble&, double ); inline friend ADOLC_DLL_EXPORT adub fmin ( const pdouble&, const pdouble& ); inline friend ADOLC_DLL_EXPORT adub fmin ( double, const pdouble& ); inline friend ADOLC_DLL_EXPORT adub fmin ( const pdouble&, double ); inline friend ADOLC_DLL_EXPORT adub ldexp ( const pdouble&, int ); inline friend ADOLC_DLL_EXPORT adub frexp ( const pdouble&, int* ); /*--------------------------------------------------------------------------*/ #endif #endif ADOL-C-2.6.3/ADOL-C/include/adolc/internal/usrparms.h0000644000175200017520000000634712672541233020353 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: usrparms.h Revision: $Id: usrparms.h 682 2016-03-17 14:43:39Z kulshres $ Contents: User parameters: These parameters might affect the performance of the ADOL-C system; they are intended to be tweeked by users and local maintainence personal. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_USRPARMS_H) #define ADOLC_USRPARMS_H 1 /*--------------------------------------------------------------------------*/ /* Buffer sizes */ #define OBUFSIZE 524288 /* 16384 or 65536 */ #define LBUFSIZE 524288 /* 16384 or 65536 */ #define VBUFSIZE 524288 /* 16384 or 65536 */ /*--------------------------------------------------------------------------*/ /* Buffer size for temporary Taylor store */ #define TBUFSIZE 524288 /* 16384 or 65536 */ /*--------------------------------------------------------------------------*/ /* Number of temporary Taylor stores*/ #define TBUFNUM 32 /*--------------------------------------------------------------------------*/ /* Data types used by Fortran callable versions of functions */ #define fint long #define fdouble double /*--------------------------------------------------------------------------*/ /* Definionion of inf and NaN */ #define inf_num 1.0 /* don't undefine these; on non-IEEE machines */ #define inf_den 0.0 /* change the values to get small fractions */ #define non_num 0.0 /* (inf_num/inf_den) and (non_num/non_den) */ #define non_den 0.0 /* respectively, see the documentation */ #define ADOLC_EPS 10E-20 /* for test on zero */ /****************************************************************************/ /* Standard output used for diagnostics by ADOL-C, */ /* e.g. stdout or stderr or whatever file identifier */ #define DIAG_OUT stderr /****************************************************************************/ /* Tells ADOL-C which name space offers the mathematical functions */ #define ADOLC_MATH_NSP std /* For error function with gcc compiler */ #define ADOLC_MATH_NSP_ERF /*--------------------------------------------------------------------------*/ /* Constants used by the checkpointing part (revolve) */ #define ADOLC_CHECKUP 1000 #define ADOLC_REPSUP 1000 /*--------------------------------------------------------------------------*/ /* Maximal size (Bytes) of a block to be written with fwrite or read with */ /* fread --- power of 2 > 8 preferable ;-) --- */ #define ADOLC_IO_CHUNK_SIZE 1073741824 /*--------------------------------------------------------------------------*/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/drivers/0000755000175200017520000000000013037353015016151 5ustar coincoinADOL-C-2.6.3/ADOL-C/include/adolc/drivers/psdrivers.h0000644000175200017520000000664613037350674020367 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/psdrivers.h Revision: $Id$ Contents: Easy to use drivers for piecewise smooth functions (with C and C++ callable interfaces including Fortran callable versions). Copyright (c) Andrea Walther, Sabrina Fiege This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_DRIVERS_PSDRIVERS_H) #define ADOLC_DRIVERS_PSDRIVERS_H 1 #include #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR PS FUNCTIONS */ /*--------------------------------------------------------------------------*/ /* directional_active_gradient_ */ /* */ ADOLC_DLL_EXPORT fint directional_active_gradient_(fint,fint,double*,double*,double*,double**,short*); /*--------------------------------------------------------------------------*/ /* directional_active_gradient */ /* */ ADOLC_DLL_EXPORT int directional_active_gradient( short tag, /* trace identifier */ int n, /* number of independents */ double* x, /* value of independents */ double* d, /* direction */ double* g, /* directional active gradient */ short *sigma_g /* sigma of g */ ); /*--------------------------------------------------------------------------*/ /* abs_normal */ /* */ ADOLC_DLL_EXPORT fint abs_normal_(fint*,fint*,fint*,fint*,fdouble*,fint*,fdouble*,fdouble*,fdouble*,fdouble*,fdouble*,fdouble*,fdouble*,fdouble*); ADOLC_DLL_EXPORT int abs_normal(short tag, /* tape identifier */ int m, /* number od dependents */ int n, /* number of independents */ int swchk, /* number of switches (check) */ double *x, /* base point */ short *sigma, /* sigma of x */ double *y, /* function value */ double *z, /* switching variables */ double *cz, /* first constant */ double *cy, /* second constant */ double **J, double **Y, double **Z, double **L); END_C_DECLS /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/drivers/Makefile.am0000644000175200017520000000132312627546141020214 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 639 2015-12-02 10:48:01Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshta ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## libdriversincludedir = $(pkgincludedir)/drivers libdriversinclude_HEADERS = drivers.h odedrivers.h psdrivers.h taylor.h ADOL-C-2.6.3/ADOL-C/include/adolc/drivers/odedrivers.h0000644000175200017520000001350112373412350020470 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/odedrivers.h Revision: $Id: odedrivers.h 537 2014-08-15 14:10:48Z kulshres $ Contents: Easy to use drivers for ordinary differential equations (ODE) (with C and C++ callable interfaces including Fortran callable versions). Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_DRIVERS_ODEDRIVERS_H) #define ADOLC_DRIVERS_ODEDRIVERS_H 1 #include #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR ODEs */ /*--------------------------------------------------------------------------*/ /* forodec */ /* forodec(tag, n, tau, dold, dnew, X[n][d+1]) */ ADOLC_DLL_EXPORT int forodec(short,int,double,int,int,double**); ADOLC_DLL_EXPORT fint forodec_(fint*,fint*,fdouble*,fint*,fint*,fdouble*); /*--------------------------------------------------------------------------*/ /* accodec */ /* accodec(n, tau, d, Z[n][n][d+1], B[n][n][d+1], nz[n][n]) */ ADOLC_DLL_EXPORT void accodec(int,double,int,double***,double***,short**); ADOLC_DLL_EXPORT fint accodec_(fint*,fdouble*,fint*,fdouble*,fdouble*); END_C_DECLS /****************************************************************************/ /****************************************************************************/ /* Now the C++ THINGS */ #if defined(__cplusplus) /****************************************************************************/ /* DRIVERS FOR ODEs, overloaded calls */ /*--------------------------------------------------------------------------*/ /* forode */ /* forode(tag, n, tau, dold, dnew, X[n][d+1]) */ inline int forode( short tag, // tape identifier int n, // space dimension double tau, // scaling int dold, // previous degree defaults to zero int dnew, // New degree of consistency double **X) // Taylor series { return forodec(tag,n,tau,dold,dnew,X); } /*--------------------------------------------------------------------------*/ /* forode */ /* the scaling tau defaults to 1 */ /* */ /* forode(tag, n, dold, dnew, X[n][d+1]) */ inline int forode(short tag, int n, int dold, int dnew, double** X) { return forodec(tag,n,1.0,dold,dnew,X); } /*--------------------------------------------------------------------------*/ /* forode */ /* previous order defaults to 0 */ /* */ /* forode(tag, n, tau, dnew, X[n][d+1]) */ inline int forode( short tag, int n, double tau, int deg, double **X) { return forodec(tag,n,tau,0,deg, X); } /*--------------------------------------------------------------------------*/ /* forode */ /* both tau and dold default */ /* */ /* forode(tag, n, dnew, X[n][d+1]) */ inline int forode(short tag, int n, int deg, double** X) { return forode(tag,n,1.0,0,deg,X); } /*--------------------------------------------------------------------------*/ /* accode */ /* accode(n, tau, d, Z[n][n][d+1], B[n][n][d+1], nz[n][n]) */ inline void accode( int n, // space dimension double tau, // scaling defaults to 1.0 int deg, // highest degree double ***A, // input tensor of "partial" Jacobians double ***B, // output tensor of "total" Jacobians short **nonzero = 0) // optional sparsity characterization { accodec(n,tau,deg,A,B,nonzero); } /*--------------------------------------------------------------------------*/ /* accode */ /* scaling defaults to 1 */ /* */ /* accode(n, d, Z[n][n][d+1], B[n][n][d+1], nz[n][n]) */ inline void accode( int n, // space dimension int deg, // highest degree double ***A, // input tensor of "partial" Jacobians double ***B, // output tensor of "total" Jacobians short **nonzero = 0) // optional sparsity characterization { accodec(n,1.0,deg,A,B,nonzero); } #endif /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/drivers/taylor.h0000644000175200017520000000662212373412350017642 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/taylor.h Revision: $Id: taylor.h 537 2014-08-15 14:10:48Z kulshres $ Contents: Easy to use drivers for the evaluation of higher order derivative tensors and inverse/impicit function differentiation Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_DRIVERS_TAYLOR_H) #define ADOLC_DRIVERS_TAYLOR_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /* TENSOR EVALUATIONS */ /*--------------------------------------------------------------------------*/ /* tensor_eval(tag,m,n,d,p,x[n],tensor[m][dim],S[n][p]) with dim = ((p+d) over d) */ ADOLC_DLL_EXPORT int tensor_eval (short tag, int m, int n, int d, int p, double *x, double **tensor, double **S); /*--------------------------------------------------------------------------*/ /* inverse_tensor_eval(tag,n,d,p,x,tensor[n][dim],S[n][p]) with dim = ((p+d) over d) */ ADOLC_DLL_EXPORT int inverse_tensor_eval (short tag, int n, int d, int p, double *x, double **tensor, double **S); /*--------------------------------------------------------------------------*/ /* inverse_Taylor_prop(tag,n,d,Y[n][d+1],X[n][d+1]) */ ADOLC_DLL_EXPORT int inverse_Taylor_prop (short tag, int n, int d, double** Y, double** X); /****************************************************************************/ /* ACCESS TO TENSOR VALUES */ /*--------------------------------------------------------------------------*/ /* tensor_value(d,m,y[m],tensori[m][dim],multi[d]) with dim = ((p+d) over d) */ ADOLC_DLL_EXPORT void tensor_value (int d, int m, double *y, double **tensor, int *multi); /*--------------------------------------------------------------------------*/ /* void** tensorsetup(m,p,d,tensorig) */ ADOLC_DLL_EXPORT void** tensorsetup(int m, int p, int d, double** tensorig); /*--------------------------------------------------------------------------*/ /* void freetensor(m,p,d,tensor) */ ADOLC_DLL_EXPORT void freetensor(int m, int p, int d, double** tensor); /*--------------------------------------------------------------------------*/ /* int tensor_address(d, im[d]) */ ADOLC_DLL_EXPORT int tensor_address(int d, int* im); /****************************************************************************/ /* UTILS */ /*--------------------------------------------------------------------------*/ /* int binomi(a,b) ---> binomial coefficient to compute tensor dimension */ ADOLC_DLL_EXPORT long binomi(int a, int b); /*--------------------------------------------------------------------------*/ /* jac_solv(tag,n,x,b,mode) */ ADOLC_DLL_EXPORT int jac_solv (unsigned short tag, int n, const double* x, double* b, unsigned short mode); END_C_DECLS /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/drivers/Makefile.in0000644000175200017520000004224712627546146020244 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include/adolc/drivers DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(libdriversinclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdriversincludedir)" HEADERS = $(libdriversinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libdriversincludedir = $(pkgincludedir)/drivers libdriversinclude_HEADERS = drivers.h odedrivers.h psdrivers.h taylor.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/drivers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/drivers/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libdriversincludeHEADERS: $(libdriversinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libdriversinclude_HEADERS)'; test -n "$(libdriversincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libdriversincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdriversincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libdriversincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libdriversincludedir)" || exit $$?; \ done uninstall-libdriversincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libdriversinclude_HEADERS)'; test -n "$(libdriversincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libdriversincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdriversincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libdriversincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libdriversincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libdriversincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-libdriversincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/include/adolc/drivers/drivers.h0000644000175200017520000001313712373412350020005 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/drivers.h Revision: $Id: drivers.h 537 2014-08-15 14:10:48Z kulshres $ Contents: Easy to use drivers for optimization and nonlinear equations (with C and C++ callable interfaces including Fortran callable versions). Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_DRIVERS_DRIVERS_H) #define ADOLC_DRIVERS_DRIVERS_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR OPTIMIZATION AND NONLINEAR EQUATIONS */ /*--------------------------------------------------------------------------*/ /* function */ /* function(tag, m, n, x[n], y[m]) */ ADOLC_DLL_EXPORT int function(short,int,int,double*,double*); ADOLC_DLL_EXPORT fint function_(fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* gradient */ /* gradient(tag, n, x[n], g[n]) */ ADOLC_DLL_EXPORT int gradient(short,int,const double*,double*); ADOLC_DLL_EXPORT fint gradient_(fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* jacobian */ /* jacobian(tag, m, n, x[n], J[m][n]) */ ADOLC_DLL_EXPORT int jacobian(short,int,int,const double*,double**); ADOLC_DLL_EXPORT fint jacobian_(fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* large_jacobian */ /* large_jacobian(tag, m, n, k, x[n], y[m], J[m][n]) */ ADOLC_DLL_EXPORT int large_jacobian(short,int,int,int,double*,double*,double**); ADOLC_DLL_EXPORT fint large_jacobian_(fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* vector_jacobian */ /* vec_jac(tag, m, n, repeat, x[n], u[m], v[n]) */ ADOLC_DLL_EXPORT int vec_jac(short,int,int,int,double*,double*,double*); ADOLC_DLL_EXPORT fint vec_jac_(fint*,fint*,fint*,fint*, fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* jacobian_vector */ /* jac_vec(tag, m, n, x[n], v[n], u[m]); */ ADOLC_DLL_EXPORT int jac_vec(short,int,int,double*,double*,double*); ADOLC_DLL_EXPORT fint jac_vec_(fint*,fint*,fint*,fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* hessian */ /* hessian(tag, n, x[n], lower triangle of H[n][n]) */ /* uses Hessian-vector product */ ADOLC_DLL_EXPORT int hessian(short,int,double*,double**); ADOLC_DLL_EXPORT fint hessian_(fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* hessian2 */ /* hessian2(tag, n, x[n], lower triangle of H[n][n]) */ /* uses Hessian-matrix product */ ADOLC_DLL_EXPORT int hessian2(short,int,double*,double**); ADOLC_DLL_EXPORT fint hessian2_(fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* hessian_vector */ /* hess_vec(tag, n, x[n], v[n], w[n]) */ ADOLC_DLL_EXPORT int hess_vec(short,int,double*,double*,double*); ADOLC_DLL_EXPORT fint hess_vec_(fint*,fint*,fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* hessian_matrix */ /* hess_mat(tag, n, q, x[n], V[n][q], W[n][q]) */ ADOLC_DLL_EXPORT int hess_mat(short,int,int,double*,double**,double**); ADOLC_DLL_EXPORT fint hess_mat_(fint*,fint*,fint*, fdouble*,fdouble**,fdouble**); /*--------------------------------------------------------------------------*/ /* lagrange_hessian_vector */ /* lagra_hess_vec(tag, m, n, x[n], v[n], u[m], w[n]) */ ADOLC_DLL_EXPORT int lagra_hess_vec(short,int,int,double*, double*,double*,double*); ADOLC_DLL_EXPORT fint lagra_hess_vec_(fint*,fint*,fint*, fdouble*,fdouble*,fdouble*,fdouble*); END_C_DECLS /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/tapedoc/0000755000175200017520000000000013037353015016112 5ustar coincoinADOL-C-2.6.3/ADOL-C/include/adolc/tapedoc/tapedoc.h0000644000175200017520000000246212373412350017706 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: tapedoc/tapedoc.h Revision: $Id: tapedoc.h 537 2014-08-15 14:10:48Z kulshres $ Contents: Contains declaration of tapedoc driver. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_TAPEDOC_TAPEDOC_H) #define ADOLC_TAPEDOC_TAPEDOC_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /* tape_doc */ /* tape_doc(tag, m, n, x[n], y[m]) */ ADOLC_DLL_EXPORT void tape_doc(short, int, int, double*, double*); /****************************************************************************/ /* THAT'S ALL */ END_C_DECLS #endif ADOL-C-2.6.3/ADOL-C/include/adolc/tapedoc/Makefile.am0000644000175200017520000000126112032277512020147 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## libtapedocincludedir = $(pkgincludedir)/tapedoc libtapedocinclude_HEADERS = tapedoc.h ADOL-C-2.6.3/ADOL-C/include/adolc/tapedoc/Makefile.in0000644000175200017520000004220512470354460020167 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include/adolc/tapedoc DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(libtapedocinclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libtapedocincludedir)" HEADERS = $(libtapedocinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libtapedocincludedir = $(pkgincludedir)/tapedoc libtapedocinclude_HEADERS = tapedoc.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/tapedoc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/tapedoc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libtapedocincludeHEADERS: $(libtapedocinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libtapedocinclude_HEADERS)'; test -n "$(libtapedocincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libtapedocincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libtapedocincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libtapedocincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libtapedocincludedir)" || exit $$?; \ done uninstall-libtapedocincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libtapedocinclude_HEADERS)'; test -n "$(libtapedocincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libtapedocincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libtapedocincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libtapedocincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libtapedocincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libtapedocincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-libtapedocincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/include/adolc/fortutils.h0000644000175200017520000000272712373412350016707 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fortutils.h Revision: $Id: fortutils.h 537 2014-08-15 14:10:48Z kulshres $ Contents: Internal tools to handle Fortran arrays Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_FORTUTILS_H) #define ADOLC_FORTUTILS_H 1 #include /****************************************************************************/ /* Now the C THINGS */ BEGIN_C_DECLS ADOLC_DLL_EXPORT void spread1(int m, fdouble* x, double* X); ADOLC_DLL_EXPORT void pack1(int m, double* X, fdouble* x); ADOLC_DLL_EXPORT void spread2(int m, int n, fdouble* x, double** X); ADOLC_DLL_EXPORT void pack2(int m, int n, double** X, fdouble* x); ADOLC_DLL_EXPORT void spread3(int m, int n, int p, fdouble* x, double*** X); ADOLC_DLL_EXPORT void pack3(int m, int n, int p, double*** X, fdouble* x); END_C_DECLS /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/Makefile.in0000644000175200017520000005316512562262246016561 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @SPARSE_TRUE@am__append_1 = sparse subdir = ADOL-C/include/adolc DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(pkginclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = internal drivers tapedoc lie sparse DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ pkginclude_HEADERS = adolc.h adalloc.h adouble.h adutils.h adutilsc.h \ convolut.h fortutils.h \ interfaces.h taping.h \ externfcts.h checkpointing.h fixpoint.h\ adolc_sparse.h adolc_openmp.h \ revolve.h advector.h \ adtl.h adoublecuda.h param.h externfcts2.h SUBDIRS = internal drivers tapedoc lie $(am__append_1) all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgincludeHEADERS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgincludeHEADERS \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-pkgincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/include/adolc/adalloc.h0000644000175200017520000000655612562202137016257 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adalloc.h Revision: $Id: adalloc.h 608 2015-08-10 20:06:55Z kulshres $ Contents: Allocation of arrays of doubles in several dimensions Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined (ADOLC_ADALLOC_H) #define ADOLC_ADALLOC_H 1 #include /****************************************************************************/ /* Now the C THINGS */ BEGIN_C_DECLS /*--------------------------------------------------------------------------*/ /* MEMORY MANAGEMENT UTILITIES */ ADOLC_DLL_EXPORT char* populate_dpp(double ***const pointer, char *const memory, int n, int m); ADOLC_DLL_EXPORT char* populate_dppp(double ****const pointer, char *const memory, int n, int m, int p); ADOLC_DLL_EXPORT char* populate_dppp_nodata(double ****const pointer, char *const memory, int n, int m); ADOLC_DLL_EXPORT double *myalloc1(size_t); ADOLC_DLL_EXPORT double **myalloc2(size_t, size_t); ADOLC_DLL_EXPORT double ***myalloc3(size_t, size_t, size_t); ADOLC_DLL_EXPORT void myfree1(double *); ADOLC_DLL_EXPORT void myfree2(double **); ADOLC_DLL_EXPORT void myfree3(double ***); /*--------------------------------------------------------------------------*/ /* SPECIAL IDENTITY REPRESENTATION */ ADOLC_DLL_EXPORT double **myallocI2(int); ADOLC_DLL_EXPORT void myfreeI2(int, double**); ADOLC_DLL_EXPORT unsigned int * myalloc1_uint(int); ADOLC_DLL_EXPORT unsigned long int * myalloc1_ulong(int); ADOLC_DLL_EXPORT unsigned long int ** myalloc2_ulong(int, int); /****************************************************************************/ /* INTEGER VARIANT FOR BIT PATTERN PROPAGATION */ ADOLC_DLL_EXPORT void myfree1_uint(unsigned int*); ADOLC_DLL_EXPORT void myfree1_ulong(unsigned long int *); ADOLC_DLL_EXPORT void myfree2_ulong(unsigned long int **); END_C_DECLS /****************************************************************************/ /* Now the C++ THINGS */ #if defined(__cplusplus) /*--------------------------------------------------------------------------*/ /* MEMORY MANAGEMENT UTILITIES */ inline double * myalloc(int n) { return myalloc1(n); } inline double ** myalloc(int m, int n) { return myalloc2(m,n); } inline double *** myalloc(int m, int n, int p) { return myalloc3(m,n,p); } inline void myfree(double *A) { myfree1(A); } inline void myfree(double **A) { myfree2(A); } inline void myfree(double ***A) { myfree3(A); } #endif /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/adolc_sparse.h0000644000175200017520000000130012032277512017276 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc_sparse.h Revision: $Id: adolc_sparse.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Provides C/C++ interfaces of ADOL-C sprase drivers. Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include ADOL-C-2.6.3/ADOL-C/include/adolc/param.h0000644000175200017520000001751412761540625015764 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: param.h Revision: $Id$ Contents: class for parameter dependent functions Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_PARAM_H) #define ADOLC_PARAM_H 1 #if defined(__cplusplus) #include #include using std::logic_error; class pdouble; ADOLC_DLL_EXPORT pdouble mkparam(double pval); ADOLC_DLL_EXPORT pdouble getparam(locint index); ADOLC_DLL_EXPORT locint mkparam_idx(double pval); class ADOLC_DLL_EXPORT pdouble { friend ADOLC_DLL_EXPORT class badouble; friend ADOLC_DLL_EXPORT class adub; friend ADOLC_DLL_EXPORT class adouble; friend ADOLC_DLL_EXPORT class adubref; protected: double _val; locint _idx; pdouble(const pdouble&) { fprintf(DIAG_OUT,"ADOL-C error: illegal copy construction of pdouble" " variable\n ... pdouble objects must never be copied\n"); throw logic_error("illegal constructor call, errorcode=-2"); } pdouble(void) { fprintf(DIAG_OUT,"ADOL-C error: illegal default construction of pdouble" " variable\n"); throw logic_error("illegal constructor call, errorcode=-2"); } pdouble(double pval); pdouble(locint index); public: friend pdouble mkparam(double pval); friend pdouble getparam(locint index); friend locint mkparam_idx(double pval); operator adub() const; #define _IN_CLASS_ 1 #define _IN_PDOUBLE_ 1 #include #undef _IN_PDOUBLE_ #undef _IN_CLASS_ ~pdouble() {} }; #ifdef ADOLC_ADVANCED_BRANCHING inline adub operator != ( const pdouble& a, const badouble& b) { return (b != a); } inline adub operator == ( const pdouble& a, const badouble& b) { return (b == a); } inline adub operator <= ( const pdouble& a, const badouble& b) { return (b >= a); } inline adub operator >= ( const pdouble& a, const badouble& b) { return (b <= a); } inline adub operator > ( const pdouble& a, const badouble& b) { return (b < a); } inline adub operator < ( const pdouble& a, const badouble& b) { return (b > a); } #else inline int operator != ( const badouble& a, const pdouble& b) { return ((a - b) != 0); } inline int operator == ( const badouble& a, const pdouble& b) { return ((a - b) == 0); } inline int operator <= ( const badouble& a, const pdouble& b) { return ((a - b) <= 0); } inline int operator >= ( const badouble& a, const pdouble& b) { return ((a - b) >= 0); } inline int operator > ( const badouble& a, const pdouble& b) { return ((a - b) > 0); } inline int operator < ( const badouble& a, const pdouble& b) { return ((a - b) < 0); } inline int operator != ( const pdouble& a, const badouble& b) { return (b != a); } inline int operator == ( const pdouble& a, const badouble& b) { return (b == a); } inline int operator <= ( const pdouble& a, const badouble& b) { return (b >= a); } inline int operator >= ( const pdouble& a, const badouble& b) { return (b <= a); } inline int operator > ( const pdouble& a, const badouble& b) { return (b < a); } inline int operator < ( const pdouble& a, const badouble& b) { return (b > a); } #endif inline adub operator + ( const pdouble& a, const badouble& b) { return (b + a); } inline adub operator + ( const pdouble& a, double b) { return (b + adub(a)); } inline adub operator + ( double a, const pdouble& b) { return (a + adub(b)); } inline adub operator - ( const pdouble& a, const badouble& b) { return ((-b) + a); } inline adub operator - ( const pdouble& a, double b) { return (adub(a) - b); } inline adub operator - ( double a, const pdouble& b) { return (a + (-b)); } inline adub operator * ( const pdouble& a, const badouble& b) { return (b*a); } inline adub operator * ( const pdouble& a, double b) { return (b * adub(a)); } inline adub operator * ( double a, const pdouble& b) { return (a * adub(b)); } inline adub operator / ( const badouble& a, const pdouble& b) { return (a*recipr(b)); } inline adub operator / ( double a, const pdouble& b) { return (a*recipr(b)); } inline adub operator / ( const pdouble& a, double b) { return (adub(a)/b); } inline adub fmax ( const badouble& y, const pdouble& d ) { return (-fmin(-d,-y)); } inline adub fmax ( const pdouble& a, const badouble& b) { return fmax(b,a); } inline adub fmin ( const pdouble& a, const badouble& b) { return fmin(b,a); } inline adub fmin( const badouble& a, const pdouble& b) { return fmin(a,adub(b)); } /* unary operators (friends) */ inline adub exp ( const pdouble& p) { return exp(adub(p)); } inline adub log ( const pdouble& p) { return log(adub(p)); } inline adub sqrt ( const pdouble& p) { return sqrt(adub(p)); } inline adub sin ( const pdouble& p) { return sin(adub(p)); } inline adub cos ( const pdouble& p) { return cos(adub(p)); } inline adub tan ( const pdouble& p) { return tan(adub(p)); } inline adub asin ( const pdouble& p) { return asin(adub(p)); } inline adub acos ( const pdouble& p) { return acos(adub(p)); } inline adub atan ( const pdouble& p) { return atan(adub(p)); } /*--------------------------------------------------------------------------*/ /* special operators (friends) */ /* no internal use of condassign: */ inline adub pow ( const pdouble& p, double q) { return pow(adub(p),q); } inline adub log10 ( const pdouble& p) { return log10(adub(p)); } /* Additional ANSI C standard Math functions Added by DWJ on 8/6/90 */ inline adub sinh ( const pdouble& p) { return sinh(adub(p)); } inline adub cosh ( const pdouble& p) { return cosh(adub(p)); } inline adub tanh ( const pdouble& p) { return tanh(adub(p)); } #if defined(ATRIG_ERF) inline adub asinh ( const pdouble& p) { return asinh(adub(p)); } inline adub acosh ( const pdouble& p) { return acosh(adub(p)); } inline adub atanh ( const pdouble& p) { return atanh(adub(p)); } inline adub erf ( const pdouble& p) { return erf(adub(p)); } #endif inline adub fabs ( const pdouble& p) { return fabs(adub(p)); } inline adub ceil ( const pdouble& p) { return ceil(adub(p)); } inline adub floor ( const pdouble& p) { return floor(adub(p)); } inline adub fmax ( const pdouble& p, const pdouble& q) { return fmax(adub(p),adub(q)); } inline adub fmax ( double p, const pdouble& q) { return fmax(p,adub(q)); } inline adub fmax ( const pdouble& p, double q) { return fmax(adub(p),q); } inline adub fmin ( const pdouble& p, const pdouble& q) { return fmin(adub(p),adub(q)); } inline adub fmin ( double p, const pdouble& q) { return fmin(p,adub(q)); } inline adub fmin ( const pdouble& p, double q) { return fmin(adub(p),q); } inline adub ldexp ( const pdouble& p, int n) { return ldexp(adub(p),n); } inline adub frexp ( const pdouble& p, int* n) { return frexp(adub(p),n); } /*--------------------------------------------------------------------------*/ #endif BEGIN_C_DECLS /****************************************************************************/ /* Returns the number of parameters recorded on tape */ /****************************************************************************/ ADOLC_DLL_EXPORT size_t get_num_param(short tag); /****************************************************************************/ /* Overrides the parameters for the next evaluations. This will invalidate */ /* the taylor stack, so next reverse call will fail, if not preceeded by a */ /* forward call after setting the parameters. */ /****************************************************************************/ ADOLC_DLL_EXPORT void set_param_vec(short tag, size_t numparam, revreal* paramvec); END_C_DECLS #endif ADOL-C-2.6.3/ADOL-C/include/adolc/fixpoint.h0000644000175200017520000000276212373412350016513 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fixpoint.h Revision: $Id: fixpoint.h 537 2014-08-15 14:10:48Z kulshres $ Contents: all C functions directly accessing at least one of the four tapes (operations, locations, constants, value stack) Copyright (c) Andreas Kowarz, Sebastian Schlenkrich This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_FIXPOINT_H) #define ADOLC_FIXPOINT_H 1 #include BEGIN_C_DECLS int fp_iteration ( int sub_tape_num, int (*double_F)(double*, double* ,double*, int, int), int (*adouble_F)(adouble*, adouble*, adouble*, int, int), double (*norm)(double*, int), double (*norm_deriv)(double*, int), double epsilon, double epsilon_deriv, int N_max, int N_max_deriv, adouble *x_0, adouble *u, adouble *x_fix, int dim_x, int dim_u ); END_C_DECLS #endif /* ADOLC_FIXPOINT_H */ ADOL-C-2.6.3/ADOL-C/include/adolc/adolc_openmp.h0000644000175200017520000000340212373412350017303 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc_openmp.h Revision: $Id: adolc_openmp.h 537 2014-08-15 14:10:48Z kulshres $ Contents: header file for openmp parallel differentiation Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOLC_OPENMP_H) #define ADOLC_ADOLC_OPENMP_H 1 #if !defined(__cplusplus) #warning ADOLC_OPENMP IS ONLY USEFUL WHEN COMPILED WITH C++ !!! #else #if !defined(_OPENMP) #error OPENMP NOT ENABLED AT COMPILE TIME !!! #else #include extern void beginParallel(); extern void endParallel(); extern int ADOLC_parallel_doCopy; typedef struct ADOLC_OpenMP { inline ADOLC_OpenMP() {} inline ADOLC_OpenMP(const ADOLC_OpenMP &arg) { ADOLC_parallel_doCopy = 1; beginParallel(); } inline ~ADOLC_OpenMP() { endParallel(); } } ADOLC_OpenMP; typedef struct ADOLC_OpenMP_NC { inline ADOLC_OpenMP_NC() {} inline ADOLC_OpenMP_NC(const ADOLC_OpenMP_NC &arg) { ADOLC_parallel_doCopy = 0; beginParallel(); } inline ~ADOLC_OpenMP_NC() { endParallel(); } } ADOLC_OpenMP_NC; extern ADOLC_OpenMP ADOLC_OpenMP_Handler; extern ADOLC_OpenMP_NC ADOLC_OpenMP_Handler_NC; #define ADOLC_OPENMP firstprivate(ADOLC_OpenMP_Handler) #define ADOLC_OPENMP_NC firstprivate(ADOLC_OpenMP_Handler_NC) #endif /* _OPENMP */ #endif /* __cplusplus */ #endif /* ADOLC_ADOLC_OPENMP_H */ ADOL-C-2.6.3/ADOL-C/include/adolc/adutils.h0000644000175200017520000000146212032277512016315 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adutils.h Revision: $Id: adutils.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Provides all C/C++ interfaces of ADOL-C. NOTICE: This file is kept for compatibility reasons only. The new header adolc.h is included. Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADUTILS_H) #define ADOLC_ADUTILS_H 1 #include #endif ADOL-C-2.6.3/ADOL-C/include/adolc/advector.h0000644000175200017520000001445412633764260016474 0ustar coincoin/* --------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ Revision: $Id: advector.h 659 2015-12-15 10:17:20Z kulshres $ Contents: advector.h contains a vector implementation that is able to trace subscripting operations. Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #if !defined(ADOLC_ADVECTOR_H) #define ADOLC_ADVECTOR_H 1 /****************************************************************************/ /* THIS FILE IS C++ */ #ifdef __cplusplus #include /****************************************************************************/ /* THIS IS ONLY FOR TAPED VERSION */ #if !defined(TAPELESS) class advector; class adubref; class ADOLC_DLL_EXPORT adubref { /* This class is supposed to be used only when an advector subscript * occurs as an lvalue somewhere. What we need to do is read the location * of the referenced adouble out of store[location] and perform * operations with this refloc. This means that the tape needs new * opcodes (ref_assign_* /ref_eq_* / ref_{incr,decr}_a) for each of * these operations, most of the code will simply be copied from * adouble class, since the operation is really the same except for * the part where the refloc is read from store[location]. * Reverse mode is also straightforward the same way. * * Convert to a new adub as soon as used as rvalue, this is why adubref * is not a child of badouble, since it should never occur as rvalue. */ friend ADOLC_DLL_EXPORT class adub; friend ADOLC_DLL_EXPORT class advector; friend ADOLC_DLL_EXPORT class pdouble; protected: locint location; locint refloc; explicit adubref( locint lo, locint ref ); explicit adubref( void ) { fprintf(DIAG_OUT,"ADOL-C error: illegal default construction of adubref" " variable\n"); exit(-2); } explicit adubref( double ) { fprintf(DIAG_OUT,"ADOL-C error: illegal construction of adubref" " variable from double\n"); exit(-2); } explicit adubref( const badouble& ) { fprintf(DIAG_OUT,"ADOL-C error: illegal construction of adubref" " variable from badouble\n"); exit(-2); } explicit adubref( const adub& ) { fprintf(DIAG_OUT,"ADOL-C error: illegal construction of adubref" " variable from adub\n"); exit(-2); } adubref( const adubref& ) { fprintf(DIAG_OUT,"ADOL-C error: illegal copy construction of adubref" " variable\n"); exit(-2); } bool isInit; // marker if the badouble is properly initialized public: /* adub prevents postfix operators to occur on the left side of an assignment which would not work */ adub operator++( int ); adub operator--( int ); adubref& operator++( void ); adubref& operator--( void ); adubref& operator = ( double ); adubref& operator = ( const badouble& ); adubref& operator = ( const adubref& ); adubref& operator = ( const pdouble& ); adubref& operator += ( double ); adubref& operator += ( const badouble& ); adubref& operator += ( const pdouble& ); adubref& operator -= ( double x ); adubref& operator -= ( const badouble& ); adubref& operator -= ( const pdouble& ); adubref& operator *= ( double x ); adubref& operator *= ( const badouble& ); adubref& operator *= ( const pdouble& ); inline adubref& operator /= ( double x ); inline adubref& operator /= ( const badouble& ); inline adubref& operator /= ( const pdouble&); adubref& operator <<= ( double ); void declareIndependent(); adubref& operator >>= ( double& ); void declareDependent(); operator adub() const; friend ADOLC_DLL_EXPORT void condassign(adubref&, const badouble&, const badouble&, const badouble&); friend ADOLC_DLL_EXPORT void condassign(adubref&, const badouble&, const badouble&); ~adubref(); }; /* adolc_vec_copy(dest,src,size); */ void ADOLC_DLL_EXPORT adolc_vec_copy(adouble *const, const adouble*const, locint); /* adolc_vec_axpy(res,a,x,y,size); <=> res = a*x + y */ void ADOLC_DLL_EXPORT adolc_vec_axpy(adouble *const, const badouble&, const adouble*const, const adouble*const, locint); class advector { private: struct ADOLC_DLL_EXPORT blocker { blocker() {} blocker(size_t n); ~blocker() {} } blk; std::vector data; ADOLC_DLL_EXPORT bool nondecreasing() const; public: ADOLC_DLL_EXPORT advector() : blk(), data() {} ADOLC_DLL_EXPORT explicit advector(size_t n) : blk(n), data(n) {} ADOLC_DLL_EXPORT ~advector() {} ADOLC_DLL_EXPORT advector(const advector& x) : blk(x.size()), data(x.size()) { adolc_vec_copy(data.data(),x.data.data(),x.size()); } // in the above copy we are sure of contiguous locations // but not so in the one below ADOLC_DLL_EXPORT advector(const std::vector& v) : blk(v.size()), data(v) {} ADOLC_DLL_EXPORT size_t size() const { return data.size(); } ADOLC_DLL_EXPORT operator const std::vector&() const { return data; } ADOLC_DLL_EXPORT operator std::vector&() { return data; } ADOLC_DLL_EXPORT operator adouble*() { return data.data(); } ADOLC_DLL_EXPORT adub operator[](const badouble& index) const; ADOLC_DLL_EXPORT adubref operator[](const badouble& index); ADOLC_DLL_EXPORT adouble& operator[](size_t i) { return data[i]; } ADOLC_DLL_EXPORT const adouble& operator[](size_t i) const { return data[i]; } ADOLC_DLL_EXPORT adouble lookupindex(const badouble& x, const badouble& y) const; }; inline adubref& adubref::operator /= (double y) { *this *= (1.0/y); return *this; } inline adubref& adubref::operator /= (const badouble& y) { *this *= (1.0/y); return *this; } inline adubref& adubref::operator /= (const pdouble& p) { *this *= recipr(p); return *this; } #endif /* TAPELESS */ #endif /* __cplusplus */ #endif /* ADOLC_ADVECTOR_H */ ADOL-C-2.6.3/ADOL-C/include/adolc/externfcts2.h0000644000175200017520000001535712524076224017132 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: externfcts.h Revision: $Id$ Contents: public functions and data types for extern (differentiated) functions. Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_EXTERNFCTS2_H) #define ADOLC_EXTERNFCTS2_H 1 #include #include BEGIN_C_DECLS typedef int (ADOLC_ext_fct_v2) (int iArrLen, int *iArr, int nin, int nout, int *insz, double **x, int *outsz, double **y, void* ctx); typedef int (ADOLC_ext_fct_v2_fos_forward)(int iArrLen, int* iArr, int nin, int nout, int *insz, double **x, double **xp, int *outsz, double **y, double **yp, void *ctx); typedef int (ADOLC_ext_fct_v2_fov_forward)(int iArrLen, int* iArr, int nin, int nout, int *insz, double **x, int ndir, double ***Xp, int *outsz, double **y, double ***Yp, void* ctx); typedef int (ADOLC_ext_fct_v2_fos_reverse)(int iArrLen, int* iArr, int nout, int nin, int *outsz, double **up, int *insz, double **zp, double **x, double **y, void *ctx); typedef int (ADOLC_ext_fct_v2_fov_reverse)(int iArrLen, int* iArr, int nout, int nin, int *outsz, int dir, double ***Up, int *insz, double ***Zp, double **x, double **y, void* ctx); /* The following two aren't implemented */ typedef int (ADOLC_ext_fct_v2_hos_forward)(int iArrLen, int* iArr, int nin, int nout, int *insz, double **x, int degree, double ***Xp, int *outsz, double **y, double ***Yp, void* ctx); typedef int (ADOLC_ext_fct_v2_hov_forward)(int iArrLen, int* iArr, int nin, int nout, int *insz, double **x, int degree, int ndir, double ****Xp, int *outsz, double **y, double ****Yp, void *ctx); typedef struct { /** * DO NOT touch - the function pointer is set through reg_ext_fct */ ADOLC_ext_fct_v2 *function; /** * DO NOT touch - the index is set through reg_ext_fct */ locint index; /** * below are function pointers used for call back from the corresponding ADOL-C trace interpreters; * these function pointers are initialized to 0 by reg_ext_fct; * the user needs to set eplicitly the function pointers for the trace interpreters called in the * application driver */ /** * this points to a method implementing a forward execution of the externally differentiated function y=f(x); * the pointer would typically be set to the same function pointer supplied in the call to reg_ext_fct, * i.e. zos_forward would be equal to function (above) * but there are cases when it makes sense for this to be different as illustrated * in examples/additional_examples/ext_diff_func/ext_diff_func.cpp */ ADOLC_ext_fct_v2 *zos_forward; /** * this points to a method implementing a forward execution of the externally differentiated function y=f(x) * and computing the projection yp=Jacobian*xp * see also the explanation of the xp,yp members below. */ ADOLC_ext_fct_v2_fos_forward *fos_forward; /** * this points to a method implementing a forward execution of the externally differentiated function y=f(x) * and computing the projection Yp=Jacobian*Xp * see also the explanation of the Xp/Yp members below. */ ADOLC_ext_fct_v2_fov_forward *fov_forward; /** * this points to a method computing the projection zp=transpose(zp) * Jacobian * see also the explanation of the up/zp members below. */ ADOLC_ext_fct_v2_fos_reverse *fos_reverse; /** * this points to a method computing the projection Zp=transpose(Up) * Jacobian * see also the explanation of the Up/Zp members below. */ ADOLC_ext_fct_v2_fov_reverse *fov_reverse; /** * The names of the variables below correspond to the formal parameters names in the call back * functions above; */ /** * function and all _forward calls: function argument, dimension nin*insz[0..nin] */ double **x; /** * fos_forward: tangent direction, dimension nin*insz[0..nin] */ double **xp; /** * fov_forward: seed matrix for p directions, dimensions nin*insz[0..nin]*p (p=nin*insz[0..nin]) */ double ***Xp; /** * function and all _forward calls: function result, dimension nout*outsz[0..nout] */ double **y; /** * fos_forward: Jacobian projection, dimension nout*outsz[0..nout] */ double **yp; /** * fov_forward: Jacobian projection in p directions, dimension nout*outsz[0..nout]*p (p=nin*insz[0..nin]) */ double ***Yp; /** * fos_reverse and hos_reverse: weight vector, dimension nout*outsz[0..nout] */ double **up; /** * fov_reverse and hov_reverse: q weight vectors, dimensions (q=nout*outsz[0..nout]) q*nout*outsz[0..nout] */ double ***Up; /** * fos_reverse: Jacobian projection, dimension nin*insz[0..nin] */ double **zp; /** * fov_reverse: Jacobian projection for q weight vectors, dimensions (q=nout*outsz[0..nout]) q*nin*insz[0..nin] */ double ***Zp; /** * track maximal dimensions when function is invoked */ locint max_nin, max_nout, max_insz, max_outsz; /** * make the call such that Adol-C may be used inside * of the externally differentiated function; * defaults to 0; * this implies certain storage duplication that can * be avoided if no nested use of Adol-C takes place */ char nestedAdolc; /** * if 0, then the 'function' does not change dp_x; * defaults to non-0 which implies dp_x values are saved in taylors */ char dp_x_changes; /** * if 0, then the value of dp_y prior to calling 'function' * is not required for reverse; * defaults to non-0 which implies dp_y values are saved in taylors */ char dp_y_priorRequired; /** * This is a opaque context pointer that the user may set and use * in his implementation of the above functions */ void* context; /** * This is an all-memory pointer for allocating and deallocating * all other pointers can point to memory within here. */ char* allmem; } ext_diff_fct_v2; END_C_DECLS #if defined(__cplusplus) ADOLC_DLL_EXPORT ext_diff_fct_v2 *reg_ext_fct(ADOLC_ext_fct_v2 ext_fct); ADOLC_DLL_EXPORT int call_ext_fct (ext_diff_fct_v2 *edfct, int iArrLen, int* iArr, int nin, int nout, int *insz, adouble **x, int *outsz, adouble **y); ADOLC_DLL_EXPORT void edf_zero(ext_diff_fct_v2 *edfct); inline void edf_set_opaque_context(ext_diff_fct_v2 *edfct, void *ctx) { edfct->context = ctx; } #endif #endif ADOL-C-2.6.3/ADOL-C/include/adolc/sparse/0000755000175200017520000000000013037353015015770 5ustar coincoinADOL-C-2.6.3/ADOL-C/include/adolc/sparse/Makefile.am0000644000175200017520000000130512032277512020024 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 354 2012-10-01 11:32:26Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## libsparseincludedir = $(pkgincludedir)/sparse libsparseinclude_HEADERS = sparsedrivers.h sparse_fo_rev.h ADOL-C-2.6.3/ADOL-C/include/adolc/sparse/Makefile.in0000644000175200017520000004220212470354460020042 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include/adolc/sparse DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(libsparseinclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libsparseincludedir)" HEADERS = $(libsparseinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libsparseincludedir = $(pkgincludedir)/sparse libsparseinclude_HEADERS = sparsedrivers.h sparse_fo_rev.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/sparse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/sparse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libsparseincludeHEADERS: $(libsparseinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libsparseinclude_HEADERS)'; test -n "$(libsparseincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libsparseincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libsparseincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libsparseincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libsparseincludedir)" || exit $$?; \ done uninstall-libsparseincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libsparseinclude_HEADERS)'; test -n "$(libsparseincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libsparseincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libsparseincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libsparseincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libsparseincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-libsparseincludeHEADERS \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-libsparseincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/include/adolc/sparse/sparsedrivers.h0000644000175200017520000001201012427131452021030 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse/sparsedrivers.h Revision: $Id: sparsedrivers.h 585 2014-11-07 11:55:22Z kulshres $ Contents: This file containts some "Easy To Use" interfaces of sparse package. Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined (ADOLC_SPARSE_SPARSE_H) #define ADOLC_SPARSE_SPARSE_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /*--------------------------------------------------------------------------*/ /* jacobian pattern */ /* jac_pat(tag, m, n, argument, */ /* crs[] [ crs[][0] = non-zero independent blocks per row ], */ /* options[3]) */ /* */ ADOLC_DLL_EXPORT int jac_pat (short,int,int,const double*,unsigned int**,int*); /*--------------------------------------------------------------------------*/ /* abs-normal jacobian pattern */ /* absnormal_jac_pat(tag, m, n, s, argument, */ /* crs[] [ crs[][0] = non-zero independent blocks per row ]) */ /* */ ADOLC_DLL_EXPORT int absnormal_jac_pat (short,int,int,int,const double*,unsigned int**); /*--------------------------------------------------------------------------*/ /* seed matrix for sparse jacobian */ /* generate_seed_jac(m, n, crs, &seed, &p, option); */ ADOLC_DLL_EXPORT void generate_seed_jac (int, int, unsigned int**, double***, int*, int); /*--------------------------------------------------------------------------*/ /* sparse jacobian */ /* int sparse_jac(tag, m, n, repeat, x, &nnz, &row_ind, &col_ind, &values, */ /* options[3]); */ ADOLC_DLL_EXPORT int sparse_jac (short, int , int, int, const double*, int *, unsigned int **, unsigned int **, double **,int*); /*--------------------------------------------------------------------------*/ /* hessian pattern */ /* hess_pat(tag, n, x[n], crs[n][*], option) */ /* */ /* crs[i][ crs[i][0] = non-zero entries per row ] */ /* */ ADOLC_DLL_EXPORT int hess_pat(short,int,const double*,unsigned int**, int); /*--------------------------------------------------------------------------*/ /* seed matrix for sparse hessian */ /* generate_seed_hess(n, crs, &seed, &p, option); */ ADOLC_DLL_EXPORT void generate_seed_hess (int, unsigned int**, double***, int*, int); /*--------------------------------------------------------------------------*/ /* sparse hessian */ /* int sparse_hess(tag, n, repeat, x, &nnz, &row_ind, &col_ind, &values, */ /* options[2]); */ ADOLC_DLL_EXPORT int sparse_hess (short, int , int, const double*, int *, unsigned int **, unsigned int **, double **,int*); ADOLC_DLL_EXPORT void set_HP( short tag, /* tape identification */ int indep, /* number of independent variables */ unsigned int ** HP); ADOLC_DLL_EXPORT void get_HP( short tag, /* tape identification */ int indep, /* number of independent variables */ unsigned int *** HP); /*--------------------------------------------------------------------------*/ /* JACOBIAN BLOCK PATTERN */ /* Max. number of unsigned ints to store the seed / jacobian matrix strips. Reduce this value to x if your system happens to run out of memory. x < 10 makes no sense. x = 50 or 100 is better x stays for ( x * sizeof(unsigned long int) * 8 ) (block) variables at once */ #define PQ_STRIPMINE_MAX 30 ADOLC_DLL_EXPORT int bit_vector_propagation (short, int, int, const double*, unsigned int**, int*); /****************************************************************************/ END_C_DECLS #endif ADOL-C-2.6.3/ADOL-C/include/adolc/sparse/sparse_fo_rev.h0000644000175200017520000001007012373412350020774 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse/sparse_fo_rev.h Revision: $Id: sparse_fo_rev.h 537 2014-08-15 14:10:48Z kulshres $ Contents: This file containts some "Easy To Use" interfaces of sparse package. Copyright (c) Andrea Walther, Christo Mitev This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined (ADOLC_SPARSE_SPARSE_H) #define ADOLC_SPARSE_SPARSE_H 1 #include #if defined(__cplusplus) /****************************************************************************/ /* FORWARD MODE, overloaded calls */ /* */ /* nBV = number of Boolean Vectors to be packed */ /* (see Chapter Dependence Analysis, ADOL-C Documentation) */ /* bits_per_long = 8*sizeof(unsigned long int) */ /* p = nBV / bits_per_long + ( (nBV % bits_per_long) != 0 ) */ /* */ /* For the full Jacobian matrix set */ /* p = indep / bits_per_long + ((indep % bits_per_long) != 0) */ /* and pass a bit pattern version of the identity matrix as an argument */ /* */ /*--------------------------------------------------------------------------*/ /* Bit pattern propagation call, d = 1, tight version */ /* */ /* forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p], mode) : intfov */ ADOLC_DLL_EXPORT int forward (short, int, int, int, double*, unsigned long int**, double*, unsigned long int**, char =0); /*--------------------------------------------------------------------------*/ /* Bit pattern propagation call, d = 1, safe version (no x[] and y[]) */ /* */ /* forward(tag, m, n, p, X[n][p], Y[m][p], mode) : intfov */ ADOLC_DLL_EXPORT int forward (short, int, int, int, unsigned long int**, unsigned long int**, char =0); /****************************************************************************/ /* REVERSE MODE, overloaded calls */ /* */ /* nBV = number of Boolean Vectors to be packed */ /* (see Chapter Dependence Analysis, ADOL-C Documentation) */ /* bits_per_long = 8*sizeof(unsigned long int) */ /* q = nBV / bits_per_long + ( (nBV % bits_per_long) != 0 ) */ /* */ /* For the full Jacobian matrix set */ /* q = depen / bits_per_long + ((depen % bits_per_long) != 0) */ /* and pass a bit pattern version of the identity matrix as an argument */ /* */ /*--------------------------------------------------------------------------*/ /* */ /* Bit pattern propagation call, d = 0, tight & safe version */ /* */ /* reverse(tag, m, n, q, U[q][m], Z[q][n], mode) : intfov */ ADOLC_DLL_EXPORT int reverse (short, int, int, int, unsigned long int**, unsigned long int**, char =0); #endif /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/adutilsc.h0000644000175200017520000000146712032277512016465 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adutilsc.h Revision: $Id: adutilsc.h 354 2012-10-01 11:32:26Z kulshres $ Contents: Provides all C/C++ interfaces of ADOL-C. NOTICE: This file is kept for compatibility reasons only. The new header adolc.h is included. Copyright (c) Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADUTILSC_H) #define ADOLC_ADUTILSC_H 1 #include #endif ADOL-C-2.6.3/ADOL-C/include/adolc/adoublecuda.h0000644000175200017520000006313012106465576017133 0ustar coincoin/* --------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ Revision: $Id: adoublecuda.h 408 2013-02-12 16:19:10Z kulshres $ Contents: adoublecuda.h contains the class of adouble specifically suited to be used within CUDA environment Copyright (c) Alina Koniaeva, Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOUBLECUDA_H) #define ADOLC_ADOUBLECUDA_H 1 #include #include #include #include #include using std::cout; using std::cin; using std::cerr; using std::ostream; using std::istream; #include #include namespace adtlc { # define ADVAL adval # define ADVAL_TYPE double # define FOR_I_EQ_0_LT_NUMDIR # define ADVAL_I adval # define ADV_I adv # define V_I v #define ADOLC_MATH_NSP std inline __device__ double makeNaN() { return CUDART_NAN; } inline __device__ double makeInf() { return CUDART_INF; } class adouble { public: // ctors __device__ inline adouble(); __device__ inline adouble(const double v); __device__ inline adouble(const double v, ADVAL_TYPE adv); __device__ inline adouble(const adouble& a); #if defined(DYNAMIC_DIRECTIONS) inline ~adouble(); #endif /******************* temporary results ******************************/ // sign __device__ inline adouble operator - () const; __device__ inline adouble operator + () const; // addition __device__ inline adouble operator + (const double v) const; __device__ inline adouble operator + (const adouble& a) const; __device__ inline friend adouble operator + (const double v, const adouble& a); // substraction __device__ inline adouble operator - (const double v) const; __device__ inline adouble operator - (const adouble& a) const; __device__ inline friend adouble operator - (const double v, const adouble& a); // multiplication __device__ inline adouble operator * (const double v) const; __device__ inline adouble operator * (const adouble& a) const; __device__ inline friend adouble operator * (const double v, const adouble& a); // division __device__ inline adouble operator / (const double v) const; __device__ inline adouble operator / (const adouble& a) const; __device__ inline friend adouble operator / (const double v, const adouble& a); // inc/dec __device__ inline adouble operator ++ (); __device__ inline adouble operator ++ (int); __device__ inline adouble operator -- (); __device__ inline adouble operator -- (int); // functions __device__ inline friend adouble tan(const adouble &a); __device__ inline friend adouble exp(const adouble &a); __device__ inline friend adouble log(const adouble &a); __device__ inline friend adouble sqrt(const adouble &a); __device__ inline friend adouble sin(const adouble &a); __device__ inline friend adouble cos(const adouble &a); __device__ inline friend adouble asin(const adouble &a); __device__ inline friend adouble acos(const adouble &a); __device__ inline friend adouble atan(const adouble &a); __device__ inline friend adouble atan2(const adouble &a, const adouble &b); __device__ inline friend adouble pow(const adouble &a, double v); __device__ inline friend adouble pow(const adouble &a, const adouble &b); __device__ inline friend adouble pow(double v, const adouble &a); __device__ inline friend adouble log10(const adouble &a); __device__ inline friend adouble sinh (const adouble &a); __device__ inline friend adouble cosh (const adouble &a); __device__ inline friend adouble tanh (const adouble &a); #if defined(ATRIG_ERF) __device__ inline friend adouble asinh (const adouble &a); __device__ inline friend adouble acosh (const adouble &a); __device__ inline friend adouble atanh (const adouble &a); #endif __device__ inline friend adouble fabs (const adouble &a); __device__ inline friend adouble ceil (const adouble &a); __device__ inline friend adouble floor (const adouble &a); __device__ inline friend adouble fmax (const adouble &a, const adouble &b); __device__ inline friend adouble fmax (double v, const adouble &a); __device__ inline friend adouble fmax (const adouble &a, double v); __device__ inline friend adouble fmin (const adouble &a, const adouble &b); __device__ inline friend adouble fmin (double v, const adouble &a); __device__ inline friend adouble fmin (const adouble &a, double v); __device__ inline friend adouble ldexp (const adouble &a, const adouble &b); __device__ inline friend adouble ldexp (const adouble &a, const double v); __device__ inline friend adouble ldexp (const double v, const adouble &a); __device__ inline friend double frexp (const adouble &a, int* v); #if defined(ATRIG_ERF) __device__ inline friend adouble erf (const adouble &a); #endif /******************* nontemporary results ***************************/ // assignment __device__ inline void operator = (const double v); __device__ inline void operator = (const adouble& a); // addition __device__ inline void operator += (const double v); __device__ inline void operator += (const adouble& a); // substraction __device__ inline void operator -= (const double v); __device__ inline void operator -= (const adouble& a); // multiplication __device__ inline void operator *= (const double v); __device__ inline void operator *= (const adouble& a); // division __device__ inline void operator /= (const double v); __device__ inline void operator /= (const adouble& a); // not __device__ inline int operator ! () const; // comparision __device__ inline int operator != (const adouble&) const; __device__ inline int operator != (const double) const; __device__ inline friend int operator != (const double, const adouble&); __device__ inline int operator == (const adouble&) const; __device__ inline int operator == (const double) const; __device__ inline friend int operator == (const double, const adouble&); __device__ inline int operator <= (const adouble&) const; __device__ inline int operator <= (const double) const; __device__ inline friend int operator <= (const double, const adouble&); __device__ inline int operator >= (const adouble&) const; __device__ inline int operator >= (const double) const; __device__ inline friend int operator >= (const double, const adouble&); __device__ inline int operator > (const adouble&) const; __device__ inline int operator > (const double) const; __device__ inline friend int operator > (const double, const adouble&); __device__ inline int operator < (const adouble&) const; __device__ inline int operator < (const double) const; __device__ inline friend int operator < (const double, const adouble&); /******************* getter / setter ********************************/ __device__ inline double getValue() const; __device__ inline void setValue(const double v); __device__ inline ADVAL_TYPE getADValue() const; __device__ inline void setADValue(ADVAL_TYPE v); #if defined(NUMBER_DIRECTIONS) inline double getADValue(const unsigned int p) const; inline void setADValue(const unsigned int p, const double v); #endif /******************* i/o operations *********************************/ inline friend ostream& operator << ( ostream&, const adouble& ); inline friend istream& operator >> ( istream&, adouble& ); private: // internal variables double val; double ADVAL; }; /******************************* ctors ************************************/ adouble::adouble() { #if defined(DYNAMIC_DIRECTIONS) adval = new double[ADOLC_numDir]; #endif } adouble::adouble(const double v) : val(v) { #if defined(DYNAMIC_DIRECTIONS) adval = new double[ADOLC_numDir]; #endif FOR_I_EQ_0_LT_NUMDIR ADVAL_I = 0.0; } adouble::adouble(const double v, ADVAL_TYPE adv) : val(v) { #if defined(DYNAMIC_DIRECTIONS) adval = new double[ADOLC_numDir]; #endif FOR_I_EQ_0_LT_NUMDIR ADVAL_I=ADV_I; } adouble::adouble(const adouble& a) : val(a.val) { #if defined(DYNAMIC_DIRECTIONS) adval = new double[ADOLC_numDir]; #endif FOR_I_EQ_0_LT_NUMDIR ADVAL_I=a.ADVAL_I; } /******************************* dtors ************************************/ #if defined(DYNAMIC_DIRECTIONS) adouble::~adouble() { delete[] adval; } #endif /************************* temporary results ******************************/ // sign adouble adouble::operator - () const { adouble tmp; tmp.val=-val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=-ADVAL_I; return tmp; } adouble adouble::operator + () const { return *this; } // addition adouble adouble::operator + (const double v) const { return adouble(val+v, adval); } adouble adouble::operator + (const adouble& a) const { adouble tmp; tmp.val=val+a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I+a.ADVAL_I; return tmp; } adouble operator + (const double v, const adouble& a) { return adouble(v+a.val, a.adval); } // subtraction adouble adouble::operator - (const double v) const { return adouble(val-v, adval); } adouble adouble::operator - (const adouble& a) const { adouble tmp; tmp.val=val-a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I-a.ADVAL_I; return tmp; } adouble operator - (const double v, const adouble& a) { adouble tmp; tmp.val=v-a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=-a.ADVAL_I; return tmp; } // multiplication adouble adouble::operator * (const double v) const { adouble tmp; tmp.val=val*v; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I*v; return tmp; } adouble adouble::operator * (const adouble& a) const { adouble tmp; tmp.val=val*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I*a.val+val*a.ADVAL_I; return tmp; } adouble operator * (const double v, const adouble& a) { adouble tmp; tmp.val=v*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=v*a.ADVAL_I; return tmp; } // division adouble adouble::operator / (const double v) const { adouble tmp; tmp.val=val/v; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I/v; return tmp; } adouble adouble::operator / (const adouble& a) const { adouble tmp; tmp.val=val/a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=(ADVAL_I*a.val-val*a.ADVAL_I)/(a.val*a.val); return tmp; } adouble operator / (const double v, const adouble& a) { adouble tmp; tmp.val=v/a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=(-v*a.ADVAL_I)/(a.val*a.val); return tmp; } // inc/dec adouble adouble::operator ++ () { ++val; return *this; } adouble adouble::operator ++ (int) { adouble tmp; tmp.val=val++; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I; return tmp; } adouble adouble::operator -- () { --val; return *this; } adouble adouble::operator -- (int) { adouble tmp; tmp.val=val--; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I; return tmp; } // functions adouble tan(const adouble& a) { adouble tmp; double tmp2; tmp.val=ADOLC_MATH_NSP::tan(a.val); tmp2=ADOLC_MATH_NSP::cos(a.val); tmp2*=tmp2; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble exp(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::exp(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp.val*a.ADVAL_I; return tmp; } adouble log(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::log(a.val); FOR_I_EQ_0_LT_NUMDIR if (a.val>0) tmp.ADVAL_I=a.ADVAL_I/a.val; else if (a.val==0 && a.ADVAL_I != 0.0) { int sign = (a.ADVAL_I < 0) ? -1 : 1; tmp.ADVAL_I=sign* makeInf(); } else tmp.ADVAL_I=makeNaN(); return tmp; } adouble sqrt(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::sqrt(a.val); FOR_I_EQ_0_LT_NUMDIR if (a.val>0) tmp.ADVAL_I=a.ADVAL_I/(tmp.val*2); else if (a.val==0.0 && a.ADVAL_I != 0.0) { int sign = (a.ADVAL_I < 0) ? -1 : 1; tmp.ADVAL_I=sign * makeInf(); } else tmp.ADVAL_I=makeNaN(); return tmp; } adouble sin(const adouble &a) { adouble tmp; double tmp2; tmp.val=ADOLC_MATH_NSP::sin(a.val); tmp2=ADOLC_MATH_NSP::cos(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } adouble cos(const adouble &a) { adouble tmp; double tmp2; tmp.val=ADOLC_MATH_NSP::cos(a.val); tmp2=-ADOLC_MATH_NSP::sin(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } adouble asin(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::asin(a.val); double tmp2=ADOLC_MATH_NSP::sqrt(1-a.val*a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble acos(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::acos(a.val); double tmp2=-ADOLC_MATH_NSP::sqrt(1-a.val*a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble atan(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::atan(a.val); double tmp2=1+a.val*a.val; tmp2=1/tmp2; if (tmp2!=0) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*tmp2; else FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } adouble atan2(const adouble &a, const adouble &b) { adouble tmp; tmp.val=ADOLC_MATH_NSP::atan2(a.val, b.val); double tmp2=a.val*a.val; double tmp3=b.val*b.val; double tmp4=tmp3/(tmp2+tmp3); if (tmp4!=0) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=(a.ADVAL_I*b.val-a.val*b.ADVAL_I)/tmp3*tmp4; else FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } adouble pow(const adouble &a, double v) { adouble tmp; tmp.val=ADOLC_MATH_NSP::pow(a.val, v); double tmp2=v*ADOLC_MATH_NSP::pow(a.val, v-1); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } adouble pow(const adouble &a, const adouble &b) { adouble tmp; tmp.val=ADOLC_MATH_NSP::pow(a.val, b.val); double tmp2=b.val*ADOLC_MATH_NSP::pow(a.val, b.val-1); double tmp3=ADOLC_MATH_NSP::log(a.val)*tmp.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I+tmp3*b.ADVAL_I; return tmp; } adouble pow(double v, const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::pow(v, a.val); double tmp2=tmp.val*ADOLC_MATH_NSP::log(v); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } adouble log10(const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::log10(a.val); double tmp2=ADOLC_MATH_NSP::log((double)10)*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble sinh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::sinh(a.val); double tmp2=ADOLC_MATH_NSP::cosh(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*tmp2; return tmp; } adouble cosh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::cosh(a.val); double tmp2=ADOLC_MATH_NSP::sinh(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*tmp2; return tmp; } adouble tanh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::tanh(a.val); double tmp2=ADOLC_MATH_NSP::cosh(a.val); tmp2*=tmp2; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } #if defined(ATRIG_ERF) adouble asinh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP_ERF::asinh(a.val); double tmp2=ADOLC_MATH_NSP::sqrt(a.val*a.val+1); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble acosh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP_ERF::acosh(a.val); double tmp2=ADOLC_MATH_NSP::sqrt(a.val*a.val-1); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } adouble atanh (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP_ERF::atanh(a.val); double tmp2=1-a.val*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; return tmp; } #endif adouble fabs (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::fabs(a.val); int as=0; if (a.val>0) as=1; if (a.val<0) as=-1; if (as!=0) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*as; else FOR_I_EQ_0_LT_NUMDIR { as=0; if (a.ADVAL_I>0) as=1; if (a.ADVAL_I<0) as=-1; tmp.ADVAL_I=a.ADVAL_I*as; } return tmp; } adouble ceil (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::ceil(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } adouble floor (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP::floor(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } adouble fmax (const adouble &a, const adouble &b) { adouble tmp; double tmp2=a.val-b.val; if (tmp2<0) { tmp.val=b.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=b.ADVAL_I; } else { tmp.val=a.val; if (tmp2>0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I>0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } } } return tmp; } adouble fmax (const adouble &a, double v) { adouble tmp; double tmp2=a.val-v; if (tmp2<0) { tmp.val=v; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } else { tmp.val=a.val; if (tmp2>0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I>0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } } } return tmp; } adouble fmin (const adouble &a, const adouble &b) { adouble tmp; double tmp2=a.val-b.val; if (tmp2<0) { tmp.val=a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { tmp.val=b.val; if (tmp2>0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=b.ADVAL_I; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I<0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } } } return tmp; } adouble fmin (const adouble &a, double v) { adouble tmp; double tmp2=a.val-v; if (tmp2<0) { tmp.val=a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; } else { tmp.val=v; if (tmp2>0) { FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } else { FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I<0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } } } return tmp; } adouble ldexp (const adouble &a, const adouble &b) { return a*pow(2.,b); } adouble ldexp (const adouble &a, const double v) { return a*ADOLC_MATH_NSP::pow(2.,v); } adouble ldexp (const double v, const adouble &a) { return v*pow(2.,a); } double frexp (const adouble &a, int* v) { return ADOLC_MATH_NSP::frexp(a.val, v); } #if defined(ATRIG_ERF) adouble erf (const adouble &a) { adouble tmp; tmp.val=ADOLC_MATH_NSP_ERF::erf(a.val); double tmp2 = 2.0 / ADOLC_MATH_NSP_ERF::sqrt(ADOLC_MATH_NSP::acos(-1.0)) * ADOLC_MATH_NSP_ERF::exp(-a.val*a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; return tmp; } #endif /******************* nontemporary results *********************************/ void adouble::operator = (const double v) { val=v; FOR_I_EQ_0_LT_NUMDIR ADVAL_I=0.0; } void adouble::operator = (const adouble& a) { val=a.val; FOR_I_EQ_0_LT_NUMDIR ADVAL_I=a.ADVAL_I; } void adouble::operator += (const double v) { val+=v; } void adouble::operator += (const adouble& a) { val=val+a.val; FOR_I_EQ_0_LT_NUMDIR ADVAL_I+=a.ADVAL_I; } void adouble::operator -= (const double v) { val-=v; } void adouble::operator -= (const adouble& a) { val=val-a.val; FOR_I_EQ_0_LT_NUMDIR ADVAL_I-=a.ADVAL_I; } void adouble::operator *= (const double v) { val=val*v; FOR_I_EQ_0_LT_NUMDIR ADVAL_I*=v; } void adouble::operator *= (const adouble& a) { FOR_I_EQ_0_LT_NUMDIR ADVAL_I=ADVAL_I*a.val+val*a.ADVAL_I; val*=a.val; } void adouble::operator /= (const double v) { val/=v; FOR_I_EQ_0_LT_NUMDIR ADVAL_I/=v; } void adouble::operator /= (const adouble& a) { FOR_I_EQ_0_LT_NUMDIR ADVAL_I=(ADVAL_I*a.val-val*a.ADVAL_I)/(a.val*a.val); val=val/a.val; } // not int adouble::operator ! () const { return val==0.0; } // comparision int adouble::operator != (const adouble &a) const { return val!=a.val; } int adouble::operator != (const double v) const { return val!=v; } int operator != (const double v, const adouble &a) { return v!=a.val; } int adouble::operator == (const adouble &a) const { return val==a.val; } int adouble::operator == (const double v) const { return val==v; } int operator == (const double v, const adouble &a) { return v==a.val; } int adouble::operator <= (const adouble &a) const { return val<=a.val; } int adouble::operator <= (const double v) const { return val<=v; } int operator <= (const double v, const adouble &a) { return v<=a.val; } int adouble::operator >= (const adouble &a) const { return val>=a.val; } int adouble::operator >= (const double v) const { return val>=v; } int operator >= (const double v, const adouble &a) { return v>=a.val; } int adouble::operator > (const adouble &a) const { return val>a.val; } int adouble::operator > (const double v) const { return val>v; } int operator > (const double v, const adouble &a) { return v>a.val; } int adouble::operator < (const adouble &a) const { return val=NUMBER_DIRECTIONS) { fprintf(DIAG_OUT, "Derivative array accessed out of bounds"\ " while \"getADValue(...)\"!!!\n"); exit(-1); } return adval[p]; } void adouble::setADValue(const unsigned int p, const double v) { if (p>=NUMBER_DIRECTIONS) { fprintf(DIAG_OUT, "Derivative array accessed out of bounds"\ " while \"setADValue(...)\"!!!\n"); exit(-1); } adval[p]=v; } # endif #if defined(NUMBER_DIRECTIONS) static void setNumDir(const unsigned int p) { #if !defined(DYNAMIC_DIRECTIONS) if (p>NUMBER_DIRECTIONS) ADOLC_numDir=NUMBER_DIRECTIONS; else ADOLC_numDir=p; #else ADOLC_numDir = p; #endif } #endif /******************* i/o operations ***************************************/ ostream& operator << ( ostream& out, const adouble& a) { out << "Value: " << a.val; #if !defined(NUMBER_DIRECTIONS) out << " ADValue: "; #else out << " ADValues (" << ADOLC_numDir << "): "; #endif FOR_I_EQ_0_LT_NUMDIR out << a.ADVAL_I << " "; out << "(a)"; return out; } istream& operator >> ( istream& in, adouble& a) { char c; do { in >> c; } while (c!=':' && !in.eof()); in >> a.val; #if !defined(NUMBER_DIRECTIONS) do in >> c; while (c!=':' && !in.eof()); #else unsigned int num; do in >> c; while (c!='(' && !in.eof()); in >> num; if (num>NUMBER_DIRECTIONS) { cout << "ADOL-C error: to many directions in input\n"; exit(-1); } do in >> c; while (c!=')' && !in.eof()); #endif FOR_I_EQ_0_LT_NUMDIR in >> a.ADVAL_I; do in >> c; while (c!=')' && !in.eof()); return in; } } /****************************************************************************/ /* end traceless gpu implementation first order derivatives */ /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/convolut.h0000644000175200017520000000675512373412350016532 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: convolut.h Revision: $Id: convolut.h 537 2014-08-15 14:10:48Z kulshres $ Contents: Convolution routines (used by ho_rev.mc) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_CONVOLUT_H) #define ADOLC_CONVOLUT_H 1 #include BEGIN_C_DECLS /****************************************************************************/ /* CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Evaluates convolution of a and b to c */ void conv( int dim, revreal *a, revreal *b, revreal *c ); void conv0( int dim, revreal *a, revreal *b, revreal *c ); /****************************************************************************/ /* INCREMENTAL CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Increments truncated convolution of a and b to c */ void inconv ( int dim, revreal *a, revreal *b, revreal* c ); /*--------------------------------------------------------------------------*/ /* Increments truncated convolution of a and b to c and sets a to zero */ void inconv0( int dim, revreal *a, revreal *b, revreal* c ); void inconv1( int dim, revreal *a, revreal *b, revreal* c ); /****************************************************************************/ /* DECREMENTAL CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c */ void deconv ( int dim, revreal* a, revreal *b, revreal* c ); /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c and sets a to zero */ void deconv0( int dim, revreal* a, revreal *b, revreal* c ); void deconv1( int dim, revreal* a, revreal *b, revreal* c ); void deconvZeroR( int dim, revreal *a, revreal *b, revreal *c ); /****************************************************************************/ /* OTHER USEFUL ROUTINES */ /*--------------------------------------------------------------------------*/ void divide(int dim, revreal* a, revreal *b, revreal* c); /*--------------------------------------------------------------------------*/ void recipr(int dim, double a, revreal *b, revreal* c); /****************************************************************************/ /* ZEROING */ /*--------------------------------------------------------------------------*/ /* Set a to zero */ void zeroset(int dim, double* a); /*--------------------------------------------------------------------------*/ /* Copies a to tmp and initializes a to zero */ void copyAndZeroset( int dim, revreal *a, revreal* tmp); /****************************************************************************/ END_C_DECLS #endif ADOL-C-2.6.3/ADOL-C/include/adolc/adouble.h0000644000175200017520000003620712633764260016300 0ustar coincoin/* --------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ Revision: $Id: adouble.h 659 2015-12-15 10:17:20Z kulshres $ Contents: adouble.h contains the basis for the class of adouble included here are all the possible functions defined on the adouble class. Notice that, as opposed to ealier versions, both the class adub and the class adouble are derived from a base class (badouble). See below for further explanation. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Benjamin Letschert Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOUBLE_H) #define ADOLC_ADOUBLE_H 1 /****************************************************************************/ /* THIS FILE IS C++ */ #ifdef __cplusplus #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) #define COMPILER_HAS_CXX11 #else #error "please use -std=c++11 compiler flag with a C++11 compliant compiler" #endif #include #include #include #include #include using std::cout; using std::cin; using std::cerr; using std::ostream; using std::istream; using std::logic_error; #include /* NOTICE: There are automatic includes at the end of this file! */ /****************************************************************************/ /* FORWARD DECLARATIONS (TAPES) */ /*--------------------------------------------------------------------------*/ class adouble; class adub; class badouble; class pdouble; /*--------------------------------------------------------------------------*/ void ADOLC_DLL_EXPORT condassign( double &res, const double &cond, const double &arg1, const double &arg2 ); void ADOLC_DLL_EXPORT condassign( double &res, const double &cond, const double &arg ); /****************************************************************************/ /* CLASS BADOUBLE */ /** The class badouble contains the basic definitions for the arithmetic operations, comparisons, etc. This is a basic class from which the adub and adouble are derived. Notice that the constructors/destructors for the class badouble are of the trivial variety. This is the main difference among badoubles, adubs, and adoubles. */ class ADOLC_DLL_EXPORT badouble { friend ADOLC_DLL_EXPORT class pdouble; protected: locint location; badouble( void ) {}; // must be public when using gcc >= 3.4 ( problems with value() ) // (see GCC 3.4 Release Series - Changes, New Features, and Fixes) // // badouble( const badouble& a ) {location = a.location;}; explicit badouble( locint lo ) { location = lo; isInit = true; }; bool isInit; // marker if the badouble is properly initialized public: /*--------------------------------------------------------------------------*/ badouble( const badouble& a ) {}; /* ctor */ inline locint loc( void ) const; /* Helpful stuff */ /*------------------------------------------------------------------------*/ badouble& operator >>= ( double& ); /* Assignments */ badouble& operator <<= ( double ); void declareIndependent (); void declareDependent (); badouble& operator = ( double ); badouble& operator = ( const badouble& ); badouble& operator = ( const adub& ); double getValue() const; inline double value() const { return getValue(); } explicit operator double(); explicit operator double const&(); explicit operator double&&(); void setValue ( const double ); /* badouble& operator = ( const adouble& ); !!! olvo 991210: was the same as badouble-assignment */ /*--------------------------------------------------------------------------*/ friend ADOLC_DLL_EXPORT std::ostream& operator << ( std::ostream&, const badouble& ); /* IO friends */ friend ADOLC_DLL_EXPORT std::istream& operator >> ( std::istream&, const badouble& ); /*------------------------------------------------------------------------*/ badouble& operator += ( double ); /* Operation + Assignment */ badouble& operator += ( const badouble& ); badouble& operator -= ( double y ); badouble& operator -= ( const badouble& ); badouble& operator *= ( double ); badouble& operator *= ( const badouble& ); badouble& operator /= ( double ); badouble& operator /= ( const badouble& ); /* olvo 991122 n2l: new special op_codes */ badouble& operator += ( const adub& ); badouble& operator -= ( const adub& ); /*--------------------------------------------------------------------------*/ badouble& operator = (const pdouble&); badouble& operator += (const pdouble&); badouble& operator -= (const pdouble&); badouble& operator *= (const pdouble&); inline badouble& operator /= (const pdouble&); /*--------------------------------------------------------------------------*/ /* Comparison (friends) */ #if !defined(ADOLC_ADVANCED_BRANCHING) inline friend int operator != ( const badouble&, const badouble& ); inline friend int operator == ( const badouble&, const badouble& ); inline friend int operator <= ( const badouble&, const badouble& ); inline friend int operator >= ( const badouble&, const badouble& ); inline friend int operator > ( const badouble&, const badouble& ); inline friend int operator < ( const badouble&, const badouble& ); #endif inline friend int operator != ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator != ( const badouble&, double ); inline friend int operator == ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator == ( const badouble&, double ); inline friend int operator <= ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator <= ( const badouble&, double ); inline friend int operator >= ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator >= ( const badouble&, double ); inline friend int operator > ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator > ( const badouble&, double ); inline friend int operator < ( double, const badouble& ); friend ADOLC_DLL_EXPORT int operator < ( const badouble&, double ); /*--------------------------------------------------------------------------*/ /* Functions friends with both badouble and adub */ #define _IN_CLASS_ 1 #define _IN_BADOUBLE_ 1 #include #undef _IN_BADOUBLE_ #undef _IN_CLASS_ /*--------------------------------------------------------------------------*/ /* special operators (friends) */ friend ADOLC_DLL_EXPORT adouble atan2 ( const badouble&, const badouble& ); /* uses condassign internally */ friend ADOLC_DLL_EXPORT adouble pow ( const badouble&, const badouble& ); friend ADOLC_DLL_EXPORT adouble pow ( double, const badouble& ); /* User defined version of logarithm to test extend_quad macro */ friend ADOLC_DLL_EXPORT adouble myquad( const badouble& ); /*--------------------------------------------------------------------------*/ /* Conditionals */ friend ADOLC_DLL_EXPORT void condassign( adouble &res, const badouble &cond, const badouble &arg1, const badouble &arg2 ); friend ADOLC_DLL_EXPORT void condassign( adouble &res, const badouble &cond, const badouble &arg ); #define _IN_CLASS_ 1 #define _IN_BADOUBLE_ 1 #include #undef _IN_BADOUBLE_ #undef _IN_CLASS_ }; /****************************************************************************/ /* CLASS ADUB */ /* The class Adub ---- Basically used as a temporary result. The address for an adub is usually generated within an operation. That address is "freed" when the adub goes out of scope (at destruction time). ---- operates just like a badouble, but it has a destructor defined for it. */ ADOLC_DLL_EXPORT adub* adubp_from_adub(const adub&); /* s = adolc_vec_dot(x,y,size); <=> s = _2 */ ADOLC_DLL_EXPORT adub adolc_vec_dot(const adouble*const, const adouble*const, locint); class ADOLC_DLL_EXPORT adub:public badouble { friend ADOLC_DLL_EXPORT class adouble; friend ADOLC_DLL_EXPORT class advector; friend ADOLC_DLL_EXPORT class adubref; friend ADOLC_DLL_EXPORT class pdouble; friend adub* adubp_from_adub(const adub&); private: adub( adub const &) { isInit = false; fprintf(DIAG_OUT,"ADOL-C error: illegal copy construction of adub" " variable\n ... adub objects must never be copied\n"); throw logic_error("illegal constructor call, errorcode=-2"); } adub( void ) { isInit = false; fprintf(DIAG_OUT,"ADOL-C error: illegal default construction of adub" " variable\n"); throw logic_error("illegal constructor call, errorcode=-2"); } explicit adub( double ) { isInit = false; fprintf(DIAG_OUT,"ADOL-C error: illegal construction of adub variable" " from double\n"); throw logic_error("illegal constructor call, errorcode=-2"); } protected: /* this is the only logically legal constructor, which can be called by * friend classes and functions */ adub( locint lo ) : badouble(lo) {} public: explicit operator adub*() const { return adubp_from_adub(*this); } /*--------------------------------------------------------------------------*/ /* s = adolc_vec_dot(x,y,size); <=> s = _2 */ friend adub adolc_vec_dot(const adouble*const, const adouble*const, locint); /* Functions friends with both badouble and adub */ #define _IN_CLASS_ 1 #define _IN_ADUB_ 1 #include #undef _IN_ADUB_ #undef _IN_CLASS_ /*--------------------------------------------------------------------------*/ /* Parameter dependent functions (friends) */ #define _IN_CLASS_ 1 #define _IN_ADUB_ 1 #include #undef _IN_ADUB_ #undef _IN_CLASS_ ~adub(); }; BEGIN_C_DECLS ADOLC_DLL_EXPORT void ensureContiguousLocations(size_t n); END_C_DECLS /****************************************************************************/ /* CLASS ADOUBLE */ /* The class adouble. ---Derived from badouble. Contains the standard constructors/destructors. ---At construction, it is given a new address, and at destruction, that address is freed. */ class ADOLC_DLL_EXPORT adouble:public badouble { friend ADOLC_DLL_EXPORT class advector; friend ADOLC_DLL_EXPORT class pdouble; protected: void initInternal(void); // Init for late initialization public: adouble( const adub& ); adouble( const adouble& ); adouble( void ); adouble( double ); /* adub prevents postfix operators to occur on the left side of an assignment which would not work */ adub operator++( int ); adub operator--( int ); badouble& operator++( void ); badouble& operator--( void ); /* inline double value(); */ ~adouble(); adouble& operator = ( double ); adouble& operator = ( const badouble& ); adouble& operator = ( const adouble& ); adouble& operator = ( const adub& ); adouble& operator = (const pdouble&); inline locint loc(void) const; #if defined(ADOLC_DEFAULT_CONTIG_LOC) void *operator new[](size_t sz) { void *p = ::new char[sz]; size_t n = (sz - sizeof(size_t))/sizeof(adouble); ensureContiguousLocations(n); return p; } void operator delete[](void* p) { ::delete[] (char*)p; } #endif }; #endif /* __cplusplus */ #include #include #ifdef __cplusplus /****************************************************************************/ /* INLINE DEFINITIONS */ /*--------------------------------------------------------------------------*/ inline locint badouble::loc( void ) const { return location; } inline locint adouble::loc( void ) const { const_cast(this)->initInternal(); return location; } /*--------------------------------------------------------------------------*/ /* Comparison */ #if !defined(ADOLC_ADVANCED_BRANCHING) inline int operator != ( const badouble& u, const badouble& v ) { return (u-v != 0); } inline int operator == ( const badouble& u, const badouble& v ) { return (u-v == 0); } inline int operator <= ( const badouble& u, const badouble& v ) { return (u-v <= 0); } inline int operator >= ( const badouble& u, const badouble& v ) { return (u-v >= 0); } inline int operator > ( const badouble& u, const badouble& v ) { return (u-v > 0); } inline int operator < ( const badouble& u, const badouble& v ) { return (u-v < 0); } #endif inline int operator != ( double coval, const badouble& v) { if (coval) return (-coval+v != 0); else return (v != 0); } inline int operator == ( double coval, const badouble& v) { if (coval) return (-coval+v == 0); else return (v == 0); } inline int operator <= ( double coval, const badouble& v ) { if (coval) return (-coval+v >= 0); else return (v >= 0); } inline int operator >= ( double coval, const badouble& v ) { if (coval) return (-coval+v <= 0); else return (v <= 0); } inline int operator > ( double coval, const badouble& v ) { if (coval) return (-coval+v < 0); else return (v < 0); } inline int operator < ( double coval, const badouble& v ) { if (coval) return (-coval+v > 0); else return (v > 0); } /*--------------------------------------------------------------------------*/ /* Subtract a floating point from an adouble */ inline adub operator - ( const badouble& x , double coval ) { return (-coval) + x; } /*--------------------------------------------------------------------------*/ /* Multiply an adouble by a floating point */ inline adub operator * (const badouble& x, double coval) { return coval * x; } /*--------------------------------------------------------------------------*/ /* Divide an adouble by a floating point */ inline adub operator / (const badouble& x, double coval) { return (1.0/coval) * x; } inline badouble& badouble::operator /= (const pdouble& p) { *this *= recipr(p); return *this; } /****************************************************************************/ /* THAT'S ALL*/ #endif /* __cplusplus */ #endif /* ADOLC_ADOUBLE_H */ ADOL-C-2.6.3/ADOL-C/include/adolc/adolc.h0000644000175200017520000000575412633537443015753 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adolc.h Revision: $Id: adolc.h 657 2015-12-14 13:07:47Z kulshres $ Contents: Provides all C/C++ interfaces of ADOL-C. NOTICE: ALL C/C++ headers will be included DEPENDING ON whether the source code is plain C or C/C++ code. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_ADOLC_H) #define ADOLC_ADOLC_H 1 #include /****************************************************************************/ /* Now the pure C++ THINGS */ #if defined(__cplusplus) /*--------------------------------------------------------------------------*/ /* Operator overloading things (active doubles & vectors) */ # include # include # include # include # include #endif /****************************************************************************/ /* Now the C/C++ THINGS */ /*--------------------------------------------------------------------------*/ /* interfaces to basic forward/reverse routines */ #include /*--------------------------------------------------------------------------*/ /* interfaces to "Easy To Use" driver routines for ... */ #include /* optimization & nonlinear equations */ #include /* higher order tensors & inverse/implicit functions */ #include /* ordinary differential equations */ #include /* piecewise smooth functions */ /*--------------------------------------------------------------------------*/ /* interfaces to TAPEDOC package */ #include /*--------------------------------------------------------------------------*/ /* interfaces to SPARSE package */ #if defined(SPARSE) #include #include #endif /*--------------------------------------------------------------------------*/ /* parameters */ #include /*--------------------------------------------------------------------------*/ /* tape and value stack utilities */ #include /*--------------------------------------------------------------------------*/ /* allocation utilities */ #include /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/include/adolc/revolve.h0000644000175200017520000000272612373412350016335 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: revolve.h Revision: $Id: revolve.h 537 2014-08-15 14:10:48Z kulshres $ Contents: optimal binomial checkpointing adapted for ADOL-C Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #if !defined(ADOLC_REVOLVE_H) #define ADOLC_REVOLVE_H 1 #include BEGIN_C_DECLS typedef struct { int advances; int takeshots; int commands; int turn; int reps; int range; int ch[ADOLC_CHECKUP]; int oldsnaps; int oldfine; } revolve_nums; #ifndef _OPENMP extern revolve_nums revolve_numbers; #else #include extern revolve_nums *revolve_numbers; #endif enum revolve_action { revolve_advance, revolve_takeshot, revolve_restore, revolve_firsturn, revolve_youturn, revolve_terminate, revolve_error }; int maxrange(int ss, int tt); int adjustsize(int* steps, int* snaps, int* reps); enum revolve_action revolve(int* check,int* capo,int* fine,int snaps,int* info); END_C_DECLS #endif /* ADOLC_REVOLVE_H */ ADOL-C-2.6.3/ADOL-C/include/adolc/taping.h0000644000175200017520000001223412632261426016134 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: taping.h Revision: $Id: taping.h 645 2015-12-10 11:33:42Z kulshres $ Contents: all C functions directly accessing at least one of the four tapes (operations, locations, constants, value stack) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_TAPING_H) #define ADOLC_TAPING_H 1 #include BEGIN_C_DECLS enum StatEntries { NUM_INDEPENDENTS, /* # of independent variables */ NUM_DEPENDENTS, /* # of dependent variables */ NUM_MAX_LIVES, /* max # of live variables */ TAY_STACK_SIZE, /* # of values in the taylor (value) stack */ OP_BUFFER_SIZE, /* # of operations per buffer == OBUFSIZE (usrparms.h) */ NUM_OPERATIONS, /* overall # of operations */ OP_FILE_ACCESS, /* operations file written or not */ NUM_LOCATIONS, /* overall # of locations */ LOC_FILE_ACCESS, /* locations file written or not */ NUM_VALUES, /* overall # of values */ VAL_FILE_ACCESS, /* values file written or not */ LOC_BUFFER_SIZE, /* # of locations per buffer == LBUFSIZE (usrparms.h) */ VAL_BUFFER_SIZE, /* # of values per buffer == CBUFSIZE (usrparms.h) */ TAY_BUFFER_SIZE, /* # of taylors per buffer <= TBUFSIZE (usrparms.h) */ NUM_EQ_PROD, /* # of eq_*_prod for sparsity pattern */ NO_MIN_MAX, /* no use of min_op, deferred to abs_op for piecewise stuff */ NUM_SWITCHES, /* # of abs calls that can switch branch */ NUM_PARAM, /* no of parameters (doubles) interchangable without retaping */ STAT_SIZE /* represents the size of the stats vector */ }; enum TapeRemovalType { ADOLC_REMOVE_FROM_CORE, ADOLC_REMOVE_COMPLETELY }; ADOLC_DLL_EXPORT void skip_tracefile_cleanup(short tnum); /* Returns statistics on the tape "tag". Use enumeration StatEntries for * accessing the individual elements of the vector "tape_stats"! */ ADOLC_DLL_EXPORT void tapestats(short tag, size_t *tape_stats); ADOLC_DLL_EXPORT void set_nested_ctx(short tag, char nested); /* An all-in-one tape stats printing routine */ ADOLC_DLL_EXPORT void printTapeStats(FILE *stream, short tag); ADOLC_DLL_EXPORT int removeTape(short tapeID, short type); ADOLC_DLL_EXPORT void enableBranchSwitchWarnings(); ADOLC_DLL_EXPORT void disableBranchSwitchWarnings(); ADOLC_DLL_EXPORT void enableMinMaxUsingAbs(); ADOLC_DLL_EXPORT void disableMinMaxUsingAbs(); /* * free location block sorting/consolidation upon calls to ensureContiguousLocations * happens when the ratio between allocated and used locations exceeds gcTriggerRatio or * the allocated locations exceed gcTriggerMaxSize */ ADOLC_DLL_EXPORT void setStoreManagerControl(double gcTriggerRatio, size_t gcTriggerMaxSize); END_C_DECLS /** * Normally, theKeeper would take care of the initialization and finalization * of ADOL-C. However, some compilers do not include the keeper code when * linking. "initADOLC" should be called right after main(...), in this case. * "initADOLC" will not initialize memory, but is only necessary to reference * "theKeeper", such that this static instance is used at least once. :-( */ ADOLC_DLL_EXPORT void initADOLC(); #if defined(__cplusplus) /* Initialization for the taping process. Creates buffers for this tape, sets * files names, and calls appropriate setup routines. * This functions return value is different from zero if a tape with with ID * tnum is available only in core. The old tape gets overwritten by the new * one in this case. */ ADOLC_DLL_EXPORT int trace_on(short tnum, int keepTaylors = 0); /* special version including buffersize customization * obs - size of the operation buffer (number of elements) * lbs - size of the location buffer (number of elements) * vbs - size of the value buffer (number of elements) * tbs - size of the taylor buffer (number of elements) * trace_on is the last point in time we want to allow the change of buffer * sizes for a given tape */ ADOLC_DLL_EXPORT int trace_on(short tnum, int keepTaylors, uint obs, uint lbs, uint vbs, uint tbs, int skipFileCleanup=0); /* Stop Tracing. Cleans up, and turns off trace_flag. Flag not equal zero * enforces writing of the three main tape files (op+loc+val). */ ADOLC_DLL_EXPORT void trace_off(int flag = 0); ADOLC_DLL_EXPORT bool isTaping(); #include ADOLC_DLL_EXPORT void cachedTraceTags(std::vector& result); #endif #endif /* ADOLC_TAPING_H */ ADOL-C-2.6.3/ADOL-C/include/adolc/lie/0000755000175200017520000000000013037353015015244 5ustar coincoinADOL-C-2.6.3/ADOL-C/include/adolc/lie/drivers.h0000644000175200017520000000333712761540604017106 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: lie/drivers.h Revision: $Id$ Contents: functions for computation of Lie derivatives Copyright (c) Siquian Wang, Klaus Röbenack, Jan Winkler, Mirko Franke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_LIE_DRIVER_H) #define ADOLC_LIE_DRIVER_H #include "adolc/internal/common.h" // C++ declarations available only when compiling with C++ #if defined(__cplusplus) ADOLC_DLL_EXPORT int lie_scalar(short, short, short, double*, short, double*); ADOLC_DLL_EXPORT int lie_scalar(short, short, short, short, double*, short, double**); ADOLC_DLL_EXPORT int lie_gradient(short, short, short, double*, short, double**); ADOLC_DLL_EXPORT int lie_gradient(short, short, short, short, double*, short, double***); #endif // C-declarations #if defined (__cplusplus) extern "C" { #endif ADOLC_DLL_EXPORT int lie_scalarc(short, short, short, double*, short, double*); ADOLC_DLL_EXPORT int lie_scalarcv(short, short, short, short, double*, short, double**); ADOLC_DLL_EXPORT int lie_gradientc(short, short, short, double*, short, double**); ADOLC_DLL_EXPORT int lie_gradientcv(short, short, short, short, double*, short, double***); ADOLC_DLL_EXPORT int lie_covector(short, short, short, double*, short, double**); ADOLC_DLL_EXPORT int lie_bracket(short, short, short, double*, short, double**); #if defined (__cplusplus) } #endif #endif ADOL-C-2.6.3/ADOL-C/include/adolc/lie/Makefile.am0000644000175200017520000000120312562202346017276 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id$ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshta ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## libliedriversincludedir = $(pkgincludedir)/lie libliedriversinclude_HEADERS = drivers.h ADOL-C-2.6.3/ADOL-C/include/adolc/lie/Makefile.in0000644000175200017520000004226712562262246017333 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/include/adolc/lie DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(libliedriversinclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libliedriversincludedir)" HEADERS = $(libliedriversinclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ libliedriversincludedir = $(pkgincludedir)/lie libliedriversinclude_HEADERS = drivers.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/include/adolc/lie/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/include/adolc/lie/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-libliedriversincludeHEADERS: $(libliedriversinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(libliedriversinclude_HEADERS)'; test -n "$(libliedriversincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libliedriversincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libliedriversincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libliedriversincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(libliedriversincludedir)" || exit $$?; \ done uninstall-libliedriversincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(libliedriversinclude_HEADERS)'; test -n "$(libliedriversincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(libliedriversincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libliedriversincludedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-libliedriversincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libliedriversincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am \ install-libliedriversincludeHEADERS install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-libliedriversincludeHEADERS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/include/adolc/interfaces.h0000644000175200017520000006017013037350674017003 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: interfaces.h Revision: $Id: interfaces.h 731 2017-01-17 08:11:40Z kulshres $ Contents: Declaration of the standard interfaces to ADOL-C forward and reverse calls (C++, C and Fortran callable C functions). Functions prototyped here are defined in the files uni5_for.mc for zos_forward.c fos_forward.c hos_forward.c fov_forward.c hov_forward.c hov_wk_forward.c fo_rev.mc for fos_reverse.c fov_reverse.c ho_rev.mc for hos_reverse.c hos_ov_reverse.c hov_reverse.c hos_ti_reverse.c hov_ti_reverse.c interfacesC.C interfacesf.c ADOL-C Abreviations : zos : zero-order-scalar mode fos : first-order-scalar mode hos : higher-order-scalar mode fov : first-order-vector mode hov : higher-order-vector mode wk : with keep ov : over vector (forward) ti : Taylor input Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_INTERFACES_H) #define ADOLC_INTERFACES_H 1 #include #if defined(SPARSE) #include #include #endif /****************************************************************************/ /****************************************************************************/ /* Now the C++ THINGS */ #if defined(__cplusplus) /****************************************************************************/ /* FORWARD MODE, overloaded calls */ /*--------------------------------------------------------------------------*/ /* General scalar call. For d=0 or d=1 done by specialized code */ /* */ /* forward(tag, m, n, d, keep, X[n][d+1], Y[m][d+1]) : hos || fos || zos */ ADOLC_DLL_EXPORT int forward(short, int, int, int, int, double**, double**); /*--------------------------------------------------------------------------*/ /* Y can be one dimensional if m=1. d=0 or d=1 done by specialized code */ /* */ /* forward(tag, m, n, d, keep, X[n][d+1], Y[d+1]) : hos || fos || zos */ ADOLC_DLL_EXPORT int forward(short, int, int, int, int, double**, double*); /*--------------------------------------------------------------------------*/ /* X and Y can be one dimensional if d = 0; done by specialized code */ /* */ /* forward(tag, m, n, d, keep, X[n], Y[m]) : zos */ ADOLC_DLL_EXPORT int forward(short, int, int, int, int, double*, double*); /*--------------------------------------------------------------------------*/ /* X and Y can be one dimensional if d omitted; done by specialized code */ /* */ /* forward(tag, m, n, keep, X[n], Y[m]) : zos */ ADOLC_DLL_EXPORT int forward(short, int, int, int, double*, double*); /*--------------------------------------------------------------------------*/ /* General vector call */ /* */ /* forward(tag, m, n, d, p, x[n], X[n][p][d], y[m], Y[m][p][d]) : hov */ ADOLC_DLL_EXPORT int forward(short, int, int, int, int, double*, double***, double*, double***); /*--------------------------------------------------------------------------*/ /* d = 1 may be omitted. General vector call, done by specialized code */ /* */ /* forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p]) : fov */ ADOLC_DLL_EXPORT int forward( short, int, int, int, double*, double**, double*, double**); /****************************************************************************/ /* REVERSE MODE, overloaded calls */ /*--------------------------------------------------------------------------*/ /* General call */ /* */ /* reverse(tag, m, n, d, u[m], Z[n][d+1]) : hos */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double*, double**); /*--------------------------------------------------------------------------*/ /* u can be a scalar if m=1 */ /* */ /* reverse(tag, m, n, d, u, Z[n][d+1]) : hos */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double, double**); /*--------------------------------------------------------------------------*/ /* Z can be vector if d = 0; done by specialized code */ /* */ /* reverse(tag, m, n, d, u[m], Z[n]) : fos */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double*, double*); /*--------------------------------------------------------------------------*/ /* u can be a scalar if m=1 and d=0; done by specialized code */ /* */ /* reverse(tag, m, n, d, u, Z[n]) : fos */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double, double*); /*--------------------------------------------------------------------------*/ /* General vector call */ /* */ /* reverse(tag, m, n, d, q, U[q][m], Z[q][n][d+1], nz[q][n]) : hov */ ADOLC_DLL_EXPORT int reverse( short, int, int, int, int, double**, double***, short** =0); /*--------------------------------------------------------------------------*/ /* U can be a vector if m=1 */ /* */ /* reverse(tag, m, n, d, q, U[q], Z[q][n][d+1], nz[q][n]) : hov */ ADOLC_DLL_EXPORT int reverse( short, int, int, int, int, double*, double***, short** = 0); /*--------------------------------------------------------------------------*/ /* */ /* If d=0 then Z may be a matrix, no nz; done by specialized code */ /* */ /* reverse(tag, m, n, d, q, U[q][m], Z[q][n]) : fov */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, int, double**, double**); /*--------------------------------------------------------------------------*/ /* */ /* d=0 may be omitted, Z is a matrix, no nz; done by specialized code */ /* */ /* reverse(tag, m, n, q, U[q][m], Z[q][n]) : fov */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double**, double**); /*--------------------------------------------------------------------------*/ /* */ /* If m=1 and d=0 then U can be vector and Z a matrix but no nz. */ /* Done by specialized code */ /* */ /* reverse(tag, m, n, d, q, U[q], Z[q][n]) : fov */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, int, double*, double**); /*--------------------------------------------------------------------------*/ /* */ /* If q and U are omitted they default to m and I so that as above */ /* */ /* reverse(tag, m, n, d, Z[q][n][d+1], nz[q][n]) : hov */ ADOLC_DLL_EXPORT int reverse(short, int, int, int, double***, short** =0); #endif /****************************************************************************/ /****************************************************************************/ /* Now the C THINGS */ BEGIN_C_DECLS /****************************************************************************/ /* FORWARD MODE */ /*--------------------------------------------------------------------------*/ /* ZOS */ /* zos_forward(tag, m, n, keep, x[n], y[m]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int zos_forward(short,int,int,int,const double*,double*); /* zos_forward_nk(tag, m, n, x[n], y[m]) */ /* (no keep, defined in uni5_for.c, but not supported in ADOL-C 1.8) */ ADOLC_DLL_EXPORT int zos_forward_nk(short,int,int,const double*,double*); /* zos_forward_partx(tag, m, n, ndim[n], x[n][d], y[m]) */ /* (based on zos_forward) */ ADOLC_DLL_EXPORT int zos_forward_partx(short,int,int,int*,double**,double*); /*--------------------------------------------------------------------------*/ /* FOS */ /* fos_forward(tag, m, n, keep, x[n], X[n], y[m], Y[m]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int fos_forward( short,int,int,int,const double*,double*,double*,double*); /* fos_forward_nk(tag,m,n,x[n],X[n],y[m],Y[m]) */ /* (no keep, defined in uni5_for.c, but not supported in ADOL-C 1.8) */ ADOLC_DLL_EXPORT int fos_forward_nk( short,int,int,const double*,double*,double*,double*); /* fos_forward_partx(tag, m, n, ndim[n], x[n][][2], y[m][2]) */ /* (based on fos_forward) */ ADOLC_DLL_EXPORT int fos_forward_partx( short,int,int,int*,double***,double**); /*--------------------------------------------------------------------------*/ /* HOS */ /* hos_forward(tag, m, n, d, keep, x[n], X[n][d], y[m], Y[m][d]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int hos_forward( short,int,int,int,int,const double*,double**,double*,double**); /* hos_forward_nk(tag, m, n, d, x[n], X[n][d], y[m], Y[m][d]) */ /* (no keep, defined in uni5_for.c, but not supported in ADOL-C 1.8) */ ADOLC_DLL_EXPORT int hos_forward_nk( short,int,int,int,const double*,double**,double*,double**); /* hos_forward_partx(tag, m, n, ndim[n], d, X[n][d+1], Y[m][d+1]) */ /* (defined in forward_partx.c) */ ADOLC_DLL_EXPORT int hos_forward_partx( short,int,int,int*,int,double***,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hos_forward_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* FOV */ /* fov_forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int fov_forward( short, int,int,int,const double*,double**,double*,double**); ADOLC_DLL_EXPORT int fov_offset_forward( short, int,int,int,int,const double*,double**,double*,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint fov_forward_( fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*,fdouble*); /* fov_forward_partx(tag, m, n, ndim[n], p, */ /* x[n][], X[n][][p],y[m], Y[m][p]) */ ADOLC_DLL_EXPORT int fov_forward_partx( short, int, int, int*, int, double**, double***, double*, double**); /*--------------------------------------------------------------------------*/ /* HOV */ /* hov_forward(tag, m, n, d, p, x[n], X[n][p][d], y[m], Y[m][p][d]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int hov_forward( short,int,int,int,int,const double*,double***,double*,double***); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hov_forward_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*,fdouble*); /* hov_forward_partx(tag, m, n, ndim[n], d, p, */ /* x[n][], X[n][][p][d], y[m], Y[m][p][d]) */ ADOLC_DLL_EXPORT int hov_forward_partx( short, int, int, int*, int, int, double**, double****, double*, double***); /*--------------------------------------------------------------------------*/ /* HOV_WK */ /* hov_wk_forward(tag, m, n, d, p, keep, x[n], X[n][p][d], y[m], Y[m][p][d]) */ /* (defined in uni5_for.mc) */ ADOLC_DLL_EXPORT int hov_wk_forward( short,int,int,int,int,int,const double*,double***,double*,double***); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hov_wk_forward_( fint*,fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*,fdouble*,fdouble*); /****************************************************************************/ /* BIT PATTERN UTILITIES */ /*--------------------------------------------------------------------------*/ /* INT_FOR, SAFE */ /* int_forward_safe(tag, m, n, p, X[n][p], Y[m][p]) */ ADOLC_DLL_EXPORT int int_forward_safe (short, int, int, int, unsigned long int**, unsigned long int**); /*--------------------------------------------------------------------------*/ /* INT_FOR, TIGHT */ /* int_forward_tight(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p]) */ ADOLC_DLL_EXPORT int int_forward_tight (short, int, int, int, const double*, unsigned long int**, double*, unsigned long int**); /****************************************************************************/ /* INDEX DOMAIN UTILITIES */ /*--------------------------------------------------------------------------*/ /* INDOPRO, SAFE */ /* indopro_forward_safe(tag, m, n, p, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int indopro_forward_safe (short, int, int, const double*, unsigned int**); /*--------------------------------------------------------------------------*/ /* INDOPRO, TIGHT */ /* indopro_forward_tight(tag, m, n, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int indopro_forward_tight (short, int, int, const double*, unsigned int**); /****************************************************************************/ /* NONLINEAR INDEX DOMAIN UTILITIES */ /*--------------------------------------------------------------------------*/ /* INDOPRO, SAFE */ /* nonl_ind_forward_safe(tag, m, n, p, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int nonl_ind_forward_safe (short, int, int, const double*, unsigned int**); /*--------------------------------------------------------------------------*/ /* INDOPRO, TIGHT */ /* nonl_ind_forward_tight(tag, m, n, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int nonl_ind_forward_tight (short, int, int, const double*, unsigned int**); /*--------------------------------------------------------------------------*/ /* INDOPRO, SAFE */ /* nonl_ind_old_forward_safe(tag, m, n, p, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int nonl_ind_old_forward_safe (short, int, int, const double*, unsigned int**); /*--------------------------------------------------------------------------*/ /* INDOPRO, TIGHT */ /* nonl_ind_old_forward_tight(tag, m, n, x[n], *Y[m]) */ ADOLC_DLL_EXPORT int nonl_ind_old_forward_tight (short, int, int, const double*, unsigned int**); /****************************************************************************/ /* REVERSE MODE */ /*--------------------------------------------------------------------------*/ /* FOS */ /* fos_reverse(tag, m, n, u[m], z[n]) */ /* (defined in fo_rev.mc) */ ADOLC_DLL_EXPORT int fos_reverse(short,int,int,double*,double*); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint fos_reverse_(fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOS */ /* hos_reverse(tag, m, n, d, u[m], Z[n][d+1]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hos_reverse(short,int,int,int,double*,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hos_reverse_(fint*,fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOS_TI */ /* hos_ti_reverse(tag, m, n, d, U[m][d+1], Z[n][d+1]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hos_ti_reverse(short,int,int,int,double**,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hos_ti_reverse_( fint*,fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOS_OV */ /* hos_ov_reverse(tag, m, n, d, u[m], Z[n][d+1]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hos_ov_reverse(short,int,int,int,int,double**,double***); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hos_ov_reverse_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble***); /*--------------------------------------------------------------------------*/ /* FOV */ /* fov_reverse(tag, m, n, p, U[p][m], Z[p][n]) */ /* (defined in fo_rev.mc) */ ADOLC_DLL_EXPORT int fov_reverse(short,int,int,int,double**,double**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint fov_reverse_(fint*,fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOV */ /* hov_reverse(tag, m, n, d, p, U[p][m], Z[p][n][d+1], nz[p][n]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hov_reverse( short,int,int,int,int,double**,double***,short**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hov_reverse_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*); /*--------------------------------------------------------------------------*/ /* HOV_TI */ /* hov_ti_reverse(tag, m, n, d, p, U[p][m][d+1], Z[p][n][d+1], nz[p][n]) */ /* (defined in ho_rev.mc) */ ADOLC_DLL_EXPORT int hov_ti_reverse( short,int,int,int,int,double***,double***,short**); /* now pack the arrays into vectors for Fortran calling */ ADOLC_DLL_EXPORT fint hov_ti_reverse_( fint*,fint*,fint*,fint*,fint*,fdouble*,fdouble*); /****************************************************************************/ /* BIT PATTERN UTILITIES */ /*--------------------------------------------------------------------------*/ /* INT_REV, TIGHT */ /* int_reverse_tight(tag, m, n, q, U[q][m], Z[q][n]) */ ADOLC_DLL_EXPORT int int_reverse_tight (short, int, int, int, unsigned long int**, unsigned long int**); /*--------------------------------------------------------------------------*/ /* INT_REV, SAFE */ /* int_reverse_safe(tag, m, n, q, U[q][m], Z[q][n]) */ ADOLC_DLL_EXPORT int int_reverse_safe (short, int, int, int, unsigned long int**, unsigned long int**); /*--------------------------------------------------------------------------*/ ADOLC_DLL_EXPORT int get_num_switches(short); ADOLC_DLL_EXPORT int zos_pl_forward(short,int,int,int,const double*,double*,double*); ADOLC_DLL_EXPORT short firstsign(int, double*, double*); ADOLC_DLL_EXPORT short ext_firstsign(double,double,int,double*,double*); ADOLC_DLL_EXPORT short ext_firstsign2(double,int,double*,double*); ADOLC_DLL_EXPORT int fos_pl_forward(short,int,int,const double*,double*,double*,double*,double*,double*); ADOLC_DLL_EXPORT int fov_pl_forward(short,int,int,int,const double*,double**,double*,double**,double*,double**,short*); ADOLC_DLL_EXPORT int fos_pl_sig_forward(short,int,int,const double*,double*,int,short*,short*,double*,double*,double*,double*,short*); ADOLC_DLL_EXPORT int fov_pl_sig_forward(short,int,int,int,const double*,double**,int,short*,short*,double*,double**,double*,double**,short*); ADOLC_DLL_EXPORT int indopro_forward_absnormal(short,int,int,int,const double*,unsigned int**); /*--------------------------------------------------------------------------*/ ADOLC_DLL_EXPORT int fos_pl_reverse(short,int,int,int,int,double*); ADOLC_DLL_EXPORT int fos_pl_sig_reverse(short,int,int,int,short*,double*,double*); END_C_DECLS #endif ADOL-C-2.6.3/ADOL-C/include/adolc/Makefile.am0000644000175200017520000000205712562202137016533 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 608 2015-08-10 20:06:55Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## pkginclude_HEADERS = adolc.h adalloc.h adouble.h adutils.h adutilsc.h \ convolut.h fortutils.h \ interfaces.h taping.h \ externfcts.h checkpointing.h fixpoint.h\ adolc_sparse.h adolc_openmp.h \ revolve.h advector.h \ adtl.h adoublecuda.h param.h externfcts2.h SUBDIRS = internal drivers tapedoc lie if SPARSE SUBDIRS += sparse endif ADOL-C-2.6.3/ADOL-C/include/adolc/adtl.h0000644000175200017520000014363212761540542015607 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adouble.cpp Revision: $Id$ Contents: adtl.h contains that declaratins of procedures used to define various tapeless adouble operations. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Benjamin Letschert, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #ifndef ADOLC_ADTL_H #define ADOLC_ADTL_H #include #include #include #include #if __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1900) #define COMPILER_HAS_CXX11 #else #error "please use -std=c++11 compiler flag with a C++11 compliant compiler" #endif using std::ostream; using std::istream; using std::list; using std::logic_error; namespace adtl { double makeNaN(); double makeInf(); enum Mode { ADTL_ZOS = 0x1, ADTL_FOV = 0x3, ADTL_INDO = 0x5, ADTL_FOV_INDO = 0x7 }; class adouble; class refcounter { private: ADOLC_DLL_EXPIMP static size_t refcnt; ADOLC_DLL_EXPORT friend void setNumDir(const size_t p); ADOLC_DLL_EXPORT friend void setMode(enum Mode newmode); friend class adouble; public: refcounter() { ++refcnt; } ~refcounter() { --refcnt; } }; class func_ad { public: virtual int operator() (int n, adouble *x, int m, adouble *y) = 0; }; class adouble { public: inline adouble(); inline adouble(const double v); inline adouble(const double v, const double* adv); inline adouble(const adouble& a); inline ~adouble(); // sign inline adouble operator - () const; inline adouble operator + () const; // addition inline adouble operator + (const double v) const; inline adouble operator + (const adouble& a) const; inline friend adouble operator + (const double v, const adouble& a); // substraction inline adouble operator - (const double v) const; inline adouble operator - (const adouble& a) const; inline friend adouble operator - (const double v, const adouble& a); // multiplication inline adouble operator * (const double v) const; inline adouble operator * (const adouble& a) const; inline friend adouble operator * (const double v, const adouble& a); // division inline adouble operator / (const double v) const; inline adouble operator / (const adouble& a) const; inline friend adouble operator / (const double v, const adouble& a); // inc/dec inline adouble operator ++ (); inline adouble operator ++ (int); inline adouble operator -- (); inline adouble operator -- (int); // functions inline friend adouble tan(const adouble &a); inline friend adouble exp(const adouble &a); inline friend adouble log(const adouble &a); inline friend adouble sqrt(const adouble &a); inline friend adouble sin(const adouble &a); inline friend adouble cos(const adouble &a); inline friend adouble asin(const adouble &a); inline friend adouble acos(const adouble &a); inline friend adouble atan(const adouble &a); inline friend adouble atan2(const adouble &a, const adouble &b); inline friend adouble pow(const adouble &a, double v); inline friend adouble pow(const adouble &a, const adouble &b); inline friend adouble pow(double v, const adouble &a); inline friend adouble log10(const adouble &a); inline friend adouble sinh (const adouble &a); inline friend adouble cosh (const adouble &a); inline friend adouble tanh (const adouble &a); #if defined(ATRIG_ERF) inline friend adouble asinh (const adouble &a); inline friend adouble acosh (const adouble &a); inline friend adouble atanh (const adouble &a); #endif inline friend adouble fabs (const adouble &a); inline friend adouble ceil (const adouble &a); inline friend adouble floor (const adouble &a); inline friend adouble fmax (const adouble &a, const adouble &b); inline friend adouble fmax (double v, const adouble &a); inline friend adouble fmax (const adouble &a, double v); inline friend adouble fmin (const adouble &a, const adouble &b); inline friend adouble fmin (double v, const adouble &a); inline friend adouble fmin (const adouble &a, double v); inline friend adouble ldexp (const adouble &a, const adouble &b); inline friend adouble ldexp (const adouble &a, const double v); inline friend adouble ldexp (const double v, const adouble &a); inline friend double frexp (const adouble &a, int* v); #if defined(ATRIG_ERF) inline friend adouble erf (const adouble &a); #endif inline friend void condassign( adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2 ); inline friend void condassign( adouble &res, const adouble &cond, const adouble &arg ); /******************* nontemporary results ***************************/ // assignment inline adouble& operator = (const double v); inline adouble& operator = (const adouble& a); // addition inline adouble& operator += (const double v); inline adouble& operator += (const adouble& a); // substraction inline adouble& operator -= (const double v); inline adouble& operator -= (const adouble& a); // multiplication inline adouble& operator *= (const double v); inline adouble& operator *= (const adouble& a); // division inline adouble& operator /= (const double v); inline adouble& operator /= (const adouble& a); // not inline int operator ! () const; // comparision inline int operator != (const adouble&) const; inline int operator != (const double) const; inline friend int operator != (const double, const adouble&); inline int operator == (const adouble&) const; inline int operator == (const double) const; inline friend int operator == (const double, const adouble&); inline int operator <= (const adouble&) const; inline int operator <= (const double) const; inline friend int operator <= (const double, const adouble&); inline int operator >= (const adouble&) const; inline int operator >= (const double) const; inline friend int operator >= (const double, const adouble&); inline int operator > (const adouble&) const; inline int operator > (const double) const; inline friend int operator > (const double, const adouble&); inline int operator < (const adouble&) const; inline int operator < (const double) const; inline friend int operator < (const double, const adouble&); /******************* getter / setter ********************************/ inline double getValue() const; inline void setValue(const double v); inline const double* const getADValue() const; inline void setADValue(const double* v); inline double getADValue(const unsigned int p) const; inline void setADValue(const unsigned int p, const double v); inline explicit operator double const&(); inline explicit operator double&&(); inline explicit operator double(); protected: inline const list& get_pattern() const; inline void add_to_pattern(const list& v); inline size_t get_pattern_size() const; inline void delete_pattern(); public: ADOLC_DLL_EXPORT friend int ADOLC_Init_sparse_pattern(adouble *a, int n,unsigned int start_cnt); ADOLC_DLL_EXPORT friend int ADOLC_get_sparse_pattern(const adouble *const b, int m, unsigned int **&pat); ADOLC_DLL_EXPORT friend int ADOLC_get_sparse_jacobian( func_ad *const func, int n, int m, int repeat, double* basepoints, int *nnz, unsigned int **rind, unsigned int **cind, double **values); #if 0 ADOLC_DLL_EXPORT friend int ADOLC_get_sparse_jacobian(int n, int m, adouble *x, int *nnz, unsigned int *rind, unsigned int *cind, double *values); #endif /******************* i/o operations *********************************/ ADOLC_DLL_EXPORT friend ostream& operator << ( ostream&, const adouble& ); ADOLC_DLL_EXPORT friend istream& operator >> ( istream&, adouble& ); private: double val; double *adval; list pattern; refcounter __rcnt; inline static bool _do_val(); inline static bool _do_adval(); inline static bool _do_indo(); ADOLC_DLL_EXPIMP static size_t numDir; ADOLC_DLL_EXPIMP static enum Mode forward_mode; inline friend void setNumDir(const size_t p); inline friend void setMode(enum Mode newmode); }; } #include #include #include namespace adtl { enum ModeMask { ADTL_Z_MASK = 0x1, ADTL_F_MASK = 0x2, ADTL_I_MASK = 0x4 }; #if defined(HAVE_BUILTIN_EXPECT) && HAVE_BUILTIN_EXPECT #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) #endif #ifndef likely #define likely(x) (x) #endif #ifndef unlikely #define unlikely(x) (x) #endif inline bool adouble::_do_val() { return ((forward_mode & ADTL_Z_MASK) == ADTL_Z_MASK); } #define do_val() likely(adouble::_do_val()) #define no_do_val() unlikely(!adouble::_do_val()) inline bool adouble::_do_adval() { return ((forward_mode & ADTL_F_MASK) == ADTL_F_MASK); } #define do_adval() likely(adouble::_do_adval()) #define no_do_adval() unlikely(!adouble::_do_adval()) inline bool adouble::_do_indo() { return ((forward_mode & ADTL_I_MASK) == ADTL_I_MASK); } #define do_indo() unlikely(adouble::_do_indo()) #define no_do_indo() likely(!adouble::_do_indo()) inline void setNumDir(const size_t p) { if (refcounter::refcnt > 0) { fprintf(DIAG_OUT, "ADOL-C Warning: Tapeless: Setting numDir will not change the number of\n directional derivative in existing adoubles and may lead to erronious results\n or memory corruption\n Number of currently existing adoubles = %zu\n", refcounter::refcnt); } if (p < 1) { fprintf(DIAG_OUT, "ADOL-C Error: Tapeless: You are being a moron now.\n"); abort(); } adouble::numDir = p; } inline void setMode(enum Mode newmode) { if (refcounter::refcnt > 0) { fprintf(DIAG_OUT, "ADOL-C Warning: Tapeless: Setting mode will the change the mode of\n computation in previously computed variables and may lead to erronious results\n or memory corruption\n Number of currently existing adoubles = %zu\n", refcounter::refcnt); } adouble::forward_mode = newmode; } inline double makeNaN() { return ADOLC_MATH_NSP::numeric_limits::quiet_NaN(); } inline double makeInf() { return ADOLC_MATH_NSP::numeric_limits::infinity(); } #define FOR_I_EQ_0_LT_NUMDIR for (int _i=0; _i < adouble::numDir; ++_i) #define ADVAL_I adval[_i] #define ADV_I adv[_i] #define V_I v[_i] /******************************* ctors ************************************/ inline adouble::adouble() : val(0), adval(NULL) { if (do_adval()) adval = new double[adouble::numDir]; if (do_indo()) { if (!pattern.empty()) pattern.clear(); } } inline adouble::adouble(const double v) : val(v), adval(NULL) { if (do_adval()) { adval = new double[adouble::numDir]; FOR_I_EQ_0_LT_NUMDIR ADVAL_I = 0.0; } if (do_indo()) { if (!pattern.empty()) pattern.clear(); } } inline adouble::adouble(const double v, const double* adv) : val(v), adval(NULL) { if (do_adval()) { adval = new double[adouble::numDir]; FOR_I_EQ_0_LT_NUMDIR ADVAL_I=ADV_I; } if (do_indo()) { if (!pattern.empty()) pattern.clear(); } } inline adouble::adouble(const adouble& a) : val(a.val), adval(NULL) { if (do_adval()) { adval = new double[adouble::numDir]; FOR_I_EQ_0_LT_NUMDIR ADVAL_I=a.ADVAL_I; } if (do_indo()) { if (!pattern.empty()) pattern.clear(); add_to_pattern(a.get_pattern()); } } /******************************* dtors ************************************/ inline adouble::~adouble() { if (adval != NULL) delete[] adval; #if 0 if ( !pattern.empty() ) pattern.clear(); #endif } /************************* temporary results ******************************/ // sign inline adouble adouble::operator - () const { adouble tmp; if (do_val()) tmp.val=-val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=-ADVAL_I; if (do_indo()) tmp.add_to_pattern( get_pattern() ); return tmp; } inline adouble adouble::operator + () const { return *this; } // addition inline adouble adouble::operator + (const double v) const { adouble tmp(val+v, adval); if (do_indo()) tmp.add_to_pattern( get_pattern() ) ; return tmp; } inline adouble adouble::operator + (const adouble& a) const { adouble tmp; if (do_val()) tmp.val=val+a.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I+a.ADVAL_I; if (do_indo()) { tmp.add_to_pattern( get_pattern() ); tmp.add_to_pattern( a.get_pattern() ); } return tmp; } inline adouble operator + (const double v, const adouble& a) { adouble tmp(v+a.val, a.adval); if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } // subtraction inline adouble adouble::operator - (const double v) const { adouble tmp(val-v, adval); if (do_indo()) tmp.add_to_pattern( get_pattern() ); return tmp; } inline adouble adouble::operator - (const adouble& a) const { adouble tmp; if (do_val()) tmp.val=val-a.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I-a.ADVAL_I; if (do_indo()) { tmp.add_to_pattern( get_pattern() ); tmp.add_to_pattern( a.get_pattern() ); } return tmp; } inline adouble operator - (const double v, const adouble& a) { adouble tmp; if (do_val()) tmp.val=v-a.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=-a.ADVAL_I; if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } // multiplication inline adouble adouble::operator * (const double v) const { adouble tmp; if (do_val()) tmp.val=val*v; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I*v; if (do_indo()) tmp.add_to_pattern( get_pattern() ); return tmp; } inline adouble adouble::operator * (const adouble& a) const { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=val*a.val; if (likely(adouble::_do_adval() && adouble::_do_val())) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I*a.val+val*a.ADVAL_I; if (do_indo()) { tmp.add_to_pattern( get_pattern() ); tmp.add_to_pattern( a.get_pattern() ); } return tmp; } inline adouble operator * (const double v, const adouble& a) { adouble tmp; if (do_val()) tmp.val=v*a.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=v*a.ADVAL_I; if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } // division inline adouble adouble::operator / (const double v) const { adouble tmp; if (do_val()) tmp.val=val/v; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I/v; if (do_indo()) tmp.add_to_pattern( get_pattern() ); return tmp; } inline adouble adouble::operator / (const adouble& a) const { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=val/a.val; if (likely(adouble::_do_adval() && adouble::_do_val())) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=(ADVAL_I*a.val-val*a.ADVAL_I)/(a.val*a.val); if (do_indo()) { tmp.add_to_pattern( get_pattern() ); tmp.add_to_pattern( a.get_pattern() ); } return tmp; } inline adouble operator / (const double v, const adouble& a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=v/a.val; if (likely(adouble::_do_adval() && adouble::_do_val())) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=(-v*a.ADVAL_I)/(a.val*a.val); if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } // inc/dec inline adouble adouble::operator ++ () { if (do_val()) ++val; return *this; } inline adouble adouble::operator ++ (int) { adouble tmp; if (do_val()) tmp.val=val++; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I; if (do_indo()) tmp.add_to_pattern( get_pattern() ); return tmp; } inline adouble adouble::operator -- () { if (do_val()) --val; return *this; } inline adouble adouble::operator -- (int) { adouble tmp; if (do_val()) tmp.val=val--; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=ADVAL_I; if (do_indo()) tmp.add_to_pattern( get_pattern() ); return tmp; } // functions inline adouble tan(const adouble& a) { adouble tmp; double tmp2; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::tan(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { tmp2=ADOLC_MATH_NSP::cos(a.val); tmp2*=tmp2; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble exp(const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::exp(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp.val*a.ADVAL_I; if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble log(const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::log(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { FOR_I_EQ_0_LT_NUMDIR if (a.val>0) tmp.ADVAL_I=a.ADVAL_I/a.val; else if (a.val==0 && a.ADVAL_I != 0.0) { int sign = (a.ADVAL_I < 0) ? -1 : 1; tmp.ADVAL_I=sign*makeInf(); } else tmp.ADVAL_I=makeNaN(); } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble sqrt(const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::sqrt(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { FOR_I_EQ_0_LT_NUMDIR if (a.val>0) tmp.ADVAL_I=a.ADVAL_I/(tmp.val*2); else if (a.val==0.0 && a.ADVAL_I != 0.0) { int sign = (a.ADVAL_I < 0) ? -1 : 1; tmp.ADVAL_I=sign * makeInf(); } else tmp.ADVAL_I=makeNaN(); } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble sin(const adouble &a) { adouble tmp; double tmp2; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::sin(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { tmp2=ADOLC_MATH_NSP::cos(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble cos(const adouble &a) { adouble tmp; double tmp2; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::cos(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { tmp2=-ADOLC_MATH_NSP::sin(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble asin(const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::asin(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=ADOLC_MATH_NSP::sqrt(1-a.val*a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble acos(const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::acos(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=-ADOLC_MATH_NSP::sqrt(1-a.val*a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble atan(const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::atan(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=1+a.val*a.val; tmp2=1/tmp2; if (tmp2!=0) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*tmp2; else FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble atan2(const adouble &a, const adouble &b) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::atan2(a.val, b.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=a.val*a.val; double tmp3=b.val*b.val; double tmp4=tmp3/(tmp2+tmp3); if (tmp4!=0) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=(a.ADVAL_I*b.val-a.val*b.ADVAL_I)/tmp3*tmp4; else FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } if (do_indo()) { tmp.add_to_pattern( a.get_pattern() ); tmp.add_to_pattern( b.get_pattern() ); } return tmp; } inline adouble pow(const adouble &a, double v) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::pow(a.val, v); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=v*ADOLC_MATH_NSP::pow(a.val, v-1); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble pow(const adouble &a, const adouble &b) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::pow(a.val, b.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=b.val*ADOLC_MATH_NSP::pow(a.val, b.val-1); double tmp3=ADOLC_MATH_NSP::log(a.val)*tmp.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I+tmp3*b.ADVAL_I; } if (do_indo()) { tmp.add_to_pattern( a.get_pattern() ); tmp.add_to_pattern( b.get_pattern() ); } return tmp; } inline adouble pow(double v, const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::pow(v, a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=tmp.val*ADOLC_MATH_NSP::log(v); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble log10(const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::log10(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=ADOLC_MATH_NSP::log((double)10)*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble sinh (const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::sinh(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=ADOLC_MATH_NSP::cosh(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble cosh (const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::cosh(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=ADOLC_MATH_NSP::sinh(a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble tanh (const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::tanh(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=ADOLC_MATH_NSP::cosh(a.val); tmp2*=tmp2; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } #if defined(ATRIG_ERF) inline adouble asinh (const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP_ERF::asinh(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=ADOLC_MATH_NSP::sqrt(a.val*a.val+1); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble acosh (const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP_ERF::acosh(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=ADOLC_MATH_NSP::sqrt(a.val*a.val-1); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble atanh (const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP_ERF::atanh(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2=1-a.val*a.val; FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I/tmp2; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } #endif inline adouble fabs (const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP::fabs(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { int as=0; if (a.val>0) as=1; if (a.val<0) as=-1; if (as!=0) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I*as; else FOR_I_EQ_0_LT_NUMDIR { as=0; if (a.ADVAL_I>0) as=1; if (a.ADVAL_I<0) as=-1; tmp.ADVAL_I=a.ADVAL_I*as; } } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); return tmp; } inline adouble ceil (const adouble &a) { adouble tmp; if (do_val()) tmp.val=ADOLC_MATH_NSP::ceil(a.val); if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } inline adouble floor (const adouble &a) { adouble tmp; if (do_val()) tmp.val=ADOLC_MATH_NSP::floor(a.val); if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; return tmp; } inline adouble fmax (const adouble &a, const adouble &b) { adouble tmp; if (unlikely(!adouble::_do_val() && (adouble::_do_adval() || adouble::_do_indo()))) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } double tmp2=a.val-b.val; if (tmp2<0) { if (do_val()) tmp.val=b.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=b.ADVAL_I; if (do_indo()) tmp.add_to_pattern( b.get_pattern() ); } else { if (do_val()) tmp.val=a.val; if (tmp2>0) { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); } else { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I0) { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } else { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I>0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); } } return tmp; } inline adouble fmax (const adouble &a, double v) { adouble tmp; if (unlikely(!adouble::_do_val() && (adouble::_do_adval() || adouble::_do_indo()))) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } double tmp2=a.val-v; if (tmp2<0) { if (do_val()) tmp.val=v; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } else { if (do_val()) tmp.val=a.val; if (tmp2>0) { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); } else { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I>0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); } } return tmp; } inline adouble fmin (const adouble &a, const adouble &b) { adouble tmp; if (unlikely(!adouble::_do_val() && (adouble::_do_adval() || adouble::_do_indo()))) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } double tmp2=a.val-b.val; if (tmp2<0) { if (do_val()) tmp.val=a.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); } else { if (do_val()) tmp.val=b.val; if (tmp2>0) { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=b.ADVAL_I; if (do_indo()) tmp.add_to_pattern( b.get_pattern() ); } else { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I0) { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); } else { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I<0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); } } return tmp; } inline adouble fmin (const adouble &a, double v) { adouble tmp; if (unlikely(!adouble::_do_val() && (adouble::_do_adval() || adouble::_do_indo()))) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } double tmp2=a.val-v; if (tmp2<0) { if (do_val()) tmp.val=a.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=a.ADVAL_I; if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); } else { if (do_val()) tmp.val=v; if (tmp2>0) { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=0.0; } else { if (do_adval()) FOR_I_EQ_0_LT_NUMDIR { if (a.ADVAL_I<0) tmp.ADVAL_I=a.ADVAL_I; else tmp.ADVAL_I=0.0; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ); } } return tmp; } inline adouble ldexp (const adouble &a, const adouble &b) { adouble tmp = a*pow(2.,b); if (do_indo()) { tmp.add_to_pattern( a.get_pattern() ) ; tmp.add_to_pattern( b.get_pattern() ) ; } return tmp; } inline adouble ldexp (const adouble &a, const double v) { return a*ADOLC_MATH_NSP::pow(2.,v); } inline adouble ldexp (const double v, const adouble &a) { adouble tmp = v*pow(2.,a); if (do_indo()) tmp.add_to_pattern( a.get_pattern() ) ; return tmp; } inline double frexp (const adouble &a, int* v) { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return ADOLC_MATH_NSP::frexp(a.val, v); } #if defined(ATRIG_ERF) inline adouble erf (const adouble &a) { adouble tmp; if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) tmp.val=ADOLC_MATH_NSP_ERF::erf(a.val); if (likely(adouble::_do_adval() && adouble::_do_val())) { double tmp2 = 2.0 / ADOLC_MATH_NSP_ERF::sqrt(ADOLC_MATH_NSP::acos(-1.0)) * ADOLC_MATH_NSP_ERF::exp(-a.val*a.val); FOR_I_EQ_0_LT_NUMDIR tmp.ADVAL_I=tmp2*a.ADVAL_I; } if (do_indo()) tmp.add_to_pattern( a.get_pattern() ) ; return tmp; } #endif inline void condassign( adouble &res, const adouble &cond, const adouble &arg1, const adouble &arg2 ) { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) { if (cond.getValue() > 0) res = arg1; else res = arg2; } } inline void condassign( adouble &res, const adouble &cond, const adouble &arg ) { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (do_val()) { if (cond.getValue() > 0) res = arg; } } /******************* nontemporary results *********************************/ inline adouble& adouble::operator = (const double v) { if (do_val()) val=v; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR ADVAL_I=0.0; if (do_indo()) if (!pattern.empty()) pattern.clear(); return *this; } inline adouble& adouble::operator = (const adouble& a) { if (do_val()) val=a.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR ADVAL_I=a.ADVAL_I; if (do_indo()) { if (!pattern.empty()) pattern.clear(); add_to_pattern( a.get_pattern() ); } return *this; } inline adouble& adouble::operator += (const double v) { if (do_val()) val+=v; return *this; } inline adouble& adouble::operator += (const adouble& a) { if (do_val()) val=val+a.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR ADVAL_I+=a.ADVAL_I; if (do_indo()) add_to_pattern( a.get_pattern() ); return *this; } inline adouble& adouble::operator -= (const double v) { if (do_val()) val-=v; return *this; } inline adouble& adouble::operator -= (const adouble& a) { if (do_val()) val=val-a.val; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR ADVAL_I-=a.ADVAL_I; if (do_indo()) add_to_pattern( a.get_pattern() ) ; return *this; } inline adouble& adouble::operator *= (const double v) { if (do_val()) val=val*v; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR ADVAL_I*=v; return *this; } inline adouble& adouble::operator *= (const adouble& a) { if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (likely(adouble::_do_adval() && adouble::_do_val())) FOR_I_EQ_0_LT_NUMDIR ADVAL_I=ADVAL_I*a.val+val*a.ADVAL_I; if (do_val()) val*=a.val; if (do_indo()) add_to_pattern( a.get_pattern() ) ; return *this; } inline adouble& adouble::operator /= (const double v) { if (do_val()) val/=v; if (do_adval()) FOR_I_EQ_0_LT_NUMDIR ADVAL_I/=v; return *this; } inline adouble& adouble::operator /= (const adouble& a) { if (unlikely(!adouble::_do_val() && adouble::_do_adval())) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (likely(adouble::_do_adval() && adouble::_do_val())) FOR_I_EQ_0_LT_NUMDIR ADVAL_I=(ADVAL_I*a.val-val*a.ADVAL_I)/(a.val*a.val); if (do_val()) val=val/a.val; if (do_indo()) add_to_pattern( a.get_pattern() ) ; return *this; } // not inline int adouble::operator ! () const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val==0.0; } // comparision inline int adouble::operator != (const adouble &a) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val!=a.val; } inline int adouble::operator != (const double v) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val!=v; } inline int operator != (const double v, const adouble &a) { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return v!=a.val; } inline int adouble::operator == (const adouble &a) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val==a.val; } inline int adouble::operator == (const double v) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val==v; } inline int operator == (const double v, const adouble &a) { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return v==a.val; } inline int adouble::operator <= (const adouble &a) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val<=a.val; } inline int adouble::operator <= (const double v) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val<=v; } inline int operator <= (const double v, const adouble &a) { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return v<=a.val; } inline int adouble::operator >= (const adouble &a) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val>=a.val; } inline int adouble::operator >= (const double v) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val>=v; } inline int operator >= (const double v, const adouble &a) { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return v>=a.val; } inline int adouble::operator > (const adouble &a) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val>a.val; } inline int adouble::operator > (const double v) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val>v; } inline int operator > (const double v, const adouble &a) { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return v>a.val; } inline int adouble::operator < (const adouble &a) const { if (no_do_val()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return val=adouble::numDir) { fprintf(DIAG_OUT, "Derivative array accessed out of bounds"\ " while \"getADValue(...)\"!!!\n"); throw logic_error("incorrect function call, errorcode=-1"); } return adval[p]; } inline void adouble::setADValue(const unsigned int p, const double v) { if (no_do_adval()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (p>=adouble::numDir) { fprintf(DIAG_OUT, "Derivative array accessed out of bounds"\ " while \"setADValue(...)\"!!!\n"); throw logic_error("incorrect function call, errorcode=-1"); } adval[p]=v; } inline const list& adouble::get_pattern() const { if (no_do_indo()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } return pattern; } inline void adouble::delete_pattern() { if (no_do_indo()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if ( !pattern.empty() ) pattern.clear(); } inline void adouble::add_to_pattern(const list& v) { if (no_do_indo()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } if (likely( pattern != v)) { if( !v.empty() ){ list cv = v; //pattern.splice(pattern.end(), cv); pattern.merge(cv); //if (pattern.size() > refcounter::refcnt) { //pattern.sort(); pattern.unique(); //} } } } inline size_t adouble::get_pattern_size() const { if (no_do_indo()) { fprintf(DIAG_OUT, "ADOL-C error: Tapeless: Incorrect mode, call setMode(enum Mode mode)\n"); throw logic_error("incorrect function call, errorcode=1"); } size_t s=0; if( !pattern.empty() ) s = pattern.size(); return s; } } #endif ADOL-C-2.6.3/ADOL-C/doc/0000755000175200017520000000000013037353015012533 5ustar coincoinADOL-C-2.6.3/ADOL-C/doc/tapebasic.eps0000644000175200017520000001116611227416777015222 0ustar coincoin%!PS-Adobe-2.0 EPSF-2.0 %%Title: tapebasic.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:02:12 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 314 156 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 156 moveto 0 0 lineto 314 0 lineto 314 156 lineto closepath clip newpath -27.6 185.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 % Ellipse 7.500 slw n 2937 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 3150 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 3375 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Polyline 0 slj 0 slc n 2025 2475 m 3375 2475 l 3375 2925 l 2025 2925 l cp gs col7 s gr % Polyline gs clippath 5230 930 m 5415 930 l 5415 870 l 5230 870 l 5230 870 l 5380 900 l 5230 930 l cp eoclip n 450 900 m 5400 900 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 5230 930 m 5380 900 l 5230 870 l 5260 900 l 5230 930 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 5400 1125 l 5400 1800 l 450 1800 l cp gs col0 s gr % Polyline n 1800 1125 m 2250 1125 l 2250 1800 l 1800 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 2250 1125 m 2700 1125 l 2700 1800 l 2250 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 3600 1125 m 4050 1125 l 4050 1800 l 3600 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 450 1125 m 1800 1125 l 1800 1800 l 450 1800 l cp gs 0.60 setgray ef gr gs col0 s gr % Polyline n 4050 1125 m 5400 1125 l 5400 1800 l 4050 1800 l cp gs 0.40 setgray ef gr gs col0 s gr /Times-Roman ff 317.50 scf sf 1935 720 m gs 1 -1 sc (tape generation) col0 sh gr /Times-Roman ff 317.50 scf sf 2340 2205 m gs 1 -1 sc (time loop) col0 sh gr /Times-Roman ff 317.50 scf sf 4365 2205 m gs 1 -1 sc (target) col0 sh gr /Times-Roman ff 317.50 scf sf 4230 2520 m gs 1 -1 sc (function) col0 sh gr /Times-Roman ff 317.50 scf sf 855 2205 m gs 1 -1 sc (init) col0 sh gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF ADOL-C-2.6.3/ADOL-C/doc/multiplexed.eps0000644000175200017520000001714711227416777015630 0ustar coincoin%!PS-Adobe-2.0 EPSF-2.0 %%Title: multiplexed1.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:46:12 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 524 303 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 303 moveto 0 0 lineto 524 0 lineto 524 303 lineto closepath clip newpath -71.3 320.2 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06000 0.06000 sc % % Fig objects follow % % % here starts figure with depth 50 % Polyline 0 slj 0 slc 7.500 slw n 5550 2625 m 5550 3525 l gs col0 s gr % Polyline 15.000 slw gs clippath 5216 427 m 5490 427 l 5490 322 l 5216 322 l 5216 322 l 5441 375 l 5216 427 l cp eoclip n 1275 375 m 5475 375 l gs col0 s gr gr % arrowhead n 5216 427 m 5441 375 l 5216 322 l 5261 375 l 5216 427 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9566 427 m 9840 427 l 9840 322 l 9566 322 l 9566 322 l 9791 375 l 9566 427 l cp eoclip n 5625 375 m 9825 375 l gs col0 s gr gr % arrowhead n 9566 427 m 9791 375 l 9566 322 l 9611 375 l 9566 427 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw n 1200 2625 m 1500 2625 l 1500 3525 l 1200 3525 l cp gs 0.15 setgray ef gr gs col0 s gr % Polyline n 9600 2625 m 9600 3525 l 9900 3525 l 9900 2625 l cp gs 0.15 setgray ef gr gs col0 s gr % Polyline n 2100 4425 m 4725 4425 l 4725 5325 l 2100 5325 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 2100 2625 m 4725 2625 l 4725 3525 l 2100 3525 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 2100 825 m 4725 825 l 4725 1725 l 2100 1725 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 825 m 9000 825 l 9000 1725 l 6375 1725 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 2625 m 9000 2625 l 9000 3525 l 6375 3525 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 4425 m 9000 4425 l 9000 5325 l 6375 5325 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 5325 2625 m 5550 2625 l 5550 3525 l 5325 3525 l cp gs 0.90 setgray ef gr gs col0 s gr % Polyline n 5550 2625 m 5775 2625 l 5775 3525 l 5550 3525 l cp gs 0.90 setgray ef gr gs col0 s gr % Polyline 15.000 slw gs clippath 2067 1538 m 2154 1277 l 2054 1244 l 1968 1504 l 1968 1504 l 2089 1308 l 2067 1538 l cp eoclip n 1500 3075 m 2100 1275 l gs col0 s gr gr % arrowhead n 2067 1538 m 2089 1308 l 1968 1504 l 2032 1478 l 2067 1538 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1841 3127 m 2115 3127 l 2115 3022 l 1841 3022 l 1841 3022 l 2066 3075 l 1841 3127 l cp eoclip n 1500 3075 m 2100 3075 l gs col0 s gr gr % arrowhead n 1841 3127 m 2066 3075 l 1841 3022 l 1886 3075 l 1841 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1968 4645 m 2054 4905 l 2154 4872 l 2067 4611 l 2067 4611 l 2089 4842 l 1968 4645 l cp eoclip n 1500 3075 m 2100 4875 l gs col0 s gr gr % arrowhead n 1968 4645 m 2089 4842 l 2067 4611 l 2032 4671 l 1968 4645 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6342 1538 m 6429 1277 l 6329 1244 l 6243 1504 l 6243 1504 l 6364 1308 l 6342 1538 l cp eoclip n 5775 3075 m 6375 1275 l gs col0 s gr gr % arrowhead n 6342 1538 m 6364 1308 l 6243 1504 l 6307 1478 l 6342 1538 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6116 3127 m 6390 3127 l 6390 3022 l 6116 3022 l 6116 3022 l 6341 3075 l 6116 3127 l cp eoclip n 5775 3075 m 6375 3075 l gs col0 s gr gr % arrowhead n 6116 3127 m 6341 3075 l 6116 3022 l 6161 3075 l 6116 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6243 4645 m 6329 4905 l 6429 4872 l 6342 4611 l 6342 4611 l 6364 4842 l 6243 4645 l cp eoclip n 5775 3075 m 6375 4875 l gs col0 s gr gr % arrowhead n 6243 4645 m 6364 4842 l 6342 4611 l 6307 4671 l 6243 4645 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9468 2845 m 9554 3105 l 9654 3072 l 9567 2811 l 9567 2811 l 9589 3042 l 9468 2845 l cp eoclip n 9000 1275 m 9600 3075 l gs col0 s gr gr % arrowhead n 9468 2845 m 9589 3042 l 9567 2811 l 9532 2871 l 9468 2845 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9341 3127 m 9615 3127 l 9615 3022 l 9341 3022 l 9341 3022 l 9566 3075 l 9341 3127 l cp eoclip n 9000 3075 m 9600 3075 l gs col0 s gr gr % arrowhead n 9341 3127 m 9566 3075 l 9341 3022 l 9386 3075 l 9341 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9567 3338 m 9654 3077 l 9554 3044 l 9468 3304 l 9468 3304 l 9589 3108 l 9567 3338 l cp eoclip n 9000 4875 m 9600 3075 l gs col0 s gr gr % arrowhead n 9567 3338 m 9589 3108 l 9468 3304 l 9532 3278 l 9567 3338 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5193 2845 m 5279 3105 l 5379 3072 l 5292 2811 l 5292 2811 l 5314 3042 l 5193 2845 l cp eoclip n 5325 3075 m 4725 1275 l gs col0 s gr gr % arrowhead n 5193 2845 m 5314 3042 l 5292 2811 l 5257 2871 l 5193 2845 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5066 3127 m 5340 3127 l 5340 3022 l 5066 3022 l 5066 3022 l 5291 3075 l 5066 3127 l cp eoclip n 5325 3075 m 4725 3075 l gs col0 s gr gr % arrowhead n 5066 3127 m 5291 3075 l 5066 3022 l 5111 3075 l 5066 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5292 3338 m 5379 3077 l 5279 3044 l 5193 3304 l 5193 3304 l 5314 3108 l 5292 3338 l cp eoclip n 5325 3075 m 4725 4875 l gs col0 s gr gr % arrowhead n 5292 3338 m 5314 3108 l 5193 3304 l 5257 3278 l 5292 3338 l cp gs 0.00 setgray ef gr col0 s % here ends figure; $F2psEnd rs showpage %%Trailer %EOF ADOL-C-2.6.3/ADOL-C/doc/tap_point.eps0000644000175200017520000005535611227416777015275 0ustar coincoin%!PS-Adobe-2.0 EPSF-2.0 %%Title: tap_point.eps %%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 %%CreationDate: Mon Sep 7 11:26:42 1998 %%For: eckstein@NBTF01 (Sigrid Eckstein) %%Orientation: Portrait %%BoundingBox: 0 0 594 402 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -2.0 403.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Roman /Times-Roman-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 7391 m -1000 -1000 l 10454 -1000 l 10454 7391 l cp clip 0.06299 0.06299 sc 7.500 slw % Ellipse n 2700 1622 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 3433 2580 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 3004 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 3004 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 4804 45 45 0 360 DrawEllipse gs col-1 s gr % Ellipse n 5130 2779 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 7025 4544 45 45 0 360 DrawEllipse gs col-1 s gr % Ellipse n 7020 2612 16 16 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Polyline n 1125 2072 m 1125 677 l gs col-1 s gr % Polyline n 2700 1622 m 2700 497 l gs col-1 s gr % Polyline [60] 0 sd n 7020 2621 m 7020 4548 l gs col-1 s gr [] 0 sd % Polyline n 7020 2612 m 7020 857 l gs col-1 s gr % Polyline [15 45] 45 sd n 2400 3620 m 4605 1909 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2710 3615 m 5040 1759 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3055 3590 m 5145 1894 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3340 3590 m 5145 2134 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5265 2074 m 5965 1510 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3660 3575 m 5145 2404 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5295 2314 m 6290 1480 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4045 3575 m 6645 1450 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4425 3570 m 6920 1445 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4700 3595 m 6990 1654 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5330 3680 m 6960 2284 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5645 3735 m 6960 2524 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5940 3785 m 6825 2914 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 6270 3814 m 6630 3439 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7080 1624 m 7275 1444 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7080 1909 m 7620 1459 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7065 2254 m 7260 2089 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1875 3529 m 3390 2314 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1695 3394 m 3375 2014 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1495 3290 m 3375 1744 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1290 3154 m 3390 1474 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1060 3010 m 3270 1264 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 885 2884 m 2670 1459 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2760 1399 m 3075 1159 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 735 2749 m 2670 1189 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2760 1159 m 2895 1069 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 585 2599 m 2655 964 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1162 1866 m 2475 869 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 270 2309 m 1102 1664 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1155 1641 m 2295 779 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Ellipse n 1125 2072 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Polyline [15 45] 45 sd n 155 2185 m 1080 1414 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd /Times-Roman-iso ff 210.00 scf sf 5095 1062 m gs 1 -1 sc (2) col-1 sh gr % Polyline [15 45] 45 sd n 1155 1364 m 2040 694 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8160 4039 m 7140 6079 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8375 4215 m 7380 6184 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8580 4335 m 7650 6259 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8845 4435 m 7935 6319 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 9075 4534 m 8205 6364 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 9315 4579 m 8500 6365 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 180 1904 m 1065 1189 l 1095 1174 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1155 1131 m 1365 979 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline n 8505 1744 m 8505 3004 l 8505 3049 l gs col-1 s gr % Polyline [15 45] 45 sd n 4995 3634 m 6975 1969 l gs col-1 s gr [] 0 sd % Polyline n 5130 2734 m 5130 1204 l gs col-1 s gr % Polyline n 3435 2542 m 3435 832 l gs col-1 s gr % Polyline [15 45] 45 sd n 5203 1846 m 5530 1610 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7790 3594 m 6650 5874 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7966 3815 m 6886 5990 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 435 2449 m 1095 1924 l 1095 1909 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3460 1695 m 3655 1585 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3465 1965 m 3830 1730 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3465 2265 m 3995 1900 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3440 1455 m 3485 1440 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline n 2070 677 m 2068 678 l 2064 679 l 2057 682 l 2045 687 l 2029 693 l 2007 702 l 1980 713 l 1948 726 l 1911 741 l 1870 758 l 1825 776 l 1777 796 l 1726 817 l 1675 838 l 1622 860 l 1570 883 l 1518 905 l 1467 927 l 1418 948 l 1371 970 l 1325 990 l 1281 1010 l 1240 1030 l 1200 1049 l 1163 1067 l 1127 1086 l 1093 1103 l 1060 1121 l 1029 1138 l 999 1155 l 970 1172 l 942 1190 l 915 1207 l 888 1225 l 863 1243 l 835 1262 l 809 1281 l 782 1302 l 756 1322 l 730 1344 l 704 1366 l 677 1390 l 650 1415 l 623 1440 l 595 1468 l 566 1497 l 537 1527 l 506 1559 l 475 1593 l 442 1628 l 409 1664 l 376 1702 l 342 1741 l 307 1780 l 274 1819 l 241 1857 l 209 1894 l 179 1929 l 152 1962 l 127 1991 l 106 2017 l 87 2039 l 73 2056 l 62 2070 l 54 2079 l 49 2085 l 46 2089 l 45 2090 l gs col-1 s gr % Polyline n 2070 677 m 2072 678 l 2076 680 l 2084 683 l 2096 688 l 2114 696 l 2136 706 l 2164 718 l 2198 733 l 2236 750 l 2278 769 l 2323 789 l 2372 811 l 2421 834 l 2472 857 l 2523 880 l 2573 903 l 2623 926 l 2671 949 l 2717 971 l 2762 993 l 2805 1013 l 2845 1033 l 2884 1053 l 2921 1072 l 2957 1091 l 2991 1109 l 3024 1127 l 3055 1145 l 3086 1162 l 3116 1180 l 3145 1198 l 3174 1216 l 3203 1234 l 3231 1253 l 3259 1271 l 3288 1291 l 3316 1311 l 3345 1331 l 3374 1353 l 3404 1375 l 3435 1399 l 3467 1424 l 3500 1450 l 3534 1477 l 3569 1506 l 3606 1536 l 3645 1568 l 3684 1602 l 3725 1636 l 3767 1672 l 3809 1708 l 3852 1745 l 3894 1782 l 3936 1818 l 3976 1854 l 4014 1887 l 4049 1918 l 4080 1945 l 4107 1970 l 4131 1990 l 4149 2007 l 4163 2020 l 4174 2029 l 4180 2035 l 4183 2038 l 4185 2039 l gs col-1 s gr % Polyline [60] 0 sd n 1395 4322 m 1396 4321 l 1399 4318 l 1404 4314 l 1411 4306 l 1422 4296 l 1437 4282 l 1455 4265 l 1476 4244 l 1501 4221 l 1529 4195 l 1559 4166 l 1591 4136 l 1625 4104 l 1660 4071 l 1695 4038 l 1731 4005 l 1766 3972 l 1801 3940 l 1836 3908 l 1871 3876 l 1905 3846 l 1938 3816 l 1971 3786 l 2004 3758 l 2036 3729 l 2069 3701 l 2101 3673 l 2134 3644 l 2168 3616 l 2202 3587 l 2237 3558 l 2273 3528 l 2310 3498 l 2339 3473 l 2370 3449 l 2400 3424 l 2432 3398 l 2464 3372 l 2498 3345 l 2532 3317 l 2567 3289 l 2603 3261 l 2639 3232 l 2677 3202 l 2715 3172 l 2754 3141 l 2793 3109 l 2834 3078 l 2874 3046 l 2916 3013 l 2957 2981 l 2999 2948 l 3042 2915 l 3084 2882 l 3126 2849 l 3169 2816 l 3211 2783 l 3254 2751 l 3295 2718 l 3337 2686 l 3378 2655 l 3419 2624 l 3459 2593 l 3498 2563 l 3537 2533 l 3575 2504 l 3612 2476 l 3648 2449 l 3684 2422 l 3718 2396 l 3752 2370 l 3785 2345 l 3817 2321 l 3848 2298 l 3879 2275 l 3909 2253 l 3938 2232 l 3976 2203 l 4014 2175 l 4050 2149 l 4085 2123 l 4120 2098 l 4154 2073 l 4187 2049 l 4221 2025 l 4254 2002 l 4288 1978 l 4322 1955 l 4356 1931 l 4391 1907 l 4426 1883 l 4462 1858 l 4498 1834 l 4534 1809 l 4569 1785 l 4604 1762 l 4638 1740 l 4670 1718 l 4699 1699 l 4726 1681 l 4749 1666 l 4769 1653 l 4785 1642 l 4797 1634 l 4805 1628 l 4811 1625 l 4814 1623 l 4815 1622 l gs col-1 s gr [] 0 sd % Polyline n 4185 2035 m 4187 2034 l 4190 2033 l 4196 2031 l 4207 2027 l 4222 2022 l 4241 2015 l 4266 2007 l 4296 1996 l 4332 1984 l 4373 1970 l 4419 1954 l 4469 1937 l 4522 1919 l 4579 1899 l 4639 1879 l 4700 1859 l 4762 1838 l 4825 1817 l 4888 1796 l 4950 1776 l 5012 1756 l 5072 1737 l 5131 1718 l 5188 1700 l 5243 1683 l 5297 1667 l 5349 1651 l 5399 1637 l 5447 1623 l 5494 1610 l 5539 1597 l 5583 1586 l 5626 1575 l 5667 1564 l 5708 1555 l 5748 1546 l 5788 1537 l 5827 1529 l 5865 1521 l 5904 1514 l 5943 1507 l 5981 1501 l 6020 1494 l 6058 1489 l 6097 1483 l 6137 1478 l 6177 1473 l 6218 1468 l 6260 1464 l 6303 1460 l 6347 1456 l 6392 1453 l 6439 1450 l 6488 1446 l 6538 1444 l 6590 1441 l 6644 1439 l 6700 1436 l 6757 1434 l 6817 1432 l 6877 1431 l 6939 1429 l 7002 1428 l 7065 1426 l 7128 1425 l 7191 1424 l 7253 1423 l 7313 1423 l 7370 1422 l 7424 1421 l 7475 1421 l 7521 1421 l 7562 1420 l 7598 1420 l 7628 1420 l 7653 1420 l 7673 1420 l 7688 1420 l 7698 1420 l 7705 1420 l 7708 1420 l 7710 1420 l gs col-1 s gr % Polyline [60] 0 sd n 6525 3917 m 6480 5852 l gs col-1 s gr [] 0 sd % Polyline n 7715 1415 m 7714 1417 l 7712 1420 l 7708 1427 l 7702 1437 l 7693 1452 l 7681 1471 l 7666 1496 l 7648 1525 l 7628 1560 l 7604 1598 l 7579 1641 l 7551 1687 l 7522 1736 l 7492 1786 l 7461 1838 l 7429 1891 l 7398 1943 l 7368 1995 l 7337 2046 l 7308 2096 l 7280 2145 l 7253 2192 l 7227 2237 l 7202 2281 l 7178 2322 l 7156 2362 l 7134 2401 l 7114 2438 l 7095 2474 l 7076 2508 l 7059 2542 l 7042 2574 l 7025 2606 l 7010 2637 l 6994 2668 l 6979 2699 l 6965 2729 l 6948 2765 l 6932 2801 l 6915 2837 l 6900 2873 l 6884 2909 l 6868 2946 l 6853 2983 l 6838 3019 l 6823 3056 l 6808 3093 l 6794 3130 l 6780 3167 l 6766 3204 l 6752 3240 l 6739 3276 l 6726 3311 l 6714 3345 l 6702 3379 l 6690 3412 l 6680 3443 l 6669 3474 l 6659 3503 l 6650 3531 l 6641 3558 l 6633 3584 l 6625 3608 l 6617 3630 l 6610 3652 l 6604 3672 l 6598 3691 l 6592 3709 l 6587 3726 l 6574 3765 l 6564 3796 l 6555 3822 l 6548 3841 l 6542 3857 l 6537 3868 l 6533 3875 l 6530 3880 l 6528 3882 l 6527 3883 l gs col-1 s gr % Polyline n 2070 3659 m 2071 3659 l 2075 3659 l 2081 3658 l 2090 3658 l 2104 3657 l 2123 3656 l 2147 3655 l 2177 3653 l 2212 3652 l 2253 3650 l 2299 3647 l 2351 3645 l 2407 3642 l 2468 3639 l 2533 3636 l 2601 3633 l 2672 3630 l 2744 3626 l 2818 3623 l 2893 3620 l 2968 3617 l 3043 3614 l 3117 3611 l 3191 3608 l 3262 3605 l 3333 3603 l 3401 3601 l 3468 3599 l 3533 3597 l 3595 3595 l 3656 3594 l 3715 3593 l 3772 3592 l 3827 3591 l 3880 3591 l 3932 3591 l 3982 3591 l 4031 3591 l 4079 3592 l 4126 3592 l 4171 3593 l 4216 3594 l 4260 3596 l 4304 3598 l 4347 3600 l 4390 3602 l 4433 3604 l 4479 3607 l 4525 3610 l 4571 3613 l 4618 3617 l 4664 3621 l 4711 3625 l 4759 3630 l 4807 3635 l 4856 3641 l 4907 3647 l 4958 3653 l 5011 3660 l 5065 3668 l 5121 3676 l 5179 3684 l 5238 3693 l 5300 3702 l 5363 3712 l 5428 3723 l 5494 3733 l 5562 3745 l 5631 3756 l 5701 3768 l 5771 3780 l 5841 3793 l 5911 3805 l 5980 3817 l 6047 3829 l 6111 3841 l 6172 3852 l 6230 3862 l 6283 3872 l 6331 3881 l 6374 3889 l 6411 3896 l 6442 3901 l 6468 3906 l 6488 3910 l 6503 3913 l 6513 3915 l 6520 3916 l 6523 3917 l 6525 3917 l gs col-1 s gr % Polyline n 6479 5884 m 6481 5885 l 6486 5887 l 6494 5890 l 6507 5895 l 6526 5902 l 6550 5911 l 6580 5923 l 6615 5936 l 6656 5951 l 6701 5968 l 6750 5987 l 6801 6006 l 6854 6026 l 6908 6046 l 6962 6066 l 7015 6086 l 7067 6105 l 7118 6123 l 7167 6141 l 7214 6157 l 7259 6173 l 7301 6188 l 7342 6201 l 7380 6214 l 7417 6226 l 7452 6237 l 7485 6248 l 7517 6257 l 7548 6266 l 7578 6275 l 7607 6282 l 7636 6290 l 7664 6297 l 7698 6304 l 7731 6312 l 7764 6318 l 7797 6324 l 7831 6330 l 7865 6335 l 7900 6340 l 7936 6345 l 7973 6349 l 8012 6352 l 8053 6356 l 8095 6359 l 8138 6362 l 8183 6365 l 8229 6367 l 8274 6370 l 8319 6372 l 8362 6373 l 8402 6375 l 8438 6376 l 8470 6377 l 8496 6378 l 8517 6378 l 8532 6379 l 8541 6379 l 8547 6379 l 8549 6379 l gs col-1 s gr % Polyline n 7695 3434 m 7696 3436 l 7700 3440 l 7706 3447 l 7715 3459 l 7729 3475 l 7746 3495 l 7767 3521 l 7792 3551 l 7821 3585 l 7852 3621 l 7886 3661 l 7921 3701 l 7956 3743 l 7993 3784 l 8029 3825 l 8064 3865 l 8099 3903 l 8132 3939 l 8165 3974 l 8196 4007 l 8226 4037 l 8255 4066 l 8282 4092 l 8309 4117 l 8335 4140 l 8361 4162 l 8386 4183 l 8411 4202 l 8435 4220 l 8460 4237 l 8485 4254 l 8512 4271 l 8539 4287 l 8566 4302 l 8595 4317 l 8624 4331 l 8655 4345 l 8687 4359 l 8720 4372 l 8756 4385 l 8793 4398 l 8833 4410 l 8874 4423 l 8918 4436 l 8963 4449 l 9010 4462 l 9059 4474 l 9107 4486 l 9155 4498 l 9202 4510 l 9247 4520 l 9288 4530 l 9325 4538 l 9357 4545 l 9383 4551 l 9404 4555 l 9418 4558 l 9428 4560 l 9433 4562 l 9435 4562 l gs col-1 s gr % Polyline n 45 2089 m 46 2090 l 50 2094 l 55 2100 l 65 2109 l 78 2122 l 95 2140 l 116 2161 l 141 2187 l 169 2216 l 201 2248 l 236 2283 l 273 2320 l 311 2358 l 349 2397 l 389 2436 l 428 2475 l 466 2513 l 504 2549 l 540 2585 l 575 2619 l 610 2651 l 643 2682 l 674 2712 l 705 2740 l 735 2767 l 764 2793 l 793 2817 l 820 2841 l 848 2864 l 875 2887 l 903 2909 l 930 2930 l 958 2952 l 984 2972 l 1010 2992 l 1037 3011 l 1065 3031 l 1094 3051 l 1123 3072 l 1153 3092 l 1185 3113 l 1217 3135 l 1252 3157 l 1288 3180 l 1325 3204 l 1365 3229 l 1406 3254 l 1449 3280 l 1493 3308 l 1540 3335 l 1587 3364 l 1635 3393 l 1684 3422 l 1733 3451 l 1781 3479 l 1828 3507 l 1873 3533 l 1915 3557 l 1953 3580 l 1987 3600 l 2017 3617 l 2042 3632 l 2062 3643 l 2077 3652 l 2088 3658 l 2095 3662 l 2098 3664 l 2100 3665 l gs col-1 s gr % Polyline [60] 0 sd n 8505 3004 m 8505 4804 l gs col-1 s gr [] 0 sd % Polyline [105] 0 sd n 5130 2759 m 5131 2759 l 5134 2758 l 5139 2758 l 5147 2757 l 5159 2755 l 5174 2753 l 5194 2751 l 5219 2748 l 5248 2744 l 5283 2740 l 5322 2735 l 5365 2729 l 5414 2723 l 5466 2717 l 5522 2710 l 5582 2703 l 5644 2695 l 5709 2688 l 5775 2680 l 5843 2672 l 5912 2664 l 5981 2657 l 6050 2649 l 6118 2642 l 6185 2635 l 6251 2629 l 6316 2622 l 6378 2617 l 6439 2612 l 6498 2607 l 6555 2603 l 6609 2600 l 6662 2597 l 6712 2595 l 6761 2594 l 6808 2593 l 6853 2593 l 6896 2593 l 6938 2594 l 6980 2596 l 7020 2599 l 7064 2603 l 7108 2607 l 7152 2613 l 7196 2619 l 7241 2626 l 7287 2635 l 7334 2644 l 7382 2655 l 7431 2666 l 7481 2679 l 7533 2693 l 7586 2707 l 7641 2723 l 7696 2739 l 7753 2756 l 7810 2773 l 7867 2791 l 7924 2809 l 7981 2827 l 8037 2845 l 8091 2863 l 8143 2881 l 8193 2897 l 8240 2913 l 8284 2928 l 8324 2942 l 8361 2954 l 8392 2965 l 8420 2974 l 8443 2983 l 8462 2989 l 8477 2994 l 8488 2998 l 8496 3001 l 8501 3003 l 8504 3004 l 8505 3004 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 7705 3447 m 7705 1422 l gs col-1 s gr [] 0 sd % Polyline n 9442 4556 m 9441 4558 l 9440 4563 l 9437 4571 l 9433 4584 l 9427 4602 l 9419 4626 l 9409 4655 l 9397 4689 l 9384 4727 l 9370 4770 l 9355 4815 l 9339 4862 l 9322 4910 l 9305 4958 l 9288 5006 l 9272 5053 l 9256 5098 l 9240 5141 l 9225 5183 l 9210 5223 l 9196 5260 l 9182 5296 l 9169 5330 l 9156 5363 l 9144 5394 l 9131 5423 l 9119 5452 l 9107 5480 l 9094 5507 l 9082 5533 l 9070 5559 l 9056 5587 l 9042 5614 l 9028 5642 l 9013 5669 l 8998 5697 l 8982 5726 l 8965 5755 l 8948 5785 l 8929 5816 l 8909 5848 l 8888 5882 l 8866 5917 l 8842 5954 l 8818 5992 l 8793 6030 l 8767 6070 l 8740 6109 l 8714 6148 l 8689 6186 l 8665 6222 l 8642 6255 l 8622 6285 l 8605 6310 l 8591 6331 l 8580 6347 l 8572 6359 l 8567 6366 l 8564 6370 l 8563 6372 l gs col-1 s gr % Polyline n 7705 3448 m 7704 3450 l 7701 3453 l 7697 3460 l 7690 3471 l 7680 3486 l 7667 3505 l 7651 3530 l 7631 3559 l 7609 3592 l 7585 3629 l 7559 3670 l 7531 3712 l 7502 3756 l 7473 3802 l 7443 3847 l 7414 3892 l 7386 3937 l 7358 3981 l 7331 4023 l 7305 4065 l 7281 4105 l 7257 4143 l 7235 4180 l 7213 4216 l 7193 4251 l 7173 4285 l 7154 4319 l 7136 4352 l 7118 4384 l 7100 4416 l 7083 4448 l 7067 4481 l 7050 4513 l 7035 4543 l 7020 4573 l 7006 4603 l 6991 4634 l 6976 4666 l 6961 4698 l 6945 4732 l 6930 4767 l 6913 4804 l 6897 4842 l 6880 4881 l 6862 4923 l 6844 4966 l 6825 5011 l 6805 5058 l 6785 5107 l 6764 5158 l 6742 5211 l 6720 5265 l 6698 5319 l 6676 5375 l 6653 5430 l 6631 5485 l 6610 5539 l 6589 5591 l 6570 5639 l 6552 5685 l 6536 5726 l 6521 5762 l 6509 5794 l 6499 5820 l 6490 5841 l 6484 5856 l 6480 5868 l 6477 5875 l 6476 5878 l 6475 5880 l gs col-1 s gr /Times-Roman-iso ff 210.00 scf sf 675 722 m gs 1 -1 sc 30.0 rot (Taping point) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 2670 407 m gs 1 -1 sc (3) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 6975 767 m gs 1 -1 sc (0) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 8385 1652 m gs 1 -1 sc (-1) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 3400 742 m gs 1 -1 sc (1) col-1 sh gr $F2psEnd rs ADOL-C-2.6.3/ADOL-C/doc/version.tex0000644000175200017520000000017413037352546014754 0ustar coincoin\newcommand{\packagename}{adolc} \newcommand{\packageversion}{2.6.3} \newcommand{\packagetar}{\packagename-\packageversion} ADOL-C-2.6.3/ADOL-C/doc/version.tex.in0000644000175200017520000000022111422133156015340 0ustar coincoin\newcommand{\packagename}{@PACKAGE_NAME@} \newcommand{\packageversion}{@PACKAGE_VERSION@} \newcommand{\packagetar}{\packagename-\packageversion} ADOL-C-2.6.3/ADOL-C/doc/short_ref.tex0000644000175200017520000004550312761540576015274 0ustar coincoin% Latex file containing the short reference of ADOL-C version 2.0.0 % % Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, % Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel % % This file is part of ADOL-C. This software is provided as open source. % Any use, reproduction, or distribution of the software constitutes % recipient's acceptance of the terms of the accompanying license file. %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \documentclass[12pt,oneside,a4paper]{article} \usepackage{amsmath,amsthm,amssymb} \usepackage{fancyhdr} %\setlength{\hoffset}{2.0cm} \setlength{\oddsidemargin}{-0.5cm} \setlength{\evensidemargin}{-0.5cm} \setlength{\topmargin}{-0.5cm} %\setlength{\headheight}{0cm} \setlength{\headsep}{1cm} \setlength{\textwidth}{17.0cm} \setlength{\textheight}{25.0cm} %\setlength{\parindent}{0pt} %\setlength{\parskip}{2.5ex plus 0.5ex minus 0.5ex} %\renewcommand{\baselinestretch}{1.2} \pagestyle{fancy} \lhead{\sc \bf ADOL-C} \chead{} \rhead{\sc {\bf A}utomatic {\bf D}ifferentiation by {\bf O}ver{\bf L}oading in {\bf C}++} \renewcommand{\headrulewidth}{0.02cm} \renewcommand{\footrulewidth}{0.02cm} \newcommand{\R}{{ {\rm I} \kern -.225em {\rm R} }} \begin{document} %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf The Basic Idea}\\[2ex] \fbox{\hspace{1mm} {\bf Vector function} in {\bf C/C++}:\rule[-4mm]{0cm}{12mm}\hspace{0.4cm} $F:\R^n\rightarrow\R^m:x\mapsto y=F\!\left(x\right)$ }\\[2ex] {\Huge$\Downarrow$} Operator overloading (C++)\\[2ex] \fbox{\hspace{2mm} {\bf Internal representation} of $F$ ($\equiv$\emph{tape})\rule[-4mm]{0cm}{12mm} }\\[2ex] {\Huge$\Downarrow$}\hspace{1.5cm}Interpretation\hspace{1.5cm}{\Huge$\Downarrow$}\\[2ex] \fbox{\begin{minipage}[h]{80mm} {\bf \underline{Forward mode}} \begin{align*} x\left(t\right)& =\sum_{j=0}^{d} x_j t^j\\[1ex] & \Downarrow\\[1ex] y\left(t\right)& = \sum_{j=0}^{d} y_j t^j + O\left(t^{d+1}\right) \end{align*} {\bf $\Longrightarrow$ Directional derivatives\\[-2.2ex]} \end{minipage}} \fbox{\begin{minipage}[h]{80mm} {\bf \underline{Reverse mode}} \begin{align*} y_j & = y_j\left(x_0,x_1,\ldots,x_j\right)\\[1ex] & \Downarrow\\[1ex] \frac{\partial y_j}{\partial x_i} & = \frac{\partial y_{j-i}}{\partial x_0} \\[1ex] & = A_{j-i}\left(x_0,x_1,\ldots,x_{j-i}\right) \end{align*}\\[-0.85ex] {\bf $\Longrightarrow$ Gradients (adjoints)} \end{minipage}} \begin{minipage}[h]{160mm} \small \begin{align*} y_0 & = F\left(x_0\right) \\ y_1 & = F'\left(x_0\right) x_1 \\ y_2 & = F'\left(x_0\right) x_2 + \frac{1}{2}F''\left(x_0\right)x_1 x_1 \\ y_3 & = F'\left(x_0\right) x_3 + F''\left(x_0\right)x_1 x_2 + \frac{1}{6}F'''\left(x_0\right)x_1 x_1 x_1\\ & \ldots\\ \frac{\partial y_0}{\partial x_0} = \frac{\partial y_1}{\partial x_1} = \frac{\partial y_2}{\partial x_2} = \frac{\partial y_3}{\partial x_3} = A_0 & = F'\left(x_0\right) \\ \frac{\partial y_1}{\partial x_0} = \frac{\partial y_2}{\partial x_1} = \frac{\partial y_3}{\partial x_2} = A_1 & = F''\left(x_0\right) x_1 \\ \frac{\partial y_2}{\partial x_0} = \frac{\partial y_3}{\partial x_1} = A_2 & = F''\left(x_0\right) x_2 + \frac{1}{2}F'''\left(x_0\right)x_1 x_1 \\ \frac{\partial y_3}{\partial x_0} = A_3 & = F''\left(x_0\right) x_3 + F'''\left(x_0\right)x_1 x_2 + \frac{1}{6}F^{(4)}\left(x_0\right)x_1 x_1 x_1 \\ & \ldots \end{align*} \end{minipage} \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf Application}\\[2ex] {\bf Operator overloading concept $\Rightarrow$ Code modification}\\[2ex] \fbox{\parbox{170mm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item Inclusion of appropriate ADOL-C headers \item Retyping of all involved variables to active data type {\tt adouble} \item Marking active section to be ``taped'' ({\tt trace\_on}/{\tt trace\_off}) \item Specification of independent and dependent variables ({\tt <<=}/{\tt >>=}) \item Specification of differentiation task(s) \item Recompilation and Linking with ADOL-C library {\tt libad.a} \end{itemize}}}\\[5ex] % \begin{minipage}[h]{160mm} \small \underline{Example:} \begin{verbatim} #include // inlusion of ADOL-C headers ... adouble foo ( adouble x ) // some activated function { adouble tmp; tmp = log(x); return 3.0*tmp*tmp + 2.0; } ... int main (int argc, char* argv[]) // main program or other procedure { ... double x[2], y; adouble ax[2], ay; // declaration of active variables x[0]=0.3; x[1]=2.3; trace_on(1); // starting active section ax[0]<<=x[0]; ax[1]<<=x[1]; // marking independent variables ay=ax[0]*sin(ax[1])+ foo(ax[1]); // function evaluation ay>>=y; // marking dependend variables trace_off(); // ending active section ... double g[2]; gradient(1,2,x,g); // application of ADOL-C routine ... x[0]+=0.1; x[1]+=0.3; // application at different argument gradient(1,2,x,g); ... } \end{verbatim} \end{minipage} \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf Drivers for Optimization and Nonlinear Equations (C/C++)}\\[-0.5ex] \begin{align*} \min_{x}f\left(x\right),\qquad & f:\R^n\rightarrow\R\\ F\left(x\right)=0_m, \qquad & F:\R^n\rightarrow\R^m \end{align*}\\[0.5ex] \begin{tabular}{|p{13.3cm}|p{3.3cm}|} \hline & \\[-2.0ex] {\tt function(tag,m,n,x[n],y[m])} & $F\left(x_0\right)$ \\[1.0ex] \hline& \\[-2.0ex] {\tt gradient(tag,n,x[n],g[n])} & $\nabla f\left(x_0\right)$ \\[0.5ex] {\tt hessian(tag,n,x[n],H[n][n])} & $\nabla^2 f\left(x_0\right)$ \\[1.0ex] \hline & \\[-2.0ex] {\tt jacobian(tag,m,n,x[n],J[m][n])} & $F'\left(x_0\right)$ \\[0.5ex] {\tt vec\_jac(tag,m,n,repeat?,x[n],u[m],z[n])} & $u^TF'\left(x_0\right)$ \\[0.5ex] {\tt jac\_vec(tag,m,n,x[n],v[n],z[m])} & $F'\left(x_0\right)v$ \\[1.0ex] \hline & \\[-2.0ex] {\tt hess\_vec(tag,n,x[n],v[n],z[n])} & $\nabla^2f\left(x_0\right)v$ \\[0.5ex] {\tt lagra\_hess\_vec(tag,m,n,x[n],v[n],u[m],h[n])} & $u^TF''\left(x_0\right)v$ \\[1.0ex] \hline & \\[-2.0ex] {\tt jac\_solv(tag,n,x[n],b[n],sparse?,mode?)} & $F'\left(x_0\right)w=b$ \\[1.0ex] \hline \end{tabular}\\[5ex] % \begin{minipage}[h]{160mm} \small \underline{Example:} \hspace{0.5cm} Solution of $F(x)=0$ by Newton's method \begin{verbatim} ... double x[n], r[n]; int i; ... initialize(x); // setting up the initial x ... function(ftag,n,n,x,r); // compute residuum r while (norm(r) > EPSILON) // terminate if small residuum { jac_solv(ftag,n,x,r,0,2); // compute r:=F'(x)^(-1)*r for (i=0; i 1 & \text{prepares for {\tt hos\_reverse} or {\tt hov\_reverse}} \end{array}\right.$ \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt hov\_forward(tag,m,n,d,p,x[n],X[n][p][d],y[m],Y[m][p][d])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item higher-order vector forward; computes $y_0=F\left(x_0\right)$, $Y_1=F'\left(x_0\right)X_1$, \ldots, where $x=x_0$, $X=[X_1,X_2,\ldots,X_d]$ and $y=y_0$, $Y=[Y_1,Y_2,\ldots,Y_d]$ \end{itemize} \end{minipage}\\[2ex] \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Large \bf Reverse Mode (C/C++)}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt fos\_reverse(tag,m,n,u[m],z[n])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item first-order scalar reverse; computes $z^T=u^T F'\left(x\right)$ \item after calling {\tt zos\_forward}, {\tt fos\_forward}, or {\tt hos\_forward} with $\text{\tt keep}=1$ \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt fov\_reverse(tag,m,n,q,U[q][m],Z[q][n])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item first-order vector reverse; computes $Z=U F'\left(x\right)$ \item after calling {\tt zos\_forward}, {\tt fos\_forward}, or {\tt hos\_forward} with $\text{\tt keep}=1$ \end{itemize} \end{minipage}\\[2ex] % % \fbox{\parbox{17.5cm}{\begin{center} {\tt hos\_reverse(tag,m,n,d,u[m],Z[n][d+1])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item higher-order scalar reverse; computes the adjoints \mbox{$z_0^T=u^T F'\left(x_0\right)=u^T A_0$}, \mbox{$z_1^T=u^T F''\left(x_0\right)x_1=u^T A_1$}, \ldots, where $Z=[z_0,z_1,\ldots,z_d]$ \item after calling {\tt fos\_forward} or {\tt hos\_forward} with $\text{\tt keep}=d+1>1$ \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt hov\_reverse(tag,m,n,d,q,U[q][m],Z[q][n][d+1],nz[q][n])} \end{center}}}\\[2ex] \begin{minipage}[h]{14cm} \small \begin{itemize} \item higher-order vector reverse; computes the adjoints \mbox{$Z_0=U F'\left(x_0\right)=U A_0$}, \mbox{$Z_1=U F''\left(x_0\right)x_1=U A_1$}, \ldots, where $Z=[Z_0,Z_1,\ldots,Z_d]$ \item after calling {\tt fos\_forward} or {\tt hos\_forward} with $\text{\tt keep}=d+1>1$ \item optional nonzero pattern {\tt nz} ($\Rightarrow$ manual) \end{itemize} \end{minipage}\\[3ex] % \begin{minipage}[h]{160mm} \small \underline{Example:} \begin{verbatim} ... double x[n], y[m], **I, **J; I=myallocI2(m); // allocation of identity matrix J=myalloc2(m,n); // allocation of Jacobian matrix ... initialize(x); // setting up the argument x ... zos_forward(ftag,m,n,1,x,y); // computing the Jacobian by fos_reverse(ftag,m,n,m,I,J); // reverse mode of AD ... \end{verbatim} \end{minipage} \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf Low-level Differentiation Routines}\\[3ex] {\Large \bf Forward Mode (C++ interfaces)}\\[2ex] \begin{tabular}{|p{13.6cm}|p{3.0cm}|} \hline & \\[-2.0ex] {\tt forward(tag,m,n,d,keep,X[n][d+1],Y[m][d+1])} & {\large {\tt hos}, {\tt fos}, {\tt zos}} \\[0.5ex] {\tt forward(tag,m=1,n,d,keep,X[n][d+1],Y[d+1])} & {\large {\tt hos}, {\tt fos}, {\tt zos}} \\[1.0ex] \hline& \\[-2.0ex] {\tt forward(tag,m,n,d=0,keep,x[n],y[m])} & {\large {\tt zos}} \\[0.5ex] {\tt forward(tag,m,n,keep,x[n],y[m])} & {\large {\tt zos}} \\[1.0ex] \hline& \\[-2.0ex] {\tt forward(tag,m,n,p,x[n],X[n][p],y[m],Y[m][p])} & {\large {\tt fov}} \\[1.0ex] \hline& \\[-2.0ex] {\tt forward(tag,m,n,d,p,x[n],X[n][p][d],} & {\large {\tt hov}} \\[0.5ex] \hspace{8.7cm}{\tt y[m],Y[m][p][d])} & \\[1.0ex] \hline \end{tabular}\\[4ex] % {\Large \bf Reverse Mode (C++ interfaces)}\\[2ex] \begin{tabular}{|p{15.6cm}|p{0.8cm}|} \hline & \\[-2.0ex] {\tt reverse(tag,m,n,d,u[m],Z[n][d+1])} & {\large {\tt hos}} \\[0.5ex] {\tt forward(tag,m=1,n,d,u,Z[n][d+1])} & {\large {\tt hos}} \\[1.0ex] \hline& \\[-2.0ex] {\tt reverse(tag,m,n,d=0,u[m],z[n])} & {\large {\tt fos}} \\[0.5ex] {\tt reverse(tag,m=1,n,d=0,u,z[n])} & {\large {\tt fos}} \\[1.0ex] \hline& \\[-2.0ex] {\tt reverse(tag,m,n,d,q,U[q][m],Z[q][n][d+1],nz[q][n])} & {\large {\tt hov}} \\[0.5ex] {\tt reverse(tag,m=1,n,d,q,U[q],Z[q][n][d+1],nz[q][n])} & {\large {\tt hov}} \\[0.5ex] {\tt reverse(tag,m=1,n,d,Z[m][n][d+1],nz[m][n])} ($U=I_m$) & {\large {\tt hov}} \\[0.5ex] \hline& \\[-2.0ex] {\tt reverse(tag,m,n,d=0,q,U[q][m],Z[q][n])} & {\large {\tt fov}} \\[0.5ex] {\tt reverse(tag,m,n,q,U[q][m],Z[q][n]} & {\large {\tt fov}} \\[0.5ex] {\tt reverse(tag,m=1,n,d=0,q,U[q],Z[q][n])} & {\large {\tt fov}} \\[1.0ex] \hline \end{tabular} % \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\Huge \bf Drivers for Ordinary Differential Equations (C/C++)}\\[-0.5ex] \begin{align*} \text{{\bf ODE}:}\qquad x'\left(t\right)=y\left(t\right)=F\left(x\left(t\right)\right), \qquad x\left(0\right) = x_0 \end{align*}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt forodec(tag,n,tau,dold,d,X[n][d+1])} \end{center}}}\\[2ex] \begin{minipage}[h]{15cm} \small \begin{itemize} \item recursive forward computation of $x_{d_{old}+1},\ldots,x_d$ from $x_0,\ldots,x_{d_{old}}$ (by $x_{i+1} = \frac{1}{1+i}y_i$) \item application with $d_{old}=0$ delivers truncated Taylor series $\sum_0^d x_j t^j$ at base point $x_0$ \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt hov\_reverse(tag,n,n,d-1,n,I[n][n],A[n][n][d],nz[n][n])} \end{center}}}\\[2ex] \begin{minipage}[h]{15cm} \small \begin{itemize} \item reverse computation of $A_j=\frac{\partial y_j}{\partial x_0}$, $j=0,\ldots,d$ after calling {\tt forodec} with degree $d$ \item optional nonzero pattern {\tt nz} ($\Rightarrow$ manual) \end{itemize} \end{minipage}\\[2ex] % \fbox{\parbox{17.5cm}{\begin{center} {\tt accodec(n,tau,d-1,A[n][n][d],B[n][n][d],nz[n][n])} \end{center}}}\\[2ex] \begin{minipage}[h]{15cm} \small \begin{itemize} \item accumulation of total derivatives $B_j=\frac{d x_j}{d x_0}$, $j=0,\ldots,d$ from the partial derivatives $A_j=\frac{\partial y_j}{\partial x_0}$, $j=0,\ldots,d$ after calling {\tt hov\_reverse} \item optional nonzero pattern {\tt nz} ($\Rightarrow$ manual) \end{itemize} \end{minipage}\\[4ex] % \begin{minipage}[h]{160mm} \small \underline{C++:} \hspace{0.5cm} Special C++ interfaces can be found in file {\tt SRC/DRIVERS/odedrivers.h}!\\[3ex] \underline{Example:} \begin{verbatim} ... double x[n], **I, **X, ***A, ***B; I=myallocI2(n); // allocation of identity matrix X=myalloc2(n,5); // allocation of matrix X A=myalloc3(n,n,4); B=myalloc3(n,n,4); // allocation of tensors A and B ... initialize(X); // setting up the argument x_0 ... forodec(ftag,n,1.0,0,4,X); // compute x_1,...,x_4 hov_reverse(ftag,n,n,3,n,I,A,NULL); // compute A_0,...,A_3 accodec(ftag,n,1.0,3,A,B,NULL); // accumulate B_0,...,B_3 ... \end{verbatim} \end{minipage} % \end{center} \newpage %----------------------------------------------------------------------- %----------------------------------------------------------------------- \begin{center}\Large {\bf ADOL-C provides}\\[1ex] \fbox{\parbox{170mm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item Low-level~differentiation~routines ({\tt forward}/{\tt reverse}) \item Easy-to-use driver routines for \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item the solution of optimization problems and nonlinear equations \item the integration of ordinary differential equations \item the evaluation of higher derivative tensors ($\Rightarrow$ manual) \end{itemize} \item Derivatives of implicit and inverse functions ($\Rightarrow$ manual) \item Forward and backward dependence analysis ($\Rightarrow$ manual) \end{itemize}}}\\[2ex] {\bf Recent developments}\\[1ex] \fbox{\parbox{17cm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item Efficient detection of Jacobian/Hessian sparsity structure \item Exploitation of Jacobian/Hessian sparsity by matrix compression \item Integration of checkpointing routines \item Exploitation of fixpoint iterations \item Differentiation of OpenMP parallel programs \end{itemize}}}\\[2ex] {\bf Future developments}\\[1ex] \fbox{\parbox{17cm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item Internal optimizations to reduce storage needed for reverse mode \item Recovery of structure for internal function representation \item Differentiation of MPI parallel programs \end{itemize}}}\\[2ex] {\bf Contact/Resources}\\[1ex] \fbox{\parbox{17cm}{ \begin{itemize}\setlength{\itemsep}{0cm}\setlength{\parsep}{0cm} \item E-mail: \hspace{0.6cm}{\tt adol-c@list.coin-or.org} \item WWW: \hspace{0.5cm}{\tt http://www.coin-or.org/projects/ADOL-C.xml} \end{itemize}}} \end{center} \end{document} ADOL-C-2.6.3/ADOL-C/doc/adolc-manual.tex0000644000175200017520000070753012761540564015640 0ustar coincoin% Latex file containing the documentation of ADOL-C % % Copyright (C) Andrea Walther, Andreas Griewank, Andreas Kowarz, % Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel % % This file is part of ADOL-C. This software is provided as open source. % Any use, reproduction, or distribution of the software constitutes % recipient's acceptance of the terms of the accompanying license file. %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \documentclass[11pt,twoside]{article} \usepackage{hyperref} \usepackage{amsmath,amsthm,amssymb} \usepackage{graphicx} \usepackage{datetime} \newdateformat{monthyear}{\monthname\ \THEYEAR} \usepackage{color} \pagestyle{headings} \bibliographystyle{plain} \parskip=6pt \setlength{\textwidth}{433.6pt} \setlength{\oddsidemargin}{23pt} \setlength{\evensidemargin}{23pt} \setlength{\topmargin}{25.0pt} \setlength{\textheight}{580pt} \setlength{\baselineskip}{8pt} \newcommand{\N}{{ {\rm I} \kern -.225em {\rm N} }} \newcommand{\R}{{ {\rm I} \kern -.225em {\rm R} }} \newcommand{\T}{{ {\rm I} \kern -.425em {\rm T} }} \renewcommand{\sectionautorefname}{Section} \renewcommand{\subsectionautorefname}{Section} \renewcommand{\figureautorefname}{Figure} \renewcommand{\tableautorefname}{Table} \setcounter{equation}{0} \input{version.tex} %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \begin{document} \begin{titlepage} \begin{center} {\Large {\bf ADOL-C:}} \footnote{The development of earlier versions was supported by the Office of Scientific Computing, U.S. Department of Energy, the NSF, and the Deutsche Forschungsgemeinschaft. During the development of the current version Andrea Walther and Andreas Kowarz were supported by the grant Wa 1607/2-1 of the Deutsche Forschungsgemeinschaft} \vspace{0.2in} \\ % {\Large A Package for the Automatic Differentiation}\vspace{0.1in} \\ {\Large of Algorithms Written in C/C++}\\ \vspace{.2in} {\large\bf Version \packageversion, \monthyear\today} \\ \bigskip \mbox{Andrea Walther}\footnote{Institute of Mathematics, University of Paderborn, 33098 Paderborn, Germany} and \mbox{Andreas Griewank}\footnote{Department of Mathematics, Humboldt-Universit\"at zu Berlin, 10099 Berlin, Germany} \end{center} % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \begin{abstract} The C++ package ADOL-C described here facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C, C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and random access memory required by the given function evaluation program. Derivative matrices are obtained by columns, by rows or in sparse format. For solution curves defined by ordinary differential equations, special routines are provided that evaluate the Taylor coefficient vectors and their Jacobians with respect to the current state vector. For explicitly or implicitly defined functions derivative tensors are obtained with a complexity that grows only quadratically in their degree. The derivative calculations involve a possibly substantial but always predictable amount of data. Since the data is accessed strictly sequentially it can be automatically paged out to external files. \end{abstract} % {\bf Keywords}: Computational Differentiation, Automatic Differentiation, Chain Rule, Overloading, Taylor Coefficients, Gradients, Hessians, Forward Mode, Reverse Mode, Implicit Function Differentiation, Inverse Function Differentiation \medskip \noindent {\bf Abbreviated title}: Automatic differentiation by overloading in C++ % \end{titlepage} % \tableofcontents % \newpage % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Preparing a Section of C or C++ Code for Differentiation} \label{prepar} % \subsection{Introduction} % \setcounter{equation}{0} The package \mbox{ADOL-C} utilizes overloading in C++, but the user has to know only C. The acronym stands for {\bf A}utomatic {\bf D}ifferentiation by {\bf O}ver{\bf L}oading in {\bf C}++. In contrast to source transformation approaches, overloading does not generate intermediate source code. As starting points to retrieve further information on techniques and application of automatic differentiation, as well as on other AD tools, we refer to the book \cite{GrWa08}. Furthermore, the web page \verb=http://www.autodiff.org= of the AD community forms a rich source of further information and pointers. ADOL-C facilitates the simultaneous evaluation of arbitrarily high directional derivatives and the gradients of these Taylor coefficients with respect to all independent variables. Relative to the cost of evaluating the underlying function, the cost for evaluating any such scalar-vector pair grows as the square of the degree of the derivative but is still completely independent of the numbers $m$ and $n$. This manual is organized as follows. This section explains the modifications required to convert undifferentiated code to code that compiles with ADOL-C. \autoref{tape} covers aspects of the tape of recorded data that ADOL-C uses to evaluate arbitrarily high order derivatives. The discussion includes storage requirements and the tailoring of certain tape characteristics to fit specific user needs. Descriptions of easy-to-use drivers for a convenient derivative evaluation are contained in \autoref{drivers}. \autoref{forw_rev_ad} offers a more mathematical characterization of the different modes of AD to compute derivatives. At the same time, the corresponding drivers of ADOL-C are explained. The overloaded derivative evaluation routines using the forward and the reverse mode of AD are explained in \autoref{forw_rev}. Advanced differentiation techniques as the optimal checkpointing for time integrations, the exploitation of fixed point iterations, the usages of external differentiated functions and the differentiation of OpenMP parallel programs are described in \autoref{adv_ad}. The tapeless forward mode is presented in \autoref{tapeless}. \autoref{install} details the installation and use of the ADOL-C package. Finally, \autoref{example} furnishes some example programs that incorporate the ADOL-C package to evaluate first and higher-order derivatives. These and other examples are distributed with the ADOL-C source code. The user should simply refer to them if the more abstract and general descriptions of ADOL-C provided in this document do not suffice. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Declaring Active Variables} % \label{DecActVar} % The key ingredient of automatic differentiation by overloading is the concept of an {\em active variable}. All variables that may be considered as differentiable quantities at some time during the program execution must be of an active type. ADOL-C uses one active scalar type, called {\sf adouble}, whose real part is of the standard type {\sf double}. Typically, one will declare the independent variables and all quantities that directly or indirectly depend on them as {\em active}. Other variables that do not depend on the independent variables but enter, for example, as parameters, may remain one of the {\em passive} types {\sf double, float}, or {\sf int}. There is no implicit type conversion from {\sf adouble} to any of these passive types; thus, {\bf failure to declare variables as active when they depend on other active variables will result in a compile-time error message}. In data flow terminology, the set of active variable names must contain all its successors in the dependency graph. All components of indexed arrays must have the same activity status. The real component of an {\sf adouble x} can be extracted as {\sf x.value()}. In particular, such explicit conversions are needed for the standard output procedure {\sf printf}. The output stream operator \boldmath $\ll$ \unboldmath is overloaded such that first the real part of an {\sf adouble} and then the string ``{\sf (a)}" is added to the stream. The input stream operator \boldmath $\gg$ \unboldmath can be used to assign a constant value to an {\sf adouble}. Naturally, {\sf adouble}s may be components of vectors, matrices, and other arrays, as well as members of structures or classes. The C++ class {\sf adouble}, its member functions, and the overloaded versions of all arithmetic operations, comparison operators, and most ANSI C functions are contained in the file \verb=adouble.cpp= and its header \verb==. The latter must be included for compilation of all program files containing {\sf adouble}s and corresponding operations. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Marking Active Sections} \label{markingActive} % All calculations involving active variables that occur between the void function calls \begin{center} {\sf trace\_on(tag,keep)} \hspace{0.3in} and \hspace{0.3in} {\sf trace\_off(file)} \end{center} are recorded on a sequential data set called {\em tape}. Pairs of these function calls can appear anywhere in a C++ program, but they must not overlap. The nonnegative integer argument {\sf tag} identifies the particular tape for subsequent function or derivative evaluations. Unless several tapes need to be kept, ${\sf tag} =0$ may be used throughout. The optional integer arguments {\sf keep} and {\sf file} will be discussed in \autoref{tape}. We will refer to the sequence of statements executed between a particular call to {\sf trace\_on} and the following call to {\sf trace\_off} as an {\em active section} of the code. The same active section may be entered repeatedly, and one can successively generate several traces on distinct tapes by changing the value of {\sf tag}. Both functions {\sf trace\_on} and {\sf trace\_off} are prototyped in the header file \verb==, which is included by the header \verb== automatically. Active sections may contain nested or even recursive calls to functions provided by the user. Naturally, their formal and actual parameters must have matching types. In particular, the functions must be compiled with their active variables declared as {\sf adouble}s and with the header file \verb== included. Variables of type {\sf adouble} may be declared outside an active section and need not go out of scope before the end of an active section. It is not necessary -- though desirable -- that free-store {\sf adouble}s allocated within an active section be deleted before its completion. The values of all {\sf adouble}s that exist at the beginning and end of an active section are automatically recorded by {\sf trace\_on} and {\sf trace\_off}, respectively. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Selecting Independent and Dependent Variables} % One or more active variables that are read in or initialized to the values of constants or passive variables must be distinguished as independent variables. Other active variables that are similarly initialized may be considered as temporaries (e.g., a variable that accumulates the partial sums of a scalar product after being initialized to zero). In order to distinguish an active variable {\sf x} as independent, ADOL-C requires an assignment of the form \begin{center} {\sf x} \boldmath $\ll=$ \unboldmath {\sf px}\hspace{0.2in}// {\sf px} of any passive numeric type $\enspace .$ \end{center} This special initialization ensures that {\sf x.value()} = {\sf px}, and it should precede any other assignment to {\sf x}. However, {\sf x} may be reassigned other values subsequently. Similarly, one or more active variables {\sf y} must be distinguished as dependent by an assignment of the form \begin{center} {\sf y \boldmath $\gg=$ \unboldmath py}\hspace{0.2in}// {\sf py} of any passive type $\enspace ,$ \end{center} which ensures that {\sf py} = {\sf y.value()} and should not be succeeded by any other assignment to {\sf y}. However, a dependent variable {\sf y} may have been assigned other real values previously, and it could even be an independent variable as well. The derivative values calculated after the completion of an active section always represent {\bf derivatives of the final values of the dependent variables with respect to the initial values of the independent variables}. The order in which the independent and dependent variables are marked by the \boldmath $\ll=$ \unboldmath and \boldmath $\gg=$ \unboldmath statements matters crucially for the subsequent derivative evaluations. However, these variables do not have to be combined into contiguous vectors. ADOL-C counts the number of independent and dependent variable specifications within each active section and records them in the header of the tape. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{A Subprogram as an Active Section} % As a generic example let us consider a C(++) function of the form shown in \autoref{code1}. % \begin{figure}[hbt] \framebox[\textwidth]{\parbox{\textwidth}{ \begin{center} \begin{tabbing} {\sf void eval(}\= {\sf int n, int m,} \hspace{0.5 in} \= // number of independents and dependents\\ \>{\sf double *x,} \> // independent variable vector \\ \>{\sf double *y,} \> // dependent variable vector \\ \> {\sf int *k, } \> // integer parameters \\ \>{\sf double *z)} \> // real parameters \\ {\sf \{ }\hspace{0.1 in } \= \> // beginning of function body \\ \>{\sf double t = 0;} \> // local variable declaration \\ \>{\sf for (int i=0; i \boldmath $<$ \unboldmath n; i++)} \> // begin of computation \\ \>\hspace{0.2in}{\sf t += z[i]*x[i];} \> // continue \\ \>{\sf $\cdots \cdots \cdots \cdots $} \> // continue \\ \>{\sf y[m-1] = t/m; } \> // end of computation \\ {\sf \} } \> \> // end of function \end{tabbing} \end{center} }} \caption{Generic example of a subprogram to be activated} \label{code1} \end{figure} % If {\sf eval} is to be called from within an active C(++) section with {\sf x} and {\sf y} as vectors of {\sf adouble}s and the other parameters passive, then one merely has to change the type declarations of all variables that depend on {\sf x} from {\sf double} or {\sf float} to {\sf adouble}. Subsequently, the subprogram must be compiled with the header file \verb== included as described in \autoref{DecActVar}. Now let us consider the situation when {\sf eval} is still to be called with integer and real arguments, possibly from a program written in Fortran77, which does not allow overloading. To automatically compute derivatives of the dependent variables {\sf y} with respect to the independent variables {\sf x}, we can make the body of the function into an active section. For example, we may modify the previous program segment as in \autoref{adolcexam}. The renaming and doubling up of the original independent and dependent variable vectors by active counterparts may seem at first a bit clumsy. However, this transformation has the advantage that the calling sequence and the computational part, i.e., where the function is really evaluated, of {\sf eval} remain completely unaltered. If the temporary variable {\sf t} had remained a {\sf double}, the code would not compile, because of a type conflict in the assignment following the declaration. More detailed example codes are listed in \autoref{example}. \begin{figure}[htb] \framebox[\textwidth]{\parbox{\textwidth}{ \begin{center} \begin{tabbing} {\sf void eval(} \= {\sf int n,m,} \hspace{1.0 in}\= // number of independents and dependents\\ \> {\sf double *px,} \> // independent passive variable vector \\ \> {\sf double *py,} \> // dependent passive variable vector \\ \> {\sf int *k,} \> // integer parameters \\ \> {\sf double *z)} \> // parameter vector \\ {\sf \{}\hspace{0.1 in}\= \> // beginning of function body \\ \>{\sf short int tag = 0;} \> // tape array and/or tape file specifier\\ \>{\sf trace\_on(tag);} \> // start tracing \\ \>{\sf adouble *x, *y;} \> // declare active variable pointers \\ \>{\sf x = new adouble[n];}\>// declare active independent variables \\ \>{\sf y = new adouble[m];} \> // declare active dependent variables \\ \>{\sf for (int i=0; i \boldmath $<$ \unboldmath n; i++)} \\ \>\hspace{0.2in} {\sf x[i] \boldmath $\ll=$ \unboldmath px[i];} \> // select independent variables \\ \>{\sf adouble t = 0;} \> // local variable declaration \\ \>{\sf for (int i=0; i \boldmath $<$ \unboldmath n; i++)} \> // begin crunch \\ \>\hspace{0.2in}{\sf t += z[i]*x[i];} \> // continue crunch \\ \>{\sf $\cdots \cdots \cdots \cdots $} \> // continue crunch \\ \>{\sf $\cdots \cdots \cdots \cdots $} \> // continue crunch \\ \>{\sf y[m-1] = t/m; } \> // end crunch as before\\ \>{\sf for (int j=0; j \boldmath $<$ \unboldmath m; j++)} \\ \>\hspace{0.2in}{\sf y[j] \boldmath $\gg=$ \unboldmath py[j];} \> // select dependent variables \\ \>{\sf delete[] y;} \>// delete dependent active variables \\ \>{\sf delete[] x;} \>// delete independent active variables \\ \>{\sf trace\_off();} \> // complete tape \\ {\sf \}} \>\> // end of function \end{tabbing} \end{center}}} \caption{Activated version of the code listed in \autoref{code1}} \label{adolcexam} \end{figure} % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Overloaded Operators and Functions} \label{OverOper} % As in the subprogram discussed above, the actual computational statements of a C(++) code need not be altered for the purposes of automatic differentiation. All arithmetic operations, as well as the comparison and assignment operators, are overloaded, so any or all of their operands can be an active variable. An {\sf adouble x} occurring in a comparison operator is effectively replaced by its real value {\sf x.value()}. Most functions contained in the ANSI C standard for the math library are overloaded for active arguments. The only exceptions are the non-differentiable functions {\sf fmod} and {\sf modf}. Otherwise, legitimate C code in active sections can remain completely unchanged, provided the direct output of active variables is avoided. The rest of this subsection may be skipped by first time users who are not worried about marginal issues of differentiability and efficiency. The modulus {\sf fabs(x)} is everywhere Lipschitz continuous but not properly differentiable at the origin, which raises the question of how this exception ought to be handled. Fortunately, one can easily see that {\sf fabs(x)} and all its compositions with smooth functions are still directionally differentiable. These directional derivatives of arbitrary order can be propagated in the forward mode without any ambiguity. In other words, the forward mode as implemented in ADOL-C computes Gateaux derivatives in certain directions, which reduce to Fr\'echet derivatives only if the dependence on the direction is linear. Otherwise, the directional derivatives are merely positively homogeneous with respect to the scaling of the directions. For the reverse mode, ADOL-C sets the derivative of {\sf fabs(x)} at the origin somewhat arbitrarily to zero. We have defined binary functions {\sf fmin} and {\sf fmax} for {\sf adouble} arguments, so that function and derivative values are obtained consistent with those of {\sf fabs} according to the identities \[ \min(a,b) = [a+b-|a-b|]/2 \quad {\rm and} \quad \max(a,b) = [a+b+|a-b|]/2 \quad . \] These relations cannot hold if either $a$ or $b$ is infinite, in which case {\sf fmin} or {\sf fmax} and their derivatives may still be well defined. It should be noted that the directional differentiation of {\sf fmin} and {\sf fmax} yields at ties $a=b$ different results from the corresponding assignment based on the sign of $a-b$. For example, the statement \begin{center} {\sf if (a $<$ b) c = a; else c = b;} \end{center} yields for {\sf a}~=~{\sf b} and {\sf a}$^\prime < $~{\sf b}$^\prime$ the incorrect directional derivative value {\sf c}$^\prime = $~{\sf b}$^\prime$ rather than the correct {\sf c}$^\prime = $~{\sf a}$^\prime$. Therefore this form of conditional assignment should be avoided by use of the function $\sf fmin(a,b)$. There are also versions of {\sf fmin} and {\sf fmax} for two passive arguments and mixed passive/active arguments are handled by implicit conversion. On the function class obtained by composing the modulus with real analytic functions, the concept of directional differentiation can be extended to the propagation of unique one-sided Taylor expansions. The branches taken by {\sf fabs, fmin}, and {\sf fmax}, are recorded on the tape. The functions {\sf sqrt}, {\sf pow}, and some inverse trigonometric functions have infinite slopes at the boundary points of their domains. At these marginal points the derivatives are set by ADOL-C to either {\sf $\pm$InfVal}, 0 or {\sf NoNum}, where {\sf InfVal} and {\sf NoNum} are user-defined parameters, see \autoref{Customizing}. On IEEE machines {\sf InfVal} can be set to the special value {\sf Inf}~=~$1.0/0.0$ and {\sf NoNum} to {\sf NaN}~=~$0.0/0.0$. For example, at {\sf a}~=~0 the first derivative {\sf b}$^\prime$ of {\sf b}~=~{\sf sqrt(a)} is set to \[ {\sf b}^\prime = \left\{ \begin{array}{ll} \sf InfVal&\mbox{if}\;\; {\sf a}^\prime>0 \\ 0&\mbox{if}\;\;{\sf a}^\prime =0 \\ \sf NoNum&\mbox{if}\;\;{\sf a}^\prime <0\\ \end{array} \right. \enspace . \] In other words, we consider {\sf a} and consequently {\sf b} as a constant when {\sf a}$^\prime$ or more generally all computed Taylor coefficients are zero. The general power function ${\sf pow(x,y)=x^y}$ is computed whenever it is defined for the corresponding {\sf double} arguments. If {\sf x} is negative, however, the partial derivative with respect to an integral exponent is set to zero. %Similarly, the partial of {\bf pow} with respect to both arguments %is set to zero at the origin, where both arguments vanish. The derivatives of the step functions {\sf floor}, {\sf ceil}, {\sf frexp}, and {\sf ldexp} are set to zero at all arguments {\sf x}. The result values of the step functions are recorded on the tape and can later be checked to recognize whether a step to another level was taken during a forward sweep at different arguments than at taping time. Some C implementations supply other special functions, in particular the error function {\sf erf(x)}. For the latter, we have included an {\sf adouble} version in \verb==, which has been commented out for systems on which the {\sf double} valued version is not available. The increment and decrement operators {\sf ++}, \boldmath $--$ \unboldmath (prefix and postfix) are available for {\sf adouble}s. % % XXX: Vector and matrix class have to be reimplemented !!! % % and also the %active subscripts described in the \autoref{act_subscr}. Ambiguous statements like {\sf a += a++;} must be avoided because the compiler may sequence the evaluation of the overloaded expression differently from the original in terms of {\sf double}s. As we have indicated above, all subroutines called with active arguments must be modified or suitably overloaded. The simplest procedure is to declare the local variables of the function as active so that their internal calculations are also recorded on the tape. Unfortunately, this approach is likely to be unnecessarily inefficient and inaccurate if the original subroutine evaluates a special function that is defined as the solution of a particular mathematical problem. The most important examples are implicit functions, quadratures, and solutions of ordinary differential equations. Often the numerical methods for evaluating such special functions are elaborate, and their internal workings are not at all differentiable in the data. Rather than differentiating through such an adaptive procedure, one can obtain first and higher derivatives directly from the mathematical definition of the special function. Currently this direct approach has been implemented only for user-supplied quadratures as described in \autoref{quadrat}. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Reusing the Tape for Arbitrary Input Values} \label{reuse_tape} % In some situations it may be desirable to calculate the value and derivatives of a function at arbitrary arguments by using a tape of the function evaluation at one argument and reevaluating the function and its derivatives using the given ADOL-C routines. This approach can significantly reduce run times, and it also allows to port problem functions, in the form of the corresponding tape files, into a computing environment that does not support C++ but does support C or Fortran. Therefore, the routines provided by ADOL-C for the evaluation of derivatives can be used to at arguments $x$ other than the point at which the tape was generated, provided there are no user defined quadratures and all comparisons involving {\sf adouble}s yield the same result. The last condition implies that the control flow is unaltered by the change of the independent variable values. Therefore, this sufficient condition is tested by ADOL-C and if it is not met the ADOL-C routine called for derivative calculations indicates this contingency through its return value. Currently, there are six return values, see \autoref{retvalues}. \begin{table}[h] \center\small \begin{tabular}{|r|l|}\hline +3 & \begin{minipage}{12.5cm} \vspace*{1ex} The function is locally analytic. \vspace*{1ex} \end{minipage} \\ \hline +2 & \begin{minipage}{12.5cm} \vspace*{1ex} The function is locally analytic but the sparsity structure (compared to the situation at the taping point) may have changed, e.g. while at taping arguments {\sf fmax(a,b)} returned {\sf a} we get {\sf b} at the argument currently used. \vspace*{1ex} \end{minipage} \\ \hline +1 & \begin{minipage}{12.5cm} \vspace*{1ex} At least one of the functions {\sf fmin}, {\sf fmax} or {\sf fabs} is evaluated at a tie or zero, respectively. Hence, the function to be differentiated is Lipschitz-continuous but possibly non-differentiable. \vspace*{1ex} \end{minipage} \\ \hline 0 & \begin{minipage}{12.5cm} \vspace*{1ex} Some arithmetic comparison involving {\sf adouble}s yields a tie. Hence, the function to be differentiated may be discontinuous. \vspace*{1ex} \end{minipage} \\ \hline -1 & \begin{minipage}{12.5cm} \vspace*{1ex} An {\sf adouble} comparison yields different results from the evaluation point at which the tape was generated. \vspace*{1ex} \end{minipage} \\ \hline -2 & \begin{minipage}{12.5cm} \vspace*{1ex} The argument of a user-defined quadrature has changed from the evaluation point at which the tape was generated. \vspace*{1ex} \end{minipage} \\ \hline \end{tabular} \caption{Description of return values} \label{retvalues} \end{table} \begin{figure}[h] \centering\includegraphics[width=10.0cm]{tap_point} \caption{Return values around the taping point} \label{fi:tap_point} \end{figure} In \autoref{fi:tap_point} these return values are illustrated. If the user finds the return value of an ADOL-C routine to be negative the taping process simply has to be repeated by executing the active section again. The crux of the problem lies in the fact that the tape records only the operations that are executed during one particular evaluation of the function. It also has no way to evaluate integrals since the corresponding quadratures are never recorded on the tape. Therefore, when there are user-defined quadratures the retaping is necessary at each new point. If there are only branches conditioned on {\sf adouble} comparisons one may hope that re-taping becomes unnecessary when the points settle down in some small neighborhood, as one would expect for example in an iterative equation solver. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Conditional Assignments} \label{condassign} % It appears unsatisfactory that, for example, a simple table lookup of some physical property forces the re-recording of a possibly much larger calculation. However, the basic philosophy of ADOL-C is to overload arithmetic, rather than to generate a new program with jumps between ``instructions'', which would destroy the strictly sequential tape access and require the infusion of substantial compiler technology. Therefore, we introduce the two constructs of conditional assignments and active integers as partial remedies to the branching problem. In many cases, the functionality of branches can be replaced by conditional assignments. For this purpose, we provide a special function called {\sf condassign(a,b,c,d)}. Its calling sequence corresponds to the syntax of the conditional assignment \begin{center} {\sf a = (b \boldmath $>$ \unboldmath 0) ? c : d;} \end{center} which C++ inherited from C. However, here the arguments are restricted to be active or passive scalar arguments, and all expression arguments are evaluated before the test on {\sf b}, which is different from the usual conditional assignment or the code segment. Suppose the original program contains the code segment \begin{center} {\sf if (b \boldmath $>$ \unboldmath 0) a = c; else a = d;}\\ \end{center} Here, only one of the expressions (or, more generally, program blocks) {\sf c} and {\sf d} is evaluated, which exactly constitutes the problem for ADOL-C. To obtain the correct value {\sf a} with ADOL-C, one may first execute both branches and then pick either {\sf c} or {\sf d} using {\sf condassign(a,b,c,d)}. To maintain consistency with the original code, one has to make sure that the two branches do not have any side effects that can interfere with each other or may be important for subsequent calculations. Furthermore the test parameter {\sf b} has to be an {\sf adouble} or an {\sf adouble} expression. Otherwise the test condition {\sf b} is recorded on the tape as a {\em constant} with its run time value. Thus the original dependency of {\sf b} on active variables gets lost, for instance if {\sf b} is a comparison expression, see \autoref{OverOper}. If there is no {\sf else} part in a conditional assignment, one may call the three argument version {\sf condassign(a,b,c)}, which is logically equivalent to {\sf condassign(a,b,c,a)} in that nothing happens if {\sf b} is non-positive. The header file \verb== contains also corresponding definitions of {\sf condassign(a,b,c,d)} and {\sf condassign(a,b,c)} for passive {\sf double} arguments so that the modified code without any differentiation can be tested for correctness. A generalization of this concept for more than two branches, e.g., akin to a \texttt{switch} statement or a cascade of \texttt{if...else if}, may be done by enabling \textsf{ADOLC\_ADVANCED\_BRANCHING} and performing selection on elements of an \texttt{advector} with active indices. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Step-by-Step Modification Procedure} % To prepare a section of given C or C++ code for automatic differentiation as described above, one applies the following step-by-step procedure. \begin{enumerate} \item Use the statements {\sf trace\_on(tag)} or {\sf trace\_on(tag,keep)} and {\sf trace\_off()} or {\sf trace\_off(file)} to mark the beginning and end of the active section. \item Select the set of active variables, and change their type from {\sf double} or {\sf float} to {\sf adouble}. \item Select a sequence of independent variables, and initialize them with \boldmath $\ll=$ \unboldmath assignments from passive variables or vectors. \item Select a sequence of dependent variables among the active variables, and pass their final values to passive variable or vectors thereof by \boldmath $\gg=$ \unboldmath assignments. \item Compile the codes after including the header file \verb==. \end{enumerate} Typically, the first compilation will detect several type conflicts -- usually attempts to convert from active to passive variables or to perform standard I/O of active variables. Since all standard C programs can be activated by a mechanical application of the procedure above, the following section is of importance only to advanced users. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Numbering the Tapes and Controlling the Buffer} \label{tape} % The trace generated by the execution of an active section may stay within a triplet of internal arrays or it may be written out to three corresponding files. We will refer to these triplets as the tape array or tape file, in general tape, which may subsequently be used to evaluate the underlying function and its derivatives at the original point or at alternative arguments. If the active section involves user-defined quadratures it must be executed and re-taped at each new argument. Similarly, if conditions on {\sf adouble} values lead to a different program branch being taken at a new argument the evaluation process also needs to be re-taped at the new point. Otherwise, direct evaluation from the tape by the routine {\sf function} (\autoref{optdrivers}) is likely to be faster. The use of quadratures and the results of all comparisons on {\sf adouble}s are recorded on the tape so that {\sf function} and other forward routines stop and return appropriate flags if their use without prior re-taping is unsafe. To avoid any re-taping certain types of branches can be recorded on the tape through the use of conditional assignments described before in \autoref{condassign}. Several tapes may be generated and kept simultaneously. A tape array is used as a triplet of buffers or a tape file is generated if the length of any of the buffers exceeds the maximal array lengths of {\sf OBUFSIZE}, {\sf VBUFSIZE} or {\sf LBUFSIZE}. These parameters are defined in the header file \verb== and may be adjusted by the user in the header file before compiling the ADOL-C library, or on runtime using a file named \verb=.adolcrc=. Lines in this file must have the form \begin{verbatim} "VARIABLE" = "VALUE" \end{verbatim} where the quotation marks are mandatory. The filesystem folder, where the tapes files may be written to disk, can be changed by changing the definition of {\sf TAPE\_DIR} in the header file \verb== before compiling the ADOL-C library, or on runtime by defining {\sf TAPE\_DIR} in the \verb=.adolcrc= file. By default this is defined to be the present working directory (\verb=.=). For simple usage, {\sf trace\_on} may be called with only the tape {\sf tag} as argument, and {\sf trace\_off} may be called without argument. The optional integer argument {\sf keep} of {\sf trace\_on} determines whether the numerical values of all active variables are recorded in a buffered temporary array or file called the taylor stack. This option takes effect if {\sf keep} = 1 and prepares the scene for an immediately following gradient evaluation by a call to a routine implementing the reverse mode as described in the \autoref{forw_rev_ad} and \autoref{forw_rev}. A file is used instead of an array if the size exceeds the maximal array length of {\sf TBUFSIZE} defined in \verb== and may be adjusted in the same way like the other buffer sizes mentioned above. Alternatively, gradients may be evaluated by a call to {\sf gradient}, which includes a preparatory forward sweep for the creation of the temporary file. If omitted, the argument {\sf keep} defaults to 0, so that no temporary taylor stack file is generated. By setting the optional integer argument {\sf file} of {\sf trace\_off} to 1, the user may force a numbered tape file to be written even if the tape array (buffer) does not overflow. If the argument {\sf file} is omitted, it defaults to 0, so that the tape array is written onto a tape file only if the length of any of the buffers exceeds {\sf [OLVT]BUFSIZE} elements. After the execution of an active section, if a tape file was generated, i.e., if the length of some buffer exceeded {\sf [OLVT]BUFSIZE} elements or if the argument {\sf file} of {\sf trace\_off} was set to 1, the files will be saved in the directory defined as {\sf ADOLC\_TAPE\_DIR} (by default the current working directory) under filenames formed by the strings {\sf ADOLC\_OPERATIONS\_NAME}, {\sf ADOLC\_LOCATIONS\_NAME}, {\sf ADOLC\_VALUES\_NAME} and {\sf ADOLC\_TAYLORS\_NAME} defined in the header file \verb== appended with the number given as the {\sf tag} argument to {\sf trace\_on} and have the extension {\sf .tap}. Later, all problem-independent routines like {\sf gradient}, {\sf jacobian}, {\sf forward}, {\sf reverse}, and others expect as first argument a {\sf tag} to determine the tape on which their respective computational task is to be performed. By calling {\sf trace\_on} with different tape {\sf tag}s, one can create several tapes for various function evaluations and subsequently perform function and derivative evaluations on one or more of them. For example, suppose one wishes to calculate for two smooth functions $f_1(x)$ and $f_2(x)$ \[ f(x) = \max \{f_1(x) ,f_2(x)\},\qquad \nabla f(x), \] and possibly higher derivatives where the two functions do not tie. Provided $f_1$ and $f_2$ are evaluated in two separate active sections, one can generate two different tapes by calling {\sf trace\_on} with {\sf tag} = 1 and {\sf tag} = 2 at the beginning of the respective active sections. Subsequently, one can decide whether $f(x)=f_1(x)$ or $f(x)=f_2(x)$ at the current argument and then evaluate the gradient $\nabla f(x)$ by calling {\sf gradient} with the appropriate argument value {\sf tag} = 1 or {\sf tag} = 2. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Examining the Tape and Predicting Storage Requirements } \label{examiningTape} % At any point in the program, one may call the routine \begin{center} {\sf void tapestats(unsigned short tag, size\_t* counts)} \end{center} with {\sf counts} beeing an array of at least eleven integers. The first argument {\sf tag} specifies the particular tape of interest. The components of {\sf counts} represent \[ \begin{tabular}{ll} {\sf counts[0]}: & the number of independents, i.e.~calls to \boldmath $\ll=$ \unboldmath, \\ {\sf counts[1]}: & the number of dependents, i.e.~calls to \boldmath $\gg=$ \unboldmath,\\ {\sf counts[2]}: & the maximal number of live active variables,\\ {\sf counts[3]}: & the size of taylor stack (number of overwrites),\\ {\sf counts[4]}: & the buffer size (a multiple of eight), \end{tabular} \] \[ \begin{tabular}{ll} {\sf counts[5]}: & the total number of operations recorded,\\ {\sf counts[6-13]}: & other internal information about the tape. \end{tabular} \] The values {\sf maxlive} = {\sf counts[2]} and {\sf tssize} = {\sf counts[3]} determine the temporary storage requirements during calls to the routines implementing the forward and the reverse mode. For a certain degree {\sf deg} $\geq$ 0, the scalar version of the forward mode involves apart from the tape buffers an array of $(${\sf deg}$+1)*${\sf maxlive} {\sf double}s in core and, in addition, a sequential data set called the value stack of {\sf tssize}$*${\sf keep} {\sf revreal}s if called with the option {\sf keep} $>$ 0. Here the type {\sf revreal} is defined as {\sf double} or {\sf float}. The latter choice halves the storage requirement for the sequential data set, which stays in core if its length is less than {\sf TBUFSIZE} bytes and is otherwise written out to a temporary file. The parameter {\sf TBUFSIZE} is defined in the header file \verb==. The drawback of the economical {\sf revreal} = {\sf float} choice is that subsequent calls to reverse mode implementations yield gradients and other adjoint vectors only in single-precision accuracy. This may be acceptable if the adjoint vectors represent rows of a Jacobian that is used for the calculation of Newton steps. In its scalar version, the reverse mode implementation involves the same number of {\sf double}s and twice as many {\sf revreal}s as the forward mode implementation. The storage requirements of the vector versions of the forward mode and reverse mode implementation are equal to that of the scalar versions multiplied by the vector length. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Customizing ADOL-C} \label{Customizing} % Based on the information provided by the routine {\sf tapestats}, the user may alter the following types and constant dimensions in the header file \verb== to suit his problem and environment. \begin{description} \item[{\sf OBUFSIZE}, {\sf LBUFSIZE}, {\sf VBUFSIZE}{\rm :}] These integer determines the length of in\-ter\-nal buf\-fers (default: 524$\,$288). If the buffers are large enough to accommodate all required data, any file access is avoided unless {\sf trace\_off} is called with a positive argument. This desirable situation can be achieved for many problem functions with an execution trace of moderate size. Primarily these values occur as an argument to {\sf malloc}, so that setting it unnecessarily large may have no ill effects, unless the operating system prohibits or penalizes large array allocations. It is however recommended to leave the values in \texttt{} unchanged and set them using the \texttt{.adolcrc} file in the current working directory at runtime. \item[{\sf TBUFSIZE}{\rm :}] This integer determines the length of the in\-ter\-nal buf\-fer for a taylor stack (default: 524$\,$288). \item[{\sf TBUFNUM}{\rm :}] This integer determines the maximal number of taylor stacks (default: 32). \item[{\sf fint}{\rm :}] The integer data type used by Fortran callable versions of functions. \item[{\sf fdouble}{\rm :}] The floating point data type used by Fortran callable versions of functions. \item[{\sf inf\_num}{\rm :}] This together with {\sf inf\_den} sets the ``vertical'' slope {\sf InfVal} = {\sf inf\_num/inf\_den} of special functions at the boundaries of their domains (default: {\sf inf\_num} = 1.0). On IEEE machines the default setting produces the standard {\sf Inf}. On non-IEEE machines change these values to produce a small {\sf InfVal} value and compare the results of two forward sweeps with different {\sf InfVal} settings to detect a ``vertical'' slope. \item[{\sf inf\_den}{\rm :}] See {\sf inf\_num} (default: 0.0). \item[{\sf non\_num}{\rm :}] This together with {\sf non\_den} sets the mathematically undefined derivative value {\sf NoNum} = {\sf non\_num/non\_den} of special functions at the boundaries of their domains (default: {\sf non\_num} = 0.0). On IEEE machines the default setting produces the standard {\sf NaN}. On non-IEEE machines change these values to produce a small {\sf NoNum} value and compare the results of two forward sweeps with different {\sf NoNum} settings to detect the occurrence of undefined derivative values. \item[{\sf non\_den}{\rm :}] See {\sf non\_num} (default: 0.0). \item[{\sf ADOLC\_EPS}{\rm :}] For testing on small numbers to avoid overflows (default: 10E-20). \item[{\sf DIAG\_OUT}{\rm :}] File identifier used as standard output for ADOL-C diagnostics (default: stdout). \end{description} The following types and options may be set using the command-line options of the \texttt{./configure} script. \begin{description} \item[{\sf locint}{\rm :}] The range of the integer type {\sf locint} determines how many {\sf adouble}s can be simultaneously alive (default: {\sf unsigned int}). In extreme cases when there are more than $2^{32}$ {\sf adouble}s alive at any one time, the type {\sf locint} must be changed to {\sf unsigned long}. This can be done by passing \texttt{--enable-ulong} to \texttt{./configure}. \item[{\sf revreal}{\rm :}] The choice of this floating-point type trades accuracy with storage for reverse sweeps (default: {\sf double}). While functions and their derivatives are always evaluated in double precision during forward sweeps, gradients and other adjoint vectors are obtained with the precision determined by the type {\sf revreal}. The less accurate choice {\sf revreal} = {\sf float} nearly halves the storage requirement during reverse sweeps. This can be done by passing \texttt{--disable-double} to \texttt{./configure}. \item[{\sf ATRIG\_ERF}{\rm :}] The overloaded versions of the inverse hyperbolic functions and the error function are enabled (default: undefined) by passing \texttt{--enable-atrig-erf} to \texttt{./configure} \item[{\sf ADOLC\_USE\_CALLOC}{\rm :}] Selects the memory allocation routine used by ADOL-C. {\sf Malloc} will be used if this variable is undefined. {\sf ADOLC\_USE\_CALLOC} is defined by default to avoid incorrect result caused by uninitialized memory. It can be set undefined by passing \texttt{--disable-use-calloc} to \texttt{./configure}. \item[{\sf ADOLC\_ADVANCED\_BRANCHING}{\rm :}] Enables routines required for automatic branch selection (default: disabled). The boolean valued comparison operators with two \texttt{adouble} type arguments will not return boolean values anymore and may not be used in branch control statements (\texttt{if}, \texttt{while}, \texttt{for} etc.). Instead conditional assignments using \texttt{condassign} or selection operations on elements of \texttt{advector} type should be used. Enabling this option and rewriting the function evaluation using \texttt{condassign} or selections of \texttt{advector} elements will prevent the need for retracing the function at branch switches. This can be enabled by passing \texttt{--enable-advanced-branching} to \texttt{./configure}. \end{description} % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Warnings and Suggestions for Improved Efficiency} \label{WarSug} % Since the type {\sf adouble} has a nontrivial constructor, the mere declaration of large {\sf adouble} arrays may take up considerable run time. The user should be warned against the usual Fortran practice of declaring fixed-size arrays that can accommodate the largest possible case of an evaluation program with variable dimensions. If such programs are converted to or written in C, the overloading in combination with ADOL-C will lead to very large run time increases for comparatively small values of the problem dimension, because the actual computation is completely dominated by the construction of the large {\sf adouble} arrays. The user is advised to create dynamic arrays of {\sf adouble}s by using the C++ operator {\sf new} and to destroy them using {\sf delete}. For storage efficiency it is desirable that dynamic objects are created and destroyed in a last-in-first-out fashion. Whenever an {\sf adouble} is declared, the constructor for the type {\sf adouble} assigns it a nominal address, which we will refer to as its {\em location}. The location is of the type {\sf locint} defined in the header file \verb==. Active vectors occupy a range of contiguous locations. As long as the program execution never involves more than 65$\,$536 active variables, the type {\sf locint} may be defined as {\sf unsigned short}. Otherwise, the range may be extended by defining {\sf locint} as {\sf (unsigned) int} or {\sf (unsigned) long}, which may nearly double the overall mass storage requirement. Sometimes one can avoid exceeding the accessible range of {\sf unsigned short}s by using more local variables and deleting {\sf adouble}s created by the new operator in a last-in-first-out fashion. When memory for {\sf adouble}s is requested through a call to {\sf malloc()} or other related C memory-allocating functions, the storage for these {\sf adouble}s is allocated; however, the C++ {\sf adouble} constructor is never called. The newly defined {\sf adouble}s are never assigned a location and are not counted in the stack of live variables. Thus, any results depending upon these pseudo-{\sf adouble}s will be incorrect. For these reasons {\bf DO NOT use malloc() and related C memory-allocating functions when declaring adoubles (see the following paragraph).} % % XXX: Vector and matrix class have to be reimplemented !!! % %The same point applies, of course, % for active vectors. When an {\sf adouble} % % XXX: Vector and matrix class have to be reimplemented !!! % % or {\bf adoublev} goes out of scope or is explicitly deleted, the destructor notices that its location(s) may be freed for subsequent (nominal) reallocation. In general, this is not done immediately but is delayed until the locations to be deallocated form a contiguous tail of all locations currently being used. As a consequence of this allocation scheme, the currently alive {\sf adouble} locations always form a contiguous range of integers that grows and shrinks like a stack. Newly declared {\sf adouble}s are placed on the top so that vectors of {\sf adouble}s obtain a contiguous range of locations. While the C++ compiler can be expected to construct and destruct automatic variables in a last-in-first-out fashion, the user may upset this desirable pattern by deleting free-store {\sf adouble}s too early or too late. Then the {\sf adouble} stack may grow unnecessarily, but the numerical results will still be correct, unless an exception occurs because the range of {\sf locint} is exceeded. In general, free-store {\sf adouble}s % % XXX: Vector and matrix class have to be reimplemented !!! % %and {\bf adoublev}s should be deleted in a last-in-first-out fashion toward the end of the program block in which they were created. When this pattern is maintained, the maximum number of {\sf adouble}s alive and, as a consequence, the randomly accessed storage space of the derivative evaluation routines is bounded by a small multiple of the memory used in the relevant section of the original program. Failure to delete dynamically allocated {\sf adouble}s may cause that the maximal number of {\sf adouble}s alive at one time will be exceeded if the same active section is called repeatedly. The same effect occurs if static {\sf adouble}s are used. To avoid the storage and manipulation of structurally trivial derivative values, one should pay careful attention to the naming of variables. Ideally, the intermediate values generated during the evaluation of a vector function should be assigned to program variables that are consistently either active or passive, in that all their values either are or are not dependent on the independent variables in a nontrivial way. For example, this rule is violated if a temporary variable is successively used to accumulate inner products involving first only passive and later active arrays. Then the first inner product and all its successors in the data dependency graph become artificially active and the derivative evaluation routines described later will waste time allocating and propagating trivial or useless derivatives. Sometimes even values that do depend on the independent variables may be of only transitory importance and may not affect the dependent variables. For example, this is true for multipliers that are used to scale linear equations, but whose values do not influence the dependent variables in a mathematical sense. Such dead-end variables can be deactivated by the use of the {\sf value} function, which converts {\sf adouble}s to {\sf double}s. The deleterious effects of unnecessary activity are partly alleviated by run time activity flags in the derivative routine {\sf hov\_reverse} presented in \autoref{forw_rev_ad}. The {\sf adouble} default constructor sets to zero the associated value. This implies a certain overhead that may seem unnecessary when no initial value is actually given, however, the implicit initialization of arrays from a partial value list is the only legitimate construct (known to us) that requires this behavior. An array instantiation such as \begin{center} \sf double x[3]=\{2.0\}; \end{center} will initialize {\sf x[0]} to {\sf 2.0} and initialize (implicitly) the remaining array elements {\sf x[1]} and {\sf x[2]} to {\sf 0.0}. According to the C++ standard the array element construction of the type changed instantiation \begin{center} \sf adouble x[3]=\{2.0\}; \end{center} will use the constructor {\sf adouble(const double\&);} for {\sf x[0]} passing in {\sf 2.0} but will call the {\sf adouble} default constructor {\sf x[1]} and {\sf x[2]} leaving these array elements uninitialized {\em unless} the default constructor does implement the initialization to zero. The C++ constructor syntax does not provide a means to distinguish this implicit initialization from the declaration of any simple uninitialized variable. If the user can ascertain the absence of array instantiations such as the above then one can configure ADOL-C with the \verb=--disable-stdczero= option , see \autoref{genlib}, to avoid the overhead of these initializations. % % % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Easy-To-Use Drivers} \label{drivers} % For the convenience of the user, ADOL-C provides several easy-to-use drivers that compute the most frequently required derivative objects. Throughout, we assume that after the execution of an active section, the corresponding tape with the identifier {\sf tag} contains a detailed record of the computational process by which the final values $y$ of the dependent variables were obtained from the values $x$ of the independent variables. We will denote this functional relation between the input variables $x$ and the output variables $y$ by \[ F : \R^n \mapsto \R^m, \qquad x \rightarrow F(x) \equiv y. \] The return value of all drivers presented in this section indicate the validity of the tape as explained in \autoref{reuse_tape}. The presented drivers are all C functions and therefore can be used within C and C++ programs. Some Fortran-callable companions can be found in the appropriate header files. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Drivers for Optimization and Nonlinear Equations} % \label{optdrivers} % The drivers provided for solving optimization problems and nonlinear equations are prototyped in the header file \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). The routine {\sf function} allows to evaluate the desired function from the tape instead of executing the corresponding source code: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int function(tag,m,n,x,y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double y[m];} \> // dependent vector $y=F(x)$ \end{tabbing} % If the original evaluation program is available this double version should be used to compute the function value in order to avoid the interpretative overhead. For the calculation of whole derivative vectors and matrices up to order 2 there are the following procedures: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int gradient(tag,n,x,g)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$ and $m=1$\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double g[n];} \> // resulting gradient $\nabla F(x)$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int jacobian(tag,m,n,x,J)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double J[m][n];} \> // resulting Jacobian $F^\prime (x)$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hessian(tag,n,x,H)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$ and $m=1$\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double H[n][n];} \> // resulting Hessian matrix $\nabla^2F(x)$ \end{tabbing} % The driver routine {\sf hessian} computes only the lower half of $\nabla^2f(x_0)$ so that all values {\sf H[i][j]} with $j>i$ of {\sf H} allocated as a square array remain untouched during the call of {\sf hessian}. Hence only $i+1$ {\sf double}s need to be allocated starting at the position {\sf H[i]}. To use the full capability of automatic differentiation when the product of derivatives with certain weight vectors or directions are needed, ADOL-C offers the following four drivers: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int vec\_jac(tag,m,n,repeat,x,u,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int repeat;} \> // indicate repeated call at same argument\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double u[m];} \> // range weight vector $u$ \\ \>{\sf double z[n];} \> // result $z = u^TF^\prime (x)$ \end{tabbing} If a nonzero value of the parameter {\sf repeat} indicates that the routine {\sf vec\_jac} has been called at the same argument immediately before, the internal forward mode evaluation will be skipped and only reverse mode evaluation with the corresponding arguments is executed resulting in a reduced computational complexity of the function {\sf vec\_jac}. % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int jac\_vec(tag,m,n,x,v,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$\\ \>{\sf double v[n];} \> // tangent vector $v$\\ \>{\sf double z[m];} \> // result $z = F^\prime (x)v$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hess\_vec(tag,n,x,v,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$\\ \>{\sf double v[n];} \> // tangent vector $v$\\ \>{\sf double z[n];} \> // result $z = \nabla^2F(x) v$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hess\_mat(tag,n,p,x,V,Z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int p;} \> // number of columns in $V$\\ \>{\sf double x[n];} \> // independent vector $x$\\ \>{\sf double V[n][p];} \> // tangent matrix $V$\\ \>{\sf double Z[n][p];} \> // result $Z = \nabla^2F(x) V$ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int lagra\_hess\_vec(tag,m,n,x,v,u,h)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$\\ \>{\sf double v[n];} \> // tangent vector $v$\\ \>{\sf double u[m];} \> // range weight vector $u$ \\ \>{\sf double h[n];} \> // result $h = u^T\nabla^2F(x) v $ \end{tabbing} % The next procedure allows the user to perform Newton steps only having the corresponding tape at hand: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int jac\_solv(tag,n,x,b,mode)} \\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent vector $x$ as\\ \>{\sf double b[n];} \> // in: right-hand side b, out: result $w$ of $F(x)w = b$\\ \>{\sf int mode;} \> // option to choose different solvers \end{tabbing} % On entry, parameter {\sf b} of the routine {\sf jac\_solv} contains the right-hand side of the equation $F(x)w = b$ to be solved. On exit, {\sf b} equals the solution $w$ of this equation. If {\sf mode} = 0 only the Jacobian of the function given by the tape labeled with {\sf tag} is provided internally. The LU-factorization of this Jacobian is computed for {\sf mode} = 1. The solution of the equation is calculated if {\sf mode} = 2. Hence, it is possible to compute the LU-factorization only once. Then the equation can be solved for several right-hand sides $b$ without calculating the Jacobian and its factorization again. If the original evaluation code of a function contains neither quadratures nor branches, all drivers described above can be used to evaluate derivatives at any argument in its domain. The same still applies if there are no user defined quadratures and all comparisons involving {\sf adouble}s have the same result as during taping. If this assumption is falsely made all drivers while internally calling the forward mode evaluation will return the value -1 or -2 as already specified in \autoref{reuse_tape}. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Drivers for Ordinary Differential Equations} \label{odedrivers} % When $F$ is the right-hand side of an (autonomous) ordinary differential equation \[ x^\prime(t) \; = \; F(x(t)) , \] we must have $m=n$. Along any solution path $x(t)$ its Taylor coefficients $x_j$ at some time, e.g., $t=0$, must satisfy the relation \[ x_{i+1} = \frac{1}{1+i} y_i. \] with the $y_j$ the Taylor coefficients of its derivative $y(t)=x^\prime(t)$, namely, \[ y(t) \; \equiv \; F(x(t)) \; : \; I\!\!R \;\mapsto \;I\!\!R^m \] defined by an autonomous right-hand side $F$ recorded on the tape. Using this relation, one can generate the Taylor coefficients $x_i$, $i \le deg$, recursively from the current point $x_0$. This task is achieved by the driver routine {\sf forode} defined as follows: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forode(tag,n,tau,dol,deg,X)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of state variables $n$\\ \>{\sf double tau;} \> // scaling parameter\\ \>{\sf int dol;} \> // degree on previous call\\ \>{\sf int deg;} \> // degree on current call\\ \>{\sf double X[n][deg+1];} \> // Taylor coefficient vector $X$ \end{tabbing} % If {\sf dol} is positive, it is assumed that {\sf forode} has been called before at the same point so that all Taylor coefficient vectors up to the {\sf dol}-th are already correct. Subsequently one may call the driver routine {\sf reverse} or corresponding low level routines as explained in the \autoref{forw_rev} and \autoref{forw_rev_ad}, respectively, to compute the family of square matrices {\sf Z[n][n][deg]} defined by \[ Z_j \equiv U\/\frac{\partial y_j}{\partial x_0} \in{I\!\!R}^{q \times n} , \] with {\sf double** U}$=I_n$ the identity matrix of order {\sf n}. For the numerical solutions of ordinary differential equations, one may also wish to calculate the Jacobians \begin{equation} \label{eq:bees} B_j \; \equiv \; \frac{\mbox{d}x_{j+1}}{\mbox{d} x_0}\;\in\;{I\!\!R}^{n \times n}\, , \end{equation} which exist provided $F$ is sufficiently smooth. These matrices can be obtained from the partial derivatives $\partial y_i/\partial x_0$ by an appropriate version of the chain rule. To compute the total derivatives $B = (B_j)_{0\leq j {\sf int accode(n,tau,deg,Z,B,nz)}\\ \>{\sf int n;} \> // number of state variables $n$ \\ \>{\sf double tau;} \> // scaling parameter\\ \>{\sf int deg;} \> // degree on current call\\ \>{\sf double Z[n][n][deg];} \> // partials of coefficient vectors\\ \>{\sf double B[n][n][deg];} \> // result $B$ as defined in \eqref{eq:bees}\\ \>{\sf short nz[n][n];} \> // optional nonzero pattern \end{tabbing} % Sparsity information can be exploited by {\sf accode} using the array {\sf nz}. For this purpose, {\sf nz} has to be set by a call of the routine {\sf reverse} or the corresponding basic routines as explained below in \autoref{forw_rev_ad} and \autoref{forw_rev}, respectively. The non-positive entries of {\sf nz} are then changed by {\sf accode} so that upon return \[ \mbox{{\sf B[i][j][k]}} \; \equiv \; 0 \quad {\rm if} \quad \mbox{\sf k} \leq \mbox{\sf $-$nz[i][j]}\; . \] In other words, the matrices $B_k$ = {\sf B[ ][ ][k]} have a sparsity pattern that fills in as $k$ grows. Note, that there need to be no loss in computational efficiency if a time-dependent ordinary differential equation is rewritten in autonomous form. The prototype of the ODE-drivers {\sf forode} and {\sf accode} is contained in the header file \verb==. The global header file \verb== includes this file automatically, see \autoref{ssec:DesIH}. An example program using the procedures {\sf forode} and {\sf accode} together with more detailed information about the coding can be found in \autoref{exam:ode}. The corresponding source code \verb=odexam.cpp= is contained in the subdirectory \verb=examples=. % % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Drivers for Sparse Jacobians and Sparse Hessians} \label{sparse} % Quite often, the Jacobians and Hessians that have to be computed are sparse matrices. Therefore, ADOL-C provides additionally drivers that allow the exploitation of sparsity. The exploitation of sparsity is frequently based on {\em graph coloring} methods, discussed for example in \cite{GeMaPo05} and \cite{GeTaMaPo07}. The sparse drivers of ADOL-C presented in this section rely on the the coloring package ColPack developed by the authors of \cite{GeMaPo05} and \cite{GeTaMaPo07}. ColPack is not directly incorporated in ADOL-C, and therefore needs to be installed separately to use the sparse drivers described here. ColPack is available for download at \verb=http://cscapes.cs.purdue.edu/coloringpage/software.htm=. More information about the required installation of ColPack is given in \autoref{install}. % \subsubsection*{Sparse Jacobians and Sparse Hessians} % To compute the entries of sparse Jacobians and sparse Hessians, respectively, in coordinate format one may use the drivers: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int sparse\_jac(tag,m,n,repeat,x,\&nnz,\&rind,\&cind,\&values,\&options)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int repeat;} \> // indicate repeated call at same argument\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf int nnz;} \> // number of nonzeros \\ \>{\sf unsigned int rind[nnz];}\> // row index\\ \>{\sf unsigned int cind[nnz];}\> // column index\\ \>{\sf double values[nnz];} \> // non-zero values\\ \>{\sf int options[4];} \> // array of control parameters\\ \end{tabbing} % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int sparse\_hess(tag,n,repeat,x,\&nnz,\&rind,\&cind,\&values,\&options)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$ and $m=1$\\ \>{\sf int repeat;} \> // indicate repeated call at same argument\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf int nnz;} \> // number of nonzeros \\ \>{\sf unsigned int rind[nnz];}\> // row indices\\ \>{\sf unsigned int cind[nnz];}\> // column indices\\ \>{\sf double values[nnz];} \> // non-zero values \\ \>{\sf int options[2];} \> // array of control parameters\\ \end{tabbing} % Once more, the input variables are the identifier for the internal representation {\sf tag}, if required the number of dependents {\sf m}, and the number of independents {\sf n} for a consistency check. Furthermore, the flag {\sf repeat=0} indicates that the functions are called at a point with a new sparsity structure, whereas {\sf repeat=1} results in the re-usage of the sparsity pattern from the previous call. The current values of the independents are given by the array {\sf x}. The input/output variable {\sf nnz} stores the number of the nonzero entries. Therefore, {\sf nnz} denotes also the length of the arrays {\sf r\_ind} storing the row indices, {\sf c\_ind} storing the column indices, and {\sf values} storing the values of the nonzero entries. If {\sf sparse\_jac} and {\sf sparse\_hess} are called with {\sf repeat=0}, the functions determine the number of nonzeros for the sparsity pattern defined by the value of {\sf x}, allocate appropriate arrays {\sf r\_ind}, {\sf c\_ind}, and {\sf values} and store the desired information in these arrays. During the next function call with {\sf repeat=1} the allocated memory is reused such that only the values of the arrays are changed. Before calling {\sf sparse\_jac} or {\sf sparse\_hess} once more with {\sf repeat=0} the user is responsible for the deallocation of the array {\sf r\_ind}, {\sf c\_ind}, and {\sf values} using the function {\sf free()}! For each driver the array {\sf options} can be used to adapted the computation of the sparse derivative matrices to the special needs of application under consideration. Most frequently, the default options will give a reasonable performance. The elements of the array {\sf options} control the action of {\sf sparse\_jac} according to \autoref{options_sparse_jac}. \begin{table}[h] \center \begin{tabular}{|c|c|l|} \hline component & value & \\ \hline {\sf options[0]} & & way of sparsity pattern computation \\ & 0 & propagation of index domains (default) \\ & 1 & propagation of bit pattern \\ \hline {\sf options[1]} & & test the computational graph control flow \\ & 0 & safe mode (default) \\ & 1 & tight mode \\ \hline {\sf options[2]} & & way of bit pattern propagation \\ & 0 & automatic detection (default) \\ & 1 & forward mode \\ & 2 & reverse mode \\ \hline {\sf options[3]} & & way of compression \\ & 0 & column compression (default) \\ & 1 & row compression \\ \hline \end{tabular} \caption{ {\sf sparse\_jac} parameter {\sf options}\label{options_sparse_jac}} \end{table} The component {\sf options[1]} determines the usage of the safe or tight mode of sparsity computation. The first, more conservative option is the default. It accounts for all dependences that might occur for any value of the independent variables. For example, the intermediate {\sf c}~$=$~{\sf max}$(${\sf a}$,${\sf b}$)$ is always assumed to depend on all independent variables that {\sf a} or {\sf b} dependent on, i.e.\ the bit pattern associated with {\sf c} is set to the logical {\sf OR} of those associated with {\sf a} and {\sf b}. In contrast the tight option gives this result only in the unlikely event of an exact tie {\sf a}~$=$~{\sf b}. Otherwise it sets the bit pattern associated with {\sf c} either to that of {\sf a} or to that of {\sf b}, depending on whether {\sf c}~$=$~{\sf a} or {\sf c}~$=$~{\sf b} locally. Obviously, the sparsity pattern obtained with the tight option may contain more zeros than that obtained with the safe option. On the other hand, it will only be valid at points belonging to an area where the function $F$ is locally analytic and that contains the point at which the internal representation was generated. Since generating the sparsity structure using the safe version does not require any reevaluation, it may thus reduce the overall computational cost despite the fact that it produces more nonzero entries. The value of {\sf options[2]} selects the direction of bit pattern propagation. Depending on the number of independent $n$ and of dependent variables $m$ one would prefer the forward mode if $n$ is significant smaller than $m$ and would otherwise use the reverse mode. The elements of the array {\sf options} control the action of {\sf sparse\_hess} according to \autoref{options_sparse_hess}. \begin{table}[h] \center \begin{tabular}{|c|c|l|} \hline component & value & \\ \hline {\sf options[0]} & & test the computational graph control flow \\ & 0 & safe mode (default) \\ & 1 & tight mode \\ \hline {\sf options[1]} & & way of recovery \\ & 0 & indirect recovery (default) \\ & 1 & direct recovery \\ \hline \end{tabular} \caption{ {\sf sparse\_hess} parameter {\sf options}\label{options_sparse_hess}} \end{table} The described driver routines for the computation of sparse derivative matrices are prototyped in the header file \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). Example codes illustrating the usage of {\sf sparse\_jac} and {\sf sparse\_hess} can be found in the file \verb=sparse_jacobian.cpp= and \verb=sparse_hessian.cpp= contained in %the subdirectory \verb=examples/additional_examples/sparse=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsubsection*{Computation of Sparsity Pattern} % ADOL-C offers a convenient way of determining the sparsity structure of a Jacobian matrix using the function: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.3in}\= \kill % define tab position \>{\sf int jac\_pat(tag, m, n, x, JP, options)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent variables $x_0$\\ \>{\sf unsigned int JP[][];} \> // row compressed sparsity structure\\ \>{\sf int options[2];} \> // array of control parameters \end{tabbing} % The sparsity pattern of the Jacobian is computed in a compressed row format. For this purpose, {\sf JP} has to be an $m$ dimensional array of pointers to {\sf unsigned int}s, i.e., one has {\sf unsigned int* JP[m]}. During the call of {\sf jac\_pat}, the number $\hat{n}_i$ of nonzero entries in row $i$ of the Jacobian is determined for all $1\le i\le m$. Then, a memory allocation is performed such that {\sf JP[i-1]} points to a block of $\hat{n}_i+1$ {\sf unsigned int} for all $1\le i\le m$ and {\sf JP[i-1][0]} is set to $\hat{n}_i$. Subsequently, the column indices of the $j$ nonzero entries in the $i$th row are stored in the components {\sf JP[i-1][1]}, \ldots, {\sf JP[i-1][j]}. The elements of the array {\sf options} control the action of {\sf jac\_pat} according to \autoref{options}. \begin{table}[h] \center \begin{tabular}{|c|c|l|} \hline component & value & \\ \hline {\sf options[0]} & & way of sparsity pattern computation \\ & 0 & propagation of index domains (default) \\ & 1 & propagation of bit pattern \\ \hline {\sf options[1]} & & test the computational graph control flow \\ & 0 & safe mode (default) \\ & 1 & tight mode \\ \hline {\sf options[2]} & & way of bit pattern propagation \\ & 0 & automatic detection (default) \\ & 1 & forward mode \\ & 2 & reverse mode \\ \hline \end{tabular} \caption{ {\sf jac\_pat} parameter {\sf options}\label{options}} \end{table} The value of {\sf options[0]} selects the way to compute the sparsity pattern. The component {\sf options[1]} determines the usage of the safe or tight mode of bit pattern propagation. The first, more conservative option is the default. It accounts for all dependences that might occur for any value of the independent variables. For example, the intermediate {\sf c}~$=$~{\sf max}$(${\sf a}$,${\sf b}$)$ is always assumed to depend on all independent variables that {\sf a} or {\sf b} dependent on, i.e.\ the bit pattern associated with {\sf c} is set to the logical {\sf OR} of those associated with {\sf a} and {\sf b}. In contrast the tight option gives this result only in the unlikely event of an exact tie {\sf a}~$=$~{\sf b}. Otherwise it sets the bit pattern associated with {\sf c} either to that of {\sf a} or to that of {\sf b}, depending on whether {\sf c}~$=$~{\sf a} or {\sf c}~$=$~{\sf b} locally. Obviously, the sparsity pattern obtained with the tight option may contain more zeros than that obtained with the safe option. On the other hand, it will only be valid at points belonging to an area where the function $F$ is locally analytic and that contains the point at which the internal representation was generated. Since generating the sparsity structure using the safe version does not require any reevaluation, it may thus reduce the overall computational cost despite the fact that it produces more nonzero entries. The value of {\sf options[2]} selects the direction of bit pattern propagation. Depending on the number of independent $n$ and of dependent variables $m$ one would prefer the forward mode if $n$ is significant smaller than $m$ and would otherwise use the reverse mode. The routine {\sf jac\_pat} may use the propagation of bitpattern to determine the sparsity pattern. Therefore, a kind of ``strip-mining'' is used to cope with large matrix dimensions. If the system happens to run out of memory, one may reduce the value of the constant {\sf PQ\_STRIPMINE\_MAX} following the instructions in \verb==. The driver routine is prototyped in the header file \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). The determination of sparsity patterns is illustrated by the examples \verb=sparse_jacobian.cpp= and \verb=jacpatexam.cpp= contained in \verb=examples/additional_examples/sparse=. To compute the sparsity pattern of a Hessian in a row compressed form, ADOL-C provides the driver \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.3in}\= \kill % define tab position \>{\sf int hess\_pat(tag, n, x, HP, options)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x[n];} \> // independent variables $x_0$\\ \>{\sf unsigned int HP[][];} \> // row compressed sparsity structure\\ \>{\sf int option;} \> // control parameter \end{tabbing} where the user has to provide {\sf HP} as an $n$ dimensional array of pointers to {\sf unsigned int}s. After the function call {\sf HP} contains the sparsity pattern, where {\sf HP[j][0]} contains the number of nonzero elements in the $j$th row for $1 \le j\le n$. The components {\sf P[j][i]}, $0<${\sf i}~$\le$~{\sf P[j][0]} store the indices of these entries. For determining the sparsity pattern, ADOL-C uses the algorithm described in \cite{Wa05a}. The parameter{\sf option} determines the usage of the safe ({\sf option = 0}, default) or tight mode ({\sf option = 1}) of the computation of the sparsity pattern as described above. This driver routine is prototyped in the header file \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). An example employing the procedure {\sf hess\_pat} can be found in the file \verb=sparse_hessian.cpp= contained in \verb=examples/additional_examples/sparse=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsubsection*{Calculation of Seed Matrices} % To compute a compressed derivative matrix from a given sparsity pattern, one has to calculate an appropriate seed matrix that can be used as input for the derivative calculation. To facilitate the generation of seed matrices for a sparsity pattern given in row compressed form, ADOL-C provides the following two drivers, which are based on the ColPack library: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.3in}\= \kill % define tab position \>{\sf int generate\_seed\_jac(m, n, JP, S, p)}\\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf unsigned int JP[][];} \> // row compressed sparsity structure of Jacobian\\ \>{\sf double S[n][p];} \> // seed matrix\\ \>{\sf int p;} \> // number of columns in $S$ \end{tabbing} The input variables to {\sf generate\_seed\_jac} are the number of dependent variables $m$, the number of independent variables {\sf n} and the sparsity pattern {\sf JP} of the Jacobian computed for example by {\sf jac\_pat}. First, {\sf generate\_seed\_jac} performs a distance-2 coloring of the bipartite graph defined by the sparsity pattern {\sf JP} as described in \cite{GeMaPo05}. The number of colors needed for the coloring determines the number of columns {\sf p} in the seed matrix. Subsequently, {\sf generate\_seed\_jac} allocates the memory needed by {\sf S} and initializes {\sf S} according to the graph coloring. The coloring algorithm that is applied in {\sf generate\_seed\_jac} is used also by the driver {\sf sparse\_jac} described earlier. \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.3in}\= \kill % define tab position \>{\sf int generate\_seed\_hess(n, HP, S, p)}\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf unsigned int HP[][];} \> // row compressed sparsity structure of Jacobian\\ \>{\sf double S[n][p];} \> // seed matrix\\ \>{\sf int p;} \> // number of columns in $S$ \end{tabbing} The input variables to {\sf generate\_seed\_hess} are the number of independents $n$ and the sparsity pattern {\sf HP} of the Hessian computed for example by {\sf hess\_pat}. First, {\sf generate\_seed\_hess} performs an appropriate coloring of the adjacency graph defined by the sparsity pattern {\sf HP}: An acyclic coloring in the case of an indirect recovery of the Hessian from its compressed representation and a star coloring in the case of a direct recovery. Subsequently, {\sf generate\_seed\_hess} allocates the memory needed by {\sf S} and initializes {\sf S} according to the graph coloring. The coloring algorithm applied in {\sf generate\_seed\_hess} is used also by the driver {\sf sparse\_hess} described earlier. The specific set of criteria used to define a seed matrix $S$ depends on whether the sparse derivative matrix to be computed is a Jacobian (nonsymmetric) or a Hessian (symmetric). It also depends on whether the entries of the derivative matrix are to be recovered from the compressed representation \emph{directly} (without requiring any further arithmetic) or \emph{indirectly} (for example, by solving for unknowns via successive substitutions). Appropriate recovery routines are provided by ColPack and used in the drivers {\sf sparse\_jac} and {\sf sparse\_hess} described in the previous subsection. Examples with a detailed analysis of the employed drivers for the exploitation of sparsity can be found in the papers \cite{GePoTaWa06} and \cite{GePoWa08}. These driver routines are prototyped in \verb==, which is included automatically by the global header file \verb== (see \autoref{ssec:DesIH}). An example code illustrating the usage of {\sf generate\_seed\_jac} and {\sf generate\_seed\_hess} can be found in the file \verb=sparse_jac_hess_exam.cpp= contained in \verb=examples/additional_examples/sparse=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Higher Derivative Tensors} \label{higherOrderDeriv} % Many applications in scientific computing need second- and higher-order derivatives. Often, one does not require full derivative tensors but only the derivatives in certain directions $s_i \in \R^{n}$. Suppose a collection of $p$ directions $s_i \in \R^{n}$ is given, which form a matrix \[ S\; =\; \left [ s_1, s_2,\ldots, s_p \right ]\; \in \; \R^{n \times p}. \] One possible choice is $S = I_n$ with $p = n$, which leads to full tensors being evaluated. ADOL-C provides the function {\sf tensor\_eval} to calculate the derivative tensors \begin{eqnarray} \label{eq:tensor} \left. \nabla_{\mbox{$\scriptstyle \!\!S$}}^{k} F(x_0) \; = \; \frac{\partial^k}{\partial z^k} F(x_0+Sz) \right |_{z=0} \in \R^{p^k}\quad \mbox{for} \quad k = 0,\ldots,d \end{eqnarray} simultaneously. The function {\sf tensor\_eval} has the following calling sequence and parameters: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf void tensor\_eval(tag,m,n,d,p,x,tensor,S)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$ \\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int p;} \> // number of directions $p$\\ \>{\sf double x[n];} \> // values of independent variables $x_0$\\ \>{\sf double tensor[m][size];}\> // result as defined in \eqref{eq:tensor} in compressed form\\ \>{\sf double S[n][p];} \> // seed matrix $S$ \end{tabbing} % Using the symmetry of the tensors defined by \eqref{eq:tensor}, the memory requirement can be reduced enormously. The collection of tensors up to order $d$ comprises $\binom{p+d}{d}$ distinct elements. Hence, the second dimension of {\sf tensor} must be greater or equal to $\binom{p+d}{d}$. To compute the derivatives, {\sf tensor\_eval} propagates internally univariate Taylor series along $\binom{n+d-1}{d}$ directions. Then the desired values are interpolated. This approach is described in \cite{Griewank97}. The access of individual entries in symmetric tensors of higher order is a little tricky. We always store the derivative values in the two dimensional array {\sf tensor} and provide two different ways of accessing them. The leading dimension of the tensor array ranges over the component index $i$ of the function $F$, i.e., $F_{i+1}$ for $i = 0,\ldots,m-1$. The sub-arrays pointed to by {\sf tensor[i]} have identical structure for all $i$. Each of them represents the symmetric tensors up to order $d$ of the scalar function $F_{i+1}$ in $p$ variables. % The $\binom{p+d}{d}$ mixed partial derivatives in each of the $m$ tensors are linearly ordered according to the tetrahedral scheme described by Knuth \cite{Knuth73}. In the familiar quadratic case $d=2$ the derivative with respect to $z_j$ and $z_k$ with $z$ as in \eqref{eq:tensor} and $j \leq k$ is stored at {\sf tensor[i][l]} with $l = k*(k+1)/2+j$. At $j = 0 = k$ and hence $l = 0$ we find the function value $F_{i+1}$ itself and the gradient $\nabla F_{i+1}= \partial F_{i+1}/\partial x_k $ is stored at $l=k(k+1)/2$ with $j=0$ for $k=1,\ldots,p$. For general $d$ we combine the variable indices to a multi-index $j = (j_1,j_2,\ldots,j_d)$, where $j_k$ indicates differentiation with respect to variable $x_{j_k}$ with $j_k \in \{0,1,\ldots,p\}$. The value $j_k=0$ indicates no differentiation so that all lower derivatives are also contained in the same data structure as described above for the quadratic case. The location of the partial derivative specified by $j$ is computed by the function % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int tensor\_address(d,$\,$j)} \\ \>{\sf int d;} \> // highest derivative degree $d$ \\ \>{\sf int j[d];} \> // multi-index $j$ \end{tabbing} % and it may thus be referenced as {\sf tensor[i][tensor\_address(d,$\,$j)]}. Notice that the address computation does depend on the degree $d$ but not on the number of directions $p$, which could theoretically be enlarged without the need to reallocate the original tensor. Also, the components of $j$ need to be non-increasing. % To some C programmers it may appear more natural to access tensor entries by successive dereferencing in the form {\sf tensorentry[i][$\,$j1$\,$][$\,$j2$\,$]$\ldots$[$\,$jd$\,$]}. We have also provided this mode, albeit with the restriction that the indices $j_1,j_2,\ldots,j_d$ are non-increasing. In the second order case this means that the Hessian entries must be specified in or below the diagonal. If this restriction is violated the values are almost certain to be wrong and array bounds may be violated. We emphasize that subscripting is not overloaded but that {\sf tensorentry} is a conventional and thus moderately efficient C pointer structure. Such a pointer structure can be allocated and set up completely by the function % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf void** tensorsetup(m,p,d,tensor)} \\ \>{\sf int m;} \> // number of dependent variables $n$ \\ \>{\sf int p;} \> // number of directions $p$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double tensor[m][size];}\> // pointer to two dimensional array \end{tabbing} % Here, {\sf tensor} is the array of $m$ pointers pointing to arrays of {\sf size} $\geq \binom{p+d}{d}$ allocated by the user before. During the execution of {\sf tensorsetup}, $d-1$ layers of pointers are set up so that the return value allows the direct dereferencing of individual tensor elements. For example, suppose some active section involving $m \geq 5$ dependents and $n \geq 2$ independents has been executed and taped. We may select $p=2$, $d=3$ and initialize the $n\times 2$ seed matrix $S$ with two columns $s_1$ and $s_2$. Then we are able to execute the code segment \begin{tabbing} \hspace{0.5in}\={\sf double**** tensorentry = (double****) tensorsetup(m,p,d,tensor);} \\ \>{\sf tensor\_eval(tag,m,n,d,p,x,tensor,S);} \end{tabbing} This way, we evaluated all tensors defined in \eqref{eq:tensor} up to degree 3 in both directions $s_1$ and $s_2$ at some argument $x$. To allow the access of tensor entries by dereferencing the pointer structure {\sf tensorentry} has been created. Now, the value of the mixed partial \[ \left. \frac{\partial ^ 3 F_5(x+s_1 z_1+s_2 z_2)}{\partial z_1^2 \partial z_2} \right |_{z_1=0=z_2} \] can be recovered as \begin{center} {\sf tensorentry[4][2][1][1]} \hspace{0.2in} or \hspace{0.2in} {\sf tensor[4][tensor\_address(d,$\,$j)]}, \end{center} where the integer array {\sf j} may equal (1,1,2), (1,2,1) or (2,1,1). Analogously, the entry \begin{center} {\sf tensorentry[2][1][0][0]} \hspace{0.2in} or \hspace{0.2in} {\sf tensor[2][tensor\_address(d,$\,$j)]} \end{center} with {\sf j} = (1,0,0) contains the first derivative of the third dependent variable $F_3$ with respect to the first differentiation parameter $z_1$. Note, that the pointer structure {\sf tensorentry} has to be set up only once. Changing the values of the array {\sf tensor}, e.g.~by a further call of {\sf tensor\_eval}, directly effects the values accessed by {\sf tensorentry}. % When no more derivative evaluations are desired the pointer structure {\sf tensorentry} can be deallocated by a call to the function % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int freetensor(m,p,d, (double ****) tensorentry)}\\ \>{\sf int m;} \> // number of dependent variables $m$ \\ \>{\sf int p;} \> // number of independent variables $p$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double*** tensorentry[m];} \> // return value of {\sf tensorsetup} \end{tabbing} % that does not deallocate the array {\sf tensor}. The drivers provided for efficient calculation of higher order derivatives are prototyped in the header file \verb==, which is included by the global header file \verb== automatically (see \autoref{ssec:DesIH}). Example codes using the above procedures can be found in the files \verb=taylorexam.C= and \verb=accessexam.C= contained in the subdirectory \verb=examples/additional_examples/taylor=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Derivatives of Implicit and Inverse Functions} \label{implicitInverse} % Frequently, one needs derivatives of variables $y \in \R^{m}$ that are implicitly defined as functions of some variables $x \in \R^{n-m}$ by an algebraic system of equations \[ G(z) \; = \; 0 \in \R^m \quad {\rm with} \quad z = (y, x) \in \R^n . \] Naturally, the $n$ arguments of $G$ need not be partitioned in this regular fashion and we wish to provide flexibility for a convenient selection of the $n-m$ {\em truly} independent variables. Let $P \in \R^{(n-m)\times n}$ be a $0-1$ matrix that picks out these variables so that it is a column permutation of the matrix $[0,I_{n-m}] \in \R^{(n-m)\times n}$. Then the nonlinear system \[ G(z) \; = \; 0, \quad P z = x, \] has a regular Jacobian, wherever the implicit function theorem yields $y$ as a function of $x$. Hence, we may also write \begin{equation} \label{eq:inv_tensor} F(z) = \left(\begin{array}{c} G(z) \\ P z \end{array} \right)\; \equiv \; \left(\begin{array}{c} 0 \\ P z \end{array} \right)\; \equiv \; S\, x, \end{equation} where $S = [0,I_p]^{T} \in \R^{n \times p}$ with $p=n-m$. Now, we have rewritten the original implicit functional relation between $x$ and $y$ as an inverse relation $F(z) = Sx$. In practice, we may implement the projection $P$ simply by marking $n-m$ of the independents also dependent. Given any $ F : \R^n \mapsto \R^n $ that is locally invertible and an arbitrary seed matrix $S \in \R^{n \times p}$ we may evaluate all derivatives of $z \in \R^n$ with respect to $x \in \R^p$ by calling the following routine: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf void inverse\_tensor\_eval(tag,n,d,p,z,tensor,S)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int p;} \> // number of directions $p$\\ \>{\sf double z[n];} \> // values of independent variables $z$\\ \>{\sf double tensor[n][size];}\> // partials of $z$ with respect to $x$\\ \>{\sf double S[n][p];} \> // seed matrix $S$ \end{tabbing} % The results obtained in {\sf tensor} are exactly the same as if we had called {\sf tensor\_eval} with {\sf tag} pointing to a tape for the evaluation of the inverse function $z=F^{-1}(y)$ for which naturally $n=m$. Note that the columns of $S$ belong to the domain of that function. Individual derivative components can be accessed in tensor exactly as in the explicit case described above. It must be understood that {\sf inverse\_tensor\_eval} actually computes the derivatives of $z$ with respect to $x$ that is defined by the equation $F(z)=F(z_0)+S \, x$. In other words the base point at which the inverse function is differentiated is given by $F(z_0)$. The routine has no capability for inverting $F$ itself as solving systems of nonlinear equations $F(z)=0$ in the first place is not just a differentiation task. However, the routine {\sf jac\_solv} described in \autoref{optdrivers} may certainly be very useful for that purpose. As an example consider the following two nonlinear expressions \begin{eqnarray*} G_1(z_1,z_2,z_3,z_4) & = & z_1^2+z_2^2-z_3^2 \\ G_2(z_1,z_2,z_3,z_4) & = & \cos(z_4) - z_1/z_3 \enspace . \end{eqnarray*} The equations $G(z)=0$ describe the relation between the Cartesian coordinates $(z_1,z_2)$ and the polar coordinates $(z_3,z_4)$ in the plane. Now, suppose we are interested in the derivatives of the second Cartesian $y_1=z_2$ and the second (angular) polar coordinate $y_2=z_4$ with respect to the other two variables $x_1=z_1$ and $x_2=z_3$. Then the active section could look simply like % \begin{tabbing} \hspace{1.5in}\={\sf for (j=1; j $<$ 5;$\,$j++)}\hspace{0.15in} \= {\sf z[j] \boldmath $\ll=$ \unboldmath zp[j];}\\ \>{\sf g[1] = z[1]*z[1]+z[2]*z[2]-z[3]*z[3]; }\\ \>{\sf g[2] = cos(z[4]) - z[1]/z[3]; }\\ \>{\sf g[1] \boldmath $\gg=$ \unboldmath gp[1];} \> {\sf g[2] \boldmath $\gg=$ \unboldmath gp[2];}\\ \>{\sf z[1] \boldmath $\gg=$ \unboldmath zd[1];} \> {\sf z[3] \boldmath $\gg=$ \unboldmath zd[2];} \end{tabbing} % where {\sf zd[1]} and {\sf zd[2]} are dummy arguments. In the last line the two independent variables {\sf z[1]} and {\sf z[3]} are made simultaneously dependent thus generating a square system that can be inverted (at most arguments). The corresponding projection and seed matrix are \begin{eqnarray*} P \;=\; \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \end{array}\right) \quad \mbox{and} \quad S^T \; = \; \left( \begin{array}{cccc} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array}\right) \enspace . \end{eqnarray*} Provided the vector {\sf zp} is consistent in that its Cartesian and polar components describe the same point in the plane the resulting tuple {\sf gp} must vanish. The call to {\sf inverse\_tensor\_eval} with $n=4$, $p=2$ and $d$ as desired will yield the implicit derivatives, provided {\sf tensor} has been allocated appropriately of course and $S$ has the value given above. % The example is untypical in that the implicit function could also be obtained explicitly by symbolic mani\-pu\-lations. It is typical in that the subset of $z$ components that are to be considered as truly independent can be selected and altered with next to no effort at all. The presented drivers are prototyped in the header file \verb==. As indicated before this header is included by the global header file \verb== automatically (see \autoref{ssec:DesIH}). The example programs \verb=inversexam.cpp=, \verb=coordinates.cpp= and \verb=trigger.cpp= in the directory \verb=examples/additional_examples/taylor= show the application of the procedures described here. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Drivers of the Toolbox for Lie Derivatives} Nonlinear controller and observer design often require certain types of Lie derivatives. These derivatives also arise in other areas such as classical mechanics and relativity. Lie derivatives are total derivatives of tensor fields along a vector field. The drivers for calculating Lie derivatives in ADOL-C presented in this section were developed by Klaus R{\"o}benack~\cite{Roeb05} and his co-workers Jan Winkler, Siqian Wang and Mirko Franke~\cite{Roeb11}. They are prototyped as C functions in the header file {\verb==} and allow the calculation of Lie derivatives of scalar, vector and covector fields. In addition, the calculation of gradients of Lie derivatives of scalar fields is supported. We consider computational problems occurring in controller and observer design for nonlinear control systems \begin{equation*} \dot{\mathbf x}=\mathbf f(\mathbf x)+\mathbf g(\mathbf x)u, \quad \mathbf y=\mathbf h(\mathbf x),\quad \mathbf x(0)=\mathbf x_0 \in \Omega\\ \end{equation*} with the scalar input u, the state $\mathbf x$, and the output $\mathbf y$, where the vector fields $\mathbf f : \Omega \to \R^n$, $\mathbf g: \Omega \to \R^n$ and the map $\mathbf h: \Omega\to \R^m$ (for $m=1$ this map is the scalar field $h$) are defined on an open subset $\Omega\subseteq\R^n$. \sloppy \subsubsection*{Lie Derivatives of Scalar Fields} Consider the initial value problem \[ \dot{\mathbf x}={\mathbf f}(\mathbf x),\quad y=h(\mathbf x),\quad \mathbf{x}(0)=\mathbf{x}_0\in\Omega \] with the vector field $\mathbf f : \Omega \to \R^n$. The Lie derivative of the scalar field $h:\Omega\to\R$ along the vector field~$\mathbf{f}$ are time derivatives of the curve~$y$, i.e., \[ \dot{y}(0)=L_\mathbf{f}h(\mathbf{x}_0),\; \ddot{y}(0)=L_\mathbf{f}^2h(\mathbf{x}_0),\; \ldots,\; y^{(d)}(0)=L_\mathbf{f}^dh(\mathbf{x}_0). \] Formally, the Lie derivative of the scalar field~$h$ along the vector field~$\mathbf{f}$ is defined by \[ L_{\mathbf f} h(\mathbf x)=\frac{\partial h(\mathbf x)}{\partial \mathbf x}\,\mathbf f(\mathbf x). \] Higher order Lie derivatives are given by the recursion \[ L_{\mathbf f}^{k+1} h(\mathbf x)= \frac{\partial L_{\mathbf f}^k h(\mathbf x)}{\partial \mathbf x}\,\mathbf f(\mathbf x)\quad\text{with}\quad L_{\mathbf f}^0 h(\mathbf x)= h(\mathbf x). \] To compute Lie derivatives \[ (L_\mathbf f^0h(\mathbf x_0),\ldots,L_\mathbf f^dh(\mathbf x_0)) \] we need the trace numbers of the active sections of the vector field~$\mathbf f$ and the scalar field~$h$, the number of independent variables $n$, the initial value $\mathbf x_0\in\Omega$ and the highest derivative degree $d$. The values of the Lie derivatives are then stored in the one dimensional array {\verb=result=} of length $d+1$: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int lie\_scalarc(Tape\_F, Tape\_H, n, x0, d, result)}\\ \>{\sf short Tape\_F;} \> // trace identification of vector field $\mathbf f$ \\ \>{\sf short Tape\_H;} \> // trace identification of scalar field $h$\\ \>{\sf short n;} \> // number of independent variables $n$ and $m = 1$\\ \>{\sf double x0[n];} \> // values of independent variables $\mathbf{x}_0$\\ \>{\sf short d; } \> // highest derivative degree $d$\\ \>{\sf double result[d+1];} \> // resulting Lie derivatives of a scalar field\\ \end{tabbing} For a smooth vector-valued map $\mathbf h: \Omega\rightarrow \R^m$ with $\mathbf h(\mathbf x)=(h_1(\mathbf x),\ldots,h_m(\mathbf x))^T$ we define the Lie derivative \begin{equation}\label{eq:lie_vectorial} L_\mathbf f^k\mathbf h(\mathbf x_0)= (L_\mathbf f^kh_1(\mathbf x_0),\ldots,L_\mathbf f^kh_m(\mathbf x_0))^T\in\R^m \quad \text{for}\quad k = 0, \cdots, d, \end{equation} component-wise by the Lie derivatives $L_\mathbf f^k h_1(\mathbf x_0),\ldots,L_\mathbf f^k h_m(\mathbf x_0)$ of the $m$ scalar fields $h_1, \ldots, h_m:\Omega\to\R$. Note that~\eqref{eq:lie_vectorial} should not be confused with the Lie derivative of a vector field. To compute Lie derivatives~\eqref{eq:lie_vectorial} of the vector-valued map $\mathbf h$ we additionally need the number of dependent variables $m$: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int lie\_scalarcv(Tape\_F, Tape\_H, n, m, x0, d, result)}\\ \>{\sf short Tape\_F;} \> // trace identification of vector field $\mathbf f$ \\ \>{\sf short Tape\_H;} \> // trace identification of vector-valued map $\mathbf h$\\ \>{\sf short n;} \> // number of independent variables $n$\\ \>{\sf short m;} \> // number of dependent variables $m$\\ \>{\sf double x0[n];} \> // values of independent variables $\mathbf{x}_0$\\ \>{\sf short d; } \> // highest derivative degree $d$\\ \>{\sf double result[m][d+1];} \> // resulting Lie derivatives of vectorial scalar fields\\ \end{tabbing} \subsubsection*{Gradients of Lie Derivatives of Scalar Fields} To compute the gradients \[ (\mathrm{d}L_\mathbf f^0h(\mathbf x_0),\ldots, \mathrm{d}L_\mathbf f^dh(\mathbf x_0)) \] of the Lie derivatives $L_\mathbf f^0h(\mathbf x_0),\ldots, L_\mathbf f^dh(\mathbf x_0)$ of the scalar field $h:\Omega\to\R$ along the vector field $\mathbf f:\Omega\to\R^n$, the following C function can be used: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int lie\_gradientc(Tape\_F, Tape\_H, n, x0, d, result)}\\ \>{\sf short Tape\_F;} \> // trace identification of vector field $\mathbf f$ \\ \>{\sf short Tape\_H;} \> // trace identification of scalar field $h$\\ \>{\sf short n;} \> // number of independent variables $n$ and $m=1$\\ \>{\sf double x0[n];} \> // values of independent variables $\mathbf{x}_0$\\ \>{\sf short d;} \> // highest derivative degree $d$\\ \>{\sf double result[n][d+1];} \> // resulting gradients of Lie derivatives\\ \>{\sf} \> // of a scalar field\\ \end{tabbing} For calculating the jacobians $\mathrm{d}L_\mathbf f^k\mathbf h(\mathbf x_0)\in\R^{m\times n}$ of Lie derivatives~\eqref{eq:lie_vectorial} of the vector-valued map $\mathbf h: \Omega\rightarrow \R^m$ for $k=0,\ldots,d$ one can use the following function, where the $d+1$ matrices are stored in the three dimensional array {\verb=result=}: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int lie\_gradientcv(Tape\_F, Tape\_H, n, m, x0, d, result)}\\ \>{\sf short Tape\_F;} \> // trace identification of vector field $\mathbf f$ \\ \>{\sf short Tape\_H;} \> // trace identification of vector-valued map $\mathbf h$\\ \>{\sf short n;} \> // number of independent variables $n$\\ \>{\sf short m;} \> // number of dependent variables $m$\\ \>{\sf double x0[n];} \> // values of independent variables $\mathbf{x}_0$\\ \>{\sf short d;} \> // highest derivative degree $d$\\ \>{\sf double result[m][n][d+1];} \> // resulting jacobians of Lie derivatives\\ \>{\sf} \> // of vectorial scalar fields\\ \end{tabbing} \subsubsection*{Lie Derivatives of Covector Fields} If we consider the elements of the real vector space $\R^n$ as column vectors, the elements of the associated dual space $(\R^n)^*$ can be represented by row vectors. These row vectors are called adjoint vectors in ADOL-C and covectors in differential geometry. In a program the user does not have to distinguish between a vector field $\mathbf f: \Omega \rightarrow \R^n$ and a covector field $\boldsymbol{\omega}: \Omega \rightarrow (\R^n)^*$, since for both fields the dependent variables are stored in one dimensional arrays. The Lie derivative of a covector field~$\boldsymbol{\omega}$ is defined by \[ L_{\mathbf f}\boldsymbol{\omega}(\mathbf x)=\boldsymbol{\omega}(\mathbf x)\,{\mathbf f}^\prime(\mathbf x) + {\mathbf f}^T(\mathbf x) \left(\frac{\partial \boldsymbol{\omega}^T (\mathbf x)}{\partial \mathbf x}\right)^T. \] The $d+1$ Lie derivatives $L_{\mathbf f}^0\boldsymbol{\omega}(\mathbf x),\ldots,L_{\mathbf f}^d\boldsymbol{\omega}(\mathbf x)$ of the covector field $\boldsymbol{\omega}$ along the vector field~$\mathbf{f}$ can be computed by \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int lie\_covector(Tape\_F, Tape\_W, n, x0, d, result)}\\ \>{\sf short Tape\_F;} \> // trace identification of vector field $\mathbf f$ \\ \>{\sf short Tape\_W;} \> // trace identification of covector field $\boldsymbol{\omega}$\\ \>{\sf short n;} \> // number of independent variables $n$\\ \>{\sf double x0[n];} \> // values of independent variables $\mathbf{x}_0$\\ \>{\sf short d;} \> // highest derivative degree $d$\\ \>{\sf double result[n][d+1];} \> // resulting Lie derivatives of a covector field\\ \end{tabbing} \subsubsection*{Lie Derivatives of a Vector Field (Lie Brackets)} Lie derivatives (Lie brackets) of a vector field $\mathbf g: \Omega \rightarrow \R^n$ along a vector field $\mathbf f: \Omega \rightarrow \R^n$ are defined by \[ \mathrm{ad}_\mathbf{f}\mathbf{g}(\mathbf{x})=[\mathbf{f},\mathbf{g}](\mathbf{x}) =\mathbf{g}^{\prime}(\mathbf{x})\mathbf{f}(\mathbf{x})-\mathbf{f}^{\prime}(\mathbf{x})\mathbf{g}(\mathbf{x}). \] We can calculate iterated Lie brackets $\mathrm{ad}_\mathbf{f}^0\mathbf{g}(\mathbf{x}),\ldots,\mathrm{ad}_\mathbf{f}^{d}\mathbf{g}(\mathbf{x})$ at the point $\mathbf{x}_0\in\Omega$ using the C function listed below: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int lie\_bracket(Tape\_F, Tape\_G, n, x0, d, result)}\\ \>{\sf short Tape\_F;} \> // trace identification of vector field $\mathbf f$ \\ \>{\sf short Tape\_G;} \> // trace identification of vector field $\mathbf g$\\ \>{\sf short n;} \> // number of independent variables $n$\\ \>{\sf double x0[n];} \> // values of independent variables $\mathbf{x}_0$\\ \>{\sf short d;} \> // highest derivative degree $d$\\ \>{\sf double result[n][d+1];} \> // resulting Lie derivatives of a vector field\\ \end{tabbing} \subsubsection*{Additional C++ Drivers for Lie Derivatives} For Lie derivatives of scalar fields, the C interface offers two different drivers, namely {\verb=lie_scalarc=} for $m=1$ scalar field $h:\Omega\to\R$ and {\verb=lie_scalarcv=} for $m\geq1$ scalar fields $h_1,\ldots,h_m:\Omega\to\R$, which are combined in a vector-valued map $\mathbf{h}:\Omega\to\R^m$. Using the polymorphism in C++, both C drivers are unified by the C++ driver {\verb=lie_scalar=} for the computation of Lie derivatives of scalar fields: \begin{tabbing} \hspace{0.5in}\={\sf int lie\_scalar(Tape\_F, Tape\_H, n, x0, d, result)} \hspace{0.45in}\= // case $m=1$\\ \>{\sf int lie\_scalar(Tape\_F, Tape\_H, n, m, x0, d, result)} \> // case $m\geq1$ \end{tabbing} The same situation occurs with the gradients or jacobians of Lie derivatives of scalar fields. Here, the C drivers {\verb=lie_gradientc=} and {\verb=lie_gradientcv=} are unified by the C++ driver {\verb=lie_gradient=}: \begin{tabbing} \hspace{0.5in}\={\sf int lie\_gradient(Tape\_F, Tape\_H, n, x0, d, result)} \hspace{0.35in}\= // case $m=1$\\ \>{\sf int lie\_gradient(Tape\_F, Tape\_H, n, m, x0, d, result)} \> // case $m\geq1$ \end{tabbing} The C++ drivers are also prototyped in the header file {\sf $<$adolc\_lie.h$>$}. An example how to use these drivers for the calculation of Lie derivatives can be found in the file {\sf GantryCrane.cpp} in the directory {\verb=additional_examples/lie=}. % % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Basic Drivers for the Forward and Reverse Mode} \label{forw_rev_ad} % In this section, we present tailored drivers for different variants of the forward mode and the reverse mode, respectively. For a better understanding, we start with a short description of the mathematical background. Provided no arithmetic exception occurs, no comparison including {\sf fmax} or {\sf fmin} yields a tie, {\sf fabs} does not yield zero, and all special functions were evaluated in the interior of their domains, the functional relation between the input variables $x$ and the output variables $y$ denoted by $y=F(x)$ is in fact analytic. In other words, we can compute arbitrarily high derivatives of the vector function $F : I\!\!R^n \mapsto I\!\!R^m$ defined by the active section. We find it most convenient to describe and compute derivatives in terms of univariate Taylor expansions, which are truncated after the highest derivative degree $d$ that is desired by the user. Let \begin{equation} \label{eq:x_of_t} x(t) \; \equiv \; \sum_{j=0}^dx_jt^j \; : \; I\!\!R \; \mapsto \; I\!\!R^n \end{equation} denote any vector polynomial in the scalar variable $t \in I\!\!R$. In other words, $x(t)$ describes a path in $I\!\!R^n$ parameterized by $t$. The Taylor coefficient vectors \[ x_j \; = \; \frac{1}{j!} \left . \frac{\partial ^j}{\partial t^j} x(t) \right |_{t=0} \] are simply the scaled derivatives of $x(t)$ at the parameter origin $t=0$. The first two vectors $x_1,x_2 \in I\!\!R^n$ can be visualized as tangent and curvature at the base point $x_0$, respectively. Provided that $F$ is $d$ times continuously differentiable, it follows from the chain rule that the image path \begin{equation} \label{eq:rela} y(t) \; \equiv \; F(x(t)) \; : \; I\!\!R \;\mapsto \;I\!\!R^m \end{equation} is also smooth and has $(d+1)$ Taylor coefficient vectors $y_j \in I\!\!R^m$ at $t=0$, so that \begin{equation} \label{eq:series} y(t) \; = \; \sum_{j=0}^d y_jt^j + O(t^{d+1}). \end{equation} Also as a consequence of the chain rule, one can observe that each $y_j$ is uniquely and smoothly determined by the coefficient vectors $x_i$ with $i \leq j$. In particular we have \begin{align} \label{eq:y_0y_1} y_0 & = F(x_0) \nonumber \\ y_1 & = F'(x_0) x_1 \nonumber\\ y_2 & = F'(x_0) x_2 + \frac{1}{2}F''(x_0)x_1 x_1 \\ y_3 & = F'(x_0) x_3 + F''(x_0)x_1 x_2 + \frac{1}{6}F'''(x_0)x_1 x_1 x_1\nonumber\\ & \ldots\nonumber \end{align} In writing down the last equations we have already departed from the usual matrix-vector notation. It is well known that the number of terms that occur in these ``symbolic'' expressions for the $y_j$ in terms of the first $j$ derivative tensors of $F$ and the ``input'' coefficients $x_i$ with $i\leq j$ grows very rapidly with $j$. Fortunately, this exponential growth does not occur in automatic differentiation, where the many terms are somehow implicitly combined so that storage and operations count grow only quadratically in the bound $d$ on $j$. Provided $F$ is analytic, this property is inherited by the functions \[ y_j = y_j (x_0,x_1, \ldots ,x_j) \in {I\!\!R}^m , \] and their derivatives satisfy the identities \begin{equation} \label{eq:identity} \frac{\partial y_j}{\partial x_i} = \frac{\partial y_{j-i}} {\partial x_0} = A_{j-i}(x_0,x_1, \ldots ,x_{j-i}) \end{equation} as established in \cite{Chri91a}. This yields in particular \begin{align*} \frac{\partial y_0}{\partial x_0} = \frac{\partial y_1}{\partial x_1} = \frac{\partial y_2}{\partial x_2} = \frac{\partial y_3}{\partial x_3} = A_0 & = F'(x_0) \\ \frac{\partial y_1}{\partial x_0} = \frac{\partial y_2}{\partial x_1} = \frac{\partial y_3}{\partial x_2} = A_1 & = F''(x_0) x_1 \\ \frac{\partial y_2}{\partial x_0} = \frac{\partial y_3}{\partial x_1} = A_2 & = F''(x_0) x_2 + \frac{1}{2}F'''(x_0)x_1 x_1 \\ \frac{\partial y_3}{\partial x_0} = A_3 & = F''(x_0) x_3 + F'''(x_0)x_1 x_2 + \frac{1}{6}F^{(4)}(x_0)x_1 x_1 x_1 \\ & \ldots \end{align*} The $m \times n$ matrices $A_k, k=0,\ldots,d$, are actually the Taylor coefficients of the Jacobian path $F^\prime(x(t))$, a fact that is of interest primarily in the context of ordinary differential equations and differential algebraic equations. Given the tape of an active section and the coefficients $x_j$, the resulting $y_j$ and their derivatives $A_j$ can be evaluated by appropriate calls to the ADOL-C forward mode implementations and the ADOL-C reverse mode implementations. The scalar versions of the forward mode propagate just one truncated Taylor series from the $(x_j)_{j\leq d}$ to the $(y_j)_{j\leq d}$. The vector versions of the forward mode propagate families of $p\geq 1$ such truncated Taylor series in order to reduce the relative cost of the overhead incurred in the tape interpretation. In detail, ADOL-C provides \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int zos\_forward(tag,m,n,keep,x,y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int keep;} \> // flag for reverse mode preparation\\ \>{\sf double x[n];} \> // independent vector $x=x_0$\\ \>{\sf double y[m];} \> // dependent vector $y=F(x_0)$ \end{tabbing} for the {\bf z}ero-{\bf o}rder {\bf s}calar forward mode. This driver computes $y=F(x)$ with $0\leq\text{\sf keep}\leq 1$. The integer flag {\sf keep} plays a similar role as in the call to {\sf trace\_on}: It determines if {\sf zos\_forward} writes the first Taylor coefficients of all intermediate quantities into a buffered temporary file, i.e., the value stack, in preparation for a subsequent reverse mode evaluation. The value {\sf keep} $=1$ prepares for {\sf fos\_reverse} or {\sf fov\_reverse} as exlained below. To compute first-order derivatives, one has \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fos\_forward(tag,m,n,keep,x0,x1,y0,y1)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int keep;} \> // flag for reverse mode preparation\\ \>{\sf double x0[n];} \> // independent vector $x_0$\\ \>{\sf double x1[n];} \> // tangent vector $x_1$\\ \>{\sf double y0[m];} \> // dependent vector $y_0=F(x_0)$\\ \>{\sf double y1[m];} \> // first derivative $y_1=F'(x_0)x_1$ \end{tabbing} for the {\bf f}irst-{\bf o}rder {\bf s}calar forward mode. Here, one has $0\leq\text{\sf keep}\leq 2$, where \begin{align*} \text{\sf keep} = \left\{\begin{array}{cl} 1 & \text{prepares for {\sf fos\_reverse} or {\sf fov\_reverse}} \\ 2 & \text{prepares for {\sf hos\_reverse} or {\sf hov\_reverse}} \end{array}\right. \end{align*} as exlained below. For the {\bf f}irst-{\bf o}rder {\bf v}ector forward mode, ADOL-C provides \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fov\_forward(tag,m,n,p,x0,X,y0,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int p;} \> // number of directions\\ \>{\sf double x0[n];} \> // independent vector $x_0$\\ \>{\sf double X[n][p];} \> // tangent matrix $X$\\ \>{\sf double y0[m];} \> // dependent vector $y_0=F(x_0)$\\ \>{\sf double Y[m][p];} \> // first derivative matrix $Y=F'(x)X$ \end{tabbing} For the computation of higher derivative, the driver \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hos\_forward(tag,m,n,d,keep,x0,X,y0,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int keep;} \> // flag for reverse mode preparation\\ \>{\sf double x0[n];} \> // independent vector $x_0$\\ \>{\sf double X[n][d];} \> // tangent matrix $X$\\ \>{\sf double y0[m];} \> // dependent vector $y_0=F(x_0)$\\ \>{\sf double Y[m][d];} \> // derivative matrix $Y$ \end{tabbing} implementing the {\bf h}igher-{\bf o}rder {\bf s}calar forward mode. The rows of the matrix $X$ must correspond to the independent variables in the order of their initialization by the \boldmath $\ll=$ \unboldmath operator. The columns of $X = \{x_j\}_{j=1\ldots d}$ represent Taylor coefficient vectors as in \eqref{eq:x_of_t}. The rows of the matrix $Y$ must correspond to the dependent variables in the order of their selection by the \boldmath $\gg=$ \unboldmath operator. The columns of $Y = \{y_j\}_{j=1\ldots d}$ represent Taylor coefficient vectors as in \eqref{eq:series}, i.e., {\sf hos\_forward} computes the values $y_0=F(x_0)$, $y_1=F'(x_0)x_1$, \ldots, where $X=[x_1,x_2,\ldots,x_d]$ and $Y=[y_1,y_2,\ldots,y_d]$. Furthermore, one has $0\leq\text{\sf keep}\leq d+1$, with \begin{align*} \text{\sf keep} \left\{\begin{array}{cl} = 1 & \text{prepares for {\sf fos\_reverse} or {\sf fov\_reverse}} \\ > 1 & \text{prepares for {\sf hos\_reverse} or {\sf hov\_reverse}} \end{array}\right. \end{align*} Once more, there is also a vector version given by \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hov\_forward(tag,m,n,d,p,x0,X,y0,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int p;} \> // number of directions $p$\\ \>{\sf double x0[n];} \> // independent vector $x_0$\\ \>{\sf double X[n][p][d];} \> // tangent matrix $X$\\ \>{\sf double y0[m];} \> // dependent vector $y_0=F(x_0)$\\ \>{\sf double Y[m][p][d];} \> // derivative matrix $Y$ \end{tabbing} for the {\bf h}igher-{\bf o}rder {\bf v}ector forward mode that computes $y_0=F(x_0)$, $Y_1=F'(x_0)X_1$, \ldots, where $X=[X_1,X_2,\ldots,X_d]$ and $Y=[Y_1,Y_2,\ldots,Y_d]$. There are also overloaded versions providing a general {\sf forward}-call. Details of the appropriate calling sequences are given in \autoref{forw_rev}. Once, the required information is generated due to a forward mode evaluation with an approriate value of the parameter {\sf keep}, one may use the following implementation variants of the reverse mode. To compute first-order derivatives one can use \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fos\_reverse(tag,m,n,u,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double u[m];} \> // weight vector $u$\\ \>{\sf double z[n];} \> // resulting adjoint value $z^T=u^T F'(x)$ \end{tabbing} as {\bf f}irst-{\bf o}rder {\bf s}calar reverse mode implementation that computes the product $z^T=u^T F'(x)$ after calling {\sf zos\_forward}, {\sf fos\_forward}, or {\sf hos\_forward} with {\sf keep}=1. The corresponding {\bf f}irst-{\bf o}rder {\bf v}ector reverse mode driver is given by \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fov\_reverse(tag,m,n,q,U,Z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int q;} \> // number of weight vectors $q$\\ \>{\sf double U[q][m];} \> // weight matrix $U$\\ \>{\sf double Z[q][n];} \> // resulting adjoint $Z=U F'(x)$ \end{tabbing} that can be used after calling {\sf zos\_forward}, {\sf fos\_forward}, or {\sf hos\_forward} with {\sf keep}=1. To compute higher-order derivatives, ADOL-C provides \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hos\_reverse(tag,m,n,d,u,Z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double u[m];} \> // weight vector $u$\\ \>{\sf double Z[n][d+1];} \> // resulting adjoints \end{tabbing} as {\bf h}igher-{\bf o}rder {\bf s}calar reverse mode implementation yielding the adjoints $z_0^T=u^T F'(x_0)=u^T A_0$, $z_1^T=u^T F''(x_0)x_1=u^T A_1$, \ldots, where $Z=[z_0,z_1,\ldots,z_d]$ after calling {\sf fos\_forward} or {\sf hos\_forward} with {\sf keep} $=d+1>1$. The vector version is given by \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int hov\_reverse(tag,m,n,d,q,U,Z,nz)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double U[q][m];} \> // weight vector $u$\\ \>{\sf double Z[q][n][d+1];} \> // resulting adjoints\\ \>{\sf short int nz[q][n];} \> // nonzero pattern of {\sf Z} \end{tabbing} as {\bf h}igher-{\bf o}rder {\bf v}ector reverse mode driver to compute the adjoints $Z_0=U F'(x_0)=U A_0$, $Z_1=U F''(x_0)x_1=U A_1$, \ldots, where $Z=[Z_0,Z_1,\ldots,Z_d]$ after calling {\sf fos\_forward} or {\sf hos\_forward} with {\sf keep} $=d+1>1$. After the function call, the last argument of {\sf hov\_reverse} contains information about the sparsity pattern, i.e. each {\sf nz[i][j]} has a value that characterizes the functional relation between the $i$-th component of $UF^\prime(x)$ and the $j$-th independent value $x_j$ as: \begin{center} \begin{tabular}{ll} 0 & trivial \\ 1 & linear \end{tabular} \hspace*{4ex} \begin{tabular}{ll} 2 & polynomial\\ 3 & rational \end{tabular} \hspace*{4ex} \begin{tabular}{ll} 4 & transcendental\\ 5 & non-smooth \end{tabular} \end{center} Here, ``trivial'' means that there is no dependence at all and ``linear'' means that the partial derivative is a constant that does not dependent on other variables either. ``Non-smooth'' means that one of the functions on the path between $x_i$ and $y_j$ was evaluated at a point where it is not differentiable. All positive labels $1, 2, 3, 4, 5$ are pessimistic in that the actual functional relation may in fact be simpler, for example due to exact cancellations. There are also overloaded versions providing a general {\sf reverse}-call. Details of the appropriate calling sequences are given in the following \autoref{forw_rev}. \input{absdrivers} % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Overloaded Forward and Reverse Calls} \label{forw_rev} % In this section, the several versions of the {\sf forward} and {\sf reverse} routines, which utilize the overloading capabilities of C++, are described in detail. With exception of the bit pattern versions all interfaces are prototyped in the header file \verb==, where also some more specialized {\sf forward} and {\sf reverse} routines are explained. Furthermore, \mbox{ADOL-C} provides C and Fortran-callable versions prototyped in the same header file. The bit pattern versions of {\sf forward} and {\sf reverse} introduced in the \autoref{ProBit} are prototyped in the header file \verb==, which will be included by the header file \verb== automatically. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{The Scalar Case} % \label{ScaCas} % Given any correct tape, one may call from within the generating program, or subsequently during another run, the following procedure: % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forward(tag,m,n,d,keep,X,Y)} \\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int keep;} \> // flag for reverse sweep \\ \>{\sf double X[n][d+1];} \> // Taylor coefficients $X$ of independent variables \\ \>{\sf double Y[m][d+1];} \> // Taylor coefficients $Y$ as in \eqref{eq:series} \end{tabbing} % The rows of the matrix $X$ must correspond to the independent variables in the order of their initialization by the \boldmath $\ll=$ \unboldmath operator. The columns of $X = \{x_j\}_{j=0\ldots d}$ represent Taylor coefficient vectors as in \eqref{eq:x_of_t}. The rows of the matrix $Y$ must correspond to the dependent variables in the order of their selection by the \boldmath $\gg=$ \unboldmath operator. The columns of $Y = \{y_j\}_{j=0\ldots d}$ represent Taylor coefficient vectors as in \eqref{eq:series}. Thus the first column of $Y$ contains the function value $F(x)$ itself, the next column represents the first Taylor coefficient vector of $F$, and the last column the $d$-th Taylor coefficient vector. The integer flag {\sf keep} determines how many Taylor coefficients of all intermediate quantities are written into the value stack as explained in \autoref{forw_rev_ad}. If {\sf keep} is omitted, it defaults to 0. The given {\sf tag} value is used by {\sf forward} to determine the name of the file on which the tape was written. If the tape file does not exist, {\sf forward} assumes that the relevant tape is still in core and reads from the buffers. After the execution of an active section with \mbox{{\sf keep} = 1} or a call to {\sf forward} with any {\sf keep} $\leq$ $d+1$, one may call the function {\sf reverse} with \mbox{{\sf d} = {\sf keep} $-$ 1} and the same tape identifier {\sf tag}. When $u$ is a vector and $Z$ an $n\times (d+1)$ matrix {\sf reverse} is executed in the scalar mode by the calling sequence % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int reverse(tag,m,n,d,u,Z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf double u[m];} \> // weighting vector $u$\\ \>{\sf double Z[n][d+1];} \> // resulting adjoints $Z$ \end{tabbing} to compute the adjoints $z_0^T=u^T F'(x_0)=u^T A_0$, $z_1^T=u^T F''(x_0)x_1=u^T A_1$, \ldots, where $Z=[z_0,z_1,\ldots,z_d]$. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{The Vector Case} % \label{vecCas} % When $U$ is a matrix {\sf reverse} is executed in the vector mode by the following calling sequence % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int reverse(tag,m,n,d,q,U,Z,nz)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int q;} \> // number of weight vectors $q$\\ \>{\sf double U[q][m];} \> // weight matrix $U$\\ \>{\sf double Z[q][n][d+1];} \> // resulting adjoints \\ \>{\sf short nz[q][n];} \> // nonzero pattern of {\sf Z} \end{tabbing} % to compute the adjoints $Z_0=U F'(x_0)=U A_0$, $Z_1=U F''(x_0)x_1=U A_1$, \ldots, where $Z=[Z_0,Z_1,\ldots,Z_d]$. When the arguments {\sf p} and {\sf U} are omitted, they default to $m$ and the identity matrix of order $m$, respectively. Through the optional argument {\sf nz} of {\sf reverse} one can compute information about the sparsity pattern of $Z$ as described in detail in the previous \autoref{forw_rev_ad}. The return values of {\sf reverse} calls can be interpreted according to \autoref{retvalues}, but negative return values are not valid, since the corresponding forward sweep would have stopped without completing the necessary taylor file. The return value of {\sf reverse} may be higher than that of the preceding {\sf forward} call because some operations that were evaluated at a critical argument during the forward sweep were found not to impact the dependents during the reverse sweep. In both scalar and vector mode, the degree $d$ must agree with {\sf keep}~$-$~1 for the most recent call to {\sf forward}, or it must be equal to zero if {\sf reverse} directly follows the taping of an active section. Otherwise, {\sf reverse} will return control with a suitable error message. In order to avoid possible confusion, the first four arguments must always be present in the calling sequence. However, if $m$ or $d$ attain their trivial values 1 and 0, respectively, then corresponding dimensions of the arrays {\sf X}, {\sf Y}, {\sf u}, {\sf U}, or {\sf Z} can be omitted, thus eliminating one level of indirection. For example, we may call {\sf reverse(tag,1,n,0,1.0,g)} after declaring {\sf double g[n]} to calculate a gradient of a scalar-valued function. Sometimes it may be useful to perform a forward sweep for families of Taylor series with the same leading term. This vector version of {\sf forward} can be called in the form % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forward(tag,m,n,d,p,x0,X,y0,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int d;} \> // highest derivative degree $d$\\ \>{\sf int p;} \> // number of Taylor series $p$\\ \>{\sf double x0[n];} \> // values of independent variables $x_0$\\ \>{\sf double X[n][p][d];} \> // Taylor coefficients $X$ of independent variables\\ \>{\sf double y0[m];} \> // values of dependent variables $y_0$\\ \>{\sf double Y[m][p][d];} \> // Taylor coefficients $Y$ of dependent variables \end{tabbing} % where {\sf X} and {\sf Y} hold the Taylor coefficients of first and higher degree and {\sf x0}, {\sf y0} the common Taylor coefficients of degree 0. There is no option to keep the values of active variables that are going out of scope or that are overwritten. Therefore this function cannot prepare a subsequent reverse sweep. The return integer serves as a flag to indicate quadratures or altered comparisons as described above in \autoref{reuse_tape}. Since the calculation of Jacobians is probably the most important automatic differentia\-tion task, we have provided a specialization of vector {\sf forward} to the case where $d = 1$. This version can be called in the form % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forward(tag,m,n,p,x,X,y,Y)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int p;} \> // number of partial derivatives $p$ \\ \>{\sf double x[n];} \> // values of independent variables $x_0$\\ \>{\sf double X[n][p];} \> // seed derivatives of independent variables $X$\\ \>{\sf double y[m];} \> // values of dependent variables $y_0$\\ \>{\sf double Y[m][p];} \> // first derivatives of dependent variables $Y$ \end{tabbing} % When this routine is called with {\sf p} = {\sf n} and {\sf X} the identity matrix, the resulting {\sf Y} is simply the Jacobian $F^\prime(x_0)$. In general, one obtains the $m\times p$ matrix $Y=F^\prime(x_0)\,X $ for the chosen initialization of $X$. In a workstation environment a value of $p$ somewhere between $10$ and $50$ appears to be fairly optimal. For smaller $p$ the interpretive overhead is not appropriately amortized, and for larger $p$ the $p$-fold increase in storage causes too many page faults. Therefore, large Jacobians that cannot be compressed via column coloring as could be done for example using the driver {\sf sparse\_jac} should be ``strip-mined'' in the sense that the above first-order-vector version of {\sf forward} is called repeatedly with the successive \mbox{$n \times p$} matrices $X$ forming a partition of the identity matrix of order $n$. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Dependence Analysis} % \label{ProBit} % The sparsity pattern of Jacobians is often needed to set up data structures for their storage and factorization or to allow their economical evaluation by compression \cite{BeKh96}. Compared to the evaluation of the full Jacobian $F'(x_0)$ in real arithmetic computing the Boolean matrix $\tilde{P}\in\left\{0,1\right\}^{m\times n}$ representing its sparsity pattern in the obvious way requires a little less run-time and certainly a lot less memory. The entry $\tilde{P}_{ji}$ in the $j$-th row and $i$-th column of $\tilde{P}$ should be $1 = true$ exactly when there is a data dependence between the $i$-th independent variable $x_{i}$ and the $j$-th dependent variable $y_{j}$. Just like for real arguments one would wish to compute matrix-vector and vector-matrix products of the form $\tilde{P}\tilde{v}$ or $\tilde{u}^{T}\tilde{P}$ by appropriate {\sf forward} and {\sf reverse} routines where $\tilde{v}\in\{0,1\}^{n}$ and $\tilde{u}\in\{0,1\}^{m}$. Here, multiplication corresponds to logical {\sf AND} and addition to logical {\sf OR}, so that algebra is performed in a semi-ring. For practical reasons it is assumed that $s=8*${\sf sizeof}$(${\sf unsigned long int}$)$ such Boolean vectors $\tilde{v}$ and $\tilde{u}$ are combined to integer vectors $v\in\N^{n}$ and $u\in\N^{m}$ whose components can be interpreted as bit patterns. Moreover $p$ or $q$ such integer vectors may be combined column-wise or row-wise to integer matrices $X\in\N^{n \times p}$ and $U\in\N^{q \times m}$, which naturally correspond to Boolean matrices $\tilde{X}\in\{0,1\}^{n\times\left(sp\right)}$ and $\tilde{U}\in\{0,1\}^{\left(sq\right)\times m}$. The provided bit pattern versions of {\sf forward} and {\sf reverse} allow to compute integer matrices $Y\in\N^{m \times p}$ and $Z\in\N^{q \times m}$ corresponding to \begin{equation} \label{eq:int_forrev} \tilde{Y} = \tilde{P}\tilde{X} \qquad \mbox{and} \qquad \tilde{Z} = \tilde{U}\tilde{P} \, , \end{equation} respectively, with $\tilde{Y}\in\{0,1\}^{m\times\left(sp\right)}$ and $\tilde{U}\in\{0,1\}^{\left(sq\right)\times n}$. In general, the application of the bit pattern versions of {\sf forward} or {\sf reverse} can be interpreted as propagating dependences between variables forward or backward, therefore both the propagated integer matrices and the corresponding Boolean matrices are called {\em dependence structures}. The bit pattern {\sf forward} routine % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int forward(tag,m,n,p,x,X,y,Y,mode)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int p;} \> // number of integers propagated $p$\\ \>{\sf double x[n];} \> // values of independent variables $x_0$\\ \>{\sf unsigned long int X[n][p];} \> // dependence structure $X$ \\ \>{\sf double y[m];} \> // values of dependent variables $y_0$\\ \>{\sf unsigned long int Y[m][p];} \> // dependence structure $Y$ according to \eqref{eq:int_forrev}\\ \>{\sf char mode;} \> // 0 : safe mode (default), 1 : tight mode \end{tabbing} % can be used to obtain the dependence structure $Y$ for a given dependence structure $X$. The dependence structures are represented as arrays of {\sf unsigned long int} the entries of which are interpreted as bit patterns as described above. For example, for $n=3$ the identity matrix $I_3$ should be passed with $p=1$ as the $3 \times 1$ array \begin{eqnarray*} {\sf X} \; = \; \left( \begin{array}{r} {\sf 1}0000000 \: 00000000 \: 00000000 \: 00000000_2 \\ 0{\sf 1}000000 \: 00000000 \: 00000000 \: 00000000_2 \\ 00{\sf 1}00000 \: 00000000 \: 00000000 \: 00000000_2 \end{array} \right) \end{eqnarray*} in the 4-byte long integer format. The parameter {\sf mode} determines the mode of dependence analysis as explained already in \autoref{sparse}. A call to the corresponding bit pattern {\sf reverse} routine % \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int reverse(tag,m,n,q,U,Z,mode)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int q;} \> // number of integers propagated q\\ \>{\sf unsigned long int U[q][m];} \> // dependence structure $U$ \\ \>{\sf unsigned long int Z[q][n];} \> // dependence structure $Z$ according to \eqref{eq:int_forrev}\\ \>{\sf char mode;} \> // 0 : safe mode (default), 1 : tight mode \end{tabbing} % yields the dependence structure $Z$ for a given dependence structure $U$. To determine the whole sparsity pattern $\tilde{P}$ of the Jacobian $F'(x)$ as an integer matrix $P$ one may call {\sf forward} or {\sf reverse} with $p \ge n/s$ or $q \ge m/s$, respectively. For this purpose the corresponding dependence structure $X$ or $U$ must be defined to represent the identity matrix of the respective dimension. Due to the fact that always a multiple of $s$ Boolean vectors are propagated there may be superfluous vectors, which can be set to zero. The return values of the bit pattern {\sf forward} and {\sf reverse} routines correspond to those described in \autoref{retvalues}. One can control the storage growth by the factor $p$ using ``strip-mining'' for the calls of {\sf forward} or {\sf reverse} with successive groups of columns or respectively rows at a time, i.e.~partitioning $X$ or $U$ appropriately as described for the computation of Jacobians in \autoref{vecCas}. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % \section{Advanced algorithmic differentiation in ADOL-C} \label{adv_ad} % \subsection{Differentiating parameter dependent functions} % Normally the functions to be differentiated using AD are defined as mappings from $\R^n$ to $\R^m$. The derivatives of the $m$ dependents are then computed w.r.t. all the $n$ independents. However sometimes the application requires only derivatives w.r.t. some of the independents and the others only occur in the evaluation procedure as parameters. One important such use case is Lagrange Multipliers in a nonlinear optimization problem. Declaring such variables as \verb=adouble= and marking them as independent results in the evaluation of superfluous derivative information and increases runtime. However, if the parameters are not defined as \verb=adouble= type variables they get hard coded as constants onto the ADOL-C trace. One may want to change these parameters for some evaluations, however the overhead of retracing the function may be very high. In such cases these constants may be specially marked as parameters during tracing using the function \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf mkparam(d)}\\ \>{\sf double d;} \> // constant value to be marked as parameter \\ \end{tabbing} This stores the constant in a different place on the trace than the other unmarked constants and enables the user to replace a whole vector of parameters with a new one before computing derivatives later on. All such marked parameter constants can be used in any evaluation expression where the original unmarked constants were used. Sometimes the same parameter may be needed in various different expressions. During trace creation the marked parameters are given a running index as they are marked. This index may me saved by the user and used to access the same stored value in different expressions. To save the index while marking a parameter use \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf locint mkparam\_idx(d)}\\ \>{\sf double d;} \> // constant value to be marked \end{tabbing} The resulting \verb=locint= can be saved in a variable by the user and later used to access the saved parameter from in the trace in any expression To access a saved parameter inside any evaluation expression use \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf getparam(idx)}\\ \>{\sf locint idx;} \> // index of the parameter as returned by mkparam\_idx()\\ \end{tabbing} The above three functions work only during the creation of the trace, i.e., between the invokation of \verb=trace_on()= and \verb=trace_off()=. For all following derivative computations using the drivers described in the preceding sections, the saved parameter values will be used, unless the user asks to replace them with a different vector of values. To replace the whole parameter vector one uses the routine \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf set\_param\_vec(tag, number, parameters)}\\ \>{\sf short int tag;} \> // tape identification\\ \>{\sf size\_t number;} \> // total number of constants marked as parameters\\ \>{\sf double* parameters;} \> // array of constants to be used as replacement\\ \end{tabbing} All following derivative computations using the drivers described in the preceding sections will now use the new parameters. After replacing the parameters, however, one cannot directly call a basic reverse mode driver. A basic forward mode driver must be called. However, the easy to use drivers from Section \ref{drivers} do this automatically. % \subsection{Differentiating external functions} % Ideally, AD is applied to a given computation as a whole. This is not always possible because parts of the computation may be coded in a different programming language or may a call to an external library. In the former case one may want to differentiate the parts in question with a different AD tool or provide hand written derivatives. To integrate these In practice, however, sophisticated projects usually evolve over a long period of time. Within this process, a heterogeneous code base for the project develops, which may include the incorporation of external solutions, changes in programming paradigms or even of programming languages. Equally heterogeneous, the computation of derivative values appears. Hence, different \mbox{AD-tools} may be combined with hand-derived codes based on the same or different programming languages. ADOL-C supports such settings by the concept of externally differentiated functions, that is, a function not differentiated by ADOL-C itself. The required derivatives have to be provided by the user. For this purpose, it is required that the externally differentiated function (for example named {\sf\em euler\_step} ) has the following signature. \smallskip \noindent \hspace*{2cm}{\sf int euler\_step(int n, double *x, int m, double *y);} \medskip \noindent Note that the formal paraemters in the signature have {\sf double} type, that is, they are not active as in the original program before the ADOL-C type change. The externally differentiated function has to be {\em registered}\footnote{we record the function pointer} using an \mbox{ADOL-C} method as follows. \smallskip \noindent \hspace*{2cm}{\sf ext\_diff\_fct *edf = reg\_ext\_fct(euler\_step);}. \smallskip \noindent This returns a pointer to an {\sf ext\_diff\_fct} instance specific to the registered function. Then, the user has to supply the function pointers for the call back methods (for example here {\sf zos\_for\_euler\_step} and {\sf fos\_rev\_euler\_step}) the user implemented to compute the derivatives as follows. \begin{tabbing} \hspace*{2cm}\= {\sf edf-$>$zos\_forward = {\em zos\_for\_euler\_step};}\\ \> {\sf // function pointer for computing Zero-Order-Scalar (=zos)}\\ \> {\sf // forward information}\\ % \> {\sf edf-$>$dp\_x = xp;}\\ % \> {\sf edf-$>$dp\_y = yp;}\\ % \> {\sf // double arrays for arguments and results}\\ \> {\sf edf-$>$fos\_reverse = fos\_rev\_euler\_step;} \\ \> {\sf // function pointer for computing First-Order-Scalar (=fos)}\\ \> {\sf reverse information} \end{tabbing} To facilitate the switch between active and passive versions of the parameters {\sf x} and {\sf y} one has to provide (allocate) both variants. I.e. if the call to {\sf euler\_step} was originally \noindent \hspace*{2cm}{\sf rc=euler\_step(n, sOld, m, sNew);} \medskip then the ADOL-C typechange for the calling context will turn {\sf sOld} and {\sf sNew} in {\sf adouble} pointers. To trigger the appropriate action for the derivative computation (i.e. creating an external differentiation entry on the trace) the original call to the externally differentiated function must be substituted by \medskip \noindent \hspace*{2cm}{\sf rc=call\_ext\_fct(edf, n, sOldPassive, sOld, m, sNewPassive, sNew);} \medskip \noindent Here, {\sf sOldPassive} and {\sf sNewPassive} are the passive counterparts ({\sf double} pointers allocated to length {\sf n} and {\sf m}, respectively) to the active arguments {\sf sNew} in {\sf adouble}. The usage of the external function facility is illustrated by the example \verb=ext_diff_func= contained in \verb=examples/additional_examples/ext_diff_func=. There,the external differentiated function is also a C code, but the handling as external differentiated functions also a decrease of the overall required tape size. % \subsection{Advanced algorithmic differentiation of time integration processes} % For many time-dependent applications, the corresponding simulations are based on ordinary or partial differential equations. Furthermore, frequently there are quantities that influence the result of the simulation and can be seen as control of the systems. To compute an approximation of the simulated process for a time interval $[0,T]$ and evaluated the desired target function, one applies an appropriate integration scheme given by \begin{tabbing} \hspace{5mm} \= some initializations yielding $x_0$\\ \> for $i=0,\ldots, N-1$\\ \hspace{10mm}\= $x_{i+1} = F(x_i,u_i,t_i)$\\ \hspace{5mm} \= evaluation of the target function \end{tabbing} where $x_i\in {\bf R}^n$ denotes the state and $u_i\in {\bf R}^m$ the control at time $t_i$ for a given time grid $t_0,\ldots,t_N$ with $t_0=0$ and $t_N=T$. The operator $F : {\bf R}^n \times {\bf R}^m \times {\bf R} \mapsto {\bf R}^n$ defines the time step to compute the state at time $t_i$. Note that we do not assume a uniform grid. When computing derivatives of the target function with respect to the control, the consequences for the tape generation using the ``basic'' taping approach as implemented in ADOL-C so far are shown in the left part of \autoref{fig:bas_tap}. \begin{figure}[htbp] \begin{center} \hspace*{0.5cm}\includegraphics[width=5.8cm]{tapebasic}\hfill \includegraphics[width=5.8cm]{tapeadv} \hspace*{0.5cm}\ \end{center} \hspace*{0.8cm} Basic taping process \hspace*{4.3cm} Advanced taping process \caption{Different taping approaches} \label{fig:bas_tap} \end{figure} As can be seen, the iterative process is completely unrolled due to the taping process. That is, the tape contains an internal representation of each time step. Hence, the overall tape comprises a serious amount of redundant information as illustrated by the light grey rectangles in \autoref{fig:bas_tap}. To overcome the repeated storage of essentially the same information, a {\em nested taping} mechanism has been incorporated into ADOL-C as illustrated on the right-hand side of \autoref{fig:bas_tap}. This new capability allows the encapsulation of the time-stepping procedure such that only the last time step $x_{N} = F(x_{N-1},u_{N-1})$ is taped as one representative of the time steps in addition to a function pointer to the evaluation procedure $F$ of the time steps. The function pointer has to be stored for a possibly necessary retaping during the derivative calculation as explained below. Instead of storing the complete tape, only a very limited number of intermediate states are kept in memory. They serve as checkpoints, such that the required information for the backward integration is generated piecewise during the adjoint calculation. For this modified adjoint computation the optimal checkpointing schedules provided by {\bf revolve} are employed. An adapted version of the software package {\sf revolve} is part of ADOL-C and automatically integrated in the ADOL-C library. Based on {\sf revolve}, $c$ checkpoints are distributed such that computational effort is minimized for the given number of checkpoints and time steps $N$. It is important to note that the overall tape size is drastically reduced due to the advanced taping strategy. For the implementation of this nested taping we introduced a so-called ``differentiating context'' that enables \mbox{ADOL-C} to handle different internal function representations during the taping procedure and the derivative calculation. This approach allows the generation of a new tape inside the overall tape, where the coupling of the different tapes is based on the {\em external differentiated function} described above. Written under the objective of minimal user effort, the checkpointing routines of \mbox{ADOL-C} need only very limited information. The user must provide two routines as implementation of the time-stepping function $F$ with the signatures \medskip \noindent \hspace*{2cm}{\sf int time\_step\_function(int n, adouble *u);}\\ \hspace*{2cm}{\sf int time\_step\_function(int n, double *u);} \medskip \noindent where the function names can be chosen by the user as long as the names are unique.It is possible that the result vector of one time step iteration overwrites the argument vector of the same time step. Then, no copy operations are required to prepare the next time step. At first, the {\sf adouble} version of the time step function has to be {\em registered} using the \mbox{ADOL-C} function \medskip \noindent \hspace*{2cm}{\sf CP\_Context cpc(time\_step\_function);}. \medskip \noindent This function initializes the structure {\sf cpc}. Then, the user has to provide the remaining checkpointing information by the following commands: \begin{tabbing} \hspace*{2cm}\= {\sf cpc.setDoubleFct(time\_step\_function);}\\ \> {\sf // double variante of the time step function}\\ \> {\sf cpc.setNumberOfSteps(N);}\\ \> {\sf // number of time steps to perform}\\ \> {\sf cpc.setNumberOfCheckpoints(10);}\\ \> {\sf // number of checkpoint} \\ \> {\sf cpc.setDimensionXY(n);}\\ \> {\sf // dimension of input/output}\\ \> {\sf cpc.setInput(y);}\\ \> {\sf // input vector} \\ \> {\sf cpc.setOutput(y);}\\ \> {\sf // output vector }\\ \> {\sf cpc.setTapeNumber(tag\_check);}\\ \> {\sf // subtape number for checkpointing} \\ \> {\sf cpc.setAlwaysRetaping(false);}\\ \> {\sf // always retape or not ?} \end{tabbing} Subsequently, the time loop in the function evaluation can be substituted by a call of the function \medskip \noindent \hspace*{2cm}{\sf int cpc.checkpointing();} \medskip \noindent Then, ADOL-C computes derivative information using the optimal checkpointing strategy provided by {\sf revolve} internally, i.e., completely hidden from the user. The presented driver is prototyped in the header file \verb==. This header is included by the global header file \verb== automatically. An example program \verb=checkpointing.cpp= illustrates the checkpointing facilities. It can be found in the directory \verb=examples/additional_examples/checkpointing=. % % % \subsection{Advanced algorithmic differentiation of fixed point iterations} % Quite often, the state of the considered system denoted by $x\in\R^n$ depends on some design parameters denoted by $u\in\R^m$. One example for this setting forms the flow over an aircraft wing. Here, the shape of the wing that is defined by the design vector $u$ determines the flow field $x$. The desired quasi-steady state $x_*$ fulfills the fixed point equation \begin{align} \label{eq:fixedpoint} x_* = F(x_*,u) \end{align} for a given continuously differentiable function $F:\R^n\times\R^m\rightarrow\R^n$. A fixed point property of this kind is also exploited by many other applications. Assume that one can apply the iteration \begin{align} \label{eq:iteration} x_{k+1} = F(x_k,u) \end{align} to obtain a linear converging sequence $\{x_k\}$ generated for any given control $u\in\R^n$. Then the limit point $x_*\in\R^n$ fulfils the fixed point equation~\eqref{eq:fixedpoint}. Moreover, suppose that $\|\frac{dF}{dx}(x_*,u)\|<1$ holds for any pair $(x_*,u)$ satisfying equation \eqref{eq:fixedpoint}. Hence, there exists a differentiable function $\phi:\R^m \rightarrow \R^n$, such that $\phi(u) = F(\phi(u),u)$, where the state $\phi(u)$ is a fixed point of $F$ according to a control $u$. To optimize the system described by the state vector $x=\phi(u)$ with respect to the design vector $u$, derivatives of $\phi$ with respect to $u$ are of particular interest. To exploit the advanced algorithmic differentiation of such fixed point iterations ADOL-C provides the special functions {\tt fp\_iteration(...)}. It has the following interface: \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fp\_iteration(}\={\sf sub\_tape\_num,double\_F,adouble\_F,norm,norm\_deriv,eps,eps\_deriv,}\\ \> \>{\sf N\_max,N\_max\_deriv,x\_0,u,x\_fix,dim\_x,dim\_u)}\\ \hspace{0.5in}\={\sf short int tag;} \hspace{0.9in}\= \kill % define tab position \>{\sf short int sub\_tape\_num;} \> // tape identification for sub\_tape \\ \>{\sf int *double\_F;} \> // pointer to a function that compute for $x$ and $u$ \\ \> \> // the value $y=F(x,u)$ for {\sf double} arguments\\ \>{\sf int *adouble\_F;} \> // pointer to a function that compute for $x$ and $u$ \\ \> \> // the value $y=F(x,u)$ for {\sf double} arguments\\ \>{\sf int *norm;} \> // pointer to a function that computes\\ \> \> // the norm of a vector\\ \>{\sf int *norm\_deriv;} \> // pointer to a function that computes\\ \> \> // the norm of a vector\\ \>{\sf double eps;} \> // termination criterion for fixed point iteration\\ \>{\sf double eps\_deriv;} \> // termination criterion for adjoint fixed point iteration\\ \>{\sf N\_max;} \> // maximal number of itertions for state computation\\ \>{\sf N\_max\_deriv;} \> // maximal number of itertions for adjoint computation\\ \>{\sf adouble *x\_0;} \> // inital state of fixed point iteration\\ \>{\sf adouble *u;} \> // value of $u$\\ \>{\sf adouble *x\_fic;} \> // final state of fixed point iteration\\ \>{\sf int dim\_x;} \> // dimension of $x$\\ \>{\sf int dim\_u;} \> // dimension of $u$\\ \end{tabbing} % Here {\tt sub\_tape\_num} is an ADOL-C identifier for the subtape that should be used for the fixed point iteration. {\tt double\_F} and {\tt adouble\_F} are pointers to functions, that compute for $x$ and $u$ a single iteration step $y=F(x,u)$. Thereby {\tt double\_F} uses {\tt double} arguments and {\tt adouble\_F} uses ADOL-C {\tt adouble} arguments. The parameters {\tt norm} and {\tt norm\_deriv} are pointers to functions computing the norm of a vector. The latter functions together with {\tt eps}, {\tt eps\_deriv}, {\tt N\_max}, and {\tt N\_max\_deriv} control the iterations. Thus the following loops are performed: \begin{center} \begin{tabular}{ll} do & do \\ ~~~~$k = k+1$ & ~~~~$k = k+1$ \\ ~~~~$x = y$ & ~~~~$\zeta = \xi$ \\ ~~~~$y = F(x,u)$ & ~~~ $(\xi^T,\bar u^T) = \zeta^TF'(x_*,u) + (\bar x^T, 0^T)$ \\ while $\|y-x\|\geq\varepsilon$ and $k\leq N_{max}$ \hspace*{0.5cm} & while $\|\xi -\zeta\|_{deriv}\geq\varepsilon_{deriv}$ \\ & and $k\leq N_{max,deriv}$ \end{tabular} \end{center} The vector for the initial iterate and the control is stored in {\tt x\_0} and {\tt u} respectively. The vector in which the fixed point is stored is {\tt x\_fix}. Finally {\tt dim\_x} and {\tt dim\_u} represent the dimensions $n$ and $m$ of the corresponding vectors. The presented driver is prototyped in the header file \verb==. This header is included by the global header file \verb== automatically. An example code that shows also the expected signature of the function pointers is contained in the directory \verb=examples/additional_examples/fixpoint_exam=. % \subsection{Advanced algorithmic differentiation of OpenMP parallel programs} % ADOL-C allows to compute derivatives in parallel for functions containing OpenMP parallel loops. This implies that an explicit loop-handling approach is applied. A typical situation is shown in \autoref{fig:basic_layout}, \begin{figure}[hbt] \vspace{3ex} \begin{center} \includegraphics[height=4cm]{multiplexed} \\ \begin{picture}(0,0) \put(-48,40){\vdots} \put(48,40){\vdots} \put(-48,80){\vdots} \put(48,80){\vdots} \put(-83,132){function eval.} \put(5,132){derivative calcul.} \end{picture} \end{center} \vspace{-5ex} \caption{Basic layout of mixed function and the corresponding derivation process} \label{fig:basic_layout} \end{figure} where the OpenMP-parallel loop is preceded by a serial startup calculation and followed by a serial finalization phase. Initialization of the OpenMP-parallel regions for \mbox{ADOL-C} is only a matter of adding a macro to the outermost OpenMP statement. Two macros are available that only differ in the way the global tape information is handled. Using {\tt ADOLC\_OPENMP}, this information, including the values of the augmented variables, is always transferred from the serial to the parallel region using {\it firstprivate} directives for initialization. For the special case of iterative codes where parallel regions, working on the same data structures, are called repeatedly the {\tt ADOLC\_OPENMP\_NC} macro can be used. Then, the information transfer is performed only once within the iterative process upon encounter of the first parallel region through use of the {\it threadprivate} feature of OpenMP that makes use of thread-local storage, i.e., global memory local to a thread. Due to the inserted macro, the OpenMP statement has the following structure: \begin{tabbing} \hspace*{1cm} \= {\sf \#pragma omp ... ADOLC\_OPENMP} \qquad \qquad or \\ \> {\sf \#pragma omp ... ADOLC\_OPENMP\_NC} \end{tabbing} Inside the parallel region, separate tapes may then be created. Each single thread works in its own dedicated AD-environment, and all serial facilities of \mbox{ADOL-C} are applicable as usual. The global derivatives can be computed using the tapes created in the serial and parallel parts of the function evaluation, where user interaction is required for the correct derivative concatenation of the various tapes. For the usage of the parallel facilities, the \verb=configure=-command has to be used with the option \verb?--with-openmp-flag=FLAG?, where \verb=FLAG= stands for the system dependent OpenMP flag. The parallel differentiation of a parallel program is illustrated by the example program \verb=openmp_exam.cpp= contained in \verb=examples/additional_examples/openmp_exam=. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % \section{Traceless forward differentiation in ADOL-C} \label{tapeless} % Up to version 1.9.0, the development of the ADOL-C software package was based on the decision to store all data necessary for derivative computation on traces (tapes), where large applications require the traces to be written out to corresponding files. In almost all cases this means a considerable drawback in terms of run time due to the excessive memory accesses. Using these traces enables ADOL-C to offer multiple functions. However, it is not necessary for all tasks of derivative computation to do that. Starting with version 1.10.0, ADOL-C now features a traceless forward mode for computing first order derivatives in scalar mode, i.e., $\dot{y} = F'(x)\dot{x}$, and in vector mode, i.e., $\dot{Y} = F'(x)\dot{X}$. This traceless variant coexists with the more universal trace based mode in the package. The following subsections describe the source code modifications required to use the traceless forward mode of ADOL-C. % \subsection{Modifying the Source Code} % Let us consider the coordinate transformation from Cartesian to spherical polar coordinates given by the function $F: \mathbb{R}^3 \to \mathbb{R}^3$, $y = F(x)$, with \begin{eqnarray*} y_1 = \sqrt{x_1^2 + x_2^2 + x_3^2},\qquad y_2 = \arctan\left(\sqrt{x_1^2 + x_2^2}/x_3\right),\qquad y_3 = \arctan(x_2/x_1), \end{eqnarray*} as an example. The corresponding source code is shown in \autoref{fig:traceless}. \begin{figure}[htb] \framebox[\textwidth]{\parbox{\textwidth}{ %\begin{center} %\begin{flushleft} \begin{tabbing} \= \kill \> {\sf \#include} {\sf $<$iostream$>$}\\ \> {\sf using namespace std;}\\ \> \\ \> {\sf int main() \{}\\ \> {\sf \rule{0.5cm}{0pt}double x[3], y[3];}\\ \> \\ \> {\sf \rule{0.5cm}{0pt}for (int i=0; i$<$3; ++i)\hspace*{3cm}// Initialize $x_i$}\\ \> {\sf \rule{1cm}{0pt}...}\\ \> \\ \> {\sf \rule{0.5cm}{0pt}y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[2] = atan(x[1]/x[0]);}\\ \> \\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "y1=" $<<$ y[0] $<<$ " , y2=" $<<$ y[1] $<<$ " , y3=" $<<$ y[2] $<<$ endl;}\\ \> \\ \> {\sf \rule{0.5cm}{0pt}return 0;}\\ \> \} \end{tabbing} %\end{flushleft} %\end{center} }} \caption{Example for traceless forward mode} \label{fig:traceless} \end{figure} % Changes to the source code that are necessary for applying the traceless forward mode of ADOL-C are described in the following two subsections, where the vector mode version is described as extension of the scalar mode. % \subsubsection*{The scalar mode} % To use the traceless forward mode, one has to include only the header file \verb#adtl.h# since it does not include the trace based functions defined in other header files. As in the trace based forward version of ADOL-C all derivative calculations are introduced by calls to overloaded operators. Therefore, similar to the trace-based version all independent, intermediate and dependent variables must be declared with type {\sf adouble}. The whole traceless functionality provided by \verb#adtl.h# was written as complete inline intended code due to run time aspects, where the real portion of inlined code can be influenced by switches for many compilers. Likely, the whole derivative code is inlined by default. Our experiments with the traceless mode have produced complete inlined code by using standard switches (optimization) for GNU and Intel C++ compiler. To avoid name conflicts resulting from the inlining the traceless version has its own namespace \verb#adtl#. As a result four possibilities of using the {\sf adouble} type are available for the traceless version: \begin{itemize} \item Defining a new type \begin{center} \begin{tabular}{l} {\sf typedef adtl::adouble adouble;}\\ ...\\ {\sf adouble tmp;} \end{tabular} \end{center} This is the preferred way. Remember, you can not write an own {\sf adouble} type/class with different meaning after doing the typedef. \item Declaring with namespace prefix \begin{center} \begin{tabular}{l} {\sf adtl::adouble tmp;} \end{tabular} \end{center} Not the most handsome and efficient way with respect to coding but without any doubt one of the safest ways. The identifier {\sf adouble} is still available for user types/classes. \item Trusting macros \begin{center} \begin{tabular}{l} {\sf \#define adouble adtl::adouble}\\ ...\\ {\sf adouble tmp;} \end{tabular} \end{center} This approach should be used with care, since standard defines are text replacements. \item Using the complete namespace \begin{center} \begin{tabular}{l} {\sf using namespace adtl;}\\ ...\\ {\sf adouble tmp;} \end{tabular} \end{center} A very clear approach with the disadvantage of uncovering all the hidden secrets. Name conflicts may arise! \end{itemize} After defining the variables only two things are left to do. First one needs to initialize the values of the independent variables for the function evaluation. This can be done by assigning the variables a {\sf double} value. The {\sf ad}-value is set to zero in this case. Additionally, the traceless forward mode variant of ADOL-C offers a function named {\sf setValue} for setting the value without changing the {\sf ad}-value. To set the {\sf ad}-values of the independent variables ADOL-C offers two possibilities: \begin{itemize} \item Using the constructor \begin{center} \begin{tabular}{l} {\sf double seedOne = 1., seedZero = 0.;}\\ {\sf adouble x1(2,\&seedOne), x2(4,\&seedZero), y;} \end{tabular} \end{center} This would create three adoubles $x_1$, $x_2$ and $y$. Obviously, the latter remains uninitialized. In terms of function evaluation $x_1$ holds the value 2 and $x_2$ the value 4 whereas the derivative values are initialized to $\dot{x}_1=1$ and $\dot{x}_2=0$. \item Setting point values directly \begin{center} \begin{tabular}{l} {\sf double seedOne = 1., seedZero = 0.;}\\ {\sf adouble x1=2, x2=4, y;}\\ ...\\ {\sf x1.setADValue(\&seedOne);}\\ {\sf x2.setADValue(\&seedZero);} \end{tabular} \end{center} The same example as above but now using {\sf setADValue}-method for initializing the derivative values. It is important to note that in both cases the derivative values have to be set by passing an address of a variable or a pointer of the {\sf double} type (instead of passing the value directly). The reason for doing this will become clear in the next subsection. \end{itemize} % The derivatives can be obtained at any time during the evaluation process by calling the {\sf getADValue}-method which returns a pointer (instead of a value), and therefore, it can be assigned to another pointer or it can be dereferenced immediately in order to read the value: \begin{center} \begin{tabular}{l} {\sf adouble y;}\\ ...\\ {\sf cout $<<$ *(y.getADValue());} \end{tabular} \end{center} \autoref{fig:modcode} shows the resulting source code incorporating all required changes for the example given above. \begin{figure}[htb] \framebox[\textwidth]{\parbox{\textwidth}{ %\begin{center} \begin{tabbing} \hspace*{-1cm} \= \kill \> {\sf \#include $<$iostream$>$}\\ \> {\sf using namespace std;}\\ \> \\ \> {\sf \#include $<$adolc/adtl.h$>$}\\ \> {\sf typedef adtl::adouble adouble;}\\ \\ \> {\sf int main() \{}\\ \> {\sf \rule{0.5cm}{0pt}adouble x[3], y[3];}\\ \\ \> {\sf \rule{0.5cm}{0pt}for (int i=0; i$<$3; ++i)\hspace*{3cm}// Initialize $x_i$}\\ \> {\sf \rule{1cm}{0pt}...}\\ \\ \> {\sf \rule{0.5cm}{0pt}double seed = 1.;}\\ \> {\sf \rule{0.5cm}{0pt}x[0].setADValue(\&seed);\hspace*{3cm}// derivative of f with respect to $x_1$}\\ \> {\sf \rule{0.5cm}{0pt}y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[2] = atan(x[1]/x[0]);}\\ \\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "y1=" $<<$ y[0].getValue() $<<$ " , y2=" $<<$ y[1].getValue ... ;}\\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "dy2/dx1 = " $<<$ *(y[1].getADValue()) $<<$ endl;}\\ \> {\sf \rule{0.5cm}{0pt}return 0;}\\ \> {\sf \}} \end{tabbing} %\end{center} }} \caption{Example for traceless scalar forward mode} \label{fig:modcode} \end{figure} % \subsubsection*{The vector mode} % In scalar mode only one direction element has to be stored per {\sf adouble} whereas a field of $p$ elements is needed in the vector mode to cover the computations for the given $p$ directions. The resulting changes to the source code are described in this section. In order to use the vector mode one has to call \verb#adtl::setNumDir(N)#. This function takes the maximal number of directions to be used within the resulting vector mode. Changing the number of directions in the middle of executing code containing active variables is undesirable and can lead to segmentation violations, hence such an operation will result in an error. \verb#adtl::setNumDir(N)# must therefore be called before declaring any \verb#adtl::adouble# objects. Setting and getting the derivative values is done in the same manner as in the scalar case, by passing and retrieving the pointers, as illustrated in the following example: \begin{center} \begin{tabular}{l} {\sf adtl::setNumDir(10);}\\ {\sf adouble x, y;}\\ {\sf double *ptr1 = new double[10];}\\ {\sf double *ptr2;}\\ ...\\ {\sf x1=2;}\\ {\sf x1.setADValue(ptr1);}\\ ...\\ {\sf ptr2=y.getADValue();} \end{tabular} \end{center} Now using the pointers in the methods {\sf setADValue} and {\sf getADValue} makes more sense since the vector mode requires the field of $p$ elements per {\sf adouble} which holds the derivative values. Additionally, the traceless vector forward mode of ADOL-C offers two new methods for setting/getting the derivative values. Setting a derivative value of the desired vector element is possible by passing a {\sf double} value and its position in the vector ({\sf integer}). Getting a derivative value of the desired vector element requires as argument only its position in the vector. One can note that the pointers are not used in these cases, as illustrated in the following example: \begin{center} \begin{tabular}{l} {\sf adtl::setNumDir(10);}\\ ...\\ {\sf adouble x, y;}\\ ...\\ {\sf x1=2;}\\ {\sf x1.setADValue(5,1);\hspace*{3.7cm}// set the 6th point value of x to 1.0}\\ ...\\ {\sf cout $<<$ y.getADValue(3) $<<$ endl;\hspace*{1cm}// print the 4th derivative value of y} \end{tabular} \end{center} The resulting source code containing all changes that are required is shown in \autoref{fig:modcode2} \begin{figure}[!h!t!b] \framebox[\textwidth]{\parbox{\textwidth}{ \begin{tabbing} \hspace*{-1cm} \= \kill \> {\sf \#include $<$iostream$>$}\\ \> {\sf using namespace std;}\\ \\ \> {\sf \#include $<$adolc/adtl.h$>$}\\ \> {\sf typedef adtl::adouble adouble;}\\ \\ \> {\sf int main() \{}\\ \> {\sf \rule{0.5cm}{0pt}adtl::setNumDir(3);}\\ \> {\sf \rule{0.5cm}{0pt}adouble x[3], y[3];}\\ \\ \> {\sf \rule{0.5cm}{0pt}for (int i=0; i$<$3; ++i) \{}\\ \> {\sf \rule{1cm}{0pt}...\hspace*{3cm}// Initialize $x_i$}\\ \> {\sf \rule{1cm}{0pt}for (int j=0; j$<$3; ++j) if (i==j) x[i].setADValue(j,1);}\\ \> {\sf \rule{0.5cm}{0pt}\}}\\ \\ \> {\sf \rule{0.5cm}{0pt}y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[2] = atan(x[1]/x[0]);}\\ \\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "y1=" $<<$ y[0].getValue() $<<$ " , y2=" $<<$ y[1].getValue ... ;}\\ \> {\sf \rule{0.5cm}{0pt}cout $<<$ "jacobian : " $<<$ endl;}\\ \> {\sf \rule{0.5cm}{0pt}for (int i=0; i$<$3; ++i) \{}\\ \> {\sf \rule{1cm}{0pt}for (int j=0; j$<$3; ++j)}\\ \> {\sf \rule{1.5cm}{0pt}cout $<<$ y[i].getADValue(j) $<<$ " ";}\\ \> {\sf \rule{1cm}{0pt}cout $<<$ endl;}\\ \> {\sf \rule{0.5cm}{0pt}\}}\\ \> {\sf \rule{0.5cm}{0pt}return 0;}\\ \> {\sf \}} \end{tabbing} }} \caption{Example for traceless vector forward mode} \label{fig:modcode2} \end{figure} % \subsection{Compiling and Linking the Source Code} % After incorporating the required changes, one has to compile the source code and link the object files to get the executable. As long as the ADOL-C header files are not included in the absolute path the compile sequence should be similar to the following example: \begin{center} \begin{tabular}{l} {\sf g++ -I/home/username/adolc\_base/include -c traceless\_scalar.cpp} \end{tabular} \end{center} The \verb#-I# option tells the compiler where to search for the ADOL-C header files. This option can be omitted when the headers are included with absolute path or if ADOL-C is installed in a ``global'' directory. Although originally designed to be completely inline, certain global variables need to be initialised in the compiled part of the library and therefore the ADOL-C library must be linked with the compiled code. The example started above could be finished with the following command: \begin{center} \begin{tabular}{l} {\sf g++ -o traceless\_scalar traceless\_scalar.o}\\ {\sf -Wl,-{}-rpath -Wl,/home/username/adolc\_base/lib -L/home/username/adolc\_base/lib -ladolc} \end{tabular} \end{center} The mentioned source codes {\sf traceless\_scalar.c} and {\sf traceless\_vector.c} illustrating the use of the for traceless scalar and vector mode can be found in the directory {\sf examples}. % \subsection{Concluding Remarks for the Traceless Forward Mode Variant} % As many other AD methods the traceless forward mode provided by the ADOL-C package has its own strengths and drawbacks. Please read the following section carefully to become familiar with the things that can occur: \begin{itemize} \item Advantages: \begin{itemize} \item Code speed\\ Increasing computation speed was one of the main aspects in writing the traceless code. In many cases higher performance can be expected this way. However this is not guarenteed for repeated evaluations. \item Smaller overall memory requirements\\ Traceless ADOL-C does not write traces anymore, as the name implies. Loop ''unrolling'' can be avoided this way. Considered main memory plus disk space as overall memory requirements the traceless version can be executed in a more efficient way. \end{itemize} \item Drawbacks: \begin{itemize} \item Main memory limitations\\ The ability to compute derivatives to a given function is bounded by the main memory plus swap size when using traceless ADOL-C. Computation from swap should be avoided anyway as far as possible since it slows down the computing time drastically. Therefore, if the program execution is terminated without error message insufficient memory size can be the reason among other things. The memory requirements $M$ can be determined roughly as followed: \begin{itemize} \item Scalar mode: $M=$(number of {\sf adouble}s)$*2 + M_p$ \item Vector mode: $M=$(number of {\sf adouble}s)*({\sf NUMBER\_DIRECTIONS}$+1) + M_p$ \end{itemize} where the storage size of all non {\sf adouble} based variables is described by $M_p$. \item Compile time\\ As discussed in the previous sections, the traceless forward mode of the ADOL-C package is implemented as inline intended version. Using this approach results in a higher source code size, since every operation involving at least one {\sf adouble} stands for the operation itself as well as for the corresponding derivative code after the inlining process. Therefore, the compilation time needed for the traceless version may be higher than that of the trace based code. \item Code Size\\ A second drawback and result of the code inlining is the increase of code sizes for the binaries. The increase factor compared to the corresponding trace based program is difficult to quantify as it is task dependent. Practical results have shown that values between 1.0 and 2.0 can be expected. Factors higher than 2.0 are possible too and even values below 1.0 have been observed. \end{itemize} \end{itemize} \section{Traceless forward differentiation in ADOL-C using Cuda} \label{tracelessCuda} % One major drawback using the traceless version of ADOL-C is the fact that several function evaluations are needed to compute derivatives in many different points. More precisely, to calculate the Jacobian for a function $F:\mathbb{R}^n\rightarrow \mathbb{R}^m$ in $M$ points, $M$ function evaluations are needed for the traceless vector mode and even $M*n$ for the traceless scalar mode. Depending on the size of the function this can result in a long runtime. To achieve a better performance one can use parallelisation techniques as the same operations are performed during a function evaluation. One possibility is to use GPUs since they are optimized for data parallel computation. Starting with version 2.3.0 ADOL-C now features a traceless forward mode for computing first order derivatives in scalar mode on GPUs using the general purpose parallel computing architecture Cuda. The idea is to include parallel code that executes in many GPU threads across processing elements. This can be done by using kernel functions, that is functions which are executed on GPU as an array of threads in parallel. In general all threads execute the same code. They are grouped into blocks which are then grouped into grids. A kernel is executed as a grid of blocks of threads. For more details see, e.g., the NVIDIA CUDA C Programming Guide which can be downloaded from the web page {\sf www.nvidia.com}. To solve the problem of calculating the Jacobian of $F$ at $M$ points it is possible to let each thread perform a function evaluation and thus the computation of derivatives for one direction at one point. The advantage is that the function is evaluated in different points in parallel which can result in a faster wallclock runtime. The following subsection describes the source code modifications required to use the traceless forward mode of ADOL-C with Cuda. \subsection{Modifying the source code} Let us again consider the coordinate transformation from Cartesian to spherical polar coordinates given by the function $F: \mathbb{R}^3 \to \mathbb{R}^3$, $y = F(x)$, with \begin{eqnarray*} y_1 = \sqrt{x_1^2 + x_2^2 + x_3^2},\qquad y_2 = \arctan\left(\sqrt{x_1^2 + x_2^2}/x_3\right),\qquad y_3 = \arctan(x_2/x_1), \end{eqnarray*} as an example. We now calculate the Jacobian at $M=1024$ different points. The source code for one point is shown in \autoref{fig:traceless}. This example has no real application but can still be used to show the combination of the traceless version of ADOL-C and Cuda. For the use of this mode a Cuda toolkit, which is suitable for the grafic card used, has to be installed. Furthermore, it is important to check that the graphic card used supports double precision (for details see e.g. NVIDIA CUDA C Programming Guide). Otherwise the data type employed inside of the {\sf adouble} class has to be adapted to {\sf float}. To use the traceless forward mode with Cuda, one has to include the header files \verb#adoublecuda.h# and \verb#cuda.h#. The first one contains the definition of the class {\sf adouble} and the overloaded operators for this version of ADOL-C. As in the other versions all derivative calculations are introduced by calls to overloaded operators. The second header file is needed for the use of Cuda. One possibility to solve the problem above is the following. First of all three {\sf double} arrays are needed: {\sf x} for the independent variables, {\sf y} for the dependent variables and {\sf deriv} for the values of the Jacobian matrices. The independent variables have to be initialised, therefore the points at which the function should be evaluated are saved in a row in the same array of length $3*M$. For the computation on GPUs one also has to allocate memory on this device. Using the syntax in Cuda one can allocate an array of length $3*M$ (number of independent variables times number of points) for the independent variables as follows: \begin{center} \begin{tabular}{l} {\sf double * devx;}\\ {\sf cudaMalloc((void**)\&devx, 3*M*sizeof(double));}\\ \end{tabular} \end{center} The arrays for the dependent variables and the values of the Jacobian matrices are allocated in the same way. Then the values of the independent variables have to be copied to the GPU using the following command \begin{center} \begin{tabular}{l} {\sf cudaMemcpy(devx, x, sizeof(double)*3*M, cudaMemcpyHostToDevice);}\\ \end{tabular} \end{center} The argument {\sf cudaMemcpyHostToDevice} indicates that the values are copied from the host to the GPU. In this case the values stored in {\sf x} are copied to {\sf devx}. Now all required information has been transferred to the GPU. The changes in the source code made so far are summarized in \autoref{fig:cudacode1}. \begin{figure}[!h!t!b] \framebox[\textwidth]{\parbox{\textwidth}{ %\begin{center} \begin{tabbing} \hspace*{-1cm} \= \kill \> {\sf \#include $<$iostream$>$}\\ \> {\sf \#include $<$cuda.h$>$}\\ \> {\sf \#include $<$adoublecuda.h$>$}\\ \> {\sf using namespace std;}\\ \\ \> {\sf int main() \{}\\ \> {\sf \rule{0.5cm}{0pt}int M=1024;}\\ \> {\sf \rule{0.5cm}{0pt}double* deriv = new double[9*M];}\\ \> {\sf \rule{0.5cm}{0pt}double* y = new double[3*M];}\\ \> {\sf \rule{0.5cm}{0pt}double* x = new double[3*M];}\\ \\ \> {\sf \rule{0.5cm}{0pt}// Initialize $x_i$}\\ \> {\sf \rule{0.5cm}{0pt}for (int k=0; k$<$M; ++k)\{}\\ \> {\sf \rule{1cm}{0pt}for (int i=0; i$<$3; ++i)}\\ \> {\sf \rule{1.5cm}{0pt}x[k*3+i] =i + 1/(k+1);\}}\\ \\ \> {\sf \rule{0.5cm}{0pt}// Allocate array for independent and dependent variables}\\ \> {\sf \rule{0.5cm}{0pt}// and Jacobian matrices on GPU}\\ \> {\sf \rule{0.5cm}{0pt}double * devx;}\\ \> {\sf \rule{0.5cm}{0pt}cudaMalloc((void**)\&devx, 3*M*sizeof(double));}\\ \> {\sf \rule{0.5cm}{0pt}double * devy;}\\ \> {\sf \rule{0.5cm}{0pt}cudaMalloc((void**)\&devy, 3*M*sizeof(double));}\\ \> {\sf \rule{0.5cm}{0pt}double * devderiv;}\\ \> {\sf \rule{0.5cm}{0pt}cudaMalloc((void**)\&devderiv, 3*3*M*sizeof(double));}\\ \\ \> {\sf \rule{0.5cm}{0pt}// Copy values of independent variables from host to GPU}\\ \> {\sf \rule{0.5cm}{0pt}cudaMemcpy(devx, x, sizeof(double)*3*M, cudaMemcpyHostToDevice);}\\ \\ \> {\sf \rule{0.5cm}{0pt}// Call function to specify amount of blocks and threads to be used}\\ \> {\sf \rule{0.5cm}{0pt}kernellaunch(devx, devy, devderiv,M);}\\ \\ \> {\sf \rule{0.5cm}{0pt}// Copy values of dependent variables and Jacobian matrices from GPU to host}\\ \> {\sf \rule{0.5cm}{0pt}cudaMemcpy(y, devy, sizeof(double)*3*M,cudaMemcpyDeviceToHost);}\\ \> {\sf \rule{0.5cm}{0pt}cudaMemcpy(deriv, devderiv, sizeof(double)*3*3*M, cudaMemcpyDeviceToHost);}\\ \> {\sf \}} \end{tabbing} %\end{center} }} \caption{Example for traceless scalar forward mode with Cuda} \label{fig:cudacode1} \end{figure} In the next step the user has to specify how many blocks and threads per block will be needed for the function evaluations. In the present example this is done by the call of the function {\sf kernellaunch}, see \autoref{fig:cudacode2}. In this case the blocks are two dimensional: the x-dimension is determined by the number of points $M$ at which the Jacobian matrix has to be calculated while the y-dimension is given by the number of independent variables, i.e., 3. Since a block cannot contain more than 1024 threads, the x-dimension in the example is 64 instead of $M=1024$. Therefore $1024/64=16$ blocks are needed. The described division into blocks is reasonable as each thread has to perform a function evaluation for one point and one direction, hence $M*3$ threads are needed where 3 denotes the number of independent variables corresponding to the number of directions needed for the computation of the Jacobian in one point. \begin{figure}[!h!t!b] \framebox[\textwidth]{\parbox{\textwidth}{ \begin{tabbing} \hspace*{-1cm} \= \kill \> {\sf cudaError\_t kernellaunch(double* inx, double* outy, double* outderiv, int M) \{}\\ \> {\sf \rule{0.5cm}{0pt}// Create 16 blocks}\\ \> {\sf \rule{0.5cm}{0pt}int Blocks=16;}\\ \> {\sf \rule{0.5cm}{0pt}// Two dimensional (M/Blocks)$\times$3 blocks}\\ \> {\sf \rule{0.5cm}{0pt}dim3 threadsPerBlock(M/Blocks,3);}\\ \\ \> {\sf \rule{0.5cm}{0pt}// Call kernel function with 16 blocks with (M/Blocks)$\times$3 threads per block}\\ \> {\sf \rule{0.5cm}{0pt}kernel $<<<$ Blocks, threadsPerBlock $>>>$(inx, outy, outderiv);}\\ \> {\sf \rule{0.5cm}{0pt}cudaError\_t cudaErr = cudaGetLastError();}\\ \\ \> {\sf \rule{0.5cm}{0pt}return cudaErr;}\\ \> {\sf \}} \end{tabbing} }} \caption{Example for traceless scalar forward mode with Cuda} \label{fig:cudacode2} \end{figure} We can now perform the function evaluations together with the calculation of the Jacobians. The corresponding code is illustrated in \autoref{fig:cudacode3}. Since the function evaluations should be performed on a GPU a kernel function is needed which is defined by using the \mbox{{\sf \_\_ global\_\_}} declaration specifier (see \autoref{fig:cudacode3}). Then each thread executes the operations that are defined in the kernel. \begin{figure}[!h!t!b] \framebox[\textwidth]{\parbox{\textwidth}{ \begin{tabbing} \hspace*{-1cm} \= \kill \> {\sf \_\_global\_\_ void kernel(double* inx, double* outy, double* outderiv) \{}\\ \> {\sf \rule{0.5cm}{0pt}const int index = threadIdx.x ;}\\ \> {\sf \rule{0.5cm}{0pt}const int index1 = threadIdx.y;}\\ \> {\sf \rule{0.5cm}{0pt}const int index2 = blockIdx.x;}\\ \> {\sf \rule{0.5cm}{0pt}const int index3 = blockDim.x;}\\ \> {\sf \rule{0.5cm}{0pt}const int index4 = blockDim.x*blockDim.y;}\\ \\ \> {\sf \rule{0.5cm}{0pt}// Declare dependent and independent variables as {\sf adouble}s}\\ \> {\sf \rule{0.5cm}{0pt}adtlc::adouble y[3], x[3];}\\ \> {\sf \rule{0.5cm}{0pt}// Read out point for function evaluation}\\ \> {\sf \rule{0.5cm}{0pt}for(int i=0; i $<$ 3; i++)}\\ \> {\sf \rule{1cm}{0pt}x[i]=inx[index2*index4+index*3+i];}\\ \> {\sf \rule{0.5cm}{0pt}// Set direction for calculation of derivatives}\\ \> {\sf \rule{0.5cm}{0pt}x[index1].setADValue(1);}\\ \\ \> {\sf \rule{0.5cm}{0pt}// Function evaluation}\\ \> {\sf \rule{0.5cm}{0pt}y[0] = sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[1] = atan(sqrt(x[0]*x[0]+x[1]*x[1])/x[2]);}\\ \> {\sf \rule{0.5cm}{0pt}y[2] = atan(x[1]/x[0]);}\\ \\ \> {\sf \rule{0.5cm}{0pt}for(int i=0; i $<$ 3; i++)}\\ \> {\sf \rule{1cm}{0pt}outy[(index2*index3+index)*3+i]=y[i].getValue();}\\ \> {\sf \rule{0.5cm}{0pt}for(int i=0; i $<$ 3; i++)}\\ \> {\sf \rule{1cm}{0pt}outderiv[(index2*index4+index*3+index1)*3+i]=y[i].getADValue();}\\ \> {\sf \}} \end{tabbing} }} \caption{Example for traceless scalar forward mode with Cuda} \label{fig:cudacode3} \end{figure} In this example each thread is assigned the task of calculating the derivatives in one point with respect to one independent variable. Therefore some indices are needed for the implementation. Each thread has a unique thread ID in a block consisting of an x and an y-dimension. The blocks have an ID as well. In the example the following indices are used. \begin{itemize} \item {\sf index = threadIdx.x} denotes the x-dimension of a thread (ranges from 0 to 63 in the example) \item {\sf index1 = threadIdx.y} denotes the y-dimension of a thread (ranges from 0 to 2 in the example) \item {\sf index2 = blockIdx.x} denotes the block index (ranges from 0 to 15 in the example) \item {\sf index3 = blockDim.x} denotes the x-dimension of a block (always 64 in the example) \item {\sf index4 = blockDim.x*blockDim.y} denotes the size of a block (always $64*3=192$ in the example) \end{itemize} For the calculation of derivatives the function evaluation has to be performed with {\sf adouble}s. Therefore the dependent and the independent variables have to be declared as {\sf adouble}s as in the other versions of ADOL-C (see, e.g., \autoref{tapeless}). Similar to the traceless version without Cuda the namespace \verb#adtlc# is used. Now each thread has to read out the point at which the function evaluation is then performed. This is determined by the blockindex and the x-dimension of the thread, therefore the independent variables in a thread have the values \begin{center} \begin{tabular}{l} {\sf \rule{0.5cm}{0pt}x[i]=inx[index2*index4+index*3+i];}\\ \end{tabular} \end{center} for {\sf i=0,1,2} where {\sf inx} corresponds to the vector {\sf devx}. The direction for the derivatives is given by {\sf index1}. \begin{center} \begin{tabular}{l} {\sf \rule{0.5cm}{0pt}x[index1].setADValue(1);}\\ \end{tabular} \end{center} The functions for setting and getting the value and the derivative value of an {\sf adouble} are the same as in the traceless version of ADOL-C for first order derivatives (see \autoref{tapeless}). The function evaluation is then performed with {\sf adouble x} on GPU and the results are saved in {\sf adouble y}. The function evaluation itself remains unchanged (see \autoref{fig:cudacode3}). Then we store the values of the function evaluations in each point in a row in one array: \begin{center} \begin{tabular}{l} {\sf \rule{0.5cm}{0pt}outy[(index2*index3+index)*3+i]=y[i].getValue();}\\ \end{tabular} \end{center} for {\sf i=0,1,2}. The values of a Jacobian are stored column by column in a row: \begin{center} \begin{tabular}{l} {\sf \rule{0.5cm}{0pt}outderiv[(index2*index4+index*3+index1)*3+i]=y[i].getADValue();}\\ \end{tabular} \end{center} for {\sf i=0,1,2}. Now there is one thing left to do. The values calculated on the GPU have to be copied back to host. For the dependent variables in the example this can be done by the following call: \begin{center} \begin{tabular}{l} {\sf \rule{0.5cm}{0pt}cudaMemcpy(y, devy, sizeof(double)*3*M,cudaMemcpyDeviceToHost);}\\ \end{tabular} \end{center} see \autoref{fig:cudacode1}. The argument {\sf cudaMemcpyDeviceToHost} determines that the values are copied from GPU to host. % \subsection{Compiling and Linking the Source Code} % After incorporating the required changes, one has to compile the source code and link the object files to get the executable. For the compilation of a Cuda file the {\sf nvcc} compiler is needed. The compile sequence should be similar to the following example: \begin{center} \begin{tabular}{l} {\sf nvcc -arch=sm\_20 -o traceless\_cuda traceless\_cuda.cu} \end{tabular} \end{center} The compiler option \verb#-arch=sm_20# specifies the compute capability that is assumed, in this case one that supports double precision. The mentioned source code {\sf traceless\_cuda.cu} illustrating the use of the forward traceless scalar mode with Cuda and a further example {\sf liborgpu.cu} can be found in the directory examples. The second example is an adaption of the OpenMP example to the traceless version with Cuda. % %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \section{Installing and Using ADOL-C} \label{install} % \subsection{Generating the ADOL-C Library} \label{genlib} % The currently built system is best summarized by the ubiquitous gnu install triplet \begin{center} \verb=configure - make - make install= . \end{center} Executing this three steps from the package base directory \verb== will compile the static and the dynamic ADOL-C library with default options and install the package (libraries and headers) into the default installation directory {\tt \verb=<=\$HOME/adolc\_base\verb=>=}. Inside the install directory the subdirectory \verb=include= will contain all the installed header files that may be included by the user program, the subdirectory \verb=lib= will contain the 32-bit compiled library and the subdirectory \verb=lib64= will contain the 64-bit compiled library. Depending on the compiler only one of \verb=lib= or \verb=lib64= may be created. Before doing so the user may modify the header file \verb=usrparms.h= in order to tailor the \mbox{ADOL-C} package to the needs in the particular system environment as discussed in \autoref{Customizing}. The configure procedure which creates the necessary \verb=Makefile=s can be customized by use of some switches. Available options and their meaning can be obtained by executing \verb=./configure --help= from the package base directory. All object files and other intermediately generated files can be removed by the call \verb=make clean=. Uninstalling ADOL-C by executing \verb=make uninstall= is only reasonable after a previous called \verb=make install= and will remove all installed package files but will leave the created directories behind. The sparse drivers are included in the ADOL-C libraries if the \verb=./configure= command is executed with the option \verb=--enable-sparse=. The ColPack library available at \verb=http://cscapes.cs.purdue.edu/coloringpage/software.htm= is required to compute the sparse structures, and is searched for in all the default locations. In case the library and its headers are installed in a nonstandard path this may be specified with the \verb?--with-colpack=PATH? option. It is assumed that the library and its header files have the following directory structure: \verb?PATH/include? contains all the header files, \verb?PATH/lib? contains the 32-bit compiled library and \verb?PATH/lib64? contains the 64-bit compiled library. Depending on the compiler used to compile {\sf ADOL-C} one of these libraries will be used for linking. The option \verb=--disable-stdczero= turns off the initialization in the {\sf adouble} default constructor. This will improve efficiency but requires that there be no implicit array initialization in the code, see \autoref{WarSug}. Support for MPI and the AdjoinableMPI API (see\\ \verb=http://www.mcs.anl.gov/~utke/AdjoinableMPI/AdjoinableMPIDox/index.html= ) may be enabled using the option \verb=--enable-ampi=. This requires the presence of MPI compiler wrappers \verb=mpicc= and \verb=mpicxx= in the \verb=$PATH= and the AdjoinableMPI libraries in the standard locations. If MPI is installed in a nonstandard path one may specify this using the \verb?--with-mpi=PATH? option. Similarly if the AdjoinableMPI libraries are in an nonstandard path this may be specified using the \verb?--with-ampi=PATH? option. When MPI and AdjoinableMPI support is compiled into {\sf ADOL-C} the generated library will be unsuitable for linking with non-MPI programs and is called \verb=libadolc_ampi=. Therefore the user programs should use the flag \verb=-ladolc_ampi= instead of \verb=-ladolc= in this case. An advanced user may infact specify whatever name the resulting {\sf ADOL-C} library should have using the \verb?--with-soname=SONAME? option. \subsection{Compiling and Linking the Example Programs} % The installation procedure described in \autoref{genlib} also provides the \verb=Makefile=s to compile the example programs in the directories \verb=<=\texttt{\packagetar}\verb=>/ADOL-C/examples= and the additional examples in \verb=<=\texttt{\packagetar}\verb=>/ADOL-C/examples/additional_examples=. However, one has to execute the \verb=configure= command with appropriate options for the ADOL-C package to enable the compilation of examples. Available options are: \begin{center} \begin{tabular}[t]{ll} \verb=--enable-docexa=&build all examples discussed in this manual\\ &(compare \autoref{example})\\ \verb=--enable-addexa=&build all additional examples\\ &(See file \verb=README= in the various subdirectories) \end{tabular} \end{center} Just calling \verb=make= from the packages base directory generates all configured examples and the library if necessary. Compiling from subdirectory \verb=examples= or one of its subfolders is possible too. At least one kind of the ADOL-C library (static or shared) must have been built previously in that case. Hence, building the library is always the first step. For Compiling the library and the documented examples on Windows using Visual Studio please refer to the \verb== files in the \verb==, \verb== and \verb== subdirectories. % \subsection{Description of Important Header Files} \label{ssec:DesIH} % The application of the facilities of ADOL-C requires the user source code (program or module) to include appropriate header files where the desired data types and routines are prototyped. The new hierarchy of header files enables the user to take one of two possible ways to access the right interfaces. The first and easy way is recommended to beginners: As indicated in \autoref{globalHeaders} the provided {\em global} header file \verb== can be included by any user code to support all capabilities of ADOL-C depending on the particular programming language of the source. \begin{table}[h] \center \small \begin{tabular}{|p{3.6cm}|p{10.5cm}|}\hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & global header file available for easy use of ADOL-C; \\ $\bullet$ & includes all ADOL-C header files depending on whether the users source is C++ or C code. \end{tabular*} \\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & user customization of ADOL-C package (see \autoref{Customizing}); \\ $\bullet$ & after a change of user options the ADOL-C library \verb=libadolc.*= has to be rebuilt (see \autoref{genlib}); \\ $\bullet$ & is included by all ADOL-C header files and thus by all user programs. \end{tabular*} \\ \hline \end{tabular} \caption{Global header files} \label{globalHeaders} \end{table} The second way is meant for the more advanced ADOL-C user: Some source code includes only those interfaces used by the particular application. The respectively needed header files are indicated throughout the manual. Existing application determined dependences between the provided ADOL-C routines are realized by automatic includes of headers in order to maintain easy use. The header files important to the user are described in the \autoref{importantHeaders1} and \autoref{importantHeaders2}. \begin{table}[h] \center \small \begin{tabular}{|p{3.8cm}|p{10.5cm}|}\hline %\multicolumn{2}{|l|}{\bf Tracing/taping}\\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides the interface to the basic active scalar data type of ADOL-C: {\sf class adouble} (see \autoref{prepar}); % $\bullet$ & includes the header files \verb== and \verb==. \end{tabular*} \\ \hline % \verb== & %\begin{tabular*}{10.5cm}{cp{9.5cm}} % \boldmath $\rightarrow$ \unboldmath % & provides the interface to the active vector % and matrix data types of ADOL-C: {\sf class adoublev} % and {\sf class adoublem}, respectively % (see \autoref{arrays}); \\ % $\bullet$ & is included by the header \verb==. %\end{tabular*} %\\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides functions to start/stop the tracing of active sections (see \autoref{markingActive}) as well as utilities to obtain tape statistics (see \autoref{examiningTape}); \\ $\bullet$ & is included by the header \verb==. \end{tabular*} \\ \hline \end{tabular} \caption{Important header files: tracing/taping} \label{importantHeaders1} \end{table} % \begin{table}[h] \center \small \begin{tabular}{|p{3.8cm}|p{10.5cm}|}\hline %\multicolumn{2}{|l|}{\bf Evaluation of derivatives}\\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides interfaces to the {\sf forward} and {\sf reverse} routines as basic versions of derivative evaluation (see \autoref{forw_rev}); \\ $\bullet$ & comprises C++, C, and Fortran-callable versions; \\ $\bullet$ & includes the header \verb==; \\ $\bullet$ & is included by the header \verb==. \end{tabular*} \\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides ``easy to use'' drivers for solving optimization problems and nonlinear equations (see \autoref{optdrivers}); \\ $\bullet$ & comprises C and Fortran-callable versions. \end{tabular*} \\ \hline \begin{minipage}{3cm} \verb== \end{minipage} & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides the ``easy to use'' sparse drivers to exploit the sparsity structure of Jacobians (see \autoref{sparse}); \\ \boldmath $\rightarrow$ \unboldmath & provides interfaces to \mbox{C++}-callable versions of {\sf forward} and {\sf reverse} routines propagating bit patterns (see \autoref{ProBit}); \\ $\bullet$ & is included by the header \verb==. \end{tabular*} \\ \hline \begin{minipage}{3cm} \verb== \end{minipage} & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides interfaces to the underlying C-callable versions of {\sf forward} and {\sf reverse} routines propagating bit patterns. \end{tabular*} \\ \hline \begin{minipage}{3cm} \verb== \end{minipage} & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides ``easy to use'' drivers for numerical solution of ordinary differential equations (see \autoref{odedrivers}); \\ $\bullet$ & comprises C++, C, and Fortran-callable versions; \\ $\bullet$ & includes the header \verb==. \end{tabular*} \\ \hline \begin{minipage}{3cm} \verb== \end{minipage} & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides ``easy to use'' drivers for evaluation of higher order derivative tensors (see \autoref{higherOrderDeriv}) and inverse/implicit function differentiation (see \autoref{implicitInverse});\\ $\bullet$ & comprises C++ and C-callable versions. \end{tabular*} \\ \hline \verb== & \begin{tabular*}{10.5cm}{cp{9.5cm}} \boldmath $\rightarrow$ \unboldmath & provides C++ and C functions for allocation of vectors, matrices and three dimensional arrays of {\sf double}s. \end{tabular*} \\ \hline \end{tabular} \caption{Important header files: evaluation of derivatives} \label{importantHeaders2} \end{table} % \subsection{Compiling and Linking C/C++ Programs} % To compile a C/C++ program or single module using ADOL-C data types and routines one has to ensure that all necessary header files according to \autoref{ssec:DesIH} are included. All modules involving {\em active} data types as {\sf adouble} %, {\bf adoublev} and {\bf adoublem} have to be compiled as C++. Modules that make use of a previously generated tape to evaluate derivatives can either be programmed in ANSI-C (while avoiding all C++ interfaces) or in C++. Depending on the chosen programming language the header files provide the right ADOL-C prototypes. For linking the resulting object codes the library \verb=libadolc.*= must be used (see \autoref{genlib}). % \subsection{Adding Quadratures as Special Functions} % \label{quadrat} % Suppose an integral \[ f(x) = \int\limits^{x}_{0} g(t) dt \] is evaluated numerically by a user-supplied function \begin{center} {\sf double myintegral(double\& x);} \end{center} Similarly, let us suppose that the integrand itself is evaluated by a user-supplied block of C code {\sf integrand}, which computes a variable with the fixed name {\sf val} from a variable with the fixed name {\sf arg}. In many cases of interest, {\sf integrand} will simply be of the form \begin{center} {\sf \{ val = expression(arg) \}}\enspace . \end{center} In general, the final assignment to {\sf val} may be preceded by several intermediate calculations, possibly involving local active variables of type {\sf adouble}, but no external or static variables of that type. However, {\sf integrand} may involve local or global variables of type {\sf double} or {\sf int}, provided they do not depend on the value of {\sf arg}. The variables {\sf arg} and {\sf val} are declared automatically; and as {\sf integrand} is a block rather than a function, {\sf integrand} should have no header line. Now the function {\sf myintegral} can be overloaded for {\sf adouble} arguments and thus included in the library of elementary functions by the following modifications: \begin{enumerate} \item At the end of the file \verb==, include the full code defining \\ {\sf double myintegral(double\& x)}, and add the line \begin{center} {\sf extend\_quad(myintegral, integrand); } \end{center} This macro is extended to the definition of {\sf adouble myintegral(adouble\& arg)}. Then remake the library \verb=libadolc.*= (see \autoref{genlib}). \item In the definition of the class {\sf ADOLC\_DLL\_EXPORT adouble} in \verb==, add the statement \begin{center} {\sf friend adouble myintegral(adouble\&)}. \end{center} \end{enumerate} In the first modification, {\sf myintegral} represents the name of the {\sf double} function, whereas {\sf integrand} represents the actual block of C code. For example, in case of the inverse hyperbolic cosine, we have {\sf myintegral} = {\sf acosh}. Then {\sf integrand} can be written as {\sf \{ val = sqrt(arg*arg-1); \}} so that the line \begin{center} {\sf extend\_quad(acosh,val = sqrt(arg*arg-1));} \end{center} can be added to the file \verb==. A mathematically equivalent but longer representation of {\sf integrand} is \begin{center} \begin{tabbing} {\sf \{ }\hspace{1.0in}\= {\sf \{ adouble} \= temp = \kill \>{\sf \{ adouble} \> {\sf temp = arg;} \\ \> \ \> {\sf temp = temp*temp; } \\ \> \ \> {\sf val = sqrt(temp-1); \}} \end{tabbing} \end{center} The code block {\sf integrand} may call on any elementary function that has already been defined in file \verb==, so that one may also introduce iterated integrals. % % \section{Example Codes} \label{example} % The following listings are all simplified versions of codes that are contained in the example subdirectory \verb=<=\texttt{\packagetar}\verb=>/ADOL-C/examples= of ADOL-C. In particular, we have left out timings, which are included in the complete codes. % \subsection{Speelpenning's Example ({\tt speelpenning.cpp})} % The first example evaluates the gradient and the Hessian of the function \[ y \; = \; f(x)\; =\; \prod_{i=0}^{n-1} x_i \] using the appropriate drivers {\sf gradient} and {\sf hessian}. \begin{verbatim} #include // use of active doubles and taping #include // use of "Easy to Use" drivers // gradient(.) and hessian(.) #include // use of taping ... void main() { int n,i,j; size_t tape_stats[STAT_SIZE]; cout << "SPEELPENNINGS PRODUCT (ADOL-C Documented Example) \n"; cout << "number of independent variables = ? \n"; cin >> n; double* xp = new double[n]; double yp = 0.0; adouble* x = new adouble[n]; adouble y = 1; for(i=0;i>= yp; delete[] x; trace_off(); tapestats(1,tape_stats); // reading of tape statistics cout<<"maxlive "<j) // lower half of hessian errh += fabs(H[i][j]-g[i]/xp[j]); } } cout << yp-1/(1.0+n) << " error in function \n"; cout << errg <<" error in gradient \n"; cout << errh <<" consistency check \n"; } // end main \end{verbatim} % \subsection{Power Example ({\tt powexam.cpp})} % The second example function evaluates the $n$-th power of a real variable $x$ in $\log_2 n$ multiplications by recursive halving of the exponent. Since there is only one independent variable, the scalar derivative can be computed by using both {\sf forward} and {\sf reverse}, and the results are subsequently compared. \begin{verbatim} #include // use of ALL ADOL-C interfaces adouble power(adouble x, int n) { adouble z=1; if (n>0) { // recursion and branches int nh =n/2; // that do not depend on z = power(x,nh); // adoubles are fine !!!! z *= z; if (2*nh != n) z *= x; return z; } // end if else { if (n==0) // the local adouble z dies return z; // as it goes out of scope. else return 1/power(x,-n); } // end else } // end power \end{verbatim} The function {\sf power} above was obtained from the original undifferentiated version by simply changing the type of all {\sf double}s including the return variable to {\sf adouble}s. The new version can now be called from within any active section, as in the following main program. \begin{verbatim} #include ... // as above int main() { int i,n,tag=1; cout <<"COMPUTATION OF N-TH POWER (ADOL-C Documented Example)\n\n"; cout<<"monomial degree=? \n"; // input the desired degree cin >> n; // allocations and initializations double* Y[1]; *Y = new double[n+2]; double* X[1]; // allocate passive variables with *X = new double[n+4]; // extra dimension for derivatives X[0][0] = 0.5; // function value = 0. coefficient X[0][1] = 1.0; // first derivative = 1. coefficient for(i=0;i>= Y[0][0]; // only one dependent adouble trace_off(); // no global adouble has died // end of active section double u[1]; // weighting vector u[0]=1; // for reverse call for(i=0;i // use of active doubles and taping #include // use of basic forward/reverse // interfaces of ADOL-C adouble** A; // A is an n x n matrix int i,n; // k <= n is the order adouble det(int k, int m) { // of the sub-matrix if (m == 0) return 1.0 ; // its column indices else { // are encoded in m adouble* pt = A[k-1]; adouble t = zero; // zero is predefined int s, p =1; if (k%2) s = 1; else s = -1; for(i=0;i= p) { if (m == p) { if (s>0) t += *pt; else t -= *pt; } else { if (s>0) t += *pt*det(k-1,m-p); // recursive call to det else t -= *pt*det(k-1,m-p); } // recursive call to det s = -s;} ++pt; p = p1;} return t; } } // end det \end{verbatim} As one can see, the overloading mechanism has no problem with pointers and looks exactly the same as the original undifferentiated function except for the change of type from {\sf double} to {\sf adouble}. If the type of the temporary {\sf t} or the pointer {\sf pt} had not been changed, a compile time error would have resulted. Now consider a corresponding calling program. \begin{verbatim} #include ... // as above int main() { int i,j, m=1,tag=1,keep=1; cout << "COMPUTATION OF DETERMINANTS (ADOL-C Documented Example)\n\n"; cout << "order of matrix = ? \n"; // select matrix size cin >> n; A = new adouble*[n]; trace_on(tag,keep); // tag=1=keep double detout=0.0, diag = 1.0; // here keep the intermediates for for(i=0;i>= detout; // actual function call printf("\n %f - %f = %f (should be 0)\n",detout,diag,detout-diag); trace_off(); double u[1]; u[0] = 1.0; double* B = new double[n*n]; reverse(tag,1,n*n,1,u,B); cout <<" \n first base? : "; for (i=0;i // use of active doubles and taping #include // use of "Easy To use" ODE drivers #include // use of ADOL-C allocation utilities void tracerhs(short int tag, double* py, double* pyprime) { adouble y[3]; // this time we left the parameters adouble yprime[3]; // passive and use the vector types trace_on(tag); for (int i=0; i<3; i++) y[i] <<= py[i]; // initialize and mark independents yprime[0] = -sin(y[2]) + 1e8*y[2]*(1-1/y[0]); yprime[1] = -10*y[0] + 3e7*y[2]*(1-y[1]); yprime[2] = -yprime[0] - yprime[1]; yprime >>= pyprime; // mark and pass dependents trace_off(tag); } // end tracerhs \end{verbatim} The Jacobian of the right-hand side has large negative eigenvalues, which make the ODE quite stiff. We have added some numerically benign transcendentals to make the differentiation more interesting. The following main program uses {\sf forode} to calculate the Taylor series defined by the ODE at the given point $y_0$ and {\sf reverse} as well as {\sf accode} to compute the Jacobians of the coefficient vectors with respect to $x_0$. \begin{verbatim} #include ....... // as above int main() { int i,j,deg; int n=3; double py[3]; double pyp[3]; cout << "MODIFIED ROBERTSON TEST PROBLEM (ADOL-C Documented Example)\n"; cout << "degree of Taylor series =?\n"; cin >> deg; double **X; X=(double**)malloc(n*sizeof(double*)); for(i=0;i // use of ALL ADOL-C interfaces %void gausselim(int n, adoublem& A, adoublev& bv) { %along i; // active integer declaration %adoublev temp(n); // active vector declaration %adouble r,rj,temps; %int j,k; %for(k=0;k=0;k--) // backsubstitution % temp[k] = (bv[k]-(A[k]*temp))/A[k][k]; %bv=temp; %} // end gausselim %\end{verbatim} %\noindent This function can be called from any program %that suitably initializes %the components of {\sf A} and {\sf bv} %as independents. The resulting tape can be %used to solve any nonsingular linear system of the same size and %to get the sensitivities of the solution with respect to the %system matrix and the right hand side. %\vspace*{-4mm} % \section*{Acknowledgements} % Parts of the ADOL-C source were developed by Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, and Olaf Vogel. We are also indebted to George Corliss, Tom Epperly, Bruce Christianson, David Gay, David Juedes, Brad Karp, Koichi Kubota, Bob Olson, Marcela Rosemblun, Dima Shiriaev, Jay Srinivasan, Chuck Tyner, Jean Utke, and Duane Yoder for helping in various ways with the development and documentation of ADOL-C. % \begin{thebibliography}{10} \bibitem{BeKh96} Christian~H. Bischof, Peyvand~M. Khademi, Ali Bouaricha and Alan Carle. \newblock {\em Efficient computation of gradients and Jacobians by dynamic exploitation of sparsity in automatic differentiation}. \newblock Optimization Methods and Software 7(1):1-39, 1996. \bibitem{Chri91a} Bruce Christianson. \newblock {\em Reverse accumulation and accurate rounding error estimates for Taylor series}. \newblock Optimization Methods and Software 1:81--94, 1992. \bibitem{GeMaPo05} Assefaw Gebremedhin, Fredrik Manne, and Alex Pothen. \newblock {\em What color is your {J}acobian? {G}raph coloring for computing derivatives}. \newblock SIAM Review 47(4):629--705, 2005. \bibitem{GePoTaWa06} Assefaw Gebremedhin, Alex Pothen, Arijit Tarafdar and Andrea Walther. {\em Efficient Computation of Sparse Hessians: An Experimental Study using ADOL-C}. Tech. Rep. (2006). To appear in INFORMS Journal on Computing. \bibitem{GePoWa08} Assefaw Gebremedhin, Alex Pothen, and Andrea Walther. {\em Exploiting Sparsity in Jacobian Computation via Coloring and Automatic Differentiation: a Case Study in a Simulated Moving Bed Process}. In Chr. Bischof et al., eds., {\em Proceedings AD 2008 conference}, LNCSE 64, pp. 327 -- 338, Springer (2008). \bibitem{GeTaMaPo07} Assefaw Gebremedhin, Arijit Tarafdar, Fredrik Manne, and Alex Pothen, {\em New Acyclic and Star Coloring Algorithms with Applications to Hessian Computation}. SIAM Journal on Scientific Computing 29(3):1042--1072, 2007. \bibitem{Griewank13} Andreas Griewank, {\em On stable piecewise linearization and generalized algorithmic differentiation}. Optimization Methods and Software 28(6):1139--1178, 2013. \bibitem{GrWa08} Andreas Griewank and Andrea Walther: {\em Evaluating Derivatives, Principles and Techniques of Algorithmic Differentiation. Second edition}. SIAM, 2008. \bibitem{Griewank97} Andreas Griewank, Jean Utke, and Andrea Walther. \newblock {\em Evaluating higher derivative tensors by forward propagation of univariate Taylor series}. \newblock Mathematics of Computation, 69:1117--1130, 2000. \bibitem{GrWa00} Andreas Griewank and Andrea Walther. {\em Revolve: An Implementation of Checkpointing for the Reverse or Adjoint Mode of Computational Differentiation}, ACM Transaction on Mathematical Software 26:19--45, 2000. \bibitem{HW} Ernst Hairer and Gerhard Wanner. {\it Solving Ordinary Differential Equations II.\/} Springer-Verlag, Berlin, 1991. \bibitem{Knuth73} Donald~E. Knuth. \newblock {\em The Art of Computer Programming. Second edition.} \newblock Addison-Wesley, Reading, 1973. \bibitem{Roeb05} Klaus R\"{o}benack. \newblock{\em Computation of Lie Derivatives of Tensor Fields Required for Nonlinear Controller and Observer Design Employing Automatic Differentiation. } \newblock PAMM, 5(1): 181-184, 2005. \bibitem{Roeb11} Klaus R\"{o}benack, Jan Winkler and Siqian Wang. \newblock {\em LIEDRIVERS - A Toolbox for the Efficient Computation of Lie Derivatives Based on the Object-Oriented Algorithmic Differentiation Package ADOL-C. } \newblock Proc. of the 4th International Workshop on Equation-Based Object-Oriented Modeling Languages and Tools, F. E. Cellier and D. Broman and P. Fritzson and E. A. Lee, editors, volume 56 of Link\"oping Electronic Conference Proceedings, pages 57-66, Zurich 2011. \bibitem{Wa05a} Andrea Walther. \newblock {\em Computing Sparse Hessians with Automatic Differentiation}. \newblock Transaction on Mathematical Software, 34(1), Artikel 3 (2008). \end{thebibliography} \end{document} ADOL-C-2.6.3/ADOL-C/doc/tapeadv.pdf0000644000175200017520000001222111417030411014640 0ustar coincoin%PDF-1.4 %쏢 5 0 obj <> stream xUAn0{lsr$(znb p%Kk5Aj8;ɯYȷpܺ/wF߮ݷbrNrUiz9HrFr?=}^t_l!D]h :N&r0*ɳfPc2/=QʞƍSEhNV 9TU4ry /2"d@?Œkvsފ,qW)\=WęZG>e '_Rԅ?8%HP.Oh c!;t(0 GT@vL\84_b0Uq4Gv4$gөS2+ Z. ֌> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xeTkPW%(RKP> *Z;-LX+E@PMH&4aB(!AM R[ZZX+鴝shp9s=|3wQ$4AQ4" 6ɤ|jOנ:duVYggj#_~.kH$mHHHfkrr2qHOV"X<\*;`DBO$Z BrY!_"$%\.S7ےn m;lT%$UARRK)W* )_ \ȐJ؞DRVgC*D,""ALP"@HC LmEV"jڋ5R+I.:zgf,:8-6k;}1b fQ\.lq p^gnn#@Aw`9IŠk`Z짲iݞ]o1SS˯ v4zm^xȂ6=1 p jΨz,s12f/9ZJӉq,ŧwO}{SZq[=h58[{Oxn6l~Ww\U2.klf|gj\ԥ943[rRի. ^0\5/+H!6҉ rj>vhLkF/.)@VHgd| bK!2ea"}~ nYv|08{VkFy稻pm'Еt ܛm5F&o08>ܜ^jufK%e P;kG58(WVΗ-ݚ?368#jX6)tJ\qA1.-azl:@)/H7e.v7i7qP͑+2Yy}/2Ehn޿ֈ{]o: endstream endobj 13 0 obj <>stream 2010-07-07T15:52:46+02:00 2010-07-07T15:52:46+02:00 fig2dev Version 3.2 Patchlevel 5 tapeadv.figawalther@localhost.localdomain \(Andrea Walther\) endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000000839 00000 n 0000004587 00000 n 0000000780 00000 n 0000000629 00000 n 0000000015 00000 n 0000000610 00000 n 0000000904 00000 n 0000001005 00000 n 0000001350 00000 n 0000000945 00000 n 0000000975 00000 n 0000001601 00000 n 0000003064 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<2E3525C3EE3D1D3424010AACE59E501B><2E3525C3EE3D1D3424010AACE59E501B>] >> startxref 4832 %%EOF ADOL-C-2.6.3/ADOL-C/doc/absdrivers.tex0000644000175200017520000001575512427155300015435 0ustar coincoin% %++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \subsection{Drivers for Abs-Normal Form} \label{absdrivers} % In this subsection we consider functions $y=F(x):\R^n \rightarrow \R^m$ that are non-smooth because of the occurrence of the absolute value function. The drivers provided generate a piecewise-linear approximation of the function $F$ in a point $x_0$ and first order derivatives of this second order approximation. The piecewise-linear model will be called piecewise linearization in the following. Further information about the piecewise linearization you can find in \cite{Griewank13}. The piecewise linearization is given in \textit{abs-normal} form by \[ \left[\begin{array}{c} z\\y \end{array}\right] =\left[\begin{array}{c} c\\b \end{array}\right] +\left[\begin{array}{cc} Z & L\\ J & Y \end{array}\right] \left[\begin{array}{c} x\\|z| \end{array}\right]. \] Here $z\in\R^s$ is a vector of $s\ge 0$ \textit{switching variables} and correspondingly the two vectors and four matrices specifying the function $F$ have the format \[c\in\R^s,\quad Z\in\R^{s\times n},\quad L\in\R^{s\times s},\quad b\in \R^m,\quad J\in\R^{m\times n}, Y\in\R^{m\times s}.\] The matrix $L$ is strictly lower triangular. To compute the piecewise linearization $\Delta F(x_0;x)$ the abs-normal mode has to be enabled by using \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf enableMinMaxUsingAbs()} \end{tabbing} before the $\mathit{trace\_on}()$ command. If one is interested in the number $s$ of absolute value functions occurring in the function evaluation, one can get it by \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int get\_num\_switches(tag)}\\ \>{\sf short int tag;} \> // tape identification \end{tabbing} after tracing the function $F$. In abs-normal mode several drivers are available. For a start there is a driver to evaluate $y=F(x)$. The driver also returns the values of $z$ which are the arguments of the intermediate absolute value functions. The evaluations of the absolute value function is interpreted as $|z_i|=\sigma_i*z_i$ with $\sigma_i=sign(z_i)$ in the zero order mode. The vector $\sigma\equiv \{-1,0,1\}^s$ is called signature vector. \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int zos\_pl\_forward(tag,m,n,keep,x,y,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int n;} \> // number of independent variables $n$ and $m=1$\\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int keep;} \> // flag for reverse mode preparation\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double y[m];} \> // dependent vector $y=F(x)$ \\ \>{\sf double z[s];} \> // argument of $\mathbf{abs}(z)$ \end{tabbing} % Additionally, there are drivers for the forward mode to evaluate first order derivatives of the piecewise linearization. For first order derivatives another signature vector generated by \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int firstsign($z_i$, $Z[i]$)}\\ \>{\sf double z[s];} \> // i-th component of argument of $\mathbf{abs}(z)$ \\ \>{\sf double Z[s][p];} \> // i-th row of first derivative $Z=z\prime (x)X$ \end{tabbing} has to be used. \textit{firstsign(u)} of a vector $u$ is defined as the \textit{sign()} of the first non-vanishing component of $u$ if that exists; otherwise the value is zero. More detailed information can be found in \cite{Griewank13}. \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fos\_pl\_forward(tag,m,n,x0,x1,y0,y1,z0,z2)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf double x0[n];} \> // independent vector $x$ \\ \>{\sf double x1[n];} \> // tangent vector $x1$\\ \>{\sf double y0[m];} \> // dependent vector $y_0=F(x_0)$ \\ \>{\sf double y1[m];} \> // first derivative $y_1=F^\prime (x_0)x_1$\\ \>{\sf double z0[s];} \> // argument of $\mathbf{abs}(z_0)$ \\ \>{\sf double z1[s];} \> // first derivative $z_1=z_0^\prime (x_0)x_1$ \end{tabbing} \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fov\_pl\_forward(tag,m,n,p,x,X,y,Y,z,Z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int p;} \> // number of directions\\ \>{\sf double x[n];} \> // independent vector $x$ \\ \>{\sf double X[n][p];} \> // tangent matrix $X$\\ \>{\sf double y[m];} \> // dependent vector $y=F(x)$ \\ \>{\sf double Y[m][p];} \> // first derivative matrix $Y=F^\prime (x)X$\\ \>{\sf double z[s];} \> // argument of $\mathbf{abs}(z)$ \\ \>{\sf double Z[s][p];} \> // first derivative matrix $Z=z^\prime (x)X$ \end{tabbing} In contrast to the drivers above the reverse mode does not require any directions. It always returns one row of the Jacobian matrix. \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf int fov\_pl\_reverse(tag,m,n,s,rownum,z)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int s;} \> // number of sign switches\\ \>{\sf int rownum;} \> // required row no. of abs-normal form \\ \>{\sf double z[n];} \> // resulting adjoint value $z^T = u^T F^\prime (x)$\\ \end{tabbing} One may also compute the sparsity pattern of the extended Jacobian matrix \begin{tabbing} \hspace{0.5in}\={\sf short int tag;} \hspace{1.1in}\= \kill % define tab position \>{\sf \#include $<$adolc/sparse/sparsedrivers.h$>$} \>\phantom{something}\\ \>{\sf int absnormal\_jac\_pat(tag,m,n,s,x,JP)}\\ \>{\sf short int tag;} \> // tape identification \\ \>{\sf int m;} \> // number of dependent variables $m$\\ \>{\sf int n;} \> // number of independent variables $n$\\ \>{\sf int s;} \> // number of sign switches\\ \>{\sf const double* x;} \> // point of evaluation\\ \>{\sf unsigned int** JP;} \> // sparsity pattern of abs-normal form \\ \end{tabbing} % \bibitem{Griewank13} % Andreas Griewank, % {\em On stable piecewise linearization and generalized algorithmic differentiation}. % Optimization Methods and Software 28(6):1139--1178, 2013. ADOL-C-2.6.3/ADOL-C/doc/short_ref.pdf0000644000175200017520000061510412761540576015245 0ustar coincoin%PDF-1.5 % 3 0 obj << /Length 2410 /Filter /FlateDecode >> stream x[moF_~p3"rHQ QhAw ;'i,)R$HV|' rv//|eUF$1]^e .sNW].g^61σt4{6<ͧȑК2Y>͇ܺvy{ jˤE)Ւj[o\s߿o'Yj2$x۔/W̙g?)V G^Պ'O⒋_^"n%3dPJgo?\̖7ƺbL{>_xu9kἣ[a/7*̞/nj8JD!s@ԨIT8V(- X!3Dsrx[^ kMyAVon6E~~[Q=󤬰"/8E颮)뀱}U.a\RxUg«bz=fL6GH:Aږl2˂ƺ/R#Bpq_ޗ~H^piD&]֩H:i K/#9$%K~F Y!\m'B %M!؜-{9M c88佰) rɄ@+]򛏈e;[mebJjgoTL?DDeiDH,r%n}ކ&b'1tYB@$zhv\/ޗ4Y}ܬnW=lՁo( П$SHN:FFV-h}цuaL924 g;jq ©Mov,C i,,݀LeX)MD3lxpa{0-ՈVhel~!,xp4[lh!]Y(ՁE;jAHæTzp+K 9ȵ)T{c,֎{ ݪ;(h Rē#@ Km\{\!bݢCqa'8:߷Qkڂ&O[xUw޵MoR%)hSK&p'ʛ+2\UO(y2Xu:)x."Bjץ)w]t%]fԷ_7jj4j|u(ANГ=]6,q)IBht@2)tc6YT/ϒB\pT2ݳb4_~StHʌEՓT=ClܖXYSC3;<'0ENj!N⵴!B4׵PI*t,]Z79dwjx{W_ >mH ɪֱD;vl8Ewa07|h #2ǾP T(ƲG+ю/kXDr϶~c1C0cN~< McUQpF&$7۩dPfRCd^HV[΋1j[셮mesXhΥqR a+'_ĂcD*{ceϔjx&Y|:v=Y2u&&\)w/mIUm{di˶%8 Y2YvRfꯩɢ7#Tѱt8f7II/py A z{fRlM__T37N:Go}Dl:w: w0)F2MLel2|:2@Y OLe!#Zě,8 2Q#jΞ%C{~CC+iF .thػtRT$c8ao ӓ=NR@SJЌg){6v24|hД4Q}|CsV9BQJ'NDOҲ=Qq+cJOMmdh)g]B+ C譭flN0~17Hq?pCF*NhY[gz zd6&͟Rk1xsNOHch>j2; NnCwEuXᡱB/XV 泶0Mcmqĝ(m` endstream endobj 20 0 obj << /Length 1430 /Filter /FlateDecode >> stream xڵX[o6~9"Eii Pl[ $'Beɓe7Ëh٦^":<;߹y}99}!( R .*|EfeXSD 9۹&"܊oɐ ֫H5]6(ixSO0#t8~uQF§'E8uPUskUOk ε7>a5Qp@\ 1 |`|Ւ,krʐH^Rp <1_,*j@pD IJ8 f^$,;ٷb#ݺu0o\F7c6s@cGV.J~^iXT1apcI~8KG<(I#r $1 Hq,}Eg(B.CIƲ!8~mz4iS.]*ٗfc(f^JYh=e?I0kj]zA l=5쥕0h҅P*"BY+;NrYn&/]2]xn,`Ĭև'9C!euf8n@!Gp){,99 [NQ*R sKvhla;˒ (&)G:6E߀vBCF9 +ܪ)J++],M!O JX@'wŋ9P>H|yXxXNadz&:F"\~Q4-"7-1o狪Elתm$Iꦓ݃70S uu# $=A%eTL>cfdL]2ˇ, # UE]]Ie#loL2.?n|"GNɱyPhl3h˪ewe~'#6ɈҍDvrngWv{^|ց[rOH+ m2(Zv댓Vgձv _Ca "Tzd m|OFef b 9N( 0NQ[Lqe-LJ=$X>kcGJ{(o]nmiJFoZ+[C(`TqzA|T0f 7 |_͍sRћP> stream xZ[SF~WOfd2mxcul6:=+d ll9ز|\sYi_I48 B@)Hp2N;t^uN*Z]EA fߕ3/y]A#F $(Ǝ8Lg{9 F%ΉhuI1R*W/N|\%F/(vw-Χ+  41\vNp0 rpM6p9 >څr"+(FZ na]LH'J'ѹ4"OV 1A8V9d'Q߭>4V:`vw Є(P4T! њQBO(2d 5d)hC/UG[_2'$_1g,pyؿJ>D$h硫Q `J6$4b;bԥ6vl^Cjzӆ70^0>w/:m;'l&Z}(xقE6<%Xf|+a î%L?uحɜI7qzT{j~å)4LU8_R֎ܽF b %İN(#9G7%E.t=\$G2 Ӡ78Q:c7dqU](` J;yk)Ά#hչ>X;Kus~!g4Q4 ܡQa y@mB m Ƴa )\4kB$aY[{uF^oMفcvOj'At=e^R*\G7Fx0/peӑN?_~|C~_119Q sƨ?>cC*j3 uFJhgeLW!?C9Px' }©SR\c>Kg79sQg~4~!1-XߚW7yOP@悬{V| E> stream xZnH}Wp$骾'3,;?x-966s|E&EL0EbUץi򧓣X` g'q³˜Syv:^MgA:8=;WUHhM,.9Z7y(Fp*IR(+jqp]j]NgɿS k_\/bR$x#KJү%S}۔V+kRZҕijgQo'G=dF4 L c]9ɴ'>~uϣʔ; ?IK_SEeq?SCtL^_.IŤ_*)f-.c, &BBf8[{SHI"T1x>1)K7my+W ʜ ]-\S˂f[rIGCphצ^l7#mDМ4"Ϻ5,p?۳ӛbjkDze%w.֬A*G3ԙʤ \QhZׅ!.?l͔Rgg>ދߋLJjjW`nڏ)^I%$ 7*u҃mGΘm?|lʔBT߲ʺ9 $S¾5uR"i1۫k{Y4\*0Vj%cփ2+@ B]Aewv}͜BM.]\IIrIzQ#&*y[\][x509Wy:wK@t80&Оt\/ֵt-WTg V:ܳtAhT:^:{`A )1C~Zuy( 憛eFrk]49" ƒ6ꓗa}1yM!CuȧhUM sAڀY"բ-+^(h-bm&lm泽#'h8pػA=j1Zq 1bpkLżn^6ޠoDi]'QZew^$Fa$=NKHԺN&k^CVCFfB¡)glUڶovdkazluz/U4J*RP=q;؉Sۑ+غΕĮ)g"~өrTy>1> stream xZ[sF~#İ%tqxɴu^L<Hg`Optn{|Ydd!AQ TJ1'`9|c7Xaէ"s`mL®Tt|׍(+z5bİ.DƣQ4tkMn)SOaNh% .>E :ӣ֥DҥsoJ)C;i^H[w'{)rA|78~;0R$ m*c﷽7Œ+DY* C @Q0]N4l,kW`,C~]'0Ex@BRt+$%k1*< Ùq,zN@$t1"2[Jdfu٬Eoҋ{Yi-I&dKE&D3j q *fqO`\-s^YU3HMOCs}X< {nӥ:+Wdr}F7jUS !O36O|>$^{l]P;gGfX5މAǝҨ9yΑ$uU|F9V gbP׾O9؄vѧ4baͯltOYO+տI!nI(lV3CɹMZ3GG*2U(ycއӡ7ٻܹ؀%V0-# Z/]aJ"qfѲ747_QtE2zS&/ )">@%-zRHw5K([3luIg5mŵo alG|syqrI.;r,%Pg>9lNnA16 i(GS@7 $Ԋ9m@+ F 5C!nX]P3uQHfpf+E4$)HB&c5g0'k&.q ;l@hZצs# Xlzpg2l#joV!%Қ{^ݖ"C:l M}c*iUTL*+G$FVQDgϤ=H97-#j5]y5b?ÂdjFfky棜f5O|Fptj~{h3a|(.e\7{Q_X1o5Si`{HKO&Zk; RJ9M~҇~7:)¬͟kHR@NtCU%ِ=l+=հi'm*.^o׶$GGf>WJ{@-R%%WJ DhӠT1*w4N dž59̀7V pZX ].؉?/Vhq@0z]}s/9?T1~(\?ao֎61nUPxdTGfّnqΨb&#Q\-hEm nv"/$٤a=.>7A֍ rӆ 3c!3PaZ$$[ .[9ŷM[ 'ۅ? 5 #b5,7ھ^2)&e]u 4'p 6hkRTiP= U/p0#gU!9f9Y~N )(-5JFZGZz,B(+.<GKʻWUysz&9@m*'6t.{6;s2rо>O0|~F^\ZJr'aʒ$q:OtPfLDih?^#ֱ"(ek{TV{79S^wke+Mzz>cpd~vEޱ$d77UO5Z+@/0QPX endstream endobj 35 0 obj << /Length 1447 /Filter /FlateDecode >> stream xZKs9+ePzCb6ff5lo<eOD_- ]\(+%K.0h-H.gthb{~ 4! Hvq/;D3^>ZSS,Y&]mj4 3eӍ>BMb=blx=[e+UE23UD-r98W42MErLh2'He" c]Z&[/ʲF^j6FIG,aqXruLe8ptÂ\awaUܐ؜dQQc#{;1%Y`C\t\@e5UVCwTYkMZ1DѼ!2-j > stream xZ[OI~W`u$@2h+ Bn|a|I ~nwAÐFڗt9};Tl- ƈSgBb)gKu/~[3H ^X6xS!.jwYjkhT.jg=al.Ǟex-mV.r8#|C!j>p<r\5%5?Ld{^-X&L\bZP)WBZFr.UC'lbm_NXzSTg4_ _܅w(>6x] #r聥&|Ǻ#F=9<98 ۸ΔjqIEX߽Li%G4$I"ָ6Vȼ)9Z*ϋچrD#oqj.[GjUK)'u2)|M "T7i^uS x!gT V22 kb  `A5X9\A i,:M-1.-c>,/꯻dvϿ. >ԑg" Sj'{&e,9nlHA! `FAg&DQʄ5(mDz(?C {3ެU?;O8E& e g( %zx\@M@F$(ҩ7^˪+Z2Q@ p1M18i]iN3t%)یI+H Ϸ~|̖'\!bHW>Ȱ#Tqm|j0B2 .RePAZA }0IKrL+:h^AA63g5FW'l`MxUU%ԓ@- = 77 }YQoa,mlHd[(+ɠ^mh41,'(1TjArT*~[q>JaӲE]3ar^bj;ehѳ+>`T41\?{> Xc&O=\*=^ / .q~ۉ*l(Z;/R3Ll|&RzoQս ,0NLJ.Jlr32ͺÿ~^]t+FLOُ] R2?iB-&bjז9 ͊q mT=?iLK`YUSW{5ݠ MdDKnC>DZʣa;qn +R.d]&-!?PMM&U W !ѪdПLQN8P wL:q1xü꫱}]e&`ݜ ^8E$+jU(/$1~y r&(YYXlχlNdΟH6<*?7rSFcNhwUoMaVWUDBHE}V9__ =U֯ի{u=~&cNNP)&@VEsxޮ Oj1 9]HFV9G5{Ϻ2 o+Nrc>pi}nVs6}CNNkvFeZU&*p_|]OKϭ\pjҮ֚hR$\Yvɺ`۽9 3Q}($PePi^%d]֎R_qݣ(8e7s3Cɔc5;~{4 > endstream endobj 44 0 obj << /Length 1384 /Filter /FlateDecode >> stream xڽXMsHWpDb|CNImRI%uU0?= ANIfz^w|z%h1J9'e%J p E9|vmb7wac8݆Mgl)d/=$Ea٤8KըުIxq7efɰ8)C#r픝vYf<]OY1xڋ)̆O%o {TmD(eA^-> bą nU.C%"KB[lar*yn̒.T{ Hh$H2Q$"1^3CJ80!d( 8_1.h-fBDx껽P%аZٻ@AO?xԘMk p }2N|)lyi)ط]Mh|X( nںа[&ɘ`8Y{u&F5!{1lp)49Twp(IDؚrBKw׬;]ተ$(UպY] K5SP#!"Mh uՌ8d! ԍ'-xYx%Mpgf.=P .%y"[x܋d4>awBbx9&+  6g{պԹܿR62.^ 6.7uu<  WKcPj.z_IxcK5 ܯ UjOV޵'|, ~hQL ^&8sTǍSY08rP;4εGKC YCMc!([,]~Z܌z Ӯt[87{[.OK|@K9J ^ endstream endobj 62 0 obj << /Length1 2079 /Length2 13636 /Length3 0 /Length 14880 /Filter /FlateDecode >> stream xڍP #:C=HpKpA  9ޢ սvw 4,NfNn,).'Ffo;2%(C b r{I^@'G= +'dg "y-@V+27lm?zs9X:d44n^Yӓe`xlꖮK _ "4m84y7ˆH8Z`WY*!-;Z:zX8e^^*/we7_ A odr,߳ `cutr{9xr u<6L ^o`lҿM濈&q~#.oA7z^2(F/T9l7M7z_$D1/lJ-CΗR_: r7|9` RP/vyyf<??JyGJs; _?K_ g{w?X\/ /wrr0/*=/*=KY>Yswȋ _T/7瑥9ʢPm}ۏĞ,{"s4{: ,+{tTڜMȵDH/ڎ *ak#Bd[Zߣ;viCR$M}'?`;V.<w~tՂ׷r^ _#kyQ+fY䛽_ wc!Ed>˜Νz&WxDŽU3ngJӵP {|W[oYIBDl' wE׊pw` smɑy |O&ȮjOx>9PA;cU̾${+z1oҖx f-sЎ;anOM9"~0;՜"rP ~&.QTASph*j,' uEs=l٢r&>VP՘C FGÁfbU@z2(-%FTpq|6 EEߌ|Ic( FM%)J.h.V<ޥyR MBehJ9dCv(U'}۞k& _?ww tYg OI:z[%M0]{ʁn*P:㽭4˶̾bM :^n'~Tv,2(۔/KO|j!Ge)bBUup?gOMfa}qk5eܫЃ >+[X_8w9G|V#\G>;4Cw D*9FpgļO1!~#cxv GMP^Sȧk!.RL\ i9bstRp!XHP4|s"/<%)RV&?jeʯE3^6g !r'&BdR 8#"De~Pc\9 %ZJ?M.$ij>>sCxn=.r@Td|Cl*~[U["pJN1 |s i2(v8IUǽ&{5}Φs= d"ߔ`\aiuN%%S)"E)vwңڊ/3H,L ŢE"T5⊌:0ek^(t NF^[$D%&z)l8$–oS ZQ)ȝs;+{O tdjJ ?])0+|1 8y4YW@z Y Zxd\9{rs~=?O,0e e !_OUN%)X6^strq&ZsиyB%ѻPGoiC`#3 !VrƏ<ڠTc76e﩮~Rċ*5E_ pND?VWRa,IJf ~UTp]qJ䪺c>f%7 4JˊV*5_Z,ܷꕭo5Dֿ9C aIazpCvg±onSnwo W1IVL'Z6؆Q|zdua%;V*R599n[Cۖftb؁ WΖ .:v/K[^ >䡋7:lV s_Zj.Ԋ &F0&X`q*bn5 VEafX[^mvzU4k]2Ԉ{B};47:?]rhQvݜ8중 ]y{dyB4w?b*SyJII2 >::vҡjsUĭVj.&fQo' ]t<_%mrQheaÞW䶇=>j~=TtVo Ȯz7.wc8\}93sk1}%) O c(5!2MWSaOeQpO@ƣ J()$M 2qawx"zQ\ĈDP ~xBIq/Ə5+haKޔjXQ1,745Yt2L% g;qWÚSC ټ.l(QhSޡ%/=rɰKI8zWyiM֮,MC|`֛"w4ut3 .vΈ>tYpV$6zm7*;\B*^h6m_G϶3%b(\'CG. lHs&n{cC /;C_MʗO=*ܤe8+f{Eqn {W?iO}/< c \ZZQNw7m2V(erZk{n +bIRT +)Ɯ-I^u QИ7Gl9~xs/CnGG3*9 #e1m]"{y% tYue/o C lB yƌe;J敾oH\9k1]>Rcτ -=0l盢|VO9uAkfy ^z|0^2o&'e?S.Gy;$ahbAІB%Un$48@i\W=hF*nPi_P'jbL\ E4:=T>4Ǣ:#HF}DH?_r[A|]4]u'd*ߐ;.nY fbt̢$..M pb?0k~7*m4i yn 2dvsh)Xݾ3T'bZ]-_8f=tsPFкn[6< 8GƦ?n/qX]&Nu*] ~7 F Em`M/>fC2>VBfKc>6\Z#BiLD&.t\י3^%MF=~f'+:L4)WDXM$y%S-tOp[uer-uM۫};' 7$qg>ZVP7$Xͦ~+X`'N3D_q*rnjvb9Ϋp@_ip8CV/d)iSw蚶_WUW~0E3 8/ nZחQHA6|iSi{7HË.^oD2Pr ѭKŃt P1c[`+H=])PHS4n*6H|#A{gFV-C0V-^'U U֧,Bp4%i#MʙxPwp,ufSAVÀ[Dꇈ&M(%be&d(~) vt"Pa25O]1K 6敱 Rf?xGf`R[3"Zˠhqp|֙kê1aSp}j M(ﻫmc`EI)/E= wY;=xdJ:L~:r5f8prT'|3\ ,0FK"|iDP~b1wfå> d"W`{槯jiQKwtT@D# 9l z#-xa5TJ\ R{K('t=!~yizs39 0;3%7#P"XOHDmCU*kvy 9F&S{ntiv]\䪉1ZBM12zqj.~4y< E~f&K{]k"vQP,È"]Ar}Y})lX<]H0;Ԝvܝzi٥!(v xI}6 ^lމ-9ޢǘҽӲjKט(!VYxυ%<|pl`FNN5B,UPXG^ )0Wغ)S6yI5Y":i{nm" HeU #ʁ^ exbXرoอm>^ucFSvd4Y}ԣiWѳ:f\+)ū?oX-gX/L9 7}6 aEH͈Y2d^mˏ +3q(5MR<#*j'w_ L^y AIfk=Pmlxa@CoqA=q~]h^ˁhsQZZ"Q$PDg~vixԫ5;}ќ!3lkmc}iDk=>|Ik&~`R+fH]aſmf39aƔi@Y_5nR|4uƆ˳Ւqw l- Ys<'͂_9]'ίKZT7qC2Ѷ7t&sȸ3z1wo$Ǣ~p]0CCzN6%:Pg4at,?تʹ̀T}G}FU8zt3b=٦ $X8 j=ahC@s<]H@"`s u. i=I !n ^gָ!iWM{{99%" o,jy&Lpⷍ[,C&4Hp&08JmVNaWPA, xس'-_~&@ {%Bƴ)pObFg Sن(`k6 WtnJaxmITi=Y 7X؇(C1qT'E}t?T`!U#.S2HM^0~Ƌu-LB{^G:$XFVJ i_1Y L TjYc S-E}pҫR¹aLtHU kq\{^\KR@l76-XRj5(vjwkSbwNhzTz7FOʺ+4<QKZhWqr dGe=xă̽j-=՘ΔJELg+AKjypAzInIYb<%2jl`!?*(,&a˄/{r8ЁP$fm^>np͎U\rWa^i/>h3ɩTYRGP, ;Fof]<89b|J  r72.ETrz&dxz[뭂}glkPgO,_G(J/BGJӳq3tO2[AǮLvXE\3lc6ߧbCG?DWEZ?Nk 2")wP9"2T?SK5W 7CwYsZ}l(0b=_`EWXWPXH%-P}yB¬ijVoUFn_mevKbyMJG6Hchgda|σ8R$ϣ7 =V5TJ-2{ E"s]LZE̷8+fVSFk-Yx6mSlAu~zT-gD5t,lqMg,)B#Gr˰{\<]D {O;i5Pyd9j`YxSeLc9͜C9 (Z_ue^W(z^t{.Xrש9xtCt3UT)i1Nw1Elrz[]Up )Rg:,}+bT֓hoۀfOVȃ(:4m )ʖ8YVh&y j:*! ۰3y0!l2m*AK9yy0R[2ÇWÔT͢ιoM'J/IV )Wc%Y>u SǎRVR jȆMMLW¦{yvZnw@;-mUh%aVCj %yK1 E5T)ݖ|JuެBY?gs.}5Ti{_[6,[:Nbd`qx㬵mހPkMTIoLTtW >dY誾 sdV ),HѦBp;K2ϥ,#t>j+6hpLSiJh oY0\Kѭ$8 TCh?Is%- b Ӧ×ҁ`^L.2mlGNm1-/T; #2]Ij]O_ޑrM?Ә({ ~t(u4q%|fXB\+ ]i7ACu8Q]aݵ63? {~rqyFv"tʔmic^7+l 4*g U5x ƚu{bQf ldqJqO7EL͎,5V%\Wbi{ǙwږEF1~ P"6EWFN!Pg13Q 5BK"Q2d7qal+[S6ޘf)LLTM͜B^ٓ,V$hnAiΫzU kJ ,ꥆd])T͏IF|;N> ߔ7m9p&>"oq$'즜5_Jd^J@Ω*M6hG,Hv]Ecz헁… 7?miG|v/D;.11ّm"-zKD =o/jcXepwgH:J2rC/}5"D^EJjNϚ㴂/]N>՛pJ *3Y!'Dajq7ePGkd6ڑDF$URLO:70/ {%0U f1ɢM\P8WWcA:_ըsg~$$FptRF7őB|Zee[8!ΜV0g s˜DD&?TcfVoU("kVaK0%Mߴ_zeCfQ_D+,^@PUZNs=5e5uuB&)I&Q"^8-4U.kDEddq[+;Ej4UsC>- TXՒlpBS4< W#ڱ>8$2~JћJ-K)k5]ִ#">$ ^~r%J*y9.#Ԧ`j.KBw^\:/<[hn9ČjY5m\ST6V*ji@z.[nq.DeE>&ټ,}}|dOa;5>tuihC, vU٩K?}]12JibA4J)u:Ry3o-\7RO>%Ko0OA GS\aE-xewޱbŀm3_Fc^u_ xZK<=*6/_>*M{wׯuG@O#Ww|TVN78<绿cW)D4LVs6;:pҾ8v_r Ub#^/O\*8;K+Q'; ( yԐ^x3(,a>C` ulފnŵa(X0^z/MnOw4P-E>wb贶+ˈc lׅEUٻƆV[.ɛ)lv6fƒ:i"6&k!#"8*.ILZ#UH`'P9]eϒIDp[!3i<&뫪(_tOfQ'PDR;Typ#.̎cpu|U ?_a&$ur2[Czu2m]Ӌ AK{x^]Vd짂IF9 2 gWGP0twCyͲMjr\$ {JE8fh%ӉuY@C ;JAcc:+@#uπPcnHCuA w(зhJE+MƉ h~ r4l!) 3 hǍNY CYjq3ٳIUjAk^:ErTe# 2׌`jӔ>0&>1}ǮM Ğ֮yԯ\u:bOG2$\E ^<՝tŎ2.WTJ, ?x9-DYM{k.7xN\ӰݿAqi!W󁍹qvy=zlHK4$-|SY)*V2ru=4nפ -'[d| Fɯ>XvEd:?\Zp]/VgOed]Us1N<&ݜ nYE]Vt#A46DvZ" @ Tgi1$M@0H xJBBv#Df;9SUՁ!}) (n־xj-#oOEeͽˏǗ$_S\_]LtU3?$"y!~pG!A0l"^,b";ig䰂)+A/Fh\7;B{drDcm/Q&[ѵ;: 3ͅچADw8VS endstream endobj 64 0 obj << /Length1 1657 /Length2 9050 /Length3 0 /Length 10110 /Filter /FlateDecode >> stream xڍT}6. ((ttKt ,,t7 HJtwJH#% >>}gϹf\i5u8pKȪpyqu?F} EB@{PquxEyD"΢9 qT0 ,jc?W+GDDp#j@[V  AxW q[Itss9pm$X9nP-@qFBߢ GڸpP?=:pk78@ 0W ? p$I? #dewt<05PPB#8 7!AP=Ai-^_]N.oi,!0 {_{ ֿ]z0+W_{l6@[Xy[| ZCp\@H  B,!6Pߛ!pL'ϛ0e =55㕑xn!!ê Uݿ*ì'Vq߾ VGg` r p[?xᏐ[~] _R  uu_2t(0z uQCPퟓUܧw p|geqq?] =Dq1~y{%y gg<#]0`p}^E@oӟHAy@ȿ /h/ ̎c g399: {E=F+Wg>1=@!V8_VbAvAM矤q吏rBtɏ$d{Q0ɣҮE]yJ*SN-˸w(^g=6H-pzII؊- a$fItc" ܤ;Ug"ڈz^u'YkQ)t/ě/p {{:"UBDb1s]g w҉,Iv]E$~i$k|^1d)aR~Sh^Up;%7S7'|ӷ!֓1TWa%B9/$& :6aWFe^Y쫔LGDVu4Htj-y#l'ۃr&F@h.9gTR(m3OU( 4T ZyUцz|Y Dh8ƶާeP*zVh˿1H`.u^+o Qױ{Sg?۷iזR?IF8uAō䶅|~lU ,g陞Njov2~J "52n{dd]FNNq<ᯟN76>V ԕ,/F!/N/bl^I%|q(|{V񠮱_nUhez;ϓsfmwZ0?41(8ck^MCVC>R iieNsGч`k!m)&'KݬzV9! ;쿿HOib w`Г<\vGf`X]UД&6\dvThQ뽻ErL}VL~p_{OMm-r OHv*ۘn@3 dIl'75ioSa?!#2=)4I ?S/Cv(IWdirnR,l\{d?U/G ivoh7n!i?|~!]^jG)rݻOKeF/a9 !E9T(υ#;Ő"p[مsfuۚ"QF!EgTCY 8%:_I0b0+_m9)~m8TCO~6}<fǫ~t9<xUev#tSn,bڳPU~,/ԋ7RXުM)=u+0@QT*O R N?.v;=>joT^v75^LwONf*k#IskFc8DEݔKڐx.O%d7^|@Dp9cճ F AʮnoKWfDJLN,R6>,@'%#OcΌ˺7;$} [וb]zݺ;˛*]џiG`MC-N".zԃ`T{X"\]{$  <͜5?yaft"Jŷw"Pa9I:f`C) Ore9a)9sk)٪dzzOVMWC3{6 ;F  [_HphTˊS;*t~3Ѝ=Y}؎c>wԴoG O0RzRBNe, I$;>sWՂ'.FXX!>X,LkC*9"ufb;uׇZ^oYf*J~D{]ʻCȆ/G$цx[+E,`Km3&!%\]krUB"EIIy $h6 zʳpBH! a`g2o2$KlԿ$YФiKh7x}9[Fc&Z<䢁nR(pr蠝?xPabI"WEC'5"Ib 7>+RB闔o1*t5acY)ڡ0R8/DF˽`!&Gxh*j-=gLݍmZa&u{V}r9"6ozIӥ6.xFS*R[Yef 1f!] Q[\B\! {Ҧ n]A}~4uϦ(c-r,}- MX*]  +0|\SKvLK3zvSD+oJ߹rWT>gTl30s1x׽QbCt2|+<ݳy4/e7Jƛ BvxF4߱Ⱦ<'F:ꜘ*Sudژɷ{jY'ﺦjurR!f[Z~/0z_(ȊDࠐ]{-5J޺+KF2/qS <{O8aLXTà }>ysYؘu#C[7!v[O.6VLU'8d7U+˒gV_)lȨ9$=OD¸.CpuUbں:?*pJ>B/_*(he&C2s!Si)F ڴ"[xՠZ4yB憱f\xH6;n%2X%(J:p>i"kE[W߱Xj`qfd'}Mo:) Db:4ؓ9E B$3xw^ep2jZ9THd'*O,)lx U1NSL T~t yn&ϥZT)^]/~߯){'s+&–qA)a!@Iz0SCdց ~B;A~7a9~Q!/֫˂J깑"*a{ŵ͒>5*@zIkLnuupY=(WwF4_&3875rS6 ?x!oe:sig%)(:n[x5HlxEQ3`8_1>S*֝M /۩-a&oy5v2QmtIshg\ܐ`57&E̋ttUH«npxv Ӄk.4t$ +-mfl:[:%hŕa?Nș$Pe¾Ȩ,E= S+>l\7FC<]BPI/^L4:xQj:e_S8O*!\Kn=Vn e%չ|(+QY2t [S-Ok-(??Y02J{_p]ܒٻeOG tz.8`w:OR`(n X|^AMEox E7SM[* cC[|aJՀWI|9~p&x+[.`Iui9?uZi iaVDc'㧊k\ϳN6"ߣ LSv]33-`Y:|lkh2#Ѝ`W*?f:LZ.ؕC|5z5Vo^ Mb :yczPhӖv{} eJ;kW3"fU̚> sF r&duͯky\Ǚ1[OAFʉ` -r>礥<6sRrXr)J~NtE1m3 _~'>L$pBf}f cu5 o}Hm$sկ@Z=pچu,<ws|qW7RW_?8# r<>,PCb]OndnJL@=xB1q,rI7d^"=.q>2Q4@h**K>~o- l!{KF/v"'rc?ɩG} >?7כ0lE'¡&*c{FyolA̢gPY6NUSh2Q)9қU*bT#}FҵOGPr=Kr/1-(grl͇ 9>cTyZ\Z+oRVW%9-JnV,M.zI, G277MJ< u@g[cw'uša2xGL[bu3wku6iK$k];.#\;=|}Cw-"QUj|E!F#tnOy%97ҽ>KR 6nGJ)cjd:vaee} ?Džb<:Pla pAhjPX@$"UmCHBTvJ5LK!~-D@םI]_""VͮB^V Tt'j&;2}Ӗ;q?XuSP[P_[i}va!J;~S7YdjN. >xhy? YEqk@dOPkr/KrIߨ2RGDР5:VJ V3^,(Xlɔf/_J'!T1˯8)jt˻WZsL#egRa*߮*p v7Fl8\"e^}"]wv'x{9>yhDU=%pB7Y꪿9PJ]5սkB[ˊK Ӣ<Ƞ6 e/vX-FP0*:(YɘEyY4?؏Ǫgcm ;o[-r+W㚻RsQ<1#mԍalW ]HJTPee8)KB9RԘZ$!ۭ~SW4N_Lgg,uBzN;Fӓ1y'ħ67 3`*K.1PysTaaC@+q<{mݺl2~Xk gtm|-ަ'C {t"gW$=+֣[s-MoTnY56QNKx|_}* ebZD|>jp<|)p{2~{+po6f[4Mou}JţK=ƅVm[n ᵰIB'0kv)| ڶ"{Gyh%1=:-Kcr~;I*fv!U="U@Au9S O# qaUiQ=z%uKyYj\pcɯo0ڝmjzŽ5hS{?\wFNgFQqwJبLh4媇|#+ N 5UW}v!UlMHqQItgޕG?' Ccsa|xCNExKZNmWLBHHmyk9pģWhad?5͢G)KriӖmMRYeHEB>C"HeXdȁ`jYZ*ਵ@v4wȪ)c>Ӈ)hz b2i8IɲJcANW>_ j%G@Sj>:?UE<5쌅?@_φnWgLvͤ2DV6J.O4;Tn |<\"o8o 8YxHߔY)=R&ܳLD*-ϚQmy;7ߛ#;4E C,1M%I54`&~B_>0g9sP3"zlX1GdLɊCL8-Q"Gj|eyy47cXlCAz{[oWemݟQk>RuSP;WQww2}~tiWk/ORN$1mMM+ǧ'eJL6&FէSF8MPՙo}<(&gx:no̳ (kg2O!g=F͘hDhw-|eF6%k\kʥ(؊!7z~iQ4k*cxL^iq6bHjN*~v<1;QILnfOxz?$PSE5~S'A)M i0\,?ːM}ː9 "][r}q*> stream xڍTk6L7HH! 1ÐCwH)%%H" tI R"sgy{_=,:s=|Yu hr(/ y<"@TT@[u@?jP{@/w?gn8Πkh0?o/o{.+wGʞ..q qøkhOphFTc_ x/ 埃x(C|v:_}w»@`םv7vw]~C໩wJ%- @p8w+ax7v` w.;y{WMD|6p-l88#>kc]|oP; ? 7/)𻰈vk Nl%Ý[=̲ay$N]ɥ tϯ)1\#w=mz7т73JhW@v(1KwO1"=*>e_>FNmnV_$[LLR3a!xp8I}M}&t)^^`1lY bo@!5)1VVcidibcۭA3MR@>l[%? 'O&h9T )BAN=UA:hR}O*h[B4^7RS+R~1h벋t5M16+g~9EM<_ƗFp`0: R4+]^ߧ[,d-b&`U-o|,+6sJU<)c SV`W̔^Q7ݛ]5&q1'{ ы}C07'$)ƽCW_kRc}^}nMbl?g;i^EkOB1l )4}#劚CCJ2MeԈ{9mXjDQfXvL L~-J}6OkHJGg) +o ~zc7䤉,NU#^>(x$hx0W4,&E}`E:Of=sl/^Wt-jyM5_l|<ڒX%Fv\,'$޼i)RzW Ro$$aty߽ %aGz DL}"콯(0KK:8r$P5fXx*KyNh5:!?W$GNPZ;twW۫%55"Ǻ 3%O~=],A8tGd-CWe׮vB駘A-f*6T y*tw;m= u!-LT?rOe] d}˃8(zRd>E`}C~ ȗpb)vcUޢ~ J k !hwEC<f]h5G$O xp^ *JjhIJWnՔ+AjK6c#G{z7JF/[lZp$EVaspkn(:^^e됍Q6"5.f{T@ r6f|B6,gUҗQ81#+I8c3TĒj*̅9Qhq܅%E_Gˠ韷N -kl_>aC_p}l̗Y\&L*%d?.BVNs+l5R}lE$O8N?2‡B]y{W!˂Uk oc+䫚5;qZTvJzU)u ZqbsK%?U$+9,=wV&7ɫJ_`4RATKJq]uPX]lSɚxL'KJ rw!MIjh>-9!t#bɣ=3j0w-GRq& )ȷ3E(}݇n&۱E~Q}Ȥ0 $_M`qWHϛ洅74SSy6>}=U fQ~(;iI +'gĶZ9S6(:Z": 1$H3!sh =&з,_4_waȥLEj!">KLVܔVm,phbWЇltgGb]=%`/}  -@y{lϖceW{ͬVޘ]W;kY v_ #?yfH÷-gT8odK4YTPOXyS_^$G^߰ĢFW>>Q͟Ir1%TNW:~xz?F"Mt:wzT}>| ׄ$`n]ZFpfn~`+Ҵv d_>#)jpswZ8J)eFnϓwG\OxqW^E%shou}J"b_&;p4SD!@9 iNȴBYcCgԞ@6*ME[4 /x}Wax 7ޤ}^ӍREVm>aƐ7s#3(v#/;-BɦhVEi:m׵vZvsC25W;&B[<=?H# z-Eڭ!]TӬ#(iE̅sYpSYi.huR7sv$Xή&ҝRىS0pxiٙ겝8}g}:@{DX%mw>g@=Gm'8D~9D}NbpcϪ2ɽۤ ii8nBimpW{Vl+hjjλ ]v4y axS=—vOz˺bf!o\اL2;xVb:#'ޙ!a,/IE&hLd"r5LKz+ "b;" _h\3b'TEt9d mi7ذ+ \%Y>K!E~(c@Տ&uid-|mO%V˭Ea0K8l5w4ޣ5]}Eoؖl1e466l|$GGn{dv)bGz'"EYز5AjJ4X]кl>9M""1J$mnJpPWؠ׿GDӉwbe203~& &om- 0n*b-q ae90{,'4gA󏂁oVQ]NOx6̡EP_ mB Բ~pJ1FI@2abV{]-nVcL6 /{`=')CbEZWK)ۗY#$q$+6mGA7,s>1U=TmL=B;O"{12-~dL~duv] (,8w;N;-&*v3٩FB}pG2 n7)׆ 9UBXP#O3s>Ka!`0`i7ͥ(HP+6_ĺR.0yY0db:Z&QDJ@W޶:x!( ɋu{X~*ߺN3h:UnGHɸuTQoL#KH[Q+qp!+ ι]iuXehӞmaT- +JԮ*+' W.(ºyc? fʮaQyT?{uJ( T!5CTjH0^O V#;9,#B!R-Qeg8L`ƴsnԹZX`)/iwgfNkƚm5e}b} -$3Rbl38)lۊ6R.4.i7q$2y7HʚdzOK_x{il ^]9p/Z'$49VDG6qTwR5gW uS<ԅ[[ԳO|z2 V<@#νne8>P7"F#;g[ ƈ򍛒QדYC!!'Y1b 57sZ|[Q -tW2W_|rSBCVsAX%C"-h”?W 86 '$u[f1QeJ|̲c y$0KuJ4cQ qyMй>-ρL-3)ъ 1kOB`]o/׭gF[{dxuPJ7Skm_XĀ:9 r_FŽaѨRȧw$((hc>ˉC}^WxsZvC`JeYWi̴FvƟM,g'f嘯RV7$PßQM N0w;i@tr 8@IHKsm;UI[#65Yuw|#TSɆ&;-RUDx] NUE}ovN7Րs{JXU鼥p2|Ovd0BFIOU >E㊠sT%K1.Dҋ [#8VyD!J`S[9DY)BUd)*nDz+/x*`n[?_nH1QYso46- 32 nKnQ2c1_ pB̲Gǡ9D[3XuDD#Rӏ%|0@gxUőjcv,νZ|CÚ` @,ϮT`-scs?|G:`,I?X$ "<\fq49 +;4a3EZ-#%ϺRnuLQ|s4ڑP1f uϽ^&v7gRާ#yRs[.>\~8(E-d$bMXbL=%i^@Йd]*|yu7IGT-SmLiI%aCWZ#rҠ=AdG57l)RF=sa 2gj|N}v i3cg Hd+.m/ !M՘YŞOŷhSy MZËGޣav0 L] }HNIc;Sb]huDYf endstream endobj 68 0 obj << /Length1 1685 /Length2 9736 /Length3 0 /Length 10837 /Filter /FlateDecode >> stream xڍT6LHR"H]J C 1tH7ҝJJ tKHH7yoZ3ϵz6$aC8 9 !"9A .\FF8QG83 @ @ $!Y qC%Q Fl 9- UfbFXaH ,bD: {N ;h\`n0(7e5N\F5O6qvp ˽ VT;4VӀ;g wX`u9Nq6ع !n!9IM_\,HNoaY*9 ]p'wYܟ': FpoPWG(ͽ_  s `N5wOGJo=_oG#n vHgW*( 0Yp~/Y ݏ~ ;h1PUZQP/(on./|;?'7?_GDEKw,o&n_{j ^y pQɹg<hWr"WMan* w_"r$V)=`P 8a90 s~,l//"ưU:d,;8;C$vn1Th5]NΚQ~',gbӡ&t0uVK[sA+iEk7yw:}FE7 ~Ps/ua'8ԪWDw&R9~V,2*A+Zfuc+A/#R2E/pܫ?PwE(0"ddx^疸d{˓H@{YRkw1'u[%YFz]P9ΑJ9lDBgsh\ *VmB=gƻG]S_ 3&ޖglq Eky^B&FŲk`=w2B ͺUGxN0߀ VXۋ6]iƩ*!8kv'>"}ODzJ=ȷ«՞wwiu4B@v#28%bv'-RWvy@ъV}uPuxXXoÊ?M;/Tu%{IЗ-fVv|5bAjҚ#k_YA[ ѭK͹Q,c)w[KE99涢|z%E)^e_ Vá>.ZCv%HE=%8qubLAD{6;0an{QeUCy{s;YuL+.wà}L ~s+\4k Ɛ|&WĎۖ&դ)n/ѦRi L'%>Y(uzTEX.'ejop^rc ? dyI1R*@[k HKMIrP !c'~nvKȒx 0ꭴ=bq4Xq 5X$q$LL},Itԋc;ùjz%aWW4'#t[bןu#T$M/= ;`2QAky5ȳ)D Gwz|̦Ϊt;P.c 8dNts7*k.}^OF?U)fgt|W$X:ZGfW9gWM6!k o0th+wk'枰`-`SÍM!.Ӝs9RMaSO-ޚ)O&Ebܝ$kh58?5 ti7JwK¶^0G_\]8DW`Zc/|C[--u͟*xO?^OLXT13zg 21qg*q ouSO3Wav: T=0ݾksYn!cZ@qWsZ%S$ ]D}('PMDu{X+_wn7eᴔG[>PAXx9klXumr/գF- g=@ L6J[HH 2/iS,Y_XRq0z[IA%ѳh n\*gӸzjMӂW:*@!^[gdBSd*IWnhN'fĒ fΖ،b89y(KdӭDaWP%Enir2{-M ~)e|+OLc~;o1AxG㽋v́*yq{?7q:)%FYɮtHfeъխ8fR&U+l9n?(`a*H GOSW=ZM=i@bHABD+stL*ni6q˻utpWyĐU]Q=+>% WD 7`ۂC6Bmʒm~4n #}$(ҵUzY"*K"C2-MZ17-lJne sJɬY\̻ᑷ.[cV.9id_@/iyp34-e=ֹ(C;<4`d&)n/~蟨-uϢ0@kSrllFŨ6VQrLuhGt ξ-ndt^YnY((G.j3@nӅ~q|S[`P^ǤzzŶ*#`>.bC3>YhQԞMժ\7v~SKˤ`{Wa_6wnGKW:u3(d=pn{91ʕ a新 }(sx*rBz1GACyߍU(řTL')Ju\j+@p8hՎtm<@.qv i 7PxkE^ziSqPd,9{UB0Y⥄J"D'X WG]g¡#OCtW;xת;۸~*{8qw-}2EPWdn}џb |ݐjI2Yr-eV+mh|:zk^uYr7.'MKiK+-5gU.#zDzTf樧ŒF]n*#i ;["˹AI ^Rv~Jaʐq R[g0m$4)?\$49q 5# ڇH@(qN_/K ;%䴀#Wf$B4 zsXww:dZJ ?.`^bsg K88BbUy}'_us'JGR 'Xw2YO.< ¡ o>,߂dӖpP $k E1HwN_ʒ*'X{/N̚sr߻.Rn<>9i $ [?Nn]R* /2N0v$t)^frST=H}S;`z٬`wFR9k@GhOx^[/ȶ[n5$k_(2&2ӾUPde;(p~b*1ݎb),L"QWOuA [tjg[b.vEX+>!'!s8,{/͇Mie= 29ɎBsFd-s˻EO"J>%hy/$lšxpXc(Pl~ Yu5)ᯆ6 9= T1rsXָ3NDrt)ڗ1n/Z+g:e@\~$hH(l?0zLlK?{ w飄rw%&/{Ҩ`ʾqaM^򇃄-oD](: ˞Q(d<@Uj\Q3}hH!4MLfT\p6aQ^y k;;20D؞}XŮ/NLyBJsvl^BT yJ3<ݮNòmP.V QSҋ5C0]l+zHxÖZ5.*KeOG]eb;cHͬ XOL,{bS(]; ңn8siTq`h%[ bbu ȑxxG'l_XM5En.A:PNZ"4xYnI} ,Ǐ9Xh&U2RVޢ:?`j~XHŤS`(]c~TÆ#X @US ˷Fm&s{Nx4*+qMO\o9I|8-T<  "B˺T|?^T!f9+~1c[ K߫8ѥhkzۚmbYD}є ^]~uWw~hZVX9T W^ޠZh9:īLݤӘ}%T9Au3f(N0B"TId7iMZ+WEG)ceH\qOVxS@V"ڸ9 "?mS,`ߏ% G=m;W ಏmz)3HT.״HҕCR=A[;l1rh1]⌖ noQu2(8 d16USa'<֤$h!8Tu N+j&UKN`vmN˙E4[v>#hyasr \&':n,]>nSl;gRbo޸ӳ1&c]|#=/Pp~ P)JJ# )|5S#fT%R#R(leRC/uˠZcP>yn[cn,vVу7}v F^Qh=fpFX.bz\lmB]jX,ۂrvh{yCO/AfQRV\aTҨ4S4G[pKjq$ZKDj_'V(LU/62񎐻b qbEzfҵN.41 rIjh͆-hoCqsO^mFkUD=}zܚN'BBVS#ZzonMydW˚1g AT{Legvrz" 2,wq77ɋ 2/yp^T,%ƀBvyۈaQ'X x1Z?Iꋈ#ƟLEWC߹C>2I,Iku#6P% WܾSM x:?+YgXtĄpq&xg√dEñ(3:x*rrhR}leJFA4q"XFwã"RT][ObJWJ#ۅ3+>q{=:b?fQY#! ŽC騉X+x$7V #&9Yn4QߍԤ)88]şZ8WmlA:L ZQSǴ .LJ C?"%CN?]M&7Vیuv0mG 7V5fX" nI?tq FkYxwJTG,gF <ݑ$u|/ зt;)J1~K~&#*0@e׊JؐZjrl =r' w-;Vיa;\lZLSKRq[+=WgJat5ԕ#I pկYFi 1U{gTcʼ&CjLc})cBGU~OQ^?te &vJ &l4e}K+%Yv">nN+6+ ]XWΎ-q6B}$eX;'Ϸqjv>J,h`hh$"`fL&=;)$ptkN/vpO,ݛR哧4qd$AJ"k{k珼as1F8]' w %/#s.ZTn`\ ]ЄW e~H}WVK>NTV<+?.^Kf4LӘ\>V:JjVag.Q7_Kc.tdZ{ dbĸISwI-!ͭUt%ÚhQNᩝ|so&8ʕov ,':}~]3< ئuqw/ _LSWDT]M.7.gڃ 1yFlmxV$7v&*j\S*n8I|fǹm-+0-䌕: F!4*FjIO*!]U4BdZ2\4~Kpʙ2m1۴ȭnZcQGԎZɾ1՛ )z F^ոAC8;H5.**×Gyegq8߰>N=›7FBvr Ms s|<ҋPXF00{kM;ft=US YODb[oyGx"0>G=n#ՅRSGaGAqVUˌ5"nI3T~,<C?+“vg_YZŕ-7vaF+b~Ƕec Lj@ wOlFdTWOZT'IS ;dy*t"9}E&qKp܆@ݳu70nҢb=W= jV]QҴpp441y_Swj陀1%]#1ޮCo.%/y# pf̬ޚ:XU0N@SU?6E5DDhFL %ǟ ު}okzCu:|e>$9k r3eYSV<@+;uq eo ~| { =F}l O1wzDu&;Ci ~@GXXS,0$ԭpB/;Iee',_~tqabΧsH:\m?}*WgJnUD/ #I2Xo`SG!-3ǹ~z%g՟192_v0uе ծ$m|t۠1hM$W0  *bfG5(pII)FϯpZ|OZƪ_! E )3AiD>TRcߚ&EXziSswm\1պ")N0ʼnI Wjb !SC]2U;aF(9׀գ$oĶvϟQľGW9bTceߑڎ =1J ڃ7O =&ZQ•ɦ7X&h&! 3cMRt''([IRpÞ&(j5 dX,OlW6гZ]4C)vmjZ)ZS? ?0ڪLP\~$cDp$$Ӝ2~- UjAJ -f,ϟƍv,~LZ|ft3Ӡ]x;NڢFuƌ1F E Z}arsCbR1-&&8sOUƛC jqn|x&'Aim$ŸPz_l{dV¼$A1Y9<zT?E?G-BrFGÒK_3۵w¹;FGt%J2^cH^]l.LjrHB6thrT BH@ɸHJ^6F~}oI"*8* m\m'/s9BFOHe5Z"KW۾.>d&nc[5Lގw5^?5VЭH 0bMH=x]̶"vꁟ@7FNұyN- P&.90:9&2@ peZ[h8e2"W@l䳘W{q-Nz[ @UCXY+}bFURa1px2ԼSNӋ1i=Yt[! ' ~9!;uQO'N?d| ({ k~2{=N^ۃ7#&T|Dlq7ǯ%.ܚߨh3|4GE1hc6pdxxkzj9QCMص}[3T14; ! endstream endobj 70 0 obj << /Length1 1740 /Length2 11362 /Length3 0 /Length 12482 /Filter /FlateDecode >> stream xڍP- ]KCpw ơwwAKp3sWWT5zk ufQ3{M (`cdac@Al#Ӽ:AvwC^lƐ@E{; #+`cO@dPd4N KK|LLDmN Sc;1hno B% bl fwg 5 4 P2Ea P7;/)lgtt*v+r,+w!Ʀv ; 9PR`Avfm/. c?n U0 A69.r͒vf@;$@N@ӗ{wgkvvA ;34̜X5@@Yb^L,7/'Zn`B 2C'gf ShCh'~ "?v￿_ffogO#fTђ`N11{7'3'; }:aU1u:*ڙۿ_ҠkoBE@?cf3}aނ?RU{")g?tƶ "^ yYEP-49Wb$v/BgfbaK܀f* b4^z؀*`%|/gj_f?_V!igjo{'9yNN/xAO5y+=%`n{<Vߦ?/U `XF|\VKͿ?otm͛_j/R /`|)g|-ߐTN/'rxѠԅ X_2\_9^ X5Sg'T/݀3ojZoD]7G᎓o>p0 Bz$' Ūg/ȗHg2$x2{QK^uL.cAny z*r+TV@S i$fE: כ8WZ")^Vt<kj&~M 7Ykс“R)oc]+1WvF˹lP@$Hp!T_U貟i"#CF/%@ Uze>Fۗ|K{[N@)PO3e)5 y t*/˲3_!QH Sfl NwlWS6&i$A̞`M|[ƪn ֶc9#)Z5gcl$d MR0)Uj_V Q1efP+"d=p-?8UM @^'1l.3D\K/M[\YelA(bo"D WH" c؅ bSM1i>/No },  ʢs2Dv"gTsnyd`jGGdĺO|{A1V漵J*VtOm|cL[:vd|ImŻ9e= Ylhy+lr(A6VM%+!\H{2&{i9 \ \Hi &Lͮ{\:d@d;N(4'XQ 4AVfϊE?-8G8zVc( _:M%K{ ʸp4H5Vؽ3jbVqvkí̗响9)Rpv"J z Eݖ}Ƌ2{![ .2gqiv_FIi@L֘T]؃$&aT/Ez"<,><_xt-!Dc}dQ 0lir5Fr]̓\m'~e{S<fR`؂UJNF4 ɏ[ƪoH`h:צ9X+ɧ3"x)R6X/lQqиtĽXݷN|VWuX+$֞F: 41ЧGdiRF 3xrhD^%խ| O!PW1k]A/<ς xY: eX0 wiHL۹w~jl"k"&U6)[C3 'ǖl3ULl6 .PxWL1Y.|ͺ?#wZN1eo̓qWdċ;g9ę bi/9)G?>1刈D$ԝyu~|x ';nQn c3 ^6)C>!VTX :ic]gE%. άR2ԞÙOx 6>MkGM}⨯Wwfڱn.2ؿ1yZH4-bK!~՞ Fٔca<")Ġr\?FUAѫ"j6&c<'^9@[PE&n3L9]+? H KѝM ^L Q#D!Ct>xtly`rH1N!iBfK+1 j rӶrhbu!x\n~-Α^}8.%;E qv.wKLg͸SC8I%.t|ʁ & &&vw_0 Ȼě8;?WnLE{K IU`gE۵rJ%2PXM{3'ch.)P,5wuX[UwL=KؒݮfQON;wk%Kgǚ}Պ{:ި,Ň~>Η)r2M,O} m棋F+b9ai|peg/{酑$=7vVl#9.$l[&؎,mv:EΟQ *JH+jcpdHDt3 uRD. J>vLkqLbCz})xVSŶ4 "]@~WrLL58Ak"+Ȩ'$* YFa$236|g˅9|QahCOR_|Vb6 N06dw3p\*GUnkxQr vp{ Am+U={q]o=f|Ƶw?>.Y<[5W'k/ H()6l|-y+B (5' (c ά& iV~p3z$J\ 8`QӻhIfjmP2!Of1P}X,?/Qtw3.eU7K?y Iycn_C}yxKm+bOoA ̜3oزHQrknx iElJ]xy#4rg1DXCOsg=!X%B<_wU3ŚĨH:g<$85fG;( HO.T}s!*46$[Tb @Xxކhj@j2Ϗ+˧nc&{˥9ʋԺͬw{=fZɳTPHsɶ4#5U`y9+n7U{30%~PL=qz` ko^A{i>v5Ӹ%&)~hX$V;$oѭSNnxۻrK7t[,my?mTF.|c{mK-"7Oe+٬u M<3]1=l>ȼMn7ճR_t8/5˸_iҚ) |$;nDLg 0]12Qη|w>bLc={;.4ä'bt'2j5P{oҀwgpLpPj1*^ ȢQ{ecQN-#@#am_ExÍm"鱏T8O%DofVP`0"+XUi+c3R(( jS`hNƣkVH}̻kT"7y$}^Og%{N_ oF$aqޙ2XF"M%(;6IώIhԽ`}{mTgn9.`jL$=VQ%9䫽|Mm|AMT[ @ƴ#Ϫ- Km$m<*oQ_C^AӠ!lF˛,lj8d3KKM&*sm1M^a9h'V^HqVz\P cB|HKgK:Ijzg&:v1^4]v8 9+!ظX~- M`a~: NSxMAswWd 3\dTw>I~^Ç= ZZbpl.ߺ\'[x96qs{`3یPkm`g|gpeܞʫJԋ k1&NJ_EyW-e踓8dZM9a/kY5"etW놆O`ĸT~}_SJAw9JyZEs:[QxkK9XXNdU88o-*4%suMo5ǹYdx/1:íJK'tR*$>+WIJ<2}Tfڸ/+.'Mqsa.gf-147;'f񢷅t,TIlʊ>V5P!2^tL?9_8f`FZDzhS(HkD~=N3x?8?bk6@f U4mu"ԌW:c2< +7.KM->'K{&|v{ ϰ0g+C}>'0SAMCs/êcq) ObB xoN=+hbaL$@{װ3TVx:|u@}Teb:a]o`1Sװx<'JqM&f7 ʍ‰A'<³~#Ñ0/$)4mD;j4u?e0T @t(U}3rL!2Z]蔐rpmx򌷦$TPLX1"R6M#dɪ»tisrWI=hզJ#` V]&ǐ]zAc ɪK#24R<QL*\)8 (x?  S2ͤsB8<9:E5GNZ'Q\ņ1W4H,) dŐ>-fYԏǯG9~>hval9ӧ7'5AduQ4fuU=de{VFl9˜ r/N!kx&*z=/< e]Ye;j#"Z{;80I>r3O[]v48I~Ǽ @3&+%+Z_oícj( e_FTMe,qqM۝qһjԢ;)F(Z|<I]_xQ&1[w~IPCj#8(ߜdGҎY[z.ռSo VbdюI^Dz6yw{L.AfX'AZ?:ɝxHp!i#y՘M0(Nʇղ}7I[lBڬ2+r2L."ȁh}]k)a)(:{YRy5tŐE$mϔ׹T*q4ZV?ŃK eV @ NycvS61CKɽ&v9c5".z#znno@&~4NIOgmz=lmO#] .Mvlqpqa2fJpF3~5p$S> u2,Mp ީթdWS,ѹA:E!ˈ[|k974[YN Eed0q# [=pD]8ANTG.yh:(b/!99<}JK3% 8xC/r`CM :dKIrN%o{0VkȯdM)?w.*[r- ^5 pg, 8 P{)Ru?D馕P7:"KWrdU`dfo}s=}*Ey!jfb(])|%5`r(Ÿ/{o'ol&97\p-ÄHo#lWI嚙y03&snJ U_rҖ@*g9=`8- <Juo5m-Q 3 y=7'fZlh+JZ$ ]{Ό`H1_W%pGYT{ 6¶)5w­,wv;a9"euXa:|`7vdͷE&8A9aHѹr(dr ^Cp۬0C{:~/ ]V,ljIBJ#b ptV7XZ.͍=' 1{Y~6"hX&957ޣ>/Wekۚj>Gud=-SZ*>o~loB}Ql>JE БmQw}Ty"ןFo(p! 5Eٖu0H1,Wq$)nx huԒLW#qk))g04~)aZC̥a1/ʩ_Iş -7teXII>RMS,`&9njk=| iMUyzEH5&5;:tdVgiɌw}Ar0ғ`yE/c{C5[<7\R_֫C u|CXJ {L6:S()nHCӻZX[^os!S0*751WXADR>{dcp;w ƍ"kylł[2y_$c.L6V6<󳠊&5|luC ҥ'QoQU+ԬQ!H>![i*1\OBs[ĭGdsjO ^vs:0SuF B -!rn=e}SXm&c7W4χZ2pw_5M E2MQ> 8A>ݦ=U,+ۦlN7D( W1_./L%plBwdXKeY3}/찊X(yA%BHX9h]gM6@M (0,(lMMՇ߼)"Xq=x\)5^o>nb9{AtEZF+D fi2]'<)m+jX:76_ ȡ]O򋞾,xW踭W;s0h\l3ѯe~W\ QE~At`.ՃkfVrV V@5_,T*XlZz@BK~7i.u[}J|BKDG AUOw9q]ooQ30+5j-SġTWx=?;W;2@5"I0c+z#@; XS=~%u.Rǐ>:曆IB?y8G<}y QP0 "813n"jE>, lT#U"*_P@ȗKu)qF.2Y`9~~h`ma\˃[sŅ1A.kN[`2X[`b{Xf,M dgEݨ)i3%X$ƅ!WabOwPKl5l|f8SYp0v[M݂3bt' jCGp@en\?QkapE >ݱ/S^\5X>RbwP/ R Blc߶DS~י(Ӥxe<k endstream endobj 72 0 obj << /Length1 1452 /Length2 6598 /Length3 0 /Length 7572 /Filter /FlateDecode >> stream xڍu4lRZ{(BU5ck,H VQ{ګY[mU{Fkj՞}?}'$};a(k82e (PXXq&6](rPF!N預M7GHI DvDe*w hpWRneak@ҒNp4 At ;"GAp׿Ra02BB@+x 0vpW8 Ѕ8 r ( (銋pCh8@_CpA@@+;!H/`pOr8pwbs9V@p E#1@W/BnY SF99W_ p(ڽL@% 0_ `nBH\C/-.'NWz/goo53`Eq?>w8voÿ%RC@1k-IOvnG  G/ i MI D@IYo쿵 z' qE ޿V(o.,. }w y3 nZpˁoWcUցnNm@p롈Q\$GpjHW?@"~8(a{U\qcV{d8n݇*Fq xq- ! p}6(41AK(_@G8!o_M@h\o{¡ӓ(l}ePEfA+;)G&"$.Q83ZXt'laߪrOU^b5[vxC[ux9IJl2E.7]|S1qXR3IݛW/X6b{ xD%Ғk9&(;{-_=`;sMU^1rgYEiT>jt:9H{sw8M_œn0P6禭ء%J%g }?|R1opBWGwÍ/9ؽ~~}JTh 餺&;W%yfv領_fai"XYgP1f]XfB dQ{ӖIH9 :66Bz]˟IWOh]̆<̨ڟΣ7U5~"R]0W*AVRRl&9szE(I濿d>~[TQ} lQ|n `*kR<My9xʨ9}kE]hFw#D <{è PylѕQTmszfP7)Ë  Ṫ"Ф~ TA,y0yĄ& 6f(xo`2ոbWRM!7AOHM˧[L}]7Sp5#Y.n双/CW^)Dz=.`*?te^Ӏ+gsac);OM2I$[!=kb58s;rޯ-|bdO/ֽhx'qϖ9*82wݎh<]iEw0ey?vfSz ɮos& ˇ.m1eD7}8_d[׭|b/3PH~-cЎX!zWu41\C#d޿*<ִp{ #_HhaE.T'і>c=;'LD+r$hW"T\6=#wO /?ؕ8ߛ꜌+ R_osD?YJHhȫajJҗ tV4{ 4=IbK-l,&Dbc,0Ucokqխ/]26%&7uںiTu-ú9hi/Jپ Y4S9WJZt1&JZ  FZKrvAS$6iOhCrtZ%VA}[^){&,caܹOWɭռVH0k+qVhZe4#; lڃo aCd]V3nyD& +c#/xR5 L>_b8w8MPps >ռSqfd@eT$}1pj̵εVף~+c(`2Pzd_ 8fMx%{Ħ4{xQUjsP\ *!{&ys ao ءJxڟM`Ƥn#[ 1QY>KMUpEZ&$`p_j,7 lJe_1ɠf3A?ZwozD2֌ͣ/^[bQ1L}a۠Į߂=}ATaKJ^/qO,?y}諸=5x K1 Oᚧ>?ՙٱd%,~9ZeU`?[X)ƠW,vJh-}G=t'O<$p\ C2ߣ:BGZC'DY ;5H拾P,NquSeS^|EpYC-w"ш2GL?WJ~X Z%}?j2_v^%Ѹ˂s L?"7etל '.%Q_ښ$}v+nLtp320] O^tӶ9gf¾uǎt:3!^GFw6Ĝ77XD5)zRc&}L&mnVʾHBs\lօ*/&yRnNtڏ3aꗑ1%ukOO P}m@n_)mr?,abf֋Ui{z9gϿ@=mEXjFM{u#J&8!4Q&]V~lm~Lz0@{`jeTrAM;hRZzW)L>WHAuESm+7$ IhҺ>}Qʎ*!l佸gD^}YP{qb)7U/qL(J$35w8 qn;ЌX>"T1f䇗/#+Ze H=n^:*:Q/SX b~UVNMT0 r3dž͆t'[k=7ks}zz!M0bCO"?)'܄gܳȄHʓs#=싍G^ύ >\`8]R]ey 3%oWTN2,V_^Ɂ˨s/Vk,ޠe164N*[LThv2`=~b:(yL+; i;LVyƜ>z`s_ #ls)S̍T "A 0r4rnӕX%|B[Y!zlF$Rf]booLLtƫZ;N WPoI8ިrK))Q|K̭˸ x+!ϑyMOHM'=1xv loڄv;onL\$~މak#(Y)=Cfdyt2LQzfoư&|rؔwz")N|˖ >Z+'D7zy1Eu+M{R,F"N!Xӂ1iB'D5Dϩv| p8d=q߅b&9];tΥ5)uIsH1[?j` %)HmN"gq^6pYU. :.* od[)Aw{ %Dz G/׬XhlX2/orV3͍n^RP?ά|\"3$𑑄M~\1V endstream endobj 74 0 obj << /Length1 1536 /Length2 7666 /Length3 0 /Length 8695 /Filter /FlateDecode >> stream xڍT6  C!)5CKwwHt(-t s[3kk׽h5u8aȪ) y9y0tN͘ 7w{T?d `8&#`P E< 5N2 qdk `b!nV`(@ 8#v;t`V`]D807[ v= qyB ΐqb2tl^`7ap@Pk9@GIW;8A.wB?`++ c;A po8; vr!`{'%"i-AozVn.pwNw{~Aܲs8ۻ+{C5Vv)_@dh?9,n!#: 쎘AĔ9V0/}0@ ~1?pqBapD `sf!>oD\\\\N@p ]np{?a<-"|e Gbif%6A‹ca֥!R3tFN^J§CeV#M9®-eT J6" jrA$MX^ IkAܗLo/z1U(*ww6TS Ԇ[n2l:'~3TϦSL[0:?@>//:L)LJVRs[P=RPXGVsX8fm8[,(󊗿?T(`.6ZlUA;}1rtީ\K1iX:+cNBaӋvEPw`qVwBH\F@5ǂڋI".gA_GNƄ}Df%],峯U _D#+cjiqğ[SYnJ|%0 *@AS/iY}5;8yQLB'THޞ+lx#+xD7t~eZ5OѤR@ӷ~sV\0[0G!/t~+y| yŢħ׬b.~X&={{r 2SC PHW"e$ޜo ȬJەUD?{bT=A\t%>~d~CfƷ+*ֲh7[qJV ;vB*NiiGv"1]|=YllӲۓf+[.qL44|v]/}ʯL͗;7(ZlÆp51ZpV +n6Q|q^m6G>xmU6;orRn:K?&/z9; z>:µP&C8v9Rje"̫(N /SnɼmFak%HXr5a :q[ThS(di&Bt{;1rAkۀ+K\NxN!ҦJSžjUÅmuxCNE v$;ى9ۚ+8o]__䑉`TȟoV[~@CEjËl)aMU@0P-: +nacj 2H^H$5I$[Z?>VFPҽ He7NfP{-Fdde  bl;e|%exij/ǷUJ;qv殐$:]UPoBڳRlKA;.pÍb4->^LppRҜ̷ *~cכ5?#Sr?~xm͋op7;6ԙ ]s‡xH ֧325L"hIqpjdqSii҂i] t9>1̬~Q~ol WwzdC_Ԭ0otu笫)H_2^VݞiIs?~4ׇaB\q-$x+$WF^loI)Neqš!<%a!dGئ;)yA'7KOW*zd ȦzȆ~0H1{>SsA-}l8ikL(ӂG: cXd^Eoqs컅'gƦ&RF8^t?9z?5=l]d3ɰ\-ěH.x6M9 `^ >ٮeQF Yd3f=R"ֆzꄻ4QohK8G?DiY)F1 o0Hꅔp^,`W K:'X9:vE30%( _HpH ?iOrur:YF,Wu(Xm ]ߔ61 >뢫((V{)g2/O< (4 ?[bE*q4x_`\xѧ$}Izn45jYۑ] w WaاьE1~2|Sy"N|Nڎ׸I&{wxNlג iF`ΡyEoM0%*Yo e/1ln )zEN }țvw>C[mdِs}G+W"0u!}#|U)swMP$zӸxŧGUDwvMxe@* "2v~eg[קf̛GÝuƥ kBr~4;b<1_"֟uk%ȶsVyYZM{/87D8j:˼1)cO߬/10 +(kW;UFgZ"Ng1*TDipLR/s!,)'fЏHeE֤}bi4 KV1`꼈>T %q{#SC+X7bk7Eko8cSEJsc'.[z#FKcQ@B7oΥnl?^/I!]ƳX#T "P#%+`YJ!:#WV 5yȇ!R΄sd_؜ h*ma`;V.o4E@QʶBv63 /zN&%|qKq1J}-?"Xuy! /$C>q'Oc_p\]'FśVQ:&zoWPmCp$Dw?P{Q[+,~YkΗf|=PWl&*K?¯4:k\>/i ~=[@6;3T5- ϧw[c#Ϟol95UʢGTUR!zOەiWPz/wJqI<}tymlDɹ1RFIeG8hbފ͑~@I޵ }tլVgXzڹZ!L:C$,r]ګ+a+X 7sThd:1Fxv~ =ɦɬbi=YW8ƽ7LPPc} n0";'6Sۦ^WqfU=/@*8\$h3jXi= di?Sas}2^NkJsq׭Zj}ktP0rMGR{3wƄp 9{tR+;/21P~{=8cm鱟y9!5ZD$\w?oOik-\ny<[cɽѡX\ù<#Y mA{O Ӊ)w㨗¾bsP`kqmy嗞7b3RܕL,,(p?Ңf;4hZV{KЀGiZ_W#ɧDY>'qD:A\,J~8խͼZN#X6sN:v;Sb>PeyβޓK{U/0O0dX뤴b_?-9aDP%%lnzQB4\->xjD]4sC5tqO߭ N˳Ticf <j9* <șbbsv RbEl wH ri$Ua29f>J!t*hqy(L2d~\|sPݯY/oL5P?X9}jEEf< e~{r/:e9R3ӍN_c>UPfD1+=W83"TRT}i[Yt,˾PF#YN=N\;i F]d3ip(c6gSN/=F4ϝtor : ~.I (r ]cS'ɼ^Hh~>Qf!~%QPV7S˜_Dž2_/HIk؅W~+3'c%F]zgO&c24)^Y¿΅Q?ZGy qk4ݰgc,8a ;7k^1K>P]\W1Ƽ\yGc&FdqRvЬt֣)-fMyR }RVAYCXl#IVjd+9%ӽ뺙UGI*U'HvN@P毧F(`ToAő&m 6Ą{!F_puC)2xN@Ã.d& ~.Cjlf}(*pŰ~2^ySSua){~@D)1AW8c`׳\?0SYr.+藶W_n.rXqJ&5xzܮV7ɷuD#|3cIMKUĔy ? QͳdDQ3úM@[?&{Gc b;k/Nq?CtإM8 VE&E [&1|3E%w eps4= [_ Vno 6nXտ=H[^IFتQR1R<%c3؄_Dbgݦ&h7[~=ryy{.řh7ź4̓2CRΆCZLf~r57[ZTҗ1 YF'Y P]N~`W?'EBlHl#8J]gA4Z!u'WN1O9Ͷ*"z]P>2L@nlnWx}VM&):'C<,7}'腖x8/JոЃ}zY\fIk[gQa_<gXSE8ki~ūd@~Z94zg˒y+y0{*"Et=g!Sag3mJq{)t:RRg:qdB Eg/=y$G3]1׷HcwSj7 29y *;X =+\tޟkL# dؘVtV=4qܠkĐh`S\",Ϊބ3c2fr)_e^{+h.e)mnɺBXU}5b4gOJg̦7/ :,O4=e|oR0l/ow9Ȫ6R(IKIujh5#8AK4.dIXgI%/@2* b⌟_$c([c Sb) lRb|*(|tO{_\Wʇ ZڜN<cFȓN[AsD3IgTVFRmhʹvQ3j)&byr\7@`2&⮌Zp8tNwITEn)/iܵuDP]Z<|1w^LŇw^V Nc2R7_o7pIb66ǒJ3eՇmK{￁M|qM]]0Iz5Ksu*w9kH\B%L+Q ]1)s(#x+~A9(邊NKPB|^P7$ik~e8L@QCP zm.SiΤډd~fr3Y,P]K4U ^ލq!6^ț*u4@󭄪8VE.s Zm넴ޱoMwz,~D&ctXҡ< f!7> stream xڌT%z MI;۶mdζ=&5d۶mx;xsj_"'VR63J؁x*L&&V&&xrr5Kgbxr _@#w󻝼 b`f0s0s01Xch3r43d@@'xrQ;{GKs 420sss:ZF@&F6U;Kpvadtssc0ubs4Y:[TN@GW)#[_jNU̜݌w 2:ޓT@_r #%Og#;[{#%`fi(J18;@8ٽYY@BX`NozN&N N6Pd#{Av@Y:MdAvn %. K&"d@g;'7+X0^;/{;{; +<33` 4] 4 {?~I}L@69_F%5 qaڿW'"bgcг3X2> ?JF 3;_ޛ'C v PLL&￘?.(o pSMGmdki*8q&SZ_ymFK' Kw_;),xl?3~Pg ~ORdbgᱰsЮF5dx y R[JYIh݀ilgzXsw)̱7"8Zx|,_fd\@nw.éFzS,{2q~M@HPH7mi>恝y[ 5Vv'I(.8c5Wbۺ(j[#nt%b =|a zb]?"nYZ>|!O]$5hӸx$vC579E<4EeS[]eN qOjY&\+uv? %B C`X WL*O6a.HIj/_]lML0\n|#1s]2[W#w۲|[ /[~f!Z&Q`[|3U_.TЕXųy~R #ˠT2@/tWʌ8Qtyqr' o?Kb,D3w#`B5̻-Noto4aз/6卯a>mu|5+xT\C+Τ#,,h+.w%>6+~{)E$^zGY֧`Ж?˫&|n=pg_}Muuw\uR s~|5ĴFPz)/ T6Ջc ۬}1a +.tImYeY:lAY/p"-KTȑ],LSJdd6Oe :8GOs,ߌ+=dqS\|Xq{ԱP˪Ktgg*hXX-M1}%-J -rPP8:Z}WYHjJo7AYAxOA~ .Xц6^`wBf֔\'VȠnIU:Ktbɯ˿.D"(+qm=U# yEGdy q~L̐˃23a_@)F~}p> I$K*3Cy^,\'G W(yINn2i9Wys x W ŚK>Y#4Gd'n@:pH~E7 8ȱXo&TNȷSjޜ@ #+m!`emS>NiUNt츨-i[Yb>J Z'.4zJH"[bA&f cGI/oʉx4%˖jX1 [S\yàPUr _+aiURfuSozO>ͿÔG%s^ϧdgP)j?+ H/;n%QsvS>gYhSN/u֪u]Pj9M0 @2rXTIBU{YC?kd%j֖SW;AX'rzKFy =^hgrkˍ9l mN1:{.A iRnR12a֍C̝OVNRٷAգؠ#z7Vs?2 t'ҚyzmTxV e^N7@^5̅uis'-ᘻ-ܑPɄH)=(K#JJw%fzدxZ,fhv/}AwIp6: 5.T=shʉ =w LU#id9u;2N&HSO} EGe nUfQ\>Mۑo9t*vJ%_QjB{}V Qhl*k5H ;K70,h_̓0K>\:aZ@IQɂX!K5X_yc Ɋsk;*۴)Dž~*nMɿdKpó %Jýw8 h#撲ėoj y3b@.6r ZOqsQ̢J]UR$D2XF,' 0қki~(R*|sT%KO[O^u :`x(I;x\vZ{h*W|$_)_daXZ_@z5Ոj<*gQMaWҖ,%䆊׃*Ê b_Y'T7 &eq 3}9 ~S`q|2{:bѦ"ooK`,Ķga]_`Ζ Ets)ƅ.񫄵ʨ\ãyb#Ä8:)xLu6ḃu-)hoD8 |Li4mM]vwM>HTY"(KMzleRx%(K)|8/M'C?;.q~UcDiWS]~q+$]2i{Y-z@T6RJd"ީ~ξR<#^h_!`H04uc2i*ġ×eEo&Y9zגG2U1{p@ 0%P沿M/q*Y|;!Ҹ>Hf}-+?NѺ`-L=k֜rlXЋu Q͋+-VX3gVͬۃJIv5 O(Ό1ÛlAOb>0f%dE=zBg 0yn}GMPҎgEfkڨ.e+]-gǓhڎnny,~Pɇ\$;"їaPo6 4ZlqLpvim$*lBG9z@IS%5[}d+,n7 l'DWukҎmy)3z=דvYcl7t UvL9_W1c<)Rr4dxFnۧc#B=~(gRv@aN_3h+m?{^E%E qMP>A ; rNWJ]zu#h1g_7Bh[W3Hb ='GĺTKdMuk=zԗC<4C߾ juƲII1 J~rx?)pLݛw"̀h,*$9 Ucdq~~p)ֺ7-N|{yE_(?.LpA>EB#ʉܾMX }fD@1 /H[CZIM5t B.mtO0lOTCRnv L5o]ء j"3agX"Gj5|s\pDCLf;Q gP1W_ {n7%^Hf)8:dGݽO/w  xSڽUb݁HR.o=/)ӕYyI^X,;}`V|;M#pX u,@yQonQg/{\#E%eq/KqvA5y3=7Z+Lʨ,5gaZ$,.1VW' !VCFQxvNߞ6O;jo~Ŗ5Hu TԊ BQ!K|+3a1 0SM#5UK5 {ƪ{1-f9rV4H-΅F]qn90ͳnjEPn!?A(^RIxn󥧓wHOnL*zd>YɌmsa0sUn~ܸYߦu 2i˿/LqPa['zS_#1+'*^qe\;d.C5Vcc?*W,whC.. ޒ;QhZQe SA5۝|_ye[߸Xf SvO@XޥϗJ+l*-gOoD~LeD3 K;5R!\"Iԍս{|rXe~\JD{[sJbM\>nNGHf& 9r.O>>/{`0GC";XnDŽu/ V@DYY^9_AE0N.ESw\ =Ye:^rِ&F]Uz$zl<8(IfmSyp:)Ve60(\mO&eډ]hwo)sXv6/c$I]ŷ3^uHW^ϒ-Y{e&V gmId ʥnak}GǫoRy< Jx I+h[FE&/:%%9Rg")=v?*]n .hNj4̕a~q%~^f QJW\{~IpT=qq*О[t]:r; ozWrS6p3#3"#1'$hxOmœqMupY-UkLE) K\o>2 Xc%emЈ0JB7f$Yt\hh捇3X8bR슅RDlRqD֥W߭~( W'‚] + +qP-.Sp7`)v&K6,~WkGRW8yd\z)JQTP%kR{9O^ƱuWYJbzVՊq]dwj,NR TY x|!b-1%p|3ݢkI2P ߆FLw{l$3z*a4^D o/Ix 8PAtjᄽdjڇ 5#aLI8#sHnj` ;Y"mUЁtϣ!z2¤53kvKt+t5Y'v~"lxN؃^y̗Z}[Z SGSx#]:FXEYm;@FP"nZǗ'`\?l%tM˸[u>rldd2! )N,Ld?5霓2(zKH1='gsV i6s\7o(rt|RSi[.g Y!p49Z\&ĖPye4qR䐹bwK 0TdFj/YdBe_ߣu:MsWR8 vWuTU1Za5$"Kk Gf0{S'\QK#nŇW7 哎3B@F"[gAVn<Oĩ#8nW|=2'ٶT-iy'%oqhmL7fm#N~$g'ď<6֗iZ.[Z\lU$ũxidK)^RٚYJ?ҲA^W 1+Mx@_8-eݯLTltIl  䳟 mk#|-qQHζDyÅnT%/io~:h&1"vSK { MBT}/Ƙd &2r655ʲVUɸNrlJW\2H"A=5rbKwiD'/ؑ:ZKӔGEgYBw~4x3[K̞fM $=ݒ٧WdPh~d!%gWʺx$T*oKK\:Y}?eὬ%qP/D!u #W1 ڌWB 813옰A~VPh~@ޱ2E#f\ uIt0 f[/D&:zDTzĚ1M1 gG` g牡*:3::OVҩV6Nhx0j7PB7O dʤ$tue0Exz$1Bj<ߏZ6,cl_ᢙPUAgvqē0 # 41/OFP:I(T{+,n 5,jL^Z-6*?0ޔjw ftAVX94`l;k()/˅5bK3(.KbJ)a 5b.zLD6BM?*QMH{M:R=FY'>a[aV#rT]A:%m\DTl36'(luI2I4d9YԺ7 L~b  v "eeP%g\Z'n0۠GQ'`seyi8'4TUry#Gp3"TY TPw~leYrlP/ H<"Bѿ\a?He14|q:ndmP܅-Y ^2`mqo0Po#&v/`y3TQI2 [mGeIemzfo oZDi9d]E}Nzx`D(e{ܬYmMJ&rp,$7h6X?:e'pWdOw72%x "XGTo ssME䨿"A vW7EIzڙbC|/"ѱ#$*aΎ}i5,Xy.Z~pHO 2@ Jbpk{Is`>NFͷ2eDUmX JNƪʨ6:6&/m9[?׮HHˣ6,ԹjĴ5b^\ ϑbG *@ vsvSix6$|NВ: V9RUߗc*cđX6|ܬws+[ >#hO fo!q=yyQɱc6>1S\gO8\k˭ ~Xx/`Rq҄Pbj:zP.S염VN+yG@?ZhewA}*SbsQ8끆8eOa`FoKV&ScreD 2 i*>rftoQBVv(V0ӈp6O {iY+K͇[ nڬC8m_S(??3_Vc%84ɴ^C]AcP`ÒA}3SUUe&`UM:WyY* ]BnU Qa!`P$*RIC [L[@ؼ,otW9ɲ+rh۶H:IK ʛRТlgQװzFqyԱ|k.IA1>v_\FTFbю t lД,~hFP5KoG(M"=Lb"s@9S- |2>a5&lq`VqĘї#:6Yȥ-J!1s-:kF$H>~>5%MfbbV;E(Ⴇp/.) 6T{؏] QIJ_` aPbJ0}-<4NUzx.!}'KT6 '_`nJMgbߠ[DY23^7=6[s ߶rb:+iX0pN0Ȉaw+ a/)lxoaBq5 ް Q86R 䕵/Bv"r@=h<))s&DVu$4%ذR˧1qsiuPRFq!c7Bڎ-djl'Zef:I?)P?2aMxtXfLx$LZu: JɵrڎAݥBw eps>s't_JxF֒JBQ5Bj$~1HmXV s/̙7, Z;GXa!K5'VcteMe! #&m&rhT-i_bǶu gM┺_d3H2GnПk ʌuֹ}R&5poѭR~t׉j&[&Q 1u2Τ^H%Ѱ$~Ҡ~.)FG5S\#,e K}G,HSo :V5 ~:U(8I[ke A%̂x Xp3Њ\E_k((>霤 =6h'nCץ]rAc2R'p^u ևhG䝴C]ϰqDRv>+Ғ%ЬPYDڪY21Q&>nAd*7J/LUQV;ļbO2[?ę`<e״82U21h+za>fӁ>%hP;wȞN٤]O}Z)6I$xY/x蠏rxv ѼD $#[sڷYHg. =nαm(%p32:Q4hPl/32?ﭥ#cצN =NaFW!p=N Mﭜ%DDfBiCMu|%U(G%e?AuߺiʏS]͝+AKLVEiyyXm،QǦ9pPa-zkPw\ ύ~R ׿E>q\IVŔ3Q*9BYoNC 5 si:U68{Rd_o*BgkXKVk6X]D.g*7⅁,Z7sFį8yc/ SaL9Ҷ~5bo5MubQvԁO$3WNBJH#{hՓjP#jl-n0Z39Aؙyy$,Yۻxi1&\U'}d QM9ITQH(j~/-7u 9`4Wnqܶd_~ ֩*UF2R}Ox잕:.]n9i5L@G@Op!y7$%hIz9ق#Aw vSmtɍa\@@e-LK s!׸Sz “k~rI Rכib3Dڳϔ`xJA.S}C~bz⤿H݇Υ٫ @<\ /"=mZ[3A݈c\W8n.X{zjX%:䩅z2| 74-H˽t~%PsnT_aqsc0zV'M[ 0ԏ06eiQmEh Y3-M.Vɇnly\V:c>_`2}z 4ᇧciDuO\ aTlAH'&$Has(͔kfl2my$͏ n8z?o3T:Iu 179!7;$7#V/nEEp\yz'|ӯn~ZEFP9\ L0UMNwhF.,Rd]՗\xHY&@$bQ qL #O"RQG+ma88-x+SP&Par.숱7/y&\'v$|ze\l8*B+ȯ[b%\*TK(b5vbYRb\YEU?cPt*3^Cmo`kxJ16#|wvtEFؑ~BK<\@ L96`=>̥^7:U|D쯱!\%Ky*-"$.^UݱW6Wr7q7/`m9]߁o6͓R0 c#ngΛ~Zi^̠ NNw|xa*~J3D;l);l1_~4GFLV@9n@m!5F΂@ȔX[rlpqzr)|'nCy ,P3h1vm%c/enp9g#4,z Z4rʦf4wD̟;U<^Ӛfv [ mkRP(HM1sv~djqkSx@ݠ*:AډNf莏Xyq'.;yCKN- 2Mo>Þ?1$Q"dnpiR͸Rif^[8u]ٚ 2OcWjkl-)'x[Q=f'(,9;>; qj+yV&uo;qtRHB^AF i7LoZr>b,kCͨs~xp8#9J<ů{BLB"rҬVE3P>P%}4{+6eO?aې0U-s>w~ ע- 0߸'M/9Hi-v`Bh,$PchVzca~ qo{4=٣w|bEo8G*u'5Ҁ~k`PZO}T1] 6B |1{{bA싧{QrgJdZM%EIdD4MtHF(",L֓\Yà· .>t" O׳I#zM1a 1= #%OY -ENZvMO5C[bXG[w-\{oO#FRߺUI.2ClYē~;rzv CYh)Z(~uCBI @F&_6C;7ɬk}fPm 5 12r\u2?:5P:InfbN51cxNp6]֔:(YhuK|J b*p#֘q&ivZBd>i 2Mānw4V.9/X;R MdnB4lN?\mv1f=D87ɽ>(qrԄOP1{$3Ó`pi?MV P/gBm)#) / =@.e̎lﶶ2^\¤1K*d6XĔ|:92>v=!|\9+fA\|-V5˳H(J]V*i7y@W#sa^(ҭaxܳV݊BA$pX1\NO7:EYQv=c5frW*x,N*ۙ㘾؛+0W6*D˭\ endstream endobj 78 0 obj << /Length1 1576 /Length2 7740 /Length3 0 /Length 8788 /Filter /FlateDecode >> stream xڍtTn6t#0DFw7% 5؀c (" ] "!)tJwzYϐWf Qu!y%mA( ⳲA.`|V_J”AH J IA PoG7$@n0>upDa Pp v @t*ځ\nvP?RpH;"pI~~ooo>A E:  EraƇ 0rz \v* C -.ǁWo|+W"(w0Ba{ ŇA@0/G*lQo*@(C@H>/Ҡ+B`H_S" v3 "à \P b;c+/( F1(@=OH6 _@!( (b>x DiO%J^`7˯h`?6EE7?0WPD !.3?A߄0{7 M/Up1㆒2-"@;ԗd+K}!UOf rR'n݀#ȟMֆm@PۡspPUE9S@w zn_o W/jQjVM:gI @_`oe`nHTE/`5Qaa?jy]A* #(5|P7O?{FE]<={@P/?*M*tD@W v78G[<s[}6A >;I7;p*zoO2돞s =/p8+C iHp2]o7F N6]oşL;r[F{I3f3{M|wOq"Bsn5ڞҹuJчWcq!%9_h ypO2i&s / &\|k$A֜lh_q3]zu"b( U3Mus֡$- ?&Ӹ>bͶ<)[]Z˼ZM\S(GʴZ&XHz^-QtѺCU)`)xRq+b\_C ȷaOUͨZc NU4;,&O%dgב=@o#}O*?o!\/)K-٣r?run%$9g=ۄv-j*q~z^-E&qL5^< %~AY!9[5yR({:R֛qQƭPуeL4hʤ :Mvw]^kϼt ݜ㣈0KlI k,VnbK!f✕DS]|g\Gwguz42mnbphDrc(c3n\O9ţz/`kX\8&X:<&Lǐcfrl{=b8W-BxFTkb=?=a#g8Vr`j#4}utk&L5^>:]y48i -mRAuȍ*{S?ds&mC~D#^Wٻ?Iuqz;upr1G0:"? I #gf|U_0{K3ViӼYT.mS*伺t>qkfV?$MKN|6R ;v3ZK#@;d+#_QsoE]~l@'*٪ hʾz@#6;^X߶Bv)ùB[!e# }/2kdJ$Ɠ|q5\M`ТgZ .+0sz|kԆ=`r.U&}Vt@GHN4[\GW}vyԥ)2 ?6RG;, oP(:o+G#f};_E̖~S_\PƠ&*kՉX#f׷BK*JBI6+XSނOɟPy>2RPxe=wD*h_نE^&GmU"R,Ycz]!3ʉ7mE\*x"Iw/i]K[s_L=+een3pq4i'}ii4E^0؇SiJ ykþ-IIHWIl\f&OHXZT^|gh-<.YA%w=xRnh/PżMANz 2ՖH_CEn6z3|`L*?1ne[!(4Nv`3 RYBg oNxrpj2>aZ6 F_ SVyR-cO`X[@} ݢg-OP@KlEs~렉NM P}2$#M~(f|Tvl!܄}@\#N#W om^46]07SyOSG躠V~]^6 H!j:Mu 18RZ)V Aw%W? \=;_I1H;`SQ k#!< T{!&Vk7\k;w6O,0HToҵG8x&!m:b癛 Ѫ|k)FtQ>Iۏ?+}7$ rn\ M}S5hQKZctx9yE!dinp.QEiЁ@=zp,9!C/›e jGV>C>!uݷ*AUHqj@Ig)cޗe3gIXoޠJ#yFň\*BDaf_In5f{DoB?V3g}{h?#;"y-8&-%3%]!9$\VtL,rz M8W{O\8?NuϤpׂݬ7<46n:qumS]`ÞCGɝZ4r*EB'sshEC!#KfB\52E}R@Sohs8~lZI|~<<] #|iP/fIx>T X&ؐUV+Vq ,Qnk\eǧ(ȃ!W{Ɗ:1z~uɣR8fS HiPǹpN.\@n;ccyt7Ι'v1*"/59C;\cXVfZ`)`F4re$!@Zl94 [zkM*)F>O6uu2ϳIhR5gڹduKclc@l(]zOsBGنLmE5~' l|y'RfZ+ScH*6?V<1^V42yK|@ɺ|!HbqYho¥3̓Ӭ.2^RR+1%q]<0?cCB7Ods~ bY+D?ڦzdGLx~/̶.8Ϟȱ64ʋ_ iyEiJzHضkzEͭhu4AHTFC\3n۴)^^\˜svʄlSޱbQQ+Fl⿜+zCqشAm5**Pa)%VN| x`'n@<4kVu' -_bT$tĢ}& Wc>i/Uy |,1ojPǮ ! ۩ż*hE|>̚Ѩܾq+d2 A^x7.w)o^3@Ē2vDh*OS>RtąY.6X޾b- ,罟_")61Q(f0wRg&xX]i1uA&$|eFAظWGɄÃ]r={ּI/ZM1lƻc _~}%W ̚zP5O:$0#Z>hLY`Đ(.#5/J|E`:|! toǔW<®ʭui q& ïٹKF*q?ynXu:w$!wG=uT%7bM7y1՛ڪB"-ftLi+ZO30/F,`}~"wiŝΎP5??rW>q˳(^{R2h_Wlr*VʖZܐ\m)T?kQ`̱S __W[oŗzIFc*tOE>-\ُYKng+M'GPlZއy!c&kQ]ϱ'ׁJkҿcpqpRsU_?7ܢ/7< @Uu?k&'ޣޅ@7wW2 ڜ6,|$y!iz+ g?o݇ :n[ˢѸ,39܏\?9!!RY;!PWy: endstream endobj 80 0 obj << /Length1 2201 /Length2 15520 /Length3 0 /Length 16825 /Filter /FlateDecode >> stream xڌP[ ;www݂Kpwww.!p9畜{aVݽzw?3CJ(H+`dcvec(0`II-6ÒlA;~؄?x26I'K#3=@X C: غٛ:~[!%+5@FhPhchttܦ\...tVt6&43GSh 4%M /et%S3m]큀!ㄓ(! Z,/ ߽017ܿO6Vnf&c3K @VTՑomQ㼾`hof@`fD|tYH hW}f@Ïf-m\= ͬadKlmf7ft200sv)_l;2(򰵱z?z8;N@/:22 @3k??@˷7sh2|#᯿/#kK?^ZE@JX_qx23hX,vNFh*o6pKG#SAoo6 P|-VÏcW:YZַ2t7c?Bc7/UM9Y_vXXff@#93GCn#5Pg >yqW)E m;&V6,x1<?dm?>ymaQ6V_!v8"E z? @/1% 1G>?#G?#A_ G"Gc? 9}GY/hEdPaA7/]zS7[S?R9,C?JPPjQ\ۏ kK+㿭Z?TZ:9#؇O?B98 ,'3dsg``T1qǥ|uPQ܁j졡Gg~R~,@+vekym`S $j %NJ} t"eU@H/=*oӖzx_ 3mSuxpi<yYvI9q > /TI}~-R+'5\"rŃBrECɞz':b.b~^p(Wbr&G! KE#4ƋUq$Od ̾APYdSn/Ql5/ rM.q# W/B榽 %+?S䢨ί)bqm⽥7 HBjG/ ;Lq3x{OO AhId ',~GT;,! x.IqYW*GiC3%^^m7BkeDi^7OZU;#i `~ҍ*C᰽ SJ(psS.v+F?SgO*\s_YfRm!~)Fp1Ӣ198L s8 neRS՞1x*=5+$߸2B,@ zoMiN$ĎWpr%=ZXӁ!~TDM8{6AƂm߅bÏψ<+#h(C(Hڒ_6Ƣ;y>\/]-ݧ1a| ѿ12 s\ 4Eᦓ(ߊkH# q [g^]W%gtؗO+)ww*`ꩻg6䙈I©q,Y*NY"\gAʁm^J$km/au_:QͿ&D:: | TB ))mCH'*ו]aчk\sWk}hza'+ۧ,FWW&k~OG /ӎh=YY̶Z20S"5VB8?*k4]2$6p*,.D. t<\ %+ p$4̉fZcLZlvݜFu.~=E)ySO^>ыVMB仭7f1obbOV)?_֥ g!!Fv嫘;NnC>c4AxU_XWˏ׭Mݮ+-\&Yc'®DT!AIT"*Hh b{[~CS$^J/z$+Y%hHmX~vҭ΍3PVS. ":~D#BYJE)ocYOr<Ҟg):FH Ha2Ř. w--K[\|;5c6f vTtAN`JD2@>o8oA)f@**AmM27YAó^#=Sk>ڻPZvE.Q7oIF.8p# ]AB Ϯ sV)2I/mpׂnE&K%~U}vsH"kK /a/RiG,x 'ɨtED ٖ*S@_4=}TR\7b7!֘X@66F47rq}Z]E.3J9Lbs>cv+zA"̤Y~He/deQ$!^"mX)Pq@teFhn IE]Ev.TObTEi99VS-9<8UY>>6Oᐮ=GD.<ڍ S#\(fItZQ `.rr]5eCaǥ~2π'ƻ,6V0/M8+stS>%~ QE}ZwS/d“Yu_Q{u 02uoہòg'w ⯽G{眘+r^Sٍn iJ-"Xp?mlXP[X4h. ǒ&ޞo8[e'j0n|[c+2hδ:UYZhpd>z(21M $>Pg (q?n DžC8% a5bQdHmP!9ۭnM<3|3/T2i. 5nB~@Gp 2XcNF t5 ]NO6Pa\7YGB_XT(k4@ % 2ƝGWٶ556T@Hn7 UXCq]}Zg93Uq>gYAԖHukr}ٴU >?m25^)E) %e#V& XL"l$$BTV4B݁/$*ysv|Rli? \E8GKF"&bnT^g1"%mTƼÕ,ט<-=ɤtB.K+A}e 66 W˺U٧唠iJxB[]Cg5_Oaf?s .`i_+{ V +lAT gp{˵2@PsUjo{|}5{C18wCGY7It g3$7ͻ "Pa#&۠XLjƑǷj3L;v[g@ #*>y2f_}۝8EPLo3PB| -[߼(D"Deb=?+95%?Vm cX'˷X2Ȩ†ɍc"#Q,5NyAs ܠ4ZndkAǹ)@60Gˀ%dR=U >J-K+l( 5h |YlۗusǵL1qẋfɴ&׭^[ \f q"@@SͲīrt@tv؃= UnDw%Zѝ~pe Y$4M}R d)/5{4(0KR*@sAY}ݖplí&hN["') hkS? }De0oS6of m)+y1U 3M%y:e΢zDܡbtTZV1[ACʚuC=nf B q>@ ةչ`IƗ4nzf6JŃqIEg~dQ|՟#Ɗ@hmy?=!n iexJ.NϓԦoX--wZC7aQ7f{Rmcܠ2`+;M4s4ꢜ7KG7PA.o-,Boro]a[ݵvj߈..R4r~> S.1d F ۼMFߪJ3w֫w1.M-]k~.%''{<4~vhV_k5 <*Zhe JDpۏ#T$Fi䫨mvZ n>5KQ{g)B@ݫb:A˞֜ГU=s^Akmhzӓv3mP:߀_bZsI#bO ae P.#D86" 1 yjwV1/pBqX %B䣖˟I MU(5Lu3^HA-Jki&2gG]saw~ ,h8֔W(4/g䣺vYԓsfP)x\هiUeg2YhNr Wdpg`iGn@;jA6+Qo{P U܌~nK%$IV<0k7|cU*s*;ByKG;nn'UqԳYW390yxL\kyJ79ȞkD=ϦNfiqyH2?CWcHZ,턫w>f Aӷt&򣄱 l 0+aʭ6`Ӛ`/&;)W~m (zÍw8etg0'yE]W Kɮ)q2D%QnTS2gc4Ja fv|'D9"PVKQ:  EƄS]B],koN"N3ˋRoqe0{ Xfe1Q@܊Y`6v\L$0;0"hŠ ND?o%|#.ԝ7QGVbT* 74|1η%^~^y+g9<1t1sy\SQ-DyEKpRWCIitaVOsݛn'HD:0~&>#:դuS7}fzD)YK^X|sdp"[]įT/ ݐeK_+"DG+L5o1OU⌭~Gl١5@`uFYM}_>?.I&f [5aDv AQIr&ڌV3E:43?rOqYkd膸pDu2+M_Dq3ђwq\"GRϓQ WCyfBlE Ov<KOpdlOdl#uI#G&O۴TLH7D,큳:_m: yQSgxyMpQk3}5y~ozni/UܛDB:VꪼoJɕE7dHO&z5ƄE:*##[?FlrsԢC9 8tZuxH6WNPe Ħ`Z>+)΋F4U*QJ3[ǑBmoQm ߵs l~ZI:F?1dck^B썩 ȾI(t# ^!n1gёh#6}ϱ[k\C/Tta_{J'RK UE|’󺭤E`([!%׸$sgحc{P_W0g;!ar^V|wUY6E鼂 YP = 0UKjEt!>/"n(PWW k{7G*`IG[gQL}H&1:ٮh/|Qbmd:(WH6V\A /򊈒Dj`#]1>Qɲ5.\!A03KjF▋bt] +L7[M>>ÈIhm zMt}Cs-МDGp#]Jɀ2\{t9[\^ O o(q8yTxq8/|&<) -'Fl;0 ҳR<- =eAV0-Y+Xdd {pw 2Vl*&h ̞[&Xyr}. e& bӫm(>`$  |A^^S\-.oCd|yN݌~ jUzRSI2)1adYPrFk7aE-ہٖGdXlSzj1%&9Id ҧAit8 wzW ޶LR77;Qy~wvw9Otl[.! _^;b2Wft7nN{=Qx,5an+[Ԧ#sz@}X2u W="C\ r#YUp8jg: pU"q4TZTXGg[XNs?6|)~dw9^)OoɰquQ>n^ڏt?U~֕u 'H .6bCk#a}7P5v e7X OX4L+PL2d:]xɿ)C|W:;*AصX?  |Ǝn]#M K!.P S1t ʾ 3AxJ@T7K_$|SKgӛY3?QCGaVo[iZ" <W` IԷⅼ_5/npGC).V%EՈlAɒR"N㊣Vsۃ'8*dWPO ,ȧJ4.C)oykFddӍ4da vwb q`ŮP/GyRP* FS[~_A3["sTT:CVlH&+kJ%qv_n;*9J梂9m]ivA{<ؙj|eX:z^$vvZ~UHa~oJ i)!{>Hi; _;-y%R"ű *A7F;WF5HHx@Qyko ck[Äe]1jg&~|-Q)ǁ#Ad443lKrzEF=ֽ-Ɛ}s2Dd*.K&Xws?*Gy9mQA5)=YI* 3%(Kiؘ{.UKtDP*hN̖ue-op5Cv+>>ՊaB"9^.<̿@ƫu!$vA5; iW6r5^R85g<+,dF^$l,hO|wEfU,bw }"}E}GK-24Ѧr_.ã]diY`S[o;q>l`ft*>6+}⃨ aȮq<$$U9K@; b~ %ү'X)F ] F:Qʲ|g{io|d%$IAV[q^6\`J?Ҭ@qGs$}pa׭!ߎrmå좮o2x띣wYܝ?#"ݲBY͊ Mv 2L)rrBr.gk⬓nM5^%-;̘'.z4oC{+R> #\qtNhӨP#y󏢫3钑kR3ӯe!e Z_z6rփdvzV.N2dJɃy27s7n|Oi[m@J̭E&s;Ёvĕ{mC{ >r|E\xKE j|\`#v"¹U^2Iy\ӎ ?P*31խ]&?KluW*$5+?`yZ2|,hZ$A Y\d9>,yȟzƳ Tb::+NH]QR3ߴOk{R.嵿STIcNofqlUȉ -Rs9Fުb;r(<E2*e;vh-T!KàXJR1%كӨH|Id?j&Vo&1W'XC`\afUH*t.V+xqҗ+ymA gr@-x1 %Q7֛Yկ!'(ʲ̈㕎PDUo2`u!ʋ!v](pOZL\dj5zwON@$5ur}"h) -s VS*7ݐ?&_lvRҘpZ& N7ȏIWJ׮+%"&NU`ݷ*ys[722Yx;_uEO<5y<~l\Z`lfYPˏ9c+@̢3Z*u=9<-g ߒ2fqƈH'RƏa%8= /' nRx5S4Oꗫ}o&e%*3-A,;$5zK%mW]"^xp()!66D!w {b [GiH: 1~a+n8ArLKD'XQAmoBcsvs.WTRlbPAv6;ďF"〨n*=@Bt7BN)3:a N $ZehMR\MϬ 7癞2؂$@̚r+oɠ&auf%{ {}9'*c3c $=R1kҠa$:h T+6{'{.l[ kٹA[r+zv22pU xɩP~Tg4طru|CQF;M423[I~6i1_v۽ϑT[QmR hlr\4]rO{TdUH' Z: t\~2AiC!v fόadh IJC>ݪ9-;( 퐹ps!ŷ>WFGK~0Y_]˯J rޢXqfnwsu o6#4{J]<|m/QnMKJyl74㬚5ww*նa_[Wk]DTsvT3MeM  |"PߥFk\mGέdPڛ=<'N[󲥣5:x&mv*ndwu3١[ z1dt 7e쓆p /cQ OzaWgO,oxjLv,\ܨȺ`=% ـpPEGѢsIq&Q 99'#SauTc3Bb0\At}OIq16CRC +Uԇz$M׭~}K<%W+w?{\7 9)5͝`{Z"<Wo8]9 @ N|1h[+p"XzE<- ]&[VPͥ]@4P^E֟4&^{}] a Ԥˎ.J`m{Æm{ߗպ ӌ C$ʮXARnjU)2Mq)znI)-z| 3q)3}WyTX2SPx[XRS)ҁmu驩PZ=}䖝;i*XO$Xp*ƩU]P 4ꀫ%ro_N*EZQcCAgjeC|4L`hzݮi̞}LN 7 G*-)aifIx.>_Y1nՙNf8B$:mFͿ tD->CRg@Y!cȮ튘vbt|yw&dobE 'tw:̱da};ǡkX2Cm)hv&QareCq>`DL)NwKS\tIqJ0a\ē@ O'UEv5L'pO0|ὦwʺjx]wNs,5ƂNP V$L{(e9δF =Ukf .huN= 1_ k0˗sy3PL%Սj iFa#6CFxtZ%X&9,]~(:+B(;Ң_;"m̼wvSs>yre ψ=LV] Ո&%'70`]q 7.~z,.6njZ ceE.;BS>;]@n_shΌ΃οR,g nL#n:>.PbfQ_յĥɚUY+G# qCu" !\+IӈJF }|tDjn8w%u䠭3ѱ@-;LIp_ӆf<Vj7$B0e&oi *D~.'?\4l?HVYnwmD79U%?7\Z oGd(E3 `ɐM%eZ\l&@;:]P*]$9IZgc>;fE"fW~W%AOx}Diig!]{s[ EF=׉8Ÿ" W6#urK,,t}I#Dnfi;}.إ0t$[)KU4/kYnĒ4vℭar(Fl3Dn bIyVr88C `g+|I*|huÄbZvX Qb@h7C;)9"N6jn'.7L/7a|^Gb4Q'/Zɐ Ȇkot}_szTn .dO`)!uWsV͚dMd\컞"zQ:q}EU H{['^$d?&3/v"=)*Tk۳>O8pMO9` z6kAk[p0+O\ɾ*V[)bKQ{Jv&RҜ2P?IdU$y^~!,HȀ-ZIN4 >@>>׆]Gu1xR!(J,jfVwVtc1`|XtR)BxI?Mbn2hp G :KȈ(E?xE=~`[2]^,("+nhHQ5[ey`~ҏ MwA V-g;Y;<.5˸]2#]2/uB~m8Ω:8rMuىr1g)N3-(VJScM;$m)1kĔ9tƯ=sNjQ^ͥu4}5_=ho햜EQ?~fr@^Jl1Ƃ\XWiZ>92wJ$ H:-r#؜fcҤHXr C{ SrC"(,Z,@߿7]T"ڽd"}N¡΢e^zb9Ghb!¬UZK?!ʏ  OٙU[C:xG=.$7yl ,M[XTEtG?SO&4x)Mռk$C.3FVyy/-sy .7n"d0eMi%;JݵAA=J瑄*9|ԗ JnD'1 {ѶJc!w(hG{i3^-O$POH!~ьׅƉ|FC@x頴OD) DT:ii"_Ga1BqdG */YSKʶCO*^=I˻t/rw{wNA ȒfZ>/bZ4CMrUI1Lc+F7. f?0{k0'9?u ypV8:O$h' endstream endobj 82 0 obj << /Length1 1380 /Length2 5947 /Length3 0 /Length 6887 /Filter /FlateDecode >> stream xڍW4E(#]{SD) kګvڳVU鰷j5nߺ{s~-͝M0:UT)E=FZT F&HsWz:awYgT WDFOnޖ$F;鈵uC$(3fg+D^?3>Lj Vzu9TT/r(]xҊu"6+$pVp꘺]"Ϧ(2]:}!6'eH|3u^|-p _x*>h'%o Pb=ʣ8#۠BҘs3?\PFaAUS#[fIeDzl$) ]6E?0:'nZ ӧĦFۑTӤ@]^%y< 814^3o-Fmwn{IRF|s- 2Q rC| E!O TNCX5Ω Ýyaͅc,ͭ3q|)Lf95K6oynu)Y;9[y9$Gd(+Hs>c1pvX}{VMK^^e^s_tO'ʟym V~zE~ 'ߐ+p%L-hfSI=ĩmh,6k RQaW\_; kKTd^bdO7? ӌ\ٚe̜'EwW NqA#Ki`Uu6m BSճ]ڐ;F,D|s# L^5r4|Hgy7RsNc`2g[vvXgGR:ky=Xާ$5W=ZZϖ#lLvvصIV=H=,9$#(h`|d]D=^`3Bh ~tӳOZ{EnWC/ - &6uW^myG]0vco]5xc'UUfmOrw'L 5#Oi,Ww Zm.Q (ЫXnT^/gnAQh*wD}f0ZvChgt3L1N"w ft:c_w/]gOify6~׆6'x_xj_!G }^71-9 ;=F) w*(X:;Ҏ`Vdd.A^{91y1т݈O%[YW{i>hqpBlŕ˝ZDZη$Bz˔_).pV+,J7dJzxUylDk^nv 5N_WX7ۇ[S݁{e* ЫY ^ĽǴ1)xq7Iޞ(S'6#{wc$f0Kfghz@`Re}ةh7kഩ1?yYFF j2^ag ֿX΄\6w5U_Loc؛8dޣl[M8)S-c*}~c '2 Z~̡T^.rr\|=us Q ;PC>Ԣ`HjRfyRqoEzZNW>p ýjq9rSQp{(lƽnƣMtw2O->m;Q7LPULׇ6V/76gQSaʨ%:"ԧ#>VoqMvl9Sng_,yPIrϭ3 H+w^8c%Lb#[~uRXf5k>w1z]?$xtt0{xX~B0GK- ?(/[QRAS`^aμi]R/i㱡ւ"#zߊi봞妛{w ò5{2zW|VQ'f -[GҜ4Dg³TnyɎ42渌=&q3NCbnܘ:}3SQdlVS%ľ:D-zsWr:ك6irK“Om-٭zgE{Oz|"B0Jpg?qOCEi pa%Ƽ1*< O PKj!"l+ʭ7GoҿzԵqC:sNz$;Q6XY>u7<'[ݘ96GEQ;4^;x*k +< 5}\T?=4Y+QUt"x}{d,3uhD[\iVe3]!]yKvЌ,NS3;j9*6L[a6Rѹ{co'/XwO3 lVOaad b@-\$}NFzESlոI"o݀Vը%!_#b4)!IYm30WibsT&"Yekt|Yo*s$Tԋj hZNZW8\\urը.4Q&!}ۺV+1:*,ʜO Y"0Nb'dKz;)t!"ǰkHjfĞZ͏)&Wh?$tG5KӨۚ):8#l|&cUqƠZzQ~GN8C\WRAlI?w/ a^Ƌ%eІ/q2MgR:6+u0s1>5ӞĄqTEo~}Hd的*0b(-m7.r?2ŹJ$lpx*'-.泂G5rOSK·EnY9ީE[q=M^W:p}]*d/<ǟrJFTG¬;B"NNM >Q^ҳbyJ:*^\ dq 3XX;FN0[|)Fo1wk 96OVzB]/BB+q&sYvb U;,:\W륯GR\$teG?h |QVJ}78s@ %U_'jQ B?C!Lj=VZ/`׆7ꎖR޹d,g1fMy+oQĂOsMamb$-DEޭepԵCcAjhق/g.֤6t+ڹ&zX49fΑ%~N%OeȠ J<A9(=9|D$U*qm?o=ޯHBQ*7%MD٘Yr .<TJ, P/UZ[x;j;B*#u}.?lңYK0[&uw-7Ad[J-^S}]+=RGTLeK*PҙA0\1ZM esF%ţgxs{HvDصW;M Er>?EKFyD7TE;='D552v7?#tBhkt9<-cum(:dy O;<:Nm=' .[IoYf׬$!>@Zߊ XBw4Lt&@M,~ӝ`igj%)}+hbc=Ȓȥ0J>+~ 2^ɖS2 '!{)7xu9RwZps|/F endstream endobj 84 0 obj << /Length1 1509 /Length2 6945 /Length3 0 /Length 7952 /Filter /FlateDecode >> stream xڍtT_.]2tҍt 1tttH ݍtK(ߨ޵]oyv̠-k)pn 8@^CW'Ǐ̬C@PfC_vyW%)Xn0(@ @q>>?ߎ0WqPAAn80goW=qK5;(&&; r[[Bp{DkK@f #c{8Yӓɍj' 7.@ 3@փ=-]A[nw 8rA8q4 tEJ99[BP;-h)\K/GK oa XZ!~_$D+b+ 60''~ `W5սy Yۂ6(ظ;@. U<ο@.=Π00g-l BYzpWw6؀+ov GT0CgeЖ wqyuu9$'r @>>bY7ߨ%Qj xix څ'h:)5e2VK'0/;BpDGh}oק?M;Un YG)@6`]Dz ҆7l^vD7D~@V#0_=/$ tuAik/G0W_]A1/bz:#fBXCۻ͇ " +o!x=[@ /5ZC֋jYO1iܾ mWU/\d?+,~k oNiHНn4A?^M[_f0 C9]@;³W٫li$ln[gJ MwAip [YJF 87ɑ4I=Z'~@:J>['#*cJ:SI_7j}K \GRf)F7^!l>ۚ_0QQ򢒩FE5$:3$bf-yirJkADj,z&kS܄%vSR+$^u\jϐ?aĹ\>(O# PaJ~}Fs`4FBj%> 0O9BZ]h{j= EĄ^(o(t?{'susEI|vBx EJ%1|Y3EBxK4Ƹ'3jf$LmI:{лx_%eOqZ¬y>k7D9c>:Qb<mzVdk&h'(ub>K?~i169Z-=K_;:!5YO4IuJk { b3|ș^]ݾJ᝶: otg]3Ѽ7Lt&1FeghtX(Nkh1%#_$&Vk͌Ⱦ*_݂^kђ㷳8CxfW1{s*鄣C?D" v{ڜcN;Z9=ro-#[+~1h&j};Fxu~ԥ0x*TpOK{B6NCWfXMylT槮 74D lj!~ ]XʙIŻkBȎAyķ%b\VMbO/DP|f7h FK o:׍?,nKX O$`0֚;>z]bJ8 y^lcr8|qBgoy  %iݵx5FmkWSӷ̇5Jͨ[H d3YaamK R:(cpMu7>;[I lg =qJ,q$iŠS; Љj}-d3u Ӡv2ّ ^ѤSPX9}zs{TTC/db851pǽ d=$}:nvћyAbxh~ -#- -OwtӉ<6Xr8+v q9jwQ6į %1xS9$j1"xFEUe |_jOۋI(-d+1HW&POXȕJ& gv?j*_:LOׅOlv/Pa~*y BquuZWFr:iAGݖ٫{͉ Y ;X B/eHnR^{Yrփg?8Ot[Z&^2= c*tߖD&۱}tH_LF43̵>gF211DZ4d.Գ|MbL]Ŋ*3nv52>U8CKǞ/?#| ~o/htYȼ&65-m-n E*2Мà?x{&tZթ^յ `(ă۞d㚎Ŗ^*d6Ax\ ?Xː*h6])Af,qNKծH"eX4G1v^K>`8urQ>Mt, eq*j^\N}M7 Rxte'>xs6cUN2օvw gYu)Pe_GX툴!OublqD413Q=.W55j!&O)4*,ЉuѰfOl_3OƁ)PSt+5 I%OߔQ˦R&O*}?Oˍ6r>OZeK޵u%K1-MM+xOkH(p Zu}šO xE-y~ԋ!!Jks4YCw^: rCE[^!d]b< L* _s2'bY 5keOw>=|_ԜpE'jH\OD#%-q 7L&: _qX.0A )b?d ko se1,dDVF.`(^ Ncq³E'"yۜOf"o\(٠iڕǚwPFK^__[ zo>X('{5&A?)x=TұD%&ߓnB<:Vm=Oguɵ5X(G :Ѹ0˗!yHŒߞӆLOڅ`M~{{2m8ަoABB""TvC:<5NjXS_Tt~ C/}őSy5KxB'm˪ݻc'gWV!q|9mvrMçWŬ ]mnd%1OUqg}^WlGNHOFK͑FOgO%Kiwj0Lhm\ɘ9" :*>S3et>Ey=s͓ÅD?4dllc=eiو1ZʦHG9KTIȬ׮()O]A&`.6<ψɁ!2e[!MO2'8oܚ8ٮ+aI۬~D|)fJ*v-p"J#+h&}<oƧdz@~D-ݏ,'@3}SR.0B\Jz.jw29ySiɨ?`\aF.͓Q+{Ǿ'9 ZCB_%:gzUӜdQ>ƹMt#F`Gk/XIdqE_/B׳rE:@Z^V 9dд+r:Jz`uoܩ-۠;%xVw/^jilp)zA#m]ϢFa?+R8ֻVl{r*-HūW۽VZU+A|"ԐD"s/q'h0ڏz y'Qzg1O<=f.e%TW$_PK{C-ߌH' s4n3y0*S][?ʹ GYHf$h&mBR[ ߇ "F 1~Wb*X}Y~!թv7oŚkڞ+1m5u!dHX1L)zn'ems=.9jY5/ >Smc짼 ~A|jI br6g#D,D7`UYʥ]w$T`DI=Co"-12PFš(l1=A!}_ >3K6tEvO!~ ,U2L 4S/ɚ6~|ێw,lP * >Af>\ِ1n:\Xr{^ SuF{PUcPۅ%I^09o2t~-szEq} ze̋~481'YH'V)*ͬ2hIw}082!aɭG&\[ljװ!-6Ea^,hidEpCƫ6EK: 1ᩞSUORFj@hӛ :%X8 lt|Ktءi32"O*i w*73c!r'&ɅxiחNo]*jrx%w)N bI0(}QK 2Í23vo/ 4*=7oΟ\;o#$EOJyF.`cZuhԞƚSSTIh6fu`mu?I*}:nXƧl- w!lR9}ճzVxcXr4ObGȑ՞T~~X H}DAevS[Pqք>6I@u;b>g#͗GR.H+W/z䐹tΦ~'N}?mjA I( z(CvcmY}J.#Sz = =,B\bzO1Ըh= 瘝5{/ 8)|ԎfJAg-!NdE<SZ38zLzıFqM 7#=[?{FkMEIbEz9CNn#kEʊs Р'.K?=fyz{=ԓʄ!9SF LMNsFX)emdKK;-TZJ<7H=2lGu}+x6'~aR(DL-(8 \ _1ܥevozzA2.W}I$ɦ+L<̆} 9I՝4 7h^o-e6rd)W/f wи[A/T~>~#(,arp rѝ[r爓dJȄ]Z^Xx|8~y!環Œأoz^N;W0 b\?m!*pXWq*ٺ@t)rCJ/RZpY<6ڝ7ֺc.3o1W9m{ndZdQ1Y.(ȏ~<Euv1tXsDؓ3Xۋ8ciŚ}oG}G\}Hمbl;S=ee|(} ŅU^I`Tj_z׌c:H^q{D otxFtydÿà~xO+`'6(x_G%jRoa0y)GsYv=5I3)a.wH^ ë?vs+}rG;IƧKy۹,Mۻ'N^wSI?yJ_KCf'xOՑKa7ce z endstream endobj 86 0 obj << /Length1 1596 /Length2 7167 /Length3 0 /Length 8228 /Filter /FlateDecode >> stream xڍ4]6,:EoCta ѣ`3DB.zO(ѻ]A⛴y5kg_{s}fְ1k"l J8/3HECbD(G  @ q~~?_G8@j p@"]ā@OOO>kg7>='ЅA\= ΐ?P߀i  0(wCm!=Uu Y=@|3+ F8Xýp{h)!p۟07* A9:5@IV`bts~rL*"V #O  \'8wea4CCTL!Hy x?7vQ}].; ?uP0`Ɏ2C~QwzQdR-WJzZF<(Cx|yb$ ;*/5+*MUD<(p&g Qo!Y)`p ҳ;5Ԅ{5 PwEUۣ֨t jC`Z 0(pwPQF섺[P-AP}`XZ{Z |AYx8G Q!Ggc ( 5+?w+"Cm 6jC$BC=a8J ׊:1 t.* BWq㗊QuYA ^0,,*FΓwjgTI_}:NcGi~tG^oSUrh}rǼy_OCmc"iQ뤟taq$^t nWm\wmE$̩tg9OMYWC&$dfcOr14_b3>|xߗ&xS-\NNs!sp EB&74v9sҔxBpeG"ߧ5nk=itCJt/[mdR7'F9ܫIccE;JT-d`u.hL!K.LcpZnS_>zH||)' ct3Zz e#Vdv\u{>h1SlmPw1b2(޸#sw/IU|Ԑ[QY6ˉ nT0g3$'WFK3 "!"w:*eZy!,"diAImX6@\KNSGŚ㡍W;r&A"˹r? K=eSl]),*k2`Ci,}m/o6C,8VQfg͸#vg_ @f7\,w4?|/{, #\d$4 P "JFh=,0 Csk߀I-R>m&r|Cp|Q$C[G[oYDWѓm t -ؑ&WOÛIMfFկ֭ZnW"TR|AT^4w8iߌ4t3O3ZϾ'Øn(Iu@UJ96*y"`¥nNPzDu!SL̽rTi[eQA2 -U+eVjm/?SF]#e8!GɧnZpSy*YAS0LT1-\c^4\A(:t'Qњs(]$]+9^^hzqy9KƔL C,]Bl|){9Ndl`۲ږeu E*>N уAzCڪuvjhޙT<č|glVgʓP O"{RG̽~zb 鳺}$P9*%m2qLf`Jf]k8[("E+_djk( /T[KS]߈qKRg6}32Rf_q?^^3&iEslR%Iu\fXv6B2Ֆt7c Ef샋oM;S戶`9& RQXJF[ {h`ښ%W&fo5)jx*ePKDNʕ%^I$R|)C2#v%l⢔77rP&w*)}&u)z>^?qƷP4ײZܪfef@Huiَ=d,)݁D8F+ң۪[wwN,^`}Ȭr&UDaiNW<7i,eJ: ɑ=.~jQ!GY^-Гy6B]֭iXŻ;=]t-oЀt}ϱ ]t1êMh{ՉD^-<6!,WDgN?;mJ8gn l07>H#^:~2Ck:R^`Zc Lr 'MׇJvRwzpVt9g,HeCbFwa~!it6[)*C󼟓%-z0}y_؛~ѿ?D+TD,ZJ~Wf(?n(I D|_׸3cp>/U~ChZSoͧuoWie7[t a*yfhA^n aQ/ Ҹ"N4OjKnIxϧ`V~A=.2(m>B)GogA= [i4GhN>Ϳnͼ%ն)E>iMK*F0pͨ>C8V{9~wc}G5 IC0Q8k?x0nұ =/brEbF|.@ĦZȗIPg~hErt]%D4OS3ln%9Q0ltZuè'goo. G -=o+in>eqKD3à|Wy>_?T^>!<CU\Ű8)nߺHg't᫖ynA7oK>̩Q}fIw B*N'T+q|]N5e; . İ ᮦ;0ҹ-5О)nY3DvDG _63ol&q3ػޫFϱ\@T~0X$ Aꆴyz]R `0~*R7{5B@KE1rr0Q/SStcu'; XC%hxXL12Q4|繯'VEґTWr;Y%d_3^߀Q?~Ҷƫ87ח+|ގEµ,G j?: Pfɥ -k=TB~S]F263!X3-&2>l'voh+LBpsL&sZ·RoS dFaDF7,*;Efx_fkZ'tBGjF^4;ɪZDpQi\4oݘ.hacgͰp[2 $p\eЈר؛]t2N֐-$*=p>p{a$lՉ^ӾeH3K*Vz_ɻ׎dSAcy> a:l |S٘pJ,r<|T-xXD{LY]˿˹^mѷ]1rf-WS1'3Ģ3X_Iޡ<-g+#",M%ڛAcW-̑}5ASxDJK sc@*s\ɛpaVrcȶb$窝lUp[C.q{cЅʦ&Z[o[{XͥvS略yOj\jOtBDȥ9SqttN8bo8MTyc`I<ޒUzj`JjXkSm е4Ȥ!Ud:UEaĐV{"2d[p@\yڼCzfL!@yc}JI;mS1WAG}++fr_~`}䯋M`^H)do}p("$@ɺ8/RNo]ҫi' >jO'1J4sI|{1||EItÐ6`_ 66{5P~ nˇ!^se#WZ"H ׆Kx*H **__1DgV͖{oo& ])گ`EŰ5tE>I\1/GWᱹH,Y_~ˇ>̲A1ӚOt&y[ykI5|xw Gvo;|资?qFs,<$V<,|4>Z}fiNAw61LL~E2`_' IQD׽b|׳m6r`.iAHvؙq8 OUi[\<g5 'rw6+X%"dͩ0}ظ#Ce61EWsK[%9"A)tS')b<"ǚظ1}'1-ρ4?Rz<5A6I=p!?`P~.$u&[;dzc$v1)5/ga>a PLz(;%b!xS0=E9̀J9vw1kFV'+}[6u'_#;ؓ!K6Ψ?|{wOV>̖X%viC'BRV S0؈Ѱͮ tXQ%0+ ]ҼK>QM`kqG.1}8KV7*t5->D'`M\lD$_*\Ih\J6*(f|dj4㳲;&w`|+AkW;pd^wD>*Dkz _e~ߎVk@֧qTHqxJ%HZ9Kr*tc׶ ')y? ;a荗hM.sJCUSl)jMjs3 K9lun|3 V\6\dfVELUmN9 *˗3gp^Z3yL{+Fv"}Z6 _DIW\/C|] N>>;jORZcg,zdޝ䘟<*C^:z1QzUUk 3MIh,D7ghx]Z)mQX>uB+ [ve> J뤝WM;}{<`2Iln7?(1V{/ %XVۯE1( T,y8p!G4VVЊ8)4>iҁezʖBc!k\ G+fI1U~Uu =cYqedi<0#=gSIR_Wp<]d=xs;y-֣-9rbO~ 7 J1P$*FPW-r1j4P(^+[,ǀAG%EIq΅{NJ Tr]%9E=̓щ [0m`;3UK~,y]@B ȴ0:4cu<&\PbN !V:\&oZSee[r쥧ۦ-^fGb@_| P|ڦ8Э7<oz+2IL10t` ,܋Q5mE'/&]ӈm}LTݴl#yWB!z2.$>VC!n<滸[9갎hjU"%ȳ.n*kW3fy !BX 6i4KӾmxސ?/8EH EJ!Vh. t WS+Z.kʥmF.6$K6#9(M`ulFͲp᠀R1IѾ'}!$y5W_//`<5qB{!N~xcHI]U(I6, ZD+B"7^|/VpvEl\e/MZy`w@)dH9n\N_> stream xڍuT6-N etctJ#- ۀlS@AIAZB$$DBx~9{v04V((,T7 0X cĹ < F5 ԡ8|>pED`,w #Tz"@}PB`گf&7#OU e%%2@iiY`ge5"\OEm=(~xC ?4 ?ԷKa/oJgB=\\~7'Oe^h8Pj-e}^m/¢ o;{鍀"q0D{.HE|UsƿUr!w_  >1I) xY')@ çh Z%d"n$> Wi/}rLaN/ÛTX'd-xw)Ks]>Z_qVo붜4'8-ޣ6 8aP:=ffu#v劥³첕XO͑Ɗ{۲FgҚ:06<#C&63,@2̼J*cKafxS%UW{5w1mx2\zpvmeVH䈎0V|Sp牾+iE>rZ J3Dd~>U8HPGʵMw{""iʆÛ+[Z5{LQЮB[ůJsn0KxV{Ivލ!eAIb] 2"Db{#zW={`&kYMThW6&ah!Hc9c ,m>C$+CpII̛5vI:ga{+%^q V yegJ%m`R\=H%ss+Mfov' d݌ݦ6Ec.GopL.ot;Od4?8r͒-v6f)D/=)"Tjf0f8" Q8qF˗p@5e؁[[БK/ OXbf(O˒HA@:M;r7-%n=#NqvS8&7{ 9,K:ك欂 G5'mI:j𓴷 ~@GcYLeҫoݡ~>p萭まJ 2-~z\aN3 [n4\& HS%#%(\v- 38{P<0l1GɲۋpR2IB1BCc$d0x{D`Tl,b)봧oͷشcC!JЇFu2I&bwn칰]=/kg &%aE͆~&mhM]tai̧1C( K;g7~QWBE$7R9$ n "(cκ[ ˽3ZLiR;D! 9X q]vRꮪ⛌9f{5>;nQZ%MnՏgUѭT+ q.yfF*:b 3tVxEqCؿn?4<mOxuӓ$ _R 40NcEO\փ+Y;\aeG~3Z}<~ZJ2,0,!Φy3KG1C,jRk 3@i󾱱4TБ^}u1aB*tk܈xN<+NV;Ac{}ȹ?4HEsg!Qtʊ׮[/_v۬E,B I6]Q.:񄖻{w"w[Qk4'* W.W΅6Clɴa [DK MWm&*VQè(>~^@SnNV SI:=mxۤ {ˬ-H L/UqDV$3߾5'Yv/'Ofh /##ؖ) ܢor$>j.9G6iyKXg"jm"hW|c. 7I 'WX֓Ll4ٻHnJ~'dY_wJM_]g6>}8`>/AMUrKCqÃܓM6$/n쏛PEQ$0>/i7ΈD*X!.Z}9eDt겹R4kS*dX2-0o<=4C 5K 3ezh._B݃[+&n 7h$?5?^jԡFzO<:Yr—f[F聁| e6IKM.Q8$_ H'mvp~zr} z5HyBKtRuQp^%m" 'BӾWZYT(٣Fb@h$S츩Zߙͧ;sQN5KFjun((*[4`䰂Yaƶf?>N9Q];hUȐ^v#6 rchrɖ|#_7?vҥt;CtA5},UnG?K+kYvꅿꮳ "u>7est-lҒ4{269t6-/IKQ/Mle0KahU6xMyBqek0fwtRz y ˌ|ֶJ3iN\S]RY|sˆ#x (9b(i1_mnW"'K 2 b^@``P]ueԘLȭ:Ӽ~Y :^<)Lrb8:߻'f|~w8-?+;;YV[dž[c-$lM\MT FvT}Ua %ICj0X?*g ze]#t>^RD ,#r")x 5"VЌ(>Ŗ[$/lw[h_h{.'5#ļ!f  L#=Kt97}d9sإّtUՇL'ʖIW/zR vZ=U ,I!=&K%V_XQΥg:OY%ZR'r~&)lܪ::^ߗQ$,B>[}[ tHD:DԑQN$ 5JC&ӈ9$*9$m}ŵ>j-fj%rlbGU,E(w6lo,#.K}fp` yq`fjy3fՅY|͗^z=\I՘cFɔ ]t;,cd3XHK_jC5/s'ȇk!΁ e)"cɇng1zyi^&Z-M)}": Ms (nj:L H$-zj~dm4m:'J6\dҴSWLFyE9n3'گ囓nqC=Ysjȼ.[F UETqǣWГ(k?-wcS{8zrKUKXC6QU*dPQ|<_WgWU WO' } 8 ^n}OjȗfAnQ4GR_}Y-oUX'\E~kHroG8ח ]=fԽU0IZ>fOM5VGͥ;JPTS0G2s5{~5pF<*(9{Yt>ޅyS3^k7 d"(cI Nj$ry-S_xyHy&܇f! V>HɢkW_tq]C(?bx؛}۷L]ٍkyGTo;5<]&lͭX&\TQx` )XJ=w X?c OJM27ݴ_ QI6h-ع消/ގ햫Q~+f"Q޻&T絈aL>M O>)SxÝZ.CpK^0j&p8K *RDžR.'3C*f}pj_s /z EI}]DWv>R&=!9[ͭMFl ܂8aM婒=)%hP[ܳdէcq`,9ļH9!X endstream endobj 90 0 obj << /Length1 1443 /Length2 6504 /Length3 0 /Length 7484 /Filter /FlateDecode >> stream xڍu4k6E.DѻF  !!z'I"z( ZoYk{_\}g8X+#l'?H(P6@(Dat'x@pPB<1>e'4\ aHL $.@ɿ)2fh PstmIJN(A=`v8@ut v0߿Jp8yz"}|| n(ЇP{/5" W0W¤xLwX k9Hr'CnHw8\]U-O_O>n qE!0obPU@0 Cy(G_e0ǬWBA(_)G'@JI~H !(@04A0((<=A;o<PG7/s0_9#?'KpW࿯X@ᡊ?TTDB Aot*_$07?6<wA` p# (^)7O;C`~={ybvCC-6Q'# pGA"@0*ji LWz`aVnAaw٬U!#bt&$* av[A8p 8 <~]8@a(ĈLL1o_3yyx`X0m~'@P;Its]Di!!ҞCBzozaJ2gq kqg[B?\Lh.V_3hgZl|#[(-/5v3a#>xV'7d8TT9p5n %ܖ&hUnV|06fGʤq/$ygsy)^Af0Ʊ^ÖPn[Ԁ}$G͛>+'aHua{ߞBxjD2g\~uʹY6w*4'k3Q||E_D舕gF]Zp8$չk~m3țDkj|cb+?\*o-aЕ/ob{J,KA೼S 7"=,tihCm]"scnY 4"7r8khFţ(_RJ_ѫft;NT߫ \2T ` <OkT%0\ugXUqKA&=_w`  u⹡9_GX At׎eW"$;pkibZaZR5Vj9q[PN:Y۸}+4?^40$_)wYJgJќ[6MDSy XB@6afCkblHݨ<ԤP1[5~q-+@hndEA3a}\Jb`x~b.E9W!#) \λ-?̔t3 5esww{woXXwY4%W慴zMXb3A)ϨF>v0e$v&D|~C){s.%MӀU>|yؕ$*T=\ 1p[btn֩Du6RT ?H{Q |7²*A:<3p~ FR@13n~g'W]^nIV ;6YDFCrE,ĢV-qݴe"6>M.H(V4(rbsRb= 3pHJY*&El7UHNe_ H.Ox#Ƒ  싎VE"VS' `MRh/~f?حT)W6Tva^X\f{DCT*7یk(^`j!ڲG6i1u} [^! zGVfCayu-Bow#T;>oP/cqrx =~ G2Igr\-gl7hoV^ y_kd152er}?XffޔP뭘sJS>3jqq$ 7/DÇ]¢]T= 2h4'gpwYS#00 ISF@X׏a3Y:.&{Äj{aMMiـ*`"kIO)K/iȃă3:i$!nG7-R@WM>-0 M'BZ{9ƀ&]Ќ׍ usorE?.PGwL4hMF,>>DĚXaKCdUyENFGu%ϩc%xNbbuyp-ن{N̎SY$TNr Ιu#V1J;{KHꉚ4?%PH5ֈ|_ \5kF1BnPœꐵ7FHGOdo+Ig~, j [BU"1wPc f2R}w^3ܕ-5pVA`-/xU+ ztސYO 6Cařx]yH %'HO['fäSVp6Vm-zJ5݊ޑT{_IVGpޮԊ!6"TL$2przg w|4NeN'`'EF/4=41>믝TrE!gVybvoRwyhӕmQiFe%xфo5R&mJJiC ʱ>z'Ə"m+J6*Koޙ%'t"uDw*~Ճ^17>MŞO֗0&⎊C^W꟯&kոR9.Z?xdF/Ѯwٕ_*k.c\ZtMGnnl3>~w]OњOkƿOomd$t{'>?+zvF }OB{irBbz*(QL$ڼ%-^yƒB6ԙh{;҃1CY"M<VOByoZq{Ch-Ḗ|~GA֔"N'UzRT%KhdH }r)8xl|d3uK>c?(9~<>mz=i=/5~#,g!6͵+|E-67$ΊLuF[U^ ?- Vӷ}sWF\ ]p5$`%lWǧ)VBaG.m:"#xaטX.Zlz*[ۍt[X GRM8"g=[dd,'w4"tu򢉈J pMٙ {ܥKx1ĻDnRg_M5yfN( j1`6M|V)15Pns6fUK'4f2̬,3/ khvVcK-\ڽfk%':_AeO-Xd/)k`ȸs!lud*:GQ⊧%9NwXݶ=o-6H=S3B83?)>$Xgᵽ _CFee WZ5g'+ܦ.۝/qx<Ć߱My lߏk6dSwg~D/leyS;-qq ⷁv^>-BGK9{`\*(kLJ[zs{7{-sm^Bg, b(e ums:(^2o=Yqa-l82 Tn ʼ).5/(6Bw+.¶D3q?n<.y`yV1H1ju;׍y`hF{3 i/ڼcJ1]ԨgZ2{EdjFޚɩuJ7@|%@#L|=o)33p"̦,є171;砚K L).i佲7l9'Ӷ> P3J#%eS69,o8Rp|MɎYHJ֠[5!WI1/+SR[9]3Bl)9}1LXFW/!DoKم=YMtF1=!JN}jۋf?Ss,N)v!'[9rGV.$XHi:'y; -tZ;|Oz>RTZ=QZD!bk,nVG7._zÀtKy?w:=ㄥY2Ήك-xT>+_}x3M=U]J!uՕZ&ĉj|wDɤI~;;81u Jţg&DCWy}ޡBm`L%=2$.B 'v7|6BNRŪ ?͒E?gF`ACZ8s7 m闆t Ī%Βi mՅT2 yݜ_QU)^8yqHHT:fs3,&;|.8)lt6S'(GE։(G狁=.[LLf$:j}Yw^Tp;B_Æ.Y{i%gVq\)Ωy>xϸ8c"љm-& 9xOޒXgߋқn͞s5j:]wux s"Et @%^Ԕ] GT09*cWo4j920V؉m]}> i5$3ήh HUM StTa,b*QI[1? |z)qN2 wï+Lxyo2Gp{%(ndzAU䱭٘޲1b5^mKg蛍.cɟ1T# 6Ε2qphz endstream endobj 92 0 obj << /Length1 2528 /Length2 17113 /Length3 0 /Length 18586 /Filter /FlateDecode >> stream xڌP\ 4ww'@ w=Hpwk; wxs=91\k$STa5JYXr,v&6JJUKg(?::Ye!hj 7t2.6Vv++7 @G>{CWK@hg@)p4pW1-/w@44u4|nnnLNL@Gs!Z@2@ojLU K(Tfn bgbeHMc,2o߁,r646yXڙ,mL L C;߆6N@ JCÿ9;Z;;19Y; v&@[[S;g't45݃Z,L~0qgVtp1~ HGfn daaag:Lݍ-'P7K[ ehX!x9]L}_ 04v[!hf+?tAfc׈+IIM`dcgpsx>TO PK⦆7<ͦ?˯b `|r.H/= 􆶖6[t2䀠aMMsLM,]lVtBDmi_1Xڙ*,7FV9ckН_*SЉߌv@G `h/6NN+茚f&;3b0:")'Y? ,q Af7 Yb0KAf?AŔ@1A<YeP@ PO(?UfdliilhbNAAl  MmL͜%[Ǚ?bkSeG@0qrm@;O%^fAPJ?\@ٟJ,]xpV]2174 ,?Eaaoaj/ _4,A|AT"h,уglO*vP&;[ߗ*?5BRxQBڃv36ֿ;4{꙽˟A\gAXYAW#YAq99Z5_n ]*_._N@4AP9nyPPAPVAP?= i "3vq5g /1И?ت.}(ބ,z*-ײwG$M[Ѥ] ذ'g8v)ɂ~bx"FU}O֐2.<(n}Rec {J\fբt(a0~bL#Fzim}y\Pes§#;L]*)\fe'$ɧ-+b+5F^ыb`OWgGo&)Rԧ?Ho"+ᵿ uyrgݤ父<Z0,9}.RZ^SY}wg.(IihMܔq7:ռF`:ݴ+jL?ƴRy>>y5z$NIsa4Z®@I`H)X.XwNDfդJd]|\.[,9}`IԜVV_Ks:Q VNM]ÂpBB hi[0ɨxfڕ8b#Ւ=iKu? *tT ޔh&,ּMӚZq  Pz7{AѸ6OK;mx`Ť22qn?Z~-fxVyݶeg_*kLt q"̋}7HAQ1su}(p9HL[5*5A/_/}Y )+i챒}qB EpTEQ"F} ըڷԸXt)'s~5VL[v^ 4^{41y_.ڧn{ӳؾi;O $|jNh1~[&G0(4( d| @#̽(R6}>Pze Pm$8W"#s=aSw7剥[ :->t*3ؔC8ڔQ]l+kdLzt?.+~:I=edƬ˞"`XL(:Vs<ܜNnUCiV#L[i"%5ۆ9%:v,cƺ"E?ߏHeFt{}lWvw|QTbf~Ji$`yA@BCU3_7VbAbtpmrk߇N_l8S*;L(d:)2\kZ2svP$?zf}8axz(9T55qwePz՜/En P ӨS3@K!3:Ə&hZC1XgAPMKg\/kn= O5$URئ=#~F3L-)('w.Ŧ"¥%k^G#O"N0&аmlYJ~ؠz']>N 7ՙD]F|d~yn oPQ{=[z0=H1v>hG>7cva7 vq@]BbB#Uں[9WsTZҀ+c?GN;s${1m} &;6FF n 5h`%z3+4O+9rKVd924N-IݮBGqKB]ū#M=w%j7 $vd`Ⱥ_={J0|t6O/'UU"ybyUU!B29KY8-б@:W clq*87i{GtdjXz}ZLRO%rx/uX C&nދR2o͙;(?/-MDl}B ^'U-k{czd=(4MX,n!Ԭ8Tۭ+Q0'U"ewg,=BqIQ 4%]Ҹ`rs72xfrS I2tZ[l537f9.F?"7dHu3q뻵&SnS#&r0f0yԩ ֨"WؒOkH.0o+R4=%=]䕞#;(@D cW"O f-Q-ï{F±BIoð]!g Tl0y^$e1u{WG',s'K.B x'<6:dC!pH>FW<橿Qi$@Q, 6HꙤM,(Ӏsi3 ˌ3k|D9"Y(n,_܌(J.U*^ObQM8 B؂j Y,69 %3Z@$ wM . fuMV=nZSzAD!oR‡QafWedt) -NdлiqvE]\Í8IχImҐ CY Fb9Cϋ*sxĊG[78bP9v!H`Ǭ  @_iRTL-AGu&"+cNIJWZʰ27`DÇнs^I5BY`Yv-W!wΰ?n똱jmlڨp&2HRr yhi :"{ u5UPP$}n("Q0Mq2=Ӌ9|zZMls&DFNԝC|{ eiBx/E.2$ ±yJ4qZ0&kP?e;(>&:a˸',*n3xic6_SwF-9pq8uנUKC@zbX8klh;W{_4I+=[I\F1PHXrʜ{(Vp@% ]6,vyʑǐeYiJgIp-W@לF&/>%50n覭KVדQ|o:>{ħ3\B#b_((ȥP/TحZ4SdE&Mz;G]WUf9RºБ z-XK@pF[̯2$D<%1f6W~*"% '~ afQ_j lJf+n&UgDɕ'2-4XoJP&iί9Myc ' IMRmUɽH,j]?)ǚ$Ym3OUc4?R (zg) Q;?cN4\YqVRN]|/ y yB!<^q f,VՋNEqrHle/W>N%1쯆DZ䕍0{B8EL:R\9!29Mޛ)7 *ZB9jMFKTVf~TI詩 k,u?JPwP>ZfsrSG + VByeZpI'j S냣j:S> a1gS>KH95Vtk|8h&7SNi4EeQyτF'RpX)wbH<"MjM oI6k&IYIAo< ?`ΤޡW 1q_I$a &ZY!;LJX;wC0nƂҞ&X48C~T1O-)qBa$Uf8 2H]A;G-luP0y?|4Y4DILJk'(|/%QZ7cgX/ؖ.QqF$'GlO]F>!9is \Oh|s!:JH/x̣)n <|2qGiנ7߸?"|b>̴!iw wE"<΢%PFRN/(p,nbhYwpٟ cKV5ÜWNDtjs%Ʋac)r w)J`ӎJiAL×/8b JLKRۄ?QW&Aǁo\x2CN1"^!31=4'@XJQ)!.(3(}f.C*M:2]-`f1]:8}I%IϤK"ds`k5$>h,7wTRx8CZnEꮹ.f0djΒa<=L1%dɣ(< vȮ7x&# rz 700J5 J dŪH,.0y.' ;:e*2:>z?fHM[͉/磽;S?<.>Z.EFkoj5ZU}}M,.qC sB!l-;/N0,rDbPotW;1`}y~^Jne Ge7B[e:5FSXk>|*8U~h~i|]xΡܑ3*c/ 4cCocW@q% 3z|mhݷs*+X=Eϔbt\B|[z308m<\\@ negs:Lq"yh:#^cyQsSH*TBާSz2^̜]l?Rfu:b-၌c#yܶ6=ZΉ;Fρps8ˌt-U1^CZ?`h R1vIZrn#%vAFc"O:Sw02sh-x b[6MJ;,g6UBb{K4^zIA hJ'_ QhjZ!@ƵCz$jV2sq!or )WV|f 5S/j G }n`M[HY19]Yz[ū&roofp4\@>n+یTH2F"N,Vw>BmGُrϹ'vziNm|9z)r^ XDc!9\Y gt#}z:HKI_H̬Y#ro5 :x:EK]dA>t$b!-ZDHpp;Nz^r+SJ`~@( yfU8d&\I"M> WEնA>Jqpdq$u$m kE Qټ0@)ca||P,jfj."yEd)% f"𓅲>}}קW搒jKz)Qhu_~Bln+幖ǜC>Z4SϘSN(Y mHAf$(vO 1YN/{ dfSM:mKq0|Xl zn9ay;u%ct\8l&Hq,jpp^ˑiNj>r !bHco\쀎6/X19[J֭45o5t E`(&6GL~T^{\@_xZfk(׫u0[eFKIs4:^+33$C|:́9PQ> ѿ=Rm(רRqFϔ)tm"̓βPtw4]hGķVV Izc1ÿঈK0jGX9QmD7m:jTLQ*AbgcOnIOqT/g?ɪP}9NVz"ZY"OnC} 9 s/#Nfy߯ ,M%H|8P}Ď z"X&u9k&Qq N>] p1g ^9:cN΀6}f:jYwA}wEL5?`ih`C>pyP^S`2΀6'#6qk 9$d;7>Uo3@`& Ҳ£ތXt7y2Ys8x XE= rʉaO19}=^nPv1`(8֬z oѮĭƁsw/Ĉ$c4b,zfA#:o}OF"˧!u`.dBBCn(B]sߗBfo7VP*d;34?R F9gR)jPa;ϔ_,Dgyנ1NaH-p^'G'.+0\<Þve (W۴a[y]C|^ Xh2\vEu vJkQ)Z.j(" 5[VQH%om !s龧'^pk\Ҝq}Pm (wnٷ-N<0IHr#x؊M$Z ? WEN CtLiTNI©ש|lw1rJASU.sM@,lӫ.Z4'Y³ חUxo$ =:l߃ af&dPDsڷ+|!~]AZqG:7{j~ŐM;`!R=KkؐmD{DU#-:=t*WCkYǥ[^IbKs8nl {@KQ)!%e7|YAfEVAn¬?txUV~1/V.ecl}LPtA}$,l8_+L+2 L[uK-K4Ըف29 Y@VpAߗ|7hgn7*Y!U3³2ijō۶x8ZTD&m,=վֿ%4>V/")Blzɩ)aɈ-̦q@0b>L2k^ClYe2\1&Md*lf Ǭ{+*c҆Oqqh_-N>V?H h1Z-Y~"f|G-l f|jtW/CXdw}3O4& N:#:d I>^F4X鵕Wܽě+=y0ܹώO%SPT&ɀҘAXVH{~~p*Onh5Rg(^uvjP&Wu:NʿSn',z@ ر7F2b[ծ# {k;2T7>#%#9+$$̩K9dA1ue(#׶_"W ITF@&=/ :k %ܢ );m-~3  JkpDA+:"N^3ȇjѡsJUz ̔5y~ f/CU{v=վ.% ,68E@3g-¼Ntɯ#Dʘ3q~P=Ǻ_/4ˤ<|d!6G6wO>:s'˳ o޸LEǕ+][qA%}5l*wv&AJurJH4=OE!/1e㲺Q>7 O,+:f\VWdp6XuRg<̮4 {}D%_IBBL&!䊓ai%IE65$({s PsRRm뭪u _yfT)cp/ԥy_n3fnr5~#H.3ܨ_-E".dJBEa oMМԇ(-c?(,W2aVtJ+ʓg(.rMnX?#4`"ʤɚLsp+H%͞ҁ/ywlܵAD\ 3Xt b/uc1{PݞNČ^ m`1,UųbsCL(4Ra5^Vb kik:Ku~[k G0 HZkݷ9|!Yӄ|W 6UQ=? :uۛ|Ӽ&< 1e* .!2ebEHje9W ] kEbRCGMML~)WK9ӦdoI> uibL0#[\"}sԨg雑#XLWij2)၄vF2kMRM1;gMrp{(TOT+wo +EP?i*h~C3m{# ݹf^䗕9uµ_hs< r8 ~9s% !%mw&V@.ݍRyR נ=[3oԿDK#V%]AW<˜+k!3Y@uqvNe[ign{NNdiN5I3@2ws%70MMV60BOVl38b;rA NͩYꚲ]&8aKr.u:R'};ad*48F^UmAe k77r8T@ `O|x&)͏դ{v+:h i*:` [0 xB$Gl#]"`.F"k-V+ۙ?@9lW^AP~v0l'ip+$+jr" Ԭ~8'3leېu3k,d\+2ײWH%wߞ$'iW5UֿnF$ [J>aE;<'g|Q!tbZq! mN$[]-GʗOmD o9m 1|3լS={`j> vE̙gMShF^_6\F@PBEueіYڨgeWX̕pcUoF&ZDt Uu+`DީЬ4Zc-^HJ* ε1E'%(I*Wml6xEh#^ #y=W6].IWqW^i\bN (~p_P] dF,)P/8qj͂8U5Sc$FS*_aT>.K'U{%>&Wz 5^2+ᅬĜa=q`&2_Ywe#}XdX+ M-8|E:{vƳ6熺RYs{`l}4Z[p׋h}d4EJ^~93rPՍ{$֕g0]bX@mz[*K+S$Oi*+pa d.c={)9Tw]@e ~R6Y݀W͈eG~ Ew:9K;xfKD |Է=ߎ1v'kMZ iBYSZN0\EZ*|+n:Qj.)DˤGz!|z鈯`("`ւӤ _aty'X.I(c7xu.٨fITޡ ,$/#Cssg4}%z\w4lb`̙dĹO`Cx~wzA&ቘFx}@V.9ߤ+aُ5O5 X3ĖrpM< kdaL)=01 UHo3J+6pġ/qt7-(&w1zߐѭWk*l: g6X|!>T0fhtlw btŠuPr1HXg荐+fzR΁g2zu $]Vz̩CXڟ}&1 PMnz۴N@)2Ch(UY)Rs)*Qv ;# 34z>?8IEcgH4)t"lS^8"׻6ffћIH9FT\Wߏ2[,e/Z `>YW]W:@c }l#`Wbc4=Ovh@+ 'M^"^U|308[ ]c>V`$˷B&XZN x9Òn`m٬}s6$pWц'ݵCd,@0J{#ͩo\&V$k\{;5vg 5+<%*O5j4y_[wރ^>} 3 ɶsz?-rY_3(󳽫/BVtj/]]H14?=YMZ\T4*Hx}gmFJ.?b^Ncbm݈"`!opRt߯_cwϰgظ s!Z,`.Q/eka6_]5*Y$TUqǃ:9VmZ='Vox|$xxIbVLV]w9bMTv4|xR6l%0o<.[]s% CXCg%áfatsѪ=XKtnv*|M/ڪ~TO0 ĩo.Cruj@^ZnvΆ&6*vűtRZʒ> L~aҠ7B~ȉI|H6p1dY_S@Ƅ|B "*&YI7%|m%DZ$z |fo/A+@.kIfaA+Վw3+=z#-K dC6kVA?]r&~vDS' FI:}Fµ{1勍~ 9zZluj)y\))^Ɱ7xޥ#C*8=w"dX)g'fWE-'g9eq1l0yU`3?qڣЀ9l~+E/i~Ǝ'[A`(BKْ؃tj RObynM:f|z->12izʆl!#zZEb_AUd~ V8|Ʀz? cj&>u=~,ڔ*Փd=Wq%I׬<$4n,6ahj'>=ٛĭtJ[chZvWYDӃ`(3q;^ʵL>9ŋ1Gqb"?bA+}c\]-:P%.zP?[36@kc(QLM)ֳ=OtMWwk#pg"󄬼L*?Iv2qRJ)r\if59EOEJؗډXE8Qe.c hx\pNϧ+XTkA01h#B$@i|u59ٱ}NSϷFi1?Ig-kY$l>Ι1P歳Dp66jJͳ=}<׼b>:74)uH twK,Ҟ2Ĉ endstream endobj 94 0 obj << /Length1 2272 /Length2 8501 /Length3 0 /Length 9818 /Filter /FlateDecode >> stream xڍT5LJ -] 0](!!)!%"Owľ.&X!RpppsppiA\. )g0fˆP'L!Y rX P :3LNg$s r2B0 [:  {vg+Q&Vv;-ZƎNвtt90 uqZMy%#Y/+oq@ ss{G XBUY%vWOWVjsq v 3w :\̝!.._=,rC]]' qt}P?Ն#3?ج^~nn 4JeXa}\@`O:''b 0[Aaf_vOl8~6aP;+ʪJKNIIO'7ʿowm䡖ZiOKo4oaM(ߊd~" { 46CZge ؆H@" [A\ͭO?n\ 76NVMq]oQ(5wz\|3 6_\N؎Z=6upX:8R>^P/J>gEϸ@ ? Pb*= P_2> S_$? Xe`@NX C s[0o__3_ f`,<<,K ~rr&VFKjPL6k/Gk0TºzVݯ!{40`_5C10. k ;{zQoU*8<`O1_ {80&C.v ?Į@r:Z~H vK,3LZؖ?`'}q\(Ħ&Jԃmgk%ζ z7x\~6rE .ֵ![mN(q*vvrC-O4<.g:f?oVa}pĎ0Bύ.^)Y-1C\|KMZRVxFeh>EI v ],ce[H ˨Zl!ya*uHsӗmriK-g!Vq;8$Q+[6Pcۄd"&%*Ǯ h\s}t;(_L22qq>1kNyvy_fv6QKW0}ITqY} j YqI,PѭdH%[+^&uGK7jlQf 5).UF.>Ѹ'ՆBWGib2D y'|#GA{/h`3zXkIB^^6+`9voD2I3v! p@x+P}GQR̬J v-.x}_sgꌰeFQOjh~тȃ4[b{11g/'HX ݓ#4w{gp5uwiXc 7xLsJQݷvR6uۍ yqwkPK[Ŭzo9[aIOT4E.6 ]x0Whk+TF0wYj=UΫ}sUZ#~PŽg}̓[9Ub#.K 滎#oppS.ٳvCU&IT`h)SR޵؟f?GwJF7mFx+f9 KaMcT-j,M 2CEBH:nAQiJeQ*թt%5.}ål |+V>pS k)qEϮ^Y rM+ޘe]pM".0+ҍS" n$l"Fz}:NQDSEI&ipiu!pxE![0Vr8d@'0I4UuYb!ܺb~+$?D <*ieA_ēYkc K2efiœorc1Ju TVxI;=k^@%~{>rvq|#;'QZOkZB’D–}f`U>3qf c8j} *V9)зW'XRYgBu*5;GGR QzK_M1 Ob#lmCL1KiрU&979.6&#T?˩>IJmR (f}H'Wp)$C>vOr&‘PJŹE%昫S5Y!嶻/^1^- yn!BV п{ !8/ ,-i%ޏY.o˂yn|L`% Wgk۲789b4Ŏ1"Ijv`J`,/ *\jPJ?~@n:UV4Ho#ț[8c8xɵ/ќ{E'fX뺄=6㓟@1gW7-6?+ 6vXK؁6qEnIY^"kr i {VGn,?9py ٬)@DMM&R 3qpK$SRYOg s4'Iydͨ.Gh_`!B`ՇϽ$ c/<Sq;^$ʈ璙@ʿ-qmf1>BwR0~0|W3B%O~N}gf|BjgޤF̪'?9 ?;lY=Tcqߢ/eNņB=ƒ+Z(Qj]?ƈ|2 BW?0u:ו=a;{>M46`L.']WKTc_1$oM0 rgKV ^L-Mhm9i5| ﬷Ob}O-66!9gɐ)J/sШ0jbhaYLm{EA$^>.Rxsreu 5jvYA!jQ 5V&:kY "U2TOkV=__eV)LJl!x"PQ,>.=]+cn6OhU/OIIiј^~ e#W |csq?.[84N'T5WNt-__Jt4}@zrp%Lle!bE6=E6e3p*tEފNh*_ԛ3k r_s;)qYsʅ֗*?AEoeIfvcGTpϕ3ziR6*Bfs;}-VrR 5y-T]{*P̪!!7AuRqTe|`zPiT+n!dekyypT[NX.KǏA T h9m5Rӷj$m]odRU٪V'^ v2| X'Vu߱#~7R$Vgs쵔uϳol:.yC6K0Q#=4D1)$?^4.x|. ei޲f6 /Ѣ(b>/}{x˰:ocbg;!mzHCEɧkg0sf*jk-_ y4nYCW\RjB⼡>|{ﲊU!N{CC͋N\wxM~=t#nUPEgR5wE9Bh> Nط.^l9d/qOuP 3|W "vݟ}5Vo{m6?x4O ?i#|ihsxS 5glG9yiU*Oov+.5ffdy*P N~oہ ^n* sb y$9p d}B@4acӂ-uw/ uBj&'k'436%FpcAk<)+g; <{֦Gdј<8kGz >Vx/ݖ!̛aY@êd^Jfڜ3l)c' ȱƭedZvVOtgqC*PҐ|{p/u-o FUU|ȕ/ܫj,5Q_4^@ cF\ Чφ)#ҐsA]ȟ.ωBm+yՁN flhb٪\{IQS jM̋$9e e-:]&#wߵ%صOP;@JJ &6TʟH,]y&#ջD3Vctb8ep+K% mC9eWnþB76j=`zđ!澤Y?r %݉Zts7iiNΛeJ55B୭鋨ނ-:&5E + c0yn u4֊\>e ba=߽2fXrpOmNOܮJ U.O[bPpd^sOG/l.nyÓ! 4yѭ 6q7Tv.G]gb/۩B+:׾BX]$(^xKJC"CGqeM K⩼ v_vm7R`է:!w!xPwhPmqV[Z_NLqMư( rTYw"/ErL6ZE0q='k W&ʼ55ʵybvpoL3%{mKrI/a4% ^D3i۰c}%wY`B>rGΠWtܚ6䚻>T7*e>ğUE|jYp=Su%T!gY-aq9 q`0yٳL"y in,ֶo\k}C9@!C+ Π4P>F}V__ Lu0Q ʰnq?[_ԭLAwA)hơu _:8эm9ִb˰KA"g?Bꊄ/3Q ldo7@;|'*똤vy= h.,4OQrJoKw|4жbHqDN8W%d(ZǁPNw>ƃ;1byB!ү[F{W? 3^QY0|._:' !Ft,YMm461Ŀ쟎:֣N=Vjſ`h#kr#ȡ:2!FT)xjI ŻA>4GHMQu@@B4!ӳבKwñ~O3 !ɑ"EAFP?^&ND#`! #tw}X`IE5ܨTVwɨVіPeg{{lEgh.Q}DVxmK:;c"^Ds@̐z>Sxqx2g_s}!j`w <8oAhՕ5V8ށyWC8MhOm;z*+؅1N﷛7\α᫏mN.i[y-=(bꛚtO8ˀUJjА.fa!% *8 #捊:} )Rsfyjkwo6!xZ@o%VTM}c~tEJ,)mwr0Lvm~ _(wn& (Fr'ζ\wdG F;hPq8Z>I7ʃzk"kӜꅍ7ݨoKG/[䆤Y ߉c+DR+pPn&〲4k VAWڒ.ߌa<&xD~blװp3x+Eg&䣧3⧤k jnmO~Җ}6sO@MQK@DZ)`ߢlPֺ5b{S%ga^~w> endobj 16 0 obj << /Type /ObjStm /N 71 /First 579 /Length 3936 /Filter /FlateDecode >> stream x[YSI~ׯ0u_9 m@$|̯VJ`d.U^y{U#m]!akQ+h%"Ah&#ai[HD 8(1q40)J0X5`Ua8@ N`%lKrF%YA*H9]cÁ 41;?QJkAC(fu`u>֣aAfmq;Nu$hh33xp _֕x5<bs|1/fʀm~=_M)u'꽄܆Ѫ> ` LG8_,Z=|XP7%&sS#Nr0{-B9D,!s!^m^n;āڰ1j2>>g{}kYakAr `)('^殂_Rz!i w?.K(f}y0bx*(D2%}8Kc_Fy]Zr;Xu᠔6Q6\RPbm;v7Z{ԆVo8(ȠȒr# @v@uPH`F A> BS9aaR" Xii=2uQb?0Akb\@ Sq;K*B &`y `iV^R%=ʞ, ->{d V)'ڀlVF (NMX 6 ~H~RB4C^0PݸajЈ-d?VoBA:F4G!(H18!wR.}$E1 1sݺ84rͥLi]6KUm3-Ȉ{b<V ":QQț}yuqw '${P* h]hz[:Y=G$ZRe͔8]yQ{XCCTPRZ6]I^`f"䓠PEy> p h-d-}~&aE ad0;af5%Rq,WDT|."p:RA1dbXƴP3"Iwj) @?TdNz =%ll̐AP`"?-ơeJdZ8hIqe)i 8(;avz5K:UI+0-gy^#"i$ đ)G!N.kՓ DgBe :ϼmdld)t5*2qIN!jJȆvE\;R=CG4E/~q-$ }yr)4( A2>QG`F1QRi0[1J҉RԆ]iR"Pʄ#x 4 TH̪"ht'e 4kytC2{8C()QB4`,O 90ErO='4s)@GM )P^(AݩV4)Jކ{ce1|?=aWf.5~G$)4G^Qyu I+ϫ܎h玬9dDheZj!.{xe^.5-(cCs5i\o(+˷,3E`+up}xAGh^(s)t="h6RD#gAW4,Vͤ#N4":fQX6,v2L yx÷}dm.(-՘F-:8 y`bjNc1:x$qZ%Ȩ7Ry4Qm1XaZмb3|0\x!%*|i7/$1hzZ%0R"ёSli H*8ധH!R%jn2)(%DRoB:]&sk-{Ҕffc)Zo׷dt9O}oxov{m>>R^ O3_R}'3\_8Bť?5՟fܚ Gqyv5.3W*?ɒ`^ ȣW_#J^$D4Ch RH){P Ѩġ،pܓ,vI?ztG%j/Q,%x' ~ kiox*TOӫl48M/φߛYmBïgO0zwop ʁܨ|Zw7q<)N'pVO;hxv2߹' ķ%b-'5A{0@x a5zC0|k{G۽_0h  qK$O\(ToeޱWCî il?!|ʹ#B.bO"nB *rp3byl|mH\ Dlx.VeEݛ8I^!fP7e|,o-cğz6B~aLUF ՄCx:cyRׄkEo=: B0YI`LlGy!"3*^WP`shl+20~˪L?&*خ7V>B{U2bvݒ(z(MDjQq^m{M\+z%`z T=zwxH0-Ga!WO&`' 8Y=#/8]PÏgCq9-֊{/^= ,=9<GOR,V|wK簿4Up.̩DZ+mzV! (ՒhׯAs8E '#w8=Gshc0=,\U̧"./js z %d::&&B]XxΡ{P3k~9lvx^ }!txmQ^ ۇ%Sƿ˳IrT+m29wO+o&ީ;mww;-Y -}a[v/Yq-#w!vVzG0Sa磓iW8͢>bÊuچױ|3536P%O <4689ECD54265A2095612FEF6D2BFBE0B>] /Length 270 /Filter /FlateDecode >> stream x%͹2`s -K"HNX+OBO4F-TFQ% (2'`> @P-)ŶU!DUT#3?/""wĮhMDh!5e1"]h% ?;D;Qlx,-q (]"%E}"-2_dŀC"'bq%]c3]D5AfIrkrMeȕ]s ߊ 'u> stream xVK0W+1=JUvCÊ,]Jտ1K/7<›TRO~vSd'Б(j n0I,Iy^ J;x Vg@*B^#G8 Vk9D 9=Qa!h%{"@U,V@GAEX !1(+ YBg~B9(뜮LdeC!=0ZZU4lUQ"X !/G 3' lݟsd "n kit RGylƳ+FVՏ֖L$46q-ha0RY5DKM0CATo$EGpA/xοT:\P (Z:Bɯ^>UF Rpݡn qn8 %EuWRZa6(4W4\yeq|N0"#񌰠s\<й͛_[ٵ|2L&N]+|] {kD?e3[ܯJЅju+f9 ѣ kendstream endobj 6 0 obj 645 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xeT{PSW@%"κmEE۝ةQRM$@"! 'D!@xEÛ h:m8ι{3gΜ|w>[C$!WJ+bUhǼL2abyU=|'(s~+(ژ xA^SAl\ߗ0:(zly%*: )/oaEˏ7(_X?aAU[X6{%zJPu݅O>yWa.0F-bݣh ]BpzPr>^G݂x/[kaWxÁq`e뾼mOe\CSC UjhE-00wq.vacm *M)KzDM>%4z=㓐)5fi=%@x, w $ϯWqYE:b㵻_-mTU3 }|v^N-PD@0( -#V`$8Kx|OJGIhKϬ#`~o6E' R"MJo0xi{ &߂/TzMNzNtOvXU>Qgڅ`?Xp,M~UVP+k N~P{AFƑ!uy\:45pG>D X(zT"E׺QӦi*> oۗ~^J2uRUu%DzOͥJ(`5ś[u? nъH322)v)j5|4fdcLn.*N 5^7g֐^pUXQY&7xֶ3]X%@,PZ/HwM̨ 7|]+켶6QXCS1൒OM)KnͻR2986qv䌬azpFh?j endstream endobj 13 0 obj <>stream 2010-07-07T15:52:46+02:00 2010-07-07T15:52:46+02:00 fig2dev Version 3.2 Patchlevel 5 tapebasic.figawalther@localhost.localdomain \(Andrea Walther\) endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000000959 00000 n 0000005226 00000 n 0000000900 00000 n 0000000749 00000 n 0000000015 00000 n 0000000730 00000 n 0000001024 00000 n 0000001125 00000 n 0000001482 00000 n 0000001065 00000 n 0000001095 00000 n 0000001744 00000 n 0000003701 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 5473 %%EOF ADOL-C-2.6.3/ADOL-C/doc/multiplexed.pdf0000644000175200017520000000671411417030411015562 0ustar coincoin%PDF-1.4 %쏢 5 0 obj <> stream xWr1 +Xl -Hq PȶffgIȖQ#kE_߶/vg|HKv㿅s{lI %h#>7Z5.z&K ᒕ|mDuay!9: cLXmHx'좀oʾ4M=r.SruY6(w…صHcĎ_ 4<\Divȴk e֓;Ht >gޣ8Te4՞[?3/CzX@PVU)"^@$I=7mx^(Y^%S豠 j9{f&Qܴ EB8 T%&O6\*zn6ChQK.c(17ߞFC\3ܺSo2>,W@S-YL! mȂSJ4, 긚g#QV65oM vI6_ oJf:dHpr"A{bW'Gsט)%`aхw1+YeZ~KAsjW#gƤ/PdLB^YZ@-6@F@[:m-vєD 7iVnOSݨ*̾g6s>`9]ptn+Hf*+A\3jQb"GƤ\#c콐1%'endstream endobj 6 0 obj 974 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 8 0 obj <> endobj 9 0 obj <>stream 2010-07-07T15:52:45+02:00 2010-07-07T15:52:45+02:00 fig2dev Version 3.2 Patchlevel 5 multiplexed1.figawalther@localhost.localdomain \(Andrea Walther\) endstream endobj 2 0 obj <>endobj xref 0 10 0000000000 65535 f 0000001268 00000 n 0000002929 00000 n 0000001209 00000 n 0000001078 00000 n 0000000015 00000 n 0000001059 00000 n 0000001332 00000 n 0000001373 00000 n 0000001402 00000 n trailer << /Size 10 /Root 1 0 R /Info 2 0 R /ID [] >> startxref 3179 %%EOF ADOL-C-2.6.3/ADOL-C/doc/adolc-manual.pdf0000644000175200017520000212245013037352546015601 0ustar coincoin%PDF-1.5 % 2 0 obj << /Type /ObjStm /N 100 /First 815 /Length 1512 /Filter /FlateDecode >> stream xڥWr8+q UT9rbd/@$B H:~!+mʻc= `G $%)!CA~'>i: !^! B~R S߇>'5Ik2^ .$D,%~JGIR?(cJeBq ә p$2",Ro%)Oz:?LN/}$Ƽ 3PC%`^xvxI7^,'A|Iy&=^șcpL#p8kx*{ 4QL0 ǀT>2 P,pPB~ =r2.AQā J<;cwjYz"^=P .ߗ4~ʆTn|rvԆT _R=vUN5]bor/qsۚ5_5]/[)w Uv_m~ :k.7Pi*8ntu=+}Ys]8uAnrAb^Qo^G F۞ި)҉!VrcK5Nwi|Hx֍ݘ:'gԳ[뵮w%|Ǯ44nVnk{)+dC:ހw69SeviT9?|[5:v]n!_鲶E6ռϢno2KW﹦Ÿ7<bio:gFdZ?lkUvc7P.r}Xr?ZA1y8m$()Ep A]g<{L1vfWwGj/Rw}q貝Fvqzv*>ZO>mGTd>\́cpU(tACO7#ʩ }Iݭn 7cģ1v<u|j=n*LPb=hqfN@L2*4q|os֙3ոbp6Zנ8q8zct\6?iLj;ժr#_T:䱣zv5NX$L lQoey"/SC.(yT7al= 2)$ endstream endobj 213 0 obj << /Length 2132 /Filter /FlateDecode >> stream xڍXKw۶WpIZ A]jiҦɭEoU06_:IHFc=T펧κYC>#͙$}Ӎ |m3&.<)U]47]㴺K`DÓV`B!p`}ψ`awnUY`h%` ڠkcHK jşA@hMP&$e|ZƖهq$ORUࠛ'}!2 63N9,BzJ'P"H_/!ZtW-"zvtmo养Z@=l6zjѴе^"`[5lz;/B(zFIl \MP*ﮞ8]WHEN8}57PtGaAmP|n<Ad\ݪAeoLeeU=>xc Z0~$eVir'Mf+mxs˂{\Fw)Z?hmQY>M q"?a%KmcO ,VWaS^z8PeH^O}AZ Z;YtZ $kSuDluCT(TԻMo D<;'/Cs"sO`pIDA,3o!-oy(2b^As[Gl) qN;>ڌAq5 RE2>,h[ҶSlWqJLͧ6J!Vm\l5Cpg߆`2Q?dV!" bSV endstream endobj 256 0 obj << /Length 1285 /Filter /FlateDecode >> stream xYr8+x*EHuTblM搙$2j(R$,Mj-5Y "6_w?`oG'㣗(`|p:IFd8>x N$iȐۤ;.ײ{iA=v..i-uD5Z{xY.5)Z5b `IhY+kqQIZʹ 9FxgP AEF.uy[9V)/;N[mDY@x]FbN|;{έ8*:yA䄮W* +6׌bQNz{EUf%P.E@p곭&̺[29B}|hh½YA=2FFHV"o=Bk1&Jztu+id~P5!`앚Iݸ, 4|OFW#X cWsfqBMW:A:3VLn"dC$ b[Pd LΠJ}6;B0 fdY>5K{MuBZv9]c9 ߷JȉǓ:{y6QW}(Pd2oآjd Ξ`SQV$f!M5M7. ʺ`Sa_y*4Yz0-MB#_`ֽٞ endstream endobj 286 0 obj << /Length 1163 /Filter /FlateDecode >> stream xXMs6WVp2 vK+R'Rb.hVE ľay{{Gƚx㩧y dB"oxK"9C9n~/J$&H $BSӅyc,gUV~ 0~1eD 7s@d$ qș@J?Y՗ŀ`FsvW<&,-g-xrrv~sJ9C ,h ]EapZ$3rx.R^*g13A ~tw=~$5xʍ>h lm賁'@WLm2;lPzW-$$T ̃Jv0=>^S{!?jz luzmdةF3y4Q;XGM)[*8lylIwQe]tkxҪ8-o/2a(lsڨjm!JgŪ%G##Ok=cHojmwT٬* U C&dm#!rLxHr!oGE>6_y\~,*"c&|AF /+~2b(veLJh8z26cB ?G$RX!-hҮJ{KP}߉wVj h$;֩5%[|4kWٟe\>✽ɳF__>/fmv"N'4;դMk\kѻk[%t$`B~J9]f3ӛ+&d'*NGo'!v VU?uq|9_;G> "`HhݴASME 9HՀ|N 7>PʮZZ oM[[{ƘE-nmb&9==5 }\ͳ<2H(B4&06iD;l1HpM v[W;Ge2]/Z r`X$MGٚ㓿)s endstream endobj 300 0 obj << /Length 2897 /Filter /FlateDecode >> stream x}YKs8W{18fE-u(iϯH _>{}^_ex{* 0.v^cI1g!@ mM{1tfxn1G?q~ݷ/Mx$T~`3UqEVƩ_dY0JV53NBOqӵ<螸!ȫ5ív`CDCLSR0B?g|iqЫj&aq_ !"Y@IU(oSD,_701G2gmөZ%L˟C ۏSkˤCBmʽ?@ac0Ӥ䝨ŽAfD{tlx ?LBgkUI:qp7՚$p벲hZ|堟rR|OX[;F ZV;&*ÝOӴPƎf] G6,;Ymkf~D|}7 -*L𓶇{>Iavh`fGc 4還  Lm7gjYǰum&Yr rNA|g^ݠã Q ^H_vpcՃ55癧тGYv{|15x1UFFscDfp sFhQȱeű{}5HzO=ܞOδߋ?"u:{D0Y>9aNӓ5!$,1xD5 DS1XM& N3bt/6 dYڢ=seO#".N$џTb+}lu7LNSO5C@ԇ9e8q0rU :Eg zAc޳@@D<SEw` GZ%kWF_p`V|݉>-bZ XIot 0t>1(8F.".OLnH1-A ۼDV1@Ʌ$7x" vrU  qa@=9TT ,94K_zRJ eoj]Nja\t5?TYa!çFy]Eš!ɑa% σq(EPWs v2 Ҳ\@Gޑo|$o *U ieC2, ;I#o 蟧FVpUrb\H@^H09E@]AyȾ dbdAEpPjPh6%yQ3kFH8K091vVvh}/S#K8@vbd.fe7y;B 7WcشU3֬ 68 8P:臝 M"+؂2㑣9ʪ ¦TV/$8NWDj]79Ԍ9M,VvV[xl%H Ǝl`>f@5sL'[]5uSmd*ec%<PsFKTbGwp΋w^q)[OJ.$Hx*,O9S$+6/ ӫb/_C$А`&[{ޕ68Zuv9H{sFdv+ 67LƳ1gJ:.2* { K t7A. Aɉ(n`DJCk ZyiH3BQ>Iݍ@:/",e5b:>p"jĩM^Bj8QY:JF_Pw,k SkE|1xa )~:=Q M)ع\bY~X%/K&z3}- endstream endobj 309 0 obj << /Length 3477 /Filter /FlateDecode >> stream xڭZ[~_aIFƊH^M)дEC6ؒ {..^Mf7@<<N9n_z/iI\$<6E"d7v'$n)we_})˵:]_]PǣmLyq]gI3L2#o$3-}KU7 2"ӝAB5&#x,x)LT#y_]==6hdQtCYśJ" ;iôVgdxY}v{Smufٓ0Qj3-ƨNL2NўK QZГ8|=̳|ﺚKէ;=![dz@ܖ ^"d47*^,qB״v3`~@6{VAhb:,g{M_֬UBMϤWձ;Qw-iF v=L0J$vg\rd5s 7_}qMѷ[H>4-S4x/RjŸ "8U`ѓUo )6 V@bt)`cFQt6zq)<, J[Tn ܛa_| ɚLl) 4qs< 5~51S)⻌~N(ѹ?Y#=F[/Ƨ@Tf:!HYŪ ѻoǾxOR 9 0#CwЏ2z]s%l<,LNXݮ pι2va`Ɏsi u}OΟ`FgGyH[0EeO\ vP;UoD$CB1 9HD&ZI-d,}&T qD@%igh `DQ̫@BYxU 8?WJp=; +aaPc p^s0Mi_ L&t[sYyyHag1xl``T@8:y+|?I90]H}A 7w?ݡH*K7J%1rfs`D+/KZ|w/.ݨV@£QLo?ݯYhMr'JfŝTp~ؗ A׋C;-5x.`B}qyRYK#{kGIWY*Lo!Ot81 ln{'ȍ1؎#h pd;Yk皲GZ"hpwfo8H)cg>JË|܌ L|ξʡ TTI<(I1񿛶k݁䋾M؆մU5Fzۻ;%=rZ(^=(#Uq [ P%#dh~U'nn)UaQgv\,>@օtua -UŅܹ1pqg7}/Re+"s^SEzB)Ԥn{15yg8f310V롺 `07|W6qOGF\/<8NxX5 _;q[눫x>IO$h*WBaQ6\.!Xr7j&G|~(DJ7UF{\׼ߊIl4j ^̀eKʼnK_i¬%t ໾Y< RQ* >%h.g/|סΟK>?P$rWO` z]N~V]B$ОJv 2%8I/e>-y+}#d42'Sk h;H?XZx>iy:i $_Et~ùd}vσ L7\͸+a+)3c qy8ܦDbi # 'pwl]Wphu} +Z^KG% _u~K{;;N/ňůM𰢧4r^~:YI9#0>?wA} endstream endobj 318 0 obj << /Length 2733 /Filter /FlateDecode >> stream xڭYYs8~УTxUuYOMųk_&@KZ2e{D ݍ"Xt۳W,d EE*"J*Yn-?x2mh\e_?_JVk`ȏ/7p7WLg&_{g7/yt OD/i?`, LIdջwEU&ZfՖ9wosVay@+^5]}Ⱥb|S7n{<>3LDN]mr3 `!ZBrSbs8`?/dHK %X\|97_Dmp) "sSEJ-4tf$+ U`d( 5jV)8Zb-0:WM>.Zmc+5&m.-[G\Af%/q41ua[%jߐY]sa$ xT˺n'Kʘak"uQUMm\TEWdeg_n{"-wۣc!}SWmt/%^CֶP<#逯pl//=9!2UWkIȊ?"GN.o@n0 H3xhCQf"pm[Bk[I,M/~ Lxe1kvM - X ]56O/}x5&&ܾ7NV?H칀tǒefa](X})Eγ3?ެ5MG_4ⒶUoHg+w9zy_7I|Q`!BDj$(mh!q><пJ["j0"[^^K{XUCțbcJ a0=A9.*LEE] @0>K!| yd8qPL5G0z{@rvwQo7Hvm€#Yu_ZdJ6牿Ԅl5Sn|P#=(V Ɲ Fs-td^< !-8A 'pI(=h88o`J1,ǐ#lEB搨)s0hD^Oћ}QvϹ;74X0| /c؅˧%+1 Yu8ЩS䥏{`8i'JyJJkj$u E4Yv8~muƃ8@O~8)\HꞧSx8  aLpAB$웱MQ ʫdG/G*Tc(I^tjI)oEݷl()b4AL-LHqhF ^exIi2ߴ _BYZL0* f,Ϩ^hVn(ٷpF~2CP朐P" B¹o˒V ڇOHHtPsQB=?CRWRy' ՜Zձ 7x!^ y~cyčjcSua_[7ŶT]u͔9EI C¸0aSBlmEY)?he=S;żEppjQEM4vCL|{L(Vi8= Q: E"r;wh(E84Yu[ƇMcP>>љ&6"WBP-sT{P'DGàXH=nn'!goͶ'EA9P:d Z]Q `jŮ(wpnP.JY_/Ax:1 XEd'PQ N-8}DQ_"mR%̹cx3bqӺ)͡&IZ6\qF ̲b4r}Sc=4Kںn)?I,%9`z=z).*?a` 8^/\m&Q*HrzP ueh !9R5X+$#Db ̶|}"] G2RЭX&x '#Z0ohMM:0 ? Z A: k&pQUg.M&AooJBum,}b[ѪQ?b dS_5YF~frnA`.M#7S|MR6Z> stream xڥYIw6WȶA\2oIdE̥E}jdEMB֯ ;ſn.eKT87;'^*%'Ĺ)ϮV~ ]la-zI7k6-zHwll~׫kG TDtZk.|#ş>}GLB_|_ Ĺ#Cw*s"tdPﱀi81<%;%*1bDaI_=hPef`5oyB~8!C/U/n6A`?n:nr/|5h١穬1bI6MيS2eyv43|zk8wYWfcv\r7IB jpVi|}H:nYz47Ir:UpquɻW8-`_6MN-:>'&x\ՄB/U1;X09s RKG)t^HJg|xע; S\z;0s"iڙpRNK9DFy[;7ap8(o)7.^w5oWO_ }B{_%Nފ/(v_V [U%ѿE?9qgNTE;U @BE @pv(CF u;OY7+ss>ڴa)a?vפvY zJ5z[YVŞH<Y|H$ VId[ǡѪG$k΀_<$0,ʕZ y-]-]^&W|\sp<̻ӽ94X,R ť@y ?7ۇ5iAס+н7"T>O #V%|pHES@CN'xiPc= K=5u^Y#j3AKvh=Ûzyэe&'Ȁ o?Fx_m06 @ %5X'{IǺVr䦛­,_(psIKNv~)kda#"&v0赮+Cyj]?"ܖf2ƺĆT! vft8˚~vufh[`*n!lB/CDVl p?GftSqB! 5-=TAwl)~pi ՈSvp-I'v'4ʂnޠ T:nfm{dW b(SoL|*K >&[T^SC%"9%KJF2V\DF79А\z 6`ǒrL9ް &-G>Iѓ$kW/q.(>=RA2oN1?= u}z1A9ؔ]^mt Nj1ΠL0HqL0hg$Dfl<,Jpxf@Jr,̶@to-bY$c@\a C5'GaW.iyV3Cg3+1WwkwʂXsttzSD@)]}>䀦:t\h) 3Y պx&oUS >Xv c G0@w_TȭJ0>_F4MK*?᱐Cmb0*m$ T)rL8=Eb;P~IZ8Jp֐IPT69]Ǣ7PUsq9sQ0{d_ˣ ;mY{`dYZ|~Ck5 u>Ne "[G_ӣhߏ_ I1-+,-k@Rz*s 4[S!]c5PAXLonjlS#'-VLfGӷ-}8Ѝ$@Vȝ6X@5f/%c@EY@aK)*efB[,[rT.+7@7׳!1VLkr80iԃ\O}+% ±}).nA endstream endobj 203 0 obj << /Type /ObjStm /N 100 /First 897 /Length 2592 /Filter /FlateDecode >> stream xڽZn7}!7q.6 Eу"a,9htkïϟߤ}@[:9?$/V7|ظGoV﷧ ܹZ8;|_m'w"uir 2Η==݂A#?zx+ L!Â(3@,|\T(ٖ}w^x^ -0?7CGA<}kwwIo# ߈Jx1>0]yMdkӏo\rz|o6oMK!?0v]>;pG)i3砧z6٠g z6٠g z6٠4%g趌SCmHwz?_ErL%[gZ\\R ^׀&iVdVX`P ei^t^|ur*JUf%& KJPg_ sIb6J^|e@lgKYTXLAQ2)OREOyFacfK/#[FҊM  x{0.XZ@Y`$"K[Cf2rAP# 'ғL{E_"/R<􃖲@Jn 5)pSbBJvK ZP L+ M󲄆xv$#-je s 4Ʋ@Z|p{y c{w䘛gkP+D_ &ZfB\L LȶOOH~:(dys,`"*jI%\dQlyC6"*vVE͐m>x*}2O}灦@y|@y8/сDeGQd˴ g[&xWB)MH!OTYQNH) e )P"-Vk0}$T cʣQ'}Tv%? M*[28p\jFdPp kȼ3x N}@VKzd~c~LGׄYMVVē(.}φ,֧mݧ\)G8s+a.i ?CF0 '"By}/"A-NJ Ӽ,M ͻm[oFbnF"6`$C+$>K/8Дa+n‡% 8K$ f!T,ݝc6|g0E82fc[Q,3΄B]|:gj(!܂ҭ>JUۀm@6jз mePcb_LrĆU@9qq&O7dz=5+t4T(ךY\Wt'P呱V\kH`C#ۍ2=~ 0Q P*AZ3˂T:|k8FCf=E=*Հbb ,6+(Y8 ə̡Zck[;{'ڋ a9{cAף[;h o5A>Aؗv3gq i9ӭDP6KNc<9a7Bc%}꺡oxSU-T_i=fRww)~l(8N~8Lm_ ٧ VPufSSi49fwD!^9>: XNHڵP92Q7Ro M{F0ENcÜk2fOx@ endstream endobj 333 0 obj << /Length 2215 /Filter /FlateDecode >> stream xZW8W4#Y?fЏyp0f*FI^,K_}W)0cޗpqd,ˢ ""ޅN;:B x d>rƘ'?~;e2W|Do4̟}>$LOON=?8I#_hc90d8iDVW̛÷<,ʕ +쓐4 B $'4yjhZ$d $~9 D}ϗL2HQ4]_'5 e$ijttdO_Od UM4)ʹ/`T"چ>ҊdB4)HeE ̫Rw̓-Usr'4]o7N`J3wMBiސ@Y+ժz_m;t/vpkMQEyCs@)gmQ4AS-'@©jn+dn+]3nssz_ 67e|stuڹZXczVପΖgJGA汀yRABa]" qDiIɘNJ 6+BcQ5mnŏQׯV_>0h\̻]T5We^`SnϷ*ۼυgO_c Eyf!C;@zo <:d&&irQ\,G\'9"+-CXî$|( d@- dy%) oҮVr:P*\R-!ې~0@j$=G15gigrǒ:Yu&znƬC9+=A^3ṰMɘMC?Nm5KacV9PH\Ԣ._2MLt1g>{y6 J)hk+􎧴 <`Q-<-%;8$!<$u-#I2)BiO"V]Kٱtí.؝eta}k//ܻ\I B,ޤ@Z ,>[ 0VPG|u_yC_E{DzXNdq&tzv4wboyA{a‚7Iq݄LQ$ڞ[5&;NQetm9+ϛ&Y'7v,U4J8 ±yIUDO6|mo .-q[)% r}^i4`5Z~([lEge'5CB==-H΋ZvB&6hP\~l٦"" *F6bCm깾ͱǁɩ6~uuC!ZBɛuvtxU}p'wMRmLѱ]'>Puh*<2,KDrS(Y|\h^B_Ɲ< c*JB1i8hAahW "@  MK?),JͼY0%PIO=;6R00s[_.e}X?.87FuK)}۝" lL, &۳@RW6S4xb~pS?Q FF~F]aֻ7SRlq$?%w6ivnW.v,Ac 0}G8f64$7+ ͍{r #/T\=G]nS>W~WQ@.= mM$$\@/S/< endstream endobj 339 0 obj << /Length 3804 /Filter /FlateDecode >> stream xr_#U 7UgT{K5CI,s1J Flʉ Fߍ*˛?ݼ]\Ti)nJ-Jl W7&RL4۵*zhjW7Y%ꬦ~O'Uw-.trSwn҄[jeQ0J&u(^m&3'85m[-Bv5މ*4d9Ej-7kxCSCLFgKP3TLn:{hC2F@))x# ꩩҶaģP1V^`2gVe,fO˘29==UAc0Ntn sIl(AYlx RW߱bЁ ]e)T'Ԃ*f z3J0jH0-l1D\N4C% jhYeG{ʆX,f6 ֺȜjch?&b'Ppe.*JH5@Ie_;OKJo5 ]\B3 KsώgŋW"0([ZrQ)0B*qe'+ @.Ӿ{5',l>Z.Rt"N֫Emq63Ld mq- @Hl :P%x$j%O&% -+f-U] n-Ost֝|z@I+=^vT9 ;O&7 fo&$⿾!_;o +)SFtV2:uWwÍD}(7 Fui4 |Q-3۱jǞ\p03cg|# R1"%D_@ 2 ';@N;9$KNKzpL&UNeokf!k I fL<?s0=0;[DD3+*rFoU3 ~W#y^tb}OCc{ D\xQP} ?@ 0 S-w8R:ox}3AiTl u8v4qXy01èW:ǩvLz8vͯǚg] o읜~ &1O3z: d?gǏl" ,Ęκt^wIqlM/B6=4BkkרlxeP;C~ݯO9ULP^6E Y &UUEh{hbcAI^RWRF[`2k@qS)''r .-Kv^< "a&T(Ku!z(>G5DmHgrz&mGcYg]uE-mSI;)ӈX]=Tm.=Bo#V/ČBz!}LZ.`70Ov0zfecYIJlC~ĭL yK)H@5(*M|Y0&n /AȦ+~I]*]( -"m+}GD.|CyL97Q Y<[Y9+(r?޶DE]Kt"Udf ]ϔ HO hs Y5 }]'QKevhG ŕ]3Astj~b?s^MaY.rdE^3K*+tĢuu_ g,i)ܮ <{rGsۀJT!Ё=΂95cŔBjDvApL{l^s$ %ʤt?t0`W#9ழ  &@Ua T gDN,S֙>PT P|ЌΝmxY m,aGʣ}.=;*=+JY{K=BCDt9#==5:b]%wUic3?p|<OrU:{f@71/2j` ^a@^gêpn `,n9~Vҿ0D&@54ݶ=2?_wmUK.zSTfʴ}yrfW!G|tqtG7V9j9ky O"CS-8d-Ѿގ˚B^o B)a \!ayD@RZޑ<OQ5oF ~jTK\/W^젵+G0Oxr_Rh+Sxq'N4}PѲK2IxS!D=?Su7S3dc_2ПG(W}K/c#E~j.G>fl+zrgf|Ӓ/u(! U*tkٞϵ`jj5=~yspƉ}bܓ5q3kzPѕ^~Vy.QeX$E.׆yvQ~X4l+h[.;dRfec C~9Gh>a}rf[r6ވ?w0f|r.C`Wȇd'9 okpgjÙZ ?(򃓇պdSC*bt-k"$$3K֨5% VN嫺#_|PѢ kppw&x hX`*hMӱf X9u8@R瘦8M> stream xڭZKs8WHX A|-ijٚg^fZJ_)qO@)Z-g>{sBEajq}(tX(H$TI.*Zq7:L`JYTE̓^Gꒉ䋟~ջܺ\a݇vhg4+r0O 7m3SҘփ]$<֕yvحx=ӫ)=RzJWø=no۾ZReRIhtp0RI4 msSm\״MyPm(Yд- n5z0֕LΡ-[c (oWNwtZv}`jY׺^tOF]h1*3*a 6AKkYHں~QKi#s\ k丁Evrq. gP'&4jY], Q̄+~ǘG:˟;l( -S"r489sB~R,pg7԰+1VՋ~ﹹx |T-u! x >H0@k@D`fGŅ`a;1e5"炶\-Oo9h8 \6n( #Hfeciz6^%y!)`5ч" q83ccV8X}#N~Y]RC%;-vp#>6&rs:Ejx-ǵ jKV{M!#4~m5U7쾓eBK|bPsLC%=ZGR]Ruk4t_\=8,{ 0̝2Ac+V*W3NGkݐݝO/(@k'Zt#H(=6nS<v&]WGL̳7I@?>\2#!X0`Etr)H[j1 >s{ĚKj~~,'rv?,-ejl0|,!u=Υ$8g|z7О=3s\]=9~_yR`$J*$[aoH:ZJ%>/s g@6!5ahwa0),C;l|{>ROFMl۩J^jMa#aeb cM':oN4QMܩq_<91c 0*2[~;("t>&د3Lb*s&0s„iq;nM7Ghi'e(jks)H$2>lL()yǎBf%>Ro5t=sFI~gUfYgϮn||A;0 ?懦"V({Z@m{*Щ1Ɩb"h3W` $?֘7rE7oUéiQ ;PQ)m06p/I%afHHhOKEr@o1Ƣ۸}#.V`k08,*^=y^cOܡ0N <#csx q,I ry hj5z0Ep6*ȍUB~,B~U<ɏ/w80>K<"?DYEM ?ϙksaT<6D=`ѷrEN wo=qxj'A7 #oV+ endstream endobj 354 0 obj << /Length 1763 /Filter /FlateDecode >> stream x}XKo6 W=y-btS(ZAc+3j=IJ7ɿ/)RG'F$H~F(~]D"MڴcI+jDMG"iVki^O9y[Wf5V?NL$i-BR&pM&ߟnpKHTm",**ۨ<$E]gp2K EAyزGs"KAyTպ(O5ͣ!ٗUYryΦi'yfKj YM]%ZҪymNUy*DpS4m m&1= F9>Y˼YHϩ(LHM-Hڼ<)■?,I [KNw(/ʞ(O`M"*k|dⒿV$phKܱfLo؄τ]i$ "ѶG36C;=XgW[ܑm|`e:"= Js = D"-;sg ƥuIBOn8ءTI iϼ?ksO }uY6Ф;Թo@и\ixBisrMdڧȨaTvJ7)VY+8<Ύ;[*vMi[ \PA;k#18ozf;c}"HUA= FK&BX|d8( h:锻?UpK䠧eoߋ쵰 ҃찿3DQp m >D|K;y UixB"w΀ ԟ]vYb~lLOA9-Syn{kF4(w `:Zq]BL`KlP8=y~WR/~^#*xaYy"/R=ݍ0m]+bp~=`EؒzK߽?e endstream endobj 345 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./tap_point.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 357 0 R /BBox [0 0 594 402] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 358 0 R >>/Font << /R8 359 0 R>> >> /Length 8991 /Filter /FlateDecode >> stream xK$IrWI?P)TQ$@_U3N aJ07;v<呞o!#ϴi>jJYnAٻKPsT+LzVuz\ ~5Xp4KύgnQ2NO{5;?Wyup,`7dbO08/6l 5pd-#MQ/| f_#kZ% /?C{uy^jX|Ո~V^غ{?j1Co+S}h9䉙1ʝ-eH0v136>h6cE]@ J/' {vD3~3O>kiyp 1 ]Xnž5!+ N>,}e}kDmvychnV]6+K/yDeQk4n[ا<+—γfiꀁYፇ+bgmb=y3E(K2&' /ic6P.JUaJm?+0KQyy@%0 K c맻a{~~p$' w8vbJ(̈nIU`>М?~Kh)ϗo_m$l}W"ay}~sS9 \!B?LjB{9{%Wۄ & ctApq~3ufY;Č|F0.> !K4=K^/VU-X܊5k;gňMbζYt6l1rD6*_Pn\3͢QrnPh9T/bu4 Wm+ 5ۛ;#h{{Yڈ, _Dj/4{ū5y@ǷP dzVa[Q[K~ݒi.9TbſݒH' (+BZmx 'L'l %t[țCf&~#U:l:0ú'kqt/ 5Z@o7" ӷrF;bG$O4+0ZPxB2~3"߈*}goUҝOF?o\-MDcIa"IXJT)4w21Hv+$ٖ$5;TAC&MJ"B'&I  [ZyUA :D~LI=-I&`t_?vLij26x{CD%pbko~Vik)] aue/I!'n l[tf uʼn 8&'"G/6 +W.Y%o)r,|ba'֙0-fqxbQeT4R%iXVۮNmƽ"0re[C9w8W +H"$Ic0r(ZYaV€J&h {5 )nj@ݷ$ s -=%U3o#;w >'!$yo" _d:@1С6ǂcQX}g&&$"a^WUc.m+VY>qE 6aYTt!7֜X3GSh,!Xܵϡ9fcM72lW?[nHF5ұcvlKخs4Z(E%beӄ0Ij3eC_C*K5@1 a>f+`ьy(ٝ7&#n,Sg2vSJ*[`.. ?% JίG*G (E~Ýpa/<4I%8V6/KRDReoR[29Xp:3\éoEr셼9ؕI/]z*DRS逸_)_2W1т~КG$Vgo>1 Il< 3N`3X鍒kw-)#feHW8N!Le$Lo"+Ѭ1 AbCRl5j$h0$&-$C8;֢?xS;m'"$}<:<nul8:dRZ9-4ٶaݚu: ᭿WnBOCSJY ^liV=B@k{BIL""vZu[|d!5EK30%&sXI*d2aϘN&k)vZяbؒD)(p?'cO‘ T(~qZ03<URqԻHN V[uYwNE~^ h |0bק;N [sHwj:ai:{-ܹFӚrÀg8Sd3НJ!lIl).|.Q;VׁdU PLH39Cδey`KakPw$!,sQ`;"U-b,{lp0\6hClp JC#ْ  "KX(rK#c6\DhpRGH.QдEfqݒ0'K҉c1'S Ha*p-& U3yV,)|,'EDXt$Jɚg]д>=85܋,d10Mž6~6s9i]`[]S]pOZc+̍oT5CK{(TuID9uOCA"$XG";&vy!v-7̀ۋIbޢI!]M0(e 2eoXM.G§i@ c]DR ҶeVc]A'޽Pj&_nDPY%3U_O !'teO*x[ o-WIq13!]/).u!̡v* 6TQ@՞X(ITR\~ګ^9M_Ixt}CaB:Zâ{*UL59xR}'X]qVWUȖ/1On&1VˉPӰ ]8_S0tKw^a0DsHN]rT %7zI":wego]dnyt䷲zemB͍ X O "]'F߾ڒU $OV/{BUtd bU"NxQUD\Oe̠>ܸLŁJpl銤[ʃN 0%w!<6THjmmM#9)[Q([_I6]dW DdsI$cS+QNi}9 +,Q]'$d!ܨYbY>@92=*6f@mgY(lPM, FI7nIU@t~f, f^YJ˾*Ly&1GBgӦUI|^u2[6(+eiFdxe.2(RZ .:J1u1sUg]KqVdL$rGMR.P!FWC]^Z}kfJobIf Ga ϜyW ;}R醘U{\!H.=X]S}/5|P -V?IyR^9dEx/Pz䟴()7$t̞U.ahn'z(KqNr/lwT(ųZYU*ǷUw[n+ ~ob`Hr; T=F\ʞJpJKtL7$ l rOfqE'Y S+A9hf>N`*X? գUJٓDhUUbEɲYPXUW`0q__ϷI򉅧G] U@毯]Ԉ컧]'__`>1,Xz.Ve5.qd}k=nD;avj,[1Tc5~9(xa24쀔4 c]*|E=:u7rsoUϔ(]h:Q}exG$` H . cJirIф+RP]UD NOst uBD Lf *nU\J/<uH"Std1E^FVϥ9uݱ[J>ܳ*BdKb/ A) u7>n+&oiM#?_A ,QiY =xCS8,]Ku*ΡT aYeK!4g>f ہ /V ˨*%XI3VAhg B>Ԁh6CW Rw 0yHeIRg=fV^\Hnjcot:nVXSĩIQRdϧ6R&(u) 3H |RѹU>bUzv`rKZ1/pA&W/N E ΄.gCV%5PXu E+shټݺ*`'uHϺQ +^:K Q ]0;M&s7%00R2qS\t,wn'ط$iܼ>v~ofQT:X:UvrIQi>Ȓ!Yp7?+]{.Γ.χ2{Tt_$_t"iwʦ-%_ ÆL^#FD̢sF:w 0L|QV6:Ǚss_|aʎѾU:E\é]bʩPZsIqC^o(0-HvjZ83bֹSo˙;9_{km̒P~9]1`#%w3jp0;\ Pܗ/j50aAb脧UJ6DNRBh4D50 G %*S7TwE%IA3gv[Պ*oet*RDU4GWF(>R@xyw#|d`QTSd}_"|qo`)`>˵T`UA8 UʙnP|NE"΅XWٴt'o 5kėM6֍@%n Eę4 "coɿ}$ J{p67~r.?|U/@a~+%_@)\N|uo>/uV( endstream endobj 361 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1676 >> stream xeTkTSWא6-/W[EL;*y( isIy yA!B PgA^B)JYZ; NL̜k̏s9g}ca0ój$.SjBM8:69 {N~,[y0n<.k0v"E3q%>B0PIq ,BNf"S3J撎,{wUuyfeEVitE{ЃC!7Orȉ'V6 !'-T\rwvƌv&N_\g,-(cD2,G>6z^ajMAf`nE~"+rvՖ m%  Aa9?x@R- G]QQeF/"?rf'8^ޮÙ}oeK<4qUdDE :aum\. όfeFX(4"oF~H=mhMAZlN+')KYg5`oh1.)/Mf uԻ<./Us5@/d nۖ L6eaLڤx5'8v%Yi,/i+(gSF'ArhT8Eo,vwG8"Gw&hu(]s4ڜ(PSf&hKܖ~ukbV<f'y2*Oör֚&Ix5w4 i\Z 9Xc;eNoJ-nQ@8Q'~vX_ 49-Y|+Pk耯TBqV&+RCz7oz7[! 2:^vv;5T`+FU劊Wj%mM 6\&v;u pkي @(gEdr-Rmz Q+dZ C\, /g^AIS\(49c$m!RL!2|r&ܞx{N׵x7BQkXx\_ZiUK]AbzjKG[(M5%~ZZKy 2*߁qz 25/>kx@\YRڝQc?|ǙpdK2lL]DnanE.8t5J jnLٞV -%@VQqpsN45=u^,:%@t]vܖCK\Y5bjpO$irR%#LmlNj=oÿo _ad endstream endobj 365 0 obj << /Length 3080 /Filter /FlateDecode >> stream xڭZYsF~ׯ#Yǘ Ge*Gvm'8$Q"hvO2 y7~1GO_7,v`Own^%AwEX"%2^m\~Ս3%!CsVkX._|ZJA-~$w974Y}wwo_bk6kZjX}n=ĝ˼؛*ŏ۪< `/)qJDK7Iņ4{C[|4NkjOr*SMKt2-ijǸYӁ\VxsKUBw;uMSCZ8\kL MLe<ou^v#;@@rLoK?S7DAiWI.EӜB5 eg\Z YI*A5 7o*٘S5&ft遆YYl \ neEn/Lf;Jmv^^,y´.,k3wG-OqUϣӼX/QOCq)XZ$,[:@NiZW^qAw2Q~J[q'kbjw)Y8d ڀ_ nY` [A5ev8ZsGΠAk 0&'+~ PۋOGjTg56_O#ӱ6S0T*rw[k9DLd|l}Ta҃e `u7C Z!hH-:^y)w(ɒ^h}Eݫd =d1PVyڱw P)^ Ψ #>?M~*-HVV@Ag¥ "Hn;`TCQ pdu^Y CIcDD+Љrә8b1I`Z d6 ,SdOD "! z!Ԯh*#Y|ǘoCQ+Z+C'fp]Z2F6{Sngw*R›<ƑpYSCYZT[YLSi y86]G_sȠq6W!t[H]1!/.r' Rq3' rަ*u{BF! YBJ' ZK75M1nF.+ (&T*Q&4)BzVjt(+Xh?޺ %APMzj,-ヷ"HXxSOZ4S\*Fέ'Yչ J_/h!T${c,E. ac- E) 0ǔcB_2۠3ұ+Hq̸d`<iPR.gbf$<LKv.`~ޜ0๳[Mmr?'˷[40CNk ȡ rre|,윸,`!)H ը@z[HxnyGuծ-e f_7_էʐn٦wP`? \VhbРڈ`PXj`^<ؒ!5"Nkf4#u RsL&AgxOOG@c}=cB3I4_a(r cI7qpdP[L6S R!{8PIٓnC].ls--1IP!$Q}~:֭-&8ibQ"CK2q pL>/\$+=z{t; ٘!K \S3^yvMz+M%mcN˧5?0 r2Ňdf1PEuX^,ty}m|H2URPG;wִ0~M@°My3zvfMK7Ϊ >Xekm!7-3)>z&᷽fjYZ1A6r! :|4Z_%;{ `}MfK2" c/9P0%Pv+!(4n&@lܕ37۬[DBT僵s <_:x4s'(w➅|&U %k#_ oMb=XmVo[.hM/(S##F&J\,,\ Am"=pݩ6!}аP-!%ؙvۼrCXZD:zCE_2&W2u63)P{W4 :kIq 9=9-Sb;"KjbVUM044 C&ҎƢ A4,BIT*f±T;:W$lLU a2x1j/r]/:jR_i"+F= S,Nz@8^NԲ}Zo0^ % ]wwlEo[CbR:+O]^WLXA ֤_k|YXί)?gVaz?0/yvWa0AB/[ endstream endobj 378 0 obj << /Length 3183 /Filter /FlateDecode >> stream xڭY[~?BD4wy.9I&yW:)R&)fgvEЎeflگ_n^xlQc :uXlM}k{;'|$uq6]߶vc)@mEߌh/\HggHR|n 47}BJ84aɵk0VAv:cEx{y*:ݺLpQ$K;ʡQHGm9f,Hfd1nEDͭʡP[9< i'0hA7,`8"4]ͼcL@\`vf/`Y8.J\ȁq4L$(uʈ˨=֤]mdW2x|hXy1" s? zwb5Tq-@mjY_:a=kOG!pj3Qߝ:بd83`tdS:2)oX,!6{Uk \ 08xEC l' 7GX sݷO೩ w- &/Ќּoj9.&d#fh\ nI u,J~9ԡz|6fr7YL¢QcAd6n%ѭK_wm+PпmÄzTr*jnXeSiYUÅ̵,YnN4^NNpO ].D_\ien VB6pLL3gLxEQBJ=eyH/_!DEĐ~x$6M{ey0a|~"ǖ<|2FIBF=47Y~SrPeCiԩYo&K74ubzn.c``r 4ЋkV˃ccE4B`g0bp1(@[%Xlyˎzm p&уߞC8Paa|HbX9,Tu2iYo=3XQ`9N yq&{‘58Ɋ!Λ?x_?,aSB}18l~5_ZRꌚ!%3R7;Gv1evEjĐ/ ֗!Dj(?ǟ`8`W1|҉TKCUN'؏" Ǧ7߼޼rv5d% qpbk.Z=Ɋ~g(whtݱ!^uEIB3IS[%ōbXڻ]iTP{85=2pGiyA䮿Ox7.?m9{2'Ow* ޝeRJ5 oG.VnnS?8.L :%sw]BҒ3iݓq0:uD\*SnG݌oi%x5˥vgSA6.!>qRe=;0vͻBhVI3+5<|={щ{G;C(ۛpbr$w[HfOK;̍A{IR"Š_^qJʱ<>N]2RvrO Onriwq9b_$scG Fm=K-ԫD袑K99.Qj{f*fIzbT_AE_c9^'w8ӣKwQ?pbWEs)DI0j`p\YƱgr^W)#gKܬz1b"R qV6.ܧպ T[E%$&âfue)JͲG`yy5i38딹Kfy0nMgmqMf9 PԚ}M#.xѴ!&{%%umYP2~uO9<-%6ܧlkC^6JIv}"牥4f$BtAJ !ʊm1$wHuo喟kQgD?|_dT7\G^KxT%E{?쾻h?q endstream endobj 383 0 obj << /Length 3342 /Filter /FlateDecode >> stream xZs6_GBIsכqZ3wmhHKRqӿv?*rj]3>ɳg)Ofj =ńJfW󟮾}B'Ùe2Q@͑G~o Tt3ljꞾ&|ur.㯞}W?~ϰtBĆvlUmvM}ۆN0> S" G|mm\:]~^QG\n{D2<)=)WAk~B*~lv86/^[TۑQQKw"ItiڂF7扊u*<s:1Qe?#32lhF 9LL<~픐e3o%zKQib=^r٭ ܗitWY[hPVhFy~NN\8 YN a^#-F TAIhG/նhp %".y:aHsޅOQ0kd JM ,AYKaNt'1~fKԜwԥSh:/ m"ؠ6:j-5vLoeЮPنĠ|,:iInY:ۜ`v @@^T#urvu gjfU̖ۓ~Bg L1if&L*h =bo8$АRpt =O̼q$cuurmw5: HДFTB+n|i!̺F )~zōzdduu>N|+*ZnYq_¸=I%_lʸJx8Lsc4 26k ƍZ6vt,6K@.R,pK#N>!0Fjs_ uI4w0!3Y5hf#2LϦ Yi0NN8j"1zf hqL4ei+ӐL,Zhi -IǙлt⭋#hjK[2Nc2jHzc]rrR~Pu90NUZ{D1?R@:Zz_>,6Ѳ!P_|)60yihG0m=͓_B&@ {ߞM0O S,Р=y>d*v̆9+Sl_clNxGS92b24ӱ(>=C5̤jlRU=$ky/Q͸Q>ͧkg|]?5Ug 梩偋eF+ݻ[G24"bB|CE.]C7r80op)ccR&e@Ce hD  Mi1wKϢ:UTDے<1XJp ncH|$)j0hn]uU /5_6N ؽ D[< 4ۊRE>'8TZ=^,X]iB>S:4g0 AuZ"×ddI? CO>dKx 8izF =ٶ@QKg-*O?=ԒtoVtԣ?S #u; ۇOТ?&D3">$ӟpȩ"2SGMiLKиˀ*)u "b`LfԤEja^=?\Qwc m5ݞ]G K}b|pՏT\p^Q,H_KӄssP =Jȩ-J[+#qpQ#17+@$$`~ CY0dr@SX,DAgVl0)`3M0`h}V:^0ۧG}PjO98l5UN$0[1 [;J3$1|,_k=ww+12eiU;uxaԧ*_,ɇƪq9aĸ{ޗL,4,$"_9\F}Hezq?EVO 5FZ0LČ'^$= ㅏxFAj"E~0k̏|U,7mtr'_J/vO-JL#@ex@82zVX8 ޻/(E$;tP־R φ?~WAQyx_16k4]k=tuol6L_opH#qiJͳڕnb{ endstream endobj 387 0 obj << /Length 3132 /Filter /FlateDecode >> stream xڵZY ~_яʶK]IbǛ劓$MӭXXRxSSE `q'v&I[aagMl٥wwMbuB0vMkoZ/׷L %cIǯ!t#x>$ӄf=UKr1e&aCwnakS \a^sĬQo&[b࡫[EZntGݝ{+ÇE<7fo d83i`u,[<҆I# tp+7N#3KRljcя\=X%fw2,;t ~E]d8Lo 8MO:*X%#l%XNSH\xi26 ;|&lS/ϿܠH^@דĤ Z) F.֍@ߏ cOVhC G&KӦU"$׫Mm,\%m}\W`K'+J26_()=q-%ߢj4H/NGu6øx$0Rgn׿խu8Yw04HGĄI?L~DHtP 9cX_uumqL'KOcYe=F }\Xu-tgk8&IzC\uS#KNhH1e1 p 1 '#%)۳Kީa+E!a=u:@ȋ]3/M~2_ZK8)mz$-Vp>x cy1/{$z:?H Л:W)9 (&sYvgH[YԴ2\]B8Hz022 l  [L$ʹxm>׶k&Ew,:\]U6P* @l!!fL50f)eBNLټtŸDl0@{Tqu1]`O]uw0ȢĐ<"7qml/CHC9!ҼRb/EXK84 9h\@I&H,j5@\d+J=3]mOLEՇ/C5C|<.l> $RLڷ]SB4 ԧōdΞ(SOqfpXebK^F;#VG0F 3U ruIc_"^j]kfi*JK89@AKYFg{J`-s_o2TH~Gl&4'ĮW nu Pr—H-WPBy(4ې\.a?h}[5ѷLFffF[oɲ,7"fm&#f~9z^z#y+yQFߊдxօj0ڼ=Y+X,{YhW(^{-G&e~JvڄLTdTM?EGM%|n_֚8GG+ leoKCB͔!a.74x$`mYab>Mܴ,\ !y.[/ܫ)2]6*0>aZ+Q4pIg!ֵI9VBR%BY{!}84QCeCB.H p `#^saXlza nbݰ{E f2èӞSƇ硫k 'njhHQ0NA(e66~Fu uPhSa>դ ʓc:9ؐ+8;r *ЩoHDǼ Mxu{xyhSP5+:Hde2f~|| +9YWo =$ްl Ea_d55hC  BzFYS\_"HDp~@|B~Xߺ)v3בӵx"2YE5!#l~36(Q29oo w >#0Si ϭ/Ͷpr*Xy6QdBc[bzK_i x.M.#ca}yDm$Y5iv*~v ÄwI9"xOEWN^ Cu`Ꞛ.Rߒc)j8N~pѲb>};8Qr.Ø^\xIr~KWgV7ivϖ }E{ C3džFXLyWRJw'a AfRO\(TB@/%G"g5n3/ ~e endstream endobj 391 0 obj << /Length 2906 /Filter /FlateDecode >> stream xڽZIsWr6zC7*/S<*9@$(!! 46 \&V|׷Zn~xqs쵴3$Jf=KH^ f547?={mpwBy uQͯ?7?^.^ao.?>~^y۷g{" gnrxE8B[c˧>̩DU{F>-,0ssח MV5.{ytz..+&ݤM&]"?xBiadZX0'D6Zeti~I̭2p͕+ňGT Hiq^I9°䈚m划#Y"qBooQLH-\v:GeNV5?Vg#Э))iH+2'pQ RE@<0L$n ҂ tIo7ag%,|+ O 05zUp hfy2I2m⎕,yiIJaU$ǑHbMn.~0/$'13k$lk4[AOHϾLE9676Ri.1eH9͂˻ |/9-Zqo m$88*pLeUVL1ҷ'e.4~|` Br27%[6ɰR"Qݲo?p GS6/p2>PNX澱<8I$'HW9KkueNySRpLIe($rW*(J Ir*<1G my\F(!@2uJ~@d#i-QWFfH 8- eUXo#Ƚ<9-# sJMʠ -MXMI!K7:"h,`--Oc3Cb-b W~GGL2ɔj,N[wv@Ew>Zۇ 3n*A?5S)a/_\<6_PU5Mɲ()=0Z!yLrlpi{&ǐݬDqD-$,l0An!bsR5ħ'I帔ǃTh.e$|N<ű{bjҡ0~{ ̣6b\G&J$H gAZ&azr5L X> *8ؘC<"S014)4+ 7gtj UQb]3t}$T&buy= #4hSQqD  ~uiM$IңiEkp'WX}Yf'{ )p.  :t L_WxӐ.`6Rnq4f=*{ 2WT0>W X6eI 4e 8m|&hc},[RCR=0QڂH"nXݕCQ"q#,orVʸc]SSu;kHIyA.<" ${8DlX#?jc4Vèy@v < \h@7`4 ZC1V^xO N>g|Pj.M0[ QBX.wm+y;tN0 )kIiv$LL_F+wo_Np 7X!~@[Zؠ}~pYU_J+MVeO lջ.CT&_(UVBJ;: ?9W~9 ;`U o$2ͤ)0q{\9|! UBJ͔^A_y55Ή'2b&:ˎV{Bb]:J];揿qF *_e`7ҧ#Xo/7QEOXS_&JWY"]~/)J|@m`+ spv| >Yb0pqs!$ K2ЊX+QօJtlݑ/8E W)'άB ,aг3sG~Pe_quo@6?$`gA+Ӛ0S0J(V8-A5;Z6i%T^ʩ:[KݜcC+ej1F> stream xڭZYs~ׯG%$TֲYcWJ`ˁfsHʯOG""F_7&7曋n.^ҍ Efrss"hcR-N77ρr+0 ~LuuY_`]naAv}76-ywkKǺ׿_o}VDJ0SڅLpE~W[V"517~oh뛋/pp*#0ޘ(Q6_:݄Bg恆7ZDCڼ'KoTȒ¡o׎'3l46?oc^nIڪw(AlwMF W5}۹VSuwf+^Lk/7[D"2>ʹUJX.:P~ pKA nU%hHC$Qmw0Lh]uegŠ3*([^umvRXĠYY*!ըuԷ~bhRRrz]褖¨lcŒ>S:CEsIZ_WVca<)WoU[5Ycxo+[08c>r9TȝAc }YCǖNJe}-0*?%NѤʪbi",킭6363ʎK)Q{cu2U"o茲i&0A̵()q.#gMYդj\e;EU x';{.qX)Ɗ/խX۔0OEEӶXAk; a˼*뻏imqOT +~a{?x$R/TFʎ -4VBTT~SJpSOg4![H2ً07ϟsH,NF&W!Rg b _+߬J92b5PЬ(<}([R/B>6GZQC\wAj#'?0S`S~i8$r )f΄qnFj ;z\;HYQ7mmeRW@j &J ]3 h{.Ҝy?-8t~DJusЂ`kdzr`/< b6s%+8W],x TÇh>hІWQ9u&jmTĩ\2h4i p݌ 45&xWwwh깓>G!l),Cg~OjPb<Y6:1Fr{P~.JzTa?v}ƯO "3! "DJdY E0$ADb8-؜0Ty^G828CIPX&uH?)^X7Ia"@:ZIrb+aMǤ/p:CJ9S{TޗRv@x)Ρh[W٢[o0]ZVi$1`n<m%Sb& o>4pǭxr`F!}y`%F}ٖyH,J !q1(>/A^nDC^1H}o #{G0 -6c,h[CsOg ~2P ?B7zG{w+{/r̝i 9Cƾ͏8,vM^J8;2dϾ cǹ03+*">[# Qjm"!GYz ڙæxꑛcN.@pOG"{ O>ccEzWٞ e$geUltqC` DS6=m%Lz¶W>(}ɩ.hۇF֧RyXG q Ȃ3%;M9Jfƻdd/Ewbakp&<$# "q&"W^Q`oC PѬH^,m1xbz>}OM=pFtTM $A\TF/bj#V\p BGI\Y9MElFUj8w |JGpXF2I o~;>/f[|&΢hs O$h/g( jN0^ 0 Үl;3bZ DԬg-pEӆs 6oGpݣm+rP$5>TcZKK߸JYA\i$JX[f2oWm& IDKCӨ8jxC뛋ִu4 endstream endobj 400 0 obj << /Length 3408 /Filter /FlateDecode >> stream xڝZIܶW $ N{48=i^`߼>㷾ի?/"qL31ׇ#,jg\+fzN3ρu4s3Z4L Oa~l SnyӍp<۶-%}=8g)|8YB '7sFC?*LⅯe~s<(2,pTIwm (O'E3tGg}8EG﫠ؙHH4di>_Lϭԭv  Ѡ4xe/ ݉*)`*✗1v"̪s. ox䵇y>U0( =9O+/vj?p1K{į&[U2dk2"\&2#e ߇8? /M< Cg{ޖmn7ۂgUO[T`SiI չzeui,h.0.fF~Lxo-D 4sh|g+-QFk~@@2<~= P3ȕ7fpGyRDck -.d0Q)2ȗY'.`BC?k h7v1S(+̐ph!B]žUXa _P\o$וFJlre8t6D27 !#n@gP,?@&ttE6(A`Lm6/ǥV+MƵ5hmiz Im4~ʙŷ8%ZaXZ 2T%D6QmuA*kؖ8\Cwi'= :ΆYmp OK%U{cOx${K$q596bnӞZkUFRb"#60PXAXZ𫮥t @:h` hHy^mo w&{FηN%McI\gܞ8M6(Oa+|$GS^38{EA H!m;;!K[P`z!ݨM@pŅ`@K#[V[ZN|~,/dw, âC,M`-h|U.x=Om_75,Ŷ@ף"''}.v-@1Qp#gvV2D$,yg_aIh |RcB@mEG*`b};aLZS!Mos+#drc۠{,tWv6# cVjt*aU ԩA Ost#[CTSbvLU.Űf@ꀁCZ'NE@;!3ڒʻ44~WR(>-e>R/'lL G{Xg{`(6'\*")Ddzey 4G;!>𐱎u+ǰih:+bb]^JeH@zIlOZ, Jp7_#k4S ]!._Jy;pVoè%|)w"̫';^rF`mtRwwpfwZsM j k5TxDJ@&B@x4n;vFPվ[ecU 8R 4 ueQYN& KqC QRL1A w׏aѓ桍xJL)^d2#Rn8iR{kg%hx*EDt[äT_y5va[Dn|96? Pf\.c0"'`"``]ݜyI=G pWxUP\NQ: 1 lMRv0; 7y~5Өvd;|!>0bA[EP1*>yB7 Xm> stream xڍYKs_RKNRY{]NX{ 9ˇh%A]4`hk*OovGDa.v7], ]EM|oBWRa*v~Y3oai2E7ǦS1_ƪ= gއ }*H}vWJy,l=2{Cajx;So0E*$KwL$be;֚|} zQFeA*S5e+<TO2]bDQ>1]=sl8 dmP5,XS%?N4Suȃ,J&.8!I UoDP&)hMtUK]~p"ys;_ ZuC1.Ue"/4T(+d·c_c.c츉JHz+(ylaoyA)T]dmESfv'k=^qE['69aZRno$fz0'Źj.wk_u$.BndPǁK+r%Kv!C9-3~KYbGJqcrQ ů4. bK>|,b/ĝ]oNI:nd8ݱSB+"M.)**(J7 d:K ˜j!x9=gy&b"5]빆##`EIPЮgڥ$Ю*HMOЦ:=k:Te5_9UfU3*Ġ^j[7U}T")V 6 ^`W! t!BYfAS{>trD̅ȘRVn $.BXP 4ƻ8"k{ּq ]4;^%YԫY+u$_ˤ [M /293Z@Mrӣ(\ϫ%SXm_n6ބVm %8M=SLY./)UH)0j ILhF.ʶ>#3op+xlAsJ6h 'J`;c9)[C{ƥ)4qiy/OOno%(G9/Fmm/ip5TXv| :7%?Ur0⦫R"0m "r]?z>Y%OOݤa-NK'+x3cjmF`bP|!1Ef!ΔZ y5vkR͛'{ endstream endobj 413 0 obj << /Length 1655 /Filter /FlateDecode >> stream xYYo6~G-j |}8D(ϲ(=//}KXOmU;1anrHȂ;>JڧJ 'vbppDQMC~wIS jDaN>![p;pd8|Io:]aZ_n΋7hHfuǗ=藮4Q3i̅|F1bz+CmUgu}}&&Tɒ%12BB;pL n-iR]a ' $fSv HT[I?R/~U&/h(psiޙ鎝sYemu\RD4JX4HA3™ N ԉ#LL|6eXz%-$E8ώb<8p1% l/ov,E]jK%@8rgP"wut_N7;ԉKy궊`F?k3W~TצruMtD;KsIk|515L*C" vX|#1~dejDP@+w3}ܝD2bW NشekڤޡubТS5}U(16qXqZvp  ZY`aՙt:̋ΥLuDV[MxIqaK!}aSYfGf QVZs/C>[xA,^+NOF !hrNe7hWȖs_{o/ncTvBuA\VUW!m}RCxq@*&@H8ۃ :["b|lBᡆbvv;[BCKɮt| +iDr[_gg=K!l endstream endobj 417 0 obj << /Length 1449 /Filter /FlateDecode >> stream xYKs6WH0^$iit!N EKlP(Rv @![$Z~X|K`"S)½P2D ҇`_t;O1_M_VfN6Ӳ3̏QYZ$QeܴR  pJ)Bl!_d(}dЊ00Ң6\&(P3q~nTM4=qnsye>bW -lmmAGU}#!lad!!bCW{T>3Q2JV,Te3kiV&u .,Ba\OD 3M5+X!Bi  cWu 0JUp`},ĈglgDbbzJJ> stream xZs۸_IsOLM&N;\hyHIq. ;OpR|q?_agbq]deB/PvqU,>-\}m;MMj>k}nZ)|?^H\p:x~:[+lbmr+˺m`)CKn׬`>vʖz~%,emqo}8H5G;KU4m[vwVM] )p!+};JIm^/'9JȈTR%`U_' plHal>Ep52[ d`[|;Zd($@ ,#ӻfnx\֗_//i%V:A9F[]?MMChLxlZe/\MWMOm:hgf+{خbEI72fU~+;,컁* S4g<ѷd0o* c\|(JPm0'|(=(wa.Ae{jC+m^#8+K2pHG+j@g8Qv"(p"FFfb`PCs6~G()\Wt>jw[SHa?J7SUEʃ%;!%\+'7vUC_'hښA {+DžqjM+9sCQ5uU=HCʩx0 U)6t bw 1KWy?,T20R<<rU L%3t!iabA!0=& fݻy[~ ڧ;; whKi=#,8)r׵B&ߵe^%H|UO+`5%.f_%_O/H}R]$S(PY z+/C;9tJ}GOKUwHR4MPd))~FG}vdـEGK"s5y;WYPEkiS ʉWN7< ߟ1gϨ5(Qe h?< z<(|S{)"\O4^*'M6fF.LpZJ!**|γ絥nCDv81".ǂyX2X usITw1y Pyɸ'YK>[QbflBE@r,J0} =s_;&{"C>]ןX 5zEZp&ssQ.(S|@d4Ch1Y#eߗgb%Oȋ߮$Qq%LŞ!*qR'yJ#HGC2r)a%\+A#bP<^F@Etcmn6`b:6]~nCgݏr&aլR&Ĭh.oʺl}$f 9c',I8mgp +8Bȟ~e_y8v vdL۶D )@yGJC-s"5fQ?K7ͥ+ݿ)5v*jR;x#T(v)?Eo+܈:mi endstream endobj 432 0 obj << /Length 2700 /Filter /FlateDecode >> stream xZIsWHbO $qUJeOʾ$A6 hh_z%MRKN^{K.t񏋫7oe`4e"$erAH׻RZ3JǺxXdj-\WlYzWYe"эڢ*/o25.9#0`]Pb_EBD+IQBNj.@mͺ]uwa!Uf(my[pr5v&9Q yf}; 6;]β5?\,+YaMV{lڬVJ/6 M'pͦbUlӽ6;c>S {ف_C̤νd@Uvk0v>mWsce7 ݾU"ra[9+X:HٶU-Nd1^ւ!p`d),fn ہ30TZ9_:(x벦N}KYh)Ɠ`$|yj&y>Qၶڃ`̶0t{iUѫ(‰P oI̜m c[ |=:TyȣFڢ3E4Ӂuq;D^&k>qtpxmkC3mXE6BawXxy,*?ܢE&%:I4)?oMBN]OAn <><OY[ަ[ocWH> tRXg$ ZAN'!v!RhJe/F>P΢ʈ7+YRn5_"ύԎ=닏@mUʄj-]`A$]yBw\KQ `jgdD^4&*YrϨ(kJ- K3ѯU?P#;iy^5IYG|AR̭O@` m$Id:)}Ld~x LJĤSS*cR U\ˍ6/Z(fRך_#-ɦ-ԉcTԥ?$`as.;+l}d"Y`W8W8 0RX'TnS tDf; `,l[mW*$DyxY\Etlc'"(}YWH|-^}:*t),| BYsLoz4 ByʐDg7;݄P4 P`Q¢bEe;â> L(E& )Z2X0!$3] ݆AhZ|PL`hh'2Tj-8 4،?QiW\PZT.y>o oBG "Op`_W'Χ`/`)6@aQ)-? [Rl좈'lLF:ML)l2L\y{P}]Xhĉ,@Yʥʯ 9mSTtjmwұ1\< LJi"tŇ%[b=$(3eH?UqFi39rn.?nvQ$DOF$=PA@|MhގPwcD>wձfϾ< uw_^]_ZW0nZ+^lP7Qv7MW)`\wlEay紱ݪhQh+1pL10/Gcc׸^@7l22T~}"+C Дqlb]x!2?AW2$,'jDƏ&oèg*LB4K 㫃#*%r5Pmⵁ?g)S|I_IHe᳿#Ѥ[&`  rpcSkMy [Exn \=c"Թ]W`}Lg,鐕w6O:2㻰$(қ-k 8lYmWGC1dec͡6Mq{͟^q"dGOz(E\r|Yg/N- }aʊY:NeD4S7H 7 endstream endobj 444 0 obj << /Length 2312 /Filter /FlateDecode >> stream xڭXY6~_)J=Mjwdfjk2#qM29Ӎ(jLV/"h5v.v{.fj9Q!G] bg|aêjHB;J,vpD*2UiblLݒ:$OB&kɖ$ ]L,Q+Z+^~B5=_5E=s]Q扔$԰(CAm UL+wZ,t!,H$p= s۪= ]lii, ]e9,s OŗR@Qӛ%nک6<(p}Fx5ёT]bC~+Oa(Aܻ:LR%6TK)Nh;c F]IRu3}HR*lLO *3)дʺ$o腊S,~o[ ;> zH@/Ӈ:x,r9X< (-H +mzS AwE[9JG3Wa`ZvgQ6Ց6I7MahA3n6\Ҧ%,JɄ"'Et|'ホ9Hi6URI}M=Tς2ÝBtܞc/n>ţӬO>WGMc5ݗ'tvruַTn@ɳW^isoU6y3&SD=(,g;"Px0fkzĉ9`nWm> stream xڽZmo7_oMPKoEPi$5]yՑ|ҺޯgvWjJ}ygt+ye]@iMFQTD[RrK(*oYqUHVE #JΫќEcFHrBG,Me9KfeA%ሖјy\$cNxlPФHt>"2G^yT˓hXtDO8 tb?EAb@ts2”5Qщ`Tlr]U1S,ޢŬ8Bch P8N[B% &u0,IT/PjFu^%N.׺ ;fH!jÜbkzv(:"yoeHKܦtr6$;u`$޼j̪0Λǡ;Omd]NLeHJh#<>f7i@:C4\]Hʊ+dU,=-pݔ6 +oam#dz XՌyE&k{YuhwX XF%NܨJ5xqC ?td; 睲TJ[uv'v7Pu7(tz5)|Y-'e!XcqU?D{C^O9V}tVra:-P%zTN:WBGjP: eUNg{$ogz־îm}O˲8<<~'Oћqò _iSBfXVOxM帽6_չԼ0b/Qgkzjyo_ftv0l9]=X b۵~׎]_?[IIT5ɇGemD\I˟9n JIQ_L'3U0pxt5HШx׶7LI1.Ί?/Y1-fżX^'eQDyr1 hzQJאDWb#In`)BE`Ĥ%_e ) =5R'-&^|}S ~#74+[I[0dȏ$' s|rou BGA,6ډ.!~hm?Y^0C1n]%K1ms 9w=k’7Z:൲⢦qץ)B\ka1PdusNր!)7Y 0daG1jӎݦξƺo[Z5MVfMdw_l7 \vGAʛ$B9\KwbؘMs!}gNkdd0CXjtߝI'_`:܆n~P# HD}20߿G~f=`pO&[Q'߃=4v5PT̻r=M}COW ="M(kK Ew> stream xڭZIs6WhntU&6T.gZdN$Rί[!26o~yͻ:[$Γ\v\ǹЫ4SPnXݮE$OmVfQvktQrSv%Uki[ۧkUv-tRĉ@%Q .I1_Vke,5AZ۞jյb}Xelr})j[ַF}DMWMͻ-ۭyӪy%$Ё/tXED-O6;GX-5јEϷDE[1\&gZ[c iI,2㗠Lऐ~1d<N UXY0-TJV&SMq88u'u_lo;|Xz!AqӃ䱐4FVn?˶ϼ}R80#"~ 8Ӈl`#y10k爛IyTPv/cd҈69+>Pmz$mLX{`s fLN;tDǦ-]Ge9PzzNF9=qZǫʶ.<-;AB' 0T~Uc>hƙ_mP0J2Y'r^ALOLP,{,NS;#Y ӔX+}57F6 I몮/Wf2se 5$-E6S¥Zu:Րi/Y@! "ld?`N Lݸ#* ?hT>c?8dE@} 6@Q` 4Nb$SO˻w|jUV6hz芽둆GԩѢq h1TG`fxY jjmvFu{b#l];l^sl8rERh݀cd/tW-2vg #%8 gDE&NXv/8A>[ɘ;N8D#)"!0wG6 [E5`<5q2d]-&et(= 3&zWMo~pq%-dJ j ꑖW*m??.X`Xʔ2wTfao9_Uwk){CGA &kbLME,r]b,wudʽΩJț1}ssePP{ 5g4.3YZ#_jvA+L8?¢S)GD_)0Rg9('idϸ-0IP7=Cu q…2و<Y|x;30-BcUL¸, l\9fk 58{!j =tc']\SnTnatk-n*p@q:ͩ܀wk\@󕲀:ʞ@#a/H>2{8tᐢV 7!]X;.|ҿB,Rk5 }mBc[v.NU9t`d&ip!hm]~ {^xAg<ֹy6r_́#̹Ae%W_y[ϛ8;CjWa~hȟ? >٩GB$d,-!nRω1R)U/JPyKzP#Gťωn!!@\}@o[\-xWRaK\}1Ϗ}F( lTX$rp J)jnfem9 Y͌WyiV eoSh .2` n+_(9@!5AބrdNϥ<#v~˫qBLdeϥ r~9\a̓8IGC޵%`_+K8y<.% H2EK`ͣN}P \b &8)q wRO#b[qSi$\ih\!,}@|)Sz:{` BsK}.5TG6Ӧª1eu ̝Nʛ; 9M*ZBf)7+r3 BaU$bW ;yXe&B#90bZ^WW#b@_襪>z-*oHy)4ϲ]:^E@b$ 8;t4JpkQNu/s wzV:&_i6p4g_oƒ~6htKO/ݷ`KS~)ێRXS%Tn~$PQŗ `9jF_vNE,~ty}0z kU97%78uÑ",$ϐ[ "e 3ߛo7eSoJAaSyBFbWfj hOCc!)rtr*BBj"$<د+$9Qfʨ{AvoPb7<{Tel aoܛZh#nv||(*fz4וF"}Oµ%,%)jTbcqFJDE}E|5 ܒPw\áEOIƪMlؘ2\lW1C mK#:wFB`1A2w ŴP3>ԋu e``MRr3w8tYm[߹A쇇ޓ)#5xI|G#)xg)luze^HQ}C("1RrwFBUa1SQߨqI$ pFq}_XupE$l #ϙAЈ0W"WP=f)-.Z wKb>b5> G[NO9t~)k Vx,}JE$ҹew8q \ endstream endobj 461 0 obj << /Length 2383 /Filter /FlateDecode >> stream xڽ[mo_6p.( lR(vŖJ~}/R$[#S퇵%gfr83%_t3HcM]9҄GR1DїoO?~Uw$U)@czvLJ=clOOFcOw#p#!Q,B!h}-c*zC#qN:>$sD\{! b0)=U][S{P(A@}%~Y JS: o~D ]"l2 &:R>)@GXgš8?0cvn_; cRVYuZfix-uDXŷy0[Đkчbuğ.,ɋ󼥢a,;l_Ubd=ަpI& puKfmT]ELхc0s#t-Wo]./0*B3ĄGQ2Egc_p|Ӫv֯R&&x,r7+&0gAZbp'!s)bb2 s]*٥}asm1sMVpKV;=C$)"4[A` fCP^^]X2tb8n| Y`rPݏt"b$6G?wmuM#KX86Z-"!SkArȆdr!efǓP bf)fLiMfCMsWn!ml'D@+tPQ6_ND,,_ iYb]*]"شdVzcߥ.5.e2(ĴQP>W*#"ŵh Ć.OåC;$ FlSI"B`6t1K_. lZybD)c0WOkVskD{w|qEchÅ.`Pd:f#VhK5Twq B d1)=p-wl{$6;b(M.|!vƤv2XRVܕ/ԍ9R3<&eVh}9^=qTiCԹa^NoC[5xYsb\]`bv}}#tsSGep Xh/n`aÅio>Y7;p9O) g7fHr:@MT/23ˬҋC^ZjQj^֚۽S5|sO}梗AQ"B&4Vr}ńo \}NGaVarĨKT#EҴb5[VwjZd#9 F3#S#A} 'VnN=k Ϻ/ 36ν$ k)hpȀp+H"4bEy9r+(:d,P*&MQօc&שOeXA!Zx*Eh{J\?^}EAe|M[~ UlK*n~8/i9 p@˟*"&*M̯lOJE6D1Dz ՙ |MLӓy)/<|ɋgS1bs=a} b9b"TD*͙ш8oz~MGD& }NɰiMrߐ1*y#X\V)T 2D;w<% X:@`g[M=@Pܺt4[ۇ3p[mg>Z9cx)9B6 endstream endobj 467 0 obj << /Length 3099 /Filter /FlateDecode >> stream xZKsW('# w+d'Tv3%DzIjǓ_nDdvM-FhxOSL #w]~K{㗇 KpR?c56y}h:ODa O9SdmP{6Z(7SJp*M&b*ߝ"cpp-[A ioJ-oEdN` ZU˗d1Fi Aa.iSgx]}>easKXKuڅ!n&\(ha,\X7AIM4he @t{4?= %!ԯIMk_:[#,^1H^!J^2撑\[' |ߡҐP&^8( $ rҙXx S;~hَHTþ^Yś"Mi[czqE5>bϼJ֐0M+m*δJo`h2͈=2 q?AK&]2TtYa]^P\)˦v$c~A#c^t)ݾE vG@PCZ#daʲdΩxfim`,h*YaaqIʇY *T˔Pb1`婫%@~SmN?%R7x=cWCI@p&KEFX68Y4RmOQefIF%4 8bvnCa1bW7/Bw0uh{vNj}t9V z]X2}`gJ[\gPlʏz.. 5p i/iS[Yƨ%MgtaT>P9r c l&E[}0CKv0Pp{t 2.;t4Hَ-2m&L֎3V_01w$J#@(f\w ,Ů_)CU U=-ER8ʝ0q][dIP¨Օ B\8iQ)WWd[;_fG?0TpmX$ś{Xmv^ъp~`9C v^@9aRkwXL}̋8n4ؒm9=?S0+Brgct"%- -GEK7p>H͓Kng~!8C =< 0/=4wj΢16LkG0}"@̺Of/8xFoQOoK̊)Ft^x^{'HiOHSQ^#>"$]̓U?;4Zx_Čr?5Ө> ׹HT 9_)^n/ @nT2hbap|dQ4۵3|?T!܅$ީ{EO;/vZ9w xxfb3R75; T{wbpvCrc{LbO 4bS]K _ BJ_|wLdbt5oݦ-}X}\=8 ؒaOBWUY~k.y{ xzb:& mk>60iahLK([c4vxjlK]' Ҥ`Ȍ 穳žmM]`Ly0O^C\n?}Rt^uZb}Urjj[ߕ|lDӔ~-^>YyqΞiV&ƇuhƖ?l8n9 ۘ?k0.`yRQSPq]mՄ4$j[()z?&,2> stream xko~š(Gs$hRAS'ZPޑgY<$IQnٙy"Y쏗g/ߊt!H , B/2br9[md:_$I7.|śR*z㻿Q%oS1ŵtȖ*M2ʒ=!02s~sdB*t݄q<| UwWfQ=o_ =`7nPC5<)=FU]՚aQj3) &ΕtUYBZGPi i7ClR2nM8  h]@^yT5뺹,ZfrVozEg2}FtF?$gd#D4!$*G߄0%쬖ѤZGoac{\W,emDʮ{([8.0q DZs$]^*YX*v^oCM7}yw{ϓ"`w΢wյC[6~46u."њO)A_n,B&7O2WQJFuk 2}\w; ׀Li톄o?xv<-wikMmnI >lo--@=iͱYIQd2U>߆ -ͼ(WKK^[s X m',oyS dc:tU_كv.UVhmTa4<.fE>斂[Wñ_{Q>2N`?GkԪx~9ր3eN)UVÎ:Z0`-¢ }>0M+&Wpd9?Cαx6jpK&502#r 7}D_`mR!phU8^zD'7zqBL*դ0"WLPT}XO~ۤ0[6ze1l)ؕm} X?1W >Ŭw$jcl:^QseϥHfל7 N-[-S%!Pÿ3@or]YtvUcpS#}?6\JA~^I6JL/VR+dd^,?.Xc?v`cǵQu,6 R~JҤ.!3!M.>qsZxl=:.QCs,"#u=jAùɃ 7#xpUFs( G&^ He>;AXi^ǐBѤN֣6~4a3\b_c.%*v&qf 0zc'MqR N\,盪lc{xT=7!8!4aѫ 5jnͬUzoڣI1Sjaf`[,*,(ca BbHu s(o_0{׉1X{`慞 ߒ0L;c~t)/IK 6_[('MMnFt%$4&f #Veҧ\3'iV%$gbKz^9U!'{Yq'SHiZFdž E\Ški NG4'Sǹw2)rb?.wrεo%7 2{-NVmX/`+Ir,bSf}YB-+u%S.7׌䊗[igc~NEJ7zb1%eW,a?.L‚%/ p;y*(*_m T~m]K{!r+)G~JM7?PÆJel&YlOվ]x\&3 BJAJ|Js5k.NL6aP'YzoX愐9bx&hWLC$pe@ ҁ:2q4D8ڗMguP#C=xl buh1 ԽCdvkRReԶcHWpu=E|H[Ѫ,u(wC ۶힟y!A]u6zνJX ]nσ|bb5Jrھο24-yK:CwU</݌okb3z>z>D)nn<>m1oJ|WP''4Q`Sl,1ho?ҧb5T @ Y)y:yzLeI}'umrߵY[ˤw+j&i8]L6(Ү`'0$燳L$JGU~$9Ċp,!o6RA ~M, ƸXh> TZde.ӬSDlT'B4xn}RЃ6 endstream endobj 484 0 obj << /Length 2966 /Filter /FlateDecode >> stream xZs_<ao"=Imcߜ=Дf#Q E{xHj)[;" lv?fכ7o7Lf"dAn>̂A˵:,gs-BfY6>^|jW Õo_fPۻ<-{ޭovHQRd^H Mn{m_h+rgзź<@j+?mSIB9abh7WǬ Eس\oo|C }ZꞤU+mWMfNͷu3v) bZ$((wwfk=G7Oۇ-ewjX=W5&9&+I 0O<h@k~w[A|LX8^3O~ 4PMռho CӷO(^\WwM<~="v/Tꖍ>*B͛_ߐg3έZͬ"3zVnܾfK<Sܺih=~obc2mK!^ghA޾ Z%pƏ(l/ OOWpEirSFmYRx:s/SKZ'B0|6a?74 djrh_vlzAB6 q*E",k/Jo1uz/ cpw m'Hm'hه7,funwnq@BpGG?n8ы ~GzUE;&(>!kkLq.&ŕ )+cq!ygׇCrGNr2X9֕ŏ6BBuhGXA20F{d:J4l*f)fR^LP~*֔N2b]:5;/m*92cC?]{cMKgz+gBd@Վ P̰ n`-Py5#1#+VٓB- zt)5jU-SwQ{K^"a7&0"DNR-*ҨĥYȐ/M\Mx!|༁Q0dU1N Ø3#h9S'R5H>K~IKX)VYOiY۪.y5)0LMu1nx; e''L 0ļ&1D3M*y2d6EbF,,.fU<È_r8>sKIzEO=-i"A8l(@^ӯx%%wF;kFw4߷E ÒqWBJQ.H㒖Ks1 XhL'Ȑm/l-xA)upT;VE:p(KROZ۷U{ Y96P"9> stream xZ[sܶ~ׯGj&Mi4ɴ6R($\rMV~}\r3m_$<87|&E/N^|Ԃ%qdlqqd1H0bqK3Mn@M:]$Iߜsyjӥ"s"qW]ĖB&UdUSK.(JQѦkOUEYSn{7۶+=+MțKW5]zG/]Ul&nYqMN8y{g` %q":/V˫dQϟI,2xo"Z^cD,xESpŹSII̕~R}~1dĚqW}Hb%_u5lX$FC)rd"V2sɠ"͜Afӕv׻~wݗm6R)7u~_m].Eͫ6y}W~r{3,u".,AX?u ;b߲7mgEI 3MVۜإ?0XW[4ґݑ\=umcq aR^Yڥ- /4bSlGl,]am8F 79tflDzE[^XK|f,6,Mp瘪,-*zF(m5̲ 3o:]V95a.Cs&cɳK9n__y{b?^2}GK tc ;4ƢUkU]m4n(vpvA~'ia#ݖM z` EF~ 5 }f ->˲V2/|wb>;a`v>Se;J\e%}$bQ)|p7{u@B4*ӱ$^è״f4kqE!Mc#p& bcG(}@m~=9zJUc?G/Rb"E,Lh}W-*n4Ck Q!w7Rlj+ ջk8pYUSZEZvyHĦxMQ;+².hO B^^rٖ4X6RC(9:_WUxo%~Ii0E੊z究 ER0E)Hʎ|[+ek"h*0-4rb;`@-S0?K7FYLf8$cxJQAy9kBԔ]m9F֔2:m\>ݾ[u=MB\+ K@ TJY͈[g:,~Oulc>PE}N@BUB X3ԅp9 :Ir4 qߞyT,hX >Wذ,39$K.z|C~U:[/X/9UȽn\ p-șk3l&<@#UBd/C 21wWۥ\}u]!mUpo#VNb { ?496bԶ ,МdQ#b="lڀRS ֨zwm)~gv'{6?KKSdϳw!m-ZuX Ԛhm@M%"B&Vh8Ђh1ZCΐE*GۡwPv5sa!Uj \t- +}[FffX $ {E>XOZHTe0CSj@7E @ $2CA|#_ʳ| ;A~\lI΄h6b%gK[?[0̌B oGpP#XOE j8pM!SHGoWCQA8铆l#\ Ki-/G: iۼUIgL,ǝ?ni$eabXG͒0R0oHS=rllt4p*k& :!BǰԬxԃ%DHK_B , YԱA)}yS ug)f-ɐ}'T 8Rk8ђHԂ癑ŻwbmGPn f*Zz:owe/n6ym_Խ՜%P|1owmUL"#qP>K*(짨f"5"/igߞϚlsloгK%bg߃WFGz7/^x- 䡠^z5Cl}};9mn}~l Mr{U5 ҷAiDj!(Lم\j*s?`9[}6ve) '>vՏݰG.9,VB:s];[u.l_i"#gGH#IX:KŽ|J!CLe_V>K}6=ǢrvgR~hۮGKKr]nŽ=[>!~~ml^ yF0ݰud8IO&6N՘SpW%5XQφz{ TܰH1]YV)]641*s|ѕF}6BYB dT;pҬ P >F|+6I5ct/hHA:'f٤4GecݒdgR%*~[!t-}<Da {}}8@w}z<>t,Q?pn{Ⱥ-͸('|kha7A?‰:d|u[LӰ4852j"n#rloIaY,dWۃc% Ve2A6?9VJZZjxqbӵ^Ci.ʮq,vM5&jV[&M2]5 |=ۚ10N/zO)Ä B9<~@$X!Dw<Ο""4Gpe?CejלQY#39| 7KX.Zz^'Պ6㊔zWaz-O{ܧbw4- ?-wnkҖNgYo E|xX/=ɡCOKDm;3 wBNY;9> stream x[[o~G9w)A4iE 񃼒mh=pH]I[Ţ(.9$gfH'M՟n K,q8crS3nn]$byeID?VOewBDߕ]Z(ӨTDeӷ]}7?05@r'7FWh߷BũVj[m-Q'QRs LJߢ} f7TmXOuJ7.vU\7b8ۘ83 'ZY+8,$JfcۅdbO~&Wj&}e74I+|hz*1AH{18$NQl_o`ѭͻE57ǞQLV Ve=%iĄǡP?us9Ѹ5g=TN߫]^SU?tp\ @[:JĉgRFe,&>9ڇ ǞjЕ:k=VƏ}9tՎsj4[;p<mWAL,Eh2Y)=k =cQĀBԟg*V`!2X=NYGyWuöjN@]X z`Ll1iL/eOWOtpn*\n`qO] Kf(& /7;'>iۍ?P嵳s :ܴsn&*+ zzyp#}RƱ,XJ3.djiP??;3`AG>atZSjqoЌRf.Jcg ] H ݾDʿ$LAa$P:Lp2l񋅶/G41./*Zf 3rIa 56J9m  螃r$`/Fl) !4l Hl^wU'@g,h 1#hl:̪кX_]$\\ؔa9&.)/$ڋ,sEo{=JXyW63`!lĔ0|SB=M[ip,K2mVLmP{ yF5UST@$ e-Xdn pӷNC:o!Y8X$/=Oμ G$ 3,H#23Dk!!!$#Pd,zR5F U2K9p!E;]ڇI.*Z/[%ҋ aUf!D z%G}\ˉ-Uw>hͯNQO^` +'ʓKEMKϹIS @#lRUDP: eBm{~v-Z _GtE>X/~6TOCEƬƦGfWL`Mm2'O``'!? JYPHI5Myh=z8y'FHA ڹN+-(Dʴ9{*N{5:Z lkQ|?fcH<4^ʦλ'ST M[.KjvSG"+2ߊ 'Lj>:I!&bo [Ь?I3- V6m`U3Ew$Zjc4]oqڧ.K{}"Q2?8*kasKe/Ј,;wQ-SW.&:<"'PXeS{Wn9/Ql#BF{n_}U(._(q^GCC 11uAN 4= >5DQ@U1NH[Ezbu6x:MZ.e@)Ɲz:;tW™6`Q$ڮ썳99̙ӃC8Uphb}w;DO )\;wY4jl=ZLM(`jQ.?#՛x6c _\: $#㕭)ְᱜB0FNZ\ 7"/&V˳rRzZB$b~Gn}F % g^*4K.]*L P&_͡һB ˕:|9`uLD;R|rwt !F& u AOP𮺎57+X0JKiI:hYr-"-^PfN\#@>2-J)SHkpt(]C2cԎocsb;Z%=R@w5FBЯk.(ēp{[Z#9d)̃[B-dtǦe\ԓs O6b?{^0b\S/9C_#S{TMP"itw…^X9점{]Ȇ-f(}ش`E(`!VzC]ۑ-y}6%_NLF<)rى'K֝γ!g~{/" endstream endobj 512 0 obj << /Length 2528 /Filter /FlateDecode >> stream xڭYm۸M6Eפh?\mbĵu=YNv;P$rAKԈyyfD]O7X`jqa$1L.T&\<$/?Ɣ9p)bxJsmqnuyɳ!PBiHXh)R˜XHbBSQuc\/1QJ3$˵2&Z'ykq1 K]}ű!) !2)I Y7ql,PZ)v>4Z[w .4'zcw;>9iUƒ,it*ċw4p` 43|Qo>E a"LI Avn[y7S^ 3򝓶7V#Ww_+M$ScoDϝM^LVG2WG",^x Z;z pÁ)oi7 |Exߏb:i|:ʪEW5H)+J'ՅP]K&rW1qJ iΒCx8"Jd7s"\  B 6_fgCbo1zQ;^KGWUlL'I ߷-f"KHSv莭EŦa$PN"bTA2>zyOp[޷](hU0^Ȭ}Є[osgMp]~,IyeSҧ?F\JAѐZLj \ e=+ ;w+? + 4c&Q/˙AN27kD"5.)_H)'YYv_TzZf`F+ J|j ޼8@H lb u+' E 1WpEO@M dۍ,(Li|Y]E H,YC6 hgVHeq3:Cc%*&’3:$K A΄@  y=IxuܥTF?y1?\5'E3?<07?8mXM(m8b )Q30NSeB)l 稚i3Hk&ֶvVm8ͱGY ܦS} |w'0VlajW=7#xBwͦ9v/۬f+/WyZBLnkݍOi@Z̨ot7w[n/e/p57s;1 9ua` hI7EoFBGgW x"KUBn[eΓEl]ۯ>mHI<# :% y&HWt!#p=fYlVqe!t^Fk`~vE|^@~:C($4]6z|CY}|B¯<0'5Ϛ` ػy oS^º& ymF+6z ǖf`i2Ε~*dC-(bd@Z2.,)F4k@Ǿ*W߫OQnNZ,PVm?(:1Ttaȳʋu8 fgl4y.S_P$5~8 xJ(t(E?@t=Tm/>R8HjD6K#+8-r"̸ !pNh},} pOC,RMjbUZ{*ÌluB88.8Qn>SC&9IH\{g!$~Ɓ1G1:c#GAP mӯMUr}4vS\H}ʯg[mk,kL\Y$H댸^p"0khZHud&.T,-Y38(US4rp6\`n<}Bjbگ):'few·8^Ŗ*1{$K*7;vq7 =@W/': =~=B:I2袈jPLr^yBjfWܖ _vMKz3bTSa 'p_IU]ގ/ 7kYu:Fח_øTOf*jq^H7|X+|@7/EeP&94w}Da猾*Uj,RfrVc]w Yp.l"O8֟ :Өk3ݓspq햣F N889 W㚩dJ-gwG)+wZ"h($Ӝ@> endstream endobj 517 0 obj << /Length 3301 /Filter /FlateDecode >> stream xZ[s~PߨD2y鴛nI~sh E*$^7}oppn߹Vd߮.޽ɊCWW+#bCJ%<uL5NG?e jX2;C$`zؔ$@AD4GF8`o"1t:F;mq.»#0,[SۍOϠO`Ӆ 覚Ow׵Dlt(s 0}93!4 |, ACnqC-)ĬFK} YFzy0/}μ:>h봈E^faP4s*Kc%1'{}̩\)|"Mua|>1 $&ڧ6wOs= t[iy&guw7K(47IڥY ?|Ftpѡ%tnـKb#~Y.B"?}.98`CX] $I5tZf 9u`,cB)HB5 h"M ] .n`dxd"*B-0q0tvn E"˷EE7FL,xt˝wR퀚;Wj^FapXEsF UZP0qpUP2 &u%v.j:;cD_*m0 .L̨| ag2?& 2?z^ fv\ӿG'\3!uo kM=j2-1w I`\Mͽ:O E:@Rlʰ涌^/*YOpt]1@mіBמ oX"b<Q& 5>^`rS,̠W,/:KT-0}.fܖj6W"#嬤0w[{Y7[/!3.̘guh'fJzRmrj)x4`/O5p(,0iLJ~V19 Ԗ<꩛V)=/ 3|- 7wwr߾**୭̺/FaY]W :֘kc 1)$ D"ffS(t|Cʢ1Ls7u&MC`)mVQkN̰(fqaXs˒/T@uF'AA5޶]9 f ijn&f)ja䆞+۪(\cyZ[W6/&M8RcA|}?/?[,Yqu () H+f z=\\"|iEl=`NjS i 3Ć)οdecq¨hM.r $ػcBw +*3+1)4{ߦǾR°ȥ6ǮvWM馛Fep!.xEbGuwarNdVn9d|Œn&!Kt^C>ggnz3Yd'؅xB-{|s6:.)88N{VuU' ͸u5;ѡpE4z3|}xku?Zjw) 1d\" c耂80nI[z\Ԋ##7eخ bDž590s q*leTݴin)z J}cOCn"l)Mzw. nݐ8,}C΂ށ@ 83p ƃP26 KK\=[43 ua@BZk-9N{&W !qagM  !Dɰל9ۼy A%QG9Y BK̓^PGF&R߻=PMa.!%tu'u̳r) .xtp_ wk9'^1gɂkH Mɤ:-BۇӓiF|^ {BP^x@kwkKmUrTT^Ɛ; endstream endobj 525 0 obj << /Length 3246 /Filter /FlateDecode >> stream xZsܶ_qTM;N{ `jً߽ e<EY&:ńrat HA{i" A&{Wyk`NAӾ-.ɿ]}Bd[0?'aY.327-Q[)"\ 沮*2~ JO:?gӮ); aj2c. S.lc#sTs0W`6X&匥|~YG%'L(Qѽǀz")HvT [˸aYfNNg`Я<ƗX&aiϒY.RҙD2k|e1?L" 4K~Rq87mU!"lA͘M`̘_<eni#zI0}JHuU9B<ʎ?P}ӟIKyl0 C*+`LSj.h kleǔ#bQ(= ^3ƱcעIqaTƇ(rm3^A_CJ d-;,;q'8&1%onW~=w>$C㪪/ȭ\g$dʄs"GV2fPc1:ypVՐ?z7O 7_2B&g푍\6PUoڨ*sf]t[ux;U'혱 Ke<=؄`”#[^S^]1"xKzO5٫nnc uϫ}d ^;|~0e Ay0cUh̼ t7ExvBnڽ5`r endstream endobj 529 0 obj << /Length 2828 /Filter /FlateDecode >> stream xZK۸ϯPnR қ:NRYOU^GG,s1)e4ćg'>qH5D% ~>P7 ćϖ2$-uUUhRPXۦ.<˪56`W 1ⲃbun^7]~7۬=[k >>XbH1lB/7y#sȍP}<+[4 γhsjby_9&Zlw+zoWeֶ*+&'*V"-!XFL؎4o:%2A'fa@azڼjR:/ׁ"+:4dr<]n ⋷ F#Wͭ׈nor ouUGko-^ai4e}t+]KZʼvQkD./ zyͻ^^EVQE)*}Ib'x @4ZMϑ*޽ Jcx? Y8axՁd t[z& vS=0{L$f\X9>U1 x ߻E 22R~8hDD,p,3;J9L;L;C2W *08M.7Ӯۏg'Et@)%pA)3шh8"EOm=?UߴDNz5 Px/]HBz/n쬯Q,7],6"gܑ!!iH}zva9DTk`vlK\jgK0t#C̴ӱe.6d $ocƥ(~L~Z,Rr$*CvcUHaz 쾎$%㼟>D(c_oE2- sƝĨ]LN|4$UJǰΜ[He%9L.Ww$qЕvMbCS -,ѩF4YJ9ɤI2ns$ ;z0]0nz柑]tZרoTiGBB}JL(~ =eO4 ĐB96k~ËQ,/#1o xplӓ,s|J0eǺE` a|Ify: Tz@i}{ыp0' 3 8quT:L=ts !-T'lRP(W=[H,6IJ3-)m$ &~~oC;| :E%PORG;HxBRʄrn@Jy! =7/4sr9"K!2VHxssҬM}6dhU׋ Q pWjT@Gwr:x>*ڙɥKntfR)r[ԗ&&B[@PT> stream xZYs~ׯ@b4[~H╏J+:U} JD=@ 8<$l=}o:!"#lH6 GLjٸ>L>ẻj4@/c?oߎ X%q ]/@Z EUo=E5sގsEu*fՇO8+g1Gt1DEv{G!ޟH%eW7b2:_O?b#ɿG4o֕f Wgz6KpqIR!y3yQתs zb-r_pav=}$({2&76Yoʹe\9XmG yI^[ TW-I&<=ϱgXfk'ea=[êջ?% dL{~ߍ(@tԀ#jq;<%,krTV4 VMG֎ }`)Yiߋls6*ڞҬjHI[2큾 8!Q8O6M¦ ohsliu벦!.IE$2u&-dF%3:|vҫρS#w 1 E#Cspg :Jb\XJwQ* Q՝"AcL<x h}㖗6 geC h}ozLY𣾩8 6Fltdn#Fh;HPfhڸs Mdԛ[}ĘxlKf; w-`N9]-}C_pv1*U ($vM ئC4)5ES$%JO_"g%Pцhpцhӧ6n `-j \89!9絼9o ::A(OmOGN,=:LRX%19Rt/-Ё{ g6RШ4Ot#ssj`p~."esq 7|wZAY tp,, L~cm؇CF `;6 }$bm9Y\ H GJ (-\qԫ#z_7yӅ|y̜?BaG>n.+EznX1d0,=Ӧt?l̎ 'P> stream xZKsWpnt`*NJ%qf}%D:44 沛E _a=d8_o.F.HvsgR3Dn!y9#ærIu^mcci)ܤnٚ 6[}j#)7rl.e3rT[hU&Ѵ_uhFLSR2/MdZ 6vvRPQ&iy n $M,K,*o:T%bp8 D 1?Y]Ir}\e€%.1>nԝf!^$K@xP`7jnQ׷g(S/]^5<%/{4I?P`.~Ǚ9~`[3>Q-2\Oe-`>0p!O ,4jeybb)" kUxzuf`D觔qB)v[⮏:{ A)sMur`ύl[s 3lWwKjj&T#-At4l'p%NSd`8j꿓[ @kFkmt }0C82ը~3ͦjJ/Ӱw,Xpw\9^Fx0A梇λq\yeTv^IRnjo_}rh5v͠maڽ}+Æ,H7JaqpQJS.f=AdʷpMQw=Gf `XC"a;jP.6Lf)97B8MMw4hn}buyFhUb !.p$0?ҁg4-4sĞ?{38n~iSR:0umN HΩP8Es !-P^xԳ =6ʄf|ypUd`T+f6 5f `,u\<֘- 0wSwT m;> stream xZmoF_F#7&4N[p-$ʥYR\ze6/E.g}ͮflgg\8Ks,iL,噝/g̞~8ٙÝ h3ƒ/{~/^γ,K~xӯ߾C' ּ#6Tj"J aDTOu-H=^Z"_Osv\/oLM@2u<$b TJ1GdQ6TuVTwl뜣%jWއ! d[Cm,m0b-Sl/h1Q0\9T*BDd.s/@UDk]9N^qjqe-T3q9y͖jg,s={wOjBƒf^(1ƁH>W1dGy&&H@HBΞ>VNÇRLGK6nna !xn|i%o[`0xo!enh6![#))}8/ܳg$^ nQղخ9/.&|G!]go,8,CS)t)s|]ʜ6ϧ˫~oDr9F|F emSw"w)XU\]s+>"hJR-{ J|fZ+$ M+IFP\X!Ԅ;y,j}]UWr׽,F4t=YF Z_}HCPOEoR=:@@YtBn91\VŚ_<5~vI3yc&[&eaEDZeD {t;z㺃Noy)wP”p+z!\\|+?}\;.6o>]Aˋ((&cPG9S]fu+x&+5ׁ_XpL*z aN96&c2'JdѢ^Ɣ=~ч̛?H_ߘPf~SB6ρ5 Xhɹ[$L*J;7 5M}Ł戟`l{N#U P~UtɧUx]OލFyn0h/ pKzP~'-9﫦߹Dt`a@=Nv|0WOQ5OMavf\^WnCOVaҁQ7vвl|fwnb_;IcIu>L4Q@iUv3SD0֣D:ܐ"Ăw]Qw%y\UPˆ۵>;B gIn[uh 5NŒO^TE_ xKs_2]jr4=S|<̕ǜ1Rx12uKF lY蓮ҌjCR·#/$w囬 J2|-5dHke?YRpSIFH Ry )0-lhU LоqWʊf Smʊ#$NSclnz's_'Ɇ|LU[lVȡ2ڪ)7ÅMb6lmm]ؒa3ێ,5VuTzayXTZu>]/nў %Rђtuddcl  \l+DݮПb2?[V'7Vewx pos)@ H7AifSKD32qK_=ot1tP,MQ͗WMQ:S0U#oqt':5P[~pn ;z]|s:ÇP#B pH endstream endobj 558 0 obj << /Length 3023 /Filter /FlateDecode >> stream x[s_QsJ|LiIgڙ$DۼJCRsbA!Ҵ/g\.~@.W_]_k[ h hOK'\))`'Mx]W}:c/vX^5 ~¬] B|wȞD@]C\[QMe} _s2iEƴoMtM/Iw+:o\|XD"!̆>n{ʲZo2H)3/.[6YOaI|nmN4I$(*þ!H=t El]=([QfgsSv l,;@\p ][P 4{KzHGӽGU2f2wV  ,巁̦%H'e:첗Iee,@f?ʮ?XKݝئh@U |n0Uz>D`zY XQ6'bA&s~(+mG3ڃ{U9"oI¥GCbc”TW|NA垶ݎc}!ZK1ȭA׀ypn)?=/^%0|]SQЅf̀ gs<,VxmϿ-^HL G,!aNMξ-L˔J $f  ]0=blħ0BtG\KF7L+$ ifѳD3?(H\<ٻ I D@$ى:' R8XDQu^RNTX FFtQ@6=$gaxԙ #Ѣ9)(dh7$xf/2. EHt>¦>Une-TBM2B1u&AIq5>;cc !d}Yw{pYlxrH Hr_"8ŽZfEkw 3%q9~0 U/MBKk*bq C!ݬGoYs)2f9X:XQzוCxѡZLī,Voۚ whu_>ħaK#+ϟÙHu^p(hGmzT6AwLq1'}? A<cqm8'H'/Ob;O bYҜMC68jvV_Mjl뫉}5uf;H9a0׸Q|3p7lP'E}N[mL_D)vMX IJЊUl6]S3t8͌oӊ>M?ۘGsueLꔷ7WY\MҀS0RIP>@[8}X+k]=~vqk2N (^@*Ԭ19=|띏u>>4мμA]یY@t:\ZC]#MgRÌ(|qOy5x/}/ F5U=?u'Yr8^ ͜}6_6,~ilhj>{߷Ymقx3 X⍨Y`/)\|j)'RVatyAfo)2M_)P5?/ endstream endobj 447 0 obj << /Type /ObjStm /N 100 /First 884 /Length 2200 /Filter /FlateDecode >> stream xZێ}WcKW7 -  i\}d"YX Ԑg%8SOwkU eK4 T_ JЪDS9YfA n1mş.o\3/U\i!f۔#2ݥ"G |,b[ ʸSAbԸq2$0R90?w>W eR&8@ظ?RTM8:\[G0ސx?CGL#9T`$F(3EL f &fޞ9 f- 57'3%bCгYuWXv L{.!oEt_"P9$mFWͼy\0ttA{@Blry3_0zZ??>u_4~qCBal~)@bA$&v֘NcjÛ7a!̿[߮mݧenf᫯f;+R"+ʱY.:gl:gPñ]9#2ioId| J!vz2EXIxU+VXPexљGPbs>hzth sl PSPesc`r{|3C3"}G3Zٙy3C;K5o޾ On?puzzwmy>]~ϡˠW5BJnxv(M#FKxZ| K Ys^>f ٺ>Q& b'jA.8Ģi9*Jsh+7gT [ }qPt>_mpQR]f`q n=;^ѱ+2-J w9w q srrAd`@:TzL~*吜|jP0 myRp.Z&:FJB2V(PعtD<Șafi"b:dG'HKG+ilc+tCܰȾl+B˦z|M]=:6Mxl6e_Cn$4i]40l1OtjTPbO%f}e阋I|h$ Ay:!yedTƼؗ090Y }OiV|#Ԙom 2J^eE 'Wz 7}%A 0T/_PdT& u P;'pbS}jr>Y lu9iQk Lvu|J~|N6JħR_Ģ]5 z4}l[zl4% 榱B?mZ'bPXwb&_BR/*1OOpWT;12*mEStip|,oH0czSɭW㾁2B(K@ϕ'[l8ӋpV+tQ!,񤟜BCz觭бɡ k#I o|QtKs=4Ƅ À0 d:w4@d9-_NT`94;NpCXmw&4`wDKqQ~8C[U. CC\-ʧn|ؾB/JreW@y|%(ɪ_|\\,w5L$ńHR1̮#r&}M6ɔ KM}wEO0?ӛt/uqk On?7ri07etno%}D4 JTDw=shV5cWXgyy=O_7[%< )'< endstream endobj 567 0 obj << /Length 3262 /Filter /FlateDecode >> stream x[[۶~_w;LfvL۴N`%R!)_sp@.$QI+<8 dv;Kf]|s}3Y,qFL,&,]O.^O$fCs9'ID<巗sX?>%M_7?7UXKi3?Wϑm=\$v Lĩfp/klF۪[|ȢD ѾJSX]oh_6y_5ug$,]m?x5-<:o0|nf5dmy47} avsb33P9g2z#LҨ¡%rij׻%i޻Rik߬9m Esc]u&],6!]io G*j C^~Ze7g5Y!+4\q=Vmw45,UJ[2SqM!bRX2i~6TCSIc{Tz607uViAMBx X #n`.(ʶp)dz*]u״V0@WjqJE/Bc0G`&\+ S0-arQF.49fbhʐ1eb*f2>V]g~feYQ6..I(J49,Rܶ J#S{ {TbyoMPО;1!Q+2lM%t zwaS[UeI?Vٶ!s)H굫o_<+mD(h+4U^jㅺRtͪ3ӰX!T6Z4&U5@ؐL6-M(4kw`o@mzyo8šQhSKW sve&p߭aedkEM45#AN4m(b*(C,2i*9:bΪI=_ރAzyX[UiVDQrd+M0Z ZQï Y&0:'Ǔx~?( -4, FB눊ڮ4 lľBDCC:"v8`}xYƭ*7v_ ?b!la>Rw*ۀ(We^X(be_/фlA=H.__r1 (e1OŌg` dVK1t5#2@q9_f33(~|*,cCcsKX!#!/"ȞsXM>/I`%FHBb=Ai|q||*DM0TdBM&U5:fO`b61IXXXFh 8%pnRõCP< QKjq` Ȇv໋GP H lqƩp|`^[8(kDԵ5QDS,Se>ooMi?,r]),-"1K힫$VtW֬pp#k:#ҘqەjhPyauCBК);!h#xK7NpҊhtb~kd oES۪ xFonP$2kTw`Ke"MbaJo^3y(Lul{5Ş 9 mʙ'gXTL'+%v6ȃ2P,`S<zFX]X F55P>T#yƂ ґnv0r_/qb.;!nixN,τt|nH/ i ͢uwЖ|b͢hy܌ 2/\Mۖ?kɋm> _ZlRDBAK;Xw7j ChOQ%g3ߦ pJSF{w۽;[o>H/t=|khmo 5㪆{mս㰩Ï'mEȖkK8E'O,v2UB+ps 4!wz)6-8ԛ\w=`cCa dI̦>lVtuǙ)s11c߬v41<шfs7|z]=eʣ᧋\zfL> ?m$O :I0Kٞ"C6U k endstream endobj 574 0 obj << /Length 2022 /Filter /FlateDecode >> stream xZIoVWH/!$A >t-ђ->JhK蓸~8%8w 6$IhHa:̓ѧ˟/p[2 H2ai); ?3__>?,cɄ0$%2+ئY a"YL\yI\ܾ uo=^dqM,]ٓZ8yxmrߦ"s.UQcJUSgSra'L9>ctyq '99`d;eB~-_/aD)RD;^򐪫أ 79?5^hzY7AyOD:Rm #^G9nr7udU;1mA;a>rץE ;@zˑaCe`M=@(emF$uLZx2 zYeք|)[Jϫ -<uA PY lK$"J@Щ9NFB|tdS+/+}]V@C5du֔Ujg X^o/W_ b˟/́@Dđ0MpE:!uj8ţmĢr&YN9mkjqэqB-QL w4 ~BNSa[a$v1T,**D! ČUܭk hTX|EӆjJoC5)q H9 %[͎e 01,VaBF ^/<#HUqĠ# iW<#$y @8G n3 )n,+S.G-o#>3i -Lo7Qnu ahp[8D1[8pm:/"R~0/ǫ[1|d_xC{!!T6/"AHJ}YSQ@O K C|G׉!ܖZa >3MW|0O`PN[~%1tQټ$9 wǦ1ĝy ݸvHvf$ 4.yA[d?=lk[(?Ej^"%LvrUM%z$ endstream endobj 581 0 obj << /Length 2821 /Filter /FlateDecode >> stream xZYs7~ׯ㰖qNyTe]UY?ő4Y I8-=`FvG<9#.nF#CHjӣ*tg\wz9xJ0ɏ/1zo߾<9Sy\ʶB'M^}߯|_޼zm9a ik5©5ei)rbqy ﯖf~SNp&]fK7,M(nK)+}Q(M C*~We-gVOɽ]o2+ aF*a_€zQu[ӧI|/SK!%٨Et</ w`U߱11Q^wQZ"~9RIasXdI]\RB$&^ڷd`S4J8oXͳEXv j]olєcXZv,biuLaeP ~K }Eٮ~qy teĮ)IJw_&OWXEFu J5x̳Zpg-jN)uSLawW*΂+!v\S,i{\f7S G .DodnGl(VYv0ne)ՕҺސ^W:ϟ?E $Af3Z`)ZbY2/=wc"Nj/$Ziv mfvF>(&qQ K$uh3b"/\؆.Hta RnQlQ+ :b6Ytt/ܞܼܼ!P̵ \,3e{ !`)Z,N e/ai5݄}aj{7y'sA, bd3;bؚ?vR>ⲇo(ل! jez$pxٟgvTG  32IlG}7k1i8FQ|6~D70>3uC<Y!#̎Q V]=G$+7УRӤ EFӔĄ (2^Xc9(Nw~=Cg k֑Id҈z[OʿQ0ݷS,;-:[-g:Htv<ٖLEQfw]?p@fUQϷm.` I迁NH9`9䛻+YkL| KL>2m ]ǙT@wM.uVֲ89QAvQQA|P} ,wp]ԉCg FxJ}XӰ6&<^:_eZx&/׾&]Dn; ?a2Dm L=R':r VdÅ q sNd6YM><`8=QݰYyip 7R4TBUQ9T1"צ3j /udGϟypDZ 2'9Mf]D'ðBTXz6GM2Őjsg3;{k+Qm-,^Iƻ)D)9S^z-na0uYU+3|p_-:Z "t `RaÀ HlO8ʧuf+:ǜmWOZKC6X;UvLKup{Lk1{W&H7WMFGmZʽA c29i/Cº}P”Y>0eBu҇B\ 9L =V{xwb"=Rx1/}"_j AT+]=}.ĵqZ8~_o P( T7e9۵J@̋t|;XU3wʉ_H$G F.3|0*ym|4r%Ҁj|K<^EXA1 J3gmuor׮"[*6or,jǰc,cw?,1Γ7Kp9@6Hp/8sNἇ<8k.Yu@m -*[vLW`ʐ5߆G]42]d,I( K1Y#I'R , ]g=%nߖqέݹBXڽm`:C[g#1ɊwYfۺk w,QL/=\j KOݭ@m=x:e5Ll6E80mn;"ID_duH^ =(6;44iPl ugvgl1 endstream endobj 585 0 obj << /Length 2597 /Filter /FlateDecode >> stream x[Yo8~ϯУټG/0X`Kg򠎕Drғ_CCrbXEVX"'?ɻOD$# IίA2Z$R3DNŌ_NpZ2 H2gi)TR>qWH(̵ɐfȫu=*2XS$UYC)b1=tVs*ͬNe:gҾ<_-̲ iMktU6un×*LDJ6z "$Q( F/t3 ޞ>ĺ# vt"PDxOFÑ)RF Tuahm} !VB ~N<^J2/nFA1ҝÞJY';??K0, l,Z\\d`K<:*k2_~##̤ӥ~y6G?=ȬǐYddcP81AA0f$U(Pm\Ƭb@*V)6)>m 4Bv).l} t.⺬l}PY,J97|a[v1u&t73#i+]ե]ЌBJ EoY7oZ%vu{004T^u E" ALe W"f~LluVݟ}>ҥE`3Ȋ[upLqJf) wu/<_S7LC#?o ru\53)C,da"VPZe^ZEaX!*`IG7&/^n|&!>9Hjܺi,mv`1fTþnЎEN>__^.1ѥ7뫴ajIBv dq a?,k5.y r/~ uQ3:Eg`ŋp\H_A\O Iqf-S^t[a3NlI%@p 1 i@#CKd)QhɀqǰFRF4-Abqhi B9USؿˬBMǖl-5'`o 4'[HY5/sb 9_ Ps rgy谞 ,:sDRY!p dulq 0@D@`oY?s\c+i,$dv{]!H)9a6G@Y""-47[5gH gVqy l'Yk l\6el7ʫU+xXr }~o}5PnC.ݢ[{]>4.VʭI^To=9F`\2#NS[Te pdjG)A{Rn$9LH=={Acr$cXߘx8)` )#98#^d73 DJ=E XwbvuCJD,bѰ=[goMLFb^;?A bRzŶgI1I]H-M< SxJB&ǫմ2H_*Aɡ,C|qj?_`-!Qu<?mp:6yd]tDp~uHi< h4{r<evA -p{' S!DOq xLM!6+k` w1Y4#h~~oG:yR;9v5aۑÏx'.Gmǎ}2:LN00bk@AtA3;:Ž׭.|tW"vuiuA_aqvb(gx1\͹ 1MqqنR$m:OiuYuZXR_~ E7.B Q˱uUրjR1> stream xYs_I[aͷtT|砀 ke[Ԯ䓴g_ѧ$\սJVOGbqѓWWғ6YW֕q¸TrYE-*]f=uUWv_ݥ#08\$LpIoT4cKeK}TѾx)2hWhli~[Ne_ɣ O PrAKWkeM&;h?$ w*"2r!= AlV-VY5yFhAGPv=D hx~3ϣP(/d*U]UW:#c: hO0%F[eaB*Pi$Pa$r9 P3 ,:;3;d]޿wEvGr4OA0.}pa[~:rAq%tɛD.y<6)Jzb 븯S.) ݋}㪈Cav c>aʇݾ+RO[&@>"g(|:1Ī"2m|ܾPB[E4(.-^(\,}GKLļ@;ݣsE/D>Pyp?*+<(FhFD  (ݲfÍS cH7޼jp;g| qLkS| ّ@ʨ4˴5 g)YqOm3;:׈,} 癵,4̈́)NkP~  ,[?OM`fLXOt2T3#mWA#tl< )pCH4ˠz%c~5-_B&ŴӚ, ui&oۡL6MЃa4;ѳ1\AO}Yuqe -`N;  zF}џ'/&p|,!GAkFaiǃZ qa<zķ쪯U.sxʳ~6q"wcorVꁃPSd ,M endstream endobj 598 0 obj << /Length 2196 /Filter /FlateDecode >> stream xZIoWHR*b0  0iIɜHCRm[>R$]$3dzj"W_F NHt#"LGWYtsDf 1XgTyx9#qUn߫z͚_fꯗ_ p({@hR])g *uRś :r=;|rmstFU}&dvقS:r6[>=mjP\Oqަ-ɝV(jeA$J'C'N4RSޏA~| !XooX9QNMOc$L !VI|uoT@nʽy-nz2(H.,=ŝ3Qini{ 97yV, hACRg4i ?`FۦZoU/[.][Te:1px~sj_̆ݪg2< .6^lq/!0$D % -$t%n뗰z5(b{ dI"吧oQ(= t =} $9AHv Q `;uZb%2ty"N͘246^o.r4wy]?UufɼD>" F`w- Ad!GFvQ\ 'H Eiޟ? mt*hB.8X(d9Iۊ,I>ɍwz f 2|jdo14-AF#,86^;wWY.tu gHp678)b HLuϋkLHnps@ #h*tݲL\|ÄLN9XzۍXQ.WMφ2=eK Հuaj&%`d%X *t[2 (A5X=h]tOQD_͇kRMJM#D=Q兩FdӋYB'zmfVmAvG麼9C~ɏ7 Bm[ "0כ}+യ~鬺)ZM#jvwݜپQ]\u=)q@JFOG5*S&l -'r˨# i+r0V0KǛgo|u _MZҹm<4~2u4\(hr]9@(̆Yt,iYUŰnJFe׫|r}EFްqy%iM5&a~J: ߄ţƯ$sX@X`66AUưCq6LJ23h4=_AkoT\mDZQPP &*knJ W =1P|B}jsy6yA3`h;=h? {ARD@)Jp)߃( cj !g7 t0R(fj*;|G`Y6mDEs_+B zw=~8W& 4e7IST:|܏yp jfcg<<[UYަ'؉1*.-*8 L8Kն̺us "Lk&#hhP";g̺9Ku0E$"jdB0b^Ο̟wx!GZO5j?He*E^fnQ:Z4j=.ףoOd7-ɕ84G!Ӈ ,(əzCQ[%"rVM؊9kuEjUTzj7`biHE=|ID!;M,4 Jу}eKM m>wvBX4_n'>ە /횴 endstream endobj 603 0 obj << /Length 1969 /Filter /FlateDecode >> stream xY[o~ׯ nq$p)`T,4N?HJbfȵd^ge+Ai8sef6Jqypty%.o HaFEt3xwyvt͝DR &X$II\Wߞ|XRSy~?ڿ._.Nq7A=:xS%Š;Avpڿ: bF(ё߼ 2^7F%kݸU[+XMFy_p+][J$OG۳}('Ee[^\e>T]I[qun *W}de>3 aBFrAa Hb1ݦoAګ^-% 5!$c!I& H U|_j%>Hq߃D0po9 Sv%I C-Ω@SAMb[n$ޛ(uA.b5Tμn~7"K1R)0HL&qDQƽIA2b>n{'K|;U˔]7Tj<.u䑢 xR1DCG0?lSOvCnxN TT$CK}XyRV,!йtн[Q6wfrt.~b>KOok(COL=Z,'Qp(PFꩪ {e|t9upk=\ugx 9s96*zz>#56no/#, X Q\KϢQ[u_3sƂ!&SKd5^QBL@9Sn?49|-$:JNVC.8#2'WUo,?ssk 1Հ&\;/O_Dߛ17'_L&} JFseHAdOCl;ݨzBy>~)]z['*~-,@e.|.2``9H 7@I$x0X!嫰Qwnwj=: &DJljJݺ}[`C> %+_6EW y6oHHK/77*MO  q+A䶮gV{jL@ŖZA~U\ bЯW4` g?|l A!؟.?߷[%YetU+}vvݬSq9=qn.s _y~G`@;ѿ` e8Yed?&<>.u\͑ sfEi?Z?(WcU 6Plջ]b _l4>zc =IRh, qpT LS4U't0AxzW )±Fwkh+zWF; c9S'6HjPG3cЌ$tSEr0W(rPUmeXr+3sq#dAwƂ}-/l4FRamcFeʇU` ,xAhl __/]H9Ca8. d QZ`ܥLm )*AH0!=`WM`S]/ǽ0/CwɛH%7ř[68eg..?̞g9n]>0\pF|c8}왉7.Y03+ ^8UH>}rŁ~?˅ endstream endobj 611 0 obj << /Length 2491 /Filter /FlateDecode >> stream xَ}2f)JL$,i s>h,ڭ[|}XAKuWx\z+Y|u_\,a$Xqwmg_VL۱?H㚳fenHOxAÒ\zú"jѴ*Up_@MMm=O/!"<)4hiu4MJEE[_#"!M%K!$f"TڰvbC%T9@~h Z:cZx `8q;!*ι&lΠcc®1S@<65d(@tI ,N]9P?dtK 1 yT0 KaC݊\c?1hbp`qm7]VA:Τ~\iI1 T錎(Mۑ$t}CJK(MK sV fy"+eAbR @`:R&TKB`aS_Son-LVZ=ւ1mx=֧qyəcWXi=j{=ϙsYל)EСN\ g EG  4͓.]^p+s@(hDe`6|v ]T7+pvݿs0M>46D P;&:(Ʉd/ɽ y=8kԉi}O^:SyG.ZţB%xTnzyKamxzBbv6 eg+F P!N- 9bR=DmC g@( x1s<{kj' ;1};s\ *MoSUS=,ыzwDթ> h޺C#ɔU;;N>-ZyV}Ofn Pȗ >Am~q"T}H < N=K ClOU"wg,3K@r )'eL0BCY-bCStK!@[KQ.ck, Sv:#߭1xخ[}Ȃ˵V6[0>@+i=I )2%XHs|ɶS[e3q%~tz/jxerw>QS [HIc9e$aK~£y@&Gx:4|Њ8hMQ[3,gV2%p Ɓ73*uEwc7R'ؙ y+o[slZ0`)$#"-31Ә36OR/Oq}A7XO`A w!B{3\VCg[+ŀ5l0$. HjI4Cr&t)t-GIi L.eQBaV>6,ќA4{ꞐP ĺ_<>ag$rHޅy2H|(V`CRpL =uc*M\<9ө7"[r͍QFO̖Y \vzrxMF&'JK5<ÎivYor[ ӰÜcqw| 77 E;66@9]%a'5~<՜ÔBiǥw?.ך)Gצz)Z` endstream endobj 617 0 obj << /Length 2997 /Filter /FlateDecode >> stream xڽZKs8WHJ&gjٙdwvgqr`$D$ۍyh@NjEǓ=yY|qvHKZD2.vqd엧/T2ɵ`"kqR$_~zr-^`KyѳWϩ_}?sYםkYb4 V˵hSmNj#ζi:'IwO~_XMLk,)M:I<MZ 46,I͊)8if!`OI~KNC@(Äfb hM\0Nz8zO.iQ1+b4 6hUVxog3$O:a2}|_qԩAmj|PI3#_Yiu2UQi?fM5^aVU^!iNXݪn =QF}օB')|?yT*&73`-A$&@ëQ3}w*-Kzv;9Q {7Knxj;T-.~̢mvگvuzz*?u6ʉ[ ȷaRTu|okB[dmQ!&b?D!v&ĤGL}ȑ˫$4xE[΃COL\( qonp6ּL{\s>J$ӣl6y}~|!gEIO9v*& m,{ϥ{|BηΛîuѿ%'t l9S' PyDU~늖60%zB=XXibwt8#: WiT{.lra\˔_TF|jjp5ŤQ7k (QAp'anH3C R<̬kͪO5kؼOy|5=?N!mrF4O'l͌HGJ~Cta - [&ּ 6 <&IOcmfJĤRpJK!&WrsǮ%z ȳA3Muj/i/(nWؓx;z/2؉!*Ad,}(7k 9Pqzֆۃ jAٸ}Xzmc7-1b[쪮(|hTHTuOa~P)[3J/&+}cGrQ{"tNIաž)&+=BuV7[^Cp `L9c/k:lb\Sib7~-dmmC/^T~bn nt$Sf v)2:-^Sɰ/y jI@-7е<[&=_-5r|6;|;>=]FYԣ8jrLiJ߃7: [EC, i5Wv'4mu}MچYn[]N$4|7MV@aoRv9 +9^K "B:BfxÕww=q`^9JYK-pol[mrg`E BG&CS+-K{8mdoT{ߪ|]rjbѯwFUz1YtLiݛuE-(pw$1cwQ-5]0BE6d k&';w"nTi"U{ETԦm,X /l31|51Gڥ@׷EGR!e$16شG TdoIV/"Jh}`O?qrt{.2;2B`@*#W0FbKFVMSv)Ѐiޭ+w5EdWˆǁ :grg P 0\ÒG$‘&r@D$q_#ڱw9Lj%[dVݛE`̝N,j߬Ɲ${ az'p4}Qfm $~bBF;';ꢝYBI>EWF A3=С.TBj~1}+r@Snp ͽd|ppu#G.wA'J0obV|.k=u-&>@jG+Ѓu"N0+@-&"AJϽw=;/;j; S#7=& _xl_N <>CF$ɭ:®MYf%rݽSIOS }>L#8/QcȬj~ųޟBv1䵤z;wx.^g{>?{_W endstream endobj 623 0 obj << /Length 2447 /Filter /FlateDecode >> stream xZKsۺWhf$N64{wxd,`؈BRv|}I= NIpwl>[7y.Jg!gpv0ũdLg.PL̗!<2e5 )` *V:#Wfqbg( \25@EA)FA U]=:ՄA(8mۚKڦX_-ѷ'PfMhv7ykaМfۃnr1 t5uGItCR겶'Cņ>i}1>B0{<B-aiKY:!l`~KP H_Mܗoʎwms>tMlCeE~ԴlfFRaPf4#Z]%(SR,Ѕ`=ȏ`.l4b9J-36$IX~n*by~EŠC/Q՘̬Gq%3{;(/ak>e#k)̋yݘ[~r@^i,[ |-E_b=e-s@HuATva7>eb8%;M4 'ֻ ">M\!85&`lD>!OX4; nYOB_GsXxwnEt!)v$x> h ΋ {}3'F,bv QE2&E]f@ k7e /uD!~}7<@K>q.ۄ{ G' vb>!7u6Y&xuc©ٺ'=ttdӛ+L Leb~\(go;! 6E: bM,PM]MuVE nj yۮ vSGz<2p /Qp΂PoJi]o9R;X>Ue"oN TWa-jU镠TQt֯3-v 0[$'c\ŐE0R*J%|_] fRji81`TSi4n}K1ݰboݚOT ?rCnp7uA}' Gh{^> stream x[ݓ6_GZD7}H䮝\{n}ڵZ[r$9C&Ӿ%"A~v-䋫'O_0`QD [\,&L.b#B&jxof8)r#`"tdQ]pWϿX !ݫ X?+%gߺW˗^~9rV`,LH%a)Thb ¸ 0 b kxbPiN3]mAO:opԲO& z)oWߤ:On27ȲuM&z8w6jê9TSPӗ7eE&˫vhY D?b MAoi'.-,-/\-٪,]A+{}ry؄CVn_euĻ/It!ǯf?V~=fAA݊,$*XQ_kctuQY3s2Ӂ*{U _3jUy 9 g;29X%j01'< 0S*Z0>:E(>f1w'Y%.X|o!p*01r]" "\6~ -]+@cb]Sw[H{&8A^:{,(g!]>nHH@Q'^y% %YӛMڴ)r8=B{9d#H_g|YAB}i 91/[9@c]\3KL`_PcӺ>؅ %w=!&T voY=D\ F3O9No 2j #EXG3XBu4L')xje2cu''o"ƃR6KNmQX'H$:: n鏊S.|&s|1h `ä́{^|N.#< nSֽZ#!^EZNL榤ӇYS4VU]"5& ]Vv*T~n^dٛҲu73۟vJ=>ذks7vdet",gLB#&!K'vE 3 àF۲R 6^Xe5W-V8'(Y%l]|BLTn$~rI|p@QÁY8pInwHCn 7}Z5.L8e4E =C z Nd)l 5 ^ϤMxFXYX,~O#2j  ={,ƞ! +G ʓ ?=)Na8ΖRsiGzi^<3i{Ύ1R EW/#w SPNI(>Ny?|?L#ħ!?Nء23a.̈́OO!^xE\fLxTƊ.gsx?t{GiNO7z'Ǎ eA$à 9j`܏sEsEFg,>JafH'K~_D26t,j%n5rɅ esAFNfwkb/)޸˛܀'iyfF6C/-73 -撞T9s30KY̅!G\lS?8?Et3A8 ]qtImDYA.As&I^b=X>6+Ƥ-N&"@4Iׄ 0ꯄh`mb9MLfhy?6v|9,acZV-M]9tL*\"GX&<3R^yVkj{׶+ 2(iG9W+~?s(nMBHDB śu3'`4Y 9c &AW *$>U>u0s_6捻p1ՄGnGG} xeB]kh͚rwY\/?\.7;wu`"zC5݅U( bO:ؚ-^+ KOyxlvʌboWOTQot&mm 'yfvS|ۏ#Xl:n;OZג=IL06j,uy!ꇷϏJ[ CNw#ZG p$n&wtLv\| S%k6x R(R2SzJS@(20Y#cdϔ_$73W_2]x5,HX~4^[m9`Kޭ Yg{D|FP75zMz6H`o7[۹YWW 4rz/5SFbӃ2Thl+/c@NyS"֥! gV,8O/L/1t`6bp> stream xYI0r-nZ& =t2 TA/-h+-]]9=>j-5 u(Qɷ{yoꇛWq>onN5# "ɸ67GO盟^vfg~7{YhZ[y]Mڥ^*%->v˽qtl+wLCnpȸ^+< Kv"{W5*u-N0 ܾ~'`>%Y 0VÊtzxR"S#Id_]t,bi?Z&dq蛕 2UddmfڻQaRzV}R'mk4)uw.̵\+aq`lO 9? Y |_&!- /49(OIPqȴ_γ%&`Du 8v,6b7q0$pz`ç?PËMNoO}"Z=˙kaL~S so)ʟ.b>) ~AbLՄ u6RV57baJQ76Go_bSZNi Ƭהfk Ś>_jb/#UK'To;cjØsEREMZ l"NSz4H\Tj/^A>|sp0N֚'p̊(r8a*$@9z.tdF'F6 ~  w0 !]5I3tV*H E2u6N %\ڤ i7OoM5+U%CCmCˈѧ-xUV"yC[;W1)憀Av09-[a yMQ pL Óf[aRlx?FjϦiª@2;QH(H"զrr^21}L wKәoD|5_ `*ȷ%ْ \9~`nzUQ4#6$~yfO}yr@V,ҶW0n TiSczk$4r;à =`9M>90*7Ʌ "߼'N5_T8Y֒oF?n|L,yC"ĸwr%bp.[q .(Fb2ԽYdg|4Mc=d2Ug&092R\"#!_hc5l]7 ?uwMa7?l-UMW ]lόDY3,Jt{!GhkzO~$ Dn_n^* endstream endobj 643 0 obj << /Length 2043 /Filter /FlateDecode >> stream xXKs6WHT474Swdjzi2,)R:.vA4i^$`X,{L<)B" {i2ʽ]'8q&A 𤛭Bn6aR޿~sFQzǻ?޽FB޾&݇pw|x}_ VwUFI )Rv5#|P8Fz bߵLlAѪhZi:Wl/Kyn6vy/O(YQ`1Gs<]>ZL;KQ2Ҏsߕ=7["[G%upSi:7OV|pVQ4oTՖhqT(ٺ[Ӄ@Pb$!SvܳqDchGAԏ0=g Z5DhW]FcVX5466L0XzBTɥz[H8枫n@Zrؠ&U^YxK GBןVpS|ih=vF^t$8 u&ҡ5*ʲQ`SI=Q*@ˊ̘CNmXMɓ|ٕEQ=W'!;е>4#( .p#cTDz8=< aृ*k_+( 4 irOy^:4`ou+ _\˞'>32US֏FH] P<b=&t`ɗ9,`[uH7e$LI\ 4$QÏ\'Z28 "t}M̮)bHM{"O6~TFQ,7gB"+Xp0is`.J H__DJXvN-$ {b`rj9 /{=Vhfu4r |VL+P5m_+V!'4Ho|KNN?Q?5(Щ'ѱ|v$ZSO3YՁ-噀Ec^-Q$,Z`~Bàh%KF ݄)ǂ^]kיc"ErxM(9YCO<4]y˼"UF#EZuFj Ula`n)m5b| ˪&$i!n01kܓ-L{CM0G lUw!_sC{fs tnWf>(NGe~;זK8:+bCr)vG'WDA%5iX mM/>n] }FA颐J7옚h]NU^,8jZ N!_ BNu?~=5MaOY<Ş(H 0]ShGT(1]v'ӡoje!9vjaQjtu  endstream endobj 649 0 obj << /Length 2811 /Filter /FlateDecode >> stream xڭZKsW̑ @r.WR)*jaku aoq󷻛wlѱrӛYdEtRlQVq}Sw5E4P7m$:jpz 3)L/zv9d̊[+9S[kM6|m*sÉLS3@r+"3k`/G~@'XMR{wy-~@a' PKס=CE)|5Ԃ`T3kZt^=+yJ: /i`oeRq| c,PkA"^.3h",yx4L%|xñ=yLa&AD#h{Erq5ߚ $w%y ! _ݬNHXj 3KtT"q0ղ]{"gYJ#x΅x8""|J0N ˿Es '$%yJ t]Q:'7t4|3g҄;0h|_7@a[[:Q&1d` =Pk@/Ylm9sa8C׏ۿz FuH;dz} ;lw"JVAKh\Z}EԁT.W2Gnɕ)p#^qa'CGELg,7BFg!,V=V/P:ƽ+D?[jbH WUc>SIn0Fq&xuBY$OLojJkMX~t!Fz#?2dOg2н( 'E`+7L\}G\pA2FX5w q*agnG$ҕe0 6ˋb r@>c,%>h,2+^ޘiU.MQ-sևwtɕc4*dKvڮ9PI=Ӳk?&xٰǩ/ٍSZ*% F@A}@'+%ykcAu*l)xy=2cwI3%zϪMHͭJ@S+ PԤ̼*5y)^J:r`2ۖ[F.߲$^B_sd\CUF`6$NM먣&_FY86Rz H_Gp,cz]#&5ݢ<@%K;AP9_`rNL_[QgVrAw'ē *D8p:LRG3Ho\z^{j{ۯeW%4W%H3xWVWl> stream xZmo_q' ..V DhA@dwGYQ~}呧=IH.33g:LccӹH$zTѿNћߝΕRћw?K:zw~voNs]w~%'3,c*MapMܤlX\|',i+Ock?Ƽ<|"0 i3Q8gFCX&gϿ$%}?KbU[;s3SֳNɎ*gJ+ZTfQdf{s$BKhT4 kWA3?⬈3yjjU"DgѫD0S]_݄bG ME&!! \ ~%oj]u49czcYvĻN^4]_o?U? ^D˪(1 _oZ_꥛AZ׍u>l_;?~9MMTu%']|:qsW.!7 w$R(\f^&2:;,\SJ5.fΝM[_[,.Jd Y>BQ[u}5K#,~BG݇nUEEuK[*(2̹LؓKj QyI趦آ~neHro3-9ɘrH lDUAQyȡ F rUH| gg -%y~@L^ 1-o7ҁ{ yR&Ϧ2!UsƹN(jlklqlT*]MFV-2i?&BUm G2P{Ǐ~x0o˅-?(O>a]MDpFXn];~[Y˪* Yz{ekr~7|ye$CQLB aͽpb:MT_yd)Pr>BCDa@='ZW{˂b0uz(SCD02$tAE 4b -#}!)xecyDqQoYb9SbCo#L(;UJ6=Uő̒%Î(˵TE~zv5ED:=³PYI:\tf /Η9z}H0!ɔs{8 I:U{<gO;eMfK_kg:1o!B@&<=Sscxfݹz LmtiA0Rnnr`$S*aeZJ>ҳzwjAfr^eM.׿cZ"5VVBV8Qm~X3!_Lmt5w߉3\eᑒ/o\^Zt5yt@l]򓀎oy>Zgޒ[Ytruq}+ yW\AʛIծGc]*tLw+lifH@Šw  V+k2wqhPSphuݎQ-P>?;P"6%$Ue lt{SAjdҷЯ..g]Lh]ɶ4+/iQB@ޅAUSýqPk`uHh7Mk5Ap;NGT> εHߕ=Ք,E00-uOV|˩y+0{QwW:m,kYuAM75ƦZhiY~{8 uq v~2hp[lݧ1 uh`1^,,aK {bg%a:P96zAgtˣ䈬(1%W&Ir!kYc$V(5a|'"FiH렗ZrHֱԇroYihYS9 ͘6n pc4K:l?CPWف2-h58KܟQ׻|t=qz`>z4oX۵/TPN@fj0 jTA<}7_up⒰yZ\(70Cɔ $ChrZoAYI>Ϻmі'PxS(wuo9ΠG"@?iIJr^G^q%H(ӵlDarX#fM(YL䏀0_L (8#E O: zO?pÏT:*.=}#DO{r = WɡQ_;~ #G2 n]4,ɚ[ѥε ] @Cm aj8A xbVyt.{'"rt̗'sn|ZjĄbIJE63'jt{1}#suFf)o|Lն(DҮ'WeW/<&ٶu`Gimipl_n endstream endobj 664 0 obj << /Length 2708 /Filter /FlateDecode >> stream xڭYIܸrR.Y$% O]5TXVclg4PC6<>:[x=vea`_~|{/%QKS\tW}ngQlt,J<8~R2Z0hro?e TiwG*IL~AIjLi HRfE192ǙX &qLgY.wn@ RE|}u;'O}"^Q\Na24J޽Sb-:,9xs}w"1إ\$,|ܡpg>ܪ 9W _jn EBVp({xhϗ~tm]ܰWCߘnl/whT ] {r5wU;_KlYh6j m-fBdZygm"h,6VTht^{ -n3t$+zi37ťxjpc v{n1с 0ҏSYB <נm6ʉ~t6A@>EXhҔ8a]na ,W "ν|vkD\ǴB8)̸1de޼P@@K}['(U~8I"EuELt#/GY̯h/T6AIWХBp@\U4dPޫSގs}v:*\fךFc49]%wY9uyB/yL<ֻU)@2Go6L% ,5~ ٸqn/a!z0zwqQRGڻ>#on}82"mx%!>2˹%hby8Vvv41nj;X9G09e춟/5 9r CVNe2XpǪ7a!8§չ␍,©ݒ9Xٖ+{C$ ?/.{ >>(o.$a?NB9pmXT̀DsOxKѕ<ك:"'B% kS|z]^+_yfv6$$kfpf@uB4dׇgQad^v_?6.-+ŝRzqd8lK^(V*WQ,&OՁ75}6s[VgM4,E^HJ`E,.,!833` }pS7zd棣2K*%],2I 0&d  qhQUźe2hm``ʗ5:Ǯ@=曦9 fƫyͫE%{l1 0<8l,ռf}ճ7^ ]lz=R' ?=3ZX Y,a[P1j g&ZqT-7.o;yjMZ H"41ϓH0:(O9y8ߴ`&P))eه?^_鶞 g1X"@ZY%}OnXhc !2:+QwWTWe 'dТvt2U}TsK1{ ݏB%%&*+W 8)>}NB0g⑝>/Font << /R8 670 0 R>> >> /Length 645 /Filter /FlateDecode >> stream xVK0W+1=JUvCÊ,]Jտ1K/7<›TRO~vSd'Б(j n0I,Iy^ J;x Vg@*B^#G8 Vk9D 9=Qa!h%{"@U,V@GAEX !1(+ YBg~B9(뜮LdeC!=0ZZU4lUQ"X !/G 3' lݟsd "n kit RGylƳ+FVՏ֖L$46q-ha0RY5DKM0CATo$EGpA/xοT:\P (Z:Bɯ^>UF Rpݡn qn8 %EuWRZa6(4W4\yeq|N0"#񌰠s\<й͛_[ٵ|2L&N]+|] {kD?e3[ܯJЅju+f9 ѣ k endstream endobj 672 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1872 >> stream xeT{PSW@%"κmEE۝ةQRM$@"! 'D!@xEÛ h:m8ι{3gΜ|w>[C$!WJ+bUhǼL2abyU=|'(s~+(ژ xA^SAl\ߗ0:(zly%*: )/oaEˏ7(_X?aAU[X6{%zJPu݅O>yWa.0F-bݣh ]BpzPr>^G݂x/[kaWxÁq`e뾼mOe\CSC UjhE-00wq.vacm *M)KzDM>%4z=㓐)5fi=%@x, w $ϯWqYE:b㵻_-mTU3 }|v^N-PD@0( -#V`$8Kx|OJGIhKϬ#`~o6E' R"MJo0xi{ &߂/TzMNzNtOvXU>Qgڅ`?Xp,M~UVP+k N~P{AFƑ!uy\:45pG>D X(zT"E׺QӦi*> oۗ~^J2uRUu%DzOͥJ(`5ś[u? nъH322)v)j5|4fdcLn.*N 5^7g֐^pUXQY&7xֶ3]X%@,PZ/HwM̨ 7|]+켶6QXCS1൒OM)KnͻR2986qv䌬azpFh?j endstream endobj 655 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./tapeadv.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 673 0 R /BBox [0 0 314 156] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 674 0 R >>/Font << /R8 675 0 R>> >> /Length 525 /Filter /FlateDecode >> stream xUAn0{lsr$(znb p%Kk5Aj8;ɯYȷpܺ/wF߮ݷbrNrUiz9HrFr?=}^t_l!D]h :N&r0*ɳfPc2/=QʞƍSEhNV 9TU4ry /2"d@?Œkvsފ,qW)\=WęZG>e '_Rԅ?8%HP.Oh c!;t(0 GT@vL\84_b0Uq4Gv4$gөS2+ Z. ֌> stream xeTkPW%(RKP> *Z;-LX+E@PMH&4aB(!AM R[ZZX+鴝shp9s=|3wQ$4AQ4" 6ɤ|jOנ:duVYggj#_~.kH$mHHHfkrr2qHOV"X<\*;`DBO$Z BrY!_"$%\.S7ےn m;lT%$UARRK)W* )_ \ȐJ؞DRVgC*D,""ALP"@HC LmEV"jڋ5R+I.:zgf,:8-6k;}1b fQ\.lq p^gnn#@Aw`9IŠk`Z짲iݞ]o1SS˯ v4zm^xȂ6=1 p jΨz,s12f/9ZJӉq,ŧwO}{SZq[=h58[{Oxn6l~Ww\U2.klf|gj\ԥ943[rRի. ^0\5/+H!6҉ rj>vhLkF/.)@VHgd| bK!2ea"}~ nYv|08{VkFy稻pm'Еt ܛm5F&o08>ܜ^jufK%e P;kG58(WVΗ-ݚ?368#jX6)tJ\qA1.-azl:@)/H7e.v7i7qP͑+2Yy}/2Ehn޿ֈ{]o: endstream endobj 680 0 obj << /Length 1781 /Filter /FlateDecode >> stream xڭXo6BefHzmÆ,El1lhAh[,4wLJ,9Jbґ =FIJS-^*Hʄ%0x{HF!I hh6gRb$3Ƙv}~y1s/o,8¿X\]]^.f𗋛kaqmO\ܼ#jc[s$ l$\ _m"]RE]UY2v6ؖ|"lVa`;ߵ15J`dÀ+|sIPf[(.:g"55mqfʭF]i_!^Ruc>+wUެ %* isXoSzΚMeYKo3GFfs!B sUMT*-P@h7k8ȏ]Tm>Iz@,")AAdd9 UYFK:zB6݈,;48OIƎiڴSC W-CwS[A,&<f2 M:qϧ$pg69ObB> Z= %R8]:MAXDʼ0 Iyɻ$ikʝIsXۓM~dQJD,UpM4'h0 q~4n߂i ̂dY fO:L ̓@8N\n tNpǁ® Ude񯴟âUMR]3h,8$3F1 83fR fw X*+R6}crh#e  HH8$V&TTI ! ]Frob*oC}"b1V#ij>*AxP|'$B>M&PGnF ADllSx]24JSd%ǚpak[E ]i1[a{{dMT'\i+w_9]]h?Bճsw vEi)x䧩 7ochTc7D|XA-Ͷ,\w/ g wXm )ݬk"y0]PfOuzB_Aaǭylv|V7ňB OO010SÐ~\p=566`JNNB)y?}L޷hIATqТMVE߲KdigmҶ=UN"Nf@6 6 gNȼz_Vc6sȭrwgB7bG ,'`,W㬳폓*W0WqX@_%St=dMYf6W|F,3K>!N;UKx!wVSagHʈnl7Np"X?u'M)Y?eٙA%R* --!܀x٢x΋4uWfYTv`-Xh/G [=`FJ (p壱<?<6 endstream endobj 686 0 obj << /Length 3143 /Filter /FlateDecode >> stream x[KwW;(y?v>$mNZ,`А _{gOIK,lܹ݂,r񇛋WYPZbvaEjX(S&_T\^SBH6p)UU"\$nS\OGByQ%3I[fmͭL~l/aަX^sͷQ9ޢ`4%nwR xzAijd8~ejDt,)ֳ%و%xXKXyNcY"kR;#Euϔ$}llx@ayi΋jv/_2|adfH* dfO |s@KхN&a% _)ObPe›NQMEXެᦼsJ fl]j`V ?G ³$vYul-m 'LJ/yI񘭷3vC{_ƛm.ɦ^7ݤ5qA<ZQQ{*Yde JcEPM*aX 4i]̜xc cze8X $)j=U*OѢeU4~}$MP6X]t>ic;*Js!2޻'ɍ {E_vYS^C~GK*qAlӽn^`CseZ5~>(].OKBrdϠ E.ϱsj;}Xd]齬!Kyx6fѿ]؂7jyH i>GR~d]*!!n:eI C3c&j&J'S&_Lf]zɬރs8a[oB0>bBOt =F!5\V!T!2df[Mv 8oU'@Pv*n3T4lۦ٭n;Y2>fp/ XhL1:3% 4j :Ѷ_%1SB9_"tR6Õ]҄qIJoIm޷Y4+1v RyV|0 P5Da 0,{xUHqJfQ[Қ.&,xڪw _9(.כU+0D!2/ +,li=~)D'!6a,(%)[oVзƒK|f%RxsHx(G4nhn?D ұ{^$e ?x,6H' e\ z y]S԰yiEkkmiˠF:uEJ%%'dͥXٶ]-܇ y,>J:CU@8u3!K-G;r֕xEƟn`6y({uф}wNv~b*U<ן#NɓkՇjCxC}mOI{ywێw !ֳ s7LCsb 2=۬nn~EvBjQB~E@]iq4˽Yuw wR!?zrwbjPE3kYf+?Apq!*!v3sS?~O1<%X੗:lC>`RCg]oB>o7@46['G! IUxe1I 2\"#lJJ>yLd}DkϼY:D|1B۟@45PNhWU!8'9suRS﮲CPag @9~w!M9؅ZsWŶ@:yHU,& = Y0 2DZq-jBrYgW1;O8 ]'"RS*hP=U гP3MYO\t|:S._e۸.띅&fJ] s~)@@AtD{>z,фDM)utihpV]:\6Tƌ҆&~ A_ ek^x[ WCzo8N-=w1rڞlːA#vVpCْ[ "0bQEU7:L?llsYowm;EC( M^nA(FGjv7E9jr1}ң},J 5% V:_CY#P֡k2uݩj #$3/d= rC_!BޛxgnP1&' m|f|w?WpfxcLjaEZڲGeL߂6O.E\tىx0wr2Xxsv sEaS`|__3:,)?PcٗKDZʾ rj kߢw<8N2Mi9~QPYř?2zJLFxJBI.T4YW1jd /6R$ $[{ʶ<;I}j||vOA_]|cP/s!8_Zs |BΦ?J endstream endobj 570 0 obj << /Type /ObjStm /N 100 /First 897 /Length 2695 /Filter /FlateDecode >> stream xZm7_oJE#tEna (v}ڜ=KOxdz$E-L5 ʨ^YpM5+נ'S>%\'=bB{2*Fg5̀ )td ObefFɪz<4AiSD]dl9#"ByAƏz0QΈ+G 0QJ:Y3[tM2)V.:QݰI#Iy&DyG@wI_<˻-F'nc>', z1Ad,cAN^EX vC`&>z wqQ 1FC1ֈո$ɀvhf#4ʝ;lS&bI@5G٫ U5GNAŀ=*;+Idc2!fX@(AN% c&b0&;R¬eF*dM*{8;c.h/G(oNj-LX€JK!!,no:d(##~$sB,)-$p6~/'Yl7ӝ !=`*˷& >D;AY[̔`9#\yJR!4 Ɲ!nO:f|=Xon^6:RYٸUJY=daJPE`sxWWFݾ-mN!sr'tsвgtG辫ɭ>*܅\Ie];##EL'Θ.Fz_GCatv)$-Vj6pS5V}.sZ^jtXEj:^Ӫ_n޽O/k;(~~T٫jܩdzׯE5v\rQw;h63xȠxR.ni}.f sy;;'_ʤW׶d8=M79GWb(v-egE^ǻsP1Aqy6o}460H^U~|T*iq]Gã@κx 1x4CRbAf1g܈-wU8+FŸ(&ŴX̊rXuqyd4x-G? u駿4枼x[0[`7:} vg>gY@l^+ C:G٢:&9j4|UݙQ$[١1цzXNQi 89m|:JYPh29NBu7?hJdx|!4rA0_ȡް Lcڊ.4t|zN[urښccxH˹~<:z#b;VH endstream endobj 695 0 obj << /Length 3391 /Filter /FlateDecode >> stream xZr}Wl hT)heSv]DXXKY*2 tL4zV<\83*Sqʤ22]]nW?E:=*ԱL3бkٚ3ƢDsxZJw?h@Eߞۗg.߾po/}~E1/sͧufEXKF;A}l˝}ߞq`+mT,22*U"Vݳ~a-&[Xf][X$OT5gMkYZԲBA!e{V|SwόqWn bgkDE?w~>V[K~ɱ-xfst!P]:XMp&U$I'L?&B0o<.^| z1%"*?%dȧ_rK&T~DaFEӺv Y}NԻñT7(Ts,.I-A\ : d Q[+TTWB80\%'9*AA0 -.?3Btp6(19_l7IxWZ"S%-i)x`ʃZ,!ry #!xf(&|%1˲6}'57Je0Jި!ESt4L֞ QO4jV b (o,TyQ๜hp,<"% 1 0>MlО'P<!=eta J,}dȀҒ,Ǩ"Ec.E@xr>uL]!_ = !KdT$(yBXp5̡Sp#Ld;X'mjM]i$ X4/oh]›<3d]$c-8:RX6mEkWl8++N-8.k-piAOEs5|0- 51)$DăNbPN>Hs" zub'E.nf7IQiFO0DdᝮǑʹ6x⮑]28ՔK-\A'Tqna+0R" U|).-r" M_I!￷\,.O]Ez] i}sg>Pb' k9X9O'0MI.6Ivn!IJ v΢>[Q³02?3 o&aT]35]|JE"{NA4lݎdQ8YF0 {i&T&uQ/2ܨ˨-R^D hE"@L,ŜZ!7G-wye ̀{A'd¦+u@,-SCte^€c ZA#ٱFYxv(^pI8H#o5deihWi$:/yUoXҌ}PP# O7uO<ԝ+a3Oc%1g ;)pbiCJ,˪vht3 Q :%Bo5>o݅lc͔1JȲXdnv(hhx8hoLζ PήX~{k]5#ueݐCl?hfؕ'k@@}i]tCH~rszҧ8g޺g4=3Z=x"VDUt -Yp7qf;3뭫7Ec<5E3Mqe* Ke 6QMxxzNphu&K,j󝧳ͻ܏uqCZOPFiOA^0]Zvz{;HmxJ*qe.;يzBgl/^k5q%&"x>Ѥu=W=%=Y$ӭ?o1VYFJ|PsWCƹh[[P7OEƌ`Oqtvf>^x6mlZ@U endstream endobj 700 0 obj << /Length 2269 /Filter /FlateDecode >> stream xYY6~_!`_ԀEyH|df ,*VO4qva`a`,:*it7W_\|uSV%n暕B2.覎~uyW+4LYuTW]1+#vyo{Wa) E&YZHg"#b ZY߯rVP4KVeDJ7M`Wu3DWqC|骥c\"p%*J:m{~(VD xylg$io[UUlORvv#ᢧ:KLY* 3a˷:\~<ߏd'P~elBHʼ ێ`pP8 >h`R*{yfej~ulLt¦#45/pV-ku(d3Vhôގɏ[ Μ- LyK66fHM5ZE ǁ7~&ҽ" v1?1R 0P$˕O⿝P$7$'0P%+we JMA}&"zp}$pE?:Ne\8Y| Qvv}!`o]gq1%?υA鍟[s+Ӕs{gDOcajkLԒ{+dFuMG䱹DHU<}`@ƧDCR"+HH5PƳximV0uy0mS*B<рSn+3sv<_ТGtt ZGS];M8D^K^Tg`p:upm滪/J]񍃙t?7ch2JgĴMdg$+@~qU]Vxo aHZBf4?el~[GCj3n歛ͅ0dM&gՐ8ck/:˂@R殐k;B"%,II,TBIysPqG`Dåٹ!m%е# ʴҁ5`]Fy9,iNU .V_ޞmw46BĞ?%}Wϡ4X.s K * POt&Ź>NnBP\>u%E~i_R1D7. #V\r!fo4wiI~nFp q<GӟRΎiӧFݬ:\Ѓ(uw2Zv7V2Xcū74uݢ5L~m(uVQW zY ,"CęCRrC!z2ppE&e@^]KdGC|PAo)%#Ru'Yw hKTqѡw02P+*q!=)p3%}gQ\JZxA?-x,/FצC{*&@>~>'z-DK0JPҼi]u4p!OT` ջe{W?*ɵv$`П{I0Oy;7Mŧ$K7}@BF+۠ {+Jyn@_/d9ylysGrp C⶜PO16 endstream endobj 692 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./multiplexed.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 702 0 R /BBox [0 0 524 303] /Resources << /ProcSet [ /PDF ] /ExtGState << /R7 703 0 R >>>> /Length 974 /Filter /FlateDecode >> stream xWr1 +Xl -Hq PȶffgIȖQ#kE_߶/vg|HKv㿅s{lI %h#>7Z5.z&K ᒕ|mDuay!9: cLXmHx'좀oʾ4M=r.SruY6(w…صHcĎ_ 4<\Divȴk e֓;Ht >gޣ8Te4՞[?3/CzX@PVU)"^@$I=7mx^(Y^%S豠 j9{f&Qܴ EB8 T%&O6\*zn6ChQK.c(17ߞFC\3ܺSo2>,W@S-YL! mȂSJ4, 긚g#QV65oM vI6_ oJf:dHpr"A{bW'Gsט)%`aхw1+YeZ~KAsjW#gƤ/PdLB^YZ@-6@F@[:m-vєD 7iVnOSݨ*̾g6s>`9]ptn+Hf*+A\3jQb"GƤ\#c콐1%' endstream endobj 707 0 obj << /Length 1926 /Filter /FlateDecode >> stream xXKs6W酊#/`\wu;i25ӃMiTlw M*mH X|.7~ewB` (&<!T0˂P췽(8FHNc'TG'SXx22|6!/ >%~8=99>;4;=(N? ?N;ءބ $D/H!);AD7Tg;w;ڏd@8h>S.w..qLrD1"8& t@LXC1K7 :OJN H QQnvmӄs6EpgU)!P"BzQAQI:GL&ϻ8.B! !Gd1 }z^vΆ|!腊Gg^/"C[ ~DZ{r w2Pd[Cn:)l-}AsD}V6?HjZՈia::o\}SfzV540um1(Iqp͓&wte; a> {Jͨg꣞3U~J) % 8# byt-(gBU) pcO2]:wâľɒy*UOQTM[Nj)s:ʟ}1xY,muuki@d д~wP؅zQ~&:*#lpڋ瘨qU.;g C/k}ݠ9<,.e#Aʗ9fy*e,½=;{Zm,&SqP}\eVxuF$X+ 87C<`#"XC |iA8խ,?DKx}O K-i #IwB0w(vO\i#&Fz$V$3#g59x W2&UP%ԏ*.E@Ȟ@!N2[X߁ #(]ե.>F/o+׈ M<0/Ox{#bgQ] {H< m\'cc=&ٽa cuvLe‘I&] >li)~4 3fj!!EfP/OSىA;QMLy^33W(2#6|/ :v`Qo2k[ڼl\+jS5ط41]ː& '[w*AFK l W]1 T5Z968L+`m];+GU.$XwnN P0UD1⢿]O^(cOʴԝSFdze劵G!ܵ~*irGki<8 vC/) 9\SH endstream endobj 714 0 obj << /Length 1773 /Filter /FlateDecode >> stream xڽXM6 WӋ<Ҥɴ&3@KSYR6/@(N"Anm^>͋܈(Jln* +n2 ERnnANDQowq4Qww]$pT4Mi Q?ny!i,¨`>(b64JtK3zj4+s8nExldý7[VǙ2VGo^dےQFfy xe)Բ}ℑf'J x&aVtY m-=Flkmzcn(2yEA7OOfqI!st,qEx1 mEX×<00>`۠I5Zx5&W@iUD'\-+8K R0ʖ2^Izɦ9d~e30f #9_9Ǿ/\4 cW#nd=j0{]QpG-$ s\.0qƤ 3%eHOV lZ)L\fa,g|;3M t(0cGAXGZC=XHyp- .QYԒ'kۻHd(McqI8 ,FLA9Nng.ۏ2qٙw ].lpxE=eӥdmI<]|fʵuc;t UGBQByĕhhf^0)cڧa*TH͐(H% ,πPPQBa9ԓ*LK%!,(YHVy yp&um"y,q(:P8e91UqU2G _YzY@U*¼W\gHpb9 f߳!nNJΰt{3_!G;H;}.ÀGa,E~+Ht `ok@.zˢ##Ae?Jy{30]Gׁ׹  #ONZw Gs4XyPv\̵7IH@ʬ%(#H!PyUxEm}[[,7 8[#eB)JFuUv 'Y>b$$cv#yuٗ-b1'h& >$5$жޗn7.\Y 9=ՊֱR?aA}HdԹ6_EO,/"C=Iߋ Oox+&UoXR"Pp15A׎eܩ;֡>WTcp;vnܪUQ k'v_q1"pUSNf5?> endstream endobj 720 0 obj << /Length 1984 /Filter /FlateDecode >> stream xڭkoF *C<^mCR`5RN&?rHɒd{x!9|Sr_?}kLj{JH]E$mW?|}m)R0!7JJl?\u|Ǐ1&^8VJ?\~xG6xws}}r`{snw?nGo$K}.fdcBD!sy߹fU*[՞uYSdwk TW3c3_ZYTJwb8.3z\$*"+>QF6xqMQ(e}}O#BQa*^_9~W+ܩjd!i`0&$xm'AG1}/{@s0Fި@x5 ^▨Vh |0,8p6#e`[ k5_Ȼ5^"ZrvƁH>beMNc]#gQף(v)#DqMK|Uvt*U"F]>~Bn^S ZEXʫCgJ0 %4Ew6;d}Ȫw9uY  rgȐ0ؼwIxՎ70*S3eţ)x,ʒ`l]}d:e|$Sd趿kݎ>) @@&тt@`qrwY&-[=Ӧ+"t`膪U^KI<=vd] S3R/Y?dńbIrB1IKAs-mM&<{ԝ$Mk;&Hglp0?c^W ) j$M@, o=jSd{# 4G ,>Q W7@v=h=xƚ}yB(8)To&K}bѓ"#CX#:ZJGs.}b@m_v#S-]ݰ4J) aN#c"OxZ̵ TQu7Xt @ endstream endobj 725 0 obj << /Length 1819 /Filter /FlateDecode >> stream xڭXYo6~Z&Yn J Pe]J{3J+9}599<<컫7gDp e" P:*0ebz:,hj [CĻo61 gDR0 PO2q3dՊ5J  Kt8AWߦ"b& ̘NS"80,KNJ9bj: QE<&զH>sA(<5ejhu5&/R%I:p~$k Ak܌8vaM{kŀL"Y[u9ϋdK☁*O[%f*fu+@fKAph4Ò{[!oßj!.b&-"ku<rQmf5F}/i.1,㢼/yYϕl^ڿ1 RXƃf'uT1%*^Ttu1盵HS״ )V//{Y^tnG7ygyN`{-Q !qՋ9 8JN=yshKb#J)WӡZ %H2}oG`˻ܥTJ/k/s>:%K/Fh~ |qX J# v!lRRfSPg ߂%t*qd,smt(3|<G9Ȕ7h0TYG(yibCg]QTzT m_C;.7n "bI!&kA87?%%GL!dF^V?*(J3dfӓ%3Umn8]݅BJTDl~Aٹ!.zx&*FR[KPnYU{"Ea#V[L [1Eo/E@4zc$]Z:8>8 HPSZUuS(BɬԠ@PN W k3O,%4 RJe)W :?i ʖޭ3ʃ6{jW<; tGNyk^Q@u]ޞ~ "\Gq Xs?v>gm)Lzɹ m e(eY*澋O*;#y endstream endobj 731 0 obj << /Length 1840 /Filter /FlateDecode >> stream xڭXKs6Wpz">8q'cOmM{HrHXbC ﻋhJt,Xs6?mu8=z)wVNNErϫA25!~x6Gcu 鞿'Usp,OY qA'd z0K6*U7`AŞ q5E`!63XOnhĭ :մ G>$Ty;ObA$r]00b"I6YS}%o2)8fQ힝ʸָdZAPrx4 oZT CArEpq*sԷd1hO L-*Nٵ$T5S8Fv `LPxxw"C[Ұع\5ŷ dW<HO ͈ecEWԕ,K/hѶũ?.͝&'

Bs %5٫oմa$[ۈ@WZY)]:tt 옔 G99*[yF4Uf`d*F3u<VX5C#>hbWj7l 8QBGU>x- Ѕ0qXB۔&,2q:8` 2e_ c4'xO\Q zd=>ڟTzXSMAtS ' k_5ă ' s\Xa{yR}t@/KZ ·1EQL Vt4$PI nx⊉SPcr+2ѡu^'"cR K!Tn=y>e>9%DĥhTفNаDiEZo̻$ ?|u6trgff/ QB@/ez3>\2ܓ|":(;׌q"l33LL H>?L6<;CWeB`;ۯ_1Y ;eİ2?Vc¼_oMm'pUk-$5M{xT P7sg>JU!br$o8"G مZ\*[*LSRV;' σi}Wi'n]fww3fIc;”4'?뽒 t ^F±_;R*:T5b[[SB,cH5b ̷K 6q{&b7yt5RG N^" QlLu7/!x]K~t!^>j߆ _=P 'BA B]v8Z(@Kn2w~I윦kcC[߆(٨XGg,^\^|?"#&+4b#t$o,7uX}xD~4ɠP<8"Sf`($[[T4iSĽY ,ޟq(V/B^$HQlxoҶ0aC(~<#}5P3ؿôrɗ6K>aAޔńtD:.?n} M`S2dC u:!$JbQmp6߾e籁5&'_QE}neO_W>MQ|*=qMϯRtӱ[+ȶb=HeF Hs --(g+w]8nQR4l_4v<7:7o "n7qKD&JD+ 'a;wR+Ÿ+5aE7(o5OG)v_l&z&e.J|M2905@zٔEm`lKuQzQvwk +ΣY^;8۴м^0IlAAMP褨i+se GR`,hݮ'2,? b yL)D^[jBljDJ2L|ۿtB/ f%(YifPD@V 3:ov²qu,'``(G6lx%Nksy's3&p`w+1N;˜oNv᫤=0^;-q藦uk8L£va`mйc8SHp#)lgNimq Oʙ|]'0WxY``! ͙` EPsB1)㯷>b mt5AmW=ws|̝neGblCm %j)h*3TˣԢnpA(oBCQ$fޮ{5n59NVk֎f/aD*#hGs+:s&MuFg(3<@IËj_[M7 րt+Gdq=]NֹbtMȩ_s8o6ޣuQ+ \ #0ɸ3{sGǥ6s0h7hY՘8OvR)։u}흪իcA 8S}#5INY8q&@snGbINn'z$ ?~i:THN(쓐ĿXwՅފ)J&OPN7}Bm-4ߛ,%rq.c#aVv),sbXT?v?-͉Yd lQi'+^ԚzDlĵ_%aŕLRƖKB W}W/w׾T񇲠dI\YdbQ~Ey||)y-G~ZKEᅡEEtDP#N26q^UMj-D}PH;l6:Ԫrs:+T"^&C/JI @^Y=N9wx#@w*Fs::+ A5?B+O7Apb`, 1ܟpm=Tq[ 4W=t^u\A6&{ǟ| ׎RCAA@=L]ޛx⮜"vՂ>By~Lwfw_ _*ޕu|1e3 }EJA?*bY<$F\Hs '!pH2|mΗsRgYR`q>Bm^-ԏHم3+m$N1>Sl0tCySBIy5y ~+SqoXHrb̌5cj\?bT}3vK(@s_"EDa%x F׫w1;ܵb'CCAX'P#gy+ℯ޻S="`?,*o=ŏ>U`58$hWi

_L ^SuFzMh)#BSRFRX|Xբ޽G4(2S(xj_UTYF='z!JV  Whe+mjUZFJ=?$]2ihdާt􂣘kM2y0re I#!lgfW )s FQA[h?vfR|6g1fM7KX6-=22i #&jT(gH.B9&dzE1jy=ăN`e E]Ic?6'l~af{\?!hG{+[IHб3\>[+ l ={,yU](=WFJJi7g` AZUGGd=}M]O]Bk&HKaD j䐐xX;D^F لШ+(HFf3ww kh(D,"T7~@yXa,oh)SG5W౷oσ&zw 9N!Bp={.wSu50/]O<1kǶIm0bP)Ț7.$aEOҤ0KYM5cQkz#9GơPT>E(<)q_a-NcşF?̮hsw:xS7dMܟ n2D>r1v`o>"^a '?Ay؋aaǝh@w]썸e/cpa9qwϩp~“I|SmAӦ45x:g.F)9}2|"ϙ ,E'FJ<ףp7pAQ=czt"A?VLBL5TjW94 hL+,D7gCujsc_ij7k>ljۃ˵;m15gJ޻>0J.#~_z#XNX8J3uݼ+mYߑ`*g`.QJAWd<ny9[2QU-x̝{-))塙INWts,6?{>–ZnT ǞQd(lCgˠ%qj3 iLDNTJn1Җ]3RxB˷GU,.&X`AVOgBiqk たaauu܄Yt}+^_[46ͥj%iVK5Vl3X+pEQ@ $zBC𥳐oFz 4K+:R@N\HO/O'cpءԿNB &aRޗJ[Yn]4q}<ۚ Q}5a}&%MF$Şbx-+oNE i*[p=Bx֋Ş\ 93}r|Q2䭾nr/>`{겈SX?auR+9<ᶳ>Fܞ?B4 5}5P0zN]nCE-16B5 ߨj;$ؚ-A׭`Wc_aE3bݪN27V #XRHSHHkE‰@ -jX#C6-G6h oH鵉/b+=q})aFJa/!E?+v駰\ EAB{߫&]* ;$x"π]7+t̩sf‡^CB~sD0z;]-Sb\4\o*nϵ3ЁB n{"?#F4#9YI()@;Stbk'g =KFIu:xdJ==d$v[D:#1JJgv{ԶoAfןb/վaSPdoʻ+?Oc11FPѕP)9S@GR&X>\aސffmKЈۼvVǮȬ"BTr%TRU=zk-5|UM6]zg>4=qU /,MDxH㍋ 5V/$uj7&, `ʕk /aŰϪ)fedJf͹F5@ܣ{EdI[zXED>CVX Ng:d)lyCm NŸz#*";)}=C&P9BI:<Hā;K{+b^>TuOcϲ^dPRĔ4][ʆ3%e!!"o*,8s0>\Cc=Ӯy@r Xmn.x$V/z(}K(, ~iwaԚZcV2}R 2"}HI/tU μ ewQ:6<|Vօω3ق=CKTvV襬Z}hf4mN잋ExK4AMA=ZeB&:{ ",&"m|EAdwdt+RJ\2bB2.'&>"G+_/z_Lj6,-U$!L) >ogjdF@gPW>:56A,l1Ջ8pN|#`kQOarky8^%wSrWbzq{T ;3iF3i!/7_A_K-v n k/Ű锸)Iv{|:,;EsokF5{IT[qVx;GǢ!EdNj=Ds/ Tl5FΖNW;vedP=X7Z 5ᛐOgg5,,uܦq*b_^=u$~-~HtߛYaM&Q%,h./5lٷb `I_-ty7IJ_,h5c^lhinuq hXp%"?xR)12Y+M 'tLdq } !#͓ 7P斢g! :jpXPZc.S= 1";c|V0+ꡄ~i2TuHe騹0d2(Td?$~;{\JΖ~>ma0y(SߕE&HGd9 7ȾMIXY<ۯBJIk cǻ+AMUu{+wSn\fAODpҶrtb4})@j5NAY=--~`$@y\B‚ 81"Dǩ98+uaq fIc++A/{& Ou ~:(D 0ZIp@wV1ZCWTCT9C7)ʕ9MK%rO^k L^"}(f7+d&& Q=pY'r٠ =a{.<#Bz'xf6:V0 P5S4k79*ac9 EcgWU mZ-YW%^Frr2)%u0fb B+~A5\7y/V\;W(nΎɩd`:Qfa{B -wHr6V dINU5aM-ǎV@ilS y֒qCtc~+p@S6s N6^(2}Z-JU%;x|*Qm/#0яc7Rf] &ڨf{%ZG=4Νp=4|K.(׽Q :(FtvP_쳃ؙϐ=h°7. {|ڮ_g@ '3,7qݦSe$:/7+ /q ݝ0ԕXJ 6R~,%͉xǕx6 * 0U"+s+>BgxaS7?,ij5{^ӬwR?-aԚ:{6 ;عV|s/WIi}Z^Zxab u 8͕@qtǨSK(Zڿ {u @cc!9t(d`=h 2DXr"Vܾڣɍ{r^VY0EC"g AIDxWţ}딚d_i UQghQԳӮCÕM6Ҵrئ`Lg-MJE(ll:´%Ofg endstream endobj 926 0 obj << /Length1 1386 /Length2 5966 /Length3 0 /Length 6906 /Filter /FlateDecode >> stream xڍWPk:@zA^w@%$&MPHGҋ4E(JGiJrc9;sd&gwgwo&&PL z&&XDLLmA04B7*lj,B:^n8$Dq<'g,_#? .''#+Pv$:q!n +3!/*#qLjNJB 007 $ CaSg@0gpC8\ C .`CzOD`#C 8 h`}B aPx7q~h(?0h#A(3 H*b@?阮@qm=YW$G $^fHL[gcsa)111Y1q |E7r2x<8,~@7 `AH\" gqG#|k1b???ƭtkڦz*SQAR .&-HANw"jA?p y|$> 0շs}+Y ixr7[e/,Nz(8  rO626"0_utCM 0/@X\L?|89^(ܬ~`8=:)< )iFC@NR@8NPDE(,. (4D%Q6п:z8<__|a(Gڈef?KꍖL> pֽ9bbJ7*v"Y`pצ3'CV>OwAe[`{ brz#~oz+55oILxzifxOőƌSkBc ;heCO26{sJ?Pie<[yٛVxtˌ:yCI}trt0x<*Re1DƷ̀q6;˳##Z9KSgw(kPwXrH8֮*ᨰs1tT5_am)~PĈWvӸ6C/W]Gi|A5N욍HJ䕐` 5_L+$رpj:>wqHȌcƲĀe"_|6Iˆ)Pӥ i^}497)K}?V|³gut3DZy'_YL9%o?CX7o~0hUʲZ-]#t{B"Уₘ[H^Ά$ S4WgAd}jA.~lGԧycX'Iǫ4ZR묉Bn %m4Vh"/ɺQYȾb!Ę\i,*U*_*] mܖJ_L+ywTTg2wxWj@tɣ>gy52Ke|;BNM 'FdԼeQnti%:%[e'UL;܏e/?V|Μ(ɂr4Hc^TVt"⓭W,U4Cvebs,m(.7UlDM70f=4֫bzfX~*jj$n}f֬|/cPS ҅A\Ʋ[ ]ޙ>x7%Z>3|U#w{Bb?f%yӆػ^'~-0LGF=)ZΤ|k*r'oQ2?oѕHL% E5eT8HWк!E/?*CGM%;_􌓥ֵOyx(})׽0|2?Fozv|2geIڴlY56vp:TjGm =ZpJR, .f>_-tV\ooL6:{\=0.͉uO4Cn>Yxi/|`hx'e$z[WEBͶaKFp%(Db:B!kUN٣/ M#fTI}<3D)V^T&Ѭ<,!Vڅ(_֟zÄ* 7ֺ:lYKqړgKb)/6bY=:•ݣ3{a7tغ:j&vtHs,',;Z;[$EWAK$W5Fs'ZzmiY3wYFl%]"yofS0%-i3K9ͺVTU (FL=QݖCq5j%˧srubE%m@njT(E8U2n Vfʓ\I?Q"z2}e5{Y$/QH`D*;ИS_0cWTwW G'A,v)$`.TX|G7r{_P+sAdJſZ,\f)gwvW?~sZ|˪/3P1ȼs{C$i~ա6J=%K ^rM`!etƜ!OBEYq`t90=owg"6h9c*L < OE٥xÙRJ6p-$"Yy,㬃|s&&ZZO-' uKg;cjYi. 8N@(},dP҇sqesug'J_l<5\'C~2xF5S\USWRyF@˴~$|0cOUA>n 0C7zTR q̆Bc׺Tzݨ1ijϋ['JB*}շ<߮[A4XswGLBlK>jX}#?+$}b{Ըv'C92TJ%et6A+,X^U-݂$(,*ʉ_3)xBw']M[$ǡ;MjK/ W ͝p^͂ꕖǛv q#0ʚnd-JgAȿqwn`;hw1|'Z?1W|7,vpb{ݴ/ɵTMLv\" tkFEѥ[Ze[r|̦$ͭE^ݰEc?vmRP)6ŦO9d7sY\WkzBǻ'HT<1jք0v)ۋ n=:U % ҡg@%"?L)Ӷ5·=~|t{Dbޢ ='PbgX7B"8-&FҴ:WCO!_ qioSLS<}i_0w6e.q٘b6{50Q =Ք3=u)qR<֛3ȕXm֌mL^K 㜊h]0u(Թմ@?B+ngs?*rLv5ț'kzG)p h"z:QA.nS67ƒRdqUN2 E#MX>7Io?_[awP(`lXeHeEySnhfHzW^w*- ~QDh}Z4C&M2>%J˘ Dܳ/`N4 lfI33jF2K X>k|!tnH6c|$ḁ/,1t|b]N@I5}k],i[֮tö_ެn)Й3^I{pc7o*uF7Eݮ6o뙪:ՖRfx݅j_o<.kdn맒UyW_?/p;zP]y}_+jMgxv]sE0ZoHRN6TkJ/<??%]Dfn_ 7+Wdɗ1MhsIFztlmȍYL+֎MذNjE.rYy+m{ZKFJ0oq媳Mh&tc6C]_RV&tӝ#U~w=`EzmkfQ_ڡe\g9u޻مU 3.N5z ZdYBj.xv/F$srDƌ&B8uF˥ >(##ΛD^"j4X7spYs}< cEV2>jKϧ"x'=ūZ+[l͋W3[72l:aEzY OHbq#Y]en2 v:mL+`Lts% k}? 9I( +:޽Ae']m \BSHP?6cahk%`VrKoip1G5bZ nQ%e;ٯR^1H6xUYlJKXE#IL28e*eQgNh||0c7M7]yy"'0iS}LCW/?=n`sr~~3]v7%.!w (Fc_Pt޶=)z(eiE$4B᫆kG3m#-FL(NrspNi*rRRz|̗L3 WٴU.I+WS AU`i͞Okx32dE[/7Dl=b!}ᎯUY9MS˵\dq>ƞy^ff_)LU;k_w)!^ޝ頜X)-0D;@p,l.ԕjz?xYr TjLA ) ϜƾZZM7(UqF=njjZ^Y"@-ٙc Gf"J PNW-e9Qp"\&ٶ;) EW#F{5V^I<໿-HsZ;-Q;ɄST{`:* y^m2=WnseOdTr%TWq@Rh+ʾ$Cf )[ Fņ[iCSf6ڣۅ#r"H%)[jlSqBw[/*wN̕`oz7.$#WUJ$aVݒm _;x]TX{,NMGd?/L080k|Ek.nٚT"v_b0l[Wu#3I X9@\bgծܻ `acr$6ЌwK6Uz?XXʈsu\Q& k8oizӌs̋,`ZǃL./*]8zϓP$|ꫜ!}?ˊ7<#jϭ,}Yzż׃o4oQn\UBF_9kOqn^|gӾoxZis !o괈(_jk&ĺ`׿a3AwK$dyh!8"Hl'5k'|WlijOLa.̎[JcpD'.`$iaQyoBB7 endstream endobj 928 0 obj << /Length1 1539 /Length2 7022 /Length3 0 /Length 8029 /Filter /FlateDecode >> stream xڍX6N CA`4ltI7H1`cHHI HHIHHw#݂Ҽozk׵}sss?96.6}#AE=L @ @@e##M0 @"..c8 e CyQQ0cS1L$`Ii(IED*PGD\H)# KII *Pp(ԁaP I#F{H Aܽ('y^/ 4yP>0/@];/mB.3 A Cxab0ShyCAAB+;"= 8 w @C| p7={@/( )+ fUHww>8 l_@"p/!&7LSOCA L: *a2cTz =! # h7,(ߎ" tC@{'; scZZ0~~4) kYio((%  II0迉ނC._5H*0?.0 ?#p$bσ;e.I7OqI473 :H̘ jcu`poj!AQD8a],9P?z鯳p#`H/3|PW9.f[TE:Bq 0 A@0fZ`~[(,@1!@ #u`L ~"@a;@a ǿP/( %@L?(݆ ƑPʈ'LOE lö_^dMkMl\uNVg"]g%o!Rpp0"{]6{DMRGݦ{Lw u]ƫ?s.?ɮ-t H}Kk56L'|u3M*uKE[ٗ9>ۙTw:&՟^7>_/B(L4[Zevw<,3'6p%21y}1Tc!PjGs}(;SNGovmPӵxTL9B;wQ_{Z~W 'f˭w8MM#lxn=dݴföy]YG%t:݇DtxQꋞW׋y5ٗsHrCkky^51cB (Zg|H˝ƼEq'yEdZwB`37NY):n #a?$u4|z׿bZՐ/M\},WXcOeU ݱUd#~&lu񟒱٘Ibܗ[V?xʃr(K6.m [=-*k2"e8x)d>lS -Zn3 Q"^/&%wqP>]`Es! [DUNT+ v8)];"._?NTF)@*3 2W&fq.-&~syGy>탈*s:Pd.&o/yI##)Xi c ߗ\S. +GɣX9DSI]jǯ[0X`jz:"ڌv ޽TEҴz*4âT𘞗n2u , ;<¿A"8EULz[5>ᅝ*Q8/a۷T9/V}m^UEIV#rԔ2H$J=5ӓUs6и!mtP P,|D 띌L#H-ڑ [OC;t"I}jB nr$.Ul1z-S'pÕ+1$х& U&}D,Cb%ަޏ23>~EK8՗."A?{ԝ܍udgO&_P{E.`<) :H}@:usv˧D@7Ib|M:NhBYاR膳{#!6T_>㊂FEGL+ġ˿dt]dnsh-#bmgǁ w7 -fw=e|2+xEpL08n|P1& ihd]^ӄ"$#4 \QI V~|POI^7z\5Lǿ8ȲA]⁚ ##jGcNMVXJ{n;z2<@vJF RqÍ"$B*&j=e ?3\z l7?gȺ~'Zl7څ$JHo LwnYHc{㰐cqPiܘOlKl @[9_kUkߴؽ_"Bu_E%8PWq3^ ;Ju$Ni2wr/c뭴M^0vZ* :*N_l4`h>f DZl oώmHI}Y5ņNDҵm"L3).CʍDRS?gGMTjdށ׾q|}ɤP:NPj\ ᱾~!s+l %<#o|oZn<͑jq06 X kͽSY#;&`X˱#zMd#5=xZ[-s`VZOt)7LÇ D_|Tu){K뻧pT]yb[kH ?uyP8lB4]61Sdc/`KEЅ>aP S\'JEKxuMڋ`hnY [53mM`7vaHJ,}̑©|Į[;U]-|K}TYN;uYWI/VS.MnERY(ՂԴ1VEj*|wXfzccbz 4D:֭E륂|3QQ8r-+y!6n~K "24.ӂ)| #t3xY` N&nNG|Wujt@R?gm[VgiO ,:[\}7?Q=G fbk(=jiUɛ~Vۻ23 cIѬj?xSX.j+(eS VFrxm*\{.,vGwo}W0qYο_,κx>}8 ū~T[Z&NH ϙXp=1q*$K>\RbʯEǘ˶To=B) {3X;nz݋=ZK ![j=WbʾD.Vn3YAg*aag`.Kc?0j|nɨãЏO`Nhb(u=ᇦ8҂k RDIEkzU~%!((W#"k.&;,]cݞx}|Gl|mqZJYZXԲiw_|[~E tRQ9+Hٓ΅5rӍe VvDGc*# p#k)艤"/pϚ{&{"5Q%I|!ZW&pwX)8:BU8ld8BX jIwVx/yWHVMSQI&V֗; {"@N޳y9t jC\_HB4;Z;_DɩL=QD ݛaᛚ(<}42/qV"lk-\8ȥ6Zdr: ]$Ik ]K5xRƼ y@Q+'YnU}R 9RO{OevX(kvvg\o};]2T[l }h&EF ԗ%RuݞxzM$@Y/A G~$). ~dz,|*?说nNd*'|ۈ]TIoʈ^2^gWW\vl|HT]^;rl˘Y䐿pX2޴x=%yUy \Mfw'ĮqU CR9H-WjBFYW,:ٟs9L!{gڇCސ*|-DGT %Ԏ7Z_ݤn6ݱĶet(Y<֝+kr9=xcu(3O=ٝT"ੀ)@{껥 ȫ:ʿ+_'2]wF2XƗ3d&$?78~nFrng'6 0e"l cAՒR:+tg2vKQ!ʙȢ] f~b4~F^-~<'ӴD%G:ӄzFt]ߡy["2рWONG.8%/cA7kWS[+ɫ3t4Kt4V==҉oddmikܜo1TNY vӸY[ ԆyҒ5ױ6;o>'z7_IY|X7(7t:7S*kx),8q̇ؠV';ɮQʹV N_Vw<{yw8'`GDv974%,+YM :ൢQ Er yU8[(q1T;3V3}Ũ tCaoEoas"p /Tꠟ8@nR@E%@W Jj1O]9 ߄"Ve<#iM ǗPR,hGIpSVhg t9s5i'ZnkMĪ*^luo y#G̻_2 m-8';JWhl,"ϭ *w(, 6$ <|&4\dGh'F6/?iQ"5&{gwȼfaqHzK rzM{v֭.@}o;U&/_g&P O)l#r] j8(֔cU,=qY3mQ x}4 ɱ9h7=]5cBrb~#<U];7iScC,e '몲Q6.!mǣb{ -}<|6xi̩AM"2kۇFuנ>B$ 8(oj\y0ac$O@¸XiP9y LpgPWmB[\"O0s#s1a > stream xڍT6Ht7H41`06E:E)AJJ:[I I)%D:T<9>u_Y u[BB"BB&P nAzApi ! SЊ8@@ i!!_4@u p>  uvAsRR|J$ tA(;:"#P?.d]P(iAA___,\F/ErIM`C`pBAAZPP?9`;0@_)`^= +@h#(//(G_niV; !pB0: ur~p4C=!Z!0g &$%..@<?&0CP :A^ [>pQ3w4 q㌮?B p?K,h`@O ~@~a)$$Awb5Aݿ񨉣juf]v 9 SF9Xm2Rs f"&&71XHG*L1X)>',*"-Uڵ߱mx:.%z(DhNWeC\k`;GֹNO~>ypkTc }5frò)CݞM?͆gXCEV~XS~f 닿WBt?ٴyIۂc!\rLZ`0=R`nvxJxNnUKB35H7IK1M Axq3Qڳ⽌)ӟa7TI1\sƂxa*6O\x >Nӈp^1lݝ=溠sg)u6بM{:hINS^ܤfDzmz 5r>u3RB>u4/;ڷoA RI?JzITU:fKׄ*Cf|Zsv1<ˮ^_+fޘI=ac:WmOK4hǗ3@5MFF ua`Y^;I^5> 7kjLS]ǥ"l*4TXB|Y֦2\ddKSMj9rVlt4= [&p-O$9t xa A1Yu_CIcw7\O` ԾmEYtGpp9OjPƥĎ X\ᑽnz,~UKrԃlqzVxDSj= #~x =1nLp*"Ô>d sz5~x=;YgVꌑj5yR5oR壷ɪ!DPKcWN|f zrFi%L"LljE2nOk gp.'66@pq>`~eÖX[LW<,4( DWԽ[kVZռʷ0 -`4σ@;1|>F0]h%JO{؄C+z]dd'}o\M24|yBY22Dtt05TvۆIR`/QkR_zv gT|?rlZq>µtO5U ^`#,C"piqE2(xA+ϣ&vcQ!iZJa!nYS!\\dL1 _q}a(0(>sUTĹ.WÅ5^10{6%nDLhn3/+Ai vgr1\ڇdjuoK>H)Qn!m'pj]so<3:aB#Jve l=Q)ٹFg;\Y#gɈG;u&H{2?]&98޲U^YJ{ɾXhf9X20 #w1 ӸmOРɇr73b zpzeJ0= ZHguP {+еBXTe0L"4AAZu9`-ARza4QJk+/ $>qW]M ;V )Y5Rf2;}v(VJ*FPE/vyTW 匯YJd+,M61E&_8|Sy7cܗ+~֎͐,,JZ|cӮ`s \1ѻ#ϚJ:g<f&Tub3Q.#k$ʥ8?83ܡأǡ?d۫!ٞ/}& i%a*b׉Yb:g^F v<f_76dsyyս9[pB'\<_ww+@]`,BNb5׺ T}W[.l C:)wՒ)zӮd QlСlDw)N?IT)yq܃fXb%#aRVIIg$ir|M@P5+UN#N+O[c,t۱ B;-wiK^j=j{$%,LقB^~-NjV: O _`{-GA9l6[aQQMb#RNF=0ΣCU#r%{A[pU'#Gz1R48WUZ=p3I kZ~d5mo h:WYhoUkbD:VsaEUYL/ XtFx+'-:! B\gxPGz2nRoɸ,aOSn~QӔbLiXml 0Ȥ%cS/:lFq?`]]-{_9l,_Cg^U3֐vL ޡ UҤӝ;Si/CoًՀ3ڜW+lAFwpp?[ 9N"/I}VNu>=֝ZQMxR{l] sb$I: v2ss-\&/g6“&^%տ A媣xBTnw>%@+!ka}ũ'OrbpHPĘg2:΢O&04ysnX0NM>NK;M0YUTFH~wAp*BuhbBn'kki/m2[2{)(8'3,FzX`:\V[IZTYQ"+,LYPo InإyDl-!y<Ú8Gs9Ϸ qt}6\Q%k£^ͨM!H$w"OYuR#d]} mV b&> ~ᒞ$*EF[f28Gc}-.$&W6|<7 \n[5*;%(#WRJjmӁGū@0(V:5o1;RߔVF=K16 [}Зu{ísؼ3>c1U61eiYOfDH 2M8S)x$jq2%l[^F?"i}JYHC3 "A~kBB]A3j@,z\Ś9E9Eh߼Se[]$W૷+e[6XUcYfݘy-%T%*w=rڛV ]hǞl#9=yTKZ%MJ嶠o w ܊!l 2M?-8IjK󹳘1Ry) kĺZ2X}>?/?VXgpl qM\,WD| -(^8t|e3){&nZKUImSSYpvx-&[b%;Y> ·|~l4/_pwu*+,y 6-Hiמ/R10Q|a̺M/}7-+?~У)3L;Wv(p%b+E8Hw὾m kz9CJO"?P~{:?I?F0Qiw=߻;x1}xIWWm9Y,ót-ikY۱R7]&EnǛ$K!u("6/ΩԶq f“rrn PmBI:yfA`V.yW&Dy~ O\*,8.vv$ȞYdԟ];Si-ǥ f+\eڀU0P WbB~AF)ƴ߳+B6+K4CCO1lE9: 1֙%,|!8LkytrG1Zx9qi[bs9)0gs*m_X”>㳱V}xH¤m胧Igv{ "_qœ_tǖ/hz/qt/tx:g,&PK51*brEh1T= dX$ a$WYs[m<^?ĥJu SPY(r/ffzS&=9ŵBS WmoK(Cbe!OESIH+۝ё4oQw3YC6V,hQ6p ֭? 61r+htHk!ˮrmUE oxq3-BV~ʢSR=U9LɃҺz#6|juG*>  }2$V5(B]:hQzP![Hv}ƌSO1| Hӷ"zHl8ޗ~$t٬|YB,({ fos=LvKA Rdz7>Sgtp"~ИOIeP5^bKu}^%$y\D5xzIv-GNR=kkjs7m+n4[2vI 3!tςk[%-z'|'wIł261j J7 "WFD*/=cU t$d+&y2)&7;py*@SMHLF~~UM s&0JP ǥQc 7=<0?2`m>,)T*-ż6lN6EΏM  oFHVgX9Õ2:Ɇz}^^C*O{vgGXO-"HMsu_~Od-O3NS_JM}tnYkXSAuAplPe&h=&7ÚsC?uVʚAF/BlE7Cg!X۹|NОہd <]TkR<.GF5v=vk̑_YnF='5HAϟν:Ȳ!ի7wL3b)& LYEtwQ_igx+֡ 1"q$kd>Dn8ę2\:assqJVМ%kfZg缱,6[jo;6>HܛS*6,!7vK˜PP dLa],%Ehsɴqm}|R}I\خwJ]vrn qc%Uw |@{TtJ`;dhoXk ?Hi±*oMh"-$;;4^3=I ~nG0U57#\-}E3, `!/Z_H((9Ufݯ~)a;۬{?e7wV>o-Smar6uS/J|>V 5ݪ,a'.KOnkh5kMTPź0[![gޝ3.kv63o9:T"oRf*y3^5y@UrAbXBPy^9@):7 VbNG9A^4W+^kg~srNtz$56ȓA2W̮ra'+}(fd~w;aDc\̎bgī>zI"g5[{'v@>i$k"?d¼~9w̭]R%QM,mS8;޿_Ĺ]^$kuwcs"#) y G MV\sq^#- zȌtkv&F ϙNтGyd !mVߔXyuuִħ5 Xf=cI@Z7O"pGy ԎBglOWw`}7^<.VfV iygL&Zxfe;qіl5J5{ 6齄7WFm&@H36I;iEhUT1e5IXܲ[@rˁ=` ?oP}Ib v8'|\6P#@:],)ּ}~ª).t֥rV@b"@ӖF[)X/\HHIv?ou# =`ܕp'$.pHrBduցșIV^d9C͡Yݱ 6>/V7lZPnLUhXj'ph2f;9!d[ye endstream endobj 932 0 obj << /Length1 1477 /Length2 6737 /Length3 0 /Length 7741 /Filter /FlateDecode >> stream xڍuTk.R"-%CHww#- C)ݥt HH" ! H7{9kfyD%g LӞ) fq:a֙Ի"Ǖ7pvi yh I\!MС%|fmʒd4u*%^VxՆ\7:_ߧOF=mŒ6g`lv?aj0z =o<\1>7M`?_Z2K>w0,![,/tP@YƼ5kD(o?M8|[ڴmfBj@bFP\bJ^|{Bu'-S@ gDRy'8LYݍ1Em-}I# @"\w#@g{i َ~(.y~[,B!X^n;{U!|d8@㠤>"]@ޞ֐1 M2\Ϩ_;ρ)eAzJ-|D?abHlS{6Xy:g9jeIx~y9%!eBîґ[vCBn%@N0|eW߹~!d8'LAޒ[\LچOrxs%q_Kdav#]/}Ųh5iO!!03vi+SٜI ~H>wd5uS|KS|Dh~كQAy d!f$k DBp5bɮE"e&typ?ij>k:)}jz#-[7ӣn|-L=wGmY:3}3L'>!핚} \$Z'E;?` n&8k]M-4ț֖$姰22VQ//K9_F̌QXkq r+E8~"?ʧxM `k* \Ry3ފ熎Ї1(%H2X03fHf1!_29僕h&ե4@ꪽN{q_o= 1fN| V d9ֹ^̬eŋcǫ.P5Pn<,|6n&/BĻ^M׬ujx@3@^2n(wř1v<$:5bu[M!3c!MԾ39*9U<˜rpUFDj!iܘŏ O?<1q U]N}$ -9(5z͈N\"&c/j?*:`]VkbMH)5Z$Hr6I|RN ևуׄy.:"g`C<﷉k>KCw j?fpMŋtSy0|Cu,C,<ʮ5P7b]DG8g͸Z<$̺eKXal5ؤ,KJlZܔ4y겇 ҙez6\XH0kRg^~6;=ALX򴗫U9ˋ]OlN(3iO4ҌX' ?da`O$Wa~i;: ;XzMveE8"~ŗama2Mƪ2^c]t޵žXanlW6/N\@~mQ+LqQjk.aYu{ߧi77CSt^(MEa]{J_ QiO,<6&5ccU!'2dk [j5H>q=~l_f 3 7RUcm4h[|HkoûT+5$N`4S:JܹT0( n[0T0w+zG8M]1ZzX }_+@ʞrR.OrE#dY̖h MÞ:9Tz-]i]V7v+ۓC.QMw7/Nv(I(GC'5Qlf{ xqEIGrwBJlQ [Ӗ{$U&daM|pU۪V׈oEGL;OnHO]!JE#u-G;fV}-{83O!w]ʑe$Y}kDvi#c$&3|m ;v"Q8}*I>‡CJgp}Ft|MM*ԗS'Yuωzeަ׿tck^82-Y2aHģ;*BerOSVQt,fԚ?@YG@˼ę!1QAw# ]B].,u/A$K]=cT6ΣB͐FħqfºkRQc'>уhmIsLe7+ؖ|,3` zss= !Э0GZJ'+aGprpĠt۽8d.mDΆo hHwb) BtT=d~*'xÔ_s @90<@I^Ӛtd63 |b-*f 8}wWcyjmU"sc0;"G﹈;ܜn0@Gv7+$G^Qʯ״4/hv'RE^~L@N ZUv;q+mѯ'I}H nޏ;ϕ6c~d< 8OoE8S\F >OT8n]=UaWL[.>-Lňgg}?[¨rtmʰ8@P8J",Sdn?J5oc%;0<ܪ> bPbzJ]IU,R|;}?Mt6h=G,1VEFu?B`?UX{C7: u$yF2"#xҍB(0*s)=T[B@A&OU7H[UlsDܿ ?),f[2zW]UUy[+ѓ;_P0uM7+ëGƞ5^dVr- Ÿwe2k_w\ i-w-7]R:I#vw'=()vO}yCg侓3j蹍O,Z +e#ITW]7׉` `(`r(|anZ'7;k~ n.dgzLCIxxmț嵟&u*Yyo{rzݵۯk0oƭc|̣}ց&F;1Q$m Br]NP۔NB0OO|"S= +Wto4k'<W 2"t-ߋǓ0 ʺbT&fc`I8REbz;4WU婶RU1\C #X4}_JXېdJPGhϾZ}ɍ[U8g4~Q+k+x@ˀEL6W|_@F>G́RZԖ8. p&3%bMjɔxwHyУʖ{p/*2ʹMFslRI ~$r/ >p^ho֦bDelA uf!{(ڞⵍ%YJdži˛Mb_8&wSz;˲IZ4wRa;phLM!]$Y'Z]:(Y0@8-r -e\DV\dmBnSfuPiNs|YSZvf"ۃ<|D?;XԚS4rih9rMh]^ꮾ^\ǽ$?g܋E˷CZا@(f7d h8uiKͬxvfKRw9,)q*ac'|)]J {>Et=)ZڅFN&)ִ+` 5U > stream xڌP^҆Npݝ[p ڒ{)`>=zt;F)RZEi8Jt::F::8%S p$*@;{Sk+x>lBzV G =#@GGk;!@ am#q356qG9~K@Zh@hm` tpd\&64z4vڏ@>:WL+*)Jo]vS32 L֏rzŭqz ؐ7G?d_!{+kߊD-,^'Ϻ=>c6?&5@CSG*1#V}NMDC/ P_aaj7󱋎}ǻ^~L26kYzvvzpAwY5Z+k-#k;.@_CZ?CZ+VhEV1hV}dC٥Gv?]]}SCG>?O}S/Ȯ>? ->.?&,uQǿzÇ?nd M_@w?}\ qðGBʭ)de4V9l>^8Ə3ퟖvr| ?[GG$7ݿR@8}hw1?@ ׂgYm@C5?3 &ā]a,}y?AkƼ%Mc&s5L:s p_F;TSOR {]]u 1ϛof?S^8"m09xB6,?RvSo4O1y{` t+F&'堇[Rw 0K#9=L~L+gԕnq&x2f &,oڜ]Bŭa q-L@VO̜M-MGkSv_6 2VɊ6[YtQoE'!D |?꧒2y6&n5L+zޖT6 &lً#'Mq7DV|N 49!%o9תʘ)ms*ZRIk2meR4gT?>x;Ò)-ƒ,XghsLx6P< _}"G"6#yE\<3`hҭØ0.MD@VW[Zd_d/š Za֠ H s}OneTۛj 3>nYi[Wط800OI]0 eOPm8iֹ BWχzx>;iiA0ʣ~X鯾$"U21~j' h K5%E;fbL)6XGЪB3&gF)=Ь3A`'A `55qN3}_Z+h^mE ?ܴ!uJ7wdl[7?uQ^ ޹qT/(p]`$17gJ5r8Za tqGatk^cYԟ쥱}nDzr?v;M8La3~Bp58;K`\-@wpPqT"Ȇ\@>-.c 5&gg }Ҩgi^Q( h!<i:gSMtp`vcu]* FOxcO0 ^; ѡq]A0(|\} Xh~\ps#h;  1縲Y!я>. QBw ONhiU1p_c!q)!%uȸҡdyG2G<$~+zr 6@PoZ#gj 56;š✱HQڷe3_C51Q< omDT=jn`-gE)O?ӹ dYuPl&p|<΀mVoQLw^sSd&/Q o0絛#/__d#Iqz<51d̍bv:' SS 0c3*k-;VamD$N5tZ#(#½N:@u 14?g\#S ֌vʁSYiŧy~nK%S:{} LcdՋ8#C}Fml(^>a.O[a]*{SR݁m[^qL5YIe[ ߆tVrΥ& !Jq^ֳ+kV]C=_@D=݈{'ck҄e޿jBA#?)6&C*~ʹ.<{_Ei:_)᳢reZ/wIo|/ & e ܏V[3Vpm`9JdUHLUS擫r$W"rwfsQntSP,V #US}M_:m9d(uqu@rӲ)o*J *J]XհX#GF UVu ̻`gvVsB[T&L!ߌs*=hrb {2K5k iѳ־گJ~ZWSR/atw+˱˔ghU|> UjJᯖVJq̺D BU#,灳&K~vR+r \j&ae!>ea[i@MqtFѬl!CLXZq]"fyyjdoe%/#fC9[x(BQ=Ê< BJtڵׇUa7PXf`պi(5O74څn}V]hC1'Z / kǝSB@B̒J+l|mI >- ?dHUL.T"?>bF " KߦqV/ y~aD̥eX''F+^3+IZϠP_M~Očm> 0f"eٯN9!nc2 aE_%M]`TeBƯ\pqB:n=J tf\P `@[5Լ2r95~(lf7gnF2^:9#Ewi4zIdKB?oapҡK\6OK_G'Ъ;ufӰ{3_=:s@ =R<@u z+C,8:Kjl`j+鱌4I 9'޷\E{d7HA߲)}N@cɪl, ߥMp,EmԲvu8۰w>:vVj%ggdw~I3*u}MoZtul粉f) ԉ|OlA qZo٨)(G6-(/mna_Nwzs|f8S\Yȝ0Nq@7Q#]寥-L(r@uu+z=QG_;Rj7HLZNm#!HLEEXȕӅT$H"xt>;A$)f؛m+Wr{1zFe<'n74E]3u4q6uDfNzTXx}6Tad>>xhrB?j>WGKx(75#-$;ea;Udl@S b- HI?f 1.TJN ]=Lv{]gqFW&vqLBȜL ~' a\g=sZ/n \פkw3Տ8*u{'8 "J ߮eN|E#K=#_mJAGư\R'sՓjpk5ۖÅorS7Zb|2GlڋX55so[)pW+X${{S QpoG2{UQi6s`ǰ80RL{'kUc%m>n[3b0:US[s'gdkRU?5-GDƻgFՅw_ ĭAeUY!᳼8'F 'ܨھwcpngIKdX[<:C*0ATmKj Ev^רeo_RdK{thCDs`vj2 障08`H60]# .tyXFt(*GR6yn|Z?n.e|Y;F#u\&/r*{fm<{.3&]31`l,~mQA<5h]O|kڳDŽTc*AHak/+OC;]aorU~!Ѯ$\kU&.3.7qĠ=mQ0(h5^ϘSa Aơ.(tE yڇd{\sll@_{beqdd(]π'M,Odm'k1%F)~631\|G|Ds[.}!7(YqP҃@r""VBHϠ0&q9ܙ{ʆ=w.S-rb^OњX6\Ej$b1Y&S:wWzRh}JW_\JC>l5 TmoH+m%4NUzj ҬUPFw7sPw-WBh iOn!a DkJ.?yO_ʼ){Rmlji{٣7~:%(|PM*t`Ap''*K _Rv4Lgp攔@df~rsK4lr<%g,'䕕fID/iA7  F1<*9b<ʸY3ϒ3,HpNJhw&l#]eI669և<GʟVT~6 K"2cQtG9<Ԧ\tw!L|\ eEҴ}@kT:Q'O&=鲡- ՀVz&D\0cMN=ma[$Nu#¶ NtVp 9Z|mMX# z "|9B|g8&I]I.ƒŗhZB_obeFechKEK:pmU[êlKuGp"18Y]cI) sMFZN÷+]Eb\^' р 3% <)1͞ 2zDvQH;c0L `;{[_QoaFA(USdl׋A\!:T1SH8lt5߂?M+[*RT P1PkHc}Cs|8ÕMSeBUa@#?U^L=.6i Jw3ƗG4XHZnrsQkХzi|%k&jQPA|lӦ^_c[6c/fQruCsz [ƌݚ5+bSTR7PMJuw檴g jn,sM6L$|~g֑*$W_J*Dyn=,3OH H=vNT @ 4u(Mh/LFYBr dZ8FX7SFrq K ˽0~*|iMAW(?B挼V܈=Ǎ^5ـ)vjijMT1 '3w Hy"vI+ڒ0:6! EI͜bm3vY=M H u4B.J玕nFڇ8WkA,W^W?D'F~a/4$jΚߙl \tLCuSL%kM8$( e0PB)>=oj2@$#YzFPnnl$2z[4׆#AL1DQ_8&@]l JZU^ Si?mfFnX{LR* 0E xCED2-5Ef3#b&/m&y;LqmJRI oE @ ^1,a% gw /𨮒.} >j2^2;zV{e aj Hi5W*|HQ*=?޺Bx1)Tbf4".Nz1edZG&AKh~M_Yh J}W*#>e2qNc!@FC_ Ҕ>%2VijQ͡]%ѮM>•=d7H<~܈4g,"lbl@7WzDio<͌Hl,M3( 7_vpt*yMhwBHx5qm(3iԻp1?. up YpZ@ԿdL#4^w3}U~ +9sAqnL1v_m-)&wͽV5W u0J{OH=T4֘9#ݝAM4.K?;P3Ex=]\Ѹe[ݓmo`ȁ/#eyFX¬@*U "(aQ#(>9*Tx["klr҇Ȭ'cqG6wN*n)`eQI>2Oc!=` sQUsZ`TKtwd@>g<&V9dO{.õyOXtl{:X;gzvz6"d%acQx=͇O1#L߹*4GuY3zh~jEogV(iȜy/VJBU3uL˔b Z 033\j e0]A\E.Rd]6dP\ғlzi /#$s'fh][/>uͽeaco~(zenO!8^Xjw\OٖfzHzlUbng ,a#1JB }o(UmzՔр_2OUNy,Lƌ "r_%8].`/|͙FA~cw 5egfaBꦐX)zqjNK> 06×9v'D+0v1zڇ}ͽxK*cLR(_%plڰKJ+6< L緗ឮ7)LJ,pTZ2|=K S[ N= aS6$Q|6=n[Iloga}dmTǖa}CD{hP8+B3rQޔХzꑵ/@wN}l W>$aL[ʽzU#ΜͿ03IE2ZO;lR``҆#.} l cļ󁥮~'4+;ROU¸ 衅kMEvz7Q@_LqI͸ *:+e89F8lRq5t,&Tufs}YZxh9_{тA.<78 ߫MrU*lg\i2B9aZ WM\2Nq؜]!^2A733})E} [ã{DNfNk)9OڂnI^7 κ 9yK/Iow7ъO&)Rv|^@û -tKgS80ӅU(LE`6BW|*Z^dAN r`xaW9/c9.1Τ@vv1xSAÁ\ycPi:kbbYO6bnr@b4Ex7.3KbfAd/|@Y 6Y V7ϰf̷K4/ׅCYSÏA̾~߀z YE[ g!>e3#z Nu)Ckk1|d,=iaEݫK՞ YМeom)5w/l{ֳ^QP~8_ |A:.͔YY],V HhɎ$}NӬqԊ{b/dq=Q[mJ1 S݅~+8~zQn>4k5%I& 6Z9B[YhA yەp5ZJ2Ț)ߚ٘Ϗ$9)-I]"#x)$׵\CVpx`M'۟s DHa; Ӭ}`D-5>`Y⫬Iq5j.w,볟fnF֩*%}7~ւ1S#/xvf>mpr]WQ[#K@d@v gȓ;[XnaO(rL#}ݚ |VE$;:!=]H.hE\Ae/8S^]۰D򬦁ϡYzB䟘+{a׿(G~DR |0v|T(e|lp)Z?NW(y VCnA*0ζO.MkۤE%&=5Rxx`F_Șn8cJX}kk\~?ͤݣygj.*'1E^M-zUE79*-og2g|CF1]8A;6E"s^]NyNPɯ e]J伟,xaC[YVv@Ἇȉzw"@+w2-6mR4kc k|Uuc4)+?;$P%f~\9M?%8P[2'HȚ| %8UH>B,-'DڣF pZC*m.^QM+iF%.\a{IwnͶͫ6 SnJ Z1̳*#t&6|B[,N6p @1@d |q_F$ѷw+ d VBJl8#_L kd{~ԙQ1̣2pw ?g?|hyOhG;TB#n{#tz5v3),kR^tF$$4+1+kN_^1$PO|߽ X oV|Ya:WpO ~= H3!#%ȹ +>gHԷ!1K^Oܿl 0JYi8s]{|F+y[J3ݗ-~MN1p]. rs¹`/<}ˣfjˮf5Xim +"$MRlt#[Ms%FW1s0_/͐յ5A^X΃Krp7HbR3/FY4*X֒DI / G3h7nr]d#~ jtTRĈ^T1r %d*$:FX&p;CrTj0!L! n#dIu6 ŃzVmV!AJ ~djBtTwWL)$~ C@_w۽C!8G%>{&ܺk Q)#U3?noV l!ߥW^1'd|^` Ж΃ 5?=swG{"o7%kg fe7V<ܔсnoKTB6/cQ'ó){F($x6 zwæO}١S97kdtÙ*[(XqRaOUnFDW'd`=0XA>G'YHC''N eQ%fpZ]/_au.Wu%j.8GO1;n?**Z꜊Eʥᱯ-D[ᖏۮ\F rpo<.szS)ʖ0ţ$ ĝϵLR m0&!P@ON<5p%"\1RN2._l=(P6E[eSSӨ,um~mK7 >SY#۳YbQ#rba:y|Is_*/]_V[d['H}zۗ6 H=uG+$(`fTVU퉊kzu e&B0 4H>LJ Yei?9mPλ9~ ľ%0׉Ha=f wenv,fǙSwhnr9^N6u8df`*4t]iMawV^2k!*}洘{lFo8ڛFIdW9p5ܷ?=L_@2I]$r+䈌ee>!>\33:sFdNap߉!Âot *Lq 'x+ۜ/m>*(J{`Ѳ2EnX;#$b6F"`g)G%V+S^݋oU^XzG%_nc-KB߉s$DedXpod+ ۼ)',5HGRJl=C:g[`ݖ&ef$bQ_iEH(^ADCr ԅ4R5L;t 5Y67S9smz, _͚)k4 n*S@:X E} sBg7@˽r` !?4TW]5mo+6b,=;36d21gimU,W2B_c,zyApgċcArK~azQkjb\rt7sa%,v\EaP Af歨@&Ck_oEx.=,=Ơ(%j'+>$OItPqfE, UwlWZ/pF&.=8mlÂ0[c-.qG9x IHxڻ {A29꛾`6.:?\$!c7\c#kf k,)2]r󋅶v jR6<M(y,oOcDwseUcqmg ڽhvDJVlM9@/غPI|x-X(Ib  r2qo%[>_58V9Tr)ϨL]yc`S/8I/;bo~7BWFiQˇ"^sGQH^3aUߴzƀROglW'Cuj C 7SQ܌ٍ!uH NSrl=^s`Ĕ*cz/ SXz@xc3^F@\5ZА4rr}w?1VP'cH^_ƇmF^vSHxshct$IGf"ЅaJBB+ɒntSkj8Oekq+JMx d+PЂ&e^Izg#i -?/Ny SGڒ +Ա@7<BCM 'Vȹ=`h' py'i⺆t Wkn~F)D2!4(}-7d-.]EzaE?a[ZA eq2z8E0¾eh{Yɘ?mwT/3՛.sܮwjƛOc:K7 |XcNc[59N naSff{%ŬdJ -g~GjFs ?/v!CSf$L__~w,UߢXÁ8ۭ&U3( p es ?#,+_㥯 Q1(=) TVI@!v=Gְ # ٘zlÃBe3E.5Wt c>EDm{aI -_--+BLm[ 'OlcRq.qaje Ymh s4{tK$aS02KAAĻ?e1Ps7G6?nwBWd.#:6/kerH7F79vp9Z2UF*6l:kIN8xd s7{FCMu2: \s(oH{ȯiAסr^yWlXj}8> stream xڌPb pwpw$x%8 w}߫ =ZBE$j`rwebcf+jhXY9YY4\mA#Ri]w]2 +P f `qYYk[r D*qG/g+ KWp 50} jr2 ;pDS-@ ?.h-]]YX<<L&v^_KUV?Y{s(k_?KCJih>+)+Ihgex\k:+̬VQ{  i"e 2Sr5{bw[+{_ +gjS\[oF7u0kع@gg"+xع>l5y=f{WrsXDqX~#o `,"Vo`,2E7S#p<O_ #F'E7}kFZ8o/G"6vSfceb(8o61ڸ],pc 4ق]s#φ?bq+?LE\LloIS!- p?A;_/cj 濽-̭pϰ`AzhП&`: .% N\$k[f ..O6"8Oˬ~\GG[?x?X~ \dfbA)v߉GON\i-a аZ:p\=8{ 1r1up {`@pT? O޿s{9'MݜrJ@ SĥyS뺐QBq]4:&%TOtY7zWw$iEI}[[T}Ԧv'q& E4D||5l[ ;rxQU<=VFwU呞ʦbR|'ue"3F@Ym[xwV%-,鵞8qT(醊W)  +Pu->B5_ ~7fӼQ4^GoF/"Y.&RkӄS] (($2Z; *61nG3 cwQ0ÁMZDQJQ2\:,;uyIcz#ԹH=s7(1?`S-m̛"*pŞ/z-K "> Ϩ7wW ]m&-Pt.z {Vԅ~ҢK9Ȥlm #j U;f6z]!m\ߋ5<QlkөJ}w켋U܇U˗[|?K7K߉Ib5QYh,Uj@>$MvR}oʉ?7v.ϥq| +]U|TVAb[#3`]-Wxgݯ}-VN{G1(uSi.jG,')L繛 NGoJFgv=/1 Y–WQ&Y[/KPfQPH t܋RRSg1xXwf=ŹBY\c:yMĠ#`tx~uRc [DtZT~ A:)C5ϟ>_9f=@ѳYxwq4stox؈"7EKzдqEH[c7>t7zh#k\7|>t(:iK1QTƧ4~nգE}OI+z12E]>1޵Gr+U(6W0ۚpe;nQ,+ͧa>SRiLǻ ;A\ͅa/9*okjv* n2 a (DOS~;I/բcx.C&`rN 4c"hd=`\Qj"9Lsڱ4+RNionus.me%KJUNJ++3jaaYLxm" kL'CTJtAk9X y%oZ kh˖Dl|K5\ J YXД8Fl 밵ݔG(a9Q~xHeL}BB/,~b5&ϗ)τ-4iEx]lmEc2bĘ"s PN9BPR퓾|6Fv^1U 43é?}_G V7NH#":?@yڔ3ѷ.; ?t_,LbeNEHEQd0>p  PgX,y +.^ޑ]=4-LU=$3,WcqdJ{d/@1Ha]e,^"HYs~VQct0~/Oo93+ǁŗE^OZiDN q>uIfɄ !(r,MY24t)C"  xc 6tG# y6|1zo5騰0lW9>k8 ,M$q;w'V*W0O 7'!ݦhS'}~dP®x |!lIK="D7pDxޤ( AM%fkýLYP/UetpS=ph_#nl)QceNꬎc[C2{č@kXvL-PcW VYhdAIA7;&b9O +kg2Ȉ[՞عld8[-)踮$T-S,B;Az91P?%] 25C(|H߉r[GV k+]D('G-F0Pԏ\AP 5+詼_ҝlyIL<3-?bYys$T*USg;܀wޞ>cΙUMa-y2I ONA^Mb (>B]_+(iRw~Q1\\q3!Me?sI,4gGijfDQ;&.4@-цw PE\nBr$I28%:[MX>OLAhwٮ~*O'ɮ}8rxgԈV}^p"I[8#ByzÔH^'.ӟs*m*\~SLx[z;7R8MWv{LBGb$ᤋ֌BN WKaP?ӤxTLsCG5YjNPHDAלf*vk&њ۞ŏ~4&wE;e7Zx2'X|>x{19{u>`mL_܅,t6.ݡyKCrlX8cjb?ȚW{W4M#;SI9Zr$%@ d;Z2 >"۬>ƬMpzТCӕbB}gV.Vu{"a:_s$ ZG6>s?)H2k4b̵g`qDi7$ȅm T;$'-l<:BEE)uKiҥ9Q@ 1S7L$^ws''W%I:\ضS6k9ƤuCdBٞgi lK(. |',k8Pw`OT2SqsO7n1-BJ8n4gv[/@s]2 MpWC7tR#p,\܇ĊYSy7? 9l~Np t϶Ӂ—?Uʱ)td#܊©X ji@&|D<6pWHTȰg@#[UE~ÚHzpސP~/ T} tn\H!7Vڝ^ͅ]uԚ0Wch2Rzu)_N%~ɘXV83ȒTOꩩ oP\vuߍ7t ^ާoK.CԹQqA?;8 t4,``akp54i9P89Em/EF lyt>%wg;jrKUUGJSvImNMK<:܌X79 :zY6T/̯/hd`۶.3fb~"tn+妖L盷s~\K?R:maO_C!a,^΃NH]s2%yIrƆFK},mP/ϵԷy$'l7ѳdxKD>%W P67+=r_PMXE-? MB5D%9sà6N{>-6E0VX @Ib5 C,#XaǷ٭K\GhYDv|ċ6 ;s(!Z͌PQʸ7':%rFb՛$ųNXdC̗ ;:o+gt&)}L3eއ84zY_r$v&}s"8/y(EۃTw[1װ3m4:#UP]B끦A 5LN.;X/*'9L~xPizCg(s%GSot9(䨄#W3ݦSO>?3OnW7pG .R'A:î7g~MN:,<hOϾ q@R ؤEO+>4}pZ8k jUt ?;ԝI,+^6&_Y9V}&)v{|>׆ ijm) B .#f5C-z/qs̖{"jƹ0S_ۥCOpJU<e13_ ⭄hFRsGa emݫTbfH]1Z<~LYBTj#`|N@S!irNC̐CBaG5:DWYoq+a,+9sDW9 ]2~Oq&]f4rY#ML'6G'v3r ]Zs S}z$Fyv\(\V8zЃ &Dںl^F9#fX}@.RM-fI5d( {}@D_Hʔl?(mZچ$\-D4b!d7%ɏ] 4s3:a{WaJk_Rd$c1- m0Llޣ*@hm1O|LP 5L*+OxbBiш X{+r»5`&{ա%uqnE]6ɐj4HAȒ[Lp~qsG,ȇl`k| _bАX(Wu8Z˜Yofuj9}TKDoivC:m#(t׬F ,; ޡ9ӧF)?@mӬ/$F+k܎D;.:sa,Ze~1{f:O7v.@TY |R@5b/!T6jcSPN]ǭE2v=ԎXZಧ' KT_D:աFAŪ~H$x? PE-2U+!~.頡 ]Xkз5x~Y9.fUTcE{E_$ЍF8juk'(廡IɹuI Be# ]1 ~),! 2 #;W/jcMhT#V4\<+om>z$4)'mczBrhFeۥ4}.nVuEC+/_/l)9Ƹ񍒛-]gFx4gON*T;]<%|ڞ9VW4J~Nc%ʷVq>I0L bV%YEGDa5Ig2Nӭ[MɄT!0o)ER%==RsD%krR#8_1gA2,}d#.U$5'^Sy}LdD-I>26~у%1vkz-\7Cѷ/ ,8Z-5Cu9S$Ⱦ:/ N|SHT\)3!k<;J4]lsƮW46A3f[r^ #7=Ȳ1;QOV7x$IwfߙHޡ$V$2i#MX^Ή6!RhH=:ZϹՃBPfIq~3șIE/:e6?I_]|A$͑b;c2t}L]?Mio Yy٤-oyVZg1BDpǵ*_qस%U}GtS]뽝FIDaM$ i5n{|4ZvyݎSZG23doa s"sPCaH Sl'\(F;bUgDrz [4R?x%t%s}=XR?:$LEH-|?ى0V#]hYPM2N4G1wYjA8%…À!pR7m|?  #E#^&rK iU+/nċQl>dfh'5}!G|W 6?M|ɝhӄT齈|՜^JLli[VC %8 syى }=;!-C KOǤv5n\rrW|\s3%קរ(ʵK~_]>0*"$m{PǗoOR7/)ZP쁒wѥ{R.~c3It]w!V VnIf ,!TM*IڌX-8bXM'bVtUH{ 穀/S$ $-!4K,NwR =U\Bl0L+qݩW[Y744!GcMt-EP EO6Ħͨ.3 7\@dn1:+[+2QEBIAv\k5Nfbs.Oh5M7Hø~bgGYLx";)x+ooRBM.*-CBjMдm*wB0P+18取0Cr {DZvw4|VFn7 O9N1'L+.T(¿ƹd3埮OKo)\Hhzd]"_Y~di- ~ώM69Z^6_eB t @ƼcvgGngV{5&45r &d2:G$J%ZL: S[MXMըUAA^awEe18=Yp:"kdgܪc9Խ]L b@NI:' h|#,_+f`bi?i%Lkm"A\x9Q!Rlo Pwk2_S/]^,?B!2k{'~rxlh˄?YA=5;~Gg4;,e^x\)H17x  ?}=3;KG)YE# JN(dbX!_Zξ>#[hKStܟ2 }H asPPGFmv'J=nH1BK7[Et=K8Yju!5;#O_^QVK95 T\O ig|}\rV{STK(O{jE9Qw&-Ó@D0!`_I/d#ϘLȺ%HzþFo wڥ>~~pk{'&x@Co :09BzѨ.O ,SR9c{88\Q*ӧx#t;c 樈wqBШ"k8TKVjEm7ǥRdtzȁu|6_2*[x ާل}2]X*C[j`]ߙ0#*WoB$1o=j!jch7&=2zR2hßQN7_G87ϵh+?WIݫҏ;loie5bF%89OΎgqv]D[hi XdwuBF>4s!XzVZ1*}QQE`œm5樬 r[賞+@ ЈH[ElEw8r}9hXS|GCI4{?~Sydm]cK?=p*wLu b&֥j6u_<'P)EdZfz[dhOcPI!ܐ#<?|1.·zr o) '}2w4ޚ$OI։p3φr3:%ϋz֥Z9]_lɖ ?alenBhp%;-KmNUvnk,WEG1_a?Vڥr[XQ& pW%u|5t (]G `N -kluog+)3ɀ8~ȭly"o9@VS%+ Q.u,wj+8{U"S=D4> =T\Sƙ߷EU']7IP }k޴Ls# Cl #$J{sϓQkyÔƻ}3z C\CȢ~ey4ÏK2u6 z7 TZKRkd>tw $$,!|׍-$>lf#ʞl+"㒜(\=v9[ ?`o$/E0^*O&V3ElTՓR[/М6zq@NmV2|qZtSg5'׏T}:QM\d~$6#v FBڷKB_j%̒ ߦMLۢbѡqc:̰j$ (_aWf!n񍠇MSug2 UPE}YxT1&*tV -{;MdP d4~]iSFRrMJϟxf-%wi+VB||:_nWV+ {N2|;I;r[Qhqh+U[vG>)t}qŰPC蛂[DMQ"֛܃ʀ<ȥG3Qe1Ehaž.ju[+)kQCʎ2xWw#/24%Uy;EϔN*@;faÅf!P W hdޕQ,>XVӸRK6oH{Z{Wa*o4es봺8_%*VʨORރWWhZU4dS+_iw^IE([%u3' )g nf%W~3i AomwoEپ~etwrƒqOB=g H$N[n{dM^1-qȃׂ{T'|D|둶˥(z7xK>!8<"P0Cn3ẀGQgڂ0 -D4_TgD1DAEΟT& hJ5gG]/%@ +扯ꁦb@]Ⱥ8;7Ud%4O'HPx_~i_d=b+8?Yo8 yv^k">7DlH8-=D;=J ?|̪Η+%UZTw{3:#ta:ύ1s VCx3']y4.Vơ8=.;5tRz&CxJ[J_"NE:xїb]omGI+ ~0 9 "яd! }|{\j^Uepv,,w7V;k޿@KKy(㍓C 4niȅ^ѯwOM兕% ѳP+8"rCL|E*D²B9JbB%<"wT#?dxwyHv9 K!h~O*2w2= `-ipuD=n&RΚ0QBByz96%[/=7?Kta`?CfHooQVޒubT4LjAvsP"#% i&>ߡqbV!48^LLJ_ja:O )KQ 1??4x} a=%]qLR6[&]'єP^vvCb!JD >c0Rih'e{QeGDeѮuqa sv2ura[kɖ"aW'ZU8 ͤ(zoB!q}/%&؀Pk4jW_P፶$\Ãjq^߳#|4pE%Ci &3,C'CɌYQ'a"?xmNӷRbkoRFFhM/R.m/]t\ =l9][sJ `9-^zɣ9'4jw%>P{6N|z|uSo@kXnNzr>9^B]WKt XÊ/y~6 c]jO R,puؼ MN痮D61;B(QI8]C\!Kay_dS 洬 `hD4DpBZ'#FxP" ?aژY}g(s^:B< 4&SKw0+Fލ%CWԁXT| @^eSo_ϕo] J/LD`$ 3e*K`v^XGk10: naSmk]Fv( ,,FOGy`eVU]Йy̎׺ .Dx։oR; vxQuW]U=4w7cPTT[(>Rd A "ð^czgUL1+;[(gݙg k`E_KQ5=4l@ Η8JfB wI 1uJD#AQchPds;bg - t< M-788B{d6%6MgUyXpPlV*DuBշDm>5*>Wuz2{`.b H5Qj )])s3dU Fs=yE( F✩iæyX$qK2E~<eYes}dkti[rXo4pq6GZ^]h"&my/3kqN`f\[1*|n= ߛP}I2rQukדK z\1Jx1:uoߕ6,v{~i9k A?):2i$<)cƕ 1]WJxF6L =t[Drpt 0bqH #nK DIjG /@ 7gnwu1W[i8;A&!upxf4/i[@`4::엶>kZkt]hCgGV;rRdHץ(.(S 1piiETͧ_'H@ppBfUk*uzLn&b"G'L,^G䨴=cɞp1&rKu/U/",LhR7~Y_#f&BGOB F;/i_viܝH\3/XJ9ڥ产Ҁ߫ :gGǛ:3d2 XM-B2|& [)`"m2 q_}L-z(wZon~íI/O*&_TE=e r_j=R0 #)r׍J*kl+LpW)o 7'uPyj~/ lbu]D[!ίO5!- *D$Te`U2M?)Ʉkc랧CC=]/An kAn z^%(gف&L+?pO'?X{ހ$dޫPzQ,K^A!sVYN%B '9yNϱ @-ly i%?nFQ*A//3Ih# χВ0; 9e5)G _`\Gt / SHwm ?+ uˠi#!컿j3 iIp~#xTA x_|B!}|̅9gJw0zOOUK ^RZjh@bOP6vN\ɹVXw$aB ֤:r.S]ՃqU'Az UPqD6oҚNDL Wb`T7^hfxݢ&KUxMMӪ~66}/g=oĠm ˦p5lgFa 2Dv~5l@:{BzoLq7rNeD$ߥw**W7Ry;DFS{$nNXjl"}ǫb Z}_gze tزxv%FGӱS2`֥)N'/]8=4UkĠn B)b;H+6w[ O g7v/'`8[34mh3)b+Ppbu _FQ, US]ͯ"}$|4]|*dHߧt5#*V.G}-Qucms P'-8ueŢ\bϟ28ufseE$cH'=l):F[K"&U"X`؂S$G_=.lpf+~<ߵ(GƟK#P:oԬ1TldZ+'Q@wjFsof4*V+_;'։u^ej$}G)Cdby;:7b; ыR+iT*F~ȅHxkU VWu(Xנ3y|`%o(yψ-ML׾t}S**a,jOv˜#dM.%] :Mf z힘 vX'IguG;=k)$q7`Z`̫y(O?m :h#'H- d^h'1Wig j.cUC]x9 "k}9Y8>9+KsjNc0nyVH)x寞L3E (@ /};>kV'F,Q k9{Jс֘u}j4KJqZl_Lo~+΢;F7@I˫.P lܤ[u',ua4xҫK<(qIn/I3a1H0rO$lOg}d،I9gg\Ԡ-SaXl~,ZNIQuKuldEP_Ϛqi3h+xLUCMY"oZF^dJ y'#xLO8pC/eM%9]ЦLl: &rwCaK  'LCg8FX?31fcFѵiglXaXG/cxSlX1qZqIvN=ʠX] 0Ϊg2P0$\ܭNj@ϯ3` f>; $VGJE|R =:߬vzY^^VY)" z-gz pguAG?ROO(ޣcJ!Xgb*l0\V:v@u>;dd_1à۰o.wbX 9H5lA7)#բ0[6AEwˬo-@Jeɴ!0׌߳8Ksh"֙}3U|)UBFZo,jQyuQr3s)J endstream endobj 938 0 obj << /Length1 1618 /Length2 3556 /Length3 0 /Length 4561 /Filter /FlateDecode >> stream xڍt<B$YlW878ݹ;{˨ȖQ)$C&ʞ;x5z 񛚃ԑxGP%@&@`(TQHCƢ~PDS+B6-8hX& `JP( * - }<EbW72ϯ(B )*K("FpʓxELP@|}}pOOt=%& bn"eI (XaH?x4NDT@HoEs=C6 ~SM#xOh ~dIC±$<5`.Ԁݣ'?!I`S:fmR‘I;Q!?/Bh ޡ&@,q/oEdP4P~7N j 1S9M ƠQ@ި"F @bd1N5?0?J |~;GU ߽bOʿx? @R2 ( [7_wpϳAá S?F 1f GPY(?nO;UWD:X_G{b?#j&S7OCQ?x{׫GS7D=H IBb]ju,2œ0; AQWA}SHuoGmY=)Y9N$T}I0"Q~ `LM4ȸsc79_Pe/@Aje?F R+RQU*6#! (Em ›H*}P(? Pt/Z {#%ܲtBo=3q6BSe}Y:?Gxgە6POAJ.#AT7fHRuuv8+| _1NIű3*UkT̂h\= DY]S@C i/u3_Jݕ܋䝞f&POeL68:F6E#(Ց.W2 5/yfd^wZqP5/ ^L[r35Rյ{n6wurҞ†Fʐ#fȲQcØ\ޏn/rӾNMxq, y6S>9):k)N=mAӣch죖eðrA{:3Aj,F&E %Y9:B9_27!Wƈ<^wn,G3ئ[|L^aqIKQN :,;o?rc6ŲQ++!fcW /)S*ujJI}e=^sIkZVS,{E3osߔ*?fxb*FnX~6P٩> A, ,gIayE UZ}pqT8?D]e|R19q2I+BHHϯVh@oՅjyqbE2zuj>z&@7F(-bkdH,{H[wдHY?xG(s]Elay8zη{3M;FnW ϰmY8ҵ=;Gփ,>3<7{u2W"JvkzdKHflZ"h|ɾv~ .9B+uv*[j_J%T[Z-CL|^$pXα'Kݾwٟ%t~z{@fᄎ(;]UN'_Pp?7bJܣu6Зe☈SJteNhlD+Hb>^wB{kuݦd<cqd dρi Yhf.hϫ@k]-|g'Qr|@M,Ŏbl9STnLOaX+9^ؘnC{I2chΥSC#[g@oOjLK՝-41H8)C{/thXӺPJAg·^]Zd^Y ڀ.$k5ԝt!NWL_96g'*Wݑ*o{(ѺUDQ3Jd~GS,5M]^Qg֤+Z©xaZ|HuMskP r*Ɂ5M׍܂L[|+_Fp1>:Y0t=ot^kWش")BEЁiXn=a>]nf!@çUMnqLjj~Z':rLEMsHzkâ ;/&҆%E ʯ<47b:<{byJȄbNŽ${*$B2Cje *|Dy>KĻ)}gÊvIvM#Aƭ ۏ{s ]Kx D7ۺѲhܞqUs?݂ƣUľ,lߦ`Vo4x{:zydUB} Ϊw(X`B;^ O©l4NrrN*ᶍ+n;Lœxm؇鵴t֋;\b4+a^UZfkp_FL6s>@y9ډq2LvJU+C[Llqgn Ivcj_0d-2~x^Ч Ǡs wGG`=-M$_x6Zgt)fhd,Z}<%BT_ ST~pKջT:G1ay>7t^h6:,jD:@.',TrGXѳVqJ/N_uKy-씅~'rw0A٨s}̶ Vx endstream endobj 940 0 obj << /Length1 1328 /Length2 1345 /Length3 0 /Length 2190 /Filter /FlateDecode >> stream xڍS 8T?q:9=Eryyk<ƻ4HJec63{=$t*RJ]UR$B$H(p*3={=Zo/2e@)B^vtјA26Fp_㜰516Ǔ7v&ckFHQȺYM϶f$[j*(,l7Z7mkv&{Gѿalގl~)p^VkqaEG&%YK‚W,͵c74,_Y&uէOϚLB2 u%nݶ^ԁzC1%q@Y ?C/]{yIp!:=İ^?W We mYlDyݶԳgTiq H{kt{,؞^q(0{%&CigPYڞyc>ӵ)8G}p^φ5͑- oYٛ4I!M }gڮT6ݺjS}Ddo( ı9?g5n}=,O C:d$M?~VFa/k(UeJ [O{Woh=ΐ^dv*(Cpj=o=vt"Vw66wfe*NJ[\,aLԴ'#SWoTh$=h Ѝ|]I\%3H:xץCM89qpoL/S~qnK&D^ʀM_?t>{ s6c5%U35˶1M\[By] &:Oꭷe8N6>_z*?z%-4/W1/wio&v7ZCR_of$fsWhv2YC+]`79ƕu┞Θ׊GNctwu5\`L?zS=]3uVN+rfw-)Xlha θϚikj*p C3H`tMK뻾qigѻȫ|S'Of9mʫGa׻öY=/ᒯ$[y.hy<Ƴ]>i=h-Q,!~j&?PsGQҕK>@mikSQoݎ[`` endstream endobj 891 0 obj << /Type /ObjStm /N 100 /First 959 /Length 3990 /Filter /FlateDecode >> stream xڽ[YoȲ~ׯ8{߀N$؞8`hyFG2[)&]U_u-M::(,UdžI2 .aQpI4D5PDHFDhX"c"Agi(1t@%8%6D\%S hC4rv%m'Db0%a  DT`*pzp $NK 2Ah  r1JaΌ2h2 -9H¨a?-툃PjVP0,)KbJr6b{%@mCK)Rck-#,jmC9䉲h )C5sj;߃+@9sDZ{F glZ8>=mS@nU1Үq'k4s,gqޚp wPJ^YiGm%@m"Ñ1 KG^is G}@ lCfB2UVЂUG{g%8Іg~ G%o$NVvxcS?z^0 <+{Q0G) %lt؆D~5sO h%m4heYzvKkYQnmSbmf^">_Y `oK9a4]4~`` G^JT` ֯b Ocq!x Gm+O]u@"N 'N@ŏ[ ϥyH.JVЎGJ#r>KȻx-Nj/F$“oN>:7F$]&2tߟ?$xʡ-W8Az>o В^1d>$N27.l͈|w"+!b1{O"Kl1]$[.}cV |Y$uI %'0W\Q42VkR\%!yO>|"䄜3rN.%|!)&c2O)!H6Iw$kNrՂܒ;r.I&dJfd22's8ޓt&ُ"E>!Ւ,Ȓ,@a?w,#s"?"ż ˷߿ X‚)AT|rf2m,*VsXA-@!@?r=8|8)/8("7ArWP ` 40hMMi$."gu~{[*4.{3+ڛϊvNn$U4!~ˤPklLHfx/By4]G8oW_H~ENA,<2E؂)]~;蕎\yET+Zwʼ5[ի? :>^yQsF_dl,H<ҚADk@@i`Ch~aD+]zM {zi^4m+?a:r{k7VyślR=I)JegWEF%F;jAЩjc=<[d|InE:FiaҭeB9e$h?{|e/"{CZ'Mޞ@z(+BjHftd[ ~t7{P889;L/: 8]Z᤺*VBuz>(} (S_@e %Գֵt'A/sZy?|CL.z1Is#~H)o_d,")(onw+:El5lXϖX|+xvxx߃uR_<tkzAՔdP:vK[:a9 s(  & HYJ>,6};=zoRCt4јmO$MrM\ 6jB+t^Av I$U3dqVăלwXُ:e1)\ |j@ѺuZ˵9!ZW:O|^<( 7n }3L+V^K}]qo<Z{[Ynxȶ͠"MOm~ |/Ә!߮ yUg\^b && e Ǐ>-*i{ZuQrȞVׅětᓎ7 yH>-`6WMqwù6s5w(jpmbpwyMc;u6ν}ӽA(mGMC&[o>7 O>}C?0=\k~ez%fawEWӼuÙv%jfau՘ɛἛ۬m&'Z˽inoxMO{!մݼU;Vx} y# lY+AE`Üqݴ61V|n3bx;v-fouA]o:fA+zeB0;[ynq,͖P WXBz%=o<|psly؅3aΑgk;`G!2h]V'+|$:',mJvӊf"* MuC JT]9͠:Deh-ְ%.эe" `|+ ``v-w*PGwVm[ (k,O+Lh+f4lv K+ZA5 ȭkUvۖA3*U@*HbtЉG endstream endobj 992 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.14)/Keywords() /CreationDate (D:20170117091643+01'00') /ModDate (D:20170117091643+01'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/TeX Live for SUSE Linux) kpathsea version 6.2.0dev) >> endobj 947 0 obj << /Type /ObjStm /N 66 /First 554 /Length 2290 /Filter /FlateDecode >> stream xڅZMϯ+~lŎ(a$WH;l>}b7{tڙŪWYi2TĤRTer Ƭ_^`T*0&`UL'={kE)%e ٬1Cg9 +_/@ص:R&k:`e2_C)vɫW6 gs &촷$Ly9vF%E^A evY{ 6˜&(F&†H6Y`Bi0dF:_c1J^q(V9q XY>(.PL:l`ĜbOv*g5rT)seW&XvAmaQ2W_^9]>LmŎʧLJUjWʗzϧGfo=//OKsk,,l/_iʔW(XT7~s㯸̀ nbn*M\/؁E8Vl!_) roJC}s_bAa;^rEnn~Qk:Iq+2UnM&5Aznݢӻ^z.R۸EEvk&&f_P#'Lk5R];P,}uf %mefi]KOǏӣpaK,ϗe5EרoxULRߘ鲢~[S-,9$^ `;@לZf! ~;zO1eA_894~_9jvVWIs,|њ{GmbHsy@9ӡCO4, ?B e?¾T} 4J- Ή@*Iar::o(Ln7>ʝY֐= n So@5SEb[題guR`yLFXoxK(2 1{'%IH4c?ʥ"^|:sx h%aCHq]6 )ٛ;3"9I@t8gdD]vˠرZ;,n|-=qn̋nƼǬ% BG;@XLNpS9iQ ƬQT٦!E,74/"q[-(v&bӎk؊ڲ7i16&WvfW`ٯBs aMNtMgǶr]z zKiV ;4oCp:r2LvZlAn;NZ[o묖e--Ȉ-nWjvflt(!ԶbCw9џZFz~͵ʃʓL[xLKa^r- Nnpc={`͵tba1ubA^* ] oܧ+ ~5ʅEت GeŠ !ރ>"ZV}fQ;W.Ƿ8֝l3Ō[]r+lKxCs{tq3.֋wʵ>5ݵW7j5D=PQ}AR_be'w\WY>'S=Q.% 2:bU2*jc4mQ*:)Wҹg^Ի[2-TϢTXxnzd#~@ߧIxy?~ r/Mwӏߧx1/4S2 ] /Length 2429 /Filter /FlateDecode >> stream x%klG~Ǘu;ķĉ}qllj$8q8S*GP**Ѫ)-F\$`ThpB$(!(*y93g/3|AA/A@3]Fk"@ Z#ads vTB#UGhՠPuhhj6A"5 zfhhx@;}hhVAX(eTMx um!}h[` -Q($&10v 8(W u P0 ѮNShhkS4Z5i0J8 Π@[%gцЮhh+ `M{ppG``~*:NIy T( -X:q [QL@JW8mv4 +́0kgZ\Jz kt'oT{\~>#> stream xK$IrWI?P)TQ$@_U3N aJ07;v<呞o!#ϴi>jJYnAٻKPsT+LzVuz\ ~5Xp4KύgnQ2NO{5;?Wyup,`7dbO08/6l 5pd-#MQ/| f_#kZ% /?C{uy^jX|Ո~V^غ{?j1Co+S}h9䉙1ʝ-eH0v136>h6cE]@ J/' {vD3~3O>kiyp 1 ]Xnž5!+ N>,}e}kDmvychnV]6+K/yDeQk4n[ا<+—γfiꀁYፇ+bgmb=y3E(K2&' /ic6P.JUaJm?+0KQyy@%0 K c맻a{~~p$' w8vbJ(̈nIU`>М?~Kh)ϗo_m$l}W"ay}~sS9 \!B?LjB{9{%Wۄ & ctApq~3ufY;Č|F0.> !K4=K^/VU-X܊5k;gňMbζYt6l1rD6*_Pn\3͢QrnPh9T/bu4 Wm+ 5ۛ;#h{{Yڈ, _Dj/4{ū5y@ǷP dzVa[Q[K~ݒi.9TbſݒH' (+BZmx 'L'l %t[țCf&~#U:l:0ú'kqt/ 5Z@o7" ӷrF;bG$O4+0ZPxB2~3"߈*}goUҝOF?o\-MDcIa"IXJT)4w21Hv+$ٖ$5;TAC&MJ"B'&I  [ZyUA :D~LI=-I&`t_?vLij26x{CD%pbko~Vik)] aue/I!'n l[tf uʼn 8&'"G/6 +W.Y%o)r,|ba'֙0-fqxbQeT4R%iXVۮNmƽ"0re[C9w8W +H"$Ic0r(ZYaV€J&h {5 )nj@ݷ$ s -=%U3o#;w >'!$yo" _d:@1С6ǂcQX}g&&$"a^WUc.m+VY>qE 6aYTt!7֜X3GSh,!Xܵϡ9fcM72lW?[nHF5ұcvlKخs4Z(E%beӄ0Ij3eC_C*K5@1 a>f+`ьy(ٝ7&#n,Sg2vSJ*[`.. ?% JίG*G (E~Ýpa/<4I%8V6/KRDReoR[29Xp:3\éoEr셼9ؕI/]z*DRS逸_)_2W1т~КG$Vgo>1 Il< 3N`3X鍒kw-)#feHW8N!Le$Lo"+Ѭ1 AbCRl5j$h0$&-$C8;֢?xS;m'"$}<:<nul8:dRZ9-4ٶaݚu: ᭿WnBOCSJY ^liV=B@k{BIL""vZu[|d!5EK30%&sXI*d2aϘN&k)vZяbؒD)(p?'cO‘ T(~qZ03<URqԻHN V[uYwNE~^ h |0bק;N [sHwj:ai:{-ܹFӚrÀg8Sd3НJ!lIl).|.Q;VׁdU PLH39Cδey`KakPw$!,sQ`;"U-b,{lp0\6hClp JC#ْ  "KX(rK#c6\DhpRGH.QдEfqݒ0'K҉c1'S Ha*p-& U3yV,)|,'EDXt$Jɚg]д>=85܋,d10Mž6~6s9i]`[]S]pOZc+̍oT5CK{(TuID9uOCA"$XG";&vy!v-7̀ۋIbޢI!]M0(e 2eoXM.G§i@ c]DR ҶeVc]A'޽Pj&_nDPY%3U_O !'teO*x[ o-WIq13!]/).u!̡v* 6TQ@՞X(ITR\~ګ^9M_Ixt}CaB:Zâ{*UL59xR}'X]qVWUȖ/1On&1VˉPӰ ]8_S0tKw^a0DsHN]rT %7zI":wego]dnyt䷲zemB͍ X O "]'F߾ڒU $OV/{BUtd bU"NxQUD\Oe̠>ܸLŁJpl銤[ʃN 0%w!<6THjmmM#9)[Q([_I6]dW DdsI$cS+QNi}9 +,Q]'$d!ܨYbY>@92=*6f@mgY(lPM, FI7nIU@t~f, f^YJ˾*Ly&1GBgӦUI|^u2[6(+eiFdxe.2(RZ .:J1u1sUg]KqVdL$rGMR.P!FWC]^Z}kfJobIf Ga ϜyW ;}R醘U{\!H.=X]S}/5|P -V?IyR^9dEx/Pz䟴()7$t̞U.ahn'z(KqNr/lwT(ųZYU*ǷUw[n+ ~ob`Hr; T=F\ʞJpJKtL7$ l rOfqE'Y S+A9hf>N`*X? գUJٓDhUUbEɲYPXUW`0q__ϷI򉅧G] U@毯]Ԉ컧]'__`>1,Xz.Ve5.qd}k=nD;avj,[1Tc5~9(xa24쀔4 c]*|E=:u7rsoUϔ(]h:Q}exG$` H . cJirIф+RP]UD NOst uBD Lf *nU\J/<uH"Std1E^FVϥ9uݱ[J>ܳ*BdKb/ A) u7>n+&oiM#?_A ,QiY =xCS8,]Ku*ΡT aYeK!4g>f ہ /V ˨*%XI3VAhg B>Ԁh6CW Rw 0yHeIRg=fV^\Hnjcot:nVXSĩIQRdϧ6R&(u) 3H |RѹU>bUzv`rKZ1/pA&W/N E ΄.gCV%5PXu E+shټݺ*`'uHϺQ +^:K Q ]0;M&s7%00R2qS\t,wn'ط$iܼ>v~ofQT:X:UvrIQi>Ȓ!Yp7?+]{.Γ.χ2{Tt_$_t"iwʦ-%_ ÆL^#FD̢sF:w 0L|QV6:Ǚss_|aʎѾU:E\é]bʩPZsIqC^o(0-HvjZ83bֹSo˙;9_{km̒P~9]1`#%w3jp0;\ Pܗ/j50aAb脧UJ6DNRBh4D50 G %*S7TwE%IA3gv[Պ*oet*RDU4GWF(>R@xyw#|d`QTSd}_"|qo`)`>˵T`UA8 UʙnP|NE"΅XWٴt'o 5kėM6֍@%n Eę4 "coɿ}$ J{p67~r.?|U/@a~+%_@)\N|uo>/uV(endstream endobj 6 0 obj 8991 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <>endobj 10 0 obj <> endobj 11 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 12 0 obj <>stream xeTkTSWא6-/W[EL;*y( isIy yA!B PgA^B)JYZ; NL̜k̏s9g}ca0ój$.SjBM8:69 {N~,[y0n<.k0v"E3q%>B0PIq ,BNf"S3J撎,{wUuyfeEVitE{ЃC!7Orȉ'V6 !'-T\rwvƌv&N_\g,-(cD2,G>6z^ajMAf`nE~"+rvՖ m%  Aa9?x@R- G]QQeF/"?rf'8^ޮÙ}oeK<4qUdDE :aum\. όfeFX(4"oF~H=mhMAZlN+')KYg5`oh1.)/Mf uԻ<./Us5@/d nۖ L6eaLڤx5'8v%Yi,/i+(gSF'ArhT8Eo,vwG8"Gw&hu(]s4ڜ(PSf&hKܖ~ukbV<f'y2*Oör֚&Ix5w4 i\Z 9Xc;eNoJ-nQ@8Q'~vX_ 49-Y|+Pk耯TBqV&+RCz7oz7[! 2:^vv;5T`+FU劊Wj%mM 6\&v;u pkي @(gEdr-Rmz Q+dZ C\, /g^AIS\(49c$m!RL!2|r&ܞx{N׵x7BQkXx\_ZiUK]AbzjKG[(M5%~ZZKy 2*߁qz 25/>kx@\YRڝQc?|ǙpdK2lL]DnanE.8t5J jnLٞV -%@VQqpsN45=u^,:%@t]vܖCK\Y5bjpO$irR%#LmlNj=oÿo _ad endstream endobj 13 0 obj <>stream 2010-07-07T15:52:47+02:00 2010-07-07T15:52:47+02:00 fig2dev Version 3.2 Patchlevel 0-beta3 tap_point.epseckstein@NBTF01 \(Sigrid Eckstein\) endstream endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000009306 00000 n 0000013378 00000 n 0000009247 00000 n 0000009096 00000 n 0000000015 00000 n 0000009076 00000 n 0000009371 00000 n 0000009472 00000 n 0000009825 00000 n 0000009412 00000 n 0000009442 00000 n 0000010100 00000 n 0000011861 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R /ID [<0896A01BCED4649F7F1838B8A6236630><0896A01BCED4649F7F1838B8A6236630>] >> startxref 13617 %%EOF ADOL-C-2.6.3/ADOL-C/doc/tapeadv.eps0000644000175200017520000001034411227416777014710 0ustar coincoin%!PS-Adobe-2.0 EPSF-2.0 %%Title: tapeadv.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:02:55 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 314 156 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 156 moveto 0 0 lineto 314 0 lineto 314 156 lineto closepath clip newpath -27.6 185.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 /Times-Roman ff 317.50 scf sf 1935 720 m gs 1 -1 sc (tape generation) col0 sh gr % Polyline 0 slj 0 slc 7.500 slw n 2025 2250 m 3375 2250 l 3375 2700 l 2025 2700 l cp gs col7 s gr % Polyline gs clippath 5230 930 m 5415 930 l 5415 870 l 5230 870 l 5230 870 l 5380 900 l 5230 930 l cp eoclip n 450 900 m 5400 900 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 5230 930 m 5380 900 l 5230 870 l 5260 900 l 5230 930 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 5400 1125 l 5400 1800 l 450 1800 l cp gs col0 s gr % Polyline n 2700 2250 m 3150 2250 l 3150 2925 l 2700 2925 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline gs clippath 2534 2200 m 2700 2283 l 2726 2229 l 2561 2147 l 2561 2147 l 2682 2241 l 2534 2200 l cp eoclip n 1800 1800 m 2700 2250 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 2534 2200 m 2682 2241 l 2561 2147 l 2574 2187 l 2534 2200 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 1800 1125 l 1800 1800 l 450 1800 l cp gs 0.60 setgray ef gr gs col0 s gr % Polyline gs clippath 3911 1902 m 4076 1820 l 4050 1766 l 3884 1849 l 3884 1849 l 4032 1809 l 3911 1902 l cp eoclip n 4050 1800 m 3150 2250 l gs 0.60 setgray ef gr gs col0 s gr gr % arrowhead n 3911 1902 m 4032 1809 l 3884 1849 l 3924 1862 l 3911 1902 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4050 1125 m 5400 1125 l 5400 1800 l 4050 1800 l cp gs 0.40 setgray ef gr gs col0 s gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF ADOL-C-2.6.3/ADOL-C/doc/short_ref.ps0000644000175200017520000143275212761540576015125 0ustar coincoin%!PS-Adobe-2.0 %%Creator: dvips(k) 5.993 Copyright 2013 Radical Eye Software %%Title: short_ref.dvi %%CreationDate: Wed Aug 31 13:15:15 2016 %%Pages: 8 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%DocumentFonts: CMBX12 CMCSC10 CMR17 CMMI12 CMSY10 CMTI12 CMEX10 CMR12 %%+ CMMI10 CMR8 CMR10 CMSY8 CMTT12 CMTT10 CMMI8 CMMI6 CMR6 %%DocumentPaperSizes: a4 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips short_ref.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2016.08.31:1315 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMR6 %!PS-AdobeFont-1.0: CMR6 003.002 %%Title: CMR6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR6 known{/CMR6 findfont dup/UniqueID known{dup /UniqueID get 5000789 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR6 def /FontBBox {-20 -250 1193 750 }readonly def /UniqueID 5000789 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR6.) readonly def /FullName (CMR6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE339BA29C1C6F656 1DEF13780383DAE38A868377CC7D396B2A05F341AEE0F8BD0A0191F51AD11A4D 2E927B848A1EF2BA15CFBE57A51E3AF07598275195C9613041F71C1AF39E61F9 EFD5F6512FBDA76E29DE6B508F62F5CF9F73F5288DF1C7B0B82C92D3B6358BAD EC3CA20BDE55DAA7CC58004AA86B6CBF8C410D8287E88BF20588A39309C2B703 CED322F030AA6069869064486CA651DA054FF3F5E56534CA358B0829A6B954D8 9103436E6B06DAD1658BD4A95AB41343B01F5866FC87C4EDFC71F1477C98F8E1 1DCF27EF743FF90BF918AB8C4E5AC35841E2F745480E5EDE1C1DEAFAD8D0018D 2C1F1CFCAD9F6609859DEDFD1648A6CD23D8ABB80747F94899F17C8F3E6CA55A E176F19CDFDAA0D7C920B3A72051A4745560AC81978C92459EEE5AFE85AB247A 32981139CBE352B248F4BE5F73503A084A3E91F05328EE521D9669E44E202584 5407E7846F9FEE3D54EA18FFB144BF2D6803BF65AE402034B3CDBB40DD24217A 3CE0E95E2717CACD603A958187C42B3558AA38D6B6390EEEDD396F96E6041FCF 6F8888221AFA87EAD79F46E0E32CAED91E6C8500879AB6E580C581E8C8CE9B68 2BB5EFE2604E8DCB2432D39D75EE556969F1B2FBDF6A4BC72D106AA7CF22C268 464027898B311613E06E1584707F262F71D9F49D2149306A88E02BC60BBD6BDB EF41D90F19197BA9AEF32B5E63D5B9FF41B5602F9F786E76621DA54D574981AB 87A72081EA05D6C6BA940EFEBD0904EA4E77BBCE17E20B42E1722617E0F6EF32 F1ACDE9D758594E9C81049CCC10605A27C2A06872FBA9F159CB155609B496ADA 4886F478E44029B5E620DE8319E257697E93E1CDFD27D560E2E4D34507020E2C D9FF06BFA14E056D81DF701FAC3ACE4BE6C098AE116E079F0044391EC1661F6E 7A93B9320BD7F91E8FD2E8EB3F5CAE997D5CDD35107A1D35302260D1499B8B65 39625B7925F97D917B66BAFEEA992873F07220714F192839948CEA080BDB9A03 77B9DD032273DDB5629CB28B5D8797EDEFDBC601823E038384C90C79012A7D96 8F27784DA15BACE21501C26E3AFA5DCCE81B52B0ABAF71A35D33103EA86F2415 A39A830D559C5C6CA7423945BD3DFA942B20A06D7A8D8671F9831DBB52907AB4 4E54776D29C6085CD9970B6DD21DD3EA8EB09C49CBEC6CDCEEB0BBB1B8827109 3BDE64DDA024D67F098D6C1998506DDFF7907ABAADA1C39C759C850E0C6F8E89 A392D1C9329ACFFA92D361218D75E115F70A47C53B73B356D703E9C499AAD098 AA9C8119EE9E9708A9EA3049E976FA19AD04210D5F6092C7903FD155113F3A3F 269B746560F70970AC9F8D09956E0E84DACE4112C4E7C7F6B3F0B63D26EFF95E 2B2E9699D16BC8AFC4AD9113AA3A974C9E82E877288CF71E9169D2DCC61AAAA6 C536E5604EF0716F6487292BBB677518504B52C63822BED3BD5FD14EB41EE6A8 AD4B6CF90D39F98E12A765B645CBA3E8552FB9A986390212CE119E7C3DD675AC 17BD006144BEC534DA2A860188619F17589008409C5A309CB83FBA70F6446B6E 2B56991B6A03B1DE10C621591CEE45BECA27C54BC8B4F1754A9E8F660812710E 117850E1BB6FD89BB13F8CE391C43DA89EA67E9C3E7A4697790EA26B0E4E2E80 DCA508873A7AFFC11B8C02EF86C2316E8D8B6BCEA37F81A3A87546705F070C3B 9D4D28C366CEBC1EE485B8E2357DBE46E86C87B9939DADA60888AA9F1B92FECC CC1C198DDB594BB70A8FE690ECAC21A414BAC89BF019F34D2A130F485EAE35B7 2A10C67EA3A48A4D9734759CC93AD85C6A570500AE5AC9973FC76EFA06BF5DDC 26E20E28D16B50957EE01AF2653F8D860817967AA5A9BF9BF7ABCDA710E9F34F 4F0EBCC32B3C9C2971F6225D2DAA6A451366B83F32B2ACB83E746D365B2DE38D C1AB7447FE7B37F9630E410E5D8F0ECE74DF46C538947B3A167AD9F3E4A7EB3D 60F5425AE75AC3A27D39311DA35696C3DC7282AF1532E7AECE63D13DDA0296A2 01487185FDF1875AEF55A36C17D6A8DD329279D229259463A2F05CB7A874374B E2320E1F6CFECB9C1CE62FF468C29751ACD9754AF1EABE8E7696C2888914416E 235B6766F20FFBEFF285277B639A51EA2F2E30D207BC891B00F0436008F980E0 9EEE7FB375BB069B9E0BA11DA951A99D8E60B4F920A0495C247FA7DE904765AB DB5C3B2D634757E43EDD6FAA4DB3C67F82D6853E1170F0B2D8CE496DD4E72B0D 28277BEF172F1402959F64527F9B640619F04416DDB9D05FB2ACD019CB9C119E E544D24EA6DAC5C69785394EA50E6EC9AAA9E14B904EAF29A733C6D7942B63F4 85729686742F26DEF78DF0DA1CA7CEFBB684F4CAD99021A3B3D1FE03B9C5A4B1 BD04CAC89BB91B11952A2B17A61789BEE0C54B46C03FE9A1AE73D17CF94BA30A 237C29D414C3BCE8E3E2DDF83C0BD59DCB66C4D2C3DE73DA8378F3C6C8035D28 7464399857E57651A53E9C4AA68DFCA91B2376CF98AC5290FDB9BDAD9EF1604E 9B0A70EDDA1E564B6D2456E7BC722454ACA8C4950FDD44B6EB9AD01169A9F845 B06A0DDB7897C847A5B1F42258AECF3807AE936C8F52C3A7A0A85D68160AE442 FE81543DA6702D76AB6E8701F80DFC1D87C961E350D0E52AB2A298B9E5908600 7E14D2A87309043CBF13F69AEAAB1BC239DEA88EB5176624F6046664B1D2691F FBB2071D3706F97DCCA355A6DCC4D09FD35DC078FBAAF672FFDECEC61050A120 10B5A96629041303FD01ACCC7686165DED6AA712FF8E5E85DE33C4E7D877C49C 6C469A90410BAF60BE65ECD91CDC2EE7AC0CA8BA7B53865F26092BFCAA0BCA77 B80DC51DAD09C93C8DD8E43502B4B68F3D5918C3492196292447732BA90F5AB4 9F5E1D634ADE1CCAAD028DE5EBA9535F6FC5908DBD2D643E0A7E059C8C386FDC E72659C0033F535C0D7F6B98D0335552D0BF3C6E302B672A5EAADFCEF81912E3 8F54E6FB7EC2B325125159713D0AC50DEE3673B9B148643727E94C80971A2E73 5E1E13237BE69C84FC039DCE02ECE2668AFD047F21A61BB94A9F498C9FE5CDEA B274B40728B6F6CA9B6C15BAAF92F465B0D7311B46545CBA90D874839443CCB9 3110F052EB247B24B45A3D2FA6FBC7EB2A4BEC2A5892914B3C5EA3F4F9B9DCBF 6F932D95700E045B49E4B1F2C9D2A42CF39CA2F5A2654E6E8E6E92473D28AACD 5E35C6705EA728F704F5996D286BED433F976AB7E018621A577AED7C0AC0A84E A032FE1869F603E6F20386E3A190A30A21EA886249ECF8CDDE2C33D73BA8647A 3DCA7A8DD9E8EC8D9A415D126BA38B6771C489DFC419303EE9C1B83FBFB3A0B8 97D64F30E4BCBEC24DF603FF3BF541E00D5804B6B6543D3D2B661CC551D497A9 9DFFF535AF424B2F3150BB39AAE8CDB306AAD37767BA10BADB031DC2FAB16955 EE78342CCC0E8B5976BF98F215461A8C6F63EBE6E2F1A1104662DDE53388CB51 8B44F3534853B8095F3B746A2459C2EF800FB1EF7F235EBAA9731E3AB3BE4369 1D3636E3ADD5BDF0C34FA80E90D8A1DDE770943FD196E0A7C5F1FAF6970B34C6 4673AACA6B2B5C12B9608521AE736C1F4B97209B063D991300ED5AF3D7F27E76 68E0B858FD8BFF86581E2B9548C691E3E5D9EC4D39C9715CDE86C7D22223CCEB 8A38C776A30AF14912390A7546DBECECD7A687D4F08646E57A12C80DCA022B7A 33399761A50B8E0ABEFA1163EDEC3DFB5DA3248792EEEDD894872D4E6814B4C3 548BAFCDE0CABBCDB97EC6D1BA47F2E77CC1389BF19D73661749AC33F46A618E A665A85776545BF9662F2179D7BFD604FA8EF4700591AF3AEC647E27B24B76F3 133F9198DC15C1AED830E737909E43EB91C334C44BA35810007A3888E33F5DA5 B3B2C35481C648AFE630CC3E08F77744E401B2934E407D1EC17ECE737606B076 F8DE8EF3344F57495EF49D11580D6FB28AE0B1422521B320843B13467501CAE2 3DB93D7BB779F73B6AA30050DA74BDBC3F8DBB30F32EAFD07734A151BB2BAED5 C9B1F790059339B64BB4146470F30928C9A49AE88906BD6FDB7431A4B50809CE 0F67ABA01CDCC2320B0B097187B9299E3D80CDD7BB5DD5BFA7B28D924C5633C5 45A23CCEE097C41C3759C1FA8DBA0DD95034BCA89BD23FAC18C70093F40FF2F8 0FAC5DD4835F2DFD40540E9A9E9FD951A8AF2CB766597DE00147B163BACFB7E6 EFDA4DED594F1C746D8B46A1145E0E4058F5917B3F21E9BEBDE745EE72CDCA64 FB31EF7A2E55265F32559480E2B6726D3DE26FFC97EB4E3160F117E890C4B2E5 8DF310E6A728ABA85540F571C024F8DD58E1D7827FE97CED5EB31547EBC36415 02B8C0E10B7E37D816F01D56A364B8552CBFAAA95BC4BDDCFDE91CE0EF005B4B 7AB56FFB47A093AEDF0DE1EA48FC8103CA3CA1470864D2693E360006D05668A8 AA422CCCED20DCEEBEA5CE0DA1EFB00FB93E922B18124FA11A88D0F6E0F719DA 57603DD5DA42E1C56C2FD9E5415AA199D4F334C151C1157E75C107FBBFCEB706 5F4EA47A29B54ED8CAEB8DDA2F53D2A703B95487619780A52DA1270011648A28 AA64338E04AA5B92C1EDF3D8DA34FA6D227A0325EA6F22E9B38B6338C657BB21 CD4C582DC04010330F62923F817E4EDC6E5C0E6500F2A975A8A95BAA30C4A134 BB31B5AC45A2E7F6E9CDFC810D41344C4F606049445F8E93D74271C1E29DF7CB 5459593BA28AECF64D903D3E4D77CF5C04B06DE44A41EE4D9FC769854503AC85 69E4A5106E84016DE3D59865D4AB30BD6C9E45C45DCB5408421CC50CD6179C85 34E55CC70FBD8FEFE9F1D5160664981716E3BC7F24B6F54E0323D9BC4B692971 24419EE62D8B0BA726E2B4294A9A76F328B8101DA29E78BD5C4AC383350FE196 4D42DB1653637D19530124858950C22F1E9CF5BC07D46B7A58CDE19CC88DCD2E 7FE4EEFD8AA6047E919823C8CAB2EF5274F45E861E6508CC11A8AA90AED2403A B2BF1315C2157B3B50A3685205D93E40906EEE9DE5985405974BCE0B84BB37DB 080A45C5237B269B93C0A7CF294A18B45464A41F604C494CBEF829A381155CFD 71CEEA54CC39EEDB6DF58A9896246B09F95DC6BC40BA6916AAB5ED3D24F66154 3662F8978FC63DA9280FF7ADB09EA5BA79D3B66E0C88BEC1EDD78DA93839073A A4D7B0E627000C4ABA76C47CCFEE92E319315333A5584A951E34C55412049C4A A5569FE65A006F77B416E0530AB6A8E7AD6C72340AD4CE25937158FABB2153EA 281E1D840206F5DA38E00815E9081F81DAB9FAA8F4DAB305867AC84735DB4F52 A36129929BD2084A8EA37BB6889695204BF7290B68D5E722540BF8A276F8BB6D 451D582EE59D2FF03F6B97DDE05FA00C3D375D2D0AAC8FE298F85CC067B15481 48D70B6A0354C705715B891915FE8EA45244677B9FCE81E72D66177E309F3F83 F744B9EA9E55C3B30DEC6E5E03B3988FD526A82A5E8E1DC79127FC62B2FA7949 B3AD3148868DE22BD4B5708E32CEAAE6ADEED1F463EAB9692411E18F8D6BF391 126B2700B4CF3B59D02E3F8795130C96285A63FCD1E0F647ACB1D35E9C58BD01 1DD06BABA00CA4343BEBEDBE677E053E9732B33A7495DF51782A07DA07F5646C 770C957AD915CC70BA8E08BE7A1F4E6BA5BB9C603E38F6FB0A2578471C4D02F4 283069856D926B9076EC73AA39CEB0A061AFF1575C7093FDAC9F89C3DC06EA45 06F3C2A3BC9FF21128B10CB758DF0F099B459A5264A8C24C098110D2BA1A8532 8FAE146A91BA7D033F591AB1A94B8A6FE0FFB610F698D216D58B4EF6C87B1524 8037CBB7E23D8550A620341C6625A1A2ECE7CEE2598D66277F857231A36155E3 984F147783E9B93975AC38A29F2FBCF704C8A04AD84C3E04A12D2321FA56811A 5B6744813CCC187968C5C26BB8D3E6615A912FA5369C01CCF8C0DB790593B190 1A90CFB5339B8771F325C5FC448D36C7312B11A15A8635BAB59CF3CAD176131E 026F6E141B2619EF7F3048750CC9291397F141591EEC8B612D6656DD34DB54D6 DBDD303CED74BE76664E7DC86FCFEEF2001C9DBA56418FB61F589566A47AF36E C94671C5E8939AF9F4D53C0DE7142B7B63C86AAFA65877EBBB48C64589AFB2CB 1280AC099FC48058855CBDEB6C2D2A0D092267996591DC3B5EC8252984E9B27D 2E9EDE8CD8303F0905DBFCAE497DE1B755B924452CDE11CF4F20893DD6FF7251 427F520FE00580DAF1703FD968E0F8ECCDE618E1EA5820EE6CFED97C78864EF6 26FAFEEE194A268F24249D44829AA360D731C34DC285501E966A959180718F72 6330E4CC060588A2F65AE64A720DCAA818D49D4440F5D0B6C1F6C3A107E12445 F1BED2D3FCBB87A9597F01C7332AA79143564056219BF87D4B907A04F77621AD 054935E883B2B137D3D1C4BC792E8335CA08B6D83227F35736C41312A0BB077A 60FC6488C5E02FD51A10AC113D4EF70038C649C1677B2204A77F2ECBE9B3C341 F4126BECBCA61E3F3801F9188A3775924A62D30FB096B440286FA655EBA00A74 9A4162904BEA07CE68EE76018346DEEE20839C9A2FF71179B58E1D4AB30856B5 F5D97295A097174467010B15D733AAC5813CAA633746B430B1AAF9F997FDAAFD 436844D1A56B8E25A89D2CC4BA6EE7ABD167818FD4F6C747E07B262C99EE2C35 323F0B471586CA50F54C6381B052B15B0C58C19DEA82C0CA29F00400B727419B 2379979CDCBFA966AD513FA903160C571C3BF1BA239540B11EF2371A3880837C 6D6CA2F374280CFA1586427AE975A2AEC34244874E4D441DBAC6CD1828841C91 069AA87FAE849C5DC7C9EC1B9876E59F3CCDF8BB23D939F5348D7486934BFB02 CC5A22541ED352616830A510DE7732E5D8F7E785BBD31C2BC9D348CE5632654D 2C1740F89D57FB2AA1FD8FA3304EA03F757BB8F498ED98E48485722E78D97B12 A05F3A28438084D1CF90AC4C3FFCD7B3365941C45E1E02CB13CA1E99F7FA1D00 1C9D489D5C95F019AB4CE89FA3B6604473DBD2CE8E278969E0A0FCBCE68C23F6 9381882443D3FC16966555FC222F3FC4B1207522201AB7A15A7A6F22CDC9D392 360BF4C95DAD35770E0AC7E5EFF015F2C74ED7391F40EC94B8D1C163B5DEE5B3 911A20C2625AD3B24BD94D2A42405E655DA47D3F94F882CA2F479437B4E0BE71 8AFA4482C6FB270F8D05B4599A01403DAAA90C01DF3AA7C2BC7E66AB6AA833AD FB6E5EE13E45CC7CE7E200FBFE639F9CFFF5D08512C02764997FD28368969BFB 0876F236EF6189BE73AD827332DF1B2EADEAC0ED3B939CE5BC3CEC78975FC636 44FCBC2CCF4396AC7343EC62E0E4F3DFFA2B880BF31D93ADFE201BE9CCEC8BA5 0B9B919E05B851E0909968DA259EECC6AA0743F25247978CC09C28C4F878E29A 5070E4023BCE95FE0ACCCC01D0EE219FA8344E8F6D7D4347563BF8AC030B9097 41F24D4BC9494915A82EE9FD37FBB6A46BF077B728FB569B1258CEA5F51F36BE 4F4D0F890D782E44748CA3FE8C8A515998371D9C7D2311F192B4B7E7C68FC6EE 3F7136714C282A2570FE591F247A08319CE9EF1E43274E4E57166E31A2ECA506 85350DA31AA4C33C9687F5210BA225EA1007C444FBFA2126769767E47A967884 9F68589E4BAA9ED32A7A466DE35554C132810C68ABDAE536D9D884352F28EA02 8A555D2CE11F30598F44A65E2D86B43ECCBDEED9E4E5B5B7DCDA20EAA09D9FF7 422FC91F2201431A9E8FC624FF44D26C0100183D77BC7E6B1A6CFBD3FA8BABC1 AE4CB0FD382E26BE0A83169B46D91429DCB746A0326243E212F802AF6A56C709 6E70C6C7CA3775C382F911F6DF3D26A9F9F39C6A49A61FB0FDFD443ADEB01F74 1254040BC520FE9C85FDDA97E17CACFC5058DE7A5441CF572509CF872FC95647 9595DF4367413AD5423162155EDBAD3683306BD0FA9A40AA39DA670C51832089 E396B3CB263B9EC95A396F5CC61F2DBB262C41F77C73D66932C4D4775EDEA58F 1D0A0D549B50B08ECDBB7521A29EFEF99B08EBA954F736A6FD7F3FED45F64940 F76D624C3793FFFD98333D3B51773C379576D6E6FF129278BFFA6C1F438F1B04 07D5C0D0409B7A6358E3787DB0EB85231C14C88C185955851251B8B16694881B 6982B58FBCA693A19D7E822B5298C6CB1223F071107F579EBEB70F4093F8595C CFD44D8AAD508396E66CB755BFB2E81ED8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI6 %!PS-AdobeFont-1.0: CMMI6 003.002 %%Title: CMMI6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI6 known{/CMMI6 findfont dup/UniqueID known{dup /UniqueID get 5087381 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI6 def /FontBBox {11 -250 1241 750 }readonly def /UniqueID 5087381 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI6.) readonly def /FullName (CMMI6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 100 /d put dup 106 /j put dup 108 /l put dup 111 /o put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFB83E8A2A6085DA11 61B1632328B94B21D3CBF2E7752D441A2C9A03F6681FDAB37C4B67D5857720F7 0C4BCEE266586738012A2237A85FCD0425DA7E8E8632543F5BD5D50F9DBAAE69 9E053AECA6027559DE42F7291EB381D866F1293107553809861D43508C6F2341 5E4FCC431AF4A9B3660386AE63E877DCF5E513D0D5702B98D58B34897FEE163A 75CD6F5A2196F91CE5060CA5E72F9C5F79D18F242EEE58135BFAB02D5CA430B6 D1B9A376849751A45E52577B1810C4F0C7F6C8196071D5B08FDB731C5384CCBF 03B460347E0CAC959E4A12620B6C2ED62E06A241D1637F418B5599A7FF3C1390 7AF66A00F7C31B4EDF249C56C268EC9D546CD0489DA51B734C8292CE7B3D9E30 71448C85ACC64FA99B2DEA91AA4CBCBBB9DE20833700AF96395DEEDA3FEB7D6E D6E3BE4A62CBFA18BD0471C14F3A2FD025C88E8166A9830C5B5B94624A3D6482 D1A1D83805D0EDAC1C79EA858A523D9FA3356DF42BC01886E77F6AA6B04E4E3F AD107D861FC626F0A439BC3F125D48649E5101BF79C71507FDACACBBB4C4335B C41A5C15ADF1DF69E1D68C3EB9BE30BDD5385F81D26EC8F2F206C1C7032B9EB7 0392BBCA23B4693686AF8D2E1ACB2FBEE81D75667CD1DDB906BC5B675660ABA4 E63429F16623F20B6A040E4942107CCA26CF6C1F52DEED9EC7EB15BE4F18F2E3 9ABDEEAAEA9AC41E9F20C37C54B33F609F5835AE5A1EC9D674DC50FAFF6D3511 2198195590F62B3B8A6FC8C3431BB8895A2F910F0361062DE32CDA9A7F41E761 B09BD8545CAA2D7124B5688B54705AA52E4716E36C0303FEAD38E0510B3CB496 6C30B115C37E02043D47B4ED796C671E30360800EC13F0F0FF3E0DBF5A642396 EB0F39A9DAF0974678EA1D041F08BD73867065DA91B044EF2AB15FAA6546031E 189936C1FD302BCFBE55EAF369DBA4895DD0996BF7292762551A86C8A3604E9A 8AD29E38BF6FD40172051EBE7C694249F3378ED0139D37EEA3ADB66F3A80A1D9 9C3655F054CACE93BA4AD42DC78A03F42455ED1BD5C122F234F21ACEB8FEFF9E 3BFE0DB2DA6D368478299ED63912A234ADB1DCCF1E519AD20772B71F8522B5DB 24E9658BDC1333D76F07F63D81F7A51D12C445ABF698092A24E5E5C36A52206C 0C41F7DCA529BB0A4D146DB6B4B341459FC17FFA357CA5F93DBCF30B61374613 4846D619423BCAC59B7EB40C14C70ABD985754A0094C98350D01FE9FA371B0F4 38884690DC7700C49236EF68BD6E806E8937AD8B77648F552C0C907007465A76 1475BDD3FBE1CF69C706E703226471C249A3448F81C240ADBE4B5474216D0235 6B0816BB6935A2704E851E20C002F85B653BB0700915B358DDC168ED3FAE3D91 8280A5CA5C2708D622B03DC47A70E5FFCAD5A7C8D9AD563857BBEF92A3BDB588 8B5B55CC9B960F20CA4AEB598DA8488004DEDBC9671488011E836D9D8B6251BF 256D08E6F1808E9D498449DF1F18E48B310D561D4DD3146C2BA64D960E66447F 6DA8B07194E3BFAF662C00737BB7222B55A5CC206A1C46F252ACF93D2063BABE 2BAB874C01AEC438D3F86AE37C9D7FCE4077F5B5785E12C1E0B685134CE2E8A2 2E4DCDDAED2D53D13014E428FAAE22447763D4693E82600F850CA4A49E1ADC5D C8DFC16E97B9F6164095CF7F31373B591F815621F45DFF77BFBF89EF60C9F50F 0C2FBBA4EA9602E197B9447FAB6AB57B19B1C801DAB66BF7D263F6572B9EEF88 E06744C1FE197B8EAA71E1EB67716B7CAB30C859A2D1B2DB95ECED02B83FBA32 E62F97EE4403FADEC936CC8DAA161F7B509B2723BA2B735572A80D7D087E6395 6A9D34D5963E3C6E37F307C66D1CE551D2F055BFCC7360FBE93ACAFDE2B1A849 37FD373F62BB23C1A2E3DF61C9452A8C995B03D44D6210A968C6293B4A3BE662 C7B0B59E6EF6D53FD293B2C290436B0C448E7D15A63533DE321643E53C85EF8B 060C434E46A736EA617EA00D185323460E77B95C49070B035194A2E7693C3B15 104ED7F56FCADABE49F27F9A576B354C574B5BAFFFC57FE9AF02FBD87B8874A1 24C53826659BEB1EC50446AC26EF3A95877ED3D81D33A8BC1BF7473FB9C11ABA 0F27B38EEBDF77D3D3EA63AE6022DB0D4F1125DF274B86EF0A4A263E108D6044 7A885F5E87362293A53F457CBA6C911D23653DA7CE4BB7D4FF4481AB97C0DD81 C13515F0E3BF8A7E8DE2CE69B25BA9C185D9BF31A65DD290B0D4FDF40B61E2D9 AF92BC6468B3F5AB5D5B88710C489ACC69198D697055B39AB3DE8B3733825C5E 6E763E2698574381A01352A7042A36EA96D17DD2EEEAFF04ABF7BF7D877B0FC7 B6BA51BA994D431F472B6EC4B4C327399576470A1773BCBAC61CDBF0F95DA6A5 0BE5239B7E9CD39E1E4D27EF6695D1FB56D4CA2C2370509547D6D01273CBE6E0 66A696C35D2D0282CB8C85D7B1C51453A0AD0BC80E1D183D11AA78879643D9D9 A3D0B2BD8EE3EDF29483CC5871426232A20CB058EEBDAAED85378B163425C270 B0F7BB46B7D1B89CF84E6A06791195FB17F11F34A2548FE424DE10E376B39A2F DD9B0BA2F2FDF3ED4AACBD0D60E67C0749D6DCBDE6E79041398DF3FC8D9B6CFC 693B870683CC425C52705902DFD324E157C9829F25B14A057AA92AFA17F156FB 0BA949698EAA0657B03D9538288D887959EF24A427EE7EDE47F304A1A6A715FA 2966273831B5B3A9C11021C153E67A73FA606FE3233C3DB217404C6AED6A4C59 DD4C2A98B31AF5604D8DE8354448B4CEC66022E756B0056CD32E9B002ADC712C 0545C2C16D9457E271D98A4ED7DDE01BBD1856F5C3DA28794D2C7951FE2FE6D9 18643CEEC41CA4A3464D3D3A102653CD6EAADA59CDD44918523B8811C2ECCABA AC0D188F5E07B37AFD56006B10B32EDD179F4DA693EEBF4DF5425D996585F21C 8780A4D23D24FB0618C12DE65CAD42A0138E28A100257978EDCAD168C55C6F07 78A067F0299890356C2A184820A554FB07448395ECE36C45211757552E288ED3 7DFE46CB92EB2070442AFC85864A45000C4854D728096AD3D4C552EFC26DB6B9 C340358451B50AF9F1B35C2E32D495DE85B5848D78940270DEFC07A14D960730 878B5B55916FB40FD805116C9C2AC8C6D4645DA67A978F1C6FE705EC188DBF7B FE7AD6769F2EEC4A9B05306D5BCD6EC3A240D6A29ED07D1D82E697DC8CC391AA 015DB6BCD1DA5C9A5A7BE3C5936681215E859E9837027D108A54F42AB24E38C2 4A7D8CF3264AE049D4B1AF48BBC564BCC88AF19D37DD81CCC431D0C554DF29A6 94ABDF8126EE4FE1DFB78559B9BF36FAFEC9791049C865694F9E2FFB7A308FEB EF0195FAA6BFE7A081B65C5125623903828372F117EE17E588B2FA26DC9AE37D 9A6F0043C019624D3D87AFDB4B90C46AEA78919CEF5D7ACEE316F30EA0229742 55E02E0E2533CAD78CE9BD6E0260A695D776ABA229D89CF9BEA92CE0397821A8 830A557021B3B90CE0B07A4B34C24337FA3FA4A3728B6E013BA01071CA7FA667 6FFB4BA3A28B5D5614ACD4E80E00938C2589CC6CF885A260AF7589240BF8987B 20A19FDAC73FAEEDD93EBCB3D46F735214164AFAF1A7828FE96E2BF7CE1EA46E FC1FC4527A0ADF2B81CA51E3D96F3E786511AF00FDDD9764CD3178362CF9DEE5 F05D100EC21A301F40FEFC3EF05AFEC140A9466AE68FCFD6CAC1A143BAF2B7BF D0DF808F0CF87FE2399CD9D2DD424227CA7D4073ED002CD555FBE8057A797B60 313D18ECDD779FA7289D4E7BF82D95A7535CE3F0F4164AF239AC666653736654 C13E436B526EC5A1DC97E1D85C4EB563C7061AE1E81F0B38BC45B17C15FDB0DA E5F6332721A925D4DD5A97BFF3E3F11D4F4F43BAE4E73A294D314527397F03CE AFD12DDF9D07DAD8D6C8EFAFC2F52E20FBF62026810C0C31A1EF71FBD612654D C68B7A24112F0ABDD20EFF3DADBE447AF9CE568F873ACE72B63283CB26B89BED 4B3315F26084453B1EB0877065A76E7B704B27F93DBEB365574A78E92FDB4B82 D6ED91A1728F571FC9CAB636A6E81D0C1C4F5E3F6F4574B6EED48BB61EFDDC80 1831E2AB9327B37881F0CA5D5265575F210BF4BCD8653B4193F74E3FF65028F9 2968B8127C68CA2919DDF529EC882EE99901146CA629A07B4DC59E7868DBE083 6E546C5769655EF6628FE2EA78AC891D130108192053D5056A7BD06C09592AF9 6310B3586A2609DB94CB0079550358F5547B9FBB2B77917A327EFE3F972C7263 54076627B4DD74638C3105FB25DA246484799D5326EE80503F18672B893289CB 1FFF8D3F662FB33E93025D86803551A8A1DE363D1534BFA3EF968871B19FB189 DAD841C177E2AC98B6B69A78048221C5EBBBB86511939D3A9963B3BF021185AB 0B26CA7D0A779DC2F7693C7E48286BD60EE46615E31B93FB0E6992AE20C792A4 72AD6FFAD6682D0F606807D7AE63A6280B5967FAB889DCDF0F76347CE302FAED A59E1B1AB785D9D0ED695A0D05DD3DF0EF0B275AFCF9EC7031E1357E99A3DB85 B4D137567875F7580E2BEC96B08C97ECB40876000B610E0BFE81E7884C9BBAE6 6BE9C2C612475396BC10EC7FFBD1118A7971FE1971DFD0CB677ECA65DD837B5E C7D36FE9F20A15A941F1E77C11093C902DF5B7639580B9C0E4AAD13518E1901C 1162FA095F301848770C6C618E371A0AC3463D0D94221EFCC0884B21300194B5 97E03BCD5C4878CEBF352EDD1D2173B56C9B6A08BF3F33419DF226E1633CC5CA A88A57AA85E21657569916E9B4B79E51B5535A57B2D6FA3EED1D0AA32DC0165B 12F8F5A681040B456D8DF175AD6053A2954F327F4EB4CD453A056FB1701242C2 59755058640C62632C764E002CE928E6B908BB137C28630A3CDBC7C34CF2B643 FFAFF20E345A86F31756C78A8EE2B9B1C5DAB2C863B29A44190770FD90BC6AED 0C25942BBD6A370C21650947B49AC8EB6825BE65DEFAFDDA32007754DFE0273F B995B8986E505F95E58A3F8873545DDA6F3FFAADE992F3FF7B2DAB76D663280E CF2BA18BC8871A7C361AA3600B192948CB918FEB0F2900AF2BCF169576828325 449CBF0C7AEDC299FCBB061F491469B9ED1D56771A03F9F202550E17FDB15B51 4772B2F06E6AABA4027D13E8730999532DB2475630D2F8EB98242E36F5B45A94 2D8083014B63A806BB9A01906143482C614B5CFBE8C5354A3F2438B2160F6DC0 81AFCEB201EC67F66DC5808C907A3C6CB664F444D24095D9A11D4978A7B57037 87C67552FD59F5713D0FE03462F9A1A323BB3EFF0AAD61B1792CB109CA9AE4D4 D7F7FBD3FB91258DCFFB4634669FA13E03C0AF699165311CBF37D24378022787 87D1320ECF878F859149B2F994E700A32CB7253297AC58753E4583A08A1F83D5 CBFF10F2D26D71CDB20E1C69A666E9C4D23BB0E6BF1097FBBB204EB736E61FF0 C3FDE1986938F8099694B9F998B3C735770FF21F73B1A6B750498BFD21184F11 5E6AF0F1FBB08EAD436C4AADE1E6B815F5E58988C113B4B2335A340798BFB201 40586D0BCD6AF5A08CE9AA042910197F47D98CBB4411A6D435A46F46B3964F85 032D7F8D880732276A8FD24DA772F642F06C9F3EB4C9090AE4A3AAE67D8768A1 7B2A57E15B7FC626450372F40E3EE28D8D997CCC8CC89C644461D1110740407E F6D884A0503E05AF830994AD0CEEA924D935749F6EE9F2DD65A58ECD59229918 A303C90E19E9C411FAF24AD5E9B786178F8182692CDD508A4755123B4A594AF1 A8E7287456C1CE2CA485CF4CF9DEE5238AA7328DA204816F98B7EF49EDB30875 3CF8C48E0465BFFA8F2A1CFB6A8F165B63CC80F54C669D02BFD9A0EA0FDE2B40 D69F0101AE4D2C10185AB10953019FE7D373BF40C2F6D4E36693F118866D1267 12BA7987ED4313E8635DA02A4FC1F7815105F8EDFE8004A8801CC1AFA8D123FD 1768A6C39E838BD489C6BEFFD3BDF650DF48D5F8D99DD5A2E8AD235F2CAE8BC9 C13AE9B214CF3FBFAC7BDFA54CB6E675273330608BD35600775FFB2A96FF648E DF55A78B43CF54CABC0DA8D574CC5C5C62E9D658EC62035EA5028767749E48D5 658212BD39C7E76ED0C6F3E0A1D138A0DB8BE574987AF1E43070F1F12C560009 F48993FAC935EB56A5793BA13C28293601D268B4880F9BC33D553FF3B6A7900D 37900BD3B4B558C84BBAB09B4BC2B14D32E49596DA090E586E28D560903B9744 7D014EF2A6AC4F711A025DBBC841F1C1C93BA1F8327DFE33C803A0993050D590 C7AE262261DB7D04B9DD91F89927161A69E14BB2A48D29578410E312A4793101 B6CD65B298988AB798F45B76E1F58BE24DB207C7E07014E17525B436D41FDB28 D1072CBEB526E17C72DDA00ECDD06394940DEE8BD02CD3C81BFD12BE0568A459 0F53010A0655942C932905FEE87183CE357887E2ED286DC1E89F2F401CDDDFA9 B418F218D4115043892882C09F2E3749D4671E75AB1AD01C78F59FE3F54276D2 A91512C21C68180CCC0E147E834002D7799FF393842CE88BEA714672E1952C9F 7CEF2FD0115B0E292079909A7775769341A7888CE6063537ACFF225B4F396972 41BF46C599D278906F3BCFF81DF941BF5888DE8A53CB0A2D71610CDCDCC1760A 7844F89FCBB892AEA853CF5D967648995559EFE852C95D2EFDA2CF063500F88D 2C83B615618831267BD8F5438DC53C6433CE7347E9C55E103B450EBED6229219 20E979C00B0B9D86345FC3A8EA2B049B7E148A7AA1C859AFE93381DA74CA578F 8FAAB28175D5B57F6A74F9869B2F530009E953913C6925D0045CB2E817A17742 3C5B7574E9BF3BA7B769C161C2496EA2D346B4E19E434120FE92A0ED3F4A9ACC A8BFE55F04D17DF035D01FC0B06182D8C27B6D32F36551B9AA56D61FB6A34254 D0DF918C6716D8D05B973C8BAD5AD52C06EF3C6503D4E0F7F791511C79AE74E4 4B707612149D583C5D96E534CB45F1E7CA5B23642B1BDBC881FD8E4F66CCEE96 7CC0509B5CFB0B3596682A81E682DAF6AE58F605FD7A1F414F62572298AD8491 B76D0A23B4AC731FB8E7682F506B5CC02F7029827FFD866EF4DBF56E07E7743A D42CE65B38EBDEA193CE5B172E87DC88452C3DE192E363EB9DBEC4EC65F53002 BE9E94180F73B53CE1E8EE9333DC86DF5FB2561FA1F9B2511962CBEFACA739CC 38A286651CEFBF451FF6568CFFBA8AA68555181147C1CDBA18C4F5C77BA8548D 2B1BA37E05EAF7F69879C3ECBD02783028CB1A8649842EB71023F89CEB36CEEF A9B04E9ECB0577536B88ECE7C1D81B0D6D5A478F8E92DF83D194759437088D7B E93C6AFD0CC6D568E60E2F1265A6613F97A6C4068C8EEBA70F6CC4E88A80F65D EA7B498395390A74BA57221B86611D3EE5DC4632F139CA8A15E5B9D2DC97088D 7CC65197CD93F4803BE4246394F40EDC2CB4904BC273C597F13C8DC680245A3F F1AF2D7BCE5D69E9CFC81E5E9F46927C5F55C719AFDB2CB1AF2E4D55B0E3ACA8 6BBBCF253CCFF8F02B8542F296CED0EB8A06A88549DC959E22C3D6C48F310452 22B32C44B046A61A4F7F8AED613DCD3C464DB2280D56E517CFD16DC32C83EACC D3E936D2F3A883B265444D818393E30EE3AA59E6FA73DDC421F5A0FC8442F89D CCE98189ECADC080F1973E14012C2B87F6A8289D7E168092C539BD54D5D3FFCD 2B5E02399614BD5085D49ECD04E14FDB8686A39D6B3F7FAD25D751CA66148781 32296AFD919D83DF85BA4FCBD7FFAA1D831C8897E39819D72F271AB142F1C4B5 D94BB96F64B76C0C8A2D1481910C9571078DC7A4E23C0F133241F06609699988 7AD4D12DD860E2A8E037290EACAB5FC3D90C30A01449D0F3EB9358A8B1E1C2D6 AB92277FC241439926F02B1D5E36F4A5E94C0430A0400E3EDDCCE5BE60B3AEF9 BA97205FA0BAD80C3EDDB35945946E27DC9682816BFA4436B7C995E8353CA6CE A532D8D57FF0B407C2AD1E917998E0394DA34FB91A4D0DDC48A5A864FD0F9471 93E02919AD6C9143CEAF479DE58330B0464489C0F01853B81FABA80ED0589969 89300C1C867B4F93EE674C7A14924ECBE93CA7FA8EB6F56CC66772E7EF7E7638 50BF18A1F6DFBE0C02B70E4F1D96279B9640A6944BEF9444EDD9832D3215B3B1 C15D47CAD873608CC345C296A519CBB72C813DEADE0FDDB2D6C1F993C032B8B3 D3CE0FAE11818134743C7BE084B1D96F729519FF3416EC4D41472935B0F1D6E3 D6C341A7FB3CA407FEA1D84BD263AB72F733608C040813E03703D90E3EC506AF 7066146DA28B1808949DE44AD29EC0C264EC882EB451D77AB588EFC3F1CBA1F4 87858B6C8422AE980A5C555C62B031DF3F250080ED54D4A10A9D0EB1F17A42DF 08776E31ECDB3C350F59F69A6A3D94DD4A12913ECF0305143C77819CFEA5F745 5C546D2D992503C1DD8AA91ADF50B9DE8D806AB7E4CC2BAA1A10B105F879BDEC A7A0933083C0DDFC17451FF149312EF4CDF86340AEB0CF84695CAFE8041D12F1 27DFB2224DD9DA35EC4ECB7C1DA19A19190D66B71D9723A5F69209AA83645365 262E9E882A4AB8389C0F73D3B8C1192DA67FC1763B6497A37808D8F26B374005 0BB1FE4ADBD13108FDDA982072D739DC82FB00DA71EC652385E19A2E2187F31F 381B1CEFA673A641E49943A172A217671D2D0CC5FA624D161759FDED112218D5 6AC8F9FCAE8D798B5D1C7604493576839C6C56DDD3E417A156AC9659118D90EB 59378A8D3B2AD0B9F194EBE1D6EC431D702C81E28D2599A9B783147AE556E7D2 31A15CD152DAA60493BF7DA50BF8276F4478F7978F9A4E0283C06D1FBF9892FB 2C7A02BA1B220BCF89B6B119A663D8840CEED17C5A8BFD7462484AB930332857 F2DB8CD26EE4A3C3640C775D86B86B58AFC816D4E66846F84383E436580CC6A5 99DE7C83E24C12260E817628ACD3C1E8396273BD08C91772B7F3DEB5360FD7B4 4F6619B03E70B15F0A128C90BF9F6E391E4EF22ACE7E54FFBEC9DA3080065389 1BE4F130CD3238FB5FE0C733413D88E9E36CF40DA6F5B2E1BC41EF5F7CB49825 EA5058FF7C49C5FA11F9F9F575AB4D8237FFC2573F94B695CBE9BC44A1BB26DD C6E55627BA16E5197CADA519CC7302DBE77F1FE4CF68C558D8F6E264 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR12 %!PS-AdobeFont-1.0: CMR12 003.002 %%Title: CMR12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup /UniqueID get 5000794 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR12 def /FontBBox {-34 -251 988 750 }readonly def /UniqueID 5000794 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR12.) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 43 /plus put dup 44 /comma put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 61 /equal put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651 F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224 FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B 8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0 B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A 966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4 2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E 56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295 EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277 E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973 5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F 847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000 72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6 3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2 57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7 547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88 F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535 47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444 24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7 64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204 49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7 FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97 CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1 7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5 459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918 1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1 6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846 67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5 71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345 2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E 3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801 F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8 16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542 29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327 0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02 A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346 39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254 28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56 FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9 D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8 116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F 59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74 482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45 4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A 323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17 C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB 5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179 46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1 E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3 4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32 5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735 9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117 52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2 655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42 FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442 87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107 5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6 6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366 B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03 3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34 343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046 BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D 775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5 8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0 7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5 E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584 397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65 7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689 37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257 2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E 37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817 DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F 89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08 90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1 EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7 FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C 5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B 8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665 54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6 4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8 86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B 08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54 6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC 3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1 DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98 DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E 748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879 0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA 1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D 6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422 E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6 F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76 FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016 E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D 903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B 6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21 2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66 139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4 0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9 E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1 2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6 585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8 D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E 51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3 A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E 512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5 F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5 1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407 1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55 BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578 43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A 2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51 D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65 8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991 9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8 BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925 969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A 3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A 845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31 E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D 6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407 E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93 3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733 52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6 F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F 95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149 AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8 39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4 8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3 957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07 55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F 53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106 CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46 BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1 B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5 218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521 3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86 31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9 7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195 196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9 1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341 ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563 82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651 E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A BAD47EE10B9AECC871B76227228CA161EA7B61DABB252EF91E607AC8D3F85774 DF0B1507B60BF52E4E9BC0FD04400A548D553D4A6EDB247875E0A2E013685C51 D23EE8A56AF57025AD67D929CE8BE791BE91A4C4D9F00DB8B4F16252C04F7BC2 02236296A9052306639F4672E90E3B9DDE466EAC17E200523B2AECD6C05A0A83 66D4EBC86C0DF27B789D5597FE88BCDAD2925CFF60F5A8EA618FE867857D585A CE25A158AED63B8FE391030C518693AEC75AC0AADD0C11B0065E2ABCF51132F3 82E3718B9A9FAAF727F2D8286177EE27BAD040C66D0D2D7C092B45D9330265B5 6B5C8E29F71C9EF548BFA4BAFAB242B26455E4B7FC1882D68E408D25E6F58EC3 03AE9B7A5F45D61E02D0AB82AFBE793D708ABEF45FEE865969895654C00A5FA2 093A297AE74BF625A96FD85F58FF994921C9F1276635C8CB65FECFEE37C77BD7 FBD692DBDF1079AD35F8A8198D63A3526ACB37FD59AEB59228CA89E14E6F0E24 C7C4257A928F94507621F887A05D18E3FEE1167C08592B4F4C595BF0D7C91711 C35C467AF3C1551BEE15954F01DB19D0B2EB7BEB076845EBA02E163971750D97 19CF09EBF31E25E480BC3685C72F9478BD32D4AE7F4F2363AA26CB534E109B3D 81F6ED00BF7322107CD00C968A4879499798AA0C0620E1CD3BBD274D907347F0 E8F2FAB76E71A49DD0549F2D3647D2B78B5FA8C746E8728C97F121DECB3918DE 8711555B27C758F8E8B9E3F7E09D03F63AA5200AE1B882EC083430E914E6D85F 559AEBC87F53164D27F53F1E555AA05B5B086334CCDD73DBDD3738CC381E19BC 4757E8DBCA477277C138B888958079B3D42AEB55365084750516FD02309FC1FF 0D58BCDEA1CF93E93BCFADD5D86B24491592E3DA3A9CAEF8DCFFA0C52EB7B49C 8F9C7447F85EC0F7D0FD1EFAECB12F240467D8EFB1B66A4B0B87EB0A69788953 251033572E9C74C8A94272934C39E9783E23679798FB8BA9FFBF8DF2E404D2CC 5C7E4DF1F5F6566F6441B58CF541998B7B90A51B377B87985B67E41312B06293 D2BD9FEA8F3707632337668580E1E62828092213E222D12B9835FF7BEF2D0E24 5291E60AA9A403FB906854843A3404C4DC4A4C5F89CE3F68D73959F25C102676 60AB78B86C94BF335B9F89AC282BCED4D7BF525461509A69D75C4CCE2BFE8937 A86DA8F1B0F279C8B8EE47FD44982CE0F9BB29D94ADAF6DEAF14AB5CC0EC717D 38219D4BD8C34C4F0FA60EA7A3F7CD2E5C8BC0EDBC9D59E20E3D910B04B4239F 810CE349117A823BD363B1C583BB4ED395FC0A71A17EC648BE5456E0B3671C8A 4F338963519179CFF1FF9938ADD2C2C0694A9C6EFCA73E6774DDBDCF6F675C68 6E6E247892BF180EAFB4F1925C5D727A38528A8580139A7D5E26A054373A9C8A 91FBF5178376E79507CC4F91DC84745FDD23E89177DAB45B6DC5D2E3F027C9EF A46E8CBF3BF0C2BEE116504274F968DBA297644CBDC3D85E3C310CB92B3ADD04 B33276319B168B3D5E7B0E2E2490D285F4D478555F16687096F67240277B99D6 DC5DF5BA40DA75CA99922F6C0216FDC71D86246A86834CF9B561367B8F74B44B 60856B1DFCCF78536F1AF8B4FBBABEA0655823CFAF994AE117A94785A970C0E8 CA6EE4EC6E7547F1204D4651AF0518549FC0E74DCB6A83ECA28CD6A3AF756C22 824B71199EC79767A984ADF93F3AAFEC9C87BCF00E9B43E6EBC1DD2155FBE5CB 16B2EEACED26AC7921F419095859E0BF74CA6BEED6EC9FF6942CF30A0EDCE2E4 6C90032C71107A9DADA802153E4C1743C127BD722D4A4F11F1B01CF873D3A819 943A446DBCCD5D92B4B8BC4662DB3FD268A7CF422A836DC082314F2654E52368 0AA5DD774FB39012B048BA5A5F86C79D742D0B68EF4B81A4C69BD9C84B2333F8 D5B07A11A9068BA8FCBA60D2AAED8D047C6EF86D86C6D6DB56E9A8FA02BD97DD FBF16274A352A618BA09B03F5A98108DE3495306C99859117B45B337DB038700 25F0BB85E71D3AD37A50F0B7FD308E52742B12EA772BD55E08468730BD7BD892 E566CAABA35B9E1E9C50F935906286BE3868B67A567767B6B41A8A1515F3B9C7 317EABD7C133AE7BB768E79F1974DADD521F082C96482B613DD3B81A44ADD1FB 03A1A1B1C7A8CEE4F841D00B8CAB8C579A3DBB773D5EBBF5F467AB9EA14A2CBD 8F99219198B10E98C96759D0F9F7817C68A73A52AA1E4326C43B35734CF5BAA5 4F2D7476D94D27891F59008F732EF386F2650833F9139EE394B3D488771924DC 2F1E866BA7ED46F2B099FFA4ED98909155077DB505076EDE933EF0702E303A29 E40D1A34D0424D48EABA6412CD22C2CD9D10C8D0AB02C368426F18132950C3C1 417F19D6204D116341169E891A5CEF0192782C3B6423AEE4A8CC94CA5F663375 8A2088A982EB8FD864B14D2E981DAE86786BDF19EDC4D5C430E5F3E5E8D873FE 624A8F3DE8BB485740C988AA0D8718D47EFCF3437913113A5B390E5778710A3F 266F98046CBBFC24CDBA133FDC47091711494538067509B89C71E972696EF62A C48C29E216F321E25C8FE5F2179D1F0EE73D3920E864923CE27D61087924C784 348AFDD245FBCC3FA3F99299CC35EB2E7B0276D31391B5D92DD95A694245F40C 6BD42C378FF867C159236CFBA0B1923D18CD03A3D99401BB571F6F42DC99A6E3 1C18BFBEC8C453C2DA199141996C2FE8143906C68788EFB2CAEFCA66EC78BF26 F0E466F4FE5699CB42750670B9CD4AC7CA237BBD039B177EBFB93703C87B6A42 A60EF6E857920BB054A10000196E645059354C56D8ABA28593EC553043017F82 49695FA70BE5578E56ABDA92631E6FC4A5417584C50AD069F5DFBBD4C33C3A7E 73E06F3DE43F601FFF3854EAD9269F26AF0C6B4D4808666E4D91114D37A71EEB E40C020F3AB3260E77CBC769CDF5DDD4EFF63ABB930D8F24B8136B1E88D5C8C2 9452CE9FBA0A211252909D3279441DD4B088C1F1ABDEC5EAB8F2082DA1B15234 268442981B0B7CDFBC9D64C02BDA12960FD7B5C158C982D4BA48BC4956D10CB5 7D1FEBC38D26B301085C3DC09A40A57A016A4211949B62E4F4CA440C2A22786A 4019A3AF4385467421AFB2663370455B5D8A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT12 %!PS-AdobeFont-1.0: CMTT12 003.002 %%Title: CMTT12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup /UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT12 def /FontBBox {-1 -234 524 695 }readonly def /UniqueID 5000833 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT12.) readonly def /FullName (CMTT12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 58 /colon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 79 /O put dup 85 /U put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0 7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3 A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3 4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251 75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0 9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507 098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02 ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581 DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B 5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2 F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914 2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4 E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21 C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23 42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D 4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068 95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9 830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FBE3 FC1F39A39F5613D50934419B95A4A2FE1B6C18912CECB86726926F6B77B5C3AF F38F85F974A2D2145BE010EBB4A390B842BC222AD4A0B7FDD882668C04C51F19 13FF91E7CFA0A0F4E99A1944B272E0291BBF3F9ADFCF3F625B87377AFEBD9F11 6385726E908BAB7D1357504048C0F5B26251A1FA52F08BAE1D64B9FC32A684AE 896F3DD0AAE9624050D4DFDA25E581FB2630E8840AC5322D38B92F3E77B55CE2 91ACB8321BE53A2C7D274D63CF0C68AC833BAF4B22B26EFC197D4A893A5AE492 660D995DA9294C16BED1113CBCC18AFCB5968175E80C2933E0819A4A08551900 25B0DFBC2D9DF1A90608429E8B3099D91FD4D7A1205D9D7610C2595E5B089E1B 9A97FEF3E03191AC688AE6DD3081EF8B5ED16BDB4BB5A2DF3DBCA0A1E8C65A6C 64698927D6C6C1B404819E48BF00F1A7393FD6C0751A7D639E32C569264A6A91 743A0907C329A0C3A6443795FAEC0EECC7A182BF5B61D4CFD11CB1A45974AAF7 DE60DBD2B69BE0D1124B78BAB855AECC20193DEAE543E77F9BEE110D29547D4A 6CD2180E4304BB80E21ACB4F3844D9E5F789B7877A1059A8C448B176F8860C11 6C5876ECB9D61F83AB6FF680531C93DA8A0CC8EB410DFA1EF42A6E308FD2E86F 8012D9EDB224FEE86E3EB98997B3A27330D1BB848EF254117B1A7E44502B32CB 9443505ECE5B893BB3031F2C5091DD50E1FA8713CC9DF67DCF2FEF968D05FD42 780167DB486A77725986A61AFA3AA90F2D96B45F09942544FEC6D6C08811717E 7313B7CD4AA5514244FB22C96F14DFAE99D82BF6FF69D5F908DC4C7A15021C92 A497D652A3E2A02FC24FB50B4D828F39DE1D386370FBCC10DFF511E4651E9A9A E9A4E0937E10684A78B642A171BFA6E82E11A42BFAF6B2C08AF8A15F4A4DF3F9 672689D2CC661949DE98264F9AAC86B920B32A6C15FC2D84BF15F4D098168A23 E98B7DD1A04B79FF4D2EDAF3C954A1C6EDEAA22631832BAE6BF131BCA0A5C010 AFDE02F807DF1C38C3BEBF20B37C94DAAB44B587B805D2F6DF7765ED0B000DA0 48FB65FD8C7EB079C2F3A0655EA208F9309BED538AB64FC473E4ED1C7F528E03 9EF496F6E1B7B3D3549F555674C14DA775CF717ED63B2B6F4103C0786550F458 14C7DAE16F3253FF767052DF9F30C02FD60E4EE1C19BAB7A7D13AB414B6A1F9A 6E7EC8B62C1DEA9E78C46CCCD5E5AA1CD48564D4258C6DA4AD306078875FD8EE 121E19CC120B69871FCA8D50C58E358123515BFC6EE2936C6BE0564CD11CDABB 72E2CA769E5D530EAEE28A638A1F2F5D69EEB9880B7A2245B87A8C20DD87FD96 0E6B6A09E5D995B69B3B4B9E929824EA8E05DE48906B3B6DB1A3EEF03F7DAC57 387CD2E4216C307165F33BA450A274BE5377ACF2BF632E3010F1BC42EC5FFCCE 9421C8E9259DE13BCB30ECE05E4F37365EBCB60563E3E2FA2126F3A7637A71A2 B565D9AE82D16F0DDF6F5CFBE3CF53B5726101D57893C89A6501AB64B569CEFC E26E4A0703D69F2220C3397B388984A044F772E59F331C6E87F207E190012F89 CBD7077EF2213E12E67DFEDF4F1E22F00C29F563897B117A3D578BA261CEF8F7 D147B4877FEDE4F5CFF2D62E6410602B7F76B645982CFD296EA41C411E1D073A AFEB01371F62ABD528327CFDA18EEEAED406D7FD2562BFA420347F0C48D2E13F 6268D194BF50A4316C23681F747BD4684859FD5652F490CD5CFD18FA87C022F4 EA939E7AB8A1ACCA17562D669C131DC655012FEB1417FC711DBE488D4621E78A 9084DF3F76C597BDB78ED95CDEA58DFE0EF9B9E48460E8BA644E2C5FA56773DB F41954205FDE3B7F756A2B3ADBE329D7DC0BB7C9171D84A6CE93A8DE69EAD34A 2C5BBE27773A7853EF42E4EBF7C35910D06CA46BC426F710560A9BB88D414ECE 7B60E5FC316A282ECCF2DA741E4D9C73E9F72BA19C26CA5D72216EDF26E6C2BA C78FCEDF9CD0AFB61F0060951E935E02A5507C1BD965C8AA84E6EFA7086F78F3 0CEF02AAEC58F831E7AFE251528B7DB0B9B149477A61AF49AE45D8192406236F 5341732EECD50172F917BFC2599281952E4FBDA438084163C27F3BD9A858EDDD 87E1641283886A2309978F5DA02D6AB4252C4E0C9FD6C135AABD5C2B6D5B95D1 6A1F73B8257E1976BC549B7BE91BE901011BED60599C9E5EAE4D80EAAFCBC0AA 8A46A26D8D080870A28AFD09A32EA03F543D7858E2065CF484CE9932F34DDD69 CAF44CC3A1B77CAAF77A3C5FCD7F2C13929CF61976766EE379DFA5AF0587D4E1 F7AB4DE7397BBC8A4C0EF7548344922828FEFAB4F6CC28FA5DE2B2BDE1686FD9 4C833B92E41934AC16415E5ACF434415116D288EE253F9C41066785F72864C4D C9667B79BD091126FB4B09ADAD883763D102775E072BD89799ACB65DAB7CB098 6DF1349AA017FB394DE46AD177F08593EC82A83DB6FE4117A28319FFDAB5FDA1 30BF5EA701C95AD40D53375402FA4E93704AEB7923405E3F9AC71166E3822A3A BB70CEF3BC17D9D1239ED9C002E3060A22B886EFC27F228ED504C906D1709B0C CCC70179A380E7330EFADB37FAEBA9176AC8FBC61976942DE1EB9F563EE84987 19E99255348E09DE7425DDD7AED21D6AF69B7D71E69F06DD65DE92E3B0AFD624 E6455F1BC8BFF6CC40BD87360E761E04FCEDD1A203233FA11B9428CC372F860D 358AE0CBA74762AE685F101FEE117157CEDE6D1B22DA0DB9BD200EBDC2F197B0 E72CAABD5468B5B06B8F2E739A7D267747BBF456F140E6D4ADFD0A23AD5B8998 2B18137903C90EBBC2B9A5B5053741CE32D1518C59FDD6FF3BBCA8DD22953A0D 0DB3C24628ACEB35DB2BFEB138EDEFABB4CCF90F171AB835697791E7EF54AD25 FE82E7D8966992E0C85D0BC622011C57BFF49BBEE4AECE4C99533517EB6DE0F3 5593204CE84D56356202C52224DAC1C498CEFDE8C978C2F9EF60F56BDFCB248D 237EF2BA57D7830E25E00B786BD92C7A5C37A4866A49D5F490EEF1390BEA0B0B 2E90F66EA6E293707A1EF05659150A0E4988BB5B5144E3123C140A03971E7799 45F62557531531799E6330668EE63756261555FD6CC7D0430D82194CDB01A2CF 6AA119C9AFF3F220D53FF738D84C53A410874ADDED42C5910D428113CD04FF86 E8F1400B791CBE9001D168A72D61F17D56987B556A96F0AC2B75F6B9FC63E5C1 632D718009429A778472CD3D57B442DDC7F9EA6AA2D93026058D61B30D952107 61D43EB2C25A60051133DAE6F3C454FE170525A2CAE45937C9BA52751F292B42 3724C31AE7879F7D9F0135CBEB57B88696B697662CBA54B2F0AA66E2D19F2C95 D2306BC8D1C69C7EA3906E8F64C404454A992E8C3A114449594EE917035A2EB7 E1B3A3B657930646C5B418DE0502B5CA5A3B50A0174D1AD7C2087AB873060C4E F27CE5F897AD3BDD2F883A23D00EC6E60FE27D5D97F53F2CA89DC01A1A46913B C24529CFDDCC1006FE7F443509CFC980962938C011EE1A0C6D7EC57E8CDAF6DD 7B3F010449A4C1C14AEEF3F618470BC2754C0A3BBDD3C6178498F21342482DBA 00ECFA1020C3FF13EDF2CBF82D074697B3319FBDD515CB5E9EAF886A9D1A8EDC 756EE4C67D02B7F438A3687B6732EEC9ED5EA55F7B5F595BBB2B56A41CF6387E F8E2A9972542EBFE595C075A8C84F68416E49F71D05693E15373EB8A16D9A75B CEBF8849AB6D1FCC9E5F880046F421BF00FCC88F48F5E4FD960BB70D1BE71319 074E215B012B231CB37748AC5572A99D3AA1A6D373118264C79CB85B2C1B9893 8233BDDBFAC5791AC897508002FB12CC917C1E20DE4294B3DC7162DF366189D7 2C57A1B2D9948356DB6B1AD0FE30B109ECD6CFB3A2B152CC954E7E03307EB898 C62BD7E978175FE02579E4014C2FEC8594A7D0768B07BCE5B7C741FB192E8ECF 2936E74C532EBBFE5DA96A5E84B2EFAE094C73B8EBE914DE6C7ED6483B477D88 3C45D8DBB4EC5EA0D606B4DE065C36BD039C7A6E03F7C65D999A700706CABB55 1D8D043A7E74780B7F9514F799391F13B52122971363FF5AD8A9DE6F56E7BA35 B34EB84BD5400C6A68A0A1877CC9D801A385998E8D64F7B92B3BE0C9B370E081 9C5E50321AA2836E8D78FB9B08AAA986707757FBBE17A10434C56CA82AC2E055 3BCA1BC2C2AFCFDF64408AB125F5A293112ED7BD0F12AAC6FB43D514D5730E9E 6E1EA836F7A8CC9F913FF6D9A7CD767C726E7BF22E0E6650CD8C979E46282C67 357714CD457DAAA9FCF2527BE5E1A6B0C0A5DB5CF3A2460256CC95583B12D8B4 6958779F572260DBD6BFD97AD64A5E2351B9F4AEBCAFCD2A42BA9DDED7044F6F 503B19EA0921C81FBC5C8FA055E36739AD715F36F8072D13ADD2542B80700905 40595518C09EB6F89E9A28D707C4EC622455A019D08FDAF440B7C1A4EFCD7DCC AB4339CD8EC0BC4EC945545BC694DC46BE681974FE5F25B6FF0950A3866C43B8 92F070003046C48FF51D63E004674507358EBBE842FB9558B5C427D0A7243BC9 536454D218276A5D0FA4EA4248E99B4DBE0C4B41515254A8B48FF9F25FB768B0 B3A942C021B2275109EC3F053E602686EE6C85E8945D23E876A5A2E7EE0C0CC3 F3DB84E39AA3DBD6ED54763E6999CC3CEE478BCFDF1D48C20E18CFE6EC4603D0 F523C1327F0F770D81D3C8EE666696D57FDB731B8A0BF509344A73C1E22D55B8 8313A388F17C17D135A9B8DFA086AE438432D15198E34987D85AE3B082B0F3C5 1F24347D24CFEA31E611CDDE5B342ED95BFD2096B553F832DD7B36047D430F7E 5DADE7477877D3E01E03F29C59F8857C5D44D782BDBDD5EBB5FED8F1BE58F633 728436106A70DE61C195F347BCCF1F53FA47091BE97C11285827B18F21616CF7 B81BF8E4E5DD112032FFB4B6E1B0098CEFC2AF70AADE949E99E1A3D64C95B037 FA9FC17AD1F0D6E56BB4CE6D141283AC268E950A8876947EEE5151A21667C2A3 BE3CE3179BFE6835CAE0C01F30F54AFDC68F680B8C23CA72F40FF08DE6531E5D 0292DC4E94D4E78F017A628A3BDA48EF02B87A6960010843F52EE98AF7127CE3 E59AF0C1BB68C13555F652981168E81632692849239384DAC1ED44859B6CD3C8 C781838638148B4DE6A0CDD80E1BA2A39AEB3FBC6A97C14231B223DCAA3F7B01 6EA92EE45D3C10A5DA6BACFF47253C6276DC7F0C09AED0BE429D51A711B72149 27196C1DCD4E81687CCF3272A593D427D238F3F93B982A54FCF06C66E159EB9E 43233D482324E68C9B47E68C34022866EB26988DDC47AC5C13012CA3995FC401 1539C6A82848170312AFA2C922D9D1078EF9C5E036AEA790C38DFF7BF4D1B05D A751B6C9546A49A4281312AAB2D4CD3F25290547C59AB6439DC9A724CE7F90CE 918D4FD36AF1607FD79681405E7CE96F85DE1703DE9A2F273ADA79626EB639D2 6C5DF6FE38899222ECD4284E13D3F81F938A4350893947575237FB513DB641F4 2A787DEDAB928362E28321564046A6211BC008D518B7C441083D9FA264835E73 BCCB455E1768786CEC09C1E1FEF15B30CFB03EEB28A7EB298E6345E7452B499F CBCCA28123C56E09CD5E8C5A37F8F4892E42D4D0358B380B667B9093C1DEB84D 4B3EAD8BB5B66E25FA50BD89465618AA7F9FF5DF5D6ACDC49FBA3A54215197CB DA1A381520CD064CAE4043E4217F207C7035613FE17DB48C04CE6D2459205D1F 9C41002A3B07BCE2CEB2BD53630190022EC6BA96591E6D23A6FFF80990C4E862 8E918C6CDEB767E08D81F5B66F1D653D53BB5555CF6E0249350EC0DF44DED506 E5F37D0650FFC18DA9828039D54A004311F0ED35FEF8702CAD0791CAA02513C7 7F1B456B57CFA6C2F68A3C33F0E7D362B790E57001506659446993E662F66F86 C179D632412EE208A0EB5401304C9B7DF4AF8532805667CE622AF60384C22A68 7C779D2D62DFB72D659224BDFA8B22000F38573533215507C4047E11E84AB87C 75C4ADA3557C5AB48080A7C4AAC60B732AAB2589536F7D066D4327EE53C4857C 1C634FA49CAE08B666C7459F135C9E9B42A4FB08887360D1916868BC4CA7ED01 33F692CC68ED5144E855D0AA3881509A6D4628C8CDD63BEF553C6A3410A34AFC 71A09671F24C6B91A98686091CDEF752698641BCDADC6127EC8BFE0FD33A3658 79801DB2A90460601CE5D2F96BB74F5E3F01C446325DA5FCA081ADC443A48BAB 31F2078C03AB494F363282745771B97CD65FAC389AFB91CA27F0E9BFEB66B8FD 71B4E987A4E166A89558806D4EBCB04B0BC0ACFC9A75C6931CCEE9C42E11E616 A7AAD602AAA64E374190AE12058832C42B6ECF7FA368B57DECEF8B9D989D1211 6A766D587BB0F4324E2A6334E0E5940D3BDAD53E315438A7FE08025B5CA3AB1A 543F304F59461EF15547E9B11CC5B7593922B3E39231F1C88DB007803943C8F3 B006FED06E67943FDC62D961F785D43D431890D2BDF4939B5244013D636AA781 AE2F1D817979E3EF48858F03734EB49A35B008B7D5540BBFCBF1B4B14CD44044 9E1D593F674E8D9B07E561F94EAA805D1EA75C5CABAFCB69893068B0C7F9F5C6 5738D627FC773AD2C4A24D4D915206BCD530C820197829AD21FA1FB25C68F335 A1BE51B5F61A74769508F6E743EBB65A2588F2C0A513D5287768BC7E6FFFE6FC A55EDDDE9B98ED57619FED9A95AAF35881019933DEAB7BB72BD8DDF3B8D2AE37 943B12FE3CF7081C84196FC37D7EFB8E1C7785B219509888A170B6BE583E3134 464FFD4AEDA144056032A850B7535FA1E3D2F2A4C4392F1B910F8BD865451958 678BB7AC7F6CDFEA278649351EA80E9F9F98DF4F160D390E34682F68F88D3B82 0A2EFD392805D8C78999B9384A2D49C9AB6AE39086B99AB5187850AC5ECF43F1 9800826B769FE8438B66B7659F307113E2D2E949FF6555E08A4A0BB4EE3203F3 669409F8C0EE407D885E463BD02BA08ADFD2EF9D5AE8D3780D28A9A8DF587664 5590360120A5B18DDC301032AC2CF11F31BDC3B6C8B9B860D2772CA1953BEF32 8596F70D6B6DAB1DFF4B965F9A6167987113D6522BDB77E9041E37C0C8013054 2D298FB6BB07B7B0BF78906E3F1ABA803DB0F92111B0FB895842C4568881A1FC 14EE94A8BA2CF41649427241FAC694BEB70A3E428648BF2BF63D2CD3C9A05ED3 F020636DCC4F5C409B72E87AD5B47ED932C12B884E73CCF5987733F8D8E3F990 500A3F85B828401CBF1662F5A3189DF5B11DCD587D47FC8C98EEE3A6844F0323 065FC3C59E7AB1C1F555150F0C7E4DF1009AB48CC5D991976051BB22DD0BEBB5 886888D4A6C511B50AAA8D9A788CA045E69DFF3383A3681F8ED5CC720CABFD6E 91D6A4E50CCAA0581A7C8FE39C76E102DCED9C80BBC3B116B7C011F1D1739AA9 B8C368D73F2B7DC63D8C1425BCE7B0C873ECD2C4C2863C72D4AF16C5293599F6 3F24E655919054DC900685CEC269BDE6999F1C6EEAF4B6B385549DD18EDD2290 BAE69C3376859F39DEB42C9A858D44BFEB87E2CB723D8D8C0EA047E4C3BFE86D 83CA6FD2D245C28B9F396F66C09F88DCAD8A9DE576F9267BC616B1688EFA1C05 67041DE3A3FE873C6C4D797559FAB4E28D8056228CE51DC2FD6013C56ABC31E2 8621E02134D1E992C234D05512444A8DA9BB5B4ACF7977EEEC6C46B2D6301DBF 3AF91A92FBA905077B9BCDD0BB54B4C8ADBABF58B0BD50D51E5009A2D947E898 E3750430E851B4C090E488360D97B0860BCB757483BA55C6CE92EB8EFA4ABE1D 3B53421CF300350D827B68884CB3EB0560E87EA05C938D61E23D3C1CC1EC304F 0D8F61ED3701CE0D87203089F627F79D31A0F5C3A71DB2D05903FA54D096777E 70ABE6B0C22C5FB3971E2651660FFA663695FBFDFD23076BD636D1F477F986DF 93903730DA24B4F8330AE03BEAF7E389FD2E225E53C7DD7AA7EBF4341106DFE8 BC4382B5BE83B459F29672DC44FDF921E09E6F908C99C469FA8FC5B171C416C1 F22DB20F483D4DCA0DFA1D9FDB3B90EF2F661703C6AA5579F9C95047508A7640 E114B534C0218A800BEB8C7815F82F642EB1926D5C568B4C53BFBC04C00DEAC9 F6B5122675EE833C4752184C75F7458FB127DFF0FCF08C94924DB2E589193D11 25A5C802A9FD280694227EB7466ABADBE1ABBD7437957D142E02467682B800EC 51414D66D2C2A483B598B1BFB4400FE6F37A2B882E489A4F569891808D93FF7E BD460F45E2F4DF424E39B707642F6F31F8DB835C5B3C94A5C65E071A3E74E381 96EB38291346BFEE5B1A2041D7BFD186D81B9552D7F28AC33B68312E4172711E 3C89784EF5CC4D992C1181DAE6415CD536C4B8E67E43C9C3BE1C692B2028A018 FEF7711CEE0B9771F5C78A1A513D540EBAA2FA3F8FB6C3828E1555A76FF19D93 93ECE2F689F08D6CC5AF601596E5C2B4EF3D0CB7922367A42256B875BE98E009 725621A81157D3D570A0C1A9577B64767CD323F83E1F6DF22463BDDA76F4ACAC 9E7F7506DFC0B0C0E374A4576A9B2C0C50B9D8A874358FB7BFD6AF403BABE88D 2038D9881D48A31FE519553FDD70FDC5C7296F0E3AD25B47B92A477AB8CE3BB9 9FCEF5A5EA8184C6299F1733A6E364A5E5C295661294599071F595BE97E6FC94 0B9BBEEC7B1A985A2AADEA1D3470117BE11BDFEFD68C57CE96823846936D2755 F6A046D3F0F675F5C29F77ACB28F43BFEA1028C49AF242467C8D779C15B32372 F23E2A8F3DE1752E7ACAE2D6D8EF87D897DF10463374FF42D89AB375E846A19E C58B43273DC0C62F5B517997754A02A482F147F6E3716F327097660921968528 4FE61BA3B199C0C21B9483B2FFD54DB9767245B78D27AFB3F2F51993691660BF 3C2F82FEDBAD26D98695D4B1DF4CB0C123ED0A4B5F61EEF12592EBB8103648CA C005566A0AA21F088F12741EBDBD213690480211524B5230C555585A5869FA20 D913948F1DBD6C0B54D280C4A94772A9BC23067351DBA83AC69D0A9DF0DA28D2 9AA90C54B13F53834212282BB7BDFC55113419A8DD9A55E57A33330F38299E5C C950922340E4870D84C59CD6A78BBF9870C1362AFEF520C9541BC4D22A7B409B FBDB93A26C2367172DCF7B7C989558B7736186D85A932A62DFAD78998E9F742E 2730F0FF36334A5FB68446954B428EC50AD18D702C5D3D5FDC3D009A0592D677 F163BC896BF1A4673038FE960C972401523CAD429E69D725FAEC1341130D921C 5A0237218C37599722970575303B9A2795B1BC3697E97AD61D1608C02EB06E63 3E773CF5E9866030BCC48EF0EFEEFE65404234D433796C6FC1A0328FA3E6588E E47587FED3354FD8C99141293993EC7A0452CEA078B5AE0AEE41C686A499FCFC ED58D652C253B3CD98F8AC74C98720872ADD40EC836095A0B8C65D75418190B9 CECBE9A83788DAD513F8C38DDD0B5AF7C80D37B3D94F028AD24F8D91B2D51270 BA29B2C656B4B07485874AABEAEFE3803538A97E67F373CF1827D3CB9414800B A8FD7F41C44386DC63F448C3CB23B38FDB3F912B2873987190D5583F98BD9647 5DA969ED8CD70F519574FA4D5BB135CCA2F35BDA8EBB5046F34AF380CA671C06 F8F50792A98F03787891F0C4B990C4B28430A84E974DFD7E7C2930C1BCE3B790 E1D778EA2205FA12287362EEF7407B775D572B1201BD953785BAAA9A2CCAF185 96A881404DB1B127A4CC4D57039BCBEC047F93BA057781D52CE47D44461416DE 7C29268E4A3D748FA8020754515E1294AE1633EFECC252295D7C727C7811FD86 3B0E6EA1543D5D447851FC879BC4C7BF111A718DA1291CEE474F6783E42CBDB5 B77297F69E0067FD63924BA0BA012DF6CB450F9CF9D6E6DA3EB69C458DB51251 5D641C8F3101E2D150D091D0A49D45721DBE3EC96E45FC214862CE3BF9A42BCB D000CAF791D1DD67DF467EF34E886803F6ADC9353DAB7F27CC036AA242306138 88C21B88DC1CCCF9E2C6CBBFF06C390FB10C614EDC8BE6D298D47313FC843742 144C46AAA978B4081C768729D37C5621FC3BF252F9D8969265EA05EA7DFF77B6 CED36225CE9203DAA2EF861CB47C8B6378894EBFF8DD79320E279B149C4DECA5 3C6085FE2392E172A382658FF53A07C0939403E0F24DE700BA7BF05013801497 A3BF442D1F7F32899606289CFC6CB7C49CF90C2CDA7C2655C5772FEDF1B689D5 FE900527A9CA7FA1898064D5AC7C061CE674AEAA2B7F80863A59445E53EFC12D 424871C25935F9495E2C689D5E6E35825C99CB7AFEF7E2B44548D613C44FBF24 4D0CEAACF6C88B32E2AA802EFB63EA5F0BD3251BB1F2451A8093AEF3499BE201 95BE702C36C1DBB2F7A971FA7D9E664017A69F99996D6F2E382E3F3C4AD98223 F622451C8F730F228F06EC3DB7B57F4BC5C5EAA096CDD45E4D5F41937224BA62 9924B3C31E4912107D8B858DF3EB90F3B3228A6276EBE59D76135FAE191A1A5D 7B127B8C3190D7394E38E75B2505ED09C0A13ADF0223DA6C5472CCB0562A2E28 4AAFEC4520AC054A9195ECC3D89C25F5999AA9AC05CBE745A64231A360B7D0E7 749CEAD44D7E5BB1A8BEFBDBE14E5A448E30E2257ABFF3EF2C866733EE4B6059 7CCFF94CB3B10DD5968CDE879D876B32DB27E3CD4FB7A279B160E6DB0F65ABA5 59439283B8E93C325FB3982839F4BB76546D521A7B85CC83876B33A2D4460E9F 8426C12D1CDAB7A35B32994CC06C2C7E25ACFA96D2D3B4E5C4B759A66FD51522 4F7E256A4EA00DF4E4AB9B05D78B61D3072A14399CA8CF40E2A21546082F1E4D 98BFE87422C1AEBE75365E5F59FCB2A5E7F192BF26ADBD8CB8134551FE666464 8BD70D31E024310833EBACF4FB2649460490E1080775A61946331FB689EF8454 493AC5EE59B08255EB549865CA213B6B657F1A1C8CB539412A2FF00BCF5177D8 DB344FB229DD5FB22145C83A8CE2E423BEA443F58D926DFDCC056E9DBCDF5069 DBDF17FA86E5B6C2820A649F14AFDB79F97AB4DE59ED3B8F56854D38BAAB5B7E AE6C2BE9C091E9E2286A4F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI8 %!PS-AdobeFont-1.0: CMMI8 003.002 %%Title: CMMI8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI8 known{/CMMI8 findfont dup/UniqueID known{dup /UniqueID get 5087383 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI8 def /FontBBox {-24 -250 1110 750 }readonly def /UniqueID 5087383 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI8.) readonly def /FullName (CMMI8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 64 /partialdiff put dup 84 /T put dup 100 /d put dup 105 /i put dup 106 /j put dup 108 /l put dup 111 /o put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBA9B440A6DD72BF8 97084C906B05FAD969086ED21AF0AA1471613182B26117D7494DD9F9270EF3ED 8DA4D957225F75D060237B6DAAD5A0AE3E702B3D1C437835B93B8AF1F9E7D966 E739CF3AD5E256F90286A34069E5BB4122F94F18F3485658D0D25B938522A879 8215A417CA2CBD20F71C5C5FCDE21EEA7BB27876D93BA667868A419287FE59BC F538980597DBBA743DBBDBEBC61E3286DA7977833DC8BFC5E52FF5DF5EFD9A92 D070EB769E31E760A50FDE012DC0057835E8B9B046FCC83F1A0C40326AFB4E3A 0CC3BFA35FCC64E32854F32EB7DF10A19F95830136BBB8139DE1663B7FD790CE 464EA431AC109FCA0E03F3E0D355FAE20AC8774D6B1CE233C27680C77DDA7356 560A27C75993E8C980CD1E3B0683F7E8A05119B3AD567DAB4851B66E418687B7 F9B21B3BEF607918D5973421B68E65DFD8B6C8DFDCF1CAFE2637D365148EBCE3 FA4CC00052A2A522205EA3AE3461CEE02042E1A3F11467CB6C8C849B200CCE3D 0BC188EC7B934CBBC0AE2BF5DEA228181DBF0F774119F313516E7D97FF532621 9278F856C166CA6547504F34991D588A0631A5CD06363F3FEE9FA0772C783447 ECD0A200929CB58EBFB6B72008E4082B5D14AA560C24915B9463A92F38237886 C35CBB2D4DD6D0CA8C1D4EC46093041C6181C2F6586EE3E7D4E647A107B6DB23 DAD9AB5A0C2905455FE58075EFF6B48597078BFCCDD84812B98986F34987CE49 7EFB19814F2A58B0233A59331F6F8EB66401F04EE7B1ECAD9BC90A2BCEBE213D DDDB1F75C83609ED6A669A0CED58B2E269E76ECF73616D94F13CF827C9BF354A E82202988DCFE856786B8AE569AFF3105B55C72C58D310FFC0E10B2ABAC8DB06 40D5F72E54770E9DED1AF4616008595B8481E3D9AF4191CC9A5BFD9DDD01C9F1 FE7165D21E488DB40879E863D470CB31CA06E5B5F1F8C3CCE04B697CEB0F3557 ECAA358D2EC2B370519CE06138FA702314BA01F1F33881825EAE1230098BB3C9 59666983275CA4E8D9DB34979F86535577E79393A72F84B0F768FE8C92692907 15E9FE9894E98A0EBEA490CBC8C7E5A9F3E43B24C2C5A4BCD71DAAD3CC0B8B82 AC13933543E295C163F61C9FD18371CB514493F90BF7FB460C029B8DD2E2BF05 FD66B451DF277864DE1EE42100BF29E01A50258C2758F3EDE211BB3457B8243C 20BE72983FD6FA2581C5A953D94381E32E80D6D6095F2E93A5455C101BA71E8C E560D4694E4C167EFA25FB1E9D214AEA745CE34CAA5468FAEF8F6BDB6C6BE8F4 3D58836C26A2392E4C4DECE284A90DDB3858A16D6135FED655A600929DE71605 6CA32F6851A2A6F71A9DF3D5D657593BB729CBCA2F4B059365B7263DC08AB211 9C547096E6427F6AA53CB2EB87DF0AFE2ABCDBD15D7EF228D3396413B83C6B4A 79E41F9BA55A2688F62A10472675E5658F151F9FD6634EC94EC0682C17448024 CC1633077C07A93E4DA8749D974FB8F4332B5DECF97D749C10DB60D4C90ACBFA E65AE928C88BAE19234690EEABDB30BEDCEF2660D7464D5071058C30C572A2BC 7DEE5384BD7614A4BEC4C84E18CF7EC81C810256E8CE6520466C033E2A36D3D3 5D6074B3857415011D8D9D49A474D994571CDBB89AF92BEA879BEBAF67663F5C 17ACAE809C2231EDD0A76641BA52FA7B19A2798D54A4A9B62C42F9905851229F 2CEE0191C8AA5AC12BB0CE9E5E3E862683AB57DBB4AAD6AC0FA8BA4F408D41E0 755F72B82B7C18EC6B13995BF7AFD66AF4BA0EA7523DA8B75EE751744EBA9CA4 4E8BC1FB37734503A5B24FB9F2C2D07A47CFC477F02413D55BD7DC180B0344E8 50248801FA6BE26C97F397797F5F9DF762967E7CD92CCB8B2E587C92177619A4 BF8046CBC72C6E69DC78B8CB6B7381A290080EF59F5B9F29C1167B261C932E9D 010D2D14BB425D157F22BC0305770AECC5BC80000F8CCFB9930255A68F299ED9 D3B5B83A2CC00E3305EB281E1A7054734661B175C6CA0AF168790985F173DF03 A8693B677BAFE23C3CF833FF6463B136FC370E4F0C29E322DBEF637F62C33CD9 B0A8338FD67EC628E3BF2FCBF7CF0347D5CBA1DBE6DE878DD670176B85F69EF2 3C5CCA1BD2B8A385F113EF1CE522F5A6AE053B9C1E39408C9459DE3E7FE2C4ED 77F026B0081BB80D40185458139C16333EA27F43EF1204BFBF80BC5301B2A3AD B10F7EFBB4F5B7E04DA1167F68BB6D4049440B0F57385FF0A95E72760C6A12F8 1335BB31CB74081FBAA319180DC00113CF50CC5A41D2E751E055DA1429CD75BB 0060C21CED634FDA106C49A12B356129D010E29F2919301AA7F80222AF3905ED 672FF85C9897A70241E8DDB9A53034B6BB44E140D9E739848E7A782F24B98AC8 00DA09EBE4532787E5CF3ED815705F659D8E52DC2C2D4949374A3BF192BEEB99 1D9A90A4F3250BF8A1FD40D91F5B34AF2CC561FD02FED712500B24330D87DA9E 4AA46B6E34BCB40B1F73A1DDE07E002B9478E9651D2BF85E67585B6ED812BE03 A594874A235B1C1840C4BF4BA6D863583D8C12DB49EF7F8CC24DCBB6B21FBCA9 378F3E2DC406291AB324571F76E0805DF8826090F0E8B50599CA58D124653D16 16C782B01C91A6F3DA6346482E3163D28D95EA49866360147296838A3FD0CC53 920F91D895F839CB61FFD2FBA296CA4C6304EEE579782AE5FD33D0FA652BA7E2 CEC7C01DD0D3E0D56E6177EE5F609A396F7FC8EADABB465DBA7F384E215C4DCB E64F807A50A461545107F9C3F7D7CC7D33E6EBD6D9228B1DCBFEF160703E6129 0DCED8D45DD54E2A36E698A616E7906A50901E453BDB2A363EB77144E9EA6F2B 6BD927495EB0EBA5755165707CCFBF8759CE5856881117C7F3EF6D494EDDA7EF E499BCA56C86467AC573DA9C2724FCC74BEB331E736FB093DCB67DAD42296655 415D110F2729BD1D55E5C9CCE2E724116F45FB2E66AE0F790258851A5C808762 68B8A110BD326F8D3EC45004E7CC08DA42F6CB80A6B6E7C286F139534A275BCD 2F812993DD9C9A1AEB5E7E4BDB4805DFF3A7030263AB060C9B74F0C25C5B9005 965284884450CC2815DF28D5F9B0496DC7A3AA85E1E42741E1538797175C28D9 FD904699C771FB066397FFDEE8E8DD1ABBDF67E6BFEF95BB700A7C1BA91354C5 42EC3864F6E19B379E79A1CC3C786C0DA146C6B0B8E507ED58DBB1F12F613A98 0E1F8967991427A22ED323901C4B83336CD343212131E8B59C2F5D232702ACC5 7891BFD4EBA5D0FA35AEF9F3520CA82D121BF6885BBDAF15248A9E4649ADB94D 0735CC4D14E1D7275427D00C8E709579612F7F74DB6FC218C10C278CC63E2AE2 37EC996B10C0229D687F0DB5E38A8C4DAFB3DD8A9E7ED37186FEFC97790A1EA6 636A88FA9FB4D282234BAAD301A1F3AD33F252C5EEC49410562FC52809CEC466 A0F6D148E9AF19D6DA2337C8283FBFF6005C37AAEB0B7F7217A8DC6F949B9984 72DEF163E4D5ECE4288404448C96A7FF0AC76F732D50AD63A1D286C9180E80E7 C218B1F48E3034FCABA6BF262CEECC284AC29E9F3CA1CFC1639A681ED66C1FBA 666F073D45C84A286E05FF809D4764FE819B6A330E73695CCF2F448B4D4EB4B3 F63E94EC289807A2F9A1159CF328C002B467B19D6E9454CCE36FC19E0A214190 B251818DD456EF658B0398E275514B72D9C1DA5F806EABCF1DD56BC025D69FC8 A0C2FAAC1892B64D2AF79EA2F57F103CA623E440307600D50E783FAA998EBD40 51D23A0CEFF8D8649B48B982DC38D613F882DCCAE5F51233A641B3CFD783F830 D984F116DEA3ED8F0D3369AE629A006BAD4523F8E3C7C6B39A6C972508B67AE9 32613F28CCFFC4BBC86CF31A0C25C786554F7A1F3DE97F5CFD1A941F775067A4 784385E2D02EE1FF886701B1E87D966D3F500E15591A5012E645837FE2DBE3E6 A3D375C6CA0ADBF96B33EC3FCFFFD888D7344B31D40427B8A8BED0FEC6FBE038 1FB5F0714C4B5A0E607E215B5B7F76ACF0FEAA4C9790EB7E13C0E3933B7C63FE 5B934EA34F4B741C3667BF1735C685CECA63507E6FB9EB06AA010311F12AC1AB 4CE3FE8D1EA1EDB3C700BEBA516FC71D740B1CA1A60D4578003973CC3EE21DB1 58FB1CF7E2EAEB2A4A6C742EBC3575EE6378531C6EFA6E6986E68B8E25CEEA67 A59623FC1ED2ADDA9D72DBA627D179E47DC7F5551E07EA4D54ADB6CC8109D340 7279F288E552EFD79C17DA3431E53EED66D16F24BF86468C2FE7EFF421560500 12FB048D6CE2F370BE4E560F8B4AA12362ACFEBC839351C1D5100C625B14CFDC 747B66082D4AD5474A63EA0054E9C3E6295AF6B133348487B0471395857F4B73 4BF8337DCE2FE2E1A4EAD7E7BEDC822BDDCE42B79B308C11897C98E3ADE253CD 09CEEEC0CB1DB66AB072E36E1E04911F40B535B0FD85982C21B8A587D65C38D2 DBC5A07A0A26DFFF7460F10781069490AC1B611CF7312A14B4AA6005A4582C5D 336BCC30EB47749193BE8D457A43F54204B070DF5AC2057B6437E23705C7FE8F 7BB150560F7044BE3E48EFDDA539FEEFB0D2A7856CD4E405FCE0F5EB190D91AE 578E2EDEB9ECA218573BB1A8EF116043A27DD17A4047BCCC7C5F3C563A910778 45ABCA32C7347E6180ACC86F9D665FF025DD8AF514FC3724B5C3510F3C37E0AC 5101D1667C6ED4E8F37F06CC2BDF66CB5A9FB7C52CAD26344FD1557571336A1E 1E340EBA149B4EB99016D1A411FB874914AAB2A415CE3F5FDFBBF5AFD7959B9F CB127BDC68D2A2F3F07FF3D4FF32046C0371CD2E68A6471E46B08413FC3C7A80 A107EEE57979DB387B2206D2810DB310B7232B2DAA385256C8A58964B512003F A0C24ED21809E2576229627278118107B9C32345C1EE8C0CFB452CA362379369 31320DEB5371037AFAD093B61E8AC7A6DCF7D49C7F8EC32DC0ECEAFD7E892810 039570D2956289B15E078C2545911BF535F72F7DAC619BBDEEFA855BBAA81704 18F7D351B0936357085A32157AD8E27438A58B2397D69264E748B0B8D01B33F4 D04DC59326A7DED39E247A1C1A1AE49382BDBDE9478A1CB48F88BDF14A268B40 A40B9FBFC4C87FD3DF1EB2464C3C14E36CA41E09EE0A9B75FEB0769F9ECEB1BA EBF73B818427FACDBC33BB95B9654F31C59A766E931C698A8608F15290FCDBD3 5C535D9036A19CB7B55BF54E96F9B2206DC71624E2E55FE632FDFDEC8757AEA3 1D83D190ABED5E7A7AAE2F41FCEBC7C18626BF58F9E9F02FBAE0C8AA85E9DB21 A3D8907522DCBAE4923C6A2A09FD2F08FE32215C544AB577B337D929E625E704 E041C2381AFCFEA37F3133B6CA20093EFD457C772E428325E56C9CBCC447EF9A 05A8C3F28017DD4FFACC51B38E4896C5044266EAB4EB7C13FE855E790DCF8A17 B61B1D30DD866BC57397EF6297C4891451FD6A5C6AD6D7446F58F56A68650908 224D9F4C31C6906FD29BB51DC947465B808438E6260325752808963C808A4AAD 60422ADD62CAF315F6AE92FACEC55D5B682089AC0BC051CE1E2C06A3874736CF 0DB5F7C8F178479E4F11665402781D80397C75456F5CDF0A4F382A19EC6AD64F 71A9275264800E178F212269154DD8352167C57EBC0A38BE794AAD1601C8E541 7E1AB8E969A76E1EB4092644958FEA2AD29635E70C4DFE2EB0D9B3E1644FAAD9 B27AD5466EFAC724718962B62E7B8C32F412B69DFFEB792587D571FB5C591D95 4CD441662CD1B07595E245FA537FA9EB5A20A97E5C9251EED22C9961B48B25ED 85BB7524F635F9CBA3714C6D60A6BF920C45A64F4C366C1F9D22F53084997C9A EFE2D79FBE3347111F5093E271DB7E3770B35D253DAF93653F6A23FA145AD775 AF11E188EA0428137D9A14542E3EDA6F7B2E5AA86C9F3D3649A85ED2F020C696 01A339FE6D7E42BC548C8F92A4E3809C67A986C99418772403D16D0E8662595A 1F37563671D6DA0F36CAC99DAA8FEA215DF7D45E61314915A30A22FCA86A50D5 2FF2EF08E240F9FAC030D92BDFBE40F1972DF413E6B452024CD11792BFDAA2D7 C82716528AD4B3D637BB43E748336DCC86A952BE96F1EA423E31340FCACDC1EB 02EE932F58734AF3A5B2279361B63F1D824EE3BA9F4D2EC7B33A300A1CE8CA43 24616444176DB8099D85AC68329B1F85E4B5B16F3B396FE2AE7774F3065D0203 AA140DC128D6F935C44733EF585F89E8639A2096A225A2E5E49D447D8AF9FD44 CF6C1BAD5C5E5262AECC5543EC8199B00B72BE32A0F110F64A1D0D5CCEF38FD1 155D6198E9A343702F8ECF5052333272CAC2FE016681E12745CBE14E1065EFD5 407DA3686080989F6F6D650A9F1EB3A813B070C30C0D3B4A1E9C206E2E4DFD51 D8DCBE9AECF956640A2E79F1B4FD0EB8E0449AE1B8FFEBC43275743B4D7F6605 0673B61EB3189E74F51F3780A91E6A5C6464C8CF7D563D9958D46F39B1A12087 6BBD4898BA9ABA468AE1F24115891FD3CBC2195F75958E26DF8BF1B93F7B521A C12112237AB23A8E5A7B7D0DC4C53692B35F3CD813EB463C0BD3A6486B0476C6 3B36DA71FE512E5745D097FD4AF5D056E434DEE2AF926B2EE79F7FC4FEFD4130 BB4B4BE01E5C720325A4884507CB51CBA4FFB615B78A4182444F0ECBE4161A58 E86FE1DA2E39C2BECBCF1F1D7B9B776A26078FC252128FA8108CB83F673CFD37 CCDA493234FB93E1550EF8D2DC049ED95B00A8A57834B024B277D3DF062E748C B61F183F2D72AD075474F8165528CE75E4F40B38B0FAAE45751C1907F8D31619 E88EAB02EEED415F3EE3BC5BECC6AF565D34E0BA2958FF337A2B06012DD1858E C53DE52C108BD5AAB76C882198C72CDCC958D68EA8FD26F76F04EC1A08B2AC3F A6D0E8724D2656555DBC0C8C42A3E22ACA7E1BC8E9F897D9AB692E0FB9EC32EC 59E31CCA4516A3C3BFD5411BAC3DEDCE374D48681CE7D67DEAB93F5B5C5290AC FEB29C5EA2C98095692873D36C7DA24847B66F31E4CA4C7AE5C79D7CE4F0532B 78620582E3731A2A6533A03E7155B33E7CD142FE79F72721862EDB24959B9783 F834CB616FFCB2A23497BA6D99AE34DC459A2F7B3E4DA2B54BED118ADCD92178 66C40F4E60F6E1327D5DBCA645A2A7C770807E6D7E47E1265C753F8793BD2D1E BDCD749CC24D4AF9315A93F01180A0F9A7F420DA1B87664DA5FD967131273271 9DCC45C3D57EB9B8AF14771E8E751D88B98D2FFDC72F5011D402EC34FD010ACF D3B0660304725191D64FEE106253FCB3470F1A16EB7B45C1489D3534BF94F740 C2781DAFA5E8A9E7B25A85BD7935DF3ADDE08C960E283D8FC3976FDB4085DBB4 B6B35FB239C28C785B18BE4FC98F3A5F410F562DB5FCA04E8074E4E790F4265E F88117B3D0833AFAE6E8B8A71D7731BA6F14FD6F217EDA3F8CC687A494FC3914 B84FDC37C8C335AB1E7E0BEC7FB6B7A595C50CF8F0080C8D461BCB8B579A5155 F963B6587873FA31C3A6572740C63EFBE58A2EBB723B7517D2A243F6CB08A038 54F4DF0F6692022B2EE8C6F6B73735ED3166BAC58D9216A06EA6FC7B63B20031 D0F0F99D83D9030B413C2360DD2C553E34BD67851B743C3FDA676AD63C5BD759 9131358C6BCDF05FCC048F4EBB9005899ACDD8E9EC9BB8C5A08E83485047D263 0ED69B4D1869A38068FDA03524022A1D32FA2AE0BF7785FCA8F089152A57EB8D 5467C28AD44E890380CEA0B0E0CD0F6427F2C3BC1A5257BF03D902BE94A449C5 EB8F33DD607BB4E0A1A7A24431E1DC2F03596EB2039CC1A9D524E10B374E34A6 4DFE6694F9E158DD6678BCB0B56BFF435FC4F5EC442E14391B45178DDA235B7A 07AB6EA76230B60456344BDB08C929F9453553452C97E016C26C11B68186024C D1AF6C638EF54E26AA88856FAF1FA9A0DC5A9EFB7130EE72EB3313510EDB1DF4 8D8E512036A986387D8E96689E912149A342974F559E7CA4621E84351914EACF 7810F41CC0BDCAD6165182C7040F052C34D073FFEE489549EFEF83111310B3E5 F67EA5449D3D81DF1FFD64AE0F1A760922FC629FDCC6AB0DA66CC29665BE386A 4DC43CFEF3C5904356B7B2EC0AF36BB4FF6A994C8158790674A8EFF54A36B7AD 8C8B833C1D1FDFEBD7D39122BA602A67ECD2EDE9D35C2628EF1FE34B2CDDE154 2247242DB2541C5FD49EB8348536B83A67E718DF66A627D7C7622F22B5D3A3FA 5149B224F82B72E4F2A1B22BD6FA7018B45A404E66E2C6B96476A39E5D330AB2 ED04E2A7FE38D3A88B439E804F390F4B7893506FDFC1A72EBAA9FD2DD8062C0D 7B70D35F81B399600C625B80C26720158167C6BA509BEDB43F4F975523B11AED 08A83792DBC25C25CD0A6D542E0D2A5EDA3D82FC347F0D248F1EEDAC6885BAF5 A165AF8C3DCA336C8E8535D6527B7033778D8FEEC243E24AC9444E1A9AC5A3D1 D40A01D9054D7A926B8A4D2A969C3D78A926C661313B9C6E70AFD02F5553BE02 62D5937D92C8AB019F4BBEF19CFACC27A2AD9A75ED83788F5534E25E82C5D706 9A218A40BC614FE296C88C5B95DED6CE47EA8D3AFAE851FCC2CF058EB58F9472 1A335CAC988E0A96F40506C63A7DB373F5CEE9F9CC6C1C67082ECB10F4C7FE2D 2D08E52630ED1E6028766BFA243C4E6488D2D3CC32B3C38DB2AD22F43680C96C 7A1E53E7E07E28764032E577726F4726CBD05DF94FA36BA7FD1ACCA468BF7CB0 24E2BCA2F35816D9D9C70075D1E32D7C57FA86A9C3A9A27E599B2BD899BF012C 56609704F7EB773A1E37F7965447EC0E1D3C6167728AD714BB3F536EEBD43770 BA775AC0BF2D0B02C33F995744C8952197A226E1FD945492CDCF8FE08CB7F16C 99613D8514DE3236A58267271D633C14C9CB6B753D4820FC512ED296F97E9171 070073A303FD083BED750F56ACD909E60B80304964ECEA03C6B30CB79EAD5F94 FF12D08902EE2A3FFDFA48E69AD2F432DA259026B41CB4271866A204EF7B7CA0 C841570C9D3C6992798BB2083372FD93FA65A46BEDAC870F8E5B3DC48694EE6B 3AF242B963E467F08020B0A9796B3620EED5B88625CAF34E6F1B9A5958F5A63D 48024E4131B910A5ACE5E3A896C325AB7AF41765EFFD05EFE85EA0FBB4C95B38 9E4B9D0C739FC8F79C8EDD52B8FC8ADE2D2D6253C0EBA90CAE69E0DF2271B356 C3D5DA27D5A6876614DDD6267E24BF3EAF74920BAFB83AD59FBD32D895384299 1A3EDDF718898C8AEBBBB4A449A2F796A2EB7E6658E72D72DA5C2E5B34CD35D6 4AE50883FB9938A019EDAF9E414550B7DC1A0D1F362F6F9E82F68E3993AD0B93 D1AB0D190C98FC309DA66626D199DFF3FCCB12DDFA4558CE9A6B76C5D7545270 5092E7651FA3018F48A4AB8E47441555EAD23BD05A7C964D7A47129D39FB1F93 C6D0FCC37EC9691D0389728BCB168EEC6563A8241A5346B4A23B96A8AED28E62 35E6F66948DBB1B5F42F762102C336FF302811525317C437A104441FE6941923 C7A18B59AE95A32694578245C1D6A28929466ADEE8B5AECFBDEFF0F62355CA3F 5C3F39039EAFF922CB7CDD5FF9C831994D5D71E8946CEBC521C1D425C48AFA71 5AC1BFE0D5124C605130E0E96C2241E05429E88B15B8D41ECDE4958701BD5EEF 76A1A2EC6CE4E1854958F6A6383830277427C040B733832E83613D6F073AA373 91C88153ACB6BD548DF0600D41FA33DF9A6DF6B44634B221D89DC294D3168557 8793E5293AE21BF0B073D92881CA864CE3DFCD8F407BE13FA0D8C8B03CC23057 3CCE282D8347F510370FD0A0D0127C5AE333D221BBFAC2316068AB06F331BC68 6EE721084AAEB8A4C8481799E094A90EE934A36BB2B487E9A2E09B68A1E22356 1A6BD11CF9210AD619C8B832B3D5053780AB3462AF0767C1C24429BD86A4ECFB F18587A169569DECF8F2709E1050E430195DDE54DD854A4CA80862152538F2B6 70E905F27D420A6FC03DD3C2FC6AE3EA1735E92FDB49102BF4F51741E4EAB88B 3DB8BEA8FFBE5D0D5E28F5CB4627D156931BA71013ABF49972336A8D3E6BA7CF 2E1D1C7D60ABEA5DDE3BAB021400B11190B884426D4AE9B7EBB12971EE898CCA 2790A684CC6701872E682C6770118EE4DA8816B705DE1F8B1E28678E5B808E05 2DDE01611451292C4C52901669660347CF6D115C71E6B930C823119576A3F368 EA764DDCAA0A9E8A1734CED4946E9C0D6B1ACA28E629732B6BF4BEB800F30C8F 970F7D7830AB415A3AB6D26723AA356959D49461846564C7EBECD9FA81542BDF 24A52C2572219181FF5D3B1A604C1751661306A469392E33314717615FA05047 E58CCC3D2FABE65A13B02549A77EC304EEB76CB42AB79B6563B1E223AD039B08 C8ACCA350442C7CE851700D4628DAD9DA37B5C7C46C7474E39A8161E6DBDD038 5349232D1A3BF7772040CB9017615D88C8B0730DD11E24B5FDF853A1863DF0A3 C2CDAEC6760BFAC2A0722EA777ED2795EC03BF880AE798655F03CB8408944CCE C4B4407FDB48BB310DE62EEACD0342B2CDE45CACA8900E06E0675AFF1F0B2CD0 D8848A178B34E2BE3E178C8A9A50952497DC01D2467664D5313E6468E9FF848E 3D76122235C2D314A33E4F6A8C6461301777A2E3903FEFC7B60CC1444FF3D7F2 7E157EDA914D6698D50089E15C23857A3AAF8F4EF644B14AA47CECD1F0AC61FA 3BB4A45C76226C78 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMEX10 %!PS-AdobeFont-1.0: CMEX10 003.002 %%Title: CMEX10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMEX10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMEX10 known{/CMEX10 findfont dup/UniqueID known{dup /UniqueID get 5092766 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMEX10 def /FontBBox {-24 -2960 1454 772 }readonly def /UniqueID 5092766 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMEX10.) readonly def /FullName (CMEX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /parenleftbig put dup 1 /parenrightbig put dup 26 /braceleftbigg put dup 80 /summationtext put dup 88 /summationdisplay put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23E7BC2A6E71BCF95FF3DA948 1A27320759222BD7BC7C1A533E90058824F06942F0234C68671083E0E4708398 D246C94F9C16DAB6563651BA33D86273FD2DB3C50C106F3CA95B1C79778D0BEB B99D9CFB38E41BDCB4261A86A23E2CDEE4837D9B6F0E85ACEAA984C344A63709 EA35B61F08821338D363D172BD185A3658F43052AE1E61D879C99DED7F6D726E FAFEBD881BDDEA91FB09DB75675FC74AA2BEA8771027C7A51BF849F8E765B870 8F7CC0871F301ADEF9B71EC3C607B2F51325AA5B3DD74A2C5426E7B329FAE84E 94A159C8C9C35E27A0FC93FB98A4D616750DAD50068A5F0EB96B8228946E5CC6 B69E93D262C92E3BC7161313156E380A2ABE27BE400A23DF95E65A4F76B3FFE4 CF3CD141B006C487EBC73A5A101466D4388FB2CF1D9439D0714720BB58537B7D B3EE1F04AE117222CA5F0E5942F7A875D55D91D63958B1A02405D9DE08109B8C 7104F2D109EF7074852DFD74CBE02E0F3704F2BACA14E05EB1D0D9021EFAC23F 76C2389F8EA237D2E2AB6AFA83A725E16AECCAF025E05F1B1B5699D761F62A46 EC6F31B0FE4769BD0D66821592ADBAEFA9EB454CF1402FE870F5F96D09980C1B 8B6D2FE88BE56032C1959E6C3DC319B6A7353F3AC629CE5BCB947B4B235426E9 4769302817AEC1ADF50E50265AB488017634AF824D44D3C8423FC7CAD97F6D6E 6B34313637687FBDE3BDF6FC951CB41277D8EF49D14767B59656D214C9724DC4 0523EF896F4E48434FCC5D8423F07194C54D48C62AC29001B10C9C8B514B24C5 CEB60FF68D36749711E108DBB52738760FCF6571D5B04E58F24CC0247834B412 D0F6F8D7F1573F23E3E399D5A3A3A37FCFFEAFA044A5694D2458EFF2BC1F7650 8FB0A27C505A20C16776EDF94BEF9DF702F3C64DBC1939BEC0399B6AB283F832 DD8FB358F701CC075C596FA7B0ED7A9304DC73274C8169337D55124CB748CE26 A635B2704D8F65E23CC0FDA3C57ED451F8FDE7B6FBFCE2746F5AEA11B065A6DC C3D200D962A034DD6757991BA62D8DC0408F49083D48799B6097B61343365A5B 30FB02E9CDFB5104FB751BE8A268EE55C1208DD8B29D5635014EDE9D0D94BB64 ED5643B3049027925BF2FD7EFCB631E01269B731AE12AA6226B2656F035C7E92 959C4A21BE40D7C138C8FF28C9FD4B768CF25F08859AE84FEE6EA18C033B3659 D9EE250BA5FF2568E8BF7684A93BED7852251D1ADE5DB815AF3AAC36D1A500C9 41D1BF3A1926828CD1F9E501ABE441A07B1B96612CF0728AD5FECF7480421F46 0B18E06D2FF1A5B1183459C59517976474698BCE18A728515CD489A83C001AFA 47BDA929F60D0FABCD8786AE16EE18615C37D18703571936A365D334BACA9BA3 08E2523132887B5EE95ABCE8581C78C3E858DBF35ADD56A1F6C2489AFA73D1B2 379C5064DAFD30FDA84581FDE268B470636EE35F21648955513714F6EAA08AF0 249C937721DB0E93D95C4DDDFB0948051953F39C6D2D811D3FFDC25F786E072B 2A8A1F4830F9CFC34666A1D3F13268980E9A26682CAB64817318A1E266F3D2D2 DE4EBB3EDAF0E7B526C838CBD7F37E74A35B1C3EB96DA4099DE689A53970D4CB 9AB355E93EB294B07DD09356C338BB4A61C147BEDC152E58DC92FA69846E4829 551A5330006793CD88523F7B3AF7B4475C531C67A4B66A603597EE72C4ADA491 BF13706F341125CABF37FADA554FDA0BA5534C7AC35F1829E250C885D9A9983C 5D1FE8CE24458A8B13E5C7EA22BF1608AFA96B83C700889A2A6C9C4052DCB892 6CAEEAA9E7D7F3E215019719B36A5DAFCCF2396FA0C04AD99A7C23772A7BAA64 D1FABE8E476EAE9FC1A3E08CD6D1DDC6E087934E676BDFD1528652B6B9A50A35 2029466364300AF4CA3C5883F6293A7104617D0858B3E43D43752F814654A938 A44C33410BA0E5EA7BF55D4F1D57E27921DB05C059DE29BAC1BFC9B607D2C5CB 1DDC47793984FBB18BD99E1DF7776B563A55E15DF024D6D8E6ADF62F16F602A6 7DDE1C68637672AA9C7A1250161502ADDDC1B4F6011A9BD5605B73AEDC37CE4E 4467C838B7692C4D541EF87DB41123F9DCCFFA971553A5D9B0E7EC539A28750C 8554383585CD8B93DF731A301D85BA9ADC95B4A3A237794C30230A82300B6756 AE5A46A090958109C5565EF60B0B16D6C0A16A56644B05D3371DABBB67ED9BB8 9BD3983575D371419C7568B2556649402AFB9843106729E4EA87B3F9038218A1 F820B098A1271E330708432567297CCDA332B555A40C62BAEB16330175D28AA6 13AE6939CEFA2334E3E890B66A73277F0B63B1FA59F856ABECC5FC0A50571F5B 0747FA554F5FC72A51E215304B2E44701A13E41D91397B204C66AAB3D101004C 7FEF2D87DA558EA057BD492CD6EF93601CB63F78426B502CDC5C8E9EF4FF3692 376601B1FAADD801602668370B5ACEFFDBACA8F8B3F4E850D07A20F6F47440FC FD39504F0FDFCA35AF2ED0DA8BAB63AD42EA8CDA912CE17F5E62192DDD912333 3E9FA0884117F07221642490044A72E359D5F25D9591A8FAD568A3DEE435C354 11995C0EFCFEA21735DF44A30F79F747510E28767A4266461D1394F81344F6DB 1FA8D0B0D9E5F52FBB663C8F1E91192E5608FFEAA178B93F8298F70510A65BEE 12ECB5D675311B5B3B19205476512D92B1D16262720484049370A76F78D9BDC3 02EB96AC1E5B3CB078D2F219988FD0F36B043ABBF347B22D36CF541A8F80F791 8E4F92D900B7E7B64DFD500882EFBBF23565FA470103B2E0D2D14E3E4D7827D1 BAA0F84713A8CDE5904FFF2794850871DEADDDC53B77A502F5CA98B0744BB656 2FC40ED2AEBCC5CACE2301E983E6C18CF16AFB9FD8CA49DE51B22F4259D43076 DDC1BD4974CDF2E733EAB6334B1D5614288CC81FDCC722CEE193635D1088FB29 F80AD5CB96394AE89D920DF8E1F271585AF019190F17DB51FEC9064B54C3A53E 3FD33C3B553FC79F743BEC9674743BF0A821051261DE4527A2BEF4A04E293E97 02B181EC5F5EED3E26060F2C9EF6852B7433CA1BC1690C30424B03C522A087EE 92016EBDAC4B787133B4A22BFEF0B6CA564C6EB910E1DBF983CB4CFC3A1F8A26 45329CED7F5A8704ACE9D4233583365A5A97342A053EF403F0567E9D0A62EBCD 84B5D7145BBB11D31046BC2CF5B450CC68B85DA0E78EF8902F8D37DAAA9D4242 455288C0D73748F9BFEB1B1769D6FB84B94993D5F7C2B9CBDF75AEF2C930F277 210B3CCB8A0299F50AFE2548A4B8DF5ABB52F098ECDD56FCB8D3A406EFD95088 92D7EC39FDC7EB1824ECA24D0CBC6EC6F4C6A7F9590D593B269D2CC0BFBD961C AA8BB4296B4E4411B54367A341A5EDA97288DAC370A015FDE6D7FB0A4CECEFBD 1A67DF3A3703E922BEF2C414FDDA42482EB35D5DBB206B44C76C412A435A0842 6845EAD204BDF87065CE2C99B05D2D4080D5D11CFC3316967472C7DA44CC1F9D 51B83B4BE9B882D6E9ECB482F9855D024ABFBA502CCD624E0F88164A6F13CED4 85F20DC01BB15C7D78B1C79FD9FF71F4B043F59DB5C297768115542BC7C8A99E ACE39A268D32122541FB441FF1364FCBA2B7627F12C49ED038BC044B6D9D533B A72D35317A5AB8D91A9AC56CA90D1DAE9F967605C63BC9F406FB3D5BAEB4B38F 4934EE3D2F5FE434B45CF5C2D0E5E417EC279DCEC4F16504EE40E837B11620B7 7526AFF23381ED3E9A92DA4DBF4EA2BE4FE444B9A74AB60EFC818E20DD8B852B DF8CB659C0A3956D0DA61F49A9DD467726E57E9B32EFF540D551A67213D40273 AEAA6E319D92B4B406377D36DAB85662C755D76ADF5795C52D54ECCF0DE81E30 B84F951233A0A400CB063911837F0AACF44AD2441A7CE08818D64705E1ACF7E0 F59AEFC5DD812981C5508385274817056B2CDCCA4C9F3103C92838917EBFEC94 21D5737AC634B23B6F7F63B166D60C6BAA8F33AF44379C5A7337E737190EB3EE 14272B905D08C01EA118964D3444A03676FF3B62E7626168FA1DC6220699780A 0BD5776DDFA26BF0BB335B3C978CDD5CF1A419D4B5C562B3974FECFCF0118199 E547EB287CD92E32E881F344420FA3CD97333BFEF5D7E1BA31FD20622E5B4F95 692DD0ACAF01D413B21C8608FA87B470191C3CC5AD333263C955B4ADF4370FCE D6667FC93495003F4B6AEE4F83603D55F19EFBF56F955FC9CC01E494804952CD D426FE706C13D41F87C5C668D8B6BE50AE0370E07F52AC0534ECAB1C19851099 FC0BB1EC2A649795A62299F73CA606EDFB1D28183DC63ADF67294553115E8C57 7CB603CC491A6065802B925E6DFBF42917EE6E44C714228AE452851D61BF70AC 844B5D800EF029357FD659B8A648445CED0ECAE1474E443124F4B3644F54C556 A330D92EABEC7F607C6B13FACF69CA928F835056BD1A8ADA20EFE6BD5CF4A1A0 8B9E415E4A5FC6F209EF05ABF2E0C55F6E3060D1C72967E1E68791499F303C8B 3960C5A1F2DF6306710DFA98C8D0815A06B5590374554DCCDBDC4C295B3BA6B8 8BE3200CD4421A521C06BE39D4CA495BC63F3F982CAE3C82AD38DCB537E617D3 34BD96EFDA7C6A0F6D97A6BC9F084645390E194E7A11399FCE4EEB9A965909BA 6EC69D34DBA081BB3F18BD1ADB1AE1B7FBF96E4C546498667690857EB6931841 46C427A5B7C7D99FF889582C4AD11A7D267B301C5A5AAD9DA99D5BFD438238DA 62DEB899FF0F7B7997F781315B2CC328BE3572A3903A33EC901AC6BCC7F152A9 8A6865C6CB17189A4EEB699006A5F9D4482D53A76E88438E444F9302C79F0DC4 B3033D29D303B38F5959F020337EE6619DC8A8C3912101B02CF8AD113BF4BC29 8C6B9D25AF6B6A787F222C05964475B49B6751E3A3A6EBBEA03677D5B136B9DC 6D9AC20193BFB0759E89831C9E2AF68BD45ECC81175DFE80DC0879069ADFA8E5 24CF3C84121CD9739A28BACB9891945FA4E72EC07136682E18FCA81938FA6A3B 8CEFBAED60121530E33C1C0E698B5923D6AFC4E907A99B1367C3D435CAEDEF5F 878237453B8DB2FE53073CF3319FD096343F42D68F097759D051AEE17E4FCFC9 86E17099799DE82A38F22D870BF7AB90890E3B5264976700BAE594C8563A218C C985D9A5A7D7BD959F7E4E66286833C86E89203ECECD6FC4C6FE1F04010218FA A5714881C4C846E85F13BD68AC250CD0E488DBF60BB10B2CD7AE2E30F9C21DFA 0E84F76B4E996AA1C5C056E64BAC85622C160B56DEFD4DEF86887C1201F7C20C 076D4A27BA69572BE9C89FF3A9D3BAA5CAE0A6F2187AD01ED497798A305E3BD8 422DBFBF45E3F4AD35240B07285128B59FA9E83D9F6A2E620CAF6DB05129D930 44CB241CFF84E776315114C3AB61FBC0A8368D9154CC5066E2B162E89DA51165 F9CC075F2524F9A8624D2B56ABE64AF93B9F0407CC770C1F2C76CCDC06345D03 7B173C2FAA201D8E1F6C0315987A7A13902F4AA5ADF081C2B0A01C77E4F7A3E7 6A4AAEDDC577E855D69D38AF6A1D271B02AB496D94D81996FB078FBED17F833D C6C0BCE141BCDE277D530951DD6574B9CB3CF0370D74211E9AC00C7CD3A67842 0B4B72ED517E4906409DEA7993D0B8E92D418139960EBC86BE63A1B1D417C451 8BA13C230DAE1EC4E466F23351D410D9FC4A7BBD477D5FA07659B71CE9921B1B 6755C67AB3D4988064004CF75948879D16174E8097C91F7544352474C2D9A1F8 A1813BC6F4BA13E952678F5707F19B4799ADB3BD186DF650821DF58CF3C78D67 84E4E1DF8DACEC50D15647C3DBBC3C4355E602D3A03171FE1CB36FEB940211EE 0A5300841DD7B7CF91C02B3FC5D89C691156BFF8A38C6C72789DF260B868AAA1 895046E405661D97FA9A0048AF114A89E3ADAEBCE541753E4FFCD902391B5372 6A97E32F0257FA9FA1DC15BD3140EC7F0CA5A68AABCEDBE73C38B35FDF195F96 0F9DB0F592C188D72D73512F4DD92D2371D1A59254BC477CA084E68184AEAB6C 266BB21DC3AAF874DE999AD2A17C79621AE322612EE4B6D5BDAC511418EDE90A AE75066AF19662C4AD855E4200A5D67BEE4ADA9A399192C74D35E59B15FB61E7 BB167282D32D538029ED22CC5C9860C1F6B7BA7F33D5CF108D4BEEFAE7B37E67 39391F9934DE17956303532ABB011540645DB8420749C9B9A019C3CE86ACD566 1EE8D8D5E0D8D0DEAB33B5413EF10D4EE650F82417002E436E0B3B628A657F84 074098C2E9F897D9AB692E0FB9F268E6728F94A79CF4D6B0A07C8DFDC1D67FD5 EDD5863EA8949D180B1596D0009D662FC429449D76BF13D83F0D0CF165982443 E9CC288CF7C5F2E17EB7F3736D1FB814196CCEAB8C833720E3733BF594E1B536 BC0063080BC751F9DA1741522B2967D07DDDA169E7D3417B4A39EFAC15EA5E8E DE3473CC9DF991FAD2A971F44B09635085DB02D692F149F144F3DCDB69B72C53 A2AF34C65DF0D5F35E82102E67B733750646EC03A4FF47138F7998607BD93AB2 B63A0B82E8E225FFAD5DC468077FBE8C8C8E5B4BB10A8FE836B07367D742BD6B D36DF5304B9DF363120504C279453452EB177FBCDAA6F6FB78A24848F4A1D94D 1E49F6C46CB36796F3F4C9739346381F28AF085C5EBDB2A02DC0570C7A21E097 77522D4947B51182431BCBF3E55CCDDE93A916AA40CEB577277FA512380816DF 9111C56F36341381D62368E70462577D0C135BB3CB4462B269AA8E0F03245BFA D01DB8E23F2DFD5DAA88FCAFDD51D48E562EC649DB1FFDA0FD8CC8C48E6A9207 260ABE35733D75630053CC74A07E5AF6FE87BD5FEA69CB6AA20122276AD92853 6B225BC9E3350D1B1362E04C7795D473F1266852B02C83D02D938C55D8F0C671 7A9205F8CD058304DFA034D99A6BC16C582F02484A089602D42DF30D7A5716C1 D42A4CE56C19E40C01DC7DED931FA13679CFD2700B3826A1E6539AAC12293DA8 664DE251C5D1761BB45FE364CE3F7F7E9B67F86EB31D9626CCACE4DCE03EF3C1 0D2FD1B12B5774510D46C5C5CBF0A34847418B9A1DF0C67789422D0EC2D49576 9DDE72D63A4A98613461A6F730A05336C691583F96C3CAD2AF7C4BFD3AEB3814 D909858B6598FE19397006C8C4D549AA1635968F47144E7861A2BCE8AB4CA7F0 4D253949AA0127559FAE3161C810A8CE22A3079602E747C9398F9C8B2A868F23 D77D7AD6B980FEB038E0557E58E1D7AE471036CBB96B83595D9C96A4895971CD C2A810651A045F876A1F5AE470BEF39F856808B1F8D736030A722E1576BDB3B4 4DF06F73D38D313C8A0D3504EFBC774750C9F6E687ABCB1927FA1BB3882AABC1 2306A030CEBB259AECAA646C6497712F6C1E9DB7E1365A60EEC5AEDD5147A77B 1E3A10D73C477876D54FEE853D953EE75F7EDFB287550B93CFA8250D1FE2FE7D D34441F1224F3DB1D355188819EBB98A94DB193B9CA23803869DD10776647BF5 5BB42031AC44A7339DC036AD0292AB9B732E6FB79BEE852A103C3788BB0F4B72 EF37BB62356F9B2DF7F5899A26F1FE0A3D6469C1034B8AB14F52555EBF6DC592 3F24D6DB395A3A182ED4B8ECEE8254661C19CC942F236CA40BAABE818EC312D8 7F5762C210FCE8A3CB9A23A24D0A751A09F4FCFB72DD0FB3AAE0575CF97D126E 1669203BE1C8F8FF626F49E8AFA7B29EF26618C6D8336D4471314D5D009BEC8C D914E74D0BE7D7C3A2511C0DDEB6FE04360D54FB3283AD67D9DCDE211FAFD19C 449E201F2913232DDAFB2043F674EA73C9F043EB73CC9A96289B3CF819DB3E56 5FE403D8C387C99979ED9F8EB2F17F82F882A6C6866883E7DC484AFFD0640191 71740152A7D8635D54A211D8F0B67EB8E1CFEBC8966982A571CA7C0E485D10CA E1AEE2598502CBDC203D4AD2FB7E0DD0875905D457CCA12E167D505A2E68C38F 1E154B9C81D75FD18ECC21D8CAE580902CEADD1795AD4C00FA38E04A1EAC4234 C0F06B1D0F1598F06227F699C3717C46D28F58C1DB6FBD0542DD8B0CEC4597E8 599D6727E51999A84A0CCE1DE1460E88013A138FABC23A54368C126CBE298921 16D82F36D4795B16E4DD238F5CB9FF28CEDF912E8C48A34CD981AAA4E0464F52 F3D139F7D9B6C0EF9ED0CA8017E0D7913E12FAD2AF1AAF7A644E5B1A78B450B3 CAC52770E2B7EF1CE5C51EEA47FB55489764EA2325104FEA20572CB5E368DDA0 7AA6F0843F780DC38BA41D13A70DC22569007C4004752D0EE7440B02BA430A9A E0B812EF44897CA80B7FB7C0EFE2C5AB8BC5D273408787A2F034305AD28F2845 D2E6B8CCD164E3BC97630D674AC5510E1ADF05269C1CDA02BB37DB5A65A13AB7 1B7AFEA1514027F0CC5EA914F047BB2D39B5F2F22612D3BBD40796059B006935 EB6045E09C1428294D16CBCC38979590DF5BCBAC81B5D2D1A74D58DFEC7581DF 7D89DADDA294D61DE09B42F0106888F344F9120512C10070320F0EF25438CE04 77E898DFFC996E6509C652FF250E52D7E657BC9F7F5F790A8FDA7E8AE2AFFA62 17154D124FF88A9637DFDFC89427D8ED505D572FE6CFED274E49771D67331CD9 10DEEFD194100D32105FB6F73961F12C19C7B31EAAC94EC8813C441BD498A626 2AA116EAECB66901C3A6062F7A3BC58AA41EF15FCBE5EB99948587F5197A82E5 9B27DE46B6D699BFB2D98291EEE42293A42651937B86ABA5BEC625142DD821B9 390F1B28F734240CAB92AAA1CA1E29DDFE708F1AB076C4B8AB7D0E935700BEBD 7599B635C2136B3C07DDA0BCA6A5F9F2135219588FAD82DB7480B3D1F7F036FF 762D887B63ED807199B24E46CE48DADDC3FA6B16CD8E02FC3AB291851D973D08 D956FDFC97EDC383A879C016E0AD7C7140D96E5F87A5DE378708E065E0053655 B03A4F22B7B727790CA5A8300B80DFD9DA1598C32D2F69C1DAF0E64B7F9B25B0 CA366EF55E55F932F28A0E560F89FE968C7C45B8C6A5771FE29D0E08915F5FFC 9C0CAF8FE31FA41BF24C1B42A9B4B93C105869AFAD80768BE70BFB6B393D2037 41AA3D91DE6D886A61ABB8B947FAC633CCAE0B0079ACF8012FCCA4B8B49AC2BB 3D1BABF5DB299BC7492F4A894B29202A42FE12F69ECE67DF46DBBA6FC13197CA F71772B500C2373BFCCF074D7DD658E85B1F04B84C5921AA538F1E2E8E636DC8 9FA72CF14BDCC7C6EC562F449D1AC53387471D6132D6624D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /UniqueID 5096651 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 15 /bullet put dup 17 /equivalence put dup 20 /lessequal put dup 33 /arrowright put dup 41 /arrowdblright put dup 43 /arrowdbldown put dup 48 /prime put dup 55 /mapsto put dup 114 /nabla put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B1491 307A6D9A2F2BA5099C8A07762E70BDAA74BA5E2BAB260C1352107EB8A96523D9 4BA3082B99772D585329AB8645C3BBD11D72BA01F95CCF11C6DEBFDAAF7F5C4D 795F99DAE6A8D59462D759001BBEBB59AB0C322EFE02904D82B424649C2FA593 0E23281DECC5AA908E54244566055D418602EEDBE78843300158908F77C0AC75 9562065826D34C38C598D8626BFED7CB672F132E065E2C27932F709935988376 94901EBAEAEC410E2B36575A71EBB8954C3A90EEC264E6115950FC91D0D54999 323D8B4FF8129A8EEC3900A00CCB026E6943BE105BF5F504AB332FC17E568681 F423D1125A596766BE58ADC658888DB39BA74F67CE0E26C392220832FB036E93 7587E96684BFB78BD035F54AF71B2408241AAF548F996AD440155624B3EDDC79 2102EE58E1E27EAA0675F1F13297A4CAF514CB319E58D424A820B8F48984987C 4D6628C332DDD7ED2C5136C4B900E476A027DA8A21BE33F294796C095CB0228A 39EAE95B28082D1E297D286BC2F87B9B2B83DF28F5CAA71ED3A9ED5894F5AFE1 384B75CE4AA85B26B148355C1901BE27C27E1DF0F3E840A86EFF0F4541E8D966 4C36D8E5034E709A75A3CD338156E04B09C3FAA39B33D99DC44948178F985994 0D128A51073C0D1CA40DBBB806AB2A06427A2F8F5508962AAD0E94536EB597C5 B976115D1D3080D9460E352F0263ECE479716A1B3C82535D65347EA19A6309D1 5E421EE363BF519A43F111BAC52C4DB69F15E7EE6E62FD2B0F05D26C63889A2A 47322678FAF3EFCF317567ABF83497D030DAD6838571EBF907E0A30FEAA4B0C7 FB61FCE49B05E57A1DFEC3AC096D2FDDD5EADF19664F2E2A44409DBD2DCDDBFF AF29CF2F90C1B024E0168E5FD2A5165A9A2EBC4AA0030AD6F2EDBDD6F390AF39 E30A394F11A402799CC366C7E12F7FF720BB3BF3F9792871F6CDAACB77FA9920 82B87E68E1BED67F97FD59A28BF09B425AB6D88E0DE2E33CEB6E607AA0B881B4 EFD0DA63B8C23A8F699F125F9162306ECB6ACF46FB04D0FFF81307CC5BD6A857 27D36CD600BC1592ED313619B0303157409B881339DC5FE7FD0AF404593A47C8 826A13EBD763FF312D16180FB17F3D12B786FF4C7539F3996AD4EB68443A5B41 E9B4AAA632E72908426F2B3387B3B374DDAE23ADCA5F75F551B8CA6BE3789F76 06DDE32E381E368F424FDCBDCD178612EA1B394AF7FC20F263ECF6180F14E870 1A581A51849ACD04D70AACE1AD4E1BE1CC721E77E890F04667AA3FBB6915C2AD D25EBF771279B30E1DEB977C9EB6BDFD889EDA3BEA4170E261BC5BEBCBBFC297 D5130F1C5D4FE64BA7886C46C9CDD4B952BB5DCBD516724BD9F9CF4407BE190C F071B06C0F827168AF0C4FFC41A1871413A2A3872741CC9EE8AB3F2EE51E3DA1 2BBA8A6E5BE27F4BC3A56451C7EEE7E8BC267829734B9650659AFF9D73A9B013 D2364C79ACC5A8774CDA23B228D40F9734E80FEC07D5BF1CC1F6F8E4C67D6C62 D1625BA72D4B53BED264B610A4AC85CCFF9568B37F88D864C695203136F50F1E 691B8976CB4F36802F3ADB48FDAF39836123C450C5FEDE8BC7DBE12D886250CF 91F3989CD5C200C16AE54805972301A03F5A3B0AE12D916A27FDF96BA0637570 2856D1E97C845549C044CAAAB1317C2F4B566F58C5A81BED3FA20881A4CB35C4 F16F060B4F9726F6B9BD980E133C4CF1B68E6F3ADB117002087EDA3F5A4F2D3B 2BAED35D77AFE09DE79CB9B2E744C4A728C25E6F6963C4EB1605C1C78A2BB2F0 7D5593F661B75F403B03844580B08737F154EBF8FC0FDD33A903459E1EB62788 9B1B31438ED2118159FFBAB8DBCADE9733C8970D6B68E23B31C9B88C16389B97 63147B35E2171621737250BC8DA275B2BAD80F8E13FAFABB29DB926EC8CC9BFF E3B4AB0B9314C975316A9B0334CE3592A826EE821CFC6CD7DABF88B2076629D2 623C38C6B11A21B27B1069EDC444E13220979C5B42EC62C40DD06388EA283C4E 3A12196F9653441D5D99E7522DB99D12D02DC48B95CD635AB8A60BAA721B55A6 B96A9DA56881C881D5CF43F868017DD9E713E886D155629D7497076BF72F508A F34689015ACAB21701F220081BBF61A3C750920067BD8EC7FA67F4831D114AD7 058B5C3252873C9B7A4587236E2CEC125390B6143697EA12FD7557977FA8112D EA0577C1AECF467A931A3644864F6A6B6DBF458F5B3BAA8D68DD715D3A27FA16 CCC2CB3481C398B93AFA3DBFDB90D993010B03B715 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /UniqueID 5000832 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 35 /numbersign put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 73 /I put dup 74 /J put dup 76 /L put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 85 /U put dup 86 /V put dup 88 /X put dup 91 /bracketleft put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 125 /braceright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC7448C1719C88FE99BCB73F7DEA427FBFCDF4F 00EE079B0C712F7D2C8DF98D4830A9D8C8B70A8C5D54BC1DF433517EE593A104 F3E083BFE49E9CFC4269A86B58AAAC141930A2B4193F74FACC1EFAFD38D3EDD8 A6672E3068F4E5FDC99AAA254345C99C06076420E55715665046450EF164C524 F4DCCDE02254E23815458E7F703D2377C26B73B78B9ED3E42F346F6CD79F7F36 55235A7018C0F600C8828A06AA35100F143FF18F738D2A61D1555F907D04E5F6 3A71729A13D3193A46D67488EEF8E05B5BEF2538E8633B7DD321E56DF4B1C765 0630C432BAC0E607C1EE5D3872008F9AC757992A6A028625EC7A119C50104A35 4F85E83600D55508E00BB0FE0C1257769C8BEA7D15C90C0727C76CC3E25AF16A 8C64BB2C7917D7CF37BA170E3CFBF0C0DE305E7AD2C9148073A860D205AE370E 3B7357956F55F7CAC4E40CE6E055A2B64148A3F5692642D746ECEC4B91C16CA8 E4C21D45FC95F4483FED80420E4BCD787F6C1979B0A1EFF044237CAB3726CD9E 420F208782A53B7D8887ACF95A52459709268F2A54025572FCD9F64D2A2A0346 421240850599926BFB60AEC2B30D2A6340553EFC411C645BA159C95E15300FE1 68FE00B0D3A2166DAC0742506AAC676750DCEED099E66D428930A8484AD31483 A950F4DE855DE567BF2AC786339C0FB95A5D28230945D137313CB5E063045965 0661A7B4AB8AE780497DC8EF0FD5AF6AFF139138F7CCC727AC0E8448119DBDD2 C720AB4267EB6D070EE770BEE07695968FCB1C0AC1B004ABF61B57863F0A8729 064C520E121A74EF9C325E5820D3C9EF826C2CABEFDFA6B483FC48B08D9412BA CBAD386EDB21C4A95C9C7B67C77541254A176F1640E8ADC084E63A7C581ECFD9 8FC24F3941A673793E796424C57DA924DD4DA22B4C5CDCE1293AC2AF0AAFAD8D 61BAF62228110A25DCF84924B838AE79C6E811307D610C020BA519893DED5A5D 31264D4A4093F1961492282910DA2DF652D790FE993BE653A80FE9B5F693D51A 4284D3E3644E8526E4E1CCF471E6884E7BF0A68C0E3F5C7E6F5C409DD08B896F 570395F5A21DBE11C81C2A54E19CC16DD42E88EDF7CE00FD4E655EC0AE8DDE5E 9E03CAE74D6724924C46B9C92E95304933BD4F17216CB98D914372BBAE3F7446 9988218F3F16B015A4D5B0AFDC36732A2D6D8EC2BC018E6C9DCB08CD8DA62984 A54B642D102C7D8DD4975DC00FBB35A841198134DFA827D69C4E4F110168355C 2007E89333D8D04FD91C66F7C244FFF3AB52E138982648D5C9FB29924822B0AE 7E3BA41EB7AD90518763B64B0B422DF1DF7B826EE04BDD3E54A6FC00F6B8BDB2 6AC2151777B6E8367F7A181E2FCCE68A48279449CE771D390C64E74996C322B8 682FB988983C9CA5D46574ECAE4815FFF3C4E84F0842D9A4B790985DA5E5B2F4 3DE15E0C346C6F74FBCA5445D5B474718761B7572E6234174576C575DCCC8242 9BC82DAFEEF86EB672ACE7C9B102ED3F5E1479C3146D6E5E6B6D057BB8D4E525 E1F8DF173BD8CA05566BD41BAC278FE141F6B0A0413AF3A9129FDD04F9A01494 6F8E70ABF019931044DE2254C933A427206C24C4F502E4EB602448DC91B35EF7 3B4C6F230A971044D26B5B948B3CBEC356E1C861FB3EA5159DDCCD4FFE26D2A5 AFF6DE0E55A0E666860414F5C0003FED045DC360F683E8548BBD4B0DA093DFC6 E1C6BF64113599051CDFB0158C60C1489AC419F5D956AF11A279BA06F821A266 D5EE0CEF64ECE203CD1F49C8E3925D9104EF4DB658C52D3A7CED5734080B57E1 325DD4309B3605D85C945732EBB9401320A06D98730EA441AF34985C393937FA D79C39BC0C9811E15FB43222A5EAA0C8F43F3661ABF8578944454B3274F16E3F D14867122B33F45E02D31006EF5692A68771D1404671122FD14F82C2433987A2 E1880308C25C7AC82EFA06F9FE5A0ADC08552CA631FAF547BC139B8EEC22BEE2 E8519DB34C4BF9FEADDDA529CA2DD666CCE173D79A11B8617198991D85FD582D B252A1D404FFB4CF05F7F838DBB97F2F5CC631171A4C626FE0007AF4A42C0A08 C4DFD137847B0D3E2B9FC5DA3C3829017AE5245B27DC79268040E83CFD092505 6EF16E2C6DA9D1EB53E4281498CE1BC740EC90A076CE1F2548ECD85EEDC8225C 9D624061D260B3C5CBCDD213E110AD6030E0E8ED8D7CF8C91BA3AA42AD197F25 C960AF4A66DAF334E5CD42ACE11622D5BA9DDA1FE929BDF6223F82F41BC20540 ABE3A9C7DE2A87AE67437CA23ECCA1877A49ACDB394CBBC16BD5130CDA26F8B6 F0422F3340502646EC7947F60559A5EFE662A1D5457D030C8C10412E9C1BB27D 84D30511647BFC36D07E89110A8E63EF9EB946CA46A78387CA94ED884CB9CDAD 690F8976A676F136065F812EFB4132ADFA39345AFBB8A773FBC6684B01D529CD 9F6D67390AF2E314BC8E0ABDFEAD9C04ACFB19DCA7A80458B859941FDE12AE51 2A7F5D32C24F96CCCAF13DD4617C9AB7B9C640F11115560CE32871107C06E2EC 0A27430C118BC3D230A59807F397A19BFFBA4607E981939CA029306E7E1E45E8 3B33DF300964B1953631F3643CE50696D6E8D78666DBF0256831E7AD6AFB646F 54CEC7E41241D6C0E4B05B62AE3E95821D3D4AE8F908EF485539C0183FA3C558 8A14412A264B827C6050DCCE777B796B66811250645EF4A3399C28320DCC5BCA AE4445040D47EC1058185A455AE06BB400E61E6AE63363CAA8916C93CCAF12CB C1C77E65C047DDEB9E0891A62B5B79F3441B6C85A6EDB666D1D3C7A17E484FF0 67E5F473AF65045928E89D218F19B59CBEA526B223E36E496B7913A32D4586AF 0DAD0C06D8BFA26EA833F863C61448640C05FD6FB724A936C781C2424C38ADC6 F11F01149E17871685427D64B9989BFA4BEC30136B8BBA284FC6E4F61E641EDE 7B07C21A7F7345AC28E7ABFF85A8D31B77A65FECDC7D5CB2568DA90DF32CA1BD 3E9343FDD79A78736BB95F792EC1E9400691C69D14C85DC0C4D371F5EAF31397 542F255DC1B76FD7B49B65098E3917546CCA99648AC7971810F446E929A44135 D556625B52750D9902A9FB77DD43C83EE66F5F93A7DEB7DA08B301B63D57A6DC BA409E72E7EDEE583AAE1A3BC0C9C4A63698635C2EF0E686A3BEBF3DDAE60CE5 AD8A227CAB65E8F6DA44D40D85ED9D1F77A10FAA169EE9B44B3678E939F69F4C 518530B397284DEC73FDF7829501E962F1D03ED02697E0EA358FF48D64AB4A3C 708C0CED1D0683CCB2C719F9954ACC04C5860D9FBB360577B8B501D4F5B558FF CF1AD65C9C29A2074B5FB21D5406246739B7A01307A053900657F018FF2277A4 1E45D13BDA1B51B7307C69DC9DAF80B7056981ACA0257725ECAA5033EECE5B6C C58A23E5929026008191416AB472E7F3AC14E9D10092E4E3227EAC0C93538ECB 76F9B91B4251E2B2B09FFB819AA9AD1F62B18E61EE98AFD318AA24AF97578740 26844505860F2666081D865C00FF9B1388886AB978D395DD8A9BA47A88641A3A FD6BDCCE5D1FA15A01B71764C8A55E4E9930C4C5EF7DC8518EB066F5C4DA46CA 7A5C06CFDB8B2684F491A1597CA581BFA49B96B3DA8E1EF6E0F806C1ABFC6E11 705AB1322E61C3829E2F9D5C57B6A6A9E7B6E0A932DA28467DB52E24284B8FB0 94E7B9BA1A4A389C8036A179B86E12A54F6D563E13DF630D4E155A4C15B9A20C 4B842BE3D1DDD4E3D51D535D20420DA61A287BBFB3ECC765AD0E68E5A24F0D21 4A0F6BCAA965A3666858798789EDFDAD43B9F4626E4364A8CE71574F2D1686E8 D9697374671148F3F36934D2C349F81EC57795AA2446CD721FCDB6BBC7320029 E50BF811BCA1ADF18509D99B080675699B79BA0183DC0435C2132A26791D6715 2885043A1E1657FD1FA5BE694A756EA2A39C88F25C4D2C0DD80D5586EF2B672B 02C7156CBC2BEFC9D45441BEBB71208A816D58C05678B8DD177AA05C69B45716 5F0B19BD2A592AA194AC6738CB8E5EFD9ADCF1F8F921EDC93B343E53CCACF842 EA8E3BC066BF2ACAF9FF9B8E46BC3FA463DD16D868A2DE5EDDAA47AE29100E4E 903A655FB41500DD864DF65EE09067916AEFFA454CFBF8570D76D01209F22F89 B5B78060AEAAE8D45AA96AD756A2AC249841053B50BAA56CAD8E51F632E333EF 7E4F1B5FE66DF4B905F98C1AE80D87436437B9E0ABD07E9BD7C07116E70159E6 D05CADDFB822FFB721AE5F721C994B455E7D4244F58E6A1696C01719FC61CED7 15D9B8D32FBAF0C286FFE90FC9DCA72C2C648A60ECDE7C55A0EE77AFEC1D9EFD FC288AEA8EA6F2041D750CD04B6AEFEEC0E536288FA02A897F63FEC872ED1984 302AA79354678DB4D5CA55E9B5DD447832B4E1DBA73D22FEDA6AADA337C61B71 A33EA07CA10F81B76865FAAC8F4D0AC255476B3BA6FE4CD1B83468A982324C8E 4318DB97932F39A2FCDB6EA5548C4CB322F85C4E3BE405724EF941074CEFEEA7 A4919465FCEC98807FD1330C28FB03DA765746B86B23B6DA57AD5C507C4D9306 DD77B486858E2587BFB71982D42994A8155D9E54C85527D8ED4997FAA0DBD158 A4DCF3DDFD549135CB3D4CE7BE407CB7A06261F4136381B1282E8623C6BEFB33 5AA13D2852EC7B4F9C5E464C71933C90CF92BAA47B1909C4FB8288BF504FFFC6 F63FD68FFC1F1DB0A2C807DF17146C947525D14B355654D7C3C442D34E098CBD 78DFB02B4BD9FD181851AEE5187B80CC385F14F1F7319DCD8A4C02A058FFD558 6DB8783F0603C5293A3C6E79FD7020AACB830AB33ABFE760B45D106EC53239DF 7733E202A33DAC62DBD146A6D44CFE5B10ED7A5EB68F8CC7E8003E1C508F74F8 21B51F2AB32C10056E59430B04C52D0D7E92462EA6B6C929A92C245E703E5C0E F18B0549F08C81480B26B42C3E44D843E50A90763C1B124C17EC5FC41B923223 5C6BE0F0D119544F1E487D9D50B1155E58305A05CED6A94B9FBA9EF5694A151B BDF7342F92DFF131AAE0F35E9180926313D1BB5E5D56C5C0994FF09A9283E44C F64E71F6017DDD7A3FE0D4F61ADBAB9A5F13C78B88DD0680392BBE0CD38E72A7 A52E8524F402601D3A68B9EC309E1BDCE01248ADF109183D990169C5DAC473D0 E294BBD8C030268F269DE509DFFCA02040A925488CBBF7539597A23BFA8DE89D 6E5CFA54651613F1F69AC6F8574C26175D1F1BDC06C89A7EF11F0CC6D5C283B1 22140A70600AEF3971042C6158A1A61D6A2D15DE8507489D07C89BD568DD74A4 2DFA39E57ECFB84356C75C4427DB63D4FBF3F547F8A0E70BBB8B567CF4D97E11 21DBE26F12CB41981D0AC642B00FEC3083FCA686BF4D87B6195C9D1F4214E32F 0B236B531019690B14FDC40E76F9705D18A15790A4B37916CD9B6F6FE05D94FC CBE963052FAC7E57EFDF12CC856819432E749E5696CCD45B24E53E4953159682 AAD0F210DB0BEB51D9116B36AA4AB88CBD29BF2750E74611F5BAC4B675FEC466 D5B830FA7D249221FD94C1A67F35C61E1E2DDEF0A68EBCB329F0976AA8CFFE2C 9E58DB3DFAC4B801EC2508CBABCCA8C7FF85B4FA9B64AFE578830209669AC52C EE0C53411766D42FB816999237493F79A581C0EFE86DC528A3F67AF59E4EB3A5 D3C99AF820E9147041A83C906F22B71C52C9B173D66C15A1A97176EB7F95261F 1629D296DD8049DF88B0481D78608BBFDE0438F03819E3263F7BB1744711F9A2 B0EC48C82348C120B9E57F71A3895624EC862A1B681854CED50F83D80195C35C E7C2472AF7C2540455726F5C9C9F174A9CD53A9F95E447C0F9F5F9AA6D08E16B 32EB286D52E1176799C2197186BDEEC18CCF2FF7FD0115114C5C1B7EEA47B1D6 624E6E0E8749F4582F541583EC6730C19B46A9394D785409C096B0C9DAB3A7AC B60FCB2DF9886319EE7FDC122744A210AFFF27B690F277EA0653AA00B9D17A1F A8F0288E5B68C52B9F1B07E6F4A5FC8B010758A698E468FDF6764D0F37BA9DB6 53942D65EF26E429FA1FE44E097195A07D15F8CD101CFD5FAEB5E551F82AC8DB F7A37BDF5BE85168888932B3DD2B06D394E6C7E70DFC4F838854F2D32B34FE0F A0FBB3642400AECCA05571E0351AEDC90266F94B9CAC3BEF8EA4CD0E5B03D036 84244F76D900EE843BD07DDE2EC585FFEC186F743BC51ACE986F496306964622 5B3F9E7E30C297B164E6BB03A20AD622DB8431FE0A9468E407A7B9B1F433F744 5599D23B88BA48CB781CD082A7FDA5933325B342F72208525A10C58FE79946E9 17F85F235C7739B3DB2662950C0BD09F1A290E7D8D302361BCADD1A33DC579C0 F0847985C25590223ED2643A82492645B5DE8D1BCDF2497235171A14810C59B6 35A2C44592A5007459B5835E57BEB00C42A3858E20B9C2991B9BF5D5A1B29B12 DBD60A7DAD50148B79B16726D5072761982176AAE2A449C8D69F095A7F408B45 DD191422E56F30BF56E14B5F5C186A5C065902D79576CE50E718DC4E263CEAA0 76256510C233087B12BEBCE77EDA28E77B04DBB02CCE909F11FACBAADB865F08 50DD96EC45E2431396E267DA4FEF833D94012EAF44FEC6EC8CF570A502987126 9FC87850A36C4DF8021B3890FD2966C74432F57DE5B5E802FB087C3794E7E000 E6156DA0F00AC69F5307C062F165BACD2EC386EF364EB1039F9B3D3357E07C68 F46A7E9E435E7E3193265FAA57DB246F1273814A7E6D2C681AF4A5CB3C3B7120 72346EB37F200808F0E0A73E1DFA507ADB3A8C94209DE9FEF04CE2E3672C823F 870C2BBC6DDECA13C2C225CBE4E14AA51B19879D2559E48EAD0614335079F6F6 EAEB6B36772C793869DBB1B0394561C1C77184E44C31FF33A1248B1DB68ECE3A 7BC8AC853E4C7997B56DB62680328B2D026119B9CBE924DBE8A33525C7AFAAB8 1D38A6B7A77941C34F8E643B53372EE6B0FA9DC0CCE8922D31EEE6550303DBA5 5F4941C1C6BE26D13B70720ED3376614AD01CFBD4030C28EC20A0E73F8709E21 A640B5C506DCE5A58A3973DE00060393CB77160143B70292813F759C92AD6BD4 7335F0C43FEB33751D0EBC6F254290AFB266382697D4A16D01D43761306779A8 66C8FF08A0889AFD66D741B309A7F7B8E0BEC14C5256B9940FB068595568ABDD 23B489D2D4879AF3CA9F1B544EEF84E187428AD072A4C1AD1756D01DEA2AF306 DC44949C3B922B44C851EC587CAF53409A4DFF2910C1134E967A5361357CB6C0 567F0B115FEEDA042920636946D9CAB7C5527CBE0A26E8688D01608CF693BAFE D71D0B4C27035A59260A03DA821ABF612BE09DEAC98F39FAC2076E357542F4EF B1A1303E87203FCE274A53D296D2C4A7F77EBE873B305CB1CD93BD359AD625E2 CBD6555BC03120491244D726DF01FEAF2AF6DD52CD65EBAF2187906C08B451D6 C86C8D922B555B777982851E02B0DA5FA5AB96282B3F5877793A08DA638A56A3 2550144EC17BA7F13479FCEC9D00E4C300617B6131EA6FFFEC99F6C96048E440 D8F44CE9B589CD814D8BD8D0D13ABDA05984BBC67E092FE781C4990BE94637AF 6B731E664C3C6EE1F91C8C183B2F45A6D226E58B83ACB55FC68EEF23CAE93443 1A98B9D1EA8376FEF1D4D4B1B922D8EFAC7F3687FEEABA12857110E3E098FE9B 088A83A87C4E1559BFE5E3651DFCD3157B189B79BA8B353EAD8AA52A53B2B5B5 90097100D50B3825744E38D1FEB731EA0B6A5C1809DBB997487597E9CD844192 0AAD205CF2C40BB2B13F06F4FD6CE7E7190CAE34C34F526C42645E9304883B3E 6E5F98693A581E13E041AD7D9354122B9494EB36D609C3515989E04964C60178 152D1D4E34EC65D4BADB2E99A6CCA9B9502FF0A9F4E8A5DBDC87DE22231837DD 06410062F2B1F0ED2808A5852ACDDE832485101734E6AD6B29C9444020EE1D52 E31CCB8F5C30B0029C90EBC3B52740BD8A0214827E59590EFDB632AA3B05C614 FF283AD6854DA498886DBDD105A1E49720EB5FE7FB40FBE194684895D1CA38C9 2EB1B90988C5B087C41A29E8FAE94F25536590F6FC4E42C2E34143D2C1D5EB25 52F39A57CB712A44B0707701837326E6AB87F4FF775BD5E26A7F1DC1D4BF7EAE 3512296BA49FEBC021B72D79FCE5D8CC8E231F17DE5C9FF4EF8E6F609EB36F02 0AE66105D2E869C9F1F5895E6DADE9EC938A5C5D400BE261EEB135520A657843 B55B4544B75D63CCE8F4B450CB5D8108AF4ABC59D4056F69F0F7DAA189F47C2E CA1C0B7891982F020375B46742B1764F5F5A19530C7FB8F04E876D7E670F7010 EE4CE2775EB8D63E0C9B1F9EC83B3D846E1CF7E55BD0CC61AD8416453AAEE290 E041DBA14D2ACCED84331E330423D4344F120815432E1514664240BAD0C5BD09 1A662AD8E3079C30131EAF89A5D6972F5412D7E91372D3B6E2E7E5A4F83C8746 F08C283BBE126591BEAD6729DCA6805D3CF8BFD39869E62854A6B4CE266BC06D 12A56A0F076B19462B0AA03A6F6B308B12DA9842F191DC895D507975338FDFF4 1B72AAB76EB4A59A14F0E519BAFAA5AAA883B49041C1073E2EC54EFDC11F03EA B748D0050A29873C7785D00C79714D6F25D2C3625037A8C7F8B2076EECD5C91E 334F35A5F82843310CD7A2BD8127373DF33B63210C7EF5647A2933BA1DEBE975 1CFA4879B55087F8893747AABD3C3AC152A4BCA3DC213BB3F50B9B78A5AD906E 6586AF5685C0D7EE06AEA00A64059FFC39EF8EC447B9C1FBAA7C015B01EDC1B3 5919D944BAC556C0F93717D80CA00AB6159A388DB353A8D4F4B3EBA4804C0342 20205022585ABB7CA7926CD63A36FE942BA85C250B48720B3CAD75CFA2E8B378 1AF979B0771206E1B52677BF0474BD2729C9E1472BD91D0C8857AEF7B67A1E78 FCA67B2CD88E2E9FB0A60F618F76FD69E0FD82A04759D4BC64E2D5207F0453D9 B12F55CA21CD242B76AD37C3F469EC599CCCA1DD52B7F036A2B0C6E3160DA493 8E53DF8E51CC06086733B64BD7BED887C295DBC45115833A32587F83AFCC82AF 54C896613F85825941BB4F7400D80C3071AB7DEFCE01D0D3DD6DA64F58EF65DF 3A89C7E291431A1CE82116947B78DE1C9650A85DD0E622314EF1E2D033FF5882 47F315B05D5EFD4107CDB1F0027C4096CF3CE22990DCF8B34AE8E30D601EC5DE DEE23D1E19BF1CC3F3690605C2B63BDF89E517CDF6CD69813FA354C73210D8E3 4F86C68031BC501EB68F8B052D204F93257C952201C1191BEC2088B00C510574 B1E62264CE7F2E18EE3FC0551CD45B988A36CD085D751CD604CAE9AD84C20CE7 F6D3029CDEE9B9118B12E9D31446446DDB83B1A7311E8FB4144424D708E59940 6319E0CACC76A7ABC12664A99FA643619D78AB0B73DD4B8192CB90878D4961F2 1C2E7B75014972617E28E111993A623190B3EEE9E8ED4DDF654F70BD581CEC31 1A9D7CF8AA464A495F9141EC64D56A52BB620D299185BF47EEF723A528E6BD7D 3F30C42FD603108C01118ABF4A493837EBEC612E1D9D0A2F7588D025429374A5 350BCF878D1C52BD4656B1C7121D4FB63E86F7BC3DBF551684B10FC56E9D124F ECFC7B298CF999B7CE35E6E022C1675DE56FC74761F3E5F8C995A8EBC317AB50 01FBDA3C9B56D79646C8902A2777329340EC29A562B351C9F89C68EBC1E4DB95 A877DEEEC2F3DA3184B4BDEBE8AAF878F6468FC60BCB4655D4BDC827DB8311FC 985856412B397FA1119A0EBBECFE46FA0AA118AD8BE2C99EC5459526A5F0946F 883D0CB8219A1CEB31786BAFA0032CB3C8E66A213017943B05C7D7E759E4E11C DDB51A3DD2D56BACA55D8D29BBBDB962DF14665F73CF4DC9F0B349C04A31EB99 5A107E4C27E2CF58EF9CEAB851B739C92B07D6F693423D47DAAE0FACAB37FA88 EF9AA66C62DBFB32F26112F08721B34841D18B159C142866FCB14BC6FFEEAA94 2E2885DD9B428EAE436820FF189256DA24A3987B860491E6BC03F86AFE21617F C20FEA93D89C991B588A042F24B6D3DC8182CFAF09A208365F9CC50C71523CC9 CF0800B3BB5EC8098372FBFFC2A5F815EBF37B0D0F2AE780EA279F2EE00D5D6D CDDE1A14532D4724CF154A9A501DDB195794C5F73111581DAF698FE5146419C3 534DEC10E21826E4360B4031E320BCD4B87F51B1D20C9EE0BE559076CAAFF93D A9D31F1D90BB6C1787F871018D1B944FE893D4D80DB3F3AFCEEA3570BCAA8F5B C0211AFB1BB783A0731D6A4F52C4404E14E196191A6942878CA0D46379D9EFA8 EE2C965FE0AA6EF4F54357B6DF9C87421DA10FFFD50B43AB533130E2B3CA7E54 AE260742843F203807BAAB53803B2D3A6BEA640965B24A6D14762A1CB6478A48 755C77E178FC7EDB9F82ABF1CF63494440C43853BFDC50EE16F329A783EEB835 6716F8E7A6E196F7E6B2A06CF20A15A5BCB54403C9855529F52EEBE79A0FC849 73D63F284441B8FFCB1C002810C0C4D2D512B448D3670192919340E69B73FD75 A843880BE1595C10BB71E5B7AE22C08531F7B9CC7C999A903F66D2BE63851EC8 27E16E71A71B5F1BDC9AD9DF4202E2B9E0B93749EF3639A89E3C9C69F5D25DA5 5A8C83E984F4429634844BEB419F5D7F9261F31595DE7FC80C0EB6AB8E233F4F 041C4EC75DFEAB983061D2E0F3F8AD5BA0F0B62DB595B257F8B5C22436BA23C4 81EF03DBCC632014253084EBE4DD888D588CF2B114AF9F032EB4064052DBBBD3 D33C91D5C0BDBB68D3A3A555DE70C6049611E84E3CE265A271F3875FCB463A55 826E2E1B88B57DDDCA045F663A3C778DBC96BA3A611764F1A9E954A8E856F0AE 696A26FB40881032146B48622682947FCCA6BAB0B0DF712DF9116CB4D86ABB3C 96FF1D4CED2F4219492F728FAE67C343581A1417B6BB227D52F1EDBF8B981283 0262ED39652BD658E861C328B5BE2616A11F3D8DF7E3D378F16EBA4F19C967C4 2E2B57BB4CD448B097477DF8C6C3FBF1BFBB8F158D3C21136F4469FDA785685D B405F23E59A0994FD9E058B29DDE92D31DE27D383E1732C3092B95722D55B4A2 DC138BFFECEE47B28B97DDA5FDDA30CA1F4E880BA3BC312224693728CBC5267C 90F557EB7FD9C28D8F2C5659F94B245A71518A86FF280F93D224EFCC75626861 C86A38EC8BA2A4F516CDB80FDF7414D2B612EA22897212EED068321DEBE934F2 B825CC471C1366E0C56C54D5267EA06AB5640B0401BCFE1341904C665A83B649 AC349847B33A30ABB27DE61DC08899A8552C558B3DF4CA0511D4B59CB09859A6 7D68E62986C3F0A515F8BACF7511A2AB26C0751CDA309C1DEA4BE8336C167239 75A4130B81E97C2A52AEAFEF2D5A92B3969E846A5D029DA8BB452EF99F3AFED2 5FC8EBBCFA7A5BD63A1776E73F50EC35FD9F0A2F48680005243772D9884A4D48 E3EFAC1FC3DB014B27BEB8A1B414380FE22D877B32393FF6D32A53497230F2CD 0E4DFEA007676E25C325CE1FA38120704B70B9A003D81DA0F921F34B828E5B0E 2F71177EEFE56BE5C56CDD54FF40E4DF80434BAE5B6AEAFDD7B02FA86AC95182 20CB7926A5AEF07C7D6DCAB10D9DF10E6AB453365613FC3809D55331BF4BB692 513CBD6E2B83104DB0AEAC78F3E0109FCDA99A7B0CE99BF57F6A7BC0BA52A9EB 8763E26A29FFF333CF9AC3618EE964EE8EC889D497D500858C3868B33957DD1E 973892F35121A5265A4B3169A25019B4A46BA61DE92C58656B1BCAA100F8AB95 C82A8E8324026776131CE2B3F1B448DD43372D6C85FA796D9D148AD559804896 60CA40622B6CE7448A961491501DFC895F704998F2CB68D4B1153A57614566A7 5618C605CD2E1993F608E1F358AB84AC1D78D06C92908F0CFCC7098EEA581569 72517338DF22A229A4FACD7D5D6679960EB1D678D32C61A2E41D204E4E4E6524 5AB5758DF3073E915A51DD6ABD6945E455AE919D1205E6B1D0761458B8A00DAC A188F77CB2372339A9B5098D4C8E7FE80BFB90CC386A3054B5902A9AD5A6E937 1A0A0057AD6833F1378F7D91B8AF86FA08BB4A6307B13BABBE8D07DC3F901912 939CB4030ADB98662F3B4AA10D0F91281FF5E674684D109C9A12810E6ED53CB4 83027FA18669F6EBFB68DFD139D45A5F63DD8414909325193BB80F172148B207 2F74098FEA1B362B81B0BAE1D5FB2F4B2CCD06215C6F84A5BF3A8D7FD74348E6 0292DA07B7D175F611891ADE2F0D686575A4DCB27B4AD298EEC33CC4C99B41AC BDEA8EC30A95AD915F65961259524A6C07661FE695E951A0071E5C238B4AB9B5 37F658EE5AC61337AF8DB8E714538FA737F97B298F5263EE631BE20CC1468EC3 A293AA363A7DA87E9BCB67C6E42706A5E31B49935F756DFD2855458981E14657 4D7853E1F92D7E0D764A49E6794DC7515A413DA1617AF32874947815A409C7E2 2A2142E9054E0E96170A414F13C778B5B0F80314D5A1C29D5E4168DA6FB17A3D 6CC20B0ED92DC1B85077922C84AAC785AC7CF79E26E89EE254669A78C1C854BC C414AC55CA1E0483A82BBE52D671D93FB1D46FD43CD21F13854CA15C18196795 89706538561D836EECA0B341B9687C071CB046B0B2CF513DA05824B9B502DA75 DFFF5D8458737C55E8C217A4ACDD6F4CA9A1C86B5EB08CCC15BCBD9C68CD0F9B 23961C5E62EBE5E0DB26D3F12B2A04A4BF9F2CCB1FF518137833EDEA7B677E0F A300AD05EA0C2B86F6589AB6D7FA39FBD0BCAC7821E308021D8A914617F988CC BC195F64242395E6C88B090D7B500C942BCADD6FB53D3052201CDDA07482BAB3 E6C99160767832DA68FEAA71AA87334DD7BC64E36E41C30DCD43031CF19C2C59 49D1690355F836B94E9B2B3956D4285A754747E3F0E1FFE88DB723735C92B381 C93C8E3BADFCE29A9341DCD34286E2DBBB6B3DDE658FC5BAEC60B3214DA32936 9FAE3B3F0E76C1CDBFF4B6C96E9E88200FC1117BE465471249CBA1A1D233BB29 28682DDF4336F70AE881CAC1234F7F0153E699BE841ED480F4CC274CAEA5011F A002E6C13D0AE895DF945A0D083DB72325A0958D66ECDEA40A8A71AC924878B9 A0C904B28DC3E3D516A03B2E4207EF65F2357CAA419B2267342115507FFDDC69 B2CCA0B8FDE56DA8A7C2677BA46565872745549FC23DDD54E2FE295C4F9E4C85 C6BD58B258D13026A90A153E200E1A3382EFA265256BBF5994EAF095631D86FB 9BCFBA90AE6E7DD46949399190CC91711D12A4155E9228865AA7FAA9E73D7D6E 896E744EE435135D780CCEDF2FB4DBE88677E1BD2E59AB52C4591FB6DE735543 0EB96B193419F28322C3E10B7BDB9AB646A1DD9CC225E29AAE7C9645D1D9587B 29C52B582AA8359E2618B504744AB2BC2D37CC885DBD130784C3D4819961B615 322B5E106B7A1EDCB37502E201DB2A1E51623BFD3295590030B7CB691F8DFE02 E43AC87FDF7D215BB7D8D25159BC5F31B95E8D4F2989564DAA1C9AF62111EA4B 42DFAF08D7D1177391272662DF619B31C8D62C00DBE8CF1EF25BBEAC0ECFEA59 7329FD8A73DE816304F24B5D2A5657F90D460ED3C22B7EC61E25A04D96331448 0C5E2A7D4E402F481CE6375B4E8FA3CF5CE0E3349B1115CF70FD1E277B855C7B 47F47F28FEF4505C2F3A222EA943C2A3CA14480ACD065F7C7C21B6A6250B518A 1DAC4D00839F428F55C40196768C58C15FB821B17DE2CA853694B8FFD5A6CE38 CDA505D4A7740D82C25D24CE96CD5CDD217EDC7ED3BAD4F84BCF8607C973454D B28097A5715D9299DAC49259CD34AE4E112088BD73A034CC3C934AD56825B9F0 ABA9AA079A0E05481EFB7FD8AF82A7DDCD52A992A279237672E2F235BDB3F560 9463066E36522981E8FEFE15FCCB72986F1CDB1C1B1DC9E632C2F5177F57CEE9 B507AFB59180E79B67C0E1ADF4195B0A5FE8400E5767CE6E1B6521CF991EBD6C 0209C8D2B73402D794B1F615F4B9C1F4C7F2F82CE54B5F8BF1CFBAC8524D89C3 9B10EE3432AD496ED5B820A8CCC67A488C5C84DDE0640BD7928F088304811191 22F692E576211991B2C01B64F00DE2E2055DF0AF6E8035F4C54F3D5C13F63131 0DD2D9FA947FFC9F7EBE98FC709BF9324F5683B55A6B236C5F8F52068D031D50 0D9C62E61FF286D69BAD736A062D9D9148633859DE3B3E00201E66866465AD9D FD2DB9B9BC13BC2C194FC9966CB701F0369EDC0DFDF729B99F71BA7BA3C335A1 80C8610B1B5280F7E0512F8242021DBD0F6788E483C31A361846697AD83286ED EDADF943FBA9245564AD5673CD855F38CF23E1DCB0BD2330D17F1FA807D3CD31 6168833A2A3614A3D6A60E84CA32283D58FA637B635AE945F960108BEB5CC619 4E2C471F206E0D3AC3E52BDF1ACF79D5EFF4CB9A708108B9D035FEC5C8CCCB33 3A2784C785D81509B2B8F833689FEB9421BD86849AEE6EACA2F5E88867660139 F2DA8155F2D1B7280596DC3793105718F2D6EB3AE3F55C0B6EFD519F9723CDD2 C4AA62FFCB29C6DA5EF3628F20936D42F6E443A6912938043F9A642688D1075E 0ABAE95F3EDD71CC28799A1718D0E7492BD9C6748880C5DB6B753453B1D4C472 08DCB82D47D04D828D34B681754028071B10A62147E58E80C50E1897E3BECE92 161A5A43B8DC2011A51064EA817BCBE559209CDBAD5CB8620BE31B8FA3A09C4B 8802F22B481F0BB4896942926972CD624C99C16C85FC18CE957ACA3C90FD07E7 F35B5768C78EE377B996BFD29A2EE2589E11C8F3B9DE55FE4DCF57D18DED8336 1B344C9027AA8764931C118080F3504A1371463674793E197BACEB671AF30C7E 50862C06B60370EB4511DFEE8191B4B968B75AF307110C992B5AED1BF6AE77F3 BF9D815C334D590406D18FE3D6CF7ACF4C3446DBDA252A15A8D7BD20FA5CBE9F ED08082BCE1FB608A0BE3F04B07BAE8BB303F4B6ED5CBF41408A875D9D3EF150 7FAD3FF8FA239D126E604E869578C7F91686F90F364D86A3DCFD4F683B9F33D8 5925B7B5A4A5A487BB77A2116873D35FC28A460D40900ED91BE1810AE5AD8646 649A63AF67D7C7553A1450478E9E5F4AD3841BDEA8BD5824E56FD9DED8D94F87 8F31D7F9121C45CA82565ABED98988AA3ADB5C13E5C80F8AB4B18F057CF6CFD4 4251E70FCA83D9D5E35C4E401A1C6FBA70CE2B3A1B214F51D5A91A1A98A1B8E8 DE7B08F93CC626F76B486CB5CAEE49EB1409A355ED341BCEC84329DD6A74C180 66E4DD000F84DCF792479BE5898C22661FF9F3E11DF0F1D2FE3F5533632D362C 37C5963B3D66F637D9628328B147D10ED5A0F07E4451D9A5D1F4D9008EA27A8A 52F8688493341F3DE90985FCD0A90EF24E3AA566ABEEB788096EBE47D84DEA8C BB5C242EDAE2AD723BEE3157ECA81C74C42B610AA36789F7AEA29AF5D5AB5143 E218E95D50E9C7132CE1122065EB7AD9C99AE3854A868774B390DC5D4AAA2BA1 D6321D609149302EE8F2D8F9274D85C1B59AE52A7FDC13745C95B31C67769DD5 0AE97BD284195991924A3228DF148D1FF5CECE4E4FD7311A408BFFE1A2B28877 142EFA9C182056BDDE559B8694F1863F71477FBA1CAD4DAAAFA30F7B452D5945 D3B36A888EC50D2C5C2E6C39DA96E6C00B28383D913832D6D7B683C917C6B1F0 262E776D24927DF89105E31E51761D7ACC52F99834052C4CE8D6AC635B98AE58 B9903BFDEFDAAD5472775CE77E3E69640F404EB4BA2AAC696E3DD1A1E0810B01 C554FD74BFB8A11F0C1C579F0220A5E39652405736F80192C83E3CAB420190F4 714EB9BFD0C69743189F278C48BCA775B693573A712D91FE87A9DA93CE45AAA7 DF09C9508B91F5E707D61932E91DED168EF2C52E18B3CA67A449F18F43030E2A 1FB011CAA176D6C6221AE9EE6ACD07EC707D9C330E1D4E62159D4013925F3546 F14B64FB5ABCC533D87237598B7220F0F79939078151FEBFC2F648ED9948CDE9 293B8511C79EAA35AD62B089ECE6990DA3A11DB03F81CCC3F140C2B66C1696A9 4995E8570600DADA2192F650B37C58AC96AA3A67E9AA36AED5682830FAC56559 9CDC87492FCA812A1BD85337662646 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY8 %!PS-AdobeFont-1.0: CMSY8 003.002 %%Title: CMSY8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY8 known{/CMSY8 findfont dup/UniqueID known{dup /UniqueID get 5096649 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY8 def /FontBBox {-30 -955 1185 779 }readonly def /UniqueID 5096649 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY8.) readonly def /FullName (CMSY8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /prime put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D80B73E7B6CB7548 0E1D77FFC695988391DC44AEED8CC947B3D7E198B9620E2238DB3A2819182F03 14498B8CDFBA48926DA721920B221FB33BC21A8456AF10891403501D0F6415F0 7E041AFFE109F640E54FC1A365674711EFF94E752652A4C8DA62CDB1149DB899 2C4A4BD77A06E81E93C5698C05DD02F74A0756082738BDB53003B483752AE498 DD718AEA8F3FB5A6B7E2D2AE8F309065F3D556F9A34AB90C88833A54295E0982 209C466A301BA3372AABEE20D862C6DC6B6FAC1463C8CBA8AD766ED1B4C9D712 2BECB4E6ABF558D8AB5281C35726BB8D046982C0DDAE17BFFC9394125E4E84C0 B283977D31460B8EED4346CCB09F64DA0ACB640C6DBF32F2DC30D54668C1CC12 24C7280593088E9958C047125C323E9C842801346A9CE5F50413D69F6DE99471 65D2E387765E92EA4C43F17B467DF6E266D92551009C0E52E7219AE9F5E2E8D2 88852086FF3600BFB50AF3EAF8C009D8D5F084B510F792385F328F7EFA8C38AD CDAB2EEDFBC6AA45F6DD7364C2F02DD2BE6C79C8361E83D4267CEC2407689864 B57B5D967FC80AB3BE8CA43955FB0FD3081D438437559AD24A7ADD484C1E4A77 B00BDCB0D1B121FEE983412E1EA5489BDCE5DCB4A7310135956B230C0DE7BBED 516369A92BC41FAC8D73490984942D930DC193BF0C774C1AEF627B969EE4B001 11381AC57815D7581E2372A1DB740B09F4A7FB4318B765DA4E7B44E8805CEF85 44EC3B10613FE7B397BF91B69A5CB2E9086D1E7A1FAE0A9ABF2A237A2D29ABFF E392A18AEACBF28274E775D3FBAED4F46B982B9DA4602E24094EDCCBC9D6FC0F 67C60376879245606C0B9C9A678E8917516BE1CF097B1C75C9F0DDAD6899F08F 81FB7A198D45FE060CD2A550D9B8D58B882B969D7BC3EC018A1FE92BDB262835 26516FF97AC387EA525FF987E5EB1EAAE4EA5866C9CC043D183763C530F7D7A1 2070E4044507C4E5611FCC117FBE4396E0B24F672CD53D5FDFA56D561FB86D40 90A52A7C7F29A119DFFB694A8C445367746A49CA5FA83163BE448EB19625DF26 609A8C8672631A10411036CAA3D6C2F822A4B2505DCBE8E1CE6916AE515E78CE E8C894B134BF811671D17C19248853131DFFAEDB24B15FF17EAC194662460642 48D23515AD434C68DF56753806FE96DB3A29F9D4980E0B6EAED7383F9FAD2584 8F85679D6D1933677ADF5D31FE6E43DABF137E834A1DEA632D36EA5728625159 8F33348893C9D1C510501628E4A9A80587DF6E179FAF68B158406A3EBCD726E2 AC17F2DF8B3607072824D2E5A6479F7BADE32E603E54E7A83BB2DFDEDB0D80CD 1F1BDD4F6C9025CC3A8A3685DF10A8183FA80CE0F0FE2BFF2500F76B1037AE41 56D2D7FB468C3CA7549E3599A2AACF66302572F1B35BC8EF7C23F6FC4B720228 1D673D903111CE378AAE83480B4DEB7EA84BB35F4F7BE997DD4FFF5A9B5E7650 3C7365BA0965B242DC369D03215651184024A08EC284F1798B0726152884B4D8 46411B3BC8F5CB53A70AD53BD7B1AF23528849B56CF2F75609FE715878CF6448 38579380688B47AE3D374B0DB6ECA5B8284414090123D47F3F9DF389E023F431 6B4C0DDEE4190DEEF4CA772742012754DA9A44A8F550FADA6D8FB0C512D5BA2C BB7DF71B1DA41FB6936BA71B710CC6A80751E43436F0F5888F51AB370DD4A088 40F402661E08732C960705C7E0D29B8DA1A8A3E119409E51EE575E9655F47568 023977917C8EC610BEBDB9C1F4EBC192084D63EAA00EC87B53E86620BB5AE51A 579B0F8E1972CE1DA02832FC75184F45409DD9D413402C2FA27BCB0AE6DB4CE1 5AFB114E23232DE07C4674969A1FC94D152C6D3A611F029ACF4D949A2C0755D0 31C7DACDBB4DFCFAF7E87295CCF5D4AE28D87ABC3533D87EEF1507B9FF9063F7 F007DF03734A20BC3A198B049000C92D2849C62DDAA719FC28EB372793E20128 D786670E08948808BA45C4F6AA0DD8A8357CCC47228A760C5C7864853BD9C9A4 285E446CB72C5C9D3F03FAB000810DC5674061FA116153040743E846506CFA67 FA8770E785D7DBC7293F37389A0859CC22275B23C44B57B92A033A7BD194340A D6BAC6E103402F8396A5394C617CB2A27D9500921D5DA06115EC81715EA8E360 4A95DCE8689CBE268B8E6C8B806CFB0ECBF634250243C9E1AFFACAD65311FA4C 1DB0988203537E5EF12B86FB454D06CF05E4F4FC4143D62920E99304245B6ABC 82E21192BE94F5E980DB21E07FEDF0EB0CAF4ABDFC20EF08A2A44A7940E2862E 08FABA516152DBA899D6CA561EB08C7C8298DD511084E5230CEBF28AB1D84C85 B5BAF4616C28FE05AFA4BABB3BA03F8CEEF3F3EB0D3034BD3D8D06629B8E9EBD 72484057E71C9EB4DFC7C2CE7749271AC926C2419D618FB0B60FD6F81F0F2C04 E529CC74DCC9E4AF32D935D7CA65FBD0842A7BAF162D08F782E65DF3AD9EFE69 198AFA9208B22BC21BC4ECABB9BFFBA84C8421B74748E1EAAACEB59E566838F2 C439579D6C75074F94493F7D5C8942D881AAE6302C37A61003AF77684EE99AD7 EB5EEEF050C52E75E4E842F8174470FA60CB213BB6F257EEB26CC55D1202931B B981DE2535A87CF37BFF912220C117EE166CCAE58BBF624170FFBC0716726B36 304D698F2CA131675F7B1199E6581B8C812C4FAF75814282477BE2B7EBCBA7C2 FA6356B2876F89698C6C2493989E9EB252DE03BB374622A7C88B8EE9FEB4851E 02F85CF70CDCA7BED5EC94E81170FB557C3BFC6F32CD70B506E56A2CC5451592 130C6F570C679577C44D60A811DCEFB3535D855259B1021AC168DB76DD38B459 F1813E3DB20AD9275D58880CE94058490ABBBB0D8DD16D4A65F680B30057F15D 07FF54D779CC978E90A850A2D8D79961EE276BB26B594C16F56557435671A3D8 ADD3DD0BC4BC73B0652B9DA8462FE614A14A11ADB2214EC4910823FB4CEC8938 24354C5C62547EE5710FB5ECD93AA45DEA7411F6CA8D5B5FA222685E622AD73C 1BD5DFD1C8F253352D6C7D14FF2FACF07CA5EB11392C6A33E9CABFD99F743BED 55E8DEF49E07B9444171D1780C698E5B65B540F41F845AC188DC7C0C8B5BA5F3 546BEAAA4F29F0DF30D5AC12A60862742623100074457BF2D820DCAAB340C1DF 22FF26992DC02F276B40A7C528C84B72CD189A4088C90070486C49A1014FDDA3 5093FC12DAF309FBC063653E6A33E14EB51B081126AB5BCB8016E975060B796D 6CBFDFE6CB9E191F12E309254BDD6660E3227012F5DADE246B02B6D8127F1EE2 248F48DC5ABBD229748444420C868450602120664984FE3A8B2373232CE5CA15 E67172CAF7EA99F73A66AE33B1EDE5E8351DB02497CE3338930147873D4E46B5 E918F5592A21789FA9F46232BE693DFC33240E2649D6AC1940B101D806089436 F0CE230BF6D0363510378822891DBD3EEF3365430E74FB6C994BB40C8EEDA593 CEDAFEBC3B87C7C04F52FBD7D557A77B44855CDBEC8A8D26F44D66446B5662AD 15B6B79D13BD262D79BF51C09F8F690A61C7F11EC2E05F6BEDA273648E9E1EBC 3D5F1D6ED486797F753064ADDA8494405556D43D395B1487EDE877CCC1EAE954 1AEE2513DDA94897B733609E8179DFE1975590568202EF20D58A89B34874CC3A A5579473AC65E0EE61545AEF578ADE10BE3FB3E2CDC96678F613E4DEF7BC1B38 8A551C93438A0540E292F65F1FA73D9AB30A5F545284085E4930A570C1807995 7108AA8194607304488616DD4AB189F8EDC5F4507AEFD7847817A8ECFFDD2DD5 DE95E04EAF2774F8AF661827229F01E769A32734097C457EB6FF056D90C46C5E 9F936AA6BF2EE8244BBEDB8862E56423F5845BB10C8809730B011D650EA18945 83C320A3F4ED095A5EF91929FC877ECC28A1C2CE74A53245E629BF46C6534983 307B1C94EB35CECDEE86551F0C308F66690E591C5D9D8FE14F534CF3F5DB6D32 39D7C799F392C4E65759B7BF61F4D8312E3B26C31466206A367A0DD7A90D25E2 805D36ED5CE0A4BEBCAC0A348FADD2D2AAD670E28BE6E33F627B4A9F35078B1D 6688084C4C18840673EF9B3526172EE14EF64E97C8B006C27DF6EF73BA6E6459 3608F10EB1EC4B824DD5360B42AFF2084788B165747AABFB2C9C0EBBA9C6246C 08F28143809315D6268E386F09BBAC54C34213438B56C386B34AA457D149CC39 A3C163F56E3C2E637C63A79CF7F2DE969EF3AAFF75F3F20499A9ACA61279D545 866FFE57D25998244F448AAB042B141952BD653007A889B1A716A4042CBBB827 C1ED5E3C616C22D5FCB39D3B3539F9B71D50D25ECD2E5D953C7A5194C867DDB1 75CE10B2C3A20E8CDE15AAE9F549D034838DC066CA649C31EE365D46450AF18B 893748D055DD88C72391FD92DDF0AA1A1316051BC756F87BC9A425019B2FA7BD CA9F35E89E2229B3021DD24C9DF0DC3217F44DCF510116DDC9E92EFDA3E0A892 491C8961CA484BA29B8CACD2FED2E246FA7414F892AF7B9F08698FDEC82D2E4D 8C6ED1FD9E0BA2645663E7E97B0F780033D025F2EF3B364574C03F04FFC4E09A 3D4182BBFCCCD8CA54A92434E2208803ED36F931D31C7498B7FCEE4B78AECF11 B27123A10F031F9CBA36066680E4748E346D18FD0EFA395D1A9227530618ADD9 64D96C50A0172F712CB427E8F7170F8A1691FB95B247A271499F0E63676BD64B 167438333A3BD9CD9641AC637E0ADB17F1E394DF34AF5A2BD02030DD087BBA02 E1209338B74075744A9A9966039AB6D223F385E06FF359257913E6C01BF32F5B A3640C7CA41A6C51F296E50DC1CD1D68491CE5D75E0ABDD4C5C4A97C8BE2BA35 D91AF9F8F38E7AB8C1778B06A212D0416E6137087329AAA2679C51D014CC4DEF 0F1543E2FD97621E552E19B29AA1368CB5046C188BA59B1E1875B25FB269DD2D C0678A42CD310702465694F2BF302AEBC43F714F7C657505132DDA71CD23D17D 628BF3400EB5DDFCE2850F31B40C5913394649AA4241CF646F3939916C2077AD C11F8C3E478586AA7931E327333FCD8A2EB31DF4B47AA2F31B999556602DD998 5848143C0CBD0B5187DF08E675550F2384D48C2954EA7D16AD2B94DF97C194D2 302CC47BF968CB1F6C9641A87525D5C6972ACCA1D4A4B4DA8EC54BEA6E7312B3 2737754A9FCBED3BA5F8220B751506BB0A5BB5CF706AFCC04BFD713A3BE3C842 9FFDBAA0CA5691D0FCE76134841A169970903843163DE68FF09649E99945DB64 491FD6D8B2DF237DBAF550D1B74263B3BF1EF6211F40D4DF2DEC46E4DE557088 5D458A7CDC6F34B8C3F5C76582C8B7D24A333AAE0B43CA67436F8ECAD7C50B12 35BAAD521033D8024E4DFCF01580AEC63BD5F8ADB778F822AC4FF0DA608EB7CC 1A52A51B9F38FFADC0D2F4D8394C5D598123B483AE5AC1215F24F2492EBAA134 3C58AD4E3B493AABDF753EBF1F04058C6981C353D6788C2D3294165B667D3765 7883A8493F5D772F789F73979B254BB9397FDE4F8B76CA6FFF312F4B012949F4 3EDCF1AC60FFF2681549DFF430B498405E79CB407DADFCEDCAB1E2FAD3B0F4C7 B575A33EAFF9F67D37F50BB06D06834EA683862991C5BE340D4A7F8D131E733D 289F72977870F9958102F5D835739F0F5A642E7194E8AF7FDA2937E5C0712CE4 EE15CB475725030CE0F238C32775D3EC95CE3D0886046E3EEAE322F59D423E83 DE88DDAB5CE0F70537487EBA5A16A9306BA7DDCA14A85A9F83B3BC3600DC9421 BDADA2704A5A24F7174A3A486ACE68739EC5960038CB44D969A594E97AE1F42C 42C1B7E3A456B3CDFC7683537B337AA8777F18CA45B22C8BEB18877DC624496B 9E8EF9F386B7FE4D94ABD5CE3B5786E76FE04A35909C472C04654A4405932EE6 A4A3E0F6DB088603FDD82F0EFCB85A962002A662D1AD0647A2F484B59075A1FA 9F4327D542ED7962620B998ECC3A95CE736089593461CED9B5AAAB05C2DA3820 5AF29B32904E1EEC357C8E282189C6D8F562DB11291091E6897E24CD8F8E2A34 67F35D261E01336152E69831B0CC6B03FF1AC7EA22B745F513A25FE10F70E74A 3FD71FE1EC9999BEDE7CFA6A97EA2DF621711BE950FF8960965685BAAEA71FA6 36F165573A0A6A92DAEE41A9B0C97BF03419FF6BA1F44524D00FD671EACC4233 9A857680DFD27B9F1E7A760058C8277B3761DB9969241D1824A7DADF70BBFC38 89C6DB9091E3BFCB36851CB9662B365A4B7384BDBA1D385902D1E5DABA72A159 63790096B927EA49299AE03E41C7F593F3B995D1155E91C62D5F68845ED3C797 7798B56858F96C2FE2E37D812873B7801767082A6D6B60602CEB94B7F6D7A142 72814734DC584A18D1FFEA7333D4C7E2DFE5B91E9AD92EB52533CA52FA888980 C79FEEDF0FAFB3B20B497F9AB668BDAFA364B405916526D5C48E57DC30BC35B9 BF684FDFAD199D9A28541327F3899AD505FBBBBB22F419E22E0149EE5FDD2B43 AF442E2724EC16934C307FA731F90AD1C76B74569B78CDEA7C19808233C6364B D049F3F50A68D3EC5F29F2B96BC58C44AF90FE13F244B7129F14B5DAC3F3F310 B330E67CA4EB76F895DAC8025F11EC7630EEB4826B5721348FA38F28B2AEEB1C 5F7CA413C486C94B1DD96988F07F7A08D3635E28624878E55D4FFBEB5E183CB5 93014D8A272EBCF3A09133603CFFEF43A6FF059BCE525706D3795884FB495748 C8AFB50DB464459A5C36D7CD087631BC09C693A11BDF1C6011D9864FE66EE8C0 4824A42E97D16E017C0BB73732D4537E2A5BB283B3568950E5681364DBC1D6DA 058A122862A44ED85029A7B39F2FA7C362D859D0B429E056891339626AE6091D 74F6110CA32F8F3E9507216997E6AD1A2F1FFBE8B407C9880DE230E234F6FD41 A291851178BEAE5DB9DEB22E3443807E2BCEF12A4AE8C490AA9E3D2918329F47 42314CD258A0760DE5FDAC4AF7209CEB530B8508B278952A3638CA8491C3B493 516F461610DBAF32E923ACB834B15E2D169A10F2609EC0ACDF7BDBC777DD2C19 2DB330FD557D3B06B78824D6AB237D8F2D57A7ED35F02CFA9290ED6893B41657 A2485524A3F1642FF5808FDB77015D9467EDAC4A6BBE8A175833B1225A5554F7 2C60207F7A2632A4023255E8EF1F38C1B8216C9B03319B60BEC9799E5378683F 46E698FA75F2DFD40F17C603F3335F1EC70DBA1449C7A33EDDD46CC3DE4A6557 EE67BF349AA8680FDBF415DC527129288B5879500180F75DF80394EC7CF11BC8 9EE9A4ABD64DE3076A2963F83FA333F19FF74F79ECF36A87A31D6F125FD2415B 3F6A6FC33C179F54CA164835F3C3DB62AF444BDF27AFF23098C7212477F688B8 6F48D9AD080D544D57FEDD33D3D9AED9346CBB644C97C951D4AEEB2BF6F0CB18 E2517BA7ADCFD00FE44E290E731D53E5C0D762FCBA08004562DCE6A5EF2FBB74 B3053CBED3B6E896B1C3356DD9E8FCB69691AAF6BEBA0424D62B9F266D560B40 89E20A9F35AD4A7F65A7183761ABBEE0F7EF26ED3565A25516A3A5A57143979A 1EEED8CD52A69E4E1AE4795F3EE0CA21B9F4D166783A9AF54B08B6C56703932A 310197E328C6E6A6BADAA11D66A952964F31FD690082FA02D1E2A4512A9F2742 33B203FB770A3A1C7490ED630D0FAEB3066429D0237E18818EC368D0DA72EB08 1951C70139EB0DD59EB53AF5039A7618C77F6CED9F0A066FED6FEE0C0E328351 BA39746C1224A29D191D8B86491E0A306ABA070CAA2756C3A33990EB6DDF34E8 06EAAFF94AE6686EEB06A17D6D020D1F4E59428D533DB0EDA6434E6E1A478D5C 2A0D08CB39DA7D5F5200199FFFE3F41729478D4F63AE01FC0BF3B378FF6402D1 CCF1BE5F191BAEAEC7FE400C9980E103D8776EC196E741AFE11D249E0C277263 80FBD329524C55943E25631F113FA0FABF7158AD9EA1231126A1CCB9E7F5CE1E 7335D0D645722B10E7EBABCA0A03F27ACE58927E0B902E5E91AC31280B9143C2 8B4A98BAEB5D8BF44ABB947DEDBFF8F1969651766DF77EB0184783B3D2AC1997 BA1109BDFE6FB08172926B58DB8DC803F40AF91B9FF17EE60E28F8400A01654C 6CB9C8CAF71A8C386A6F2F7E7613C70EF1BA0AFE58322C952018779DFC4D5C71 F3012F1020D93A14754E46AABDEB27955CAAD66F8326D26D2E1399F347DE645A 732942AC89 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /UniqueID 5000793 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 33 /exclam put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 54 /six put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 67 /C put dup 69 /E put dup 78 /N put dup 83 /S put dup 84 /T put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F43F9A1290E91C463895BD12E8A831DAD661EF23CB9AD2C26CFB26 71B72D15270CD8CB1D59CA2D9DE884C96BB923B1EC8208BD7DCEAB0FC2293629 2AA1F72C6B470701C381E335C2364CFCEBACDD20CA36182CA7E70AFF5B14B02B 75CBD0738E35DAD8E60CB3DA4DDED557FF9ED386DA52D10615E700751C842FBC 85D89C0E713F556814E051C6CEFE7E83C2F379B88A801DDA565BE73013DD56D9 44D97798564787AE6D5A6A9FB777EEB850C7481B4A353EB9279731512C9B95D3 2ACA3A0D44585E55AFD968135F6492A9381FA2D126CF50373AB7D47B509AE6F5 C4B100BE8334ABE2268DAFB7983BF339540A8D8280F3576CDCD4F21408AA7D92 BBB218043ADCAB60ADF6385516C2A5A9BFC5C3845124E0954EC5C627FA7C65AE AC1A283A5A9670ED2A2073826941E9AAD904A05CDB5B692AF725B6B9102574E2 461D2FAE65B7321C0093A2A34996C214331F7A91B4F74898E2FAD14576F81B1D 688DD9ADCABD51FF07C966B61B0118F09E24354A9F75277B03026CA1C783CF92 76255E2A560768B3A8764F0BBACFC2BCEBF870EC12EF096A2BE42692EA401E2A 3A12BA99AA66F8BEC315412BA9A17E6574742A624447122C877F80740924F346 0E22CA288DC767537CFC7236CB28E31AC2C563B89563D0A57F798CB843680E9A 26A03BAD01DA05792528BDD89944986C15BEF8D3E84C08B3CFD68AD25993B6A3 903A215F9BAE352E428CA0E862EBFCED059D65F3C47D22B2B8E48E975078FB8F A0222FE0783C319F0463EB6F83D2CEC9E7FE518742FBB3645667801FD1489387 E9A74C5A4CF0EE88F29A7BBB02DF84B8931F065F6E7F05D1DDFC21A73DDC800C 45740A543AB3F5D165D628AF8BF489558F0A3BECCC768AB03B0EEBFE3C03DBD8 E4C46401D0D22929F73EAA9B199BC796F1D495E8913877434B12D4D9E1E324F8 D27A46C3059A2B778E20748DB63FAB2BE8C34865E095A972E08B9067C58466A0 EE1F3A790C500E9379DA096E1F56D87595343D1C24BC1455EEF858219E77800E 047CA409DA46AAACBD1D1541E27EEB978D28D2D5B5321EE18DD2A0B15E53BCB8 E3E01067B304D63A92F67E852DB3FA36EEA39B8FF07CEC6D1BB14B7C5287E326 1C3CE14538C0AFAD1CA8F2CA6227B6F53604DECA2A7D3E40E41727528710CBC6 8181C0B41F8F9F578737056C820F9CF2C450238719BFD6D18C4B0DAFAB5A0054 5DAA9952EAE86EB7E2DC73C347153B9B9135A79D2898CBF02F6539F9BF11DA75 BD2522D53162BA21E584BE4744B479B26D01D8ED2B2B70E658F0C51E9765AB5B BB8E5737199C9877FAAA0D6E5613A6C69F92676D92FBF5A285A98E8C22895679 06FE61337CAD44686AFE62DE08DB4D90FD4145E934F4F263CD7C1A67E0FC85EC A02F4530B7CBC274729C142A06D14003C671AF4B2C85ABD5992D71C1B58B5FE8 506C3DEA7C4573EE57FD97DA8E17FB00EC0907718327815B85F9ADC17E2EB3B8 24A70DA042C6219A92394209C1CF51386CA5BBB19E8D3727ED4B961BF0490888 293CCEB93839EB03A684528FD6D2338146CFA3E3B89695B5862C96EA12435613 31C2D9EE7B65B82582E9BC568943DE1A68599E2F3EF62EA528B388FB2C260A3E ADCB9E7DAB19B7A27F2BE09900B60B0E04DDFC2696150AE062E40D2CF10D2FA4 39CD2633CCA612F30DA12ABDF5C63C5B1602823BBFC0C03B7A421A87ACAE06F6 D85863CEC1B6C58407445E5E0141EF31F9380E49E0AB4F3D91D7F3661947A42F 6158331EBD1301F1248952EE492C514A0B90B1D23ECA43B8BD3AC6E7E197D854 1D72B9E701B6BB94936F23D3C8E3378EC476B2556B6F07D6249C251302BCDA11 FC4491EA792C554CDB77B0F15E91CAAFF428EFC9D45441BEBB7146F32CEFB3EF 5F39D2A1916E2D98432F919E838EA2A15E01B8FF64E319A23D2D54576AA6A6ED BF223FDD04A29FDD1974C3B53D46AFFC089F09753B205B671B33DB5052A2B001 CE2E619AC8FC742FFBA113F9A621155E00FD80D1A2E5CD343CDD769E5A747F71 88D38C041E142ACD0BDDBDEE2652210EB2073CEB06E181CE91108DC564A9F80B 8C75C2AE539CE59D1CDB91051D144BC34162F7CCE36BA1D9813A4CBAE6C4120B B6737851AA44975855AB164C26097D02670865A694D7633AD08CE8621F9FE14A 7427E3446604C8E759FB78D89E2167E977EB07C9D2755E36BD9F0B332CE0C9F1 17EFA96421E973DD1A12AEACDADAB618C611D52CC5CA99FF089F92AECBF52475 D4689DAC81BA1D62282EC6CB377AF95B79602F210CC8365FDAE48F51F51F7358 CF4B001D53B2A84B76011BE67BEEA5B03DDF69EA964480B5E84069E3BBBC8665 0D224E65F7A54E14EA3D65C1F5D0200EAD1CB9EC3F8EE4254EEB30B3D6E9149E 638845279D7EC24044C77E79B6D697D9F3685203505A9DA356DFC53B2681F83E 2A26792FE879ACA15E10B5ACD3A6EA610B3C1575900CC6F06936381F3C36CBB7 6C09DD0000A2C573E9E1CB91C30CC0943C63DBFA02AF4CF6DF30D6963BF76222 3E4062B37BD16AF156121D80184FD9AE5D6E19CEC3FAD4A8CE8C44E74E60AB39 15E2BAAB56D5937DAAC07758960D67C9F8E56A53FE23A79F1E9D70E5B3AD026A D77998713EFB3A226AE4E251F1FA45FC6AF407519A5526F787B5B077659E7B1C 5857451CE3425622B497B2B014E28D06053F4B9E2BB6A48F652EF1C3AFCBE929 C27AD5EC79D7E78828DC4D88E35AF3A9652BE728E2D62416107B1E59084B5E42 24C54F177EA0EBC1EADF963DE8859D54F0501120CE6E1DA5631FF4252DF9FF17 D3256B046F7E559C2BF1DDB1B84E30B7F299551C644D2ADC18E8DD28F8639655 E4257CD68DE5EAB7A508E489571C79B7A90F5A01B3A2480DA075AA921CAC2244 282B2EA5B6FD6C9E31E85D0F43A51CDB95994F56D69D6A87933C66F9E112781D 53309A853CA59756493606D0FCE52A5DD69DA0038FF602E7D0B6383FF3CC13D6 1584D9DA998FF7BABF94BB8F0D1059CB229D153ECA53F33E2D2633CC89B945C7 6DB2DF41674FCE08A600643BF3A7E2540484871DC86204092B72885BD3AA590B F047D37F90DAD169E1AFE4B76A28306EB1C400EF674407F3CAAC967EB83E49A5 9F89C2E8E855AE3D7C09AF01A444F5939E4E65630EE03681A62471A1C035932B 6545FA5379327897FA9A2049428812234F0873050F420D81E09BD9F0AB92BFB5 004B54A8639F469743285625B22B592EDC30A9DEAFCEBB0621A8ADE75F29900A 7936427AC8F7B54DAB148DBC58A0291D3CBCBDE7879F8086743CF176A9C55F64 C5656151AA2EF9FE7CF81EE3DAC352EA6C6770DE50F0832779A98901BFA4BACA 9C38641762055015CA964AD6F4FAEE9F0BE4E84DA542E7E9C739E243668C568A DF52F10FD3856029C572F27E821A6ABEEB389E2DF0543C847B7123CB5B0D733E 9B775D9FFDA2F3217D0EA07724C70395805AFA6648411B5DEBA841C1B87BFA35 809232DF039C6EB817AE6E239813383277BAB3820273858FBC0B31DCB01D1535 DD82C80647C281276116F95A17A9025C1FE808C6FB887E7963423A3E7ED00AF9 8514E4E9108CF2724F58E6BE85B499601338E90B3D5D20A302B51CBA126BB12C 2D7ADBEBAADFE8AEC4EE037456B8F6FB087058385A412461C54BAD35E5AEF00E 0F30F028423642D5FFD10D3350638CA56E8567807D2D78227CEEC465B62DB868 4594048E58A0B6776501D8038DCB25CC0CDF3B37EC98F4A6F7EC124889A87EF6 941DB495609FC011796807773B81B526E4127F4DDC89D5EBED1884053A2318E1 8FFEEFFB019AFA7AC2BB0A5145D3C6A04675B5DDBF2BC6D6DF57620E486F2DD6 4D12C7D9BB51DE06150C7C7A825D08B61B3FA5F9F36FBB0CFA78A119DCAE9E81 8843EB82B221FFB3FA07304C6D18906F6444290CEB82632679BD051AD117B4E2 4F835FCB8686EAE2D427207650B43B5209851D49C4EEBD2192E029D762C18F03 0B9604360926456C665D50235149BCB3434053B20B8B21D7C0F62525A8C90170 9D29B307515BA68D3264DF6331D2236FCD97E10A2E18ED2539FB148AC5342A93 3216B19754C8A9D037D8F55FF50AE69CBCA4FCCB0888D5C385C2970FCFCD3DAD 65D8BBF620D38D020557C277B91824D544A070C12F7BD6D494163D37FC9D79F0 E9A6BDD099F4C0586B85CEFDE6721F319F7B9A2C1606E86149C67CBA95E27F55 31BAE0A55FEF7201488F8154F7CAB9D1E853980310DF012CF0E616AE144543E0 08D4146C96E982428FE49209D4DD0BC9A905CABF94E9A4932187514010FC280E AB2918A5C10E7124812A7E89352C6EC6CB5CCCF2728650C15C9634732B6E2735 EA785C29F83A3FC20784FE25B5105E8B53CDF0189B2678AE4B61BEF3AFE45E1B 148DF656D1A2D1CBD1EEF61720BDA045FCBA9106EB8F55D8A0AD7648A90C4C14 938D128A681D486479C0DF8E725AD86E9B8CFE955EECCB9596C15B0F4F86C117 C39E5B91555287511654291B867159148D2292810C92D618F041B9A030F72E3E 13CB35A190298585D7CE34CF62899915AB8E64DDBA7858BC87F5EDA8F7B90D15 74C517DE1D459F1848273447F713B84C0CFA0A32E8E4C631970B337A45E1ABFC 855AA23235A6C5D235F5A7A3EF0C74C8FCD4F291E0BB1A9D790295101D91B913 1131B948B356A66213F5F2D68A9D3E66F45798C045FB8FF1EC26FDF46D205592 5A24EFB90FAE5304C4552103C30AE5B6135C03146D3974335B72377DBACAF45F BB3B6B73E80D6FC4269F968A43473424BB8368D4E254AC01A60818FB04732346 4E515CD755D9AB215BE167083176AA58469BAEB34AD187AC76C93D002C55D791 6411DD77E4991BB835F6B28FE9A97D71661108F505BC5C82878A54C5D365954B 94BE86049FBC0AB6B40E0DC9D47C2DBF3D2D01D934F63678A2AD79B3A0F106CC F9D48D0D102D79E10A1CAB45DEE8BF98271E6F678C38CD9CC41AB230678B1FF7 7A7E28642B05C5913F4342D0B05283E6285F6A730A19CE7005B14B6D1D5B0598 B754916D698E9F1436C21753942E542BAC657979B6C1D41CA90A40B698A0C76F 9B854AD9695DC71E628E20B2651958B2131FEC72541983D11F502BA8ACA81F16 C4F277D182F526603C93C1C8C0582026EBE446926AC1C6060693A22BBF5986D0 F78BBF060C451CDB31BD2BECADD211D2AF8B91042D9FA49A8B7AB096856B93AB A7E9DD2D54F25B95E2D25F4059D7BBBDE74244E78DC67DC6E1A6F9D240C00206 05BC68E384BEB3A689B8A16D6565132406FBDC9FA922683C2C62DFFAB1EE156B 15E30EE3898BB904DF8FF6A303896A823C3529050A4306C559A6F0C436B31271 9094010CC2F6880D2F3989B35753A90EB2794BDF890C4FB1612ECC330229E324 4956AB492FCEC4B4C4015818A0EAA0D20C23ECDFCBD3616E099C2219938E3237 C54DB423E1C003A4483BC8446F5E8FA57110948F1B88378A8EF5A6D7F270DDE2 3F1D3EB37422163E3E25C1CE771B3B902CAB3DBEABAA2246EA0EFCD9440C03B6 A3625B29A9B428C81876ED67DE4ED2BCEE0FA11A8B73211127BDA0F71F4D491C 6D221625F1593CCA9BE2C296C73CF3C5FD36AF010A819F5090CE897D2784E64B 17483D270631736F9C55C86D08CA2EB09AFA9EECE3FED44155B8B119D897177C 4B9AB3A9954D231C56C28714AC078D7C2FC918D29A54006CF7D393D12C9B053B 53ED652B51B5D71CF07922F924736A2E3607F67F294FBB8D86C90BBA3E29DA4B A092F265120C5E44A554B307D43127C112FB80CA297C92F3D2C81314503CFFFC E5CC1F7E6F115A780ADBA3CB6C552799C3F784F4730E2D181AED25B1F4BC7653 4765C84D887284E2250CB869406250C6AADEF0D7ED0F066ADE2BE2779E0E94DB 8723B02ECED6446800D2D24E9220E52CBFE53465DF5C113CD1CBBCEA384B4BF9 BC804FC482C5019077D707FD77519FC298EDDCFBC8D2962FCD737A08B7994D25 93B76335451F57BAC2F8B65C3D9F3505BD06D3E4DE2E97C43288BC2179BC7BE4 E404033535A28C503531A6BBA56471A75D1AE0E251D20C31F9B9CE5A87D249B1 F26E7A97F3A789F3410959A73C78F73055744E1ECE9236F4A50C7F533B4C5A2F 4A2E4367B5FBAB3E07632ADF7D40CE7FE1632FC0391892709A2CDAD364A3B32B 748D6B529435B3AFF83C13AF40E46FCF677FE583CEBF95C0CB5B38DA1FD2D01D 8A38FC02A190B9CE0A448530008D563DC444B8D8988C9CA700FA256B57318242 D71D7FAB1CC8878DBC730FFEFC5192CCC5D520146645582701E3C4CB265A9AC3 5427C244A142B9ADED31D6417E2ACDFBFCFD0D1F4241870033A958813F0E7EB0 C5C3ADDF11038BB6764471D8673C36841EDF528ED610339570D086745047A9BA E482F9F84DBD706866EC0E75ABF93D86C1A0DA6BA56B7ABED9A8FAF07920D3FB 5E2369490F9D08BCAB2A2D1D70BF6FAB334EAA310F8D7DD75DD1A4999B77F74C 6F7EA8624C034C3473A99BF8A19D12FCF037769278958B7972BDC79A2A595F7F DB682F9FA00342F01418277586FB4872AB57C235B4243945F3C419EC8BD159E1 56EB70415B0E90A7EE82E9608FE78642F58F32DE7E3C444C0374454A860E9372 526B4441A41ADF39611FA650BF2F56CF68284C19685BCA80D3CF6909DB1B82B3 0675B6B0E7CF408A7C9FFB5D292C68DDA4E18A343DD3345B5579320E4A2607A8 092345607A9337FC20CFB52090FF2B2766C0FFBE6FC64BA5AFAC569DC58E82AD F04ED5C22642D9E7F3B5942209B028C6B1A867AC2CB4418E24051D62144104CB 9D89638B8C636803889A571FC4434DCA211DB9E2E07420B00AE3B4A63F44E2A8 0E3052C2747D86FFC1D5524A35EA15707C9848065B574A4453A5D609C8038CD5 2FF069A7F1AE17C086996D4585927D8D587E75236E9F39FECB621512BA9CC355 2C69B370CA823EAE004E76100C2CE00EC61E35AE94C4D54F8D894A9FB4737E8A 6A56CC968CCB0B1330F8F4FD97C1716559374490DE01A5B523688C82C84FC676 0AC7C37942C38167DCBD7A2B5E523E563FF55DFE652C8A695C63A075B2B53CEE B62D06CB2313F61F6F78905BFBFDAA7A580C6E5F99844DED9BA9F7C3A08D1D56 F0FD1E274D1C8678BD3CE55CF892B8E426CEBA43363943944CA2F346E8F3A67B D2C828B29FED2749139BF00258E195D5A704FA6946A4EA69097E6AFF2D99CC78 AE248FA405B1B9E04B0027B2BE39F0FC6D591659E922B0465175068E5D7057B6 DAFBC5590F7AA48F83C2C79288DA1B16C5C183187E245D71E6E35864DAB650C3 791DFE5B6BA279C0D6B58ECBE820070E8911FD02E79157D22354BCCE95DD48C9 48AD142BF9498BE4BF7CFA3459060A9690658E996EFAB20C054B59DFFF237071 DC8C6D5E482BFD2606E6C789B63F37BAA672428191A93E7A2506818AAC39D318 D06D60497C8645184C9A9CB1BE260AA4E10E797A09D5206E1605B4EB9066D5B1 00B497F8E6E8FEB1113E96DB879112F64081C28168D384AAF9B25868FEFBDE1E BB24DD89F10687E5605B9F6173AA90DE4917B1AD6AA99BA32FA4E176E9569190 C03FBB54D9A9273A140FCB99FFC817507E5775B9CE63B02FF7136519DBCC3FB3 71CC41C930DC4CA925799B1BEA87B75B281584255B14F6024BEA46F338D0D5BE 5CA5E459731D124B50DEA7A1F4B773A9C8D17F94D50D90BDD0509256FC8C304A 193ACC55D2E85B39FD795923AA6248D26A14DDD3799BB20E6A4ED6562823BB6C A7ACDCEBFE00F01816D2412A38617B96E4818D4B83A2FCCAFDCC863933A54322 0EEC49165953675AC6A9319C9E601B2E05E9710D368150110D5F777ECDECEE2E A4484C1B44237210AF4DC3570FD5C0F8C3B194E3A09928D3798ED8ABBB3FAD01 3DB4E2809A7D7A3CE5DC5F3D857D2B0E7F9FB780FAF08179C55F2700F2CDCBC8 B7B9E0BC57B48D3C090181618BB63337BA0CDD33CF6392DF8B5B286020179372 0B06BB92054A7E2A421B62A59D7F866BC986CA5199CE9D11E70A16E27305B74A 6D7E7FFB477E5A0015C57ECCA71F649EB3C250BF04C42934BB1A34F0625E63D0 84925FA7E0910F6F9D81133B61AD59FA3A751B5E3093D9824F72E1999AAA1AEA 7D1C7F360D8247A10D0F54A60C13469DC105CDDCBAF905C131A5C82C9A3C043A ED6C1E58B51BB8C32421A2E6A5578A676CFA698AAD45B6B63B56DFECE87AE197 7051DD315DDA6C89BC394555FD48923639FACE16627B19178080636627D6996C 2E17F718FDC590D27CF36333F1120F2042739A201FB0A1DDA4B13F655D685965 44D4E315E9ECAC0C76C115252370940BD4A823B4C8FE46EA5A756855241BCEDF AF2A77E3534B598C0468E0C7FC056A8D9C0CB1D511B95E69257AD0C05ADD87C9 92F1D8DCB0F9F971B71057ECD8A6C7E05989D9A7504592466DD5A5EF011D9DF7 A4F6BCBDA2FA7B2E20B12498DEDE65AC77FD67289DAAF80C0F5E0BFFB97C5F96 C6153C208EE5252FE8FDE9B92F333FAB59FB9C3CCA72B6CDA8169B1F24599F47 811E23B44BE74626F27BDD9D2D8AAEFBBC9525B7E470B1777E99E6D7A33A8EEE FF17CD27F604946B8CC47A82852C0734CE5306D6800D4E4E059D187128846736 7C706FB936AC2AB2DDF285827157A7347318507A70FFBBC7C058EAD5E5D7D2E6 7661E2E28B89CFB8CCAD2819EED61F219538D81850425EDC37BF833B3C951E73 F72D1D9105036BD73FA498403C0E1251544E93161588DD053B987319A284DFD0 F0EDE39CFACA6D870D057F72B0791AA4A12C72F4493AD822FEAFBB7A593B78C8 23AD55281C98DE6DBA9991A104591A68040B0E7E4B11FE4CCE31CB1FF872F1A9 2843EC5D45804368E12CED705AFE1C80902736E0CD1EDBE63BF100B08ED5A3CC 3576273543574390D61D10F5F8489A550BA47305CD0B983299EC58754E940785 3E1154055BC236BC6F213556410C8CC4CE0FA0AD6AD0E873D0A07A00919B843D 4931086C6D4EED2B5395BAF25AAA67C8CD86573FEFD625B0C313802354AAAEF3 ED1F8F77704001E5A511E0ADACA8E4DAF7D662A1F04D538F3A6FA1C3EC413C6E 6D32A8A63C6A4A24A808A99E8A22A7D79F78D35ACA893E28956F10BF9B499693 90349C6B8D6E7DCB4483BEBB641837590E9C7B0C5C0FEBF3674C7171C0F25804 DF74304711AC39448EF3C5E60A5065BE9DF74F5F20E3BC10C304704174F31EFB C3DD98DC658BCE14351B388A07E8F6575E5572D98996907BB150EFD7693AFE84 246AB182DE6E8D11BEDCFA7E8F53ADF5AED42462BFFF62B5769FE24D6766CEEA CD2599CF56F169CEC01ADAEB37218E6023640718A20A5A5DBB2EBB9604814FF3 924B27276E9F1817749F074DA036A16C4FCE381C05FF6AAC620372183565FD74 5232C90163A59C330D468F8716AE97DB7419612DD74D255CD4EC90AC4C28D0D0 54E83B378CB68440403FF8D56CE8DE3B2CA53488E42BA0C2B44238EF4E70E3B8 C2352A4F9347E409451FA40A6B018F59C17698E7084F76E7F0A360DF864CD193 8E8CA2D10CCE91570A8D88066DDDC70B941C3BDF26E0C270289ADF70CCE038AA 033E5914FFE1D32DD26B8D9F9FE53BA44BBD9D01F556C4C6EC38BDF3ABA14196 CE0A5240E89DAC1B2A6A89A6FB5D69783565FBD6DBE337B88B3B3B7A5817DC3F 2C8C655D2F905306F581555117F8F26065B9FC1FC837C357266BDD79F52482CE AFC2A9D283DD8987E387AD50C27D1BE98600E2D41D47E3656692C6E9C7E41883 56FAE26457794DAB01C39EB27861A1954BE68D004F90CC39B9B51881D7E97C0D BEC297073D217144959152D99F05A414ABC4DA8BFF796561DD2B117A5F39CD74 8F5AFF3820B67010CEAF1CC3E73728A55039E4075CD61E75EAF57099F083F12F 2D3369B0CCE6D585EE29E4345CE4407F04F2C54B9F0E5C8F0B47ACEA115563CE 66C3CB5BCF252E495A9E04E5FECE2F54EA79383C7F0A13CB07F9B1576736EECF B800434406157C4FCCD34FD0CE354A264417108C214F404A7DE0D46166F7F0B0 ED7A8308CDCB7AED60FC5755DC67CA209F8065B8FFD17DE34780428560EBF8C2 0CF6DFA37B244B73CD451B742A96FE59EEEB9EA022C679DE3DB21FD7ADE6EE86 1AE632EE90A4DB6CE531FCDEE281ED134CBA472D5454ED6F905F576799B4D98D 98C0128C7F3EAF8CFEF5ECE623BFEE001C4D7FD4B6919B6D934DF3A430435679 9135505A41117E296ECBDBA905FC1DC00840C37BA67356A87BAA03EE4765FFA6 808BB06DC14D79DCD1E3BE1625D59F2762F133BD5680DE197B90E7769D298836 E8283560CA65590E69F166475E3C0106BA30CC99DB9B5D635C12D8DA69C04B00 CEBA55FD41A1F39A9F9C5DA4E556DC7CCC39BA8E26C3AA4DEB0F6D75934E6FAD D4AD28EE6E937BBCCD99EEB3B9BD3773D16631AD3BC39343A409CCBCA1444E5B F3434C8FA2C067B32DA4FA8805678DDEC27CCCA2DDBC8A4B47513E1F8CDC8737 43E9120630BCEBBC970AF3B678506BA072E92ADCE1D641FF5959D4453831DC79 2E788677FF96EBA7D389762FD4F22C94FB589285EEDB257A6A40FAFAAF0CBBEB D32613B6CEC7A57803520DA0CA0BF8AE4DD15900F21DA2E3A0696CA42F516EAD 2B51BFBF651CB2E7BF712B531CADAC332C4B17D6FBDE6999F2321A121216E7B4 DBF26A4005F35D58453EC5539404B062AB4FCDC5741761440B9B245C4AFA09D4 2A8BBE145169BF51D4AA85B16B8641CE397D2C2665A8E99569B6450C9A109414 0AFEA7586F86D1AAB13DA11BB68610F39758EE17CFE044B1A2B837255BBE9325 90EE47EBF1E33AEEF1430FD4648DFD2414F9BE14C94E66C62AF53ED9DBDDEA53 32FC447317C0595B66ECC71D29258D67824E1532CBB7125E99D177EFFDF8F081 5D785366F7BE6F772CDE73D0699714D9771A9514E85303F5B688297002362493 86C6436A6B27894C705012067DAC22C3B427F6D952CA0AC898F1E02C5EAE0822 E6D6CADB0F6B0EC22571B485EEEF7F5B52BB80ACA5520B4A8FE10A01A0A54FBD 99A77D2E90663333095255D678F605BDD75FACE1B84BA378D59708209F3CD9E0 2A36CE1B9A8736D0741CBDBBB6CBA2FCB8F91051AAC314F385EB2E48DC881AAD D9914F454481010267FDE81EC51124773F9A0DF680E43B61AC0514BC0519FBD5 ACCF318E239BC4AC0D60672A349E2E473843AB5778970B6E564B605AB953D291 F4D26B3EB86802F3125AD6030E1DB7D5D06AED6CDA1B030F181A87804426CD48 9052D28F2D1F23FB0DBA878583E86AB1F2DEA844D5A357E984FA5172F2183C62 231D80AB4D26F57EC4D89980A40C0D7AB80F9C624E32C57A17C6F22AAB0A7D02 A6ACFD8E0DF49A95DBE43542A4E5957BCA0EE326B9A02E9FAB641F0665D842EB B96553B7635F98E6CD771ECA35846D00C335E569A0D801DDAED01F8A960CA845 41FB24B3A0E6D0D4509B04850DDDFB9FDFC65A3484FED245FB3BCF2E56180FF3 BF9B7929748090CFEFFEFD17344EBB6B9C01641033E84BFC5CC95842B014AA64 EAA85E174749BACE1D9466FCD9DC11959608FBA14E60108264854510C3E7717A 9CE6675E8F8653515494CC5D07AF10F473DB787C5AE09AED81F69E072DFA62E8 01FAC339BDC547690FAF7F415B3CCDE7066C3CD602161F27AFE25DDC16669AB5 EC4FC48E55268EF9DF6D102FD93BB77D6232FCA0B5F839C93C2CFB8AA01098BC EC2FA4F9774EC37F3999E5DB45E59918831B07E73BA5F669B06224C6B8DBB491 A4DDA844A8C83A5F64A9480BA8CFE5C9838CDB6F5747EAD40B1FD3130DE381FF 6C2F8CDC55F4BB9E3FA4ED24E1FBBDB7A8D6AB855AA06FFB278BC408EBA81EC2 312D9195938D41930334B5F384536CE79363259249F83C6EB8E7D84DE0038C21 6B998F0E9BECD6D87C4153B05090478904AC148DF321A5DABE62FFABA2F8AA2A 80FEBBEE5C72A3542F5FB12BB30F416FA47122D32F4823A65A904A9C336BB3C4 366F1DA125757426D0F448C4A1187F65B8374CFF4D622B20B389B04F2DAD8E66 F678F3C6A06BB3B9027B3F1793C2C5B526023119B6A5E14F45C8C6056F902BB2 B02EDAD0F05CD7C388A3430ABAE99C6836F1115E73D34B6E3EB970054003BC3C 76A2D0CE9EC7EC911D3F6A052F048B4760A6C2E6BB95F0E29FEBA4809B68FA1F AD242C14ED97E51BFF75CEF1290B8BD36C8BD5987A7E8EA46379CBA8121A4218 4E4AAB1EA4469C23E86672E966BBCB8C446EABCEF960A149F92E0C232DB1992A 21290E5EF450E86CCC4BFBD9D91C43CD47C2735AA6FDE68672554A6F3B21A161 2C9B092A06615A23AB5635D6ABFF6A90882BCB469B6C680714819EBE9CBFB1FF 6C93C00A5D4DA647D6BF58EEBBC53EE1E295119BFB86553EE1236B3FECE0A530 F9E6FE2B4727750367540044ED27281115E50934CE1378BF3F84B139B52E91BF A22D36D08F90A9F0B0F92D738CF9320B370F42A861AD9B6A640795C1103950BD 2245E1DD02428BC9F4E451FD797247427B1F58D557E991D02937EB6E58958C7D 07181245ABCFD04C5C2DBD6E9A3511775796344C11B3F63DDB6E211C4DE08C40 C4D088572B04A7DC1D1FDF251EA54A1BA9C1CE86851AC46D42A549E392CDB30C 924ACBDC0DDC50FF442EA1675DB0DB541E82EC7E4CA034E9A9251753D895648B 252D6A52E41668836BF0204F9B2EDCCC22601882DE8CAC1635198E4107BB36C3 FDA7E61A7B503B27062AE3ADDCE021A7C845419E27429E2E8B0D255FEE4AB364 6551DE5DC3DA48D162742CF549FD4B7C8761DED217592AE04C599D22C699001A 300B25EEECAA8B9C9D066F720B8363DF255E1401BCFF22D117488910478B9E62 C2E47C3AA762EA6099DAF64D5D5D1561BEA0463E098DA8335311094C0F43FC6C 745E5C8BAADB3908F25A1CB30298CC2B5269B106096DC82B6047EF6D7A0BB4AE 4A3C0F8185A37528BC76ADFCC7EFB1BEB29AFB4A440915316E781760647BEFAB 6039E4DC3BB7B5D55E2AAB2597E8BEC101B5CC917F7D473FA525FEE9208B7B10 42F4BFD577C2FBA7DB4DEB4A63C0E1E61862718024358BF0461471AA1378667E 930F26FED5F0A8E2D7D42B7C91C663AB1D1F17DE0837C0145E0F570A0D0B51B6 6111909CC97C8CF428B02BE3D12B7F2954F8D5491D4467ACF08D24E282ECDEA5 EBC9DE866B03C377C4025888821B76911303747836FB4241C96141728FAEED3C 03DF1132826C8C94E359D9A660E3225585491B7BACCD78E213A6CC9BC8292883 A83D2E0E784489FA249F1E9E8D0C7495F2899E211EB0C4455202D0C3613B17F9 4147C29DC468D325FC66F82EC4B07DC93A41407331E4A9F04BD7870F18B35886 ACAA4C3B67240D5CD30353AE24880D91891EAD3CECD92CE78C4E97B03CE8BAFB 88390FBEA3240C05C5CA4641C50E325401DA2B8B23AA4118FAB90A64C156BF9E 4A70E9AD0060937D00950D549F38F2559148D363409D38EDA7CA9193438E7BC4 292F4BD963E623202BE8DCE9CA60381019AD4B8B1816D8763B4195EA08588B10 5503E83D5F7830A1E95414416F0BFC4AE831C26FC8E77AE8E21E9FD588489D64 2C10DF8ECD8EDF4FE88CF2EB2FAD3A9EC4ECC766F34D4E94EB4BDBE9FEB34397 523A910E305B854C0195BB457A787578EE6A24588446552C305F0464A32B6FB4 2A29462B61829EB902236D182A68BB91A344520D03AE06C8555C6D991AEDE312 8004CAAC43A94DF0C72D684B7CA9D962CBCC08A17D0213888F1A502D69EB1411 6C058F8A477C5B3448BBDB743F849C2B4BA4C70CC796DCDC656C4DA70A5A48B7 AD603AE9DC3B1FE6607E10C7653DC5B076D9AAE360260F5D982756FB387B54AF 39C95774D205E868AC718C6F419FEF924D46A55766F041B7BCBF09180DB66D58 D699D67D780FB105B201447AA90EE38454D2C4CFBCBD26E7D4A2832368CF6908 D338E4847A408CFEE3994637D2B0EC3434373517A513ECBF5777A3EBDDEBC3C8 653F03F4513FB161FDCEDE6E21643123800383D8737093B90E59925931855AE3 E359E9F549D2E8600E282C1D1BDC69BCEE1910AE376BE81C27358B568DD2DE42 15069EDF333BF939FF12D8AF60CB69FE51734F0122A3A5197E69B3F6E8E77757 50DFF8C8AD810F5510D71A0134904A7451418A937413A976121D906EFBBA08D0 1F9CBF59C9E5952FD026E095ED2717FE7A1234EEC42498CE4FEAFCE75FC66676 6E6D6936894585C9628CAE7BE79E1A6525E67445CB0AEE86B26F61B02214A978 5C082BDB8EC3281E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR8 %!PS-AdobeFont-1.0: CMR8 003.002 %%Title: CMR8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup /UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR8 def /FontBBox {-36 -250 1070 750 }readonly def /UniqueID 5000791 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR8.) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B 8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF 27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF 18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB 7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242 6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8 B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517 2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374 3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850 9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45 7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D 25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502 CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2 DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB 16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413 07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752 762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978 D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826 CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C 74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541 1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9 E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44 3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE 37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89 7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762 C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36 A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D 7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447 CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD 3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61 59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89 6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069 79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070 F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B 49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38 2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B 29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F 2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87 5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237 EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5 5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E 293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806 568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405 64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109 A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075 267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D 136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0 A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7 80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7 D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB 46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9 66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8 2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71 CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF 2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0 DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5 CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B 0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47 CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479 7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF 6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893 6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C 72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256 13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE 6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7 1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197 86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72 D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B 70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10 0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20 FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180 52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5 7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA 09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7 401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335 74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127 3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6 ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0 93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197 301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847 F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61 1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E 36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291 34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011 ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B 9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634 E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A 893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8 E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE 0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2 B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5 B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F 3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7 AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5 98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF 4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1 AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E 015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A 167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F 9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522 CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831 130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202 2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154 C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0 ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3 3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612 E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20 3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7 3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D 947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972 26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479 0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697 984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247 44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49 603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B 6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE 276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF 809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22 08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7 3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF 76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5 A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602 3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41 966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18 CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531 2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF 94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641 DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35 9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1 FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E 1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77 24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C 06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC 6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530 F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6 26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6 D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2 49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17 064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692 8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445 2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359 52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1 17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF 145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F 2FC33D0D499DBE56C6668E137715D435D6B683E0113647B2765AB0F3D98AC717 5B33C3EDDE18506E73B4E392B022F30480BD30F59B2E3A59D93017296C3156B4 B5722E1955777716388AA987B2665669716F866FE6BDAD5E74A523CC03915F26 9B7B231F5D9B1F61DF7CB01ED3F27070E36547B263855DF5B2E3ABD2ACC440B9 0826E1D4A8D8F7E785BB9897ADE39ACBE77199001D9B2F8D9D073F3D8C03708F 56A8327BB7FADCDF3FD7FCCB0D5B3F70EB519DF33B0E56080F43D6A5ACE30573 3BF769E7130389A2C40AFA431E0F19E04A1F924851863BD746CD5878DA767B47 6E854D4252488B338255936D1A6A0DE230C4C2CE83CD2FB6E093D7E20AF1C9D0 89E0E11F72CA84A07EB8B31116463D2D0836EEAF639A9FEDF9C702CE30BA5CDA 8FA344DC36677990CA18502EA30994EA77958709BF2E6C3E62D4026AFAFE49DB AA9268F3FFE67B519B46C8D467B18309AF41A25A8102607D3E0FFBD426E3022F 108D363A9255B1494C820C4E930076827DAE91E24AD85CC6251722856894A1B9 4E30A94A2E39F1D602AD93DE20BD7BE909FDBD62F05E82D85B3C99A8DE33BEBE 7200B1E9A3EDC07190170C233BF5D77D9E573A54E8C194DB8ECBEB6DB59E17CD 8C6FF412274287D0864A49EEE26FF26867936056D5BAB1B2ABC782868C9B3018 99BAF9E0BAF95B6576BBF95A3EC17638C5BCBA1CD9616A5871828A7E97338CB4 E09FA58668D8A88523CF7076FBF64EA9B5AF831A237FB7E879B60E448B8604BF 902A19121FA9096BED548AFC734080CE22D6D29719B34783BC6BFB157F9E09A7 7A41874881968DAD3A4CD9C66E1E3FE0783F2FF8B4486BCED8F45C12C68BB199 0AA5FFBF62453B10B6B5A9F30C4E88416A8D86ED5669305FFBCBC4C58B3FED6A 5B9258D8C9502660339F07B8BD16B630757EFD1147418D3C3D6E8C1C4B175019 2B34CB1DD5DE4BC7CEC1FBD83C17E84218C08D10D0CE1ECE507DE60B7DDCED47 3EB4326591833D161601B7D6DC005FE5B137C0B30BE823BF404B8B6CE2B43B49 BD21F101C2DF5E93DEC539DF9B7787B82B85B5C82BE60EFA6247DCE78606D615 8C8284478FB098129A3B76B481CC37AB27C47534A4C46A1FC110FF3234D8E390 C0A1D5A2AA153D77B035F32A94C5559C27A1E0836BC606C31602151B7C336860 BBEB44467AE20836593420A0A1FBCCC4F30432EED848BCD95AB12C314054C3F7 680788366B249AA7E3DD9C4A95FC062873F62E69307C468261517838B4EAA65C EC9F42579BD25566E2F30045F745E9AA66EBC29E2C8F03288217CB1BC027BC9D 8AE6DCAEC7F0C42CC2C9A76A82A8D737D0692D36A2FFAFEAE0421C16358173BE 6242857DD5BD6899B2080BE789ED47112B20F3B3F7E4A30C133EA451F3383E53 4EF6C936DFD22056C5E80871E215DAB53F8E6BFE01BBFF255203BD75B65986E1 F4FFE8551BAE95964C0535EFCAFFFD2495F11D13310D113CB4E27D2088C6C49D FF20FE6229B3E27A479F210571DD305059F92B0F79A79B643F9C95F9A167BA72 91B745346C9F2DA7F880EEE9E25896BDECD31F30F87927EA9BE02FF7AA0DC451 9E6AD409F547EC45D6AEBF7B02B652B8482B5F978A27AFD8D2030ACD75782124 FD0BD8B728A8A546944798503BC317EE7E574B862576F548CF203FDEDE8223AD 9EA2DE5272C543AEE8E59D4E5D593964ADB4A85DBFB34DCD56C5F96FE1D48D7D F8F9F954093F1AA7461630D08D05D2B2C41D3BCEAAAC99FDA9A6F02D8066F1D7 32CB4229033BA2ECBE95DA59D3F587FD64583A10834B7E0739F6C8B01581977A D63474A85D79AC6902FDB1872D3EB891C4CDE565FA0BEF4B0176229A930CC25C 771694859A764DDF231B5E6EDBCDED345283A3014D23749BBF607811DE16FECC 59C1277C17F45ACA74B009C3830BD417CB1DD2888ECA7E2610021A3043884C00 5E2EAF886E5DA9A80E4D029E79D655ED7D6130F4C0F16C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /UniqueID 5087385 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 59 /comma put dup 62 /greater put dup 64 /partialdiff put dup 65 /A put dup 66 /B put dup 70 /F put dup 85 /U put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 100 /d put dup 106 /j put dup 116 /t put dup 117 /u put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A90B8A9EE5C613CDB822F07B 115D4C174FB7945535F2F9C2875C9675143B8D98DEFD3898170FBCB19B4C29CE 1E6883E0F68B5D42751BD7AD09E3EB745F0A6338BA2148B769B5E1EB21109414 C1615EC1A1FEAD5831938F74E26E1F6BF51136E5C76F823D29D35078412923DB B3A32176ED7935058ED16528D28E50E37BBEB1D1554503645DD6809FA22A0DC3 112E7888A499450162B7373CC8855953B351E8873A4D7DCC40EEEE5A8A2D00E0 EDD8CFE7153824BF94833ABE10FA64768E457D5395519937705DAD2FFC5E71D4 521F01213B7DF82426867DE914CC9866E428F614F18078B4367187426E2260AA AD0175A7982D23DE6D5DAEF02D3A10A660A98C57950F040898242FDD3B01A1B2 14B4C59A1AD1EFBD8B1098FA6E732B8FC2FD756DF92005FC7C07606BEEA9FF38 C55FCD1665C53A6A2C65E8788F81762A635846B95F2114269B94BE57C9D9A3DD 19F22E5F64DB1BB15999C0C1E5D6DFD5B1A95ACED84E6A9B242B04468AC4C266 7D5F69923287EA7BF36920DC3FF68EBD020C4F86F0C32F0C6718BC495B984562 AD4EF1EDB2CF5B2742ECECF99FB3E1CA6AEB852903A89DCB2AFF4394B9889EE1 3C89534C58281EB6B1CB9AB299A0B715383DAEEB18EF290A82B6388A842F52A1 6CE0ACE227E04052F6D1C243A82E55325EB09381C8939608E81B521DF5045F5D A72207E33F6CB41281F53F8D0823990F58E24B047704B17CB9436F6AA4817F98 F063FE5C6D1119D0022E18759E5ECC3448A1368902DE3E9E049D14C0DFE8924B 675A3DC5B6B7EADE32EE6D34FEC64F1D2767BD0D84AC0650CF92C560A7A52E12 6A12A998CE39E0D00984934BB564E34E7D54E3B33AC419FF406DAD3CACCDD1BC BD7291FC73D5FF989F5D8035027A7BF1CF9B49BE967FE67B94D46737BF0F773F 428AC967ADC341898B0D787EABFEAF3F9CD88FE411E09739CDF949E3A8C1355B 6D317246D85492ADEE815E4F980916D6D37BB6588978E75596B20A786F12F8F9 59E8330A69B386CC7181C0365D19A3E76AF06A13064DD797F5C2B2056693B4E3 860BE12CC3CEF548C0A57A2DE33FDBC4D98D5C61C82F91CFDFFFC5C3B70E0B82 E39E5FCB6BF8BFDEEB8F2B0B484AC7A6EE60D8E7297DDDD6D82670B5502C647F 90CCECB768D346BAA085E92CEC6837BA913192A2F7B5BE0EC1ACA5F7874922C9 35C4D05761C051E6BB05646F1166EF917AF1B88F90624C71DE55E8F96F224DFA 7AA5069AA5B1C0A977A639893F48D1B973226C5293B320DB64EE12C045B18EF4 FCC0840D614E2212BB38E394A9287DD8BBE902A28E489FDE937214DFFFE4DC00 26295396E3ABD58ECCEEA5629F7D1EDDF14291628B33A39DA97E41796272DF83 EE95D6759772026675B2B3C6E949956F8159895F71FBF84FA330C812413553C2 0573928372F628D8EB3F4F4A8C3B278B403DCBF976498A5E69311B9634AEE86C C92481C5675A6D631C23AB2657C8BB8E27045EBA6824E406D04DE0D26C071F7F 7785D4B6BB447779F7465D7FD695D94098C9DFC7CCAC07E320A8BF10D242E59F AF06602C88A3C9CC9CA87DD13190DFE392129EB9EF33E57785E6091463C12E8C 4155C7F687E7274D6B0C17C8F1A4ACD5496D38D0364E2D88D0EE83BB27F5EEB9 9534C859C6EF013FF206EA6952708A5E17EDA3D56D4DCE604568E42AC980A745 15558086CF56F55822EEFE030DB26AAD68E4FFF5390DC3CFBA9D54C09A998098 D1016504E79FD0BA1B88BA127C69BCC20E3A3FCB6086395C22CD67938807E88C A91C1004CD9C0E9C2B1CC76A3280E1599ED49578989AF1902F1426A6BD25EB9F D291F01B5CDCA4213F92FEFC1C96C921D0DD2AEB98E3F89D749084258352AC13 32DD600DE8298CF31DB0133F553F672ED5E2D6E3347E1365DF169C1EDA77222F 5091D619B6C1F5F503D3E1598D5E92AB27A541ACEC5086A981F74BC0E83972F8 ABD98F22057DADE9C2B417D42D99BC9FE458E4BF00C90820BF971DD4C0F507E2 A80E38D57EF7CDE7741A4C55244CFF1E346B9A7611DF9B8BFAA8AE80C9C67106 02CA54916693B84530065C00DB0CBF61B041EAE8D9491D0C711DABD9A8FF0E9B 639C015BC92007BC8E167AD65BCE334146CCAB7D76D60C32DC302A9939B86757 A1634948931C0D8A487F814E86598B89737D4F82DEA279B448D8F41B81E0057D DCEDD94D7987649F8042128702D2F79FAF7A30D96471AD9ACB8A923B55BCB270 4C0D1D43E2C5C67E16EB40D9703A0779B40DF9E1A85B469F45E0A134EEFE35FA 7C745954C994EB8D0AAF86C17C9DF64CC8CF10FDCA540279C4FABD9A8463BF48 045A82BD6ABCF0319CEBBEA9BEEE0DE00C4DF18BAC2AFD031743B3FC55ADE9F7 F2E07DD1007C2AA1059FBFCFCD79947AE07431905C14BE1032909DAB8A6C675F B57B52C8518F41804E81AFB68D11656669C84DABCA90D191C86EF59670ECCBE4 0700CBE6F1DBA14BB809DC2E2813CA2D100FEB6B1B88EBD2CB2FF6C6AA367905 E7D12B82E32D8BBF1504553760C769EBFB71AF1DE4BF30F0249A07AEF27B3987 3A2A182E8913143B221B701D254E42C92AF4C44883075C6398FB9EC0828F8810 2B51650E7AD21A4D71B14D44A16B9AF5ED5E974F48376EF5A0B7BBD253C56C47 37623A7CB03373D21D0A6F18A855AC914C4B899680AC15FF90EFA0490860C173 7B3C9AEBA7502352D1B65311B8343D3A13102A8441BBC91ACFCD14C3C59874FE A4E761822080800FF541832D9E1D10290130520A9EE264BB22FDD4EE62EA0896 640F17627B9240C13DD4C7762E6AB27EFF2CB916570AE831DA6A74DFE047B78D 5E565B1EB21B754E6FE47C7B4564A56AC0CE60E1BF06B9C1A15715D4DB5B94B4 DF27921B8A8C957C97F86B15CD747208215130D0E7B289978A1E195A1B9C4E8D 0D4B2F957359EB72E41396DCFAC11A7C29F2D8CC9CC3DA2E81C159B70E1134CB 9BD8BCFB608822E0B42B1CB7AB44AB86EED8380E7F3588AC50708E6F227E7A79 36908B39C5A92FF8E978F7A9662020816C6A0AE7B774947A0A1330C6BA67FDD3 A9AA4FB86FA6FBCBFCA13443B2F253164C0113B4A4EDEF2C78E371D7E30C5A9D 4DD812EDF0657C84AB0E733380EFAAA8A77C343B645717B045A5D7AA2FDA85B9 97848190384DD2761B4790A8F5100E73458A59816D98ABFEEC598A61306630E1 29778EF4028E5FDF844B027D6B72287D6DED20EC012F233C485513E8E602B45A A1FBBBACE51FABD76FD8DDD168EFB6EDAC2DF896E19484475DFAB060193C1F8B D19AACE579461F57D91C78B1A6D6C1AFF3BBCBEAF3AF36281E57EF7C54540475 516BE4118C554686B28C08255E448AF4CEC422A18981190894E191159A6FF040 4BA7580F27674FFA1469C84CF51B3F30ECF9F4407B090DE03644C0DEE0D8FCC6 0BADD66A88A1BDEE67E11377406F7743C3386C87E53EBD6DB4225C153476640F BD4A34533112D8260A10D2074F3C8983840B27A9A2FFECE7F8A61726B0050F83 F2EE483A53A88C8D0C26AE56232E937E2C022F34F397242F7B5F5297DEB95139 BC255DBC4AB23D0E4FD20E965473E92766DE7CA318DAE6B46FB99D9C9C0A4EE9 9D5BD1A404B8B45B2DAF63A26D7A1D91647369C82D3E7E60487E00E7EF9A3996 C2066BEFC7BCB387F5829204E61908D9416F6D30AF0966E98C65E4D312E14D9B 288A2F2637AD581CCBEDAF17570536D80A08E5BFDDEC7FBA1E2317E4010BA140 68B38BCB90E4F2B677B222AC963FFA793DFDC8B3D71802B3083FC1A23C9AFECF 471238CD31224DC21BE5C71C954C063B0CE5DCE44B02FCBE2EE96E2C5529ED44 6F5B51301895C8DA4C591F014BBA46A6A2DC6B758FADBDAA4CBF33CDF8D75843 A8E23FCDF67804D2F2242620DEF418996FDD456B907EB6A629810A699F6A8452 FEB739A59FD8CADFB9E4E8BB2CFE214B00A17CDBF35EDDE99D61985D07C0C078 6A360B7851621E19CDB579171BD134E3FE2DEFE4E28738C4E0C079199E324416 1D7F78ABB111E555B93BFC0448FDC2D0AF1E6B581F3241C308E08A0412AAD162 56C60005002C4E3FBAD89EF2D925849945C29F825A7F07C997F274ECD099B984 A21AD8B5B6BB50B115468A652AD4A86D002B82091D81AA533BD232CF7DF473E6 10135CC291D80E2813E55E83E7C3E9AF15FB330FC5B9C2256459CFF2ECFD4B1A 5B43E43214424F5A2DE6F572C0E85359F07B486953821893060D976248253EBF 9C8D9ED25248D83AB26B137DF4D9E1BC648818646C3B1CDBAA8C628D774EDEE5 435A168193DDD9EBB8569F7A8C12C453928E5DB7B48BD20D8B494CAAD47BF148 00590CD54BDB052B8263FF4F7E35DE7E4F870A6359E50B1B9B0A3C4615FE0963 DCF92331F54DD537064BAEE5B19748590758D6AE89F86F928A2B3802F3FB3045 3CDC57F4A44A51F3C6830CA661B192141D3D07291BBD82226A57DC2C2FA91B89 13A752518880717D2E39F8B32C7B95255FCF5539BCB77B3C1F90D7D81237EF3A DA33A74E38C40171098584466F2C516378056CFEBE7BBB1EDFF2204AB35FC33D B485B44B22A9A52C846425B7B15B29D490C1EADDCFA987F7CF2F3C651FD97DAF D28BF4781DD674B502F312EC1A84BB87F2F56475AAFB06D7ECA835855EEC3200 8173BA120F020CB7E428834D9B67B81349C35D56287ECD199CE6FBBDC6AA72F9 B9FBCDA8C1FC69099C1DA9564C5933EA8E084B697D7663A1A31EC26C24FD9D1D 97E64E92D19AD95B6D5C3ADD720A4CA087A39BDCFC0EC6A8B9705530FE6C7D5A 148015CF1FC586E516B3AE2669259ED21EDAC7C2C3CF816B44080F32C8793C7A E960AC01D6E438D7F8553237A5B12D12ADCC3D3CE24E814067F32C59CC4ED299 85D964126BB0D9798D2F5C2A32E5B2219423E9369F8C515B70F1345DDA3F55C9 9E67D52EDEE4A8922B7189042C5CEA9E10298AD9210F37B428EF6E0D5F7CFFF6 F0E147940DA630DFDEB6A3281B2876CC7D795D4B388DB4ED2DBF268305FC8AC3 E18D116A2CA4BD2865BA81FCE3C6629CE20DB95DA8DD007344E1B254C5F051A9 3FAD7828B5B03439106FD8EB241BAA86ED635F165DC37A29D446EADC66FCF407 7282B2CBF215A4E517DBE7D1977AB6647E22A482CAC8367B967712CC780631E3 60AA6DBA1EF7E1123EFD7C07E70608797841928AE9E2FD9FD387159C8137CF58 E6BBFF0139BDA13C3BB47B93B604738F3CC7E68F2C3147BA5FE2EF8AF5B4EF4F E26B7430254A3A7DF2050F924F5A473CC29799407711161F9EDF7933231AFE8B 14A8F421900FBF59EAC1263CBF664AE47B68A5D29578C086C1945A8F62C3CEE9 D9F96961E6BF8B00694531E46B03DC189C2EEA810CB57683A928C8076A554B49 EF350156B27CE4ED0560807CAC169927006085C574F816D693411AB517B3C48D 5B8C40218843B2DEF35E828F212C7CCE933A7FED344913E493CD84867FE401E7 9D4527B9501EB0F0BB6B5702C11E89B34DC3004FADABF8508837834E2A010B3D E6E63E2CE9FACF7B227A18B4CD07F02D72DFF00E6A600E9D700A1A8F2C96D13C CBDAF562710DE591C11825B619270DC01998C586DA0D59A0630B28CD3D99C89D 209C427F1F597E0786EF96A15D9D5769CD251E39F4CE80F80CE77DF2A604A720 7D3366A16A3CB171AAD207D0A5D2114066FB9CA8814A4A647B334D2B3A568AEA B1CF90D50E72CB35DF9DD7BD88C1AF3F8EE900228F7024B2C7969BD459721428 FD47B6CFE4057F475CD8B8DD596F454D77CB350D6E26ECA49988832D54A53D71 4804B0EF4505C649D10B433AC2779DE4F1205D6B78DF06A7472A8134D2829987 C0F44A1D5497AB4B7894C8B64BF80CDECD7B7E9AEDF893060185882A74F91D07 C53F80E860BF9DFED93C634511E7D8F3F7BEB3A8D0B5CC2C20B3DED13D92 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTI12 %!PS-AdobeFont-1.0: CMTI12 003.002 %%Title: CMTI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTI12 known{/CMTI12 findfont dup/UniqueID known{dup /UniqueID get 5000829 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTI12 def /FontBBox {-36 -251 1103 750 }readonly def /UniqueID 5000829 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTI12.) readonly def /FullName (CMTI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 101 /e put dup 112 /p put dup 116 /t put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5E0311AE44B83C3E 4FBCDB0B74ABB18FDD877252FD3501E05E597A77D142BED9940318B98D508672 4ECF79C43A857674E4DCF2556325CA8CC1C432E54543F706987376A084BF512F 0E4C517917FB1D607C83E479DD094240C3F309A57561CDF8496722F1D3EBF6FA 45CD3D7D810E2C07D39BFE08C0A25FD568DD37C2D182E5D30A7B2855BAD24559 D455B29B1F723BE1C4F827D72B1156DC2C1EEA76C9B27733FBB23ED36F61919B 4A6E8253C8C05F3D4BDC64B99B8494F7C37E9C19DB6A9CA8E9B0F9E7E3346EE0 EF416016CEE932E53A26599DD8CD09D77DF591A9D532AAD3E321CDCB28636809 E61D9EC969F2E27190A475407B90211902429778103D18665A681B0DD51F6E92 58D1288E2AB3FAEF05854938FEFFD3B4F376AAD303ECD28B23649E5D4C3CB85A 5C9CDCD1853BBF3282BCB5CF57720C6CF7AE468048D7AE5BCD2F15DEC1B33B5F 9917BF69BB64261CF101BB47A09E47D6508250374D00ACEC3E3FE8C5330AD9DB 9D9F60CC170F2FD6DEA12DA24CEA846E25ED6683A213E4FFD0BA239894C920B0 EFF562ED994A7A46F8EE2AF98F88317E513A06AB82A629979AAD3ACE316E7074 01EAD920A9E1D54E8FBD623773429C58A2964B498990E8420E5F7A45B3D4342C 1AC109FA67D4BF33C9D1E0E2973BB8B2495DDF5A7F8E306A0C712BD7A7FC98C7 44B26D102D3CD44A320FE89CBA6B3AB39627DA4679A5BB7C27276B34ED66260F DEB659189A797BC41D05323454CA4600A6D840CA3C1DC31BB7FEE8DE367B8177 3F1546C9EA98FA9F7CD61F177CEC2950526D54A6E7A0038F2B20609E7BE31EFB 51FDB6829852937071FEAAA3A0E51E625D7FBF2F7C224467C7DB77F7AFE006A5 418CF691841AB7A9923506845BFE066769A01A51EA48840E898FC6FF0ED9C2A6 1DB61E8840029ED92A129D38CAFAD4084B17679A84A262D2F9376363D4B5E46B 1C94302E5CD24CBE93A27319A8F79138414B2E94CE6F78C6F06B544D5862C2C6 297EFE524BBEF0CC2C32F63CDCE433E19B52BF0C2C7064E3ACD429E2466BB85A ED82C6EDC8AF5D75855B43A61504128F75C2DAF7F5C4405BE36C136CB809DF31 A40E0DEE80C10F6E6442CDCEDEF8DD0C01FB2C035A1D136693D366552862A421 81A290080EB8A3C5160FC2CD760A69F8254E8B0EC8E7280EC33802EC2668C149 73CADCFBD4E56A1E7A9CDA3F6A50E00AA536B02B4BBF4CE60B7A791098C3E434 B5A7F17D6E461FEE23C6C8C148C54D14345DECB7A619E56268131F65F86C51B0 E45860D46A1A798134AB3283BC8B73D9B39EC5D0C1241A85AA46B02E51DE6433 60BEAC76351AB35D8DBFD60C6F12F8B32E08C671E0269174E1E142E687B1C558 5668FDA480255261DC29288FF5ED56B50DD8512BD4948F31F14C71CB4F8FEFEC DD8E4F4EBE9C28312640334BE454634EF26B5FD02A93210D487AA4F3AF284479 303995AD31F4A6DD2C2DCDED3380D50EA1D8743A3C6561CBF4DE91634374DE87 FED0CF17C73B49060648AC6AF2921D19FFE1B7C7E76AA84600078A0160160D5B BFAA2007AE70640698BBBFEBFA5C11F351610023F563840413AF6934156D93B6 551069D681492EE73D480D648503801A921E37868B4ABBB013B628772DAC3683 3E44C318352E7700094ED0FF624AE560D2A783343B266FB925AE0D990B65F8E4 7A9725F23F0A08EFA08F81616A5D51E5EC31CD1BA229A89AB63ED782A6D716C7 1F00BA66A3158CDEAE3399653D7A29193760AD92F65C066A4DF35F91BDE771B1 74E17E4879428B5692343AA963A349064693B52F14B09C5F4B329C4AF4078998 D3F6C1046538F989C8AE84AE032A112C3E657907EE7A844B14C6A0FA8C9A1CD9 797E195186C478057525CBCCAA0FFB09F67F97E69BC402F6199B6900D9F285E6 47D359B1728728770C95B1A85E22D2132FDE7075F8FA1123F62504E53AB106D7 99B33689D55D0BC0C552745C5129CEF9F874850240FA6BF5F4779E35BF15A8F9 F425ED40480C60FE3ED85173E620320A462092834C0BCF6EFF9F1D5912CEB941 9C18D8EED5CA36CF2C7D3965BB0929EDBF7FC997A9CFE79A9FA9C54A11E1F421 7F3FA4ABB80A3C60E9165DBFB0EA765BD21846FD1260F1AA4644CBE05CEC736E 638311023F9F51F4C0166733A32BC1F615C8D9256E44BE8C2FFEC45B7B612FCB 21C52DB57E87EC8E166498AA8A4528B7C612E3BB8117D6BAF5CA8F9D038C1430 B7EA8699F31ACDC03774AEDDF6B73233944A1A89ECBAED2EFBD30DDF42821846 AF828EC54BEA6E7312B3255A7F55783C5D4AF1D9780A9670C9C7E02A50535A13 6D957F895D53E4E18A4B4263695DF2BD9626E717D5C3B80E908E59EF5D093798 7215550A5613AB86D67C1F89C95FBB0E6ACCAAB397479D483AEE4607E111EF34 2FD92DC7F991B6AE84BC7CB982D819A17022ECFEFFB981A6F678655A6278825F 0EFB5733C5F46529EF1FBB01C6BA7413BA9211251C0A70A470F735A96F6E0D45 DB1342D6B97ABC234790D346C74927F5C910F71918D615CA907984F0229E3F54 4F5F75AFF784C7A470DDCFFC308ADF6EF43979DD3B54C6A8DF3B53DB783B81E3 9C57413C3A317419C190F207720743084DC20288C1AD08B8B0FD4ED805FBA8B5 BB874DCE4AE93AE3B8A117612787DA6C8C7512191BC36F6D8AA38F39099474AE CD570CB5570BBA932C9C7A63DD386CABF1956FF87C266BF145ED5D27547234BD 943841047FE9A41C24B82FD3D3EA49A56C56840B1B359FB2A3F28E10AB09AECA 2FE2520DEE9B5542591E72ACE610DA4BF31C6E204574DC78033008F019519B2F E45C99F1B938D212602E824CA1CA020211420C77FF545DF586702451B0923EDA CA15BFF98CF2F0A56404591E57F7C89CAC6D22E0FEF9094770CF003801E5CC08 110B272A50805F89C0BB5C2966B9385C26F4A5008AAD97A29408A5116BE613CD 5ED9F85D2BCDE96FCF3121D5EE1D455A4CB03BF2AC33493FEEBEB955EF737F7A EABF96C137DD84B3EA39C61CE95B5967405CEF17D9CF1BDD1199346F95E77CB8 5FA2D38D858DAEF10D0DD660211C8C4C69EF58B60DEDE48DF76300EAB8F0A547 6DBC87BEE8DD4EDFE3020BA56F362503AFA62D8C13BB270C3884560E227AFABB 5D810B2B092531A679485FCFFB88BA8313646B644A35C413053DECCD4B371450 18F54701F610E52E727AE8D25A8093B60093FAF775B6414F66F43F517488B4A4 00AA4F672A34A73531218601904A7F50A045E80CD804D028EAFF506EDA1ED998 ECF16435C6CA8E203F2A813506F4B8CDAC0A3D69F4B704AB80F170EC87B7C732 AEFCBA3BF4050A9CFADB87F7AD4B53BECE197C10A2E84571A640328B90E9A294 73F6CDDE4F4AF9F1F3A257BD130454CF95D390ECA95FC4221D5041E71D65FC21 8323BA5A3335E2E905E33D5BA56BBBC9CC30D25764A066D013B116E693C56762 4F683F112A572C2C04ED041CF7BB4FAB0D899B3F2679B431E8993A650184CB4B 1B391B39929AF803F868245A69C964B560A274B07DFCB88A6508082DD6092E38 80D9187A146B60B225CA22F593AA6B4B7EE1EE41A0D375C4FA69EC6C8E02B54F B855D385C973A7223DE22465D039D213315C35F0D079E8CD030F62993495B2EB A0F9BA98565F89D2E09BB60D90B0CFFFF1F0845810ED27CC8F1088F74D48A30D 7FA0728498E78A381B0169B7678520EB5769522BB5838212D32C8C1ED5635753 EAA3C14E6640BC34D43EC162711996E0CABBBDE0932FCB6B2838C22C0E42DCE7 1BC85E372F24C1145655D59CCD50EA6E1A673CB0342BB744A43EA1B9104CF736 324E367D82ED67E01B0608294A91386045C1564E4E417E1A62EFBC148C0B4A56 73A98AE2F2433164740B839F851F9C38124B3C01CD976128DF6A06FEFE14B960 4573E748370D70F9FBFDBF875584852E70264766FA5CE893F74D0D5884889178 078CB149821A743D797E9577A7D27E7ED607349CB2CC6968A7CE402DF9A55069 4A985B517B714C603F993944CC64083DE3D5F969F9C5913C297E8493D310CA42 795C94740A5E5D3415CE7B4A5AA11A940D93992329D8B00213244405BBE73958 37CD65B6AEBCCB2263B937F671FFF3C6314D400983E5AEB6A34709D854FDD0AA 3D27A62BB23E253E6E2CA994294009B857B5F1FFB66E772A0BF9D83F4F72B89F 51B125AC9E495343C9D84A4BB4759DA4D2ADA38A195C7905CE288FD8634ED996 9068F0DC8DD08F3D3A1288A271E7F7EC4AF76EF6A78C47BAD95FA14A3AB690E1 19A13639774593D77FC1610D7F1E25A31AF94C5354B35500B8E57B0F65AC82C2 2A519581B587F5E3C941734A4269842D38F74E89C2AADB8ADB3D16542B0485BF BD4F1EDB4064E96A330D735F73789614C8D606DC553A0A2409CF4C595AE51505 CF203817971BD7F9B3346C036A18FECA44CE1C2042BA4E7FFA3FFEB6371A06F9 30082F47FE87B207E13A68BCA122968AD74CF6A12EF6767988F0EB0CB64981C9 30D9717F6C7D07F4B37CFDD68EE4480C0CA305AFA4BD21DFE131D6715E839973 E1271BF576F70C2F8C6827B3EF02CCA123EA46A02B2722E06078C3D9B3743CDE 45B43B561743264277D0D1FCACDDA80E5C6185E90F82D1DA4DC076B6BE49D2BE F03EF513F1861CF66D2B7F8D52C7A5C21DF1276B72CC1CDAAB5A16D20722A95F 8B1EB6E6B605D3878831204A0EFC95CB3C5B588D4F0A540D466D13B8468ECDC1 DB08D36E7FA19709A67A0FA08421053EEC9068ED464D29BB1BEDD0BA88882707 9F41334C3BD3F995321711B6ABDE3C12A8907F930F7AF490D774A05398ED03D6 789D91B4DACEA3D8EE11C2CD850A6EF4128B60EDE9BD37710F43836EF6D53FD2 D8123F81EC6F01A93A8B36FAE49692E7276F7CDCCB09F332ECE359E3E7DB2364 A60B192438FD158B18CB3EB40FD28F74A740367F02D5CB6B53959A0D11BDF388 9AAEE02F0E96AE2F802FF08BF778F26DBBAC8F5AA04CF3AEB180235BFDE493DA 4D0B13E0B61696A8ACE4FF7A09956A1896B2875E5B2BDBA09DA08B9589957E85 51084D76A00FB728E286CCFD2F53088158005599835B18F6F5AAAA6051270AF2 59F7BF641B0AF4E79F4491725189B89E57CD10B442B8EF89345D04EE3E18EC98 217D81FFB1B473B9562605F7B0AC3FA8CFB798A988E5FF20F068A6B2399C71B8 2E3C19E58601B0AD3872170B0AE8FA33F3A50EC5E67EC22C00D3DDDCD7B592E1 0D1CF31DAA48D10F7C6A56CA052A5AE914EE08CEE011FFF20D00B46A7738C434 D70F1040C611168D2C1851DBA89DA526428E6D5DDA244AA267AE3559B0C7DC8F AAE1687F823CE628AAD59999E74DFFACCF7D3412B466F6C3A315D8AA3350FB18 9EBE417717C42F3201D19E1870A2A3424E96F1A9734F32E85DF220E08C4DDF8A AE6F3491A3C805578924F36C146CBAF1D38C8C18D18E5A9B38236BD3E6B9E5BA 595F66A2A8DE9F52C9DFE00ABA5B99806A87D2EA39EF2C3A8D94FBFCB0CB5345 9AC36328B89AA13E4BBFAD70314009B0A2588847B7092C9EB938DD069CFA3679 73D9CF01F9756B931B34E70F4A5F1C41FC577515A5CDC49FE2C9A13D62E7E612 2AA5969248241BEAEEA5CAD34154EF5F9153D85ACD6FBD6B7F2834BC65C77E27 5ED803220949B14126BFAAC7728CAE16EF205F408232C5D7B83AFDB9C2191997 38005204EF424640DE1163B577274FB455EC0383BC6CC17F35112AB638743DEF 9954A5B2DF6A50DAA8662967E8E2208A9D1E3506309A9EC4C001CF91896E79A1 F3F6FE998DDF7C7971707CF7DF7415F6D42EE28620C0A225A1B9E389F397F972 552E566F748613EA1FD417CAA7B90A2BEC1AB07F44BB8AB6ED829F2D7F4DD597 989617E6BEF5E701498823382DEFC2D5FD078DF888DDCA99E62890AC0E5BE8BE 0CB662B561A49D2221847151D203457C797A904BCB5A1D68A51EEA20A167047C 36FF0FDD999E46C857864D1CE7568CE9518230418124EE5E51FD96C0FD8EB7BC 2A49F49AD72BB71F849B112147271000A77F41CF476AD687E6BC3DFDDE0CDE1D ABE816BF31348D25FE0A11FE7F5559BEDFC24A14F91BB73BE7F5FA95DA24D705 3DA96E8D05B84A1E5BFB0F15D7D4638CE4C63B74404128CF56A016180EAA054B 85FEE6937681557D0B5BC3C560947D456F48D7F4CB7A5EED52B103281B152E3F ADCE8B98497B74B05096AABA261D2A2EF56572904ACE2866C6A081C926BAC3E0 DE02EBB63FA29197B3812809F08A9E3D5ECFFF751E60F7082749F57352040E06 CAF9290336395684E85FA2446FBF1D0223F74B0D3464B06975010B83D0975181 3DB6C0E2967CFBDAFBD555018305184953487AFAE112D36E696DB8A18F3E3A74 C8B123F16D077DBBC85A226A26D406F622858EB7F1646BC0093A7C9711A1DCD2 6302B0611AC20A3870195D8BBA4E8E4F2CC73030B2354308CF8C06D68DD7FA14 87CE9D6FC7A8A356AA2DC356231B4993655A0FF55AF67090E2947C2B7FB9E96C EAAF52A01ABA6D69B738D6E3D4B2CF1E037D991EB5943BB0E6AB3868138CBF20 A112805F4CC00C65A4BE86D7492C23E34CC0BEEFAA0403E2AC21FD33D7A7FD09 9DCAC0BE550881647B322FE5806735FD993F5ED7C62173AB29095F67A626B9F3 20829E4788786C978B4BC9BAB9B3A750F130F9D4AFDA6EA3A7DF09D7615951D1 0C783A653F0BBFC23902019BA276A6D7944F1A34C1EC7E2710091C0B94CC3938 01C50C5E4A9C19F47D69074023F574D7A7302565EF9920A8E2A5076E6E3DDD2F 409CF1AB8BCE348FE63A136E03A520DDACA32571675AEB94D761B7B625AF1626 8BA9ED761E12A52C511890DAF1F790857C3C9FD3FD033A8330CD8E19266FE888 76AB1F3B3C8BA1FFCF3A6CA570290FC1640B6C4231D8346BD346E647D138B2B7 F7861E2C7C7C4431E3E91E318BA1DF8338AD4EB4AC104EBE7AAD8F5A09E6AB3A 48B9EB51A85277B221E3A22AAF38219B681918DBBB2F77FA8AA27F310159C763 A6E66D93879B592289B919B425FD7A367B7820FF430100E1EAE0877F84326FCF 5F1DD99964BC6BEB63528D2B218CCE41024EA2CE703959071A65EDE99127EFB8 0CC01566E5E52DB32D01512383A7711C7770AE17A71E5D95629642AA79CD5F01 D37FC89696F25C2EE4DD70DBDECEFA4FA2CD5D2F8ACE75937D2B1FEC7A31A893 16D314D800AFD3EA28068983A2ED3A7C75A5570F30A2824A47D6A789AC554C3C A78C2DE9771B86F73C66EF8E1D0FD046DD4F19A31EEAEE04D5F38B73C623F326 F146C7164C9B18B5EED2113363092ADE0ABF0D7BD4C10BE9766F81C34878B236 1A0FD6D8AB4BC7E3C01F1C880C3A9186E4006210D22EB64CD7690FDA750EAE7E C87A9D29128D49082578ECC0BC977D91E9CBB1ECC0D3527DC0ACAB39402015F1 B067FC5E7705586D97E81F8911FC2BC8E7C077384AAD4DDDEDBEF65CA4B75F6E 39E41528CF53CADA928537D557B518BB740593A6E4D0100ACBF126FF20888342 A0D3D7C201C4CDE8CBF59A1BA4F924E4EBC3E02883D5FDF2C8249AD8117332E1 BB52D2F621115C0F98037857E9DE1FF64F0674457A70FBA6B2EA4A39CCCCACFB 7222423B2A0F00BBD793D80729F4DADC600746F71F311137EC1D91D932FEA8A7 10106CC7EE6133A18BC4FB8CF81B49505AB2A72BC3F9A63F488D0B55BA6A85E1 184C28376918431D1E90D75AE565E857D692570D2C43C4097138FBC4E3F27BA6 A0A2C9660B2330091ECD3EDF09E4DF014126EAFCDB7692A35BF0D1535FB840E4 0A333CC4E6B305401207108F3D4D7AC63BE03D71F312E8D9A5997B8F5FFC3508 8B04BCF02926F780D3E585224F4307BAB2669EF27D600942CF42547522F2BDAF 93C8E62D55C0887BC094821830140DD379D48F47276E3870AF7D80FEEF80698D ABA900AE48F014A83FC21D6D7E0CA310B6618FCCDCA3DA9C95B654067CEDF915 E70BBFDD0DBA1536A7C11A8EB21FE5F32D9D3E7A7676554F7E11F2F56F62040A 237BCAF62FF785DDBF3D6CA141BDBC55EF7E7AB6367782847CDF067751D6BD74 A60180C2A01A763626F481534D5460A3FD2BA1B2015CBA0E3B73895A45C1CA06 1FF000A851796E3D53FC35DE0555B6C8AD4847D99214ED40C473342573371DE6 CA2B20E0A536F8931723E55F626667DE978A30A99359ADA70884903752A70AF5 072C772DA4323B86403D5EA1D8E1AD0A8D3E3DFA2BC71A068FAF41FCC982AB98 425F30ACEFB01B5EA9F5766DDACBA955D9ADAD433AD921549C82D32B76D83C4E 4EA7094E7F5F183945CE60D07C1E4DFF0CDB8769C0842D480A8D4DBE1F6E37D2 4938505582EC16061C67E88F1A462DBD2F6EAF14F6B3476388C18ACB53681CDD 1D3EB76ADEA7B1193674C526DA91C9C610E991ABA7E3E3DAB349BAA0ABA21666 61C6B6C11A1BA93ABE8582CC07B2F4FA83929E68684B6D9F974101680F0C8B80 EB001C7D593869C6037DE58EA58626E3C1044F2AA328596309D3E2D2E0018D9F 3EEC627FC715ADB9045AB813AA9C17C361415F42B63A70B33A3B0F45D49BF24D 3EBB4C525FF20305D3025E2A02D06D5C82EBADD202D655D6279A2850D9A305D3 C52846763EDFBB12CC8823F83E1F6DE9E213B194E1E4A91089C23353C0B80268 33ECCB5CA0948EE41B34DD84BD08BDEA791AEBC3D974AD10FE2733A6B0491E92 B6DB9EFD340F45018112E88018B6F8802C93693C96D6A5E4D39FE00489B2EDB7 69887222112868BACB662B4EE95EFFC4E7EFCE544D962D5CB583FCBEC14ECF7E C89CDB3CA17518BA1A47C14B0058D1E263F0490C77C023137BD9CAF2F665CC0B F11D096A0C782F64222375CCED4DED47501A09929CEC9C07B285F99CA6EB8C14 9E071566F6161099AD5ABFE7D9CB39B2170E1B7A2E94907F4F6B39E076DCEF6D CD3A0F2CEA9DD0DCD938D4F10780DDB0D060A203FB1FC726E5DFC7B5C358 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /UniqueID 5087386 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 59 /comma put dup 64 /partialdiff put dup 65 /A put dup 70 /F put dup 73 /I put dup 79 /O put dup 84 /T put dup 85 /U put dup 98 /b put dup 100 /d put dup 102 /f put dup 105 /i put dup 106 /j put dup 109 /m put dup 110 /n put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C142709006B68486B326967A28D 41E878EF9CDFFA015BFD11310CB2305640182A131B96D73348B7ED8D31A29D7F 2D889D8EC4F6C7A55DD179594ABED611CE4DE790CDDCB68CC677A362B879F4A7 F4F84113A561F6D170454B0DC4DB2F973E21176E5B00D0774F0BDB3F0E22D753 FDC635611AC85411D57FCE2CC85BB5DAE17BC41F3C1E5CA1BE272ECDEC1C574E E68E33D269E90877555B1E9AF694D44B85295968D0CCDAC4B5EEFD6E6F284597 DC1016F2D7502E91FD71BA624C499BC62FE7B4734070F8C123A633E51596A0ED 00F273E0DD044A7DF055D633040BF5853FE171E3442C0A00DD938476920CF678 69A9DDF5A29AACE82231873F15E4EA92B37F9045EB711B4939EBC0785F347643 5792033AB924266D8734301BA52C5192F8B32AE780CC9D48C832833999E78819 CC4FEBEAAAD11210EA3D220AC1798A5781DFBE3E47C31D0B5A0B87147FFD44C2 0F4FEF9B7C06072E0398F740D8BBD3FB1B9920AE84C085461C1F5C08F4251173 001AC878E423340D008E73A1F49B6058DBD668C43C513C35AE8144FD672DF548 C439A883086F14F419820F312F3127097B59ECB9ED4D16EFFBCCFF0CF648981B B0F888C510C0CB3C45918E92417F6CC39A8288A88398390816BB3FAC62D2051C CCC0A389D730EAD6B05AD28D4311178DFBFE442372B08A31D416B78B71520456 64620D9D0A3FA3E8BA66A32F7839E4410B48557459EB0918274A879B02E0392E 5AF97B16F09D2B8A3B514BC1BB5467D359020C43A00570AAEBD3DBF637154F71 9A636A9700C081553E214361B2B57EDA19BBCCF098E1870D0846736F0649DCA8 FCCCB124E1FADDFAF3D5925CEF54EFE72CD0D2BDB735D18B4103C1DBDCD8EACB 15EA2822AC4D8AFF79F1746B14ACDB6FC83D45B9D3E972710DEF408694402960 947DA3B6BF54DA82FFEBC510725C300BA2FB19A603ECB41DC86E8ACD2DA44C5D 157E7B53ABA05461DA40B675F081053377364DEE80EF49C4B5909FE549B798B4 96C226DC16A18A9DE663612661F780459D9932AF482B5E2351E3BADBEFFD4B49 D5E120C8C3C96A3D38A88E5D4A9559465191677CFAF1B1BE5B9FD0D277D5AFB4 8E827DD0B979E7FA7FE01325199C2F208A02EE453F545DC69D66B1ED9262133F 9C47E58A0E5014E9C2670788FA0F0A5CB372B84435B4041597A8A5773046E924 6DB111C8DC2DF76A47C644BCF5AE4D4B413EB0AC2EC4684B0A43C27EEB591A20 FC3A54B30B97687A68132FE1D54AF1CF3B8106818B86D27EAC3EEBE036BF4834 ADAF2241CAEF0F022DD19B6BE121EAADD1CFB01AAD30B7D7F77919DD70DBF832 4DC9B2B6C25A3BE9D59E069AF3D840B66E2A469CA4E39672C362604E9BC5A64E D166531319D930E8AE76E353293D1012EA832CFF38AE62A7C42F405EBB4BE70A 441D370D79154801E7BC5E2DADABDA6E00AE7B6B014EAE43B1BD54CDFB491ACD D3A0CE095510B31BF32DDD3251C9A6072DA950BAF4F489B0195430221E57E37E 97AB17B4D2307FA2099979A3C21A143DB47B1FD59CFE37AF2133A00A362456F9 0039363E61AAF973165EC8BB073E0424A00A07109E81CE8E5CB28916BD6F045C 5D3456A4233D51BD214B178AED5690B862BBF3976782EE4BCF8376E6C2DCF469 EB5C1E9EB9C77EE6DA70378128C770A0DBB28EFC16DB6E164AAD58DCF3A67012 298FFD7786900E7C6DA838DA48A91FE7E9CD60F1E6A719845BE9A914353F9B57 45FD159FDC306C6083597291DDA7974D1F52F916817A1E2DF30285013FBFA39D F37DE225630BF0B5CC539DB392A7BC2B0D206B0B603771A27B121C5E833A8174 0469AFAFB39332B22F2C43C3AD99954E96E39B52434F606A9600CA3D2F073F1C 0990081A58F1CB3D1AE407859C2CB4A4DFD8AABC87C8602037DF1BD0C0AF018B 7EDFA7CD5C0299A4423C3ACC13EE69921BE10BE83D8AAB025DD3F0626D2BB121 ADB12910695BD5F08E090F2B8EB1E28C117BBFEFFE4306D1575EB81A29F5D2E5 9D07000F9EFE52A34CD120BFD980910C422AB50EED2B07E76A2E0D9DFBDC28DE B481D305165D6F1C34F50E447EE2FFB8BD7A93A9CA158E30606B839732AAFBC3 3A08DC0DEF7F0FA5AD73BDAF2A944A733AB802CECEE10FD7587135CADFA94D61 F01CABBF11E31A186CCF1DA7759610559D2BE1A42A0C938CA967CD6133096A5B E55C320E3682497FE8EFB32B0D6FB6CE4A20DD069469BAC1DD52793A4766305F 6A9E87E572958D8E7E1300DFB1A9D4AF6541DAF4C414ECF4D4DEBEECBB3CC2D3 BFD6AF65DB7C35DB9645617A7E3821A45F2C71B2408EE18911722C54C634A835 5AA673AA61555E002E2172CCF46C6A382C2C2E92C6642D848598EADEB940EC28 1B389CA587AD7AF8B3B4EE8664ED9740035DE66C8FFC3DF446C9FAF0EE7EE5F2 6DCC0AC3769FE4162625C96E3755B3035CAA737771E0EEC508D4454DD38CDE10 FC092C46092DF18ADE20A76F8C68755D48F1F5CDB970EFAEB0805B348A8F8C24 43902334481AC8C74E2053952BF5EFFBCC0EBC6F0B79F988CA18CEFACCCB3D08 BC7B436277D984277A328832DD0BB1AE6561789155C7718B7DC92CC5FF1EF5DF EC486EE6F7BCCB4E507207944DF6041CBEF6479B384F4007F11693D6E856D703 E44C646F4D144A9831197B601011B9918C0CC02A9E27689BD11D8271D1B2B27E FEF8A4075EC80638746A30BD2253D052BE3B626E1F1D2F67B2EEA617F249A0A8 CCC3B3D41F557C058FA947C10C366F69BAD3C4A731F1F1DBDCBDCD0D3F327112 F4639EEF25BF7D754C6FE71CCBA21374FE190DB63D2664D17A76B7582DD86737 CAFBC0B650029317CB7E15B9A00C0739F0135BA73D786643D1C379D6468E299E BF38E5196C03F099DFBC0CBF0302601B3687244EEB546BECC3E542CAF4D4158D 4090CE7325176E9A61EE30F5B47EC4E01F33AB5CED77BCEE865D58885B183177 FE07E8FC2F2D41E36873024B4932AA7E3B6195A0E43D13BDC8B524954E657782 E8573E93A65FB180A6A339DBD6BDC19FEE07DFD4F9B6EE5E28A30B980094DA28 8ADF8A78D0D9E3F9298E92D0396F53F264BAB670295BB2CE1C1FBEF593A07567 C94E219F24269B778C7D74930E943A1837F511C5BEC3E88AF09C8E66A6F2CC49 D92ACED9EBE6170E0A32839F64AC488153B1283AC48726D210154A30BB8ED88A B38E5BC3EBD2E3433B539FEE86D22AD262AEBCFA010182C3A5A261996C091402 D6400E234A9C647D2AEAAA2BC66CA6360436C452C3BA207613457AD2C1F51D13 98CF95A768FB0370072F012A7A540C0186F1882F11EE5CF9E35F66B118166C95 50243604BD371708F3B924FEBD556B4B38FEF76B6BB01BE30D5EC8EBD5FEF8DE 9B2B32960ED74B24658350B1EF3FAC68C7A96B332A74E0903F7F4243CE250330 C7CAEAEFDC5DECB24479E2CA1B695412BD1C81964B16647678B65CEF1049537B D7F6CDA8942F2F80649C10D8A954DC895319E19372F8A8F560B7C3A5EE4B63E8 0565D0F08B43D55963E541E4CEE6FF16F94A0FF62D032B60BDBAB4CCC6086081 CD0611D64505D3651E909C6828EAFA31F84E472B3670ABA58DAD62D1B2699B8A 4072CBE57FE87140D85D87E87FEB5605DCD3DBAD9FCD318789BE943F5A1C203B 1D0C4276FA4CFB91DC87ACE48E49C5EE01001486C28340FEC7A603BAFBED81C8 F0C864CAC3E4B3C640D397FA5B2262D29D155FBED9BA847794CB53C9D166ED96 428089CA7610DB3C4E0BCD9CFE89EC4B07F2F740F456E8EA13F6E6E9E654D996 D3BEA1DD13B5B0FD63C44182D5E70FE24EEDBDFDE754C6FBF0C3EED0A71C3FE3 B6C41251EFA2D417D2896B73C164C32D13311311EDA94E67C5BB9D19778EB744 45E7FCECE3A04D250895ADC7BF884CA7EC7D7A4139C72B3AE7FF35611217D714 4AAEA3515CCEFE982E67915D47CCCD084837B0A53C46A17762712980D859CB3D 3D5B999722DA70E44933439B8D3763990A4B30277BB69F1D90129EC2A558225A F37C31E7FDC1E23A84A73C01D0F271AD4B0E950054957B4B896A1041093CBE90 A815A5219D147A19020EA4CAF00CDCB320F302137CC297BE3ABDAB8BADFF46CD 54B3C9D1356A0E16228B048FC4D1D19BCCDF536BF5ED0E80A79878B4AF576613 8B7C516819F0B896D21B0033090C3EEA0AA24EA25022EBC73504BAE6901B9024 EAC1BC7F91866C4A2599551D4C52CE1428DB6857CCC9405423C115CF996050E1 9AE117BF7C99964864594E8AFA17A2216B4BA29DB7C474D1F990A9A22C8068C2 B949172B0652EBC1781951CDBA435A27E09C9B006CC7195D90042514E0E3DDB4 407369ABA6B6032D3CF033EC069F3DFD71AF78673880AD5851A87820EB7930C8 BE757FDDB83F0260EEE896322A9EDF3BD3FE02564EA1B7A6BF0D7228A2CA88F3 A953897419E2FFA3642568B6135E80C880F7FAF495FD72F4F64741C5809F1062 6778ED2352CDED76F786B31CAD56FF90F71BF25E382EF81A39E17E43E23AE03B C826DE9F40810CD362FB2925BAE501FE9DDA1A917FADC8BFCFE689965C728AD2 CD72747FCC1CD24258954397AEE76067F540C34D7A9EE64AE0C3AE4C3DA3640F 371094873F14C35C4E7D165F8AF1D7DA1BCD6C5A315386A33E55116FBC8640E1 0F3CB5F47650C47395A629798538909249BF51BE9BBE3B9F12CEEB2EB4364F09 B0B8E434A83F492F7194612C26F978D45CDD614715BBD7362D859BA7C9AFB3ED 641A48ED761AC6398D8DA857049E8076819E03E2C9DBD4315EDE9750F30E742A 1321252BB55981C0A52E47F876338A5C344BFA1DEF6254837FDAEF1C1324B1D9 2BA8F6995B00591F253461DED642A29B71EBE4B78B1F1E6C04D3CFB7B60E6583 1F97768B1425B3568BE5736E35BC3AAC5BA74D3DD9FE5CC8BBDAE6554113C0E1 96F214186487FF0972C760A6700EDABC20617C26742EAA71530F9C8AEC4A59C1 B8705125A6D031DF578A772EDE68AC3D3F1EF7D6B049909D4CB3E69641D3795A 031CCE8DD84F963A6B9E315455E269B62F6E67E9E32AB0CD0DB92F66B59C8E41 8B1F91D249E921BB93EBB469933EF7D8B39D21689B64B4C2B5A9CE488D97D0BF 8641166B17EBA8BCE9777B0A89C6699A0E5E1FFB0EC1998D547660B384737EEA 1A650129DE15AA4D9FC860DECC1A063F1B8AAF06C343C2A8C4B3A3E0637E1495 97DD8FFB9E97471D03949CD44AA4A94FAE29ACF3A7AF8361BCB31A1D572984C2 7845CF32648FB17256B98F0B6DFA719645CF2D8406BBD617443716E069A24ED9 FD2FC1FC8C4F06F9DE71CC933A73FDE92A982F9974B3860F53C6261E441363C6 0069F3287DA67DEA38888CCFBC6A72657128C1D5DC9537802F0CDC657367EB77 762F6B47A647240CE7028F53F021B3ED058B1F1EC43867CA595D47CAE140A118 57B079FEF65A70CF24D4310C3F223D8E4D43C2316FFD6D65ECA0C1D1B586E193 D27558527320A7432A691393605420FC9F99BCDC7A282AD684407D3AE72A28EB 744B5CF2961DB6CC92D2B767C29BAAA0667AD0EC83CE5C3668DFE4A2D72C7B84 EACE9E0E190CD549819511601E79B90A56FF4F02FD981CA74FB182380E87F7E8 D794A12D728F939FAD3222D6235C7D7B0AC653ED655353410B5F449DAC7BE1A5 13968F617E9C903CB474FC269966B1CC9B654888E8AA5CBEF493C072F88D9B44 23BEDBD3DF5D98F4AD027B8959FCD620C4A50FD804415C5DF53F61F8300135CF 5DCD081B3854D2EECB6F5D86EBCB80469B1DFDE690D39E05C2AE3ACA209EF686 634ABD135C7F6C7739779300A26EB95357820E89DE3A343DC4F3FE0A58463D66 ACEB794DF7184E2F8F37D89833CC305FB59899E0982C79774CAD6A68CC646E96 1D0B73BE290AF58962DAE47BA124E6257B79DB7D943FD2A0FD9D0BF1414AED96 91D6BFE4A4243B996FECCF346B38CCF38918BF6EB7892CBB8023B096D06E6078 141866B6C61D1438F76E24F51DA3C6A7067F32B1F30A9B327BC285E8CED0CA66 66279FE676465CC8775BA6FBFAE1FEB947688CAA3D5D0771555E784947A5EFFA 95F64EAE4D318639C694E057997CB1EC12EBFFE0627D65619EC0590EF18ECDC4 124856F1B8C72327C690BE46A04DFE8A535823284799138835E28EBC614D1544 3EB082412554FEB23967CEDED21B3061D4A76D778C8B0537CA6C5267710E6C43 86900CA9685EAA3DB229BD69D93B916B147DC3E3C670FFADB2D9A577F20644DF 02B0DFA81F5C35E7B0F64316DCF80CD2EF264A4F3C549B6BCCB32B1741CE3A91 75EFC47374CC9A0D308BBC2BB8F4F0A412A6E2002FA77E8537CE70FC97AAE067 EFABACEC50F5688E51B7BFA2828C2BFA18A6A18C8B8F25C50558E61A05E73082 A42FB21DFF03DCFEC2B885433F85A0401D62D0B8398615CB8366901637B5339B DED6AE8D941D8EE153EB45FF137CBDED7E3763BF964A0A6DC355199AB1114659 30FCF4F99BBF8C59FE7D425776814868C7487843C22E7C182DA7F5507656982C 91A871AE87A63D52848118CC24BA6DE03D0141659DD7532D8ABB1FF3B0DEC26F 9451BC697303FF42757B2C40D5FB876FCF6CDC988E514815ADE95F5C1AF7406D AAB1FC3DBF9C2850A1A11CB792CE4A32319DFD9E773FC6170A385C1A1DC9A270 4AB264BEF5B02AF0E5E38A87E0ED9998B74EE4210D1A5157A2D5DAE97D99C95D 36646286FA3AF89B2A869A84807F0C437CB0DBD1A4B003514565C011A0C0C4F1 18EE6297A25CBF43B9149D14B436D50C11BEB1A1ED35B741B8D60D7E4B9497BF 0BCB40DD765F7713204E57BF48C9374F287F2CDB5C39724D6E35D06EC47001D8 B71544730985C042BC67E886B092A7F296C4E8BED59254EAC5444DC10889F70D 21DA29BEDF1671BD5DD0BC9F451DDC73DBB28035C5DC4D7511917B10855219BF 9150E1D4B656B7FAFEA7DCBC36BDD7D3572B730D151A49E4F8413B43442D1A20 AF423A7C1FBFA25CCA760568B82FC3F252EBD82894922DAE2A2EA8A3D0330FEA 60663D00E162C6832FCD9785EC5BCE9A71C10FA6B86A23660A94B952681D6C79 C12AE57B39456D86070DE9A68595EF564B3B0869234881156919AC941693758D 41A2F88498F2E3BE88D1AC22D94BBCA2FD7D159B03084E5A19F8434817927D38 41D2E594050F30257D72B6E62CC45398BE4C9CF5AA6EA2BA95A57B5BD0A41D57 6459CB43449B7BABFA2E86ABD130BF457C926470B658DE067D79860234AD6B54 3CB95317A361A02F1E1790462A4B0B8F5300C8463E5928962512B0B12DF810E1 949AFE82C72102D95C038E045A262C38D6434BA752711A745DBD7FD212BB1BFD B2E11C170731125E91C3EB17EE1FA2FACC65FB2E24FB9B8168D1A4AAB0765D52 C74559DDC79A1EB68766136D02A3A37917279017F1B29582B7C72A9826E609BA 1C300327BE0B3DF6072BF7F973FA594567DA67BF5791DD66D144AC04CDC49704 9869CD33D9A16897A919155B80FB965910852D23C823B1B300EAC026D5B8C008 AA984B23F892BAF88BFFD368C804F7D96716ED31E4E699669339A05A80DDB9BE D3F32EE30AE8681D26CD82C53AFC1DB009694DA4E16C7902F29ECE9E8224CBD7 A8E1F43F3A611CAB85B59BE50BD992FD3EFDEFC80AFDECF80E009B4DBA9817B8 2B972418907E1BE63CEA9A40DDEB637C8CAA2FEE367E99FD904467526BA84CB9 B1803D2F6382FD21C0F961B430813640172E3C35444D249D1E6002C419CE2BA4 B3556BA222EB4BA93A3027C01CBFF3E41EB0845CB14445053C2B240D59BE6BA2 7B3B2C8E42C075E989FCA923AF2346E469D413FF9F13521BEB34FCEB69B2831C 120CAE1B4AC26292C652A63231DD4724DDEF95E4B5288683CA85895C930C18E8 E32539CA984F18017C7F4D164820647F8BCFD23D232693AB13340B75B762B3E2 52C2FAE0B5B90C3CBBC58492AC552930519AC945F967FB4F2C70049D71A56632 CC17892CD97994D4B8E88296604967EF539126111C5899AE52E97522753F10D3 984B9DBB9386684C89B6B2A33FAABE14DDC48FA769078F8C8B858EC9334D7375 4D3E21ED317BE334B8914C028C352B02BDD624921F329623E9533E8533561D0A 3014045B9A32D569B98362314F1AD1424442C90695A50F8EA3689D7AE393E86D 4815DF28E5C9442BBF520A299A3A6647BB1375D24D83D49E3A240F1737673D96 72A0C50FA68F9C3811B43CF3A3F652A41CEF6A615425CC9E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR17 %!PS-AdobeFont-1.0: CMR17 003.002 %%Title: CMR17 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR17. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR17 known{/CMR17 findfont dup/UniqueID known{dup /UniqueID get 5000795 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR17 def /FontBBox {-33 -250 945 749 }readonly def /UniqueID 5000795 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR17.) readonly def /FullName (CMR17) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 14 /ffi put dup 34 /quotedblright put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 45 /hyphen put dup 47 /slash put dup 48 /zero put dup 58 /colon put dup 61 /equal put dup 65 /A put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 87 /W put dup 92 /quotedblleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9D6295729076BD8E CBC0F4C1BE246922D2482233846A96D867B66D9CF25A1DB661141D36B8506E61 A022F9EF8BC1F2F674EDF1533E67A78CA29A612AA9268E113C5EB84DA56CEDFC D7A111403E6E2A8682DB04368889747E003A124395ECF0C7FC81218552EE7C6F 60BCFB4120893528670D0E8A4117EA5676915E3591AE5652D003EEF67818A41A 8882E102AEEEBECBD15DCF632ED246A6A58B6A7780DB6F1F9AE3FDAC8344585D E104F2BA2DF06D68945889A2A3B6C262FB53FC670BC5EB7C56887FBFB7AA7026 84115872CFB0652C6BB330447AFF8F0F665EFD6A41D6DB6877B08052F402448F CB21C26BDC900636C99CA347B79AA73AFCDE9762A992CA3DDF7279E5C50F453F 52098529850AFB1F501A442D6A02E0A2896F81C8AC735AF1E7EE47208B4CC944 649DF6802EEE813F1456205C6126D7D0B1821AB62DD65468F3A30575E491623E 0054E2E680E4402E1C8C538DA389B81603BE88D6DC287A076F92B224CD58A0AC 44B8D490197341808DEF243660971F444A560C747BC6F52707ED42A99736ECCF EBCB694A561C3A70A319D204CD40D402FBF937A00BBCBE85DD26C9E3F91B7D10 D85B9D314BC3AAD5A58B107F5F341BE2C53490924142566417D6BE03BB4977FA 6635EA58DEB9508E40B9FFAC75FF44C683680CF242FE210519C9BF92483B0A54 83F48341318BE16D2F8C988FE3DB2E7914581F579D5E323148A31E4ED03BC24B C990372DF5F3B0C5FA32EB2CA4FA0EA33316569133C87697BAA2292E685C26CC F8CD40A2366E60B47D47CC9D0FA29D2836011376A07F78BA7664DE96E775CF45 9BC91559A063073A4C2FAAD0893C517C5C46A1425D07EDCC2B57162E3A45103E FF26A2D2F98B194256A4B052AAFCC08965A50EECD7B9E8F35AFDF7B6568B3983 8030655E7C2BEC961A2F20539D617626E8454E3FE9EBD3EFCEF7F63498441DAE 16CB509BF239FBBE25EFEF07A3E16C9C71EB8D9DCB8403916FB40FD7F4E1A52F 72F2DFF94FD14D7D49FE775390C17C37C1BA0CAF35CF75D682B7833A83224158 D54CE962CFBAFB1B2CA50B60CBEB1F8F58DDB2F5470C355ED9632342D9382AE4 5D33BCA3A0A25EE9E5B39BE5370E7F20684C664EDB48E7973FEDAD9676F9EE8F 701CD4D8CC9B9EBC06E8C86EB88AD56E15CEBB8E1930E8F711CB6E01D5D14967 D7E6C1BDDDE2C4D00384EF4CB02877DECC27AD53FC981338977BA0CC0257CF7D B42E9BC91AF45D9722461EC3CD9DEAA8011FB855FE14B74BE0A102008EACA2B6 0E287BB4F466FBFDD6E65A5262B9322F95E20DAB875A10A84572D982E6FC7ACA 23C0C37E5EB47B8E69C07507B53CDD98CD1B6445E1699CF35B3DA3E0DC56BB76 F997C40E2ECE47DBDDB707EB527055960113F2DABC87FD9EC7D0AB36B400CE33 0D54D4F197B2830B43DF0AA802DFB2BF747A4C44B31FB708B2C8BBE1955A6A28 379C91AA4CC065A50098AEC0B837E180B76801865A43C74859DF18FE1DA1483B C17843BF1C7E1B11A8C6D8BB8CDB1D552FE6A1FD0A696A8F7405F2320F8621EA 17C1A32056C45A9ED35D2BD12D02D8B26489CAAEBF4EF33B66FF4BD9B46E4823 6395831A8F3366EEA0D0EA88D612DEBF63DA7FAA24DA979ACC1A52544BCAA007 6C39946BEA6076ACF45722B2B8E4D0823EA2D12B14A98367BB0433A21FBD9F94 18DF298C56F67ABC9DB1868D431A854DBEDF8E1F49E359A545C75A7AA1FA4D5A 50F1EE6B45FC68ABF65FFF257964E4E50D8B0C1FAF498DFC554073697C2F219D 4A68DA9E873B270B9C56F0DDBC9927ADAF9203FD684DE615F68C24ACFFB44690 89C0D5322049FA69E7FD00EFC9C9B2BD177B5B339907F81C31496662847BEC1E 56B5DCDF4FE618970F4268F475B2EF7E0F28CC986DDF098E59DDAD818649CC35 4080C0867A884B8177A6880F06F1E5CC130AB4243EF8DD8032FCF390765BAB1C 1F0C9728EEE261A09F8C1D7ABC7A6B1550551BE2A7D19D45B656650DB00B3A5E B3E1186043E173BB4DD5EFFB379654F88146382AE3F7196F099BDCD6D245FB6B AA2FA9B6CFBC9F0CD52798DDF2F13874BDE5B124DFFE0DD93E24C9DAEAE4C3BB 71A9A13AE2860F620B4EC789F95221015D9C510CB4AC775EF69DB9E32E59C896 1AF82C9F0DCDB4812A37761859A3D3BA0CA57F244489C78065346FFA78F5F7C8 0B2E8CBA9EE62FF5C27369D0BCD52857D40F1FB8F8A1441B83565A4150AB1945 0B54D6E49F66389E43096269EF5CDD39526A288C0CB81E324E75D326EC9A182F 2CD966368CE300B41873B08E17C3E6BB51804460D2562AF5A12339966F44CD09 114C6809AF246B5BA6937631842CB9417781A58944B6BA4FCF961465C208957C 81A662D560D0F81BD3CB53C06B6D979F04F6121CCFD5D52702CBF6C70C01EDBF 2040AAB9CB144321E68C4010E0E98CCA2603EB55DD62E881DB621C37EA4108D1 528ECC7A0121B57C6BB1E26F8AE7161ABA7E88256D2D6A8B7CDE2E730D137493 3FF628EF6030DD2330D747FABBA03B44CF600418C245C388F33EC5559E7313BC 4B530C4FC12530D38B27D6408548F25FC084DD0523B27D29D6518D3115AE7755 37162CFD4CF528214466FE525B13782F9C3CD78F3D6C7423E63A134C0A371F15 10F4ECE1D482C647B563D3D15586F80BD9DF7381BD53927825D5AEAF762E1CDC 3BD184F345029A95B3AD4D1B66E79AB4F0809418C0CFD4D503457A190D02F134 3F57FC04FF655AEEB783D6791E4EC300755861837D3D50649F6B7F60766211B3 8148F8E575E28D6C2DE75B15E722ABFC6DAADAE53D89FD295352781DCC2CFF6D 982F6DB778D6FCBF1B7BDCB53F3A23AE6EB499BBFA96E8BE04C3C8E5B660EF24 01EB842DAEBE979F2C2DB72AAB4D21627063B1D3C6CD40944E4CB81655698FBA A343766CB22E392E5DAE01DB33A00918D6DAA07F2F38B336A3C5DF3708865E75 0DE04D3AFBCA27A249E97377D5785B4E28EE0E93F7D353619C200DB967372ED2 153BF8BE945474266EB2FD30F80042A11B7E3586DE4AB1FBD4A741D36DE583E9 1CA25DA345520AA60634EC819E7EB493CDB128BBADEC3890F055455F060A1100 D5A41D7B180027E08AD6EE7E393DB9F83799544404FE397F557773BE6A130541 157C0EB37E036C94825B5090EF85F8B4E3DB72895D86687758C20EDEBD6D1079 196E9949DC6ED0113571C70B150B37E446E319EC54D44CC0CF6A14760953DF4A D0E1F33A54D240E236AB63B35BA8E071D77776BE5B9312245F2C6E4FDB4312A0 0D9CF723E7D9A3D8546C4739C00C301A89ABA60A02757AB1A0AC40B24CE6CF12 5850485B11E16646D7150795EABAEB08364A53161111F46A7BC3423A0D3BEB69 BF15726C1F8363914945DEEB29CB8766328318AF3B344FD6D77BBB92BD7FD161 93356493D4D8252AD125708D47C124E44232FB2BF7DD75F87889496DCDB75D03 F58A57D4122CFC194B75A9E9C4789C9A33C0435FB4ADA16AD4A6191928D1663D 05FB8152C0AA176FBA4755205F8A66713404787070757D3721ED6E6D55A59DF0 C92BA8F05EC7BE05D0A2E66DE85E75373483EA3BBEE0F0DFC7E2FA5FBAFAB118 058D095AA71FDFC8AF37E5A98406B64E58BF476C6926725D7EF3C2346CE3F662 1E5A4A18D966479A37070859014719456EA2C7F23E68E1AB2F25ED3A0C00A18C DD403506923BC983F89CCA125780DC76A411472E38173BC0DD4CDA7B43E13419 B5AB0B9A35E77C58BBA12AA4F5C7EBF8A29996B059E4FAE6809565570442AEE5 D56CBF4407E1CD9A4398B1F3ADFF023F64B230E3D29F526B62D964F5C8DF801F E94295AD85BD9E1C18E6327977260A871E921C0745CA06A263E335E344686E7D D6FE3ADB4EE0A7E462F3C00873C3E95D183CCEC71C0E5DC1D2FB310B28FC3611 67C23DE336C374F72368F4973052B48E39969305791C986E6EE35D0350571860 3A8ED849712CF21AEF444BA390644E8646CCA16559BA4642A5800827A0DDC453 7CA0818BC47DF6348A5209A2F0A10CA39840CE6346E89CA0E842BE8692DEF25C 4623A5A0E0B98708B9492E9F564324BB3872D6B953CA59E9F393C477E2AB85EC C557D333E88C111CF995FB79D9432DC94C2BDB3BFEE13C0D7D1BB920DAFA6158 8548447AFC65CD5515D5021E0ED7D213B0C08C35BB424AA91885CA023D7AF767 B83E619B15DFEF5588D2F0564296E14B5A6ACE03751E1016105C51BE76EA5ADB 4167BAED2A8899031FD7BA05C410ADA25ADD94A787EED1A7AE133B0568B1DBA5 44B41BE013782CFCA3D81E8E8210DD506ADFCE7DC7E792EFEF438221164A7D1B 5E7089F476240C5F94988F081943F24DBF7CC3D1E58CB89E1C0C1624682CC3D8 C95815ECC9183A4B3E353C7F920B7E64086E01672DAA7C8A81319BAA03C1FBB7 8E5E84CC5BAE0E107754794C755B7AF00953504094E1A9DF357D51B578259613 8D26F0BA26AAC459BBEEB90BCC98B865EDD26AA4DF533D6624EDAC762C446B6F CF9F86DD2D8989D4655775E662B93BF51805EE3CBA0AE2293D95F166E80973CC 82C53042D0249C598B0821E9E7F218BA6114EEC86C158F277934F2651490B723 7F0D0288560DA5BEBAFDDF243048E590871AD18B3B220EC56549004DF122AA03 BAAD6971D790BC644369FDBEE74A324083CFA9496C2A333774F06E35299242BC F4B26578907CC5AD1893613F2B8622CFBB7B55810162EEBFAAEAB2A6D69CB72B D7859C73843E665125FF450631F32E64F13A6207F368103C7A7318DBAF2560D0 F1CDD83C3E48CB30C62AF1E0896E1962C655D9ED98E1BB38477C1C60ECDB6B95 067D3A638AD43EE886338F7AD2D2A574CE6FD2E21F6FCB4220EFEC85ABF8272A 82081CE70E4390A74EC717F1DDD168F4A4A080A79EE2ECE0F98A96871DA4B52F 78441601AF47763C2219F5A167604C32F478D498835EF3A6167936994F7C7139 3019FF43C97E7978D3CDA641C1E391FEA572D308E759F28DDE2B40B5BC207A4B C5EB6A93EEE26782016F8B6534420BE4D790A2E1A65B6CDBE9468152230384FD 14E9AE84418A44F94E6825DD7D77D0BB5486DE26A692B3DA96C81FA4440C5D44 8E7F3CAA9B8DF38F87E09C4D78841F629F78F4E7CC8580CC44E59E5D9AE8B2DE C0682F793AE7AEC12A8AE688636197E8A08FEB70EFDB6203681A60223B9B0D39 2DA656E5E99B82130D4BE38D7AFE18568DD30B0CC3C73C1E2914ACE11A65334D A9F18135E7B86157122CD221C33C62012FFB16D2D2F3473A53BE3E7B9FD4303F 66ADF0B07155C7B9B002EA68C6AC7247EB3CE7D2670A60138049DAA964F86A05 22983EDA7242E6BEEB90DF61C937399B2CE1061DF1E551CEED4A80D86C2D4649 C9FF9A1F93E96773CD392478D5B70D5336A03A274E0A6EF44BE8CB2274324142 706BC2E340DC944339D647961FD7BF29944503B4AFCDC69A706AA6B0F6AB2CB5 D220A96ACC1EE5E7826F6F75F044224E5260D581AE761AD0C752A06AA03FD935 FAD65C9EDD4E5505396E331D45DE88F0D1A4303D766ABE0702C17E2A7F53C0EA 96A4DEC5A6B6186F5DBAAB05DD78E38AFE630465BEF0EC66ABA9C1C9232214A9 795D105C33CF069F6BE20B179F4CC9F484AB63ED25C1212C457DF62CA0D56E20 608572216F2D4C09010B03A8AA6D287C8F514BEEDC1C912552CC2489858BF4D3 084882CE4F4B6FB9EE27C0168671E6DA154018ABEAD013C88E1D3EC918371251 63D95BA0FE20212C20AD3F4DB614EE36B488A3F55D94C1EDFCA8E68E54A1EED4 7DD168DCCF07C3DDB5E2B499DB5635C5C5056A7438120DB4839427D07F96AB8E F842E285243E40259F6DF029E27779CCF3D3BD7206B2C341045A5A4AABACC2A5 91C6830FE05ACDCFDE99046F16F2AC183426ACA4A89FE5F09B7EB2F811BB5FB5 AF073BDA2886070B2327D582DCBA66B47E8948C3BE05E837BE4B81402A583403 74FF9E938F0E9DC3B1CB81B93DFD4070F9EBAED40BA570DE8F9A5C2C0A097311 22A6065139A6580E332473E9410D9F4C734794F79E41D0D437CEC7381919DF6F A24B170E2BC97A6396A4E3AC3D844AD6E2B8FCE1C6AE97DFC5319F49130C3D6F AF2541EB2384D5D4CCBEB976846EF8C2165DBF706112BDDDEC9A57D157F5996D 95229FD5C71B885D16B177BAB06B9DF5740A45C2A005778EE879193290419C0A A4A339029E37E685B8A05B111DDF94AC19B1D85C8E6026E57E3D3B373C08557A F96E6FE3916695ADFC1F0BF5D558565F42A71C61ACFEFC9026424397F0646642 7EDAA05794BCCD164A645860B57EAD53CB6899B18C6E9496EA4DAB0A0C272639 DEBC4FCBA94B3BF123F7771F602E7667C8F56E12429669F2219C7D8E294BE07B 71E88EA62F5616CAAB7C0198E6FF12A348E36B306FE2684A401399431B6A84CF B46EE4BAA0F4099E65E9AF3B70274EDD6B6524F4FA38C23F9CD5273EEDC8C6C3 E7312B6E0497C05AD3F3C246638F01387CC11DBCBD287ACF54D8E24759F51415 35ED64132EF4158F54AB9F4D567482B3057880490F805822F71E7E2C52F7BC38 8B1F803AC3731064B90E5E97AA3351D17E73DC2FE526CD6C91158636E395867D C1150FD3BD12493FFFB813AF0D08C8ED0B7418A2CF90BD5B783364358605D075 5DEA95A9299C0654EFB28E2FE8A41358A0DD124D0314A27558E42ED5F2D74BB7 056DE04D2CF13B9B804A3CBBA29BC155A3F18B8B48283194C33CE8291677E1EF 0721138F8E0409D49BB99F217607586D2DF00C29A25536E21924B4CF6702CF85 C02DFBFD2AA4DE3DBED1D2C02E21052A8D10F96629D0D18154923638FE0C48BD E2DEAF11663E20717EA77A5453686AAA39D6FF7919AF09B1AD956FDBF734F49E 262F3076F62E77BD45122B55A5913902D9F91C4246FC235BA9C0FA4A96994291 830638949BED423387DA2D455A3C9122484EFF27F5367D1D3DD27D207D973815 965E1CFF36F43C653ED406F65348671D9FFAF55BA3FC266D438AF473181B7801 164EA3F04FEC870743195B3F467DE36B3719BAD9BF15A18637A314C887D46673 445BA3C212749B0A33136FEE9FE2C9A13D62E7ACC96378D257FBE0EB06AD4D4E D41976AB92AC720DFD33B0677062C32E6F5C992A0324FD26E984B5341A58C190 D20EC3F1144697D514D9157340A6C9F82E62AD8CFDEE59F6FF86C6250CE33D6B BB82DDB4F65BEFC6F6D0E4044F7BF307CC346E2FFD191846E3CA288C6F91CB71 5FDE855FEC5E38816CC635C470BF15263A10A409F0BC4877F7E6D4C223E3564E E7BB5B320AAA5AAF4F32528F7413BFB97C70FF5E6843E1FE501472129BC9758D 7531BE576C75840CBC4CD3E6D9E5FF52559B68DE6E7827128BB2ED1BAD43F36E A0CB68C1A147A7093EB02062AC5492DB7EEE08B1BDB187E15339A66269E459BC 67495937B4317AF66A498923322B087ECF47B601C26E253D223A784DB2D204FD 0668BD403A73723848018B7C86B627B9AE0BD9038F567CD5F670CAFC5C4D86FC ECA211B713ACF8C1370191161CBB6C2592E8B9DBF3471133F2D9A60F15D72F9C 5E5539D59A6A7E124D9A38A6FF6EB7C71990716F88E1888295584F17D49144B2 B5775A4F712BAA9B0C6182559006C99277117E712D0EAE7E599E86D33CE2AC71 4B7F1F206A12F524DC97030DFE2CDAAC9ED69D15F816E3804FD3CFEA13347F0E 7BE0B89400AF0C9DB20905E27D47F0E21E67B0F468C846557A983C753D28D703 CCB29BB0939391BC57C2EBAA31C5741785DF54C112D7813F7271A5474438A7CC 380735F02D173F4C57FC6C5867652E35F4E7C1C6B44B38419F276FBD020EE4F2 8EE492DADDE9A7DC2F40FF95B86E299A68B7EE0B47644B357854C93EE113E859 C186C6C00B8E3D072C3235D22A809332835911126349C5E70F17A16A231FDAFC D4F28DF3EEA1AF6EFF5490E5C45D2E2FF381528AE3E23D323472F9DC585BFB14 DA87DE71AD3A047E789ABD9CA2FCF0D1166DD873BCE45FA83C7911A32AC994C4 B96D4043E6462ADCD1DABAC4BC89F49090A2614D86F2670CE5E07478F2350820 CFB768567B865A2666352C172D73E4F548916058530B1BA00B926DCD37633B2B DEA0413BDAA34142D2CC300BCBBB878978D995DC518CB551334B31801C22BAC7 13DE7CEEF020D644E8801995EF9CAC30822D4A4A5D0A0C32ACC142C11186C06D C35720722FFA2D6204884EE0A5128AE2D87AA79FE93CB17F0C876878A45BF10C E51D3713C58A8BB6D2318C6E6FB8AABF775329C5B926A3A57EA542767B8AC08F 01B948ADD35DB39E1614134F50CEA7E1B42F60D91F53DCF09F5B4173ED322D91 B0521B2B6EDBF229FE2A6A3931A0FB3CF27D2C8E92B955E7B98789B9F7E674C2 95E555E56C1199B54F031FBF0DB098B7766633731042C04F8418710D67571A04 AE364CEA1D0202026ED79C997261B5A8AA204464E2EB660A2356ACB22F230037 B51EA6CE80C618C1814F112ED17DCB47F7B942E4E90B4FD488DCFC7604024F59 69CA95E92C24DC8328C8EE71DD2BA57C2C280214C45FCA7CF2672811806D3C7C A4EAB7D45B0C20D27BF2346D046947C6BD7910FEEA26784BD01BA427CD799FEB 2D1D5359B5B7D1E6A649ADEE67C629A1511D420905D5209BBC68956B128592BA EB9CD2B81468FD7D03C7D6AEDE6032F2339116C178897EECB1EBE520F4A5C162 BDCC45EDABA96436879CF4047C169836CF4B7F9FEC5F4385A21280D38B8C7222 6A1EC7B3075E616F123B8EB9FF23EBB651E08462688BB67E79B2E55D97A8F7E0 0ACD51D5CF21B864F54B57C8880A77734B2AB2D83FC0C97DA39945551A96D223 D64762951E67281F09454A10BA72CDC151069364ED6038C376DEF11E5F468C32 DA47240A1EEA9EF0EC13A7007A8909560E5E338711226A2A3D32799492D7BB16 0EA789957121E840D8FBE4E2C20D0AF5265383718BA67F9F9B9132B580B42B4F AEB64D88D55E49DCD380AF47A8B0FAB88BD1E3E6039615973EACF56DB55CD353 930927CE0B1F8A9DC787274C599C5F4F03829844CA50B3F514577714FA4CA9C9 CB74EE4F889A5D4ACB8F9A31881965A830A9136C17F8DEA6A4E4194C14C65A82 78A48D915E598ED15788596EDA2AA5A2247DA0A4F632B2DACF2E61717BACABF8 82E34F7AB49E44412B4C6FC1E5ADE223B0AAC6A204A593C6E8155C10B9849D95 7C657386B15F9F3910411B98AD08720A08FC58DAF7A14A41944F86A0A1756C84 A0E90DA9A25B228A2968A3E83FC000436707972C4A7D7EE5D0CF2C20853E967C 4E7D41A808A39F8C65679C757428783457F8C7230F537FE0A9CB8BFF895CFDDA CC1D65D33C68FBAE30395C96B57D4A2EAA8BF1B098F624EEFBA04E6AEF75B5B3 76FAFC8B42654C07DEAB982B7B4AFD5CA9972B41DBE0ACD1FBB507A890757C19 E8BC5C2AE6A5D9F606AE2A8A976ACB8F6F8350AE6D4B668DB36EF8E0DFC11E71 ED65B2FDEFE29BDD8F779C9620560D6B4FF7D77871E5A1E416762CC7361A0688 5C3B68DB4DB8EC5108EDE095DEEB6AC4B8295CDB3B49F5D04B9FC428DEFDA593 5E0F48F2B157AB491FA20BE780993DB52141E49C861ECDB2186A68D48537C480 175FE3D2A443603D32C48513B2A096E21AEF0DE8147773015635567B9041ABFC 342B88C28325C1B28111C9E50ADFBF7DFE024426CF114A6B1C75C7E49C98A8BB C92922495B30C91F2F9A96509F9B4032960018BFC828D82FA1A041880D0B311E 9DAF2998DAB4C7911D6BA78F744F401D95B438061F10232271D39734C5BDAF09 5F0A1A3603650F3944882FC77027D8A3C0A06A4813A8F56FDB269A6F1DD5A06F 5D5F2354FD52383DC805D8814650C11EF344DD0FCA55A0753F14EAE102EF304F B9F18B37A8944CDEDB8CB0483D545C0DF249DDAAFE9AF37DD30B36B2606C3DB3 6039953E8628C4CA299C5F801DFA59F413865423344C4A3CA7BB8E816C7F3610 A88D322C1E4D0FFA194706195B587104E4358E42BFE7A3AE20307D3F4518F9AE CD9D7A97AAAD4D0594EECEC01FFFFE345F115DB647142AC36D7DDBF6CEC01BB5 D2DC225728AF9156CBD1430BB0B52902919A6CD1194293BE0A84AD8D0D3EBA77 DE23E7018B7188A13D4A8CCE8586C7BD120AC07F709355141E10F02C44112A3A 8AF4F7BC03F7EE8D47642CB4631DE0B2E60D76727D4D817209A75F580F02F803 0D7F43268B0AF4DD308222C00DD20C32C2AD8F80A7ADA2B6BBA3A1752AAF92BF BAC68A3A14D43DC20BA7629059E10DC1451CC7EABB1EBE7726488D9FE0C0356C B2192A2B4A550FCA39DA764D206FBFFED9AC26C0305810E9DBA97BB72D4FF773 F243256E7C3BF00F9AE4F48A88E2C09032211F68A17D13D9E3B50796C1AC2E8C EF00AA8D45AA9D02DE4E2C2F75E5044BFDC4A132C1C716599FA2C53800E8227A E1EEC0BEC6D46F94541762E6502AD4FC1F42EEB3AE4C6CD7E7038607EDD3F0EE 696FE9B5B2D996A7F11543239B11C5A877013A863EEE183EEBC22AF3352B0660 2BF5C042A411FEC7E96E527CC9FC425BBB1FBD1F071F9918C968E18B34E34386 5878359DF43C2090F7C77342796363A70C2391F9F9FB652A808DC3C5CB96FCD5 E5B266F97C9B7B2F3CD2A072C92C79628686DAF34C75F7F0776853F658834535 AE0204410A28399BBD6BDA3DB83DC36F77CF0819357BDB079704AA6D62417C3A 5C2E6F97BB95268C2FBC6332D307DDCCB56A17B1000782862A8BE0B46E6EA8DA AE170E656A579C940F03AA3FF75CC76B143048F05883665925A6FBBF5785C6ED 58BCD3D9A804204D5F329813DF06CEEEE414994C63CDC869291EA6A987AA76F9 A7531F818EC72B377818BD1FA59ED2F4C50F972CE706828ED3BC3007A05E28DC B5D0BBF189B8B1E36A00202D4900746B79C9ACC94ED71B319DB1B4EBE70362C4 991D3F7592E247806D83052588B12845D45E543C9261AE9F61C11373FFCA5363 0840F7DF9BBE494735DC0199A7F66C1553396BBB515EE8324FC39F35AC5F1F43 60B276765B2C6851C60E535D18985E6F697DB377575BD7277B9C57ECDA24441A A75A8D2C1EC513A652E7D24B01A43E314B67F63920FABCD703C0611B618FA04C 1B7BA9E6524D9472A16890813C518313AB8D484F7E9B6AA43C3F88E2842775F2 2D8D3CBAE4052E195AA628D4EFBD5B6E095B392D106E3134EA9EECB94B9D33F4 1276800542C43E1682B94DD87D84BC0388D13B71DC3EFD829F187BC735444661 9B4F47D50ED85934F963CC43590E4A661A20D8B4D1D5B28FCC99028F037EBBD5 5E623FD710DD72A87697A044C927E2D396C6027AA919EB41D7E8BC0B66A1C40D 6F3BF81CA211CA5B408AE86D7D15921BC720BBF09B794BAFBB2202AF348A1511 795E7B4669F5AD940A7775B8995D8982950CAA06F24E822FA0CE64ECAE480F89 14135A1A87DF87A18C1E99C630E0EC482578AD58739556A473291A1C6AA6DA81 B64E93954CD75E92CFAE29E4F308933E1F39C32EFF5744E4403EA2FC7C541C3D D0D7A3892FBC49D342CDB4DF615E2C0208A4A7725B96626F42C9CBF97BA112F8 FE5807ABB38F0193CC6E9E9EE2E490AA5E970DD5042C615368CB8BA6DAF5015C 5144EE7094D1B8BC168594CE11538645CA0160EF342A7B172E4B797D9B0870AD 5342F876585E036126F3D13C1EA06710ED4792810377D13CF8B3F549EC49C8E6 7EB67B92DFD2184A508B1021EF33CDC8E0862A68A429823D1BF7BEFF351F3375 A46F333B02EAC88BC8C2423A2D2247AD9FDF1343A93F0C906BCD7C9D88940984 0F2FD4C356FF663C22E1776BE36BBE88A38DD671AC83DF9DEC5B089B1E666C69 CE3CE704C8409C5595682E5F15A6D97060A057BAA7AF3F7F4A424A3AD73A7180 F19C71C49FB688ADCAFA1F8B9CFD6576ACF2CDF3065B5E399119C66F281C4C74 0FA675763307EC8260E3DD13C8582D9F47611762053229A0D9D3B2003D344B3F 58CA962189436A93723D1EDF1BED90460576B97C44D77C6CC1F9F743FB74EC19 2A5346E3652F3DCEF92E38102A55FE528C3105E697D5908F7886A2977C9D9E3A 1FC9E72754B7E5CC500549451D2D9958D5DA1B04CFD852064714EA92E3ADA300 BC795C22901EC687FCEAE45031FC05AE128519C2C8C582E13D3963FE37BFAF58 0C58B88D0F09A709E26BF380CCCED4A7AEA21BC02847BF54CB5EC024BD862690 C3B8C43B68D22C88EDAC14C565E0E3DC0B371824AC8183C2902159F5716E9CD4 9C0232975D5DB471BAE1A58199DB318C9189CEB7D3600AA4E2DF1419C1AEBDB9 187A4CA10934279B1A85DA12826275698B091914B803E61FCDE1894648ACBE69 E01704B1BEFEF036F361C1203018F35A2D3489BB3D90FFD13655F060C98BA6D0 90DA2129A0EFA6F3FAF6A57AB4F30E8762E7FB6209FB322876AB044D2A20B1F0 EEC78D38F9B707484F44947579D4009F2E735262F8FCD19D4145F8F4B576763A CD28E4FBA3CB5DCE63269397A917AB69B376B807791173BA8BC61091D70885A8 87B2C19E9BFBA1EB922EBC8D6FEC4C9611B33D1918608A35800981C8460F236E 0A756CA29721D678FB05C60E5E3FF76ED7683530DA344BDD786FA3B1F5C178B2 1616766DD0E2240146A27A80B0F50B0BC7B794487C3146C57170618B9E87B58C 208B3AC7C583BAB7D64368DBD780F776DE54F9E8EB32274CB45167D160BD85ED 40407A0758D8023B685D269386E87ECEE84B2D1C4522032927C0767B37CA2BA8 B8D09F574CD2B552FC02E8692A49250C3D418A0AEAEA8A6B74F9F58AB79F4F64 0E9DFBA96263F856EE786E333CE029E555F62D50203DB30C52502EA7C159908E 4E01883F690AED400262E21B5BD130D816CD8B3BD8D1188E4EC789B1B9B43CAF 93D513B000071752E0B0ABD3C33700832ADC802DD40EBE03F958C681428508B9 1064306F6CB71DD0F2A86AB0733D53B802F89A34779DC5EB5C02A288C470A1BD D19DFAD7DBB42317978A1DF5E6F1A0F92B998CA75FDF016DB0C037C3CEC7C9EB DBBE37131F526E5D461FF27FCF565E821976BE73BEA3263946FE5F3845AA6C4D 5A77A796DF0673F7ACEBD04E66871C219DA0186A5E79235F2A8D7DCD7FD878F3 D90EC5516DD6AB50DD3475C45EBBA3A0F3BB2A89917E5E56623F39077DC94047 CAFECD6E4677FA2128E9203D5EDB4FD908A00E9C467CA6802677D99C951B0D15 E6B5795ACFDBEA54CB99708F7DD1479BC8780AD28B96175E8F572E74AFA3CCC8 93B84061AC3497F5A53C93DCE1CD47938FCCF7CC055F84715AA8BEE73648AC47 D04CAEB4AE5EF9A5DBD399EFB1265C6D8186A8767CC522C55BBB84EEE917B9F1 E4CC11FD11F5752275420CF48534B7733B10ED90F876C740726499440F617DD5 16C26F3E4D2CBD60871FDB160BAD35E8756C8B7AB5B78156706A35A8E29BA4D4 77BCC26B5F4107DF0EE5D9D2E514A59FC77F8610E40E91DDAC2C68F0FEC75924 70D34D2C4FD58387A1678B9754D24E286B38C3506B25E7BE19EF29AC3343CE76 AFCDF93B1940C228C39FD53B6812556E8D5B2E5D67EE6B3381158C75096057AE CE6CD362C481C9BCBC75CFEEAFF76A4A24A319E2581A88D27307BC23B9D147C2 E19466268D8B4828066B540FC5ACDACDF6E95DA3998EF0FD262BA0CBB40223EA 71CC1914095A5653AE370DB1E97541FE06864484EBD568A5C225AB5A33B3751C 9827D3075E5BA2CE6099CA5A62B9F1A56771D66F0AD33E1DB0BAAAC958E89248 AB28EC584A78E26237D4A42A8AAF807B301E3421B8030F8EB744D736BE7E0F93 D525BBF993A6D46C2102AD11CCE3F7667E2E21874F7C51077B89A11B5F6FBE72 10318C951E6DB66C4FD2D784B44D2A21FC081484860E1B975F9EC7EF8D9B9B97 D9B610229EF646CE3479AEBE3C4AF64523F37F17DB6492AB5489DA1E518137E4 DC3B3484352579150EB9EA85659A77364C77C03746CF817600E75E86C003CB1B A8ECE0454C6743EC4A2254F41115A4B22D9D6E6A13E371AF2CA22F44C1EE2C20 7544C0C61C52A262218E80FF4D9AE6B7C03C4E03938D040393A2CB59B2DAFE81 50B405257F2105F92A071ADA1886ABD7B6F350590BE1B9C82714F4DFF4ED3EE3 F586BAF6C516651B3CA21AA3CAF075F7A297172ECA090A09DC05A7CED88D2C98 BDCC497930CFBCA201B3E4ECC02DE1279FA597AA9352D0A825657A3BAE4115FB 85CFA5DB55167A4C44501A81CCC91E7801D9455AE68C62A6FA427779F66D39DC FC6C0479C8F89AC68D5A3D56CAD6A0CE8765687666CC049EB8104B033A999B48 5409C1E1DBDC6E3E4F59C887857CE298049901F185E2AE3479B678CA0116F662 E18B60376DB962B6C582C00362E7F9574C3110EFF9C31EF55E2BDFF7AE4C3FA8 06FAFF322F50582AA92CD22E75D6B828D36CC7703F2D5CB16B61CAAF62E143F6 D8DEBFA770BD6E0A27B1D7209787F405AAD908CCEA46014C87B7EBA2DDFDF9C6 D0C0229FB63EE9F278CDC1F5EE6B81C80AF2AF97297746442D846A85F98F2A76 13E2A26AB4E17651B40D1F598C74550BDE28AE6974B28F7A5A1F773B66C370B6 EF23932EF963A4FEFA3E7CB8F77E3D366BEFB5ACB795888083E290BCE06C9B2A 197A58885364B2B4F3F84CEDDF6E362349E40E1DAA5D265546DCB9D5035226B8 D89F77D13A59D77A93D1CCF1E49CEA1ED01825F5D24A192BC4F644C5D0B0C899 3E3A9FB0B31023215EB2A0A72D4BC1A6BC4B6E738581930F0D58B8621F3B0E63 353C0B7C358E6873CF7ABAF4EDAB0B951FA27BF3183A31C5F020435F1A9E8DF0 D8BB29792935AB47FE2F08C0D8F2AFC219E1EC1FC1C481A9CA344110953469F3 CEFA695FF6E4F058740D5904EFEC72FC4CBC0E00AC6CADB9AF1489A7C4B98AD7 C9407E8017DB2EAE443FD7CED527384586298290C9E22F3A27BA64761408305E E86EBCA0BB020D8D5A52BCE30F91CA46E022F673155C2B447C1442652F6803E4 4C19986F5B09B4B198ECF55476FC5508BFB0B4E00B478CFC5B67116C1F48B738 A0607CD0ADD1DF3D3190EE92A37DC0E4C0D4659B3EEB0B40CD61A97B78FAF0CD 559DE768E4D2E081C36B4434C8BDE6259E40B4AD26C209FCB1BE5B9FD0D277D5 17F3A172F65E35CA9B038A0264231854F9EA7DAFF151FC8F9FDFABE40492085F 4A6F5D017AC3A2530421F52DBDB8E576E901764EDB94BA79F698FCEF237B1DE2 7F12CD8926740CBDDEB6AD1213E86D63EC22F9C5AC8803E7FF553C3D39D6FED3 B389D06300E34C1DF118A84C99B403C0BDD1EB169AA25E528D0133D720632859 3F61DD956244D9E73F873ADDD3917D3AD9E84F611D95C23614F27D39BFB3F6C1 34669169ABF9F68967EEADA83A7DC1CB26E1D6A30E306798CB07AFDE14287A32 406ADDBA129B77C0E397ECA874E7FBB010DC7BF67D88873442A99E396336A711 9A02D941DE0B1B2D516F6A33EBA74564313AAAC22C950A011821264E7AA91282 FE161DD254EBE2384972CBF41A2C4D85358A60B1E7A28C6CD142B8A9DB8AC235 F5B4A6BAC3080E6E1208C171CF2C007901176D364876706B4B11090013D6818C 64A889240B2E196C34F7D6EDFA6B5C034CA0D0197BF3C29EAF0C4C485470C840 45ECA51BD4D542CE5946CEA43546ED92F579A7989CEC3806B0F3B27D462C6DF0 C4D27DF6D10B852954B031143B6ADDC1AE8C5FB1E8DCC09156AD7322A64CA342 C22C99FBC817B551F92B05019352EC556D797E2E8E0F54EBF6FD011510BDC0A9 5D1A0D196A9B61DBE09367C9B9FA83272362CEBA85CE237000C5B04CDC70FBBC B7B690846DE439250DEDF2C5AFE0F45452883F92A5D4CFB3E8D025DA36FE9967 60901E3EDD6A3A26842C3CF3C200F8E26D4126FEF0BE7FD044B6FDA5301A4210 EBC0C61C6F06D861A440420CC6547065AD7AC2A88B0423E34349EDBC7BF22F24 971D11291837B8430ED0832A91674C3C9EDB461249DD8A6BC97987D839B6234F D83BA67FB0B4F8726A6A994AAABE4C3FAB3D77702E2DAF629B613168BDB3BED5 2648D7F11D06F144571BF9C64EE32B2A24FA0649201481CA93D04597E3F84720 793FAEC02BAA5A98AE68D39B1C4DCEFB4E1A33E2B05E7CEEBC36371F9C30B0ED E05BC2FEDD793BF956E206F39816D6023C21DBC6904AEE4B01758D6E27BCB8C1 D4917422E25003248C2F7C972F339AC919623FC048B5303C988E1640FEC46F1B B47ADE4C5282744C792611DB212686C54D8A060EB338090A4AF2C9D2C360D1BD B504118AD40C4F5D350F6C36E010C2729DE2A8D70659D86B5929935B38ABF55C 5E7A1E09253F8C075581E6548F36CADC777F60112ED86F383FF7CEEC7F5BE1AE C6F8D3D1B5B3642A79C72BE937CC93322BF1944F7168E3620F5799584866C59F 89120C179ED26B818D8652EC019D0797875ECB85912840279EFCE8C11C516213 2875D5B3C74ED5F9C3403902F5C0C26C7E0F833A1954DD4EF5A73E9B41B3593C BC1A35E95EB63D6CB5B3E637D56FBFFB06934E0500AF96A6FD3CDCC12C483956 B380A3240E710A7A4D84016BDC6DA8F0F9153206FBCCF31F0A075716B48AD8F3 7CC77A1F4A6DF0C2CDFC2394365F0F9F554AA4B067383633EBFCB666B970E372 56EE14FBC9A75A47A8A50F8348C2862E088990DE770B4F4ABC3D9946049CFE59 104B9676DAF98FF8D2B458FEFE53DCEEB15BDD36FC651E02DFDE356E82AD255C AB7D9CB06FE510D146A37A1EFB13588C3A7EEACFFDA994C6C67B259A1D8B165F C6C89D2FB896653CB30831CD67D24E5F2E15451D2078005ECA671BD5DB0D7938 C751B374C262F6BE5F96709D55C90DCDE5560D1119DBC68A2353DC680C37BE9A 6553584232B57ACBE02FC0A325EFC133C0B3E67E9198424C2E9A5A02BC2D7856 5340337B6E73D87B02E128FF3BFB54E839A72B51EC25CF9755C918485B08EBB0 F490B05AEAB9C75573760C981ED5BE118CA95F5BB9139B1176464B5690DBAB8D C8F8999F2CBF3E9FE8BD3A90CDEC8AD1652FB18847460B6F2E6658E7B1F69185 0F8F0C77BE35DA931702EEF75C9178AA55269FE315D58092F7B84D23D5AF806E E629EDC56302D4EA7DFD2204FA1B2B85383A8911DB5BFD29254BB318912C8751 8A8264AF228E4BB366FFDF1F479291E9C5D9B68138883A20FF0BD03BADDD9C93 687543FBE52494956F1043BF37D7EE2CEBED674A3D576DD3F341BD9609CD30F3 D638339C99792F93EF76003D6F1D46A6DDD5BA3E58CB7A3B4FBD09BE096868E0 CBA50C91281DE9CA2B978B466BD082405E94ECD8738873E25E2464FA21CE4D6D 18480C580FDB354255D91761BC79BE021FD90D6154780E94D9FE24A7863008D7 8AA2B3DF97CBB14F740F983CDE6C069F347CF8ACE0394A8D60DD395D14E5F495 9917C246FB63868793E4150FBFE13DF0B20C3E43FB3B6A444483B9AC3960DEA8 EB832757924F1CC5186E9698333F0CD90D50081EB202FEDF41D8D8F3F2B39A8C 0D3AE2287B61E13AF28BC299A4BAE2DDA0C464C4F62595BA6606AD06CFF47083 1F3D6705BD053F49613600A42444C59069CD648B835496CA68D72838B2ACDE98 BC7F2AD389465862712DBBEA504C3D1DA0257746AC6DEB195C70F1D14E564169 F88112ED3EF5CAA96B54D42E27A2EDC45A9A90292CA06E36E88EA9D273C7EFBD 405820C0F78CF11AF220B5BA29B5FD8805899FAAC765BBE3556EFE20AF1AB3EA 9985612C462017E8611A392928B0A3C509B1150ECBF843649C0EABEEB2D01052 8FCEEB2BA51B2D00F60CDCA6655C81B43875275EED61B3088BC9D7A2BE5A6B35 D3FE7874CB519DB9360320F9C3EC34DF927CB94C44AFC9FA95585BB4F29BC229 7DF2914CAC28EA483246BAE744B13AB9782F5A89863DA6723352CAE89ED50460 5D66F4B37B75F4725D2A05B5B1342F11710955851662D97254451BC3221FEE57 602107FB75C52970FB95BB929DCC3FE777527EC4EAF1AE95C38E2FB8341B4C81 9D29B82DB61DCA6DD78561B527E3F81576B795973E59BAE38181DC5C7AAD8155 D657A7EE7101BC5EC3CB7B066A3F6FF38BACD62B9821ED58BFFF7DC8D58A7464 F2E80397F5FF154AA211FF773AFC68DEB5C6EFA023FE8DAFA2C6F9CD839030BB CDAC92EE46BED6E1356FC72B9E260D629B7E8427F75D7B6F9C6592605A2060E1 7B021442C5DF92A1DF75874E7A7916F3767C30D6AD455ADF467EDFEFAB639B0C 97E7C694938D1EAC2B928E4BCCD3BB768DDBFF7B32FED820F7CD3B17E4C9028F F083EE91ED55319A47FB6868C2278C09B881A1AC3EF61D56F7D968E568380419 CB2362CA1D6BA3D3720AD5AD897E6ED2BFC34A9900B2867ABFE0DC4619B1D4CD EBF837C91A17EC9C92BC87D5602DF35A28DB9634506C237D5CD8E66D1A16646C B464BFC1CE717E65D2FAB2CD5360EABC9AF1CA5F838D0BCB954DCA882D87CDF0 0C1FABA0837A0DD1EAD10BA751F8006BFDD24CED4F588F5345E3F1512F4F1444 CFB28143372B2CB06EB1AB5C68126857EA0AA1D1D2F17FE68EEFB32E9746CF89 1AD080F3208ADE2E58BC0DABDC9CE612AAA393FEC64D5D221260BA9C635C9C40 7CFABA7684ABCC372E6CECAD2D699030556887E898BFC8B2CC318687E11AAAD2 47429B8EE27486100608D024BF73AB65451122EBE5B0D3017098DBE1A69D4444 DA7C15C45796B6C1CB157C71BF1AAEE0B6CF3E6A8A00AE7755DC74DE3380EE4D EE369411C751E525EC2956D102EBDFF8209542C86EBE3BB7034465CDC13B9256 5231E100BD7E11484C2BEBE9B05A125193A90564E037C250845E2645F4708155 DE4AC289CE0CF57E6EBBC0CC565A0C2C739E50DEED9D6EE3B7EACB75D24D1D40 929AF771FB7F3B2C644845C5C44F445B374A49D381B58A103E94A348511132C9 1AB535A20D3704285DE5E1B9022D2E470052F6B8ADB22B0B6A996D1A2D7A5AB1 7A43474A1ED25BBF5CF8FA43FDC054EC32DD4B2550B67FF789358F0DA54E3684 4B173A0B371E81B116EF8DDE070DFD66462A3B2F64ED2BCAB0B82703C151CC16 7810D570CA72410D16B2CD9C6E31A3D183E9A14331903C6B6788A6AFD7E41230 307623E28F43645A2049EE1DB9F56ACFDE9A20A329E56FBD40BBDF9597325435 8A40180D99299B7920BD97F19EB49BD169550820BC0B5DA36C1458B3F69670B7 8BD75D06FBF5D1324D911F937888BAC1AB25B7E6B076912C43505472F0D6AC42 61545D9BC2BCC4F454F5ECFF43DB351D36961C512EA79BA0B28D8035464E3C90 83ADBCEEEAFCB99227458267DD6262E1CEF38F9A0D10DA495169FC84997B93CD 8393C6F6B926FC97B8B2281BD9AF8E5FAC312671E47FD3550FAF09D65FFDE65A 01A750AE86938F2C43E124227BC82BCCFAA316B6EB8563E9D926F0DA8842926C 0A3D6B4069A7387E8F254A0D71BBF3B63D0B16974A85DE915DB84A09CA34829D 4DD06B49E7D5CC619BF27ECD0C161E0D2BB36F94116091404C3E68D9F275794C 68EF6FCE92A399A9D291E2D0C9F53CD63632D69E301D19FDBA7FEF1047245B69 4006301B7D8BACC78D23E237792ED921BA60E5FFFA1A79D09BC9D373F750C3C9 32D739758BBCD7602A4BD98D78823EDFBB7D193A26E4B8722EBBA704FA6BD554 B65FA27B6FE743830CE4EE4F71DFC299C5834683D68755779F3459CB6080F745 228EAC9B9396C5D1BA4A4F3DECCE36B091B5EAE7740AC36723995125B42F8579 1FD7E48F4E5EFE77E3A489C85B1AA72614B638397C5902F06447EECBA3C87576 913913A22922DA7C3657CC8F026B0CD58F947F8F1BCBCD169674897D2BEE55FA 5B222487944A1FC201C662A05B908873189AA73DC22D0583FC1DF3237B18D501 E51D2C2200BCFA0087C8AFBFABAF13D19190DAD13A7F29AB72B61F62C275A99B F4BD3CA128225B7FF4D12E014447385B104E5B67A5175FD3082E5DC44ACC491A 642F552F54DA746C7B80A8F60AB6004B43F103B7CDE85D0EE1CF1DAD53F67C2B A8AB5DD2BF3D211753EB221D0921399F85CED64401D11F689475DC39D29314BA F22F593B6F8B777EA528264A0F8101B680303AC313428AB7CED306AAFF36D7D8 A942D0A5D9C6D78A2EFB37428CB14D4FA98D320A5F356F0AC1F90AFBAC2D4A4F 99FA81FB0A2BC25ACAEA897C559DF5DBA424F869A15DBFAA411F81A1C5BAC13D 7C7CBDE5FA506757FF53AE93E6D72B924CC8CBE86A255E27618DBB4EE7798A8B 4EFEBDDA82352B9BA704086795E6F4B9394C7E15D850EF4D5DD3588FD5DC0E57 CF1CBDA2272D590CEA6A16E993261BF5CF60B61E2721C8299624EA91C46A6468 B0996DE7A2AEC58F1C70CDCCCE3C574C2A1BF30A30F77EBDC0649352DE76D16C CCBED3039DA7B7908F4891EF71B9E0EEC923A5EE3C0E4E3A438E77618317AE3C 4E98DAD678B2E2C1DAD107F92864C8D471BB28454914E3FE0443E7C1A900D3C9 5BF56C719A1AA8C2D1CA9CFD6CB14FCC8B2CAEE3AE09F43849AFAE4DA45A019C 2A28C0F70553F76209B497B0C09CE04A79973819641053AAF0A45042ED6B9363 723D1511001D499DA6C36FD33B97583F34B80B21BC6996B87C842FF804D22232 7632476691C693BF8410DC7696D421DA84EEAD543AA43CE43E8516F0988A3703 A11CEA2A7D435A8458905115D411706755FE331ED9603C205CBDCB4451EC5694 E18C8F5FD20E25889EF0E5EC591254AC0E80895EC6A8FD669D6785AC52939ACC 2511197E70D1C08DEE2A8D792EF36735E70D4AAF7D70EB084F8C6A7DF1E9F287 18F9AED63088C5663CCB12321EA6D2FA16A646913A8010E650A025CF2BB9407E DEE225E85995D0625BF9A60CC9D21639D2C9B44EF31AD3421B85F871784700C9 EBFCA6C7F8D4528D93696F97A7E4398C549702B46E1CD15D006835C91C9EC9CF 6E92AF539036ACF0AF7358752ED114D544B26168BCFCB49CA56FBEDFE9E020EC 6006DE9183D25DB101473DC8BEAE16D2D4F6EBF4D338CC0D213329FB5EFBC896 5BA06F738FBB2474648E3A06F1F91DCA148204423D9CD70F541A6A8BD897AC6B 60FDB7A3923412B506D2F6E0283E272A344434A5C28BC9C53505AFDE4C0F75E9 564AFB8BF8C9035E6FCE398A00AA98F600E569A9E906B115C0C51BD0EC73AE7D 51E83B72F89A25DCC5AD2902C13AB9624D613A62536B88F94AA2E1A8BA6EB5BB 743EDDD85A9C9E2255DF9778A9BB02B97865F2CEACF4063F1B86C74BC9A75E15 E34F6D223DC9A53052A23C1CBD20A889DAC547DB28ABF75A2021EAB3F2E87079 36CF4AB6864DDB79526520C63B4F5FE3A48ECD364C2EA07207164D97CBC4D9CF B32C521A206C23F238AF0D509EF4EBDA8BA8867047B4B730DCA81126C136C338 5D9D0B200154CA310B0D187D7133AFA8039577EDF1CEE93093D35DF734A6A329 9A2D63FD29D9A5D4849929BB2CBD48050424CBC2076635C2872B8CA1EAFCB3CD 85DCC2A8BAC2C0DD1EF15A7E16C3455491669446C91CB28A8B816857E6C2BF25 856E41C4E50DDC93C5B60E2203C050EB544A79E392E954CA292C82BBC20CA008 65892DFB9CAE9395244FC16B66A62FB6E6D9622B00ADAC959A3BB0AB7BEB9E89 C33526A56B85AE2A6DEF718D9CF8B15C1D62241B41C45D1D32F183E223535FA7 FFCA07860C7C0CFF42A4409031592949D1A05AE23C3E75549C17192B6D97086F A098183C68B118311E192127426814E1118719F230D83D859C094FC42049CBB7 C7382641E30761AD687A6049020456EE225BC34BE2B74939432D0A1BA04B7715 E0454B9B59913BAEE121D9DDB66457EBF3B9294CDCD9 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /UniqueID 5000769 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 45 /hyphen put dup 47 /slash put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 82 /R put dup 84 /T put dup 86 /V put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 121 /y put dup 122 /z put dup 123 /endash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFD24DCEE2BCDDC10690C4BBD7C09503FEE760A8C80ABA4CB4F2E137B9D E84C2A7C62046C9466BF2240E2A71CD2B05928AE68403AC7D2971DF67836191E EE8E5518B94CAB77651C1EA94240333902BD6E97FBB8D37CA8CF48FBF19FD247 FF5C6B8AB3C0920302DECDF87278C13FCFF6B78E129A647BE595260BB70CE4F5 417C2D5F7F1E767C37A07A70675028FCAF8907C43D36DCE606D8D89FAE426033 708CF14692804D19A2582702B0E297D69FF9B3AD38AF0802C42384F56B64ED2E 391F887A1B89D59AA30F3AEB8463224046242061441C3F50F817A997CBFCBBE4 48DBDFB624A248F2B3FB6C04D627F9CEBC040E43C59637634A542E7F9EDDD228 FEA159A40DE56AB5261F0667CED0D79F987D963CA8B2227DE9E6CD51F7EC6136 692337348E1E82DCD3864B113D6541913936C4D91A229583538B7D9F33910E66 4401924B9BAA85F6D8724A1B8222C6F188F8C8790762CC7D2F2B08DE3505BE4E 30E12AECD48688868CA0DFC6B4FE349CE21EAF04D3C4E5F9C7B68C529DFFA8A1 F7AF588EFF713A233704F64BEF7AF6FB37DFB9934D7876C663B79E1F8AE37057 DE0BC5B2799B4A6B62A9C9BBCF1FC02739AE04AAAB1492482AE66546A605B0A8 62824BEF1647C96DB158B12AECFAF8C4FCED95141F702410C9F1AA05F3C0037F 2AEC5487664558F918E3FF1B51425D70EEAC41011F6725C5385A08C7A0E73203 739A8BC315770619FB3850E53A9C12129CEEF0C7033B87072A685E1C85D6E591 5CEC2942FF48478437C1C412D244CF986BF72324CBC8EFDF55B13F42939EDDA1 2D79250E7C9316BAC08E14E2EFA77A7755E5E3F772E76E43EE8401FFE8439679 0F7F5201CC03857E14E16BFE960F3F5F2CB0722E5F81C4A4C9AEA6FA2E4508B1 9E871CE623A4368B92AFBAA2AB3CE8F848CB49F50B63DC054EAAB23DF877ED8A 6FDD5D422FB7C073FBCA0B3245587BEAAED2AB1DF5FD0EAA957E62610FDFE0BC 469AFF35B1A7DD235538945D9B3D431444B29485CF5E6018ABFC6EB1940762E3 49633C4525C10B76DD5151C5375FD372ED28611255C5449C4D7922B92F360BF3 E0ABB18BF5466BE71EE0616C40F3A6821B7F763DE8DF5E680C74D422E00A0C63 6308FD402A44D4302A1F069D0C7CE42D9AA97254902D7DB8FB28A567E4F1F620 47A9972D7761AA5581CF8198A6DBC75A58EC526CE089A5FF529734ABEFDA75D9 26FDF8EFDB13EB8BCA4B1B0EB100B08BCC6866A5F32EDC9FE15EDA3F14BFCD5A 45076B1A03823DB4B734E7CACC45356C4ED03118083E8FBBC484915EE62C2F6E 64ED7D9FD6724EE6630AA10AABE01B06A9036102CE4EE1B71A132736D1AD88C5 3F72FAA124A90E53FE0EA7969C280BE95D5A42D4C2E1D67C98B435F11A2692D4 F01AEE9092F20AD92233B47DB3C06916D89EC0197D42CA9634F3D080CDB579A2 FC412C6D5EBE52947199EEDBEA92F8D19D327505EBFAC127AE6978D255E1F561 DDDB040E4D9A0D4A72F0E502FE77619FD7661DAB09E7DA5DF97D448F3FC60219 8FFBB7A6539878F2A3F69C75F1AA82ADB174C11B7B8C2F63683655E7F5B1E31C 6BB470993AC90579E422CF2BF19203F00C13F1CABFE843C747C544FA94CE070F E889A1765D71455FE049018F3E84AF0F19C07F03B9DA1AC74F4D0B0491E5D192 DBF12A5DF4406F492FF22E29E518468FDA859C78D573AD206D0AD9C98D7AF768 B0F4286D5861DB380687BDA842E8329B9BDC4F45DB99C209C4EB9C3F02F939C4 CCAA5AFA66C9F7408087A7D34F03FF9FDB9BF909C0279C9BC29F59F18E8D6701 11B02B70CCEEC859261FD81BD86B0E398A95B6043E0F0134F97B14847B8F0B69 87D13AFB28426374ADC4E9D64E8B5B070C33BC5ED978EB31B8E7ECB5B20EBAC9 7468651919A494DF5FC3821B9AAB0AA7B6B384216B774B44D3C1EA05D604DEA4 330E5C1AD52A890925CEB62B2F322DD236567666D6388BC72E5537597F96E343 DAEEB356DFF9B3A826641854B2D8E30BFE0CFC6B4B27BBF15C55AC95026C947B 6AD6B51DBC3B579EC35F7F38C9A8938D40041D5B1EF69C7C2F8AA0719F7714BF 9FE2B87972DE9566CD3192683974BD1EB2374992009A28744B32C0D4BB90034C 9739AB9D5179E637D61A005F695E9680FF5110E7C8552588BEBD48CCBBA82354 E89165C25A42EEE6D1BBB8454DCCF46E668EAB80D301FA1391E9842BEE345DA6 A5DD59D868C8F663872B23B73BF80E0D8A00C18FB16379B6FFDDD552E4A48714 6DE123E2C374BDB4D83184971E458BBBC2877B0BC29A6076102A5B27B0C759C8 1E6F8773E0623AD67754E63D39DB81994815E669723BBAC918092C9E0C452150 E609C212EC80C2560B9C675AF1AA86274D2D6CC9DE1175CFE46D18A7A5B2F63E 24C260B38B46939BCC63777843C62E2E3CB48F3ECF3A6D403D9FC6A35882A8E5 D82876FDCAD231563465C2512B9CCAFAB7A7F404F4763151CB7F4D4444B99E46 7A3013C00F2162A8FA811B9F07032361A03AF6D29785DBCCBC67C2AC17638689 E052EBBFDA68E1C7BD535ACFF8E06CE35EB82B01B06A29556B5A597992951F34 EB7B7A79BA23F34730C65A687788B7884F3902BF3F40B146D9DE5906B894B35A E080B3F1D7B19FD29466B3E61EC1E3B1129EBF8BA238D1E4935E99FC5F0E80A5 95364BCEEDE6AB9E9C2BD45611C8B1218CC0A3CA7034A50E8451164A88A75C4C 6D325F60AE3D43E04691EAF6B5F8BBB5E9D0BB72623EC64B9E5C6F3F101FFA4A E7820C5AE33F5660B84DFF63D723281308542A22BB40D553BCFF6420685674DF 40D01D9A0C9774C988FBB2FAA0AC2799F296F01AE8EF5DEE952032C44EF016CB CD79CD287BEF402C4E115E4C997BCFE7D1D35A6648BDF370CEEF7E718BA98DD6 CD3CFF8CD3A0E4C5CD17C2FCAC5EEAE834091921F338159C2BD9068159366466 208184CFD8DC8B698E9257CB36EC8753832B365EF86DD14FF44C88DBEA46E964 EA6A9BA080BD7CF0E0CC7C5E32236244002127045DC81A58335C81FBF71244EA 2F2392272D760F3F96FE47C9399E3DFA2E966763ABCB0407D46BD32E5D18AA37 24E2CF901FD556D061D3CAFC2B972DA3CC8CE0724B476C950C7C5DB112DB232C F42BFD5FC0F49B300A23A548B562210EDF3004092AC13AE8E45B6F719CC63559 E1B0C6ED738FABEE92C3063B767E6C126C54DC8B03BA341900FAB5DAA2F79EB2 B2F2C62C1BD04FA9DBE7F2C15336D7B6D113C2FAF4EC63A367F3BCC2B21E0018 77649385CBBD742C32ED934A0E724F1A1F9D2D7DDFABA65FBD82CEC1C97B589A CBC9BE7B21469A5C77FAEF4E2C5217FEB9D967140E9C017FC4007D226BF2C2E3 4BF1B67F46CFF86C23F3C19EB36042C92AED351346B6320DE83A6B43FF03E011 BE5E2D678F561A0C280EA88FEA95168E5A5BCDE11E70A3AB8091958CFE359A43 B4E8C355C74DDAEB3DBCCD60A6BC0C695C181AC0D50A04BB28DF9108CD50DAE3 3A9DE29699723C058563E1E7056BAB2416C5CA8809C394033B8ACC3BA1B1BDB9 DBB13C5A6692FDA7B1CAFFD357A8454C8C426C4F6B08786B31A8F801266D1854 6AFC9809ECB4A7C747BC8D566006C21A333DBAEB46F5CE522E94CAF47B43B311 0B980AC9ABA6EEA94D277996C8594B700B7220D5E2434A24E6726857C4E560B2 A92FC610825F46CB1B0D863DE27BE3150D036EF920DEF7EC998C59CE8BF5028B E610015F659C5156C435D1B0FCCB11854622AE4CA048E572E9D4979E90C1906B 9F626DD5D4BAA310463724BA2A723D3F1EE8FF73848A07616AC88934370D12F1 CCF49791598960CE93AD3FBF04AF9924B9914C5ED023F95E71A2A3C2F9C5C2A6 16875461EFAFF725C74573C904ADFDA3B2756284A48BC67EAADF68125F2FDE3F A018AC6CE37E14CE0C8A9A29B98C08DE78C4DC88F913996B885E1F483F6A15F3 30C5A6FFA861942C14276BBAA09107EC30DA940A723DB67376ABBABDF1F60AD6 3FE70688ECD089D935F524EBB670E046B97F76E8AAA8D23CF5F5C35ADB236687 07EF3BD107829ABFAC56372294A7ABB98A5D4359E63EC1B719E68B156AD6FD01 D2ED80E8FA03A05C57FAA891B5434CCD291FE8377077A6B277F0FD49FF5486FE 1D4C7ABEC144933A9744FB339933F336EAE2759E95CDBAA5252EE41AA822D567 E3AC2D7C2CEEDF5D3BB4E93F844244DE44293607E8F3E5C6A42602A9A6C8C8B7 8F745715B6DF68538B4F5CB6DA9FA3407D23DE9C12DEAF7219943AE405EB348C 7F2AC3FAA4A72107C77F39ECE976BB334803837DEE55F21E60D3FD8705B4C79C 2F8DF6FE9AD48C3ED2897EFB9CE027CB1D84D044163EC6D78F5DFC4129002CB4 58C6799FBAA54224CF61D042993AE76503B2D6ECA8B6528F6FF4FFBE7D9A882D 77395AA2D85BC7137722367F3EE7AB1174B9AA0F134D94FEDE0DF1DBD36B9BA8 8F6F42437E68C5C452C78469A6AD12B1F8DB0A816E953214D9A72058C805C157 51D39598C7A997108F42AA9E7775E07129F08AA02D3E2126E5A0EB43D320873A E78DAB112D3B5FF44EDA2680473E9FA68FF991410ABA2992EFDDBC67F1AF8AD6 46EC3C0E5C70EF9824D626D03B366BFED998AAF65C5E6C4051FE1CB230CEF405 5C97E8A071F1E39572E8B929F1F12408120C9E5D167C213D1CC08406BBC7E340 B6EB0BBC21A6E079C93A8807F83B842C43F82C2934A003443968F3AB77E6D6E9 CDBAD929BA9BDB3E151B8FD9603CB11A6ED0E78E38F9F14C2160261390B297A5 0BCAD49B59B54AAECE3D1A559D6283C1C8E98219ECD5311E0E3AD613CF8B208E F78A0922408317876A4984CD499083306108635494AD1225AB3C4A0DC434FF3D E141A9F98348DCB5EE1DCD858CA32612349E3415B7338FF1836821908CB32F31 57CFEA5B1A8C1AB5894577FA8BD9BF5715190F397B5538E3EB23121A088ED33D FE1CFBD99D125E0246445B28F9DE61A528357F875E45D5EDD30C2B244ECB2975 DFABF88C46533789DC8971E37722435843382F98050337389783FE493F789F8A 41647258DA79844EC2E724F2F9C9CDFC2B1C1398F3999611188DD5650B3F3443 B850ADC9DE0BB2BFCA2C46B1CEF560C87C8DD51183BBC59C9B3490D417D2E39A F7ADE4131FA97DB440F45FC2E607328327A795D6B3E1729E07550E8612D0EA1D FF52AB9A2F7B76FB2E33376A5D4312476671018BBB9F2FB5D2914DDFB05CF03B F4EB48DE98A7B50DFF155A8B7D6ADF510F7B26F44B899CC41BC153711E81E7C1 DC470BF55BC7EA478E393E533F23E7F111AC90675A692C21D0075FD99883A28E B3377D67C3E8EA30919CDBD9230B010E2791FA8BFE9BE8055CAC4F7D98BC3647 9C3051F34C2AB95220F15FF87E06D290BEE0855554EE11D93FE10E1CECF4CE04 56B9536BF5A24F141281C328F5281BE260F87C49EC2582BB210F3422521908E4 8B2B603B1FB77CE7E1F4E41E9777B1E4F1C4C6F75A84A9CC0D628453595A00CB 434BC97487C8F2DCF613A5B55E11F57A20D82663F1FB8DC7D83C74E3B4D51949 007E9AB4EA5F1DA006925F7B514A7E56B54347EF3D000A1A23A7F4E1C232F307 B56A476EB6DBF0595FC7031938E3E86EDA3BA050F9D1AD453B86FEB8BAA22C78 B829C60502A964893A4F7E03AAA3EEC56175658939C1361DD89A0B9E95BD7D49 5441F4792ADC1AB28756D32CB9B85151CACB70AA24A28B3CB3107932378823D8 661E00B8774A53E93818D18C80BB9CC7C0F9341B1C11AC4AC5E0A5AE083ED041 6BDAF1F7456ADBF84DA39A287FAFBF3E4CD03F74D32261D62B420F3A188F2EC3 E688586D7384E5915352D82DEF737FC117E77CBB5489A90C27BC4B1DA01B2EB7 FBD3EE6B09197FFC31881ACB40E10C4485540A3E9709E214E70F231F165883E1 D2DD33E5F85CF47698BBD98E5C97E8D106B53BA63598890D8692C87C0E19E6DC 48B6B96FA0263CE26701A64FC09641B544542F1EE9FE4DB06039297C717AB04D D118DF1C55F1050CFE813522C00AF54FB9C51EC3A19C530A3DE1ECE66174D8B5 BE98473E32F20A39B006A81AAD23F0B92814F1B05A929768B983C839E8E8F7DA 7A488007C6ACC4F2CDE1C22E8B1B10CB4F2A04255FC0F0A9EFD0B8DCAA50A86A 5456A02937971BCD20D43AF72DD1968668179A321D30BE7C35F48AFA1EBB330A B15FB5919DBECE3CF400AF4F50F09B3C809C97E6C264D3548CE96352EB4D9E61 58C16611C995E6193661D83610B23124FDCA1FD21A28D8A08526FF074F50E811 FE15519337D34EE142649F2818E61B50980B6FC9727A8F6488E2432EC0AD8EBC 9C1A9774A334CD2D2206519D53503BD7C290FC443499CC821379364FE9473C1E F26C274836B041ECD617AD88FF7B1BCEAC3A844FB1CD989E83DA372B97AE22D1 433D561E7555D191EC38B6393B26662CADB4790D7F0DC0436679914DF22EF422 7B73EC697AD00C81E7E10AEC3C69F6DCE6D3D1A6A8C402A4D9CEF9A5D5C19746 2E1C6273BD1C6BAA212C23239223CCF580A309EE6386180F113767AE8AA388A8 70B30C44D7798D733167A9BE7028823292E374F77CEC4485D31D181B5A5122EA 23E38852D765005A655564B845E90749BD6B8F1C48DEF82F206EB4438C9B1AE8 0AD6EBE7122DDBE35EED48E2FA64793F21CCA25AC41396ADA3FE00CE97405C9F 9353BC232F7638D45C645DEDF2FE82F2801ADD70A99527C6F01AB01ECB77CC77 9D733F531FF66181D72F9A3E06CDB03CA44F7E81901855B3EC071D13CDE24C00 8A984EDB123BB49E2F81B4407FCAF0B014600AAE7AF106A5C7AE081A7C1B490B 917035BC7B76472FF92C8515C5E1704A0294D3547784FA28DFB7ABF1A3C5BE4F F41C99560D73570AF30B0E7267CEB0CE320717A6CBA5CCE176EED51D0E26C673 C746C0E4E1681D698E0628E0F4B52CBA75DB0B5AFA37C6FCA61FBBDF93BB9F75 F41065BCB57954C4CBFBE13F0BCEFF0A717ED4EB208212711D33D7FE10F11A29 8E26490DEAE35553EE5DAAED6E0D0D27DE91EC8CAE93E224CC8CECB13EFA58D5 7265D2C046C800233946891C2D5A3AF58EC5B82890E6DCFDF9FE5301D157D9EB D023CC382E091ED29E6D24EE9443143D66A00B235E10EF4AE27998A452F614BF CF39C8020B773C6808377E1CCDFE8A10C95417EAA097CB4A3ED5CA073D118536 044BCE90CA88CCC20F7E4BBFAD79C757B310265345593D88A8E31035354BEFAB CBD577427B0F3B0FB842123DDD53AC4AE9A7F0C960D630D0BFDA091A0383F51A E61C595687FBE3CC7377B494723BB3D427A82AFA37AF4EFFD6F866E23AA1833D 2A527F7FA01C661CC91AC736247FC2585616AE48FD769BD550C2B3F51E96B0BC 9415572CAD967FEFC2A680C7A7E4FA31F145A703AB4EFED3FE76BAC059B92CAF C7506A8F35B36BA21DAD13B87B38BB6918C855981201E9D41877F6C38FDC6A03 087101799B7A7A071AE33B47BD37EF7A8CEABB00366FF624A10BEB3CE7FD47A8 7C73BCD5905410CC3BA978881FE51C5A5C9A3A22537116DCF6A6692ACB492E55 4FC69975051A748F74C50F193362F74340A4ED472D88782E46518E37F25CCE3B 3DACA658AA510F7C12F9E53A15B1F2C29ADC4453E40F9B49B82F4B77F90283EE CA9E48D308B585038F9C03C638498D26F312E8B6866106DFC145611043A75DB9 64B7D96DFDBCE6CE302C71B2FDC19BA63D611FBE0B9D01F57B0B3EFB346F92CC 3F698FE35F6A8CE520AD9222566610778E6890A899C89DEE636267A1A989C185 06107D6F00F4ACEB1CCACC4F19E3179C158DA907AE533E505BB90992DAA673D7 CEBB198A644011C6FC6AC44B78A0FD90966562DD5A1FAA3B8784A3D0511BB351 845FE602FAE8F5F752A36C0165467C2F08B047DC6D4D086B6FDC6211BF9ED573 F472564FF2F069472D4ED034F7CF825F3D7A6F1215D7704787C5B386C3147C31 F917E589E431AE2C3054D9C1FF093D5E94FE5261CA4DB79762053988CBF75095 5760F4D8AC8A1765B1A13413B6592E1FC306899AF4502E7FE9B28056F763BC35 893470BA1B3DD881E715787DBA93E486BAA2508118657BAA56A80B5C2CDFA90A EF9D3C2333CCFF488DD8A82CD70C0D1C8ACAEDEC57268B9B755139018A544578 16DCCD1BC5D011CE0B15A8556C14C6F3063E18E0BDA5307F46BE06B737E4ACE9 922F08E447599828817B68B14CBC99CCFAC064156C0A12849D8AF13FD56066E4 24D4B6794FBBBBCFD20BBD36E5DD1DFEA8C3F07B2B45D6E7D703088F91DABA1D 843C0BEC348E9B1F6FEA71121D4A8AE7686D956D82420BD331EE81B537E8F9D1 225C56BAA9E63E27397BA86FB9AE46A9438F090B8B10FBD9A64B73871BE36166 D039317D89B2C900D0F5A896B3643F4A0498D2693B7FD5AE6A975C18E8DF5666 038FFAA544BF68794F2338637206A7941CF073043C97398902EF6BF3CFCD4361 EAF231169C10B5D779B25C656A4C3598BD137D894274AF7264EEED3E2CD7E146 E323408CE4B1BC8070F81998E4E8843F84B187F90BEE91332AC34B685E523318 9AA32DECE940B4D4EC540B49FF2675357249029A176925BF41C0CA2E927E773B 4E80F8ABCB8DBD89944E45F457A9A4A232A2AECDD736EB5588BB298B52B68307 795014208619E3A715B470BE73D3B1F0B898427954F2369A6193E0C5E91AA437 951789C2423095CD40E20EFDD4D13C1294A0FBFB4ADAD535C2A7661D5AFAB9B7 1788646707A4F631267ECE7A6E2F982AA79C1E924B62C4E386722E1605E5F306 2A7D01C2F5BF32E3D155CDD856370EDE0D51312FA02222F17F84D3685EF3FF49 1E941247C9B11F5F6F4827862B25894CF4A599DC98B13E7F11B9527649DAFAE5 A843A33611C1BC781AC5BF449CA64DE0C9378360DEF1645295DDB18310762052 3F8C394B4D9A08EDC4158EAD5801CCCA6711937F6CED2344ED9E9938D1DAE388 BFDB91FA8284F153304D0BF96579B71B362F0F3E2B626130B87EB56E114D9051 28ACB40428CDF06EDB7DF75C81E151AF798BE22AEE9B1BD7098FBEA7554A3E6F 84367E93C53FDB6CEA145D13BA30184215A9A2DE31D3B59C2E1C6F6647B46E33 03BD2DC57CA1C2951FD62957C1F57C77709FCAD6A8C03A492FE73F13A2AD866D 6929DD2EA1398C00374F5A54C4B1349B1EDC972FC5770ABB8365359152D90F20 FD3482303D50360D1B818F37C5E9C0734EB7F13D48E3A36701A4B575A9844B4D 4A2C12EEE68C07969175EED766885F8E3F12950EF4A8FC2D71446ED509751A3E A24ADAD3B22CA71F0D1836DD358380501499E414658E9C8E217D62474D9396F5 2BCA6D2019D26C2BEFB5B48D05BA012B554AC9870216C14ED30AEBBE27212192 7F746F3C65AFCA94D0E8E9CEC354DB6831F6F1644EE6534E120D5C3C5E08ADE1 BD1852490AA3609BAC8B19B93D6DBA518C209842F71D12FB85B61D53B4CC08F7 00FA1758B7B8CA463BB40EA2CC0C39F3D55809639622BD4197C4FCCD3D86D252 4685EF783F0ADCBBD10FFEE636AFD81D8F519216AA65894F8A6B4988C4054140 7E9C2AE6A7F0A59117FBCDC5DE21EB5DD85782522B88B1E6D34E84C65AF8E73F D3519C5D8A787448AE30E5F1B299AF47C2ADF25CC5A43C75DA942C46C3399AD2 82495C1B0C48CFBC6CC65627C87DC742044F10F593989B19E0A12EB8E98AFAB8 6CAE639F70D381194CC6646844920E2B365A2F26218DE4D414B7A75B2452A44F 4390C14392C903963F437AC552343530DE740F5D063566FB455CE15095ABF55D 303292F4D302C3464698042AB4E65AD6F62DFEEB3839773359E2D8E7819D7CB0 7835B71934581D227D4C104907CC8497D683A7B06321C001541D80CB9D345A6B 9E32348310D7DDCBA46C89CF21EF15E4B58D4F4F40F6130C31A8A86CC22177BD 100644C9AEAB1228D745728DE956E10C37C4BFFA2DA0402739A65DDFEDB48E51 3F506C47151D23294B177767FA7F37CB35EBC865584819C723651DF9B72C5021 5113C05321AB5B3C8A312FF68C34182FE62944CE7AAEC31804F3F1F49EA735AD 713914450511761D483C02590354AABB884C9406531E92DDD8623C7C9D40DC85 C201CCE3AD54DF782ABAA2207E91270B8FBC6BC47F9C9D933925233865F4B535 E2216433150DE556F2167312DAF4D8B97BE9B675E63BB928977EEAD44F4A2EB0 D4FCA8DD6A8A62981EE24B3C1046651DA27FE5FE298779C54144D873DE81FA15 AFE31ABE1082855A371659E1D2FD6754D8F0EA74C9AFE7A5C944848DFE875A98 771643ABB0B510FD9011C2B42E6A31B705C491D8C4DC0D54ED782AA62E25E5A8 2885C74200639A87F529659519AAC21F5BA2F3E8C3F934CD54F819713C5795B4 B3BCA4CFFADF01522ECAEDBCBF629C397BFB1C3B23E69631DEEA8D6740AB3840 100E73A7B528AC42CA8D4C6E6AF2DD97D00057DFEBD0550052CEF84294AA11CF CAC7EAC8C0664EEEA631055A67D144D58BCC7216472E3B9A1DA34517466F92FD B2F65B7F74E7788EB76FC44CD1E6A14A34DE9F8BCDDCF0DCE2BEA9333679566C 90AC6594C6B8BFE3D2D6484A142A67318855A9F92124B8D69B96729832160D14 0AC8AF9E4EAEF56BF317BDEDD23F9D0AABEA5145DCC4F219E1CD45B81CB5EAA2 62E6C7AE3BB3AA96B90AF4AFD2D54C2804FA905188A9821AF6A83A538DA39825 EEC3D2CCF02713BC2568520F69638E2B614EBA7FD210346982249E8C91C9E74E 8AD59153059F225DF775D54F433CF5CEE96445B7157164F09CF3A99BC5C060D3 BCAB51F44690311242EE8A94CF4CCD01933C3D0E8EB3CE6EC4A211A822C18087 DD31915F5FD66A22AFAAC18A1CEF240677571C65CEE829F04E6808861DEB93D9 9A0333B9A23C34B8BF85D16EF7563F2DD3CA2B7B8A8344777E9B3F15648471B5 C35BCE44B62B8892B7AA2B7E21D2751D07F41AB80E578D97990CA179732AFB92 326AFD5515F000CC4027F006DB1A66CE5627EB3DB588EF8A3B7F3F79E09D6DFC 8D6F2BB14FDDFCE24E2D808EEAB0A3B0B8DD76149E7AA314A232C6D660EA48FD 3749195491888CACE338D18E1217E070EB8EBD6F653493213A249C7D177155B9 B83AD76BEA3B42BB4C35E6A6A3C319573CB5A71B35FFE43384E962281A2BCBA5 F526D9A521F387CDE6B9C64E6B7166B269B174B95FE9E1A30FE47A219B4F4559 772672F473ED8E3F7AF554E298E864BD11257E8AD8808E03422730875720622B A2C698F6BEB927BF1ECEAAA5C555C8B083EE9D4CA00346BF13254EB4C6F0328E F166CBDD37266E0A82BDFB56C130AA662E7D8DC30100362B3261CBBBFA93D2D5 ECA280DBFB558A885916D0F1A0C3C2A76B4075224661E4F4FFCFAA4A028DF758 0515B37AE745869CBBBD4968E71C5C3E010B374CB45A84872542AFE54BDC0536 78E92FFD6DD252564A5AE9D6646EE82AF2EB0F1FA58507A99D8F368376665573 29E09C808492EB1BAAAE292328D30609DB080AF944CDF0D97531 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.0: CMCSC10 003.002 %%Title: CMCSC10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMCSC10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup /UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMCSC10 def /FontBBox {14 -250 1077 750 }readonly def /UniqueID 5087402 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMCSC10.) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 43 /plus put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 105 /i put dup 109 /m put dup 110 /n put dup 111 /o put dup 114 /r put dup 116 /t put dup 117 /u put dup 118 /v put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2 048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31 CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2 0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3 D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D 567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3 DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF 435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E 2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148 D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1 DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70 8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C 9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E 1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49 59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402 A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA 90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E 3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB 3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41 736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198 E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94 17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E 1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085 35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367 3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1 5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245 658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD 8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9 D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7 606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C 64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8 F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00 C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7 072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3 7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317 1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B 5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3 2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06 491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07 8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F 9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568 4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781 AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E 36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA 88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85 5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3 5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8 AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152 7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0 CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8 E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF 53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9 FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A 94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4 E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC 4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428 F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4 5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460 7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2 361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579 5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7 83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F 8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3 F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327 EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15 B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4 8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE 07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE 8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4 12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207 A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29 0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24 3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128 2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037 215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720 70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5 37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A 0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F 7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8 9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5 28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A 962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3 3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC 3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5 15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8 DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF 72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512 D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588 462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026 465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607 6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7 8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20 53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34 E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605 8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395 CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064 46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7 391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015 55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643 0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1 0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8 3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A 22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384 5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0 20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3 B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B 7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9 B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201 213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B 57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082 9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271 C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F 54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051 1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90 7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287 72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC 5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2 7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901 EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4 62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1 0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A 94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6 5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E 74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88 159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5 2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143 40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977 CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A 1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A 7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5 D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614 37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874 357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68 6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435 6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53 686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8 EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6 3088F8D19CF2364A329162D39E166AC728B4C427EF3BEBA94B18ABD2C5585D05 475C9649C7ABC6136B4E55255B4FD5E8A641D1D2DF1E5081EFB6EBBD8D0F191F 7DB3788BD9FF8EB017E3440C96BE042568C0C11ABEE6BDE4CDE434EB44785CFC 43F1AF5FF465AF2FDDEBA8A2421C966210F711E747B22C5E73B38B7279F9D195 028CE439E1D5137F787D92AE0F39E206C98EA23DC05356642D5BEFFB637A71FB 621AD89DE7AA6758894D99C4BE9E6EE4B6BFD9AF997F71E7447D6C9B54BF55FB FEC09764D4E20C2D01859044DDF7D762EDD813635B11510A60DC90CE68E798A9 F7DBEEB25C16F0A20E27F572CFDD40A9F9A0D2322C8B3CC97D07BD47DE9446CC D82486C4477DAB3BA8F7CC3F6FFB4EA9FD20CE0FA2FCBB6A31319B517B516797 5510EE20E487556F5DAFB420BF5A471FFC465B8D40FA63BA53CD71AC8A5ED111 216E72838A719C5B27C4DBBE2D64FA7CAE823A3A0A97C5B150666D08C5DB9D0C 68D46B370733A7BFDB43B4394117F78BB283A307689462778C95AD78B2762993 FEC78B20D1010950FBB8524B3CB356DA2D6606A7F26411514B7C37637A71B198 9124B8E9068AB645468E1E5127E20D53D7C4DFCC1122E30676F2EB9B0A7DA591 36FC044E070CD4C3AF4C37E119AAE72230D93214D4010BD57519A4DB700AA3B6 0786617D09657CA419E78D0028624879110360909579C07C6DEF23C7AA10E1DE 2CADAEE76E15C060808AD37F25F8BE9DF14AD16A7343CC962542E2E3021A0C09 E402245B505C1F40261CB9FF810C7FC4C80E6E8AFA207DE559501DC3913D3D3C C80447CDB8791CBA79517900C91A644DE308F3BDC5F9A3673233693E1C60025C FDAB645050AAE5E6BADC7AD9262D4A4382F82134AFD1F13969A433BA3510A03D 33FE49FED460A102145C17788E5055433A8F2A68AD49A2B7AABDD3FE636FC0CE 1ACCEC44F0E6CA5188E756D47693FB2483EC06836E9057CB466554EDBA4A39EF 049C71527B645C2D663A60236C88911642BDC31B9583630E00622BAB085DCD07 69D3C8603A694271A925E9463DEC6B1A93722A5AD98607B783C133BD081DEF94 1FF6403DB744F750667EC3DC9DDC840A87A4BD358E0606681B00481C84A55F24 BDC0AF90BF9A66CF76E5F1E59715CD38D63D347DC81D12E6151C58126D0E3999 73AF97BF12BE113FD00A6D0D69B20238C8994277ADC9B44841EA7F65D44137C8 16A58E8E6DC2F13349D602DA5F52936DE18B4845B724F6818B9774DF551BDD2D 998A24A10C71E0A5B708AB55D43CAF13B8807933EBB1BCE3AEF3C3493D93BAD3 F431816B914399DE63F5AA4805E3D4B80F613D4B8322CB9FEF3864CCFD546509 C16AFE9F22FB63191EB6697E3C04FACC44E95F30EDB00FBD9B476CCF3B9489AF 013DBA2A20121B3862217D9BE47A5332D3D80C2293F669FFA6FC07BB13F4CD98 69A055B51FDF10F151F057BA7922F93930963FE9B0970E57DFAD11B5A47A17E2 0F4192C0FB40353B620785206F2AB4CD42A861CC14130E0BC7AAA50AFACC1F39 E1F6E1EC6144CDBF336FABFD3EC5B81120C27BD8949DA6453A2953712B051B5D F2BF08747DFCCFBEE97EBD9B3631C2B94F67F3CC8D0E544464294A1C509A5A29 7995058F5A982A6325FB50A799F40CB08ED790399F066263449EB1708B6E6850 5E83004680E3DF7A4485D7DD874684A2C74DB1A8B4E4CF5E04009D20A3DA89A4 6193BDF5F29555C00355D1085FB62E778ABEAF281F0C22942AAEC23B0849C6E6 35E7BA895F6DC0E0D8D78CDA453FE179563371821279CCF4EE3796E249E401DC 0157DC61D0631DE110333541B416254D34D2F4D05E9BD128DE23736647DA222C 064C4EFBFC108BE520F1F714BEABEF15614B20E1AE7129784B8F012E7D5FE5F3 B724309A8853889C2467907C9615638C06CE1ADFCFABE4602574113DE8176F4F 2DB2E81B83199E4CC1B3CF5D91B0782C4350E114F11E8C4B0196C7785F4DB1E7 F1456F77844FC274384BC849C6AB24682F02A949332FA0EBD88520C83A67B0D5 CFE70692E4D216C4B2FB3A752618969F8FBD5BC63F51C3A94FFCEFC1C92E55DC E682450206F3C5312AAE8B3D76A5BFDAE70EFDFA6775EA36BB66C11598B3A0A4 4A45DA3BD393DEA84E080DE882432D6FB3EE16D0AEDCE0E50FEC9AE0BFD859A3 3C116ED94981043305E9B7DC23C721EDBBA3C0E0B779C2631742F9C7F4A68691 EB193A8C6771364CC604446AC22F0EAFC5BB81DC4B40F4400B4EA6DC25966A1A 869941646C74EFA72AC072B658621117FAFC5EB96354B684BCFD28D7A5BABD8D 4572863D936D2B6BE6099459544684A072465613180CB446117F91803DF7DBB0 3CC17207334822F5233FE5DBB5357867363307BEAD3C0B37B3243F6143D5B23B CD420831915FB3103C97BC6F2DDAA00F9C0AAF22CCF3A7D8BD30B07CDC3CE1F7 08631F402356AAF87019C6F835133EEED25E63058A10C602F48B3BCFE3DF8665 70EF9B12036A6F0E7A49C7E7CE0328969516D4E2B8F4C947FAAF3212AF945ACC 280F484B9BEA6C4D9EA038961061496A0E487140B067F93CBBB475F9D6B52FA6 A224837C40EAE3F8C28EC36BA0E3808F4AADC11FC72491AF864927C670C98727 5D2F01021F7311C024AB6C43B50C3C907AA5965845CDE501C35C341297819B4A 85D8685411EEC2AFF71E9BC87DB767BCE90341DCA237CEC8F51965246482771A 80D2F75008C16DA39078C3C2E646F04BE69544B422B6FDD9ACF35EF3FA5B01F8 8EC3941875EFD5D3C8B2B58E5B19C7B03FA2A6B3C58836DAE2ADA7DFC1B6FF83 DA31E2608FFBB5D5C12B6EF00B8D46C0E23689365FC8348D2586B1A1431C4F85 054480677047C6A3595753CC183CDA9A2035174D1A5C00C9DEA2F4F5F2D9EB87 29957DF4E9A1FBD5F6D47FB02C009F267AD99A83DE10D2A09145627E30AE1B7A 615EC6ED96D5A363D5FEB970A5DEE6186B09C9EF9C320FA7EF012F8EBAF67E6B DF0429E392C4CB78B0B4BDA0D88A2A5A39CD63E7D7CAC8282AA20DC12586E018 C0DCC3B86EF767E789B86DA28BBD0917094FFF0DC29CD48AA736ED66B54B733A 84FF0D2A3BD13C96DA38F8652AB6D5FAD162C23F861F35BA870D1DA095076A87 94AAB10BAC034868C68DB090D1561C36816D7B682EBDED9E8D4B7439A8A8AF23 1AFB674478491CC35C249B1214DB8FE34ED82631931043B18DCF506A6657B696 2FB20839DBEE9CAC7E77D79B1205000148389A838CBAA2126BC99486055868FD 2B1C52F7640508EC186FAABB8CED8C26537B691129BFF29C303A0F27D1830230 1BDE8122A1801A86F59AFB7A7574BF960EE93D5BE4953293093B941DFE63881B A4153B9170725B7773F9964F33153E290E31C7E81C2647FE0CDE1A2258434F61 A83DE191F38831E6BF23EBB8B1796452E70376AF4D3CF5A90709D6F37F6E10DB EA21340F6BBF91605D5A4F6D1E57A42D4B6D616A69CDC7D15B636C87446F796D EF59628582392BC8119BD1DF1042B3025694745BC2CFC30D9C4F969F7321D53D D578F4A6849149F0AEBEB191C62A1FCE152042CA1435AC1F4BDA9E0405D95436 E3920762759593A18A574E4240F57915A40998C4C57E453F41D1700B13429BB7 C2DEFF4DE13045739543DDD72DFDF10C0613B5B414FB6D81DDA326498174564E C9807C40E03A45CB7970A418DB29706DADD82D9C1A4F1D90C4F19A0999B94073 957CB5FE913F854FC0259F7715695925CDE53199BBE1A146F4A1CF66E3906F11 7BADB397D0DA46B7790AFFE91CC2A572A921C71C2CECAE03B0ACD346BBCCC05A D5E48F82A8DEF63CDAA28B95A9BA366D2327D6815EFF01DD28145CC7DC37644A 0DA5741581FE7DDC975B0556EC89323320F0F39898CEE725E457B73F074C8812 9E7F4D673752B5F8D04B80598937ECAAD0FE9729758F8B1934F0797ACC8B08D3 00FB01FF175231A852219146D9613D4769A19C2CF5FDE0D8498A072D849F58DF D97445BF988C438E33BBDBCC6B3051CD78DC853B82AAD34ABEA877AC9C74DC6D 128073D4D3614AAA4BDE55BE5B1F7D58E35577F344D860D148ECFAE711E876F2 2C6E65178088742C6A903361EA7A66E6D93C4D2F633338FC81CDAEB06951061F EA24B7EDBCD96EACCCC7A7C0C7E495BC663A6BDF28D688EF566C4F6A0720D0F5 DCA0A50C3F8EDD9DC1E80117FF2C49A2963A195869916B063B65B26A95C303D9 02081B4C6A3B1A63833F7FD82FE35AEF71CA3FEF3233D8A9D3557BEC5927F8AB B876635698A02BC8807A0422FF04486EBACCAA05FD29BB36EFD7BB686A1DF981 341342CF4CA5563723064BD5B4141D6EA9ACFDA305E4315AE35724ACB471C47D 4F89B1C9CAE90F8931D6E3CDA0A50F3BB002D79CEFDB127C6080B8B936F3472F 58E42BAAFCD69034C8AB5149A613AFA590E5778F39B329E9F3FBB04569EA7A86 ECE449097CC1B2509CCF87C9D3AF895A42BB373C3AEF414307357878A7A4F4C4 5331C30D2D0F08A9E26029A8E9E23E91F2E3338183A891BCB8D911504AEBA3CB BAE302854017F2E8EF0226A2BBE961B7BF199BDD7EEF6D9085E623C4C0C83B69 FD0639EBCD859DE15C0B833F0B6A3631F3E51CAFC67C5E8DA9A3E84CF8AA4BD7 0FF026385B4C814F310A00BB28CB6586076495257935DDA810E561EB2CA5EDB8 853224CD2E6D77FBB8B25A6504BA12740C857E41CD557CE8E23D9771C637D6BD 596379DAF14EE10A2DD92EE5DE8B45668E23E12193EDDA4B1E4813B2460BAF76 DE4D1871F67E1B923DE95EE14C7E0431810F6110DB77B4CA49F8E680B5FEFC69 EB2742BEBC0A3A2901ABE63D798A7540C19349608D85371B5A9F496D979D7E8D B10564D8955C475E4A4519EE193F3B24909E560E4606DFD5EC419171BF786F6C 55915AE6FDDC6C3811195AFB50E7CD1225C8312832BAF8F878596335F1E2D000 AB209224B06AAA808F54168F24F45572 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 39158280 55380996 1000 600 600 (short_ref.dvi) @start /Fa 207[30 48[{}1 49.8132 /CMR6 rf /Fb 144[31 2[20 1[25 5[32 100[{}4 49.8132 /CMMI6 rf /Fc 211[33 44[{}1 119.552 /CMR12 rf /Fd 133[62 3[62 2[62 3[62 6[62 1[62 102[{}6 119.552 /CMTT12 rf /Fe 134[35 40 8[34 2[21 1[29 24 4[36 15[41 19[37 64[{}9 66.4176 /CMMI8 rf /Ff 175[96 53[68 26[{}2 90.9091 /CMEX10 rf /Fg 214[91 20[71 4[45 15[{}3 90.9091 /CMSY10 rf /Fh 130[48 1[48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 1[48 2[48 1[48 48 1[48 48 1[48 48 48 1[48 1[48 48 2[48 48 48 48 48 48 2[48 48 48 48 48 4[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 3[48 35[{}69 90.9091 /CMTT10 rf /Fi 133[74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 74 3[74 1[74 74 74 74 2[74 5[74 2[74 1[74 74 74 3[74 74 74 74 74 74 74 74 74 1[74 8[74 74 74 74 74 74 74 1[74 74 40[{}56 143.462 /CMTT12 rf /Fj 207[19 48[{}1 66.4176 /CMSY8 rf /Fk 133[40 48 48 66 48 51 35 36 36 1[51 45 51 76 25 1[28 25 51 45 28 40 51 40 51 45 3[25 1[25 6[66 51 4[68 8[62 1[66 5[71 1[25 25 3[45 3[45 45 45 1[25 30 25 71 1[35 35 25 5[25 20[51 12[{}47 90.9091 /CMR10 rf /Fl 203[35 35 35 35 35 4[55 1[27 27 40[{}8 66.4176 /CMR8 rf /Fm 133[42 45 52 2[52 33 9[37 5[47 9[62 53 75 2[62 14[58 3[69 68 48 1[71 2[25 25 58[{}18 90.9091 /CMMI10 rf /Fn 207[27 47[77{}2 99.6264 /CMSY10 rf /Fo 194[76 4[49 49 49 49 49 49 49 49 49 4[76 43[{}11 99.6264 /CMR12 rf /Fp 167[207 86[66 66{}3 143.462 /CMEX10 rf /Fq 139[47 3[72 10[65 3[72 97[{}4 143.462 /CMTI12 rf /Fr 212[126 43[{}1 206.559 /CMSY10 rf /Fs 141[120 58[0 11[88 1[143 7[143 15[112 1[72 15[{}7 143.462 /CMSY10 rf /Ft 135[55 9[58 85 2[40 33 4[51 15[57 84[{}7 99.6264 /CMMI12 rf /Fu 134[68 80 100 68 80 51 13[69 3[60 12[95 5[107 5[62 2[91 4[105 74 4[39 39 58[{}16 143.462 /CMMI12 rf /Fv 133[58 70 70 96 70 73 51 52 51 70 73 66 73 111 36 70 1[36 73 66 40 58 73 58 73 66 4[66 4[137 3[73 98 1[90 103 1[122 83 1[68 47 99 1[86 90 101 96 1[99 3[103 2[36 9[66 66 1[43 1[103 1[51 51 5[66 19[107 1[72 75 11[{}53 143.462 /CMR17 rf /Fw 132[81 3[117 85 90 63 64 66 1[90 81 90 134 45 1[49 45 1[81 49 74 90 72 1[78 10[122 3[120 2[121 1[153 97 2[60 1[127 101 106 124 117 1[122 17[81 1[54 1[126 1[63 63 27[90 12[{}38 143.462 /CMBX12 rf /Fx 133[103 123 1[168 123 129 90 92 95 123 129 116 129 194 65 2[65 129 1[71 106 129 103 1[113 12[162 1[173 2[175 182 1[140 2[87 3[153 178 168 165 175 17[116 1[77 1[181 1[90 90 28[136 11[{}38 206.559 /CMBX12 rf /Fy 134[61 2[61 61 59 1[60 2[63 61 74 3[30 1[64 53 56 62 59 58 61 53[84 43[{}17 99.6264 /CMCSC10 rf /Fz 176[84 2[67 7[86 81 1[85 19[37 45[{}6 99.6264 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: a4 /setpagedevice where { pop << /PageSize [595 842] >> setpagedevice } { /a4 where { pop a4 } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 1128 361 a Fx(The)77 b(Basic)g(Idea)p -107 496 3995 4 v -107 830 4 334 v -12 710 a Fw(V)-13 b(ector)52 b(function)41 b Fv(in)j Fw(C/C++)p Fv(:)135 b Fu(F)60 b Fv(:)39 b(I)-30 b(R)2358 651 y Ft(n)2461 710 y Fs(!)40 b Fv(I)-30 b(R)2759 651 y Ft(m)2888 710 y Fv(:)40 b Fu(x)g Fs(7!)g Fu(y)45 b Fv(=)40 b Fu(F)20 b Fv(\()p Fu(x)p Fv(\))p 3884 830 V -107 833 3995 4 v 972 1108 a Fr(+)44 b Fv(Op)t(erator)f(o)l(v)l(erloading)f(\(C++\))p 574 1283 2633 4 v 574 1617 4 334 v 692 1497 a Fw(In)l(ternal)53 b(represen)l(tation)40 b Fv(of)i Fu(F)63 b Fv(\()p Fs(\021)p Fq(tap)-7 b(e)11 b Fv(\))p 3203 1617 V 574 1620 2633 4 v 1009 1895 a Fr(+)354 b Fv(In)l(terpretation)h Fr(+)p -78 2071 1947 4 v -78 3909 4 1838 v -49 2195 a Fw(F)-13 b(orw)l(ard)52 b(mo)t(de)p -50 2218 1018 6 v 118 2595 a Fu(x)24 b Fv(\()p Fu(t)p Fv(\))39 b(=)636 2416 y Ft(d)557 2459 y Fp(X)576 2763 y Ft(j)6 b Fo(=0)788 2595 y Fu(x)868 2616 y Ft(j)918 2595 y Fu(t)969 2536 y Ft(j)414 3020 y Fs(+)124 3432 y Fu(y)30 b Fv(\()p Fu(t)p Fv(\))39 b(=)636 3253 y Ft(d)557 3296 y Fp(X)576 3600 y Ft(j)6 b Fo(=0)788 3432 y Fu(y)856 3454 y Ft(j)907 3432 y Fu(t)958 3373 y Ft(j)1040 3432 y Fv(+)32 b Fu(O)1310 3316 y Fp(\000)1376 3432 y Fu(t)1427 3373 y Ft(d)p Fo(+1)1606 3316 y Fp(\001)-50 3842 y Fv(=)-24 b Fs(\))55 b Fw(Directional)d(deriv)-9 b(ativ)l(es)p 1865 3909 4 1838 v -78 3912 1947 4 v 1911 2071 V 1911 3909 4 1839 v 1940 2195 a(Rev)l(erse)52 b(mo)t(de)p 1940 2218 989 6 v 2147 2477 a Fu(y)2215 2499 y Ft(j)2305 2477 y Fv(=)41 b Fu(y)2517 2499 y Ft(j)2591 2477 y Fv(\()p Fu(x)2722 2499 y Fo(0)2775 2477 y Fu(;)24 b(x)2918 2499 y Fo(1)2970 2477 y Fu(;)g(:)g(:)g(:)g(;)g(x)3365 2499 y Ft(j)3415 2477 y Fv(\))2305 2747 y Fs(+)2055 2996 y Fu(@)8 b(y)2205 3018 y Ft(j)p 2055 3060 201 6 v 2056 3192 a Fu(@)g(x)2218 3213 y Ft(i)2305 3093 y Fv(=)2458 2996 y Fu(@)g(y)2608 3018 y Ft(j)e Fn(\000)p Ft(i)p 2458 3060 312 6 v 2507 3192 a Fu(@)i(x)2669 3213 y Fo(0)2305 3436 y Fv(=)41 b Fu(A)2554 3457 y Ft(j)6 b Fn(\000)p Ft(i)2739 3436 y Fv(\()o Fu(x)2869 3457 y Fo(0)2922 3436 y Fu(;)24 b(x)3065 3457 y Fo(1)3118 3436 y Fu(;)g(:)g(:)g(:)g(;)g(x) 3513 3457 y Ft(j)6 b Fn(\000)p Ft(i)3673 3436 y Fv(\))1940 3848 y(=)-24 b Fs(\))54 b Fw(Gradien)l(ts)e(\(adjoin)l(ts\))p 3854 3909 4 1839 v 1911 3912 1947 4 v 1458 4125 a Fm(y)1503 4139 y Fl(0)1568 4125 y Fk(=)24 b Fm(F)29 b Fk(\()p Fm(x)1837 4139 y Fl(0)1876 4125 y Fk(\))1458 4263 y Fm(y)1503 4277 y Fl(1)1568 4263 y Fk(=)24 b Fm(F)1734 4225 y Fj(0)1773 4263 y Fk(\()p Fm(x)1860 4277 y Fl(0)1900 4263 y Fk(\))15 b Fm(x)2002 4277 y Fl(1)1458 4450 y Fm(y)1503 4464 y Fl(2)1568 4450 y Fk(=)24 b Fm(F)1734 4412 y Fj(0)1773 4450 y Fk(\()p Fm(x)1860 4464 y Fl(0)1900 4450 y Fk(\))15 b Fm(x)2002 4464 y Fl(2)2062 4450 y Fk(+)2163 4389 y(1)p 2163 4429 46 4 v 2163 4512 a(2)2218 4450 y Fm(F)2289 4412 y Fj(00)2347 4450 y Fk(\()p Fm(x)2434 4464 y Fl(0)2474 4450 y Fk(\))g Fm(x)2576 4464 y Fl(1)2615 4450 y Fm(x)2667 4464 y Fl(1)1458 4666 y Fm(y)1503 4680 y Fl(3)1568 4666 y Fk(=)24 b Fm(F)1734 4628 y Fj(0)1773 4666 y Fk(\()p Fm(x)1860 4680 y Fl(0)1900 4666 y Fk(\))15 b Fm(x)2002 4680 y Fl(3)2062 4666 y Fk(+)20 b Fm(F)2224 4628 y Fj(00)2281 4666 y Fk(\()q Fm(x)2369 4680 y Fl(0)2408 4666 y Fk(\))c Fm(x)2511 4680 y Fl(1)2550 4666 y Fm(x)2602 4680 y Fl(2)2662 4666 y Fk(+)2763 4604 y(1)p 2763 4645 V 2763 4728 a(6)2818 4666 y Fm(F)2889 4628 y Fj(000)2966 4666 y Fk(\()p Fm(x)3053 4680 y Fl(0)3093 4666 y Fk(\))f Fm(x)3195 4680 y Fl(1)3234 4666 y Fm(x)3286 4680 y Fl(1)3326 4666 y Fm(x)3378 4680 y Fl(1)1557 4840 y Fm(:)g(:)g(:)305 4970 y(@)5 b(y)403 4984 y Fl(0)p 301 5011 145 4 v 301 5094 a Fm(@)g(x)406 5108 y Fl(0)481 5032 y Fk(=)591 4970 y Fm(@)g(y)689 4984 y Fl(1)p 587 5011 V 587 5094 a Fm(@)g(x)692 5108 y Fl(1)767 5032 y Fk(=)877 4970 y Fm(@)g(y)975 4984 y Fl(2)p 873 5011 V 873 5094 a Fm(@)g(x)978 5108 y Fl(2)1053 5032 y Fk(=)1162 4970 y Fm(@)g(y)1260 4984 y Fl(3)p 1159 5011 V 1159 5094 a Fm(@)g(x)1264 5108 y Fl(3)1339 5032 y Fk(=)25 b Fm(A)1503 5046 y Fl(0)1568 5032 y Fk(=)f Fm(F)1734 4994 y Fj(0)1773 5032 y Fk(\()p Fm(x)1860 5046 y Fl(0)1900 5032 y Fk(\))591 5204 y Fm(@)5 b(y)689 5218 y Fl(1)p 587 5245 V 587 5328 a Fm(@)g(x)692 5342 y Fl(0)767 5266 y Fk(=)877 5204 y Fm(@)g(y)975 5218 y Fl(2)p 873 5245 V 873 5328 a Fm(@)g(x)978 5342 y Fl(1)1053 5266 y Fk(=)1162 5204 y Fm(@)g(y)1260 5218 y Fl(3)p 1159 5245 V 1159 5328 a Fm(@)g(x)1264 5342 y Fl(2)1339 5266 y Fk(=)25 b Fm(A)1503 5280 y Fl(1)1568 5266 y Fk(=)f Fm(F)1734 5228 y Fj(00)1792 5266 y Fk(\()q Fm(x)1880 5280 y Fl(0)1919 5266 y Fk(\))15 b Fm(x)2021 5280 y Fl(1)877 5438 y Fm(@)5 b(y)975 5452 y Fl(2)p 873 5479 V 873 5562 a Fm(@)g(x)978 5576 y Fl(0)1053 5500 y Fk(=)1162 5438 y Fm(@)g(y)1260 5452 y Fl(3)p 1159 5479 V 1159 5562 a Fm(@)g(x)1264 5576 y Fl(1)1339 5500 y Fk(=)25 b Fm(A)1503 5514 y Fl(2)1568 5500 y Fk(=)f Fm(F)1734 5462 y Fj(00)1792 5500 y Fk(\()q Fm(x)1880 5514 y Fl(0)1919 5500 y Fk(\))15 b Fm(x)2021 5514 y Fl(2)2081 5500 y Fk(+)2182 5438 y(1)p 2182 5479 46 4 v 2182 5562 a(2)2237 5500 y Fm(F)2308 5462 y Fj(000)2385 5500 y Fk(\()p Fm(x)2472 5514 y Fl(0)2512 5500 y Fk(\))g Fm(x)2614 5514 y Fl(1)2654 5500 y Fm(x)2706 5514 y Fl(1)1162 5672 y Fm(@)5 b(y)1260 5686 y Fl(3)p 1159 5713 145 4 v 1159 5796 a Fm(@)g(x)1264 5810 y Fl(0)1339 5733 y Fk(=)25 b Fm(A)1503 5747 y Fl(3)1568 5733 y Fk(=)f Fm(F)1734 5696 y Fj(00)1792 5733 y Fk(\()q Fm(x)1880 5747 y Fl(0)1919 5733 y Fk(\))15 b Fm(x)2021 5747 y Fl(3)2081 5733 y Fk(+)20 b Fm(F)2243 5696 y Fj(000)2320 5733 y Fk(\()p Fm(x)2407 5747 y Fl(0)2446 5733 y Fk(\))c Fm(x)2549 5747 y Fl(1)2588 5733 y Fm(x)2640 5747 y Fl(2)2700 5733 y Fk(+)2801 5672 y(1)p 2801 5713 46 4 v 2801 5796 a(6)2856 5733 y Fm(F)2927 5696 y Fl(\(4\))3037 5733 y Fk(\()p Fm(x)3124 5747 y Fl(0)3164 5733 y Fk(\))f Fm(x)3266 5747 y Fl(1)3305 5733 y Fm(x)3357 5747 y Fl(1)3397 5733 y Fm(x)3449 5747 y Fl(1)1557 5922 y Fm(:)g(:)g(:)p -118 6252 4016 5 v 1865 6372 a Fo(1)p eop end %%Page: 2 2 TeXDict begin 2 1 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 1300 382 a Fx(Application)71 688 y Fw(Op)t(erator)54 b(o)l(v)l(erloading)d(concept)g Fs(\))k Fw(Co)t(de)e(mo)t(di\014cation)p -118 851 4073 4 v -118 2365 4 1514 v 33 1084 a Fs(\017)c Fv(Inclusion)43 b(of)g(appropriate)g(ADOL-C)h(headers)33 1308 y Fs(\017)49 b Fv(Ret)l(yping)43 b(of)g(all)f(in)l(v)l(olv)l(ed)i(v)-7 b(ariables)41 b(to)i(activ)l(e)g(data)g(t)l(yp)t(e)h Fi(adouble)33 1532 y Fs(\017)49 b Fv(Marking)42 b(activ)l(e)h(section)h (to)e(b)t(e)i(\\tap)t(ed")f(\()p Fi(trace)p 2764 1532 45 4 v 52 w(on)p Fv(/)p Fi(trace)p 3400 1532 V 52 w(off)p Fv(\))33 1756 y Fs(\017)49 b Fv(Sp)t(eci\014cation)43 b(of)g(indep)t(enden)l(t)j(and)d(dep)t(enden)l(t)j(v)-7 b(ariables)41 b(\()p Fi(<<=)p Fv(/)p Fi(>>=)p Fv(\))33 1980 y Fs(\017)49 b Fv(Sp)t(eci\014cation)43 b(of)g(di\013eren)l (tiation)h(task\(s\))33 2204 y Fs(\017)49 b Fv(Recompilation)42 b(and)i(Linking)f(with)g(ADOL-C)h(library)e Fi(libad.a)p 3951 2365 4 1514 v -118 2368 4073 4 v 0 2749 a Fk(Example:)p 0 2781 373 4 v 0 2945 a Fh(#include)k()1045 b(//)48 b(inlusion)d(of)i(ADOL-C)f(headers)0 3058 y(...)0 3170 y(adouble)g(foo)h(\()g(adouble)f(x)h(\))716 b(//)47 b(some)g(activated)e(function)0 3283 y({)i(adouble)f(tmp;)95 3396 y(tmp)h(=)h(log\(x\);)95 3509 y(return)f(3.0*tmp*tmp)d(+)k(2.0;)0 3622 y(})0 3735 y(...)0 3848 y(int)f(main)g(\(int)f(argc,)h(char*)f (argv[]\))332 b(//)47 b(main)g(program)f(or)h(other)f(procedure)0 3961 y({)h(...)95 4074 y(double)142 b(x[2],)94 b(y;)95 4187 y(adouble)46 b(ax[2],)g(ay;)954 b(//)47 b(declaration)e(of)i (active)f(variables)95 4300 y(x[0]=0.3;)g(x[1]=2.3;)95 4412 y(trace_on\(1\);)1238 b(//)47 b(starting)f(active)g(section)191 4525 y(ax[0]<<=x[0];)e(ax[1]<<=x[1];)426 b(//)47 b(marking)f (independent)f(variables)191 4638 y(ay=ax[0]*sin\(ax[1]\)+)d (foo\(ax[1]\);)188 b(//)47 b(function)f(evaluation)191 4751 y(ay>>=y;)1382 b(//)47 b(marking)f(dependend)f(variables)95 4864 y(trace_off\(\);)1238 b(//)47 b(ending)f(active)g(section)95 4977 y(...)95 5090 y(double)h(g[2];)95 5203 y(gradient\(1,2,x,g\);)950 b(//)47 b(application)e(of)i(ADOL-C)f(routine)95 5316 y(...)95 5429 y(x[0]+=0.1;)f(x[1]+=0.3;)809 b(//)47 b(application)e(at) i(different)e(argument)95 5542 y(gradient\(1,2,x,g\);)95 5654 y(...)0 5767 y(})p -118 6273 4016 5 v 1865 6393 a Fo(2)p eop end %%Page: 3 3 TeXDict begin 3 2 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 407 382 a Fx(Driv)-6 b(ers)76 b(for)i(Optimization)e(and)311 585 y(Nonlinear)h(Equations)f(\(C/C++\)) 1093 1019 y Fv(min)1175 1105 y Ft(x)1336 1019 y Fu(f)40 b Fv(\()p Fu(x)p Fv(\))23 b Fu(;)263 b(f)56 b Fv(:)39 b(I)-30 b(R)2267 960 y Ft(n)2370 1019 y Fs(!)40 b Fv(I)-30 b(R)996 1281 y Fu(F)44 b Fv(\()o Fu(x)p Fv(\))c(=)g(0)1561 1302 y Ft(m)1650 1281 y Fu(;)263 b(F)60 b Fv(:)39 b(I)-30 b(R)2293 1221 y Ft(n)2396 1281 y Fs(!)40 b Fv(I)-30 b(R)2694 1221 y Ft(m)p -118 1478 4121 4 v -120 1660 4 183 v 3122 1660 V 4001 1660 V -120 1781 4 245 v -68 1665 a Fi (function\(tag,m,n,x[n],y[m]\))p 3122 1781 V 1243 w Fu(F)43 b Fv(\()p Fu(x)3438 1686 y Fo(0)3491 1665 y Fv(\))p 4001 1781 V -118 1785 4121 4 v -120 1967 4 183 v 3122 1967 V 4001 1967 V -120 2057 4 214 v -68 1972 a Fi (gradient\(tag,n,x[n],g[n]\))p 3122 2057 V 1391 w Fs(r)p Fu(f)c Fv(\()p Fu(x)3532 1993 y Fo(0)3585 1972 y Fv(\))p 4001 2057 V -120 2302 4 245 v -68 2185 a Fi (hessian\(tag,n,x[n],H[n][n]\))p 3122 2302 V 1243 w Fs(r)3293 2133 y Fo(2)3346 2185 y Fu(f)g Fv(\()p Fu(x)3585 2207 y Fo(0)3638 2185 y Fv(\))p 4001 2302 V -118 2305 4121 4 v -120 2488 4 183 v 3122 2488 V 4001 2488 V -120 2578 4 214 v -68 2492 a Fi(jacobian\(tag,m,n,x[n],J[m][n]\))p 3122 2578 V 1021 w Fu(F)3284 2440 y Fn(0)3339 2492 y Fv(\()p Fu(x)3470 2514 y Fo(0)3523 2492 y Fv(\))p 4001 2578 V -120 2791 V -68 2706 a Fi(vec)p 163 2706 45 4 v 52 w(jac\(tag,m,n,repeat?,x[n],u[m],z[n]\))p 3122 2791 4 214 v 377 w Fu(u)3253 2653 y Ft(T)3328 2706 y Fu(F)3439 2653 y Fn(0)3494 2706 y Fv(\()p Fu(x)3625 2727 y Fo(0)3677 2706 y Fv(\))p 4001 2791 V -120 3036 4 245 v -68 2919 a Fi(jac)p 163 2919 45 4 v 52 w(vec\(tag,m,n,x[n],v[n],z[m]\))p 3122 3036 4 245 v 969 w Fu(F)3284 2867 y Fn(0)3339 2919 y Fv(\()p Fu(x)3470 2941 y Fo(0)3523 2919 y Fv(\))23 b Fu(v)p 4001 3036 V -118 3039 4121 4 v -120 3222 4 183 v 3122 3222 V 4001 3222 V -120 3312 4 214 v -68 3226 a Fi(hess)p 237 3226 45 4 v 52 w(vec\(tag,n,x[n],v[n],z[n]\))p 3122 3312 4 214 v 1043 w Fs(r)3293 3174 y Fo(2)3346 3226 y Fu(f)39 b Fv(\()p Fu(x)3585 3247 y Fo(0)3638 3226 y Fv(\))23 b Fu(v)p 4001 3312 V -120 3556 4 245 v -68 3439 a Fi(lagra)p 311 3439 45 4 v 52 w(hess)p 659 3439 V 52 w(vec\(tag,m,n,x[n],v[n],u[m],h[n]\))p 3122 3556 4 245 v 103 w Fu(u)3253 3387 y Ft(T)3328 3439 y Fu(F)3439 3387 y Fn(00)3521 3439 y Fv(\()p Fu(x)3652 3461 y Fo(0)3705 3439 y Fv(\))g Fu(v)p 4001 3556 V -118 3559 4121 4 v -120 3742 4 183 v 3122 3742 V 4001 3742 V -120 3863 4 245 v -68 3746 a Fi(jac)p 163 3746 45 4 v 52 w (solv\(tag,n,x[n],b[n],sparse?,mode?\))p 3122 3863 4 245 v 377 w Fu(F)3284 3694 y Fn(0)3339 3746 y Fv(\()p Fu(x)3470 3768 y Fo(0)3523 3746 y Fv(\))g Fu(w)44 b Fv(=)c Fu(b)p 4001 3863 V -118 3866 4121 4 v 0 4251 a Fk(Example:)p 0 4284 373 4 v 179 w(Solution)31 b(of)f Fm(F)13 b Fk(\()p Fm(x)p Fk(\))26 b(=)f(0)31 b(b)m(y)f(Newton's)h(metho)s(d)0 4447 y Fh(...)0 4560 y(double)46 b(x[n],)g(r[n];)0 4673 y(int)h(i;)0 4786 y(...)0 4899 y(initialize\(x\);)1189 b(//)48 b(setting)d(up)j(the)e(initial)g(x)0 5012 y(...)0 5125 y(function\(ftag,n,n,x,r\);)757 b(//)48 b(compute)d(residuum)h(r)0 5238 y(while)g(\(norm\(r\))g(>)h(EPSILON\))666 b(//)48 b(terminate)d(if)i(small)f(residuum)0 5351 y({)h (jac_solv\(ftag,n,x,r,0,2\);)566 b(//)48 b(compute)d (r:=F'\(x\)^\(-1\)*r)95 5464 y(for)i(\(i=0;)g(i)25 b Fk(1)84 b(prepares)29 b(for)h Fh(hos)p 2412 5085 V 34 w(reverse)e Fk(or)j Fh(hov)p 3066 5085 V 33 w(reverse)p -118 5254 4191 4 v -118 5652 4 398 v -80 5487 a Fi(hov)p 151 5487 45 4 v 53 w(forward\(tag,m,n,d,p,x[n],X[n][p][d],y)o([m],Y[)o (m][p])o([d]\))p 4069 5652 4 398 v -118 5655 4191 4 v 386 5857 a Fg(\017)49 b Fk(higher-order)44 b(v)m(ector)h(forw)m(ard;)50 b(computes)44 b Fm(y)2138 5871 y Fl(0)2225 5857 y Fk(=)k Fm(F)28 b Fk(\()p Fm(x)2517 5871 y Fl(0)2557 5857 y Fk(\),)47 b Fm(Y)2717 5871 y Fl(1)2804 5857 y Fk(=)h Fm(F)2994 5824 y Fj(0)3032 5857 y Fk(\()q Fm(x)3120 5871 y Fl(0)3159 5857 y Fk(\))16 b Fm(X)3285 5871 y Fl(1)3324 5857 y Fk(,)48 b(.)15 b(.)h(.)f(,)480 5970 y(where)30 b Fm(x)25 b Fk(=)g Fm(x)968 5984 y Fl(0)1008 5970 y Fk(,)30 b Fm(X)j Fk(=)25 b([)p Fm(X)1367 5984 y Fl(1)1407 5970 y Fm(;)15 b(X)1522 5984 y Fl(2)1562 5970 y Fm(;)g(:)g(:)g(:)i(;)e(X)1839 5985 y Fe(d)1880 5970 y Fk(])30 b(and)g Fm(y)e Fk(=)d Fm(y)2326 5984 y Fl(0)2365 5970 y Fk(,)31 b Fm(Y)45 b Fk(=)25 b([)p Fm(Y)2693 5984 y Fl(1)2732 5970 y Fm(;)15 b(Y)2825 5984 y Fl(2)2865 5970 y Fm(;)g(:)g(:)g(:)i(;)e(Y)3120 5985 y Fe(d)3160 5970 y Fk(])p -118 6273 4016 5 v 1865 6393 a Fo(4)p eop end %%Page: 5 5 TeXDict begin 5 4 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 1014 346 a Fw(Rev)l(erse)53 b(Mo)t(de)g (\(C/C++\))p -118 517 4191 4 v -118 914 4 398 v 880 750 a Fi(fos)p 1111 750 45 4 v 53 w(reverse\(tag,m,n,u[m],z[n]\))p 4069 914 4 398 v -118 917 4191 4 v 386 1128 a Fg(\017)c Fk(\014rst-order)30 b(scalar)h(rev)m(erse;)g(computes)g Fm(z)1944 1095 y Fe(T)2024 1128 y Fk(=)25 b Fm(u)2172 1095 y Fe(T)2227 1128 y Fm(F)2298 1095 y Fj(0)2337 1128 y Fk(\()p Fm(x)p Fk(\))386 1315 y Fg(\017)49 b Fk(after)31 b(calling)h Fh(zos)p 1133 1315 29 4 v 33 w(forward)p Fk(,)d Fh(fos)p 1700 1315 V 34 w(forward)p Fk(,)f(or)j Fh(hos)p 2379 1315 V 33 w(forward)e Fk(with)h Fh(keep)24 b Fk(=)h(1)p -118 1471 4191 4 v -118 1868 4 398 v 585 1703 a Fi(fov)p 816 1703 45 4 v 52 w (reverse\(tag,m,n,q,U[q][m],Z[q][n]\))p 4069 1868 4 398 v -118 1871 4191 4 v 386 2073 a Fg(\017)49 b Fk(\014rst-order)30 b(v)m(ector)i(rev)m(erse;)f(computes)f Fm(Z)i Fk(=)25 b Fm(U)10 b(F)2245 2040 y Fj(0)2284 2073 y Fk(\()p Fm(x)p Fk(\))386 2261 y Fg(\017)49 b Fk(after)31 b(calling)h Fh(zos)p 1133 2261 29 4 v 33 w(forward)p Fk(,)d Fh(fos)p 1700 2261 V 34 w(forward)p Fk(,)f(or)j Fh(hos)p 2379 2261 V 33 w(forward)e Fk(with)h Fh(keep)24 b Fk(=)h(1)p -118 2416 4191 4 v -118 2813 4 398 v 622 2648 a Fi(hos)p 853 2648 45 4 v 52 w(reverse\(tag,m,n,d,u[m],Z[n][d+1]\))p 4069 2813 4 398 v -118 2816 4191 4 v 386 3027 a Fg(\017)49 b Fk(higher-order)44 b(scalar)i(rev)m(erse;)52 b(computes)45 b(the)g(adjoin)m(ts)g Fm(z)2627 2994 y Fe(T)2623 3051 y Fl(0)2707 3027 y Fk(=)25 b Fm(u)2855 2994 y Fe(T)2911 3027 y Fm(F)2982 2994 y Fj(0)3020 3027 y Fk(\()p Fm(x)3107 3041 y Fl(0)3147 3027 y Fk(\))g(=)g Fm(u)3355 2994 y Fe(T)3410 3027 y Fm(A)3478 3041 y Fl(0)3518 3027 y Fk(,)480 3140 y Fm(z)526 3107 y Fe(T)522 3164 y Fl(1)607 3140 y Fk(=)g Fm(u)755 3107 y Fe(T)810 3140 y Fm(F)881 3107 y Fj(00)938 3140 y Fk(\()q Fm(x)1026 3154 y Fl(0)1065 3140 y Fk(\))16 b Fm(x)1168 3154 y Fl(1)1232 3140 y Fk(=)25 b Fm(u)1380 3107 y Fe(T)1435 3140 y Fm(A)1503 3154 y Fl(1)1543 3140 y Fk(,)30 b(.)16 b(.)f(.)h(,)30 b(where)g Fm(Z)i Fk(=)25 b([)p Fm(z)2295 3154 y Fl(0)2335 3140 y Fm(;)15 b(z)2417 3154 y Fl(1)2457 3140 y Fm(;)g(:)g(:)g(:)i(;)e(z) 2701 3155 y Fe(d)2742 3140 y Fk(])386 3327 y Fg(\017)49 b Fk(after)31 b(calling)h Fh(fos)p 1133 3327 29 4 v 33 w(forward)d Fk(or)h Fh(hos)p 1786 3327 V 34 w(forward)e Fk(with)i Fh(keep)24 b Fk(=)h Fm(d)c Fk(+)f(1)25 b Fm(>)g Fk(1)p -118 3483 4191 4 v -118 3880 4 398 v -6 3715 a Fi(hov)p 225 3715 45 4 v 53 w(reverse\(tag,m,n,d,q,U[q][m],Z[q][n][)o (d+1],n)o(z[q][)o(n]\))p 4069 3880 4 398 v -118 3883 4191 4 v 386 4085 a Fg(\017)49 b Fk(higher-order)k(v)m(ector)h(rev)m (erse;)66 b(computes)53 b(the)g(adjoin)m(ts)h Fm(Z)2713 4099 y Fl(0)2778 4085 y Fk(=)25 b Fm(U)10 b(F)3017 4052 y Fj(0)3055 4085 y Fk(\()p Fm(x)3142 4099 y Fl(0)3182 4085 y Fk(\))25 b(=)g Fm(U)10 b(A)3478 4099 y Fl(0)3518 4085 y Fk(,)480 4198 y Fm(Z)542 4212 y Fl(1)607 4198 y Fk(=)25 b Fm(U)10 b(F)846 4165 y Fj(00)903 4198 y Fk(\()q Fm(x)991 4212 y Fl(0)1030 4198 y Fk(\))16 b Fm(x)1133 4212 y Fl(1)1197 4198 y Fk(=)25 b Fm(U)10 b(A)1433 4212 y Fl(1)1473 4198 y Fk(,)30 b(.)16 b(.)f(.)h(,)30 b(where)g Fm(Z)i Fk(=)25 b([)p Fm(Z)2245 4212 y Fl(0)2285 4198 y Fm(;)15 b(Z)2387 4212 y Fl(1)2427 4198 y Fm(;)g(:)g(:)g(:)h(;)f(Z) 2690 4213 y Fe(d)2731 4198 y Fk(])386 4385 y Fg(\017)49 b Fk(after)31 b(calling)h Fh(fos)p 1133 4385 29 4 v 33 w(forward)d Fk(or)h Fh(hos)p 1786 4385 V 34 w(forward)e Fk(with)i Fh(keep)24 b Fk(=)h Fm(d)c Fk(+)f(1)25 b Fm(>)g Fk(1)386 4573 y Fg(\017)49 b Fk(optional)32 b(nonzero)e(pattern)h Fh(nz)f Fk(\()p Fg(\))g Fk(man)m(ual\))0 4852 y(Example:)p 0 4885 373 4 v 0 5048 a Fh(...)0 5161 y(double)46 b(x[n],)g(y[m],)h (**I,)f(**J;)0 5274 y(I=myallocI2\(m\);)1141 b(//)48 b(allocation)d(of)i(identity)e(matrix)0 5387 y(J=myalloc2\(m,n\);)1093 b(//)48 b(allocation)d(of)i(Jacobian)e(matrix)0 5500 y(...)0 5613 y(initialize\(x\);)1189 b(//)48 b(setting)d(up)j(the)e (argument)g(x)0 5726 y(...)0 5839 y(zos_forward\(ftag,m,n,1,x)o(,y\);) 518 b(//)48 b(computing)d(the)i(Jacobian)e(by)0 5952 y(fos_reverse\(ftag,m,n,m,I)o(,J\);)518 b(//)48 b(reverse)d(mode)i(of)g (AD)0 6064 y(...)p -118 6273 4016 5 v 1865 6393 a Fo(5)p eop end %%Page: 6 6 TeXDict begin 6 5 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 148 382 a Fx(Lo)-6 b(w-lev)g(el)76 b(Di\013eren)-6 b(tiation)76 b(Routines)737 750 y Fw(F)-13 b(orw)l(ard)52 b(Mo)t(de)i(\(C++)e(in)l(terfaces\))p -118 921 4121 4 v -120 1104 4 183 v 3192 1104 V 4001 1104 V -120 1194 4 214 v -68 1108 a Fi (forward\(tag,m,n,d,keep,X[n][d+1],Y[m)o(][d+1)o(]\))p 3192 1194 V 132 w Fd(hos)p Fc(,)37 b Fd(fos)p Fc(,)g Fd(zos)p 4001 1194 V -120 1438 4 245 v -68 1321 a Fi (forward\(tag,m=1,n,d,keep,X[n][d+1],Y)o([d+1])o(\))p 3192 1438 V 206 w Fd(hos)p Fc(,)g Fd(fos)p Fc(,)g Fd(zos)p 4001 1438 V -118 1441 4121 4 v -120 1624 4 183 v 3192 1624 V 4001 1624 V -120 1714 4 214 v -68 1628 a Fi (forward\(tag,m,n,d=0,keep,x[n],y[m]\))p 3192 1714 V 722 w Fd(zos)p 4001 1714 V -120 1958 4 245 v -68 1842 a Fi(forward\(tag,m,n,keep,x[n],y[m]\))p 3192 1958 V 1018 w Fd(zos)p 4001 1958 V -118 1962 4121 4 v -120 2144 4 183 v 3192 2144 V 4001 2144 V -120 2265 4 245 v -68 2149 a Fi(forward\(tag,m,n,p,x[n],X[n][p],y[m],)o(Y[m][)o(p]\))p 3192 2265 V 58 w Fd(fov)p 4001 2265 V -118 2268 4121 4 v -120 2451 4 183 v 3192 2451 V 4001 2451 V -120 2541 4 214 v -68 2455 a Fi(forward\(tag,m,n,d,p,x[n],X[n][p][d],)p 3192 2541 V 648 w Fd(hov)p 4001 2541 V -120 2786 4 245 v 1987 2669 a Fi(y[m],Y[m][p][d]\))p 3192 2786 V 4001 2786 V -118 2789 4121 4 v 751 3152 a Fw(Rev)l(erse)53 b(Mo)t(de)g(\(C++)f(in)l(terfaces\))p -118 3323 4074 4 v -120 3505 4 183 v 3665 3505 V 3954 3505 V -120 3595 4 214 v -68 3510 a Fi(reverse\(tag,m,n,d,u[m],Z[n][d+1]\))p 3665 3595 V 1342 w Fd(hos)p 3954 3595 V -120 3840 4 245 v -68 3723 a Fi(forward\(tag,m=1,n,d,u,Z[n][d+1]\))p 3665 3840 V 1416 w Fd(hos)p 3954 3840 V -118 3843 4074 4 v -120 4026 4 183 v 3665 4026 V 3954 4026 V -120 4116 4 214 v -68 4030 a Fi(reverse\(tag,m,n,d=0,u[m],z[n]\))p 3665 4116 V 1564 w Fd(fos)p 3954 4116 V -120 4360 4 245 v -68 4244 a Fi(reverse\(tag,m=1,n,d=0,u,z[n]\))p 3665 4360 V 1638 w Fd(fos)p 3954 4360 V -118 4364 4074 4 v -120 4546 4 183 v 3665 4546 V 3954 4546 V -120 4636 4 214 v -68 4551 a Fi(reverse\(tag,m,n,d,q,U[q][m],Z[q][n][)o(d+1],)o (nz[q][)o(n]\))p 3665 4636 V 87 w Fd(hov)p 3954 4636 V -120 4850 V -68 4764 a Fi(reverse\(tag,m=1,n,d,q,U[q],Z[q][n][d)o (+1],n)o(z[q][n)o(]\))p 3665 4850 V 161 w Fd(hov)p 3954 4850 V -120 5063 V -68 4978 a Fi(reverse\(tag,m=1,n,d,Z[m][n][d+1],nz[) o(m][n])o(\))32 b Fv(\()p Fu(U)55 b Fv(=)41 b Fu(I)3477 4999 y Ft(m)3566 4978 y Fv(\))p 3665 5063 V 99 w Fd(hov)p 3954 5063 V -118 5067 4074 4 v -120 5249 4 183 v 3665 5249 V 3954 5249 V -120 5339 4 214 v -68 5254 a Fi (reverse\(tag,m,n,d=0,q,U[q][m],Z[q][n)o(]\))p 3665 5339 V 973 w Fd(fov)p 3954 5339 V -120 5553 V -68 5467 a Fi (reverse\(tag,m,n,q,U[q][m],Z[q][n])p 3665 5553 V 1342 w Fd(fov)p 3954 5553 V -120 5797 4 245 v -68 5681 a Fi (reverse\(tag,m=1,n,d=0,q,U[q],Z[q][n])o(\))p 3665 5797 V 1047 w Fd(fov)p 3954 5797 V -118 5801 4074 4 v -118 6273 4016 5 v 1865 6393 a Fo(6)p eop end %%Page: 7 7 TeXDict begin 7 6 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 228 382 a Fx(Driv)-6 b(ers)76 b(for)h(Ordinary)f(Di\013eren)-6 b(tial)849 585 y(Equations)77 b(\(C/C++\))399 962 y Fw(ODE)p Fv(:)263 b Fu(x)1129 902 y Fn(0)1184 962 y Fv(\()p Fu(t)p Fv(\))39 b(=)h Fu(y)30 b Fv(\()o Fu(t)p Fv(\))40 b(=)g Fu(F)j Fv(\()p Fu(x)24 b Fv(\()p Fu(t)p Fv(\))o(\))g Fu(;)287 b(x)24 b Fv(\(0\))39 b(=)h Fu(x)3328 983 y Fo(0)p -118 1193 4191 4 v -118 1591 4 398 v 685 1426 a Fi(forodec\(tag,n,tau,dold,d,X[n][d+1]\))p 4069 1591 V -118 1594 4191 4 v 268 1804 a Fg(\017)49 b Fk(recursiv)m(e)24 b(forw)m(ard)f(computation)h(of)g Fm(x)1734 1819 y Fe(d)1770 1831 y Fb(old)1857 1819 y Fl(+1)1951 1804 y Fm(;)15 b(:)g(:)g(:)i(;)e(x)2205 1819 y Fe(d)2269 1804 y Fk(from)23 b Fm(x)2529 1818 y Fl(0)2568 1804 y Fm(;)15 b(:)g(:)g(:)i(;)e(x)2822 1819 y Fe(d)2858 1831 y Fb(old)2973 1804 y Fk(\(b)m(y)24 b Fm(x)3180 1818 y Fe(i)p Fl(+1)3323 1804 y Fk(=)3469 1768 y Fl(1)p 3429 1783 115 4 v 3429 1836 a(1+)p Fe(i)3553 1804 y Fm(y)3598 1818 y Fe(i)3626 1804 y Fk(\))268 2014 y Fg(\017)49 b Fk(application)32 b(with)e Fm(d)1086 2029 y Fe(ol)q(d)1208 2014 y Fk(=)25 b(0)30 b(deliv)m(ers)i(truncated)e(T)-8 b(a)m(ylor)32 b(series)2652 1945 y Ff(P)2748 1972 y Fe(d)2748 2040 y Fl(0)2804 2014 y Fm(x)2856 2028 y Fe(j)2892 2014 y Fm(t)2925 1981 y Fe(j)2992 2014 y Fk(at)f(base)g(p)s(oin)m(t)f Fm(x)3595 2028 y Fl(0)p -118 2176 4191 4 v -118 2573 4 398 v -6 2408 a Fi(hov)p 225 2408 45 4 v 53 w (reverse\(tag,n,n,d-1,n,I[n][n],A[n][n)o(][d],n)o(z[n][)o(n]\))p 4069 2573 4 398 v -118 2576 4191 4 v 268 2802 a Fg(\017)49 b Fk(rev)m(erse)31 b(computation)g(of)g Fm(A)1368 2816 y Fe(j)1430 2802 y Fk(=)1539 2754 y Fe(@)t(y)1615 2764 y Fb(j)p 1536 2781 116 4 v 1536 2833 a Fe(@)t(x)1617 2842 y Fa(0)1661 2802 y Fk(,)g Fm(j)g Fk(=)25 b(0)p Fm(;)15 b(:)g(:)g(:)i(;)e(d)31 b Fk(after)g(calling)g Fh(forodec)e Fk(with)h(degree)h Fm(d)268 2990 y Fg(\017)49 b Fk(optional)32 b(nonzero)e(pattern)h Fh(nz)e Fk(\()p Fg(\))i Fk(man)m(ual\))p -118 3148 4191 4 v -118 3533 4 386 v 168 3380 a Fi (accodec\(n,tau,d-1,A[n][n][d],B[n][n][d])o(,nz[n])o([n]\))p 4069 3533 V -118 3536 4191 4 v 268 3762 a Fg(\017)49 b Fk(accum)m(ulation)30 b(of)e(total)i(deriv)-5 b(ativ)m(es)29 b Fm(B)1753 3776 y Fe(j)1815 3762 y Fk(=)1922 3714 y Fe(dx)1998 3724 y Fb(j)p 1921 3741 111 4 v 1921 3793 a Fe(dx)1997 3802 y Fa(0)2041 3762 y Fk(,)g Fm(j)i Fk(=)25 b(0)p Fm(;)15 b(:)g(:)g(:)i(;)e(d)28 b Fk(from)g(the)g(partial)h(deriv) -5 b(ativ)m(es)362 3905 y Fm(A)430 3919 y Fe(j)492 3905 y Fk(=)601 3857 y Fe(@)t(y)677 3867 y Fb(j)p 598 3884 116 4 v 598 3936 a Fe(@)t(x)679 3945 y Fa(0)723 3905 y Fk(,)31 b Fm(j)g Fk(=)25 b(0)p Fm(;)15 b(:)g(:)g(:)i(;)e(d)31 b Fk(after)g(calling)h Fh(hov)p 1921 3905 29 4 v 33 w(reverse)268 4093 y Fg(\017)49 b Fk(optional)32 b(nonzero)e(pattern)h Fh(nz)e Fk(\()p Fg(\))i Fk(man)m(ual\))0 4434 y(C++:)p 0 4456 233 4 v 178 w(Sp)s(ecial)g(C++)e(in)m(terfaces)j(can)e(b)s(e)g (found)f(in)h(\014le)h Fh(SRC/DRIVERS/odedrivers.h)o Fk(!)0 4664 y(Example:)p 0 4696 373 4 v 0 4860 a Fh(...)0 4973 y(double)46 b(x[n],)g(**I,)h(**X,)g(***A,)f(***B;)0 5086 y(I=myallocI2\(n\);)1141 b(//)48 b(allocation)d(of)i(identity)e (matrix)0 5199 y(X=myalloc2\(n,5\);)1093 b(//)48 b(allocation)d(of)i (matrix)f(X)0 5312 y(A=myalloc3\(n,n,4\);)d(B=myalloc3\(n,n,4\);)90 b(//)48 b(allocation)d(of)i(tensors)f(A)h(and)g(B)0 5425 y(...)0 5538 y(initialize\(X\);)1189 b(//)48 b(setting)d(up)j(the)e (argument)g(x_0)0 5650 y(...)0 5763 y(forodec\(ftag,n,1.0,0,4,X)o(\);) 614 b(//)48 b(compute)d(x_1,...,x_4)0 5876 y(hov_reverse\(ftag,n,n,3,n) o(,I,A)o(,NUL)o(L\);)184 b(//)48 b(compute)d(A_0,...,A_3)0 5989 y(accodec\(ftag,n,1.0,3,A,B)o(,NUL)o(L\);)375 b(//)48 b(accumulate)d(B_0,...,B_3)0 6102 y(...)p -118 6273 4016 5 v 1865 6393 a Fo(7)p eop end %%Page: 8 8 TeXDict begin 8 7 bop -118 -34 a Fz(ADOL-C)904 b(A)p Fy(utoma)-7 b(tic)38 b Fz(D)p Fy(ifferentia)-7 b(tion)39 b(by)e Fz(O)p Fy(ver)p Fz(L)p Fy(o)n(ading)i(in)e Fz(C)p Fy(++)p -118 7 4016 5 v 1251 338 a Fw(ADOL-C)53 b(pro)l(vides)p -118 439 4073 4 v -118 2235 4 1796 v 33 680 a Fs(\017)c Fv(Lo)l(w-lev)l(el)43 b(di\013eren)l(tiation)h(routines)f(\()p Fi(forward)p Fv(/)p Fi(reverse)p Fv(\))33 904 y Fs(\017)49 b Fv(Easy-to-use)43 b(driv)l(er)g(routines)g(for)239 1170 y Fw({)49 b Fv(the)41 b(solution)f(of)g(optimization)h(problems)f (and)i(nonlinear)f(equations)239 1373 y Fw({)49 b Fv(the)43 b(in)l(tegration)g(of)g(ordinary)f(di\013eren)l(tial)i(equations)239 1576 y Fw({)49 b Fv(the)43 b(ev)-7 b(aluation)42 b(of)h(higher)h(deriv) -7 b(ativ)l(e)42 b(tensors)g(\()p Fs(\))i Fv(man)l(ual\))33 1842 y Fs(\017)49 b Fv(Deriv)-7 b(ativ)l(es)42 b(of)g(implicit)h(and)h (in)l(v)l(erse)f(functions)g(\()p Fs(\))h Fv(man)l(ual\))33 2066 y Fs(\017)49 b Fv(F)-11 b(orw)l(ard)43 b(and)h(bac)l(kw)l(ard)f (dep)t(endence)j(analysis)41 b(\()p Fs(\))j Fv(man)l(ual\))p 3951 2235 V -118 2238 4073 4 v 1143 2470 a Fw(Recen)l(t)52 b(dev)l(elopmen)l(ts)p -118 2571 V -118 3868 4 1298 v 33 2811 a Fs(\017)d Fv(E\016cien)l(t)c(detection)f(of)e (Jacobian/Hessian)h(sparsit)l(y)f(structure)33 3035 y Fs(\017)49 b Fv(Exploitation)42 b(of)h(Jacobian/Hessian)f(sparsit)l(y)g (b)l(y)h(matrix)f(compression)33 3259 y Fs(\017)49 b Fv(In)l(tegration)43 b(of)g(c)l(hec)l(kp)t(oin)l(ting)h(routines)33 3484 y Fs(\017)49 b Fv(Exploitation)42 b(of)h(\014xp)t(oin)l(t)f (iterations)33 3708 y Fs(\017)49 b Fv(Di\013eren)l(tiation)44 b(of)f(Op)t(enMP)h(parallel)f(programs)p 3951 3868 V -118 3871 4073 4 v 1152 4103 a Fw(F)-13 b(uture)52 b(dev)l(elopmen)l (ts)p -118 4205 V -118 5046 4 842 v 33 4437 a Fs(\017)d Fv(In)l(ternal)44 b(optimizations)e(to)g(reduce)j(storage)d(needed)j (for)e(rev)l(erse)g(mo)t(de)33 4661 y Fs(\017)49 b Fv(Reco)l(v)l(ery)43 b(of)g(structure)g(for)f(in)l(ternal)i(function)f(represen)l(tation)33 4885 y Fs(\017)49 b Fv(Di\013eren)l(tiation)44 b(of)f(MPI)g(parallel)g (programs)p 3951 5046 V -118 5049 4073 4 v 1219 5289 a Fw(Con)l(tact/Resources)p -118 5398 V -118 6019 4 622 v 33 5630 a Fs(\017)49 b Fv(E-mail:)199 b Fi(adol-c@list.coin-or.org)33 5855 y Fs(\017)49 b Fv(WWW:)161 b Fi (http://www.coin-or.org/projects/ADOL-)o(C.xml)p 3951 6019 V -118 6022 4073 4 v -118 6273 4016 5 v 1865 6393 a Fo(8)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF ADOL-C-2.6.3/ADOL-C/doc/adolc-manual.ps0000644000175200017520000437747713037352546015501 0ustar coincoin%!PS-Adobe-2.0 %%Creator: dvips(k) 5.993 Copyright 2013 Radical Eye Software %%Title: adolc-manual.dvi %%CreationDate: Tue Jan 17 09:16:50 2017 %%Pages: 85 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR8 CMR12 CMR10 CMBX10 CMR6 CMR9 CMSL10 CMTT10 %%+ CMMI10 CMTI10 CMSS10 CMBSY10 CMSY10 CMMIB10 CMSY8 CMEX10 CMSS8 CMMI8 %%+ CMMI6 CMBX8 CMSSI10 MSBM10 CMTT12 %%DocumentPaperSizes: Letter %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips adolc-manual.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2017.01.17:0916 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginProcSet: special.pro 0 0 %! TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N /vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N /rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N /@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ /hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B /@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ /urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known {userdict/md get type/dicttype eq{userdict begin md length 10 add md maxlength ge{/md md dup length 20 add dict copy def}if end md begin /letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale }if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState save N userdict maxlength dict begin/magscale true def normalscale currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts /psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def @MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin/SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N} N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N /setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{ pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B /rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet %%BeginProcSet: color.pro 0 0 %! TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll }repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def /TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ /currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC /Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC /Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC /Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ 0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ 0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC /Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC /Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ 0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ 0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC /BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC /CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC /Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC /PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ 0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end %%EndProcSet TeXDict begin @defspecial systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict /cleartomark get put}ifelse /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder {1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def @fedspecial end %%BeginFont: CMTT12 %!PS-AdobeFont-1.0: CMTT12 003.002 %%Title: CMTT12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup /UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT12 def /FontBBox {-1 -234 524 695 }readonly def /UniqueID 5000833 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT12.) readonly def /FullName (CMTT12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 46 /period put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 103 /g put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 115 /s put dup 116 /t put dup 119 /w put dup 120 /x put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0 7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3 A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3 4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251 75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0 9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507 098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02 ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581 DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B 5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2 F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914 2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4 E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21 C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23 42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D 4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068 95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9 830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FBE3 FC1F39A39F5613D50934419B95A4A2FE1B6C18912CECB86726926F6B77B5C3AF F38F85F974A2D2145BE010EBB4A390B842BC222AD4A0B7FDD882668C04C51F19 13FF91E7CFA0A0F4E99A1944B272E0291BBF3F9ADFCF3F625B87377AFEBD9F11 6385726E908BAB7D1357504048C0F5B26251A1FA52F08BAE1D64B9FC32A684AE 896F3DD0AAE9624050D4DFDA25E581FB2630E8840AC5322D38B92F3E77B55CE2 91ACB8321BE53A2C7D274D63CF0C68AC833BAF4B22B26EFC197D4A893A5AE492 660D995DA9294C16BED1113CBCC18AFCB5968175EE2FB374B1AA261F22CD75F6 6E7295A254FEFC41A66EA6833A6A4EE0E75EF6B6FAF292DC5D2AFB61D5203DB5 4BAEAABAF39E9F98B45F22F2E37F337A7BA412807D539C91F3FD1AFB8E35446E DAB21346AF2FEF98F7751360B1CF9773DF4D22A358159B4D1B847C6CB96DFA5B 50A608E1795688076278504401627ACDC2FF46E28D21B53CCE01B56A7B0F0733 C07118AD5B74B4984EC478D154466F4C961C10B92CA34EFF106ECDB5189BE09A D99F93E225D13CE9B110499CE1704474ABDE45976A948C062D61BFCAC2A727A5 71CCEF3475FB360F235ED735A9DD54CC812427C8C127C7D4851509C5D64BA1D3 E1B7371330186CDFBF4CC6E06F7F4EDE286773071E2D3538EF3A83A81CD93D5F DC74E1094F1C134DF13946F56EB917147969EF83190A01C14E7931A897224262 D7F1036C4403AB6E534BEB0CFA2CABD15197319765790903C48A27B093D54A5F 81A075C12C838A1EAB0627D1EADE822720357965170D18730E22DD7E2BCC69AF A9C5C56E48E92B999F8C0A7E360C09230B4B36A863D5809D95060947C80E066F B27AB9E9F2946D419DAE3CB4524A6BB51D93415F564AE2F2FF543832B6BED4D1 9A2261831B9B2E300671587FEA36025143117BB83A291C32F8FB7ACDB167F394 C4C8430BBD1FEF4150C832642BA947A9ED9DE25B3EE962E71446AE6C07D036F4 CCDD472E3B26ACFCFAAE8C534ECFE72D837554E6A3715058C5A6F678BA810A77 48D83168A799A58D25152828A67924D6616687603654065CCC64DFAFF7F46C71 FE369C5148032EE953C93E3EFCFDC1745A4B0D02E1DC1F3F9CCD18126F3577E8 7ADE93D17777C86146471A8CD0DA43617B0C44B2B62E741FE91B1147BC7A528C 0A20F103BB1CC5D6D0121DFEB364F95955F1FCA60B20306A2E491B5425C8B18C 17DD0D312EEC13F5B3F0D7FA007B90524F2CE8FDA113400247FCA4CBAD850FE1 27A5069A99FFB2F85FB68E1F903EF5FAC2890437DEBFBA9D9E6E8A5D399700EE 29032E7A8CDE5F8D2B1B99B73FFE049385FE058311246BACCA1674B474281EAE 961CC5BA08AA6512A20FD661C95149D5E503A2B258FC9190DDB8800111FB0265 A156645C308D87759A1B81AF52876B61506B70D7BBBD41B174E6302367643864 613812EDAB0CEE0C206A9CA7275176B2D802148697719F16A13B3213310BA091 8057081F0EF2F1B5A8217F4132BC27AEF774B7A2E8AA6B6004BFE690A8948216 F788C8436C61F82449F9E0D7B07E39C16D18EB5C1A839FA1197C6DA258A69950 DC11E52BD24441F40CC4962AEAC4396B36976813C4F25BFEE05D8DD4ADCCD7EE 471332F6FA56F187CC52AECC7EB9A2BCBD7EB02C89CA4164C01F22068C9A865F 62AA72FD0D0882C820DB3884F6FF0324F8817A16FDBEB1ADADD09D1E11706789 9226DEAF569ED4A93A4CAB6C2316762DCFAA6A94ADAAAC1C611807656004EB83 8419BFE53026F68CAFFDBA768AD642C496A893C8023A4611DE4ECBE262B4724C E58D3197D2BA6C232955DA41DBE14E0C10896B3B64845A96AA7C4380B243A043 832F4CD9A16455F73032FEB40A8C6D426179BDBB0A59547E22B733855B889113 D20B2217499A50CCA993C019EB84DAE8FB96C9419A19CA40B3B4E29AAFE5F325 2611A91A9D5661FCD9DBDD8C7E2A20E6435D893568C27CCFECB5ADC0FA705FD3 C4721A5096D1C623C9E5FB49DB52F7D952BAD0A0802D065EAD230DD868779E5A 0085B841D8675E3B834EA4AC04239F68B8CBF70B6BAC2709164DDB39DC4D84A4 FF36F80BF700EA64F3EDDDEC6C21F039173A98507B058374B7F6668176A4BCB9 194D6636A1218FECE539C2E25B9CEC8C7F1B4E7FC7BC1712C4C3A8AF9DE4718E 48B12E6218383C8212D6F1C284FDAE5203729040134D3E7DA67C504B68225F99 D4DE82C816892E92DDE4CC95DDB2DCF002E0154CB869061F0859F9639EF48051 20A63E36001ED4A9B75D0296527B18DF12F892F08BBC9B30552C7836A01D6A64 286550906122B9CAB24863A18109811C8E90A7BBB3F540541B6110CBEBB8018E 208C30B29255ECBF5AB5EF1C3F9B9B8A4E33ED8CE8ECAB941BB2BBD47E35A5D4 771C947657E92CC242947A569DB58753AB336C7964B6A813AFE29BBD64BC6C0A C1A65FEAD1553F77FC44FF9B056846DB208BAD2F4C57864E63B15077F9B01470 A9AF46547C5887332ADFF1E28E1299E461716DFAC788973B0700CF59DA8EBCA0 5154C071EB65109FC3D0E5E0844E66DA63AC73CD2AC85ACD3774CA4E20525954 A4280C835E316588686B7EDB74EB2FBC6AC43AFB83A93F6DA00945D7E208952A EFA520D59CB56BBA4B47762D612041419896CD630DA2F43A90D8FD4ADDA3F0D0 F14A9065C5F2E30C13EEB34884E4F7AAA9A81767BE2CD7EB7D62BC7632C03D39 A2A66A375F01A7F283964D9824278A787F4805CD9439B4E6FBA5782C39E1201A DD0D6C46622CE3738DE55D6B7587AABEB673E52950195A15B63DE4B6FD2A83E6 1DA2901B8309B2DD5EB6179C02A64117D3B8FBA13A8FBCF1A36598AA3B2662F6 6A03FBF526EF20AD470D4E9BEA1150EF3D806EC617270F9F092B538182CABE50 C8401F3906C080E6316D8D289733D0F97DE56AD90DFA81E17257A739D0CE0CD8 0D1CF1AF75CE0A2D57F2B288F228E549D800E08D469567E4C235A52658E5D733 66FEBE980E371DDFCEF9EEBFA2CA4948E235C2CE537749F2E3E91AA2CF4E18A8 786E50E3FA61B827C764AC54E7BE320687CAAF0DF83D82DFCEAF3F6BEE277C63 72172A98F2BB8A65EAE57F6AA12005A4CE8AFF42EB1A3D25EEB606156F493A81 388AEAB31B5C4AA8D5911B8394E2BF334DE80DBD34ADAE1D8932A038C982BB98 A6F1C92F1FCEF8DC194C0C348A2929BFEC8D1BBAA3902948648A458BEAF28947 C1F26D0932CA6FEC7E5E651B65337AD929B23EC529BAFBECF6974CFD812198F4 CA0071089EA5E9EA24A595E3F373E5631701668E8B3BD1D95CE4452F1D103B19 56283A4870FFE6A84284F5AFC30F091E61FC2EE6DF51A16BD81B0382D8D48F2E 855BABA5C4F97873B3F226BDDD1F516327B5B3E19B439FBED785E96B2A852FD8 196EA27E1D0D31CA22E358367786A2C5A853EA67DB3946E9F132CC72A887DFC0 97BB9A4519C868DF65256222C69167BA7A9446FA950AE21D7214A6339F76BF20 4A65FEFB79AFF37D4AAEB9FDF036B131D75C6F05D9214C5DE58FF311F3E2A0E5 0ABC1CE1A91B68E89877CF66976B40D72FC6013F028A378E5EA1DD8AED310C61 5D62FA22D38E3EE34254EA4BB406BA5E944E8AA6F8B9B3A0F66CB285E8B37C1E 2CAC2EDB015BA8EF2650BA1EEB529B2427403307B7804DCC6790C15701C3D1EA 5E5B2FDB7EFA0C9B0166E0AEBE8B42E6D649FED3B2211561C45C4B7BCC00B082 50DA0B1FABFF9BD1604B37E92078FC4EF6D2C51229804C91676F2072359BFFA6 FD2A622BA8B76FDD8598F019F4F2E500DE55DA2F061A5807ABD7565915835ADA 9DE6490BA8F011824289619CE22D110217709B58007F35BB000E5FE5C963FE3E 6E199DA28FCE8D798DEA4AD755283CEBF87650DF0FB36DC1A7D58B4AFE0D6BF9 6F6672B2AF3605CE51492E8C4E25370A1A513416EF77AAA8CEFF 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /UniqueID 5096651 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 1 /periodcentered put dup 2 /multiply put dup 3 /asteriskmath put dup 6 /plusminus put dup 15 /bullet put dup 17 /equivalence put dup 18 /reflexsubset put dup 20 /lessequal put dup 21 /greaterequal put dup 33 /arrowright put dup 48 /prime put dup 50 /element put dup 55 /mapsto put dup 102 /braceleft put dup 103 /braceright put dup 106 /bar put dup 107 /bardbl put dup 114 /nabla put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70B1491 307A6D9A2F2BA5099C8A07762E70BDAA74BA5E2BAB260C1352107EB8A96523D9 4BA3082B99772D585329AB8645C3BBD11D72BA01F95CCF11C6DEBFDAAF7F5C4D 795F99DAE6A8D59462D759001BBEBB59AB0C322EFE02904D82B424649C2FA593 0E23281DECC5AA908E54244566055D418602EEDBE78843300158908F77C0AC75 9562065826D34C38C598D8626BFED7CB672F132E065E2C27932F709935988376 94901EBAEAEC410E2B36575A71EBB8954C3A90EEC264E6115950FC91D0D54999 323D8B4FF8129A8EEC3900A00CCB026E6943BE105BF5F504AB332FC17E568681 F423D1125A596766BE58ADC658888DB39BA74F67CE0E26C392220832FB036E93 7587E96684BFB78BD035F54AF71B2408241AAF548F996AD440155624B3EDDC79 2102EE58E1E27EAA0675F1F13297A4CAF514CB319E58D424A820B8F48984987F D80ACE136F51EF9DB05CDC5AC0DAE7FAFA2ED38C9134D2F4F0588576F522C889 AA3F4802EF6049A70CD5F40F3C2FC8352668F7F0F351EDFC109B2B38EF59E29F A4C8995A7D4C2A7523253C3C7F5FF07A058C19E2EDFC5E137203965F54BAAD65 F9DA8D4ABE96B36320741FF3DB1C8DB8BB06859EEABB1E99C090375589243067 4841E82261C933521C58ABD4E63D98AFA4F473DCBAE52BC7719D83D8ABFB8E4C ADFEAD32D01CEE4F860DC653F14878D8A38529C103D0597D15AECF0005002C4E 3FBAD8172CE0F5EFF5A3A9874BC4F499D8E159ECEB40F2C933B0A7CB50FD0584 6D1C0D656427CE887F5B53AD6CA5A5635AAFA04E5DCFA3CA86DD4E3F5D82CBE9 4E282E7416D8E3F694DA37922BC4EF7D5D5ADBFF3E57C96E2858F117976FCC60 1A98BD84638397D7325F4433B845D28CD3B0B195C4735B91BFAC8612927E507B 73774BA69394757018E1621BC0B981B55CFCC267F60F8DD7B6612A8A706E56AB A1400480ACD616FB4506909C1B4904CED66836B0A83EC4588827D5BAEE620713 0CEB50A16335A23F46910741B6B5BE0C82F299AB7BB6199472C38E2859B238B0 AF643F114471ACA09D743E5A3D30FE51A95A2EEC02804103C90E0BF376FAC0A2 FC46335655E5C1467F803FB38166E45595329E953C39D28159C132DD5AD6F679 FF5F1D214277E036524C2C5A8DE67479BF664E102772A72ED66462E3E858D4BA 5DA69DBFA9B31F3F8C2EDFD643DD071DBA01F18DC80338307F3BF0BFA2BD1A83 D0954AB0FEED51573636ACDF971FDC65ADE10FAB296A5A6847CED2A6ED037BAF BE1F7828C8657B8BEE4CE2975A9FD3D02B380B6E996F90751E4D261009789FC3 67DB5AA548B75A1398660776E2385DEF1516EC70BFEE52B9C4EC088F4A3EAB87 C2376C127EF6D1390443FF6D8BDED37211FF780FE6F02E8EF27178402D949126 63A43CAAC466DFA64EA6910FE2F3A24BDB900338B413D7B278F9AFA1CE86E6DF F0CB03A81C8CB649EDD1387313E286877BB01DA7120B541D5C72DFEE24BFB1D5 7D7FEEBC4A63D583CEBB4EEE107BC2C63B8A74953460059FB2DAFB1E0C7C68D9 611DD1357FFC08CB9123A5E53BA9871F5F6D3F40203D1FBD7A2C1638116A11DF 577502DAF1DBE392EAD6838875A8E3EB76132884E3F8694F63A400041DBDCCAD 3B9A25064CBF821D5DB8A7146CECBF594E686572F096922F7B16579088C822CA 1EAE16A4C375A90DA8D67683542DC17C370C107E7C4739CE53AE624C8B73B3A3 427652584AF6CBEE3F29EA15757C546C805B90B82CE8894C78E7BACC1B538EF3 3B8C100ACC1CB301E089F31250F0378D24B237E70DCDD13432295618B1A3913D 38B84F636744592C57ACE4675ABF04668202C9EF46B91DB4334C79195A394A05 05D1FC2A5A7DE958FCE8D5F159F9C10C81E334E246CB4C650C143C5F6FAD3E4A 3F55D6EEDAE51A9F1DBB0B7A154E0FFEE1611E6BB7AA4BB87B57AB6C0616901D 049BEE6A2EABE080B01AA9DD6E997C70B571D461FCDD2622945864807D08835E 09C47D03CF2816F2EF16D63A0CF51ABF27A117F5D91E8431C07E63016DD3E07D 636B03D59A692EFF6AC9B65D38BDF3EB7FD43E1F5CB2AC2D7F973DDFB35C8A0E ECF047C93A48D0CAD03CF5B8FAB625EB4A89B00DF8904D0D2D5406ED6B547B60 91D8CE0710F7E7F78E8D0FA27580F7F94BD7161F7C044A10634FF61D416AD7F5 790A96C69D17690DDC25927AEBC5347A7B3382126C85703FDDA3A8A3C1EDEFE3 C5A1F8998993058DFE6F91F078A440DDFDFB4428C8BD4320D82494D5D2B9C1ED 81E6055411B2C9E48216FF318BFEE4777366A5D61EC6626576922A5992904722 3DE287761F05AD7D79A9B570D6FBC92818DFAC4E5A236843064FB04DACD5E66B 3BC948D3F74672ECEE1E75FCCD87AAFE511487DB5E63A26F88DCF1BD3150EBD1 40049D4CC88444985A031CF3CA766F56E75191F75E1C61DBEFB5B138E56857FB EB5E39A579BDE6E17A77BE2EC9B6F16FC4D95BB1AD2E13918D8A446CAD7F97CC 6D1A3C4642C2E893E4CDF50A5F47723DC1378CEBD0048B029767403EA89CCD5E AB8F864BCE89F1FB5E3DF4D05E4E190BFB5B02F880123D2F39945F74956D7C9B 33DFB6DBD116E3AC7469A40F86812C2ADA65658459CC96D814C01EE13C76DA7D 3B25D89EFE65D320F5690CF5D3A196284E9CB04079D4B973AEDB38B099679127 A4A303DD65FDDDB1E35F29C2109370A7E0B8028D382EE84C2C5DEC9853E77695 D8D58EC939DFECDE56252110F8A6A744B5E992C3F24012E8165857EB151A227A 6A71F31DC8290444820327DD910482B2A186B56BA5F1314458216F623DAA76F8 0F3643987499452EF7D1BEE05BB21E7B68A1057B43E9F2AE8E603F205FA45F07 091E1C92D4D2890FF1EF8A2692CCA84735EC6A6681F866098110DC64D35D32A3 49997664D8354C97F76072B3D49CAB0A5687DF4555A17D39ABB5FDDCC10635DE 18354336302531AB5CF7A46F5D01A4287895986D662DAE11F57C34A7F7597F4E EC4C9E7D1B839428537CE2DB7668017845550C4EDB96276FD7DC962380FCC8F5 5096A9F01F371E1DD16A403432B16EDB1A085E7D5D981DEDFF7D384405872584 DFAA6DD25274723912725857B713EB5D6CBF25D5EE9AE91BAAC0EDF6ACFF9DED BD643F770FC1868DEBF3B3769B667D2EE5A34ACEFC95752FB9A13E0E5ECD191F FFAE1BAFECFC4CE28B051F31E3E275D7CC38E13568D03680323EE21BA6FD1E7C CDE396AFFC85D98D18D26EEC2B95AD2D1A7AF9EF8974F40A77F55EF27186C996 64AC11A2EF5E171D36C2B0C4E2BEE0170DDB77D3457B58DC47D4D2C00EEDAE12 CBF6D7A1019BD0C4D6FE8F41B10C993CB86DB57BD6FB64992E4CA7F63111D811 F819894ADC4D5A224B416544CC42F71EB3EAA5E2C8360AD06327FD830A082E1B 96A72325BCDC92F98CFF9FC144A6FB2990309DA3E7B0BD9295124D6880BD329B B232C3092F090345F3B8E48066E9A111A574CD53CFC2DA7C509C1D288D3D9AB1 3B76A49BB62122CD181FFCE8712BD11A993BD6315A9AF8834D56D74595698CEB 9B5DFD638BDE0D0F8E4757A65849078CF5E240AB6DA98F161CAE8F65F2A7DE2F 8818BCFC2DE3958D9FA074B7503F602CF2B7F982F92F5BFB12F5C2976E1A5593 A549B1F64ED4FCF16D41E086DFAC2247BEB8D389CC42382112C69A5891F72621 1871CB1C76B643EBAFC6165B418CE0BC09596F8D1F9C130BBA2EE82C2A29E876 202A57D64253DF08848115A5E55D63F33A8895FD5FBE782338A84F32EC2A5E92 148090C48AECC505B63A5AF45AF54465688A3B1A7D2576C38A284044AFF9AA70 617AB2FAD3AE6532A58B308E3C51EFB042E71A8EA33DAA19E2ED4873EBF66A61 77D96B7DB27D6A457DF9928F54DDE04D8B3CEACDA455F93016ED4F24 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBSY10 %!PS-AdobeFont-1.0: CMBSY10 003.002 %%Title: CMBSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBSY10 known{/CMBSY10 findfont dup/UniqueID known{dup /UniqueID get 5096657 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBSY10 def /FontBBox {-26 -940 1332 825 }readonly def /UniqueID 5096657 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBSY10.) readonly def /FullName (CMBSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle -14.035 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 28 /lessmuch put dup 29 /greatermuch put dup 33 /arrowright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23E7F1981C8F40F1F993AFEE2 6663A9C974837528B6ECA4C771A5AA1D8EEBDC8D8F230940E0B28324CF6175C5 13ABF95F5AB967FBE9A70E9E31EE0802E3DA88A164DFF2168BB7EA3A7FE5B39C EC363A72004964927B96D0263CF494776902D1DFA75E191E349EACEA2BF18F99 91F89CCAA0F0FD5CD2AAAC6EC2D24886CE7F292101BA85D6DF77EE64DCADA35B 5AE8AB39F88D42A124BA0A01A9FB6EE1CB0AB7116539B049F6897D9ED299EADD 537CE884AD6CC6F4E8AD57A6537C391E499820D54B4C5ADE9DFA7CDF70E80971 ACF82446C2BF347F37B3DB0275E90D3A93B2656DEEECC3DBD94BB29A9A10831D 20C75C68766D26284478A5EFBA38D2A9959FDFDA137F6B5110499BCC7EAFF996 E8DFC89BF2D8AD9E201EC10F4D88FCD66BB255616E26D330E2D01F6E9C042E3C 95374CAFA75F85775FBA913F648DBBDB16B0B9D62AB99880E42CFDDEBC0AC2CC 2D639A9939A2A86DF0A658791063AE2558F18FFEB2591B3135A7AF156933A837 3010ECB98263C9BA09FC92E8FDEBBBD5D32DF1C51F6FF00011B3E140F2829438 45500A0BD86905E54A755044217D769973789E1BD6E12F1978470D204BD5482D 0A77202D32291F70E746BEACA76CD32202CBD57B08C85E137F6C7BCBA00D5488 1EB0CD5AE282D7F502D5982DA0E5AC1C74EA1F7FC9E52320B66C7A3D301BF53D ADCEDF4544D7699EED80E0D902A27A9822C218432F64D603C3232D43A0C87F24 DCC51C9675CBFCEFE645B1621930FB3F98C7C334AA07CC79CC83A9B57AF6C3B5 C93D88ADDF291551897E4EC9C84D1B0AF2A4D502F23BD7735E93F39A69D2A6D5 8EEFD17FF5E01CE0F7CFDE75514F6E3F95F514D3E6F26444D889C4A281960151 3348BA94446086FED942ABD4ACBAE6AA7C1505D0BC3693A548C47F021A98BB4E 980E6EC4EFAEEEFFA0470F211F401D2A36C02F7DE86038336D51D8A37697280E FA0BED096A6722616573A104D7DA05F92F91A5A06B0BF90C512BEE37713B3705 8D4FAC7F82FAABF0DF318B71CE7F6EC0DC653C0C34149D3404EB4EFAB3A48CAE A2897AF05D4739613ACEAED6686775298C22445C7BB2237F182C18D510C36D2C 6463360A7DC14BB92666F2EA374E6E214B2E1A017CBF0E9A09E57D2AEBF6030F 22736461C4EF4D42490565E33258C012F44566E1EDA3122BCC11717D787C1DCB 813A52990A8EE6F7D55259891FFE54CC88CD17B802ED59F9DB82DB76E604EBB5 811655E1E4EA63DA8ADDDFA4FE73D029FE3FB444D97C335D4FDBB75CE5E415BB 55810A673A2871287C760C036153D42C1F8ABFE84B2F146E547F526A29ACB9F6 C8410C6A407B7FE801C4A0ACD90C872BA790A05174FD6390DE7CD00321CC3263 1F367C03359A3B99D934942718E5C7AECF0C5DE79DC5FE2A72C4C0D28F825986 B86B04C0CE65155256E22450810280020D6AE77B26AE0726B21B35782DCBD4F9 228F1B25CFCB0D684F88A41A5F28B97D06C89EA651C6950FFCCA7DFD239DCE7F 0D33A1D94BAA633FF8BA71583845A10CF9C2B1501B34FEA60BD85DCDF3EC60D1 0F902927A06EB13FACFB2DAAB4F4D982FDC97B3CFC66933EE781ADB8E291B933 A77749B9090686AD1F7F3D50B506D66C2B802EB5D44F9BDFAF39BB0DF19F2154 B681C58C65946E060BF62C8DE8E675048BB5CF44BA00AA46E7D31DF76FBE3D9B 0203650A69A157A02C584A2285506B4D4E82BDE9ED53251C9F17B2370008CBA3 6A75D3E1F3ED813FE539F30F47438FABB041498DD26D4FF92B196F37FC3D5A6F 3685B4EB5DE1244D71612B9606975BE8F01318D0A4BC11CC2CC5F987584C31B4 1D044DBB63E19A372C262362AAC74DCC106BA3C1A550835A7E941F64BE66D844 4EED098BC76CA1EFDA2ECBED53B9C8BD4006D54C7632E9DCFFDED29A966B16F7 EE2A6CDE7860E7A8EDC433146666D5EB32706AA39ADD4B1C437CBDFC45E842B6 EC5270AB9A27E2406AA3576B416D98DC00F0E26F80442701FC9CA33919D49CC3 F4C1DD4CFE9555AEDE578017E6AC1C70F9139724895EE0FC33B4D8D953CE8815 D74522F8DDDE40B5CE3D4A5AF4AF3B088F3B6257B5A45262A3CEB57FA8AC30CE 8797590FF418AD3A70BF9AF86DD803AFC54FB8479E70E3871E9260DF1DE867EE DCFFF387C24459AF4E75CA253E79E7E1E1731D779D84AD19E4DFBA9BF723C117 8F8E57EEAA2B95D724A655C148148D825ED632CED3F6F116D884F0D8DF3CDC0A B4DC36330AAD8585A4621C569A355A2266E22A68DADB1A9DCB62202BC12E5001 DD294669199E3263FD6FFF7C3741B8A58BEB0C20F7B4474151F5397C71610CDB 83E473B9D20A72B97F4997CFA6B88D06EA84FBFF57D5F619AAA673FC009783F7 19A262171E4905FD0EC3A7A74518C45C6732DF7BA8C0954876B9AC8AFE58609C ED1C0AD322A9DE1A56EEBA1E37E3FF0117BFF0D64C75F1F33EFC898543B441F9 6738C7F0B6A472E4C0A625CB46DCA876650C6A79C97013C8359A8672F0E26EC8 FC09B106D1787C92DDC0CAE81B2E82B33FFB755895940AFAA5D52ABD6D19AC30 232B61BDFC06FA517BB2BE5707F404614AF720B918353C6BF2CB8269ECD05FB0 0E2C574A191A260BBB6CFDD1AD5502FC9A6CFDE8E792D53B8E3E21956C685AB2 BA5966C0F3EB320F5D58DCE088F08DEFAA740F2B1BBDDC25524DB4EE35039AD4 C0A352240CC30769723A3F316E5B584DF5C848E63FE412DE0B0D77947E4C3166 3C6A846B4BCE9937A277919F800E3D6EEA112A8795CC7BE90E3541315C723BAF 657E2B7DC0CBDD9EFEA314D471896E8C7436D21402329D9B03C23227728EC3EF 1DB8B8F8CFAA508EC7DC7D6A832FFB65950EFACAF9338BA66304502988E1A6BE A8536196DD74E852E25E534833107F9EF48F2DCBA19775B1CA26F7FB4FFA3413 75930799EED87725F8C7D1B4B6C2436C4896187ED894042891D829AD227BCFEB BE1B66E26AC4ED27F134BE3DC1B0ECE42CC85E1DBB4A329E3DC5A24FF1E440C6 BDA63CAF3A4C3D10793306D1F05551F34BA5301F54BA9BC9DAE583B63A881161 B3B94A748288D7E12CEA01DED91BBDF714EE060521B08A8D60E5B3AC1D88705B FA509208296F41FBE987EFAD10DC56B07C9F9F6F04AB3800A7592EAC565E0B11 4FDE0724A0047D87D9D1844B83E136CF83C85497BA683B1816AFF7058448C29F F0682CDB58EBF0D34934B4182A6737D546AFC46C59C0568A18EF77D810384ED6 83B4506173313939D36C0D8746ACC0598D3AE26C0011A729A1B2C09D87B69631 BBAC5ABF5550B41EA682C5B4236D50B27E32C025D125E83CC29B5A5FA2BD3136 44EE2831EF9CCA6BDEF824D90A21F3469195538C90E7AAE8D6555146D7942A99 0C42BDEAFC111848E0A6C13DDC57BB0F835F8318131837843FB6A1AC331E881A EF72171581008E0FCE9A55130A5C3FEA9D1F37FACC97F618F6F7454F56DE9D5A 7253AB242C2FA5BF3C2455DD98D21D8095A160AD2911193D5966B9506EB4C3E6 E50A07D4F496A6BDC13CF3BE724C401622DFC61F6DD475C39CD2FEF75699BF28 BB90E193425992AA8B7A450C58F8A7FEFC7CCD28E4E4F57B456C72EDF6682F92 90B0A8318C12FD0217A2D71C0062CC65708DD051487AF8FC707CC452AF4F25E5 EA75F2BED899C966EC7B4EEA8034F15F1A67562984343A5E5CA5F45BA341B848 F1CA442AE3E6E334F4CE114682AC75AD69F3734AA741A14E10786E0C91188689 E08A372C956C99922730540DCC4BEF927D2979DE1EF562C82988BE92AEF5E44A C2BFD2D133ACDF2CB3ADA52138D1BFBAFC0B37FEE219549D5000B5EE67A7A6DF 3F51E507A66D27E46A90124A95AD04C92605847818F36EC49014E6C68190EC88 F0D2543250E1E4C511CC9401B9FC9B13EE5FAFD92BD3D6487A4920149B3F8551 5615F97ED41AFA7944FD6B45913D46B6108E2993E9A30ADC07618DCB65888045 CA6CCF99EA1BB18A13BC24E3E6787EE8C3C8D568E1CCA938D0221FB77C9180F7 C00D63B362CDFEBC665D3C38F70937411701505606277E6FBF7808DE6FE0DFD0 E554AD42693CC5BBD5B6389DCA7EA68D67B38904158BEC5423545C19E0C81A34 8EBF5147B79876A84AC3D0A4D1AE373723B1A6177757D1D2D52E58D6EDAB3C54 E4B4073DF4937D0CBDC2F7CF6CC6D3BF9154315E3F63BA123ADE18B8915C8765 670F8AF5A38DABA191C13038A054154FC34FCB179957036B4E13C75DD68CAD95 2C8099471118F55FD6410E1D2DD31DD3FADB4CD9826FABAE131F227566DC65BF 218AF5C00B3FEF3BB06C05438D73DE938607DF658AA258582C140E5F323C6300 D265964ED3D5AF3C584AE7DDC4C7C6A08128E44499C6674B5539D64CD8A7EA5B F28CEEDDB9CC188FF50C6FE9DCA874AE0050D70077C57B7244191E5D05FFD879 24B6F9AD29267499D2905DCAC5DB67B68828C5A9A9F77ACE493A864D22F607CA BED0E9370928D9291F27B92037082E9CB7A9B6ADBF4D1E78F718699B0044924C 566BD16FC63DC2EABD8B57E8A90E65ABD6974107B6D9B3081CA47B122A984B87 3B46CE68DAAA56C4AFD42D5B1571D915D24B37050BF852125DD05BCE57097C42 A5C80E741E0B78116E74110DD0DB975CA505EA0520FBB638BFD81D6391C93B3E FD15023D2ACCE8CFFC4880EB579B16D9EE06F7E9AB2101EDD90ABC95612BA11F 7183FB49AA6D12C2AFA977825F90F2C3EFE48A15DEA7C3EF1F353B0CD7D8290C F5C13A3B49712519B43FBDE68831F78092AEF9B693F4EF692318C3B5EEE0D386 37F005B14A06B02CF8BD7FCB2754BFE26AF95D4F53DB5482F87632D04B55FBE4 0A5DBFE3B16C59FF330CFD18F2E57399A0C5C2E59A022221BD6D7BBD47479633 24258241C5353E9A7034B3E80FD9DEE30542C6F3828D241D2DCF02D05572D765 CE047E39E15F97815A0229B48D47003D007C038A701B426F2E3C802694CE942C 04674B0BE07B47695635E22603A32CB5B865288667E552CF096584C8D3862EC8 F03A973E2521CE26D43692E077AF754B6D88DEF4201269FC6D8794F1C0656285 0D4361E39969FA0693C7974538AC20904A1E453E40AC1540BC50CAA7C7505CE5 61C6DE07021BB243916D46EB2371FE0F399DCE8D40EF3AC639E163D73DBE59B3 9D1017DB135FC74DE810CD31C8295FBC3A6D4F36EF40D7B9FEF70122809FC499 87C1912649A977C94128560DEAD116F044FB138FD90C7EF1857EB25BFD694089 D60132A499D84ACCF0F0017D200FBE0354AFBFFCBD14F6F6B363C1108A05D0BF D4F214B8F0EE49C06B20E05F116FD4A142F936E2740ADEB7CC2E4C291926B066 C8F1017272042E5A7DAFF4C7275364754F99ADFA14F8377D41BCFA9587CD3896 46359AE0771230E0CB26818EA69AFE994E438B8BF71263EA0009469DBA246AA0 EF1C0C02C0786628DEEDC78059F97363E03E873E51C2A05C425748806ED13BA7 7100488F436820DEC363DABEB2F958E5B358E771B25F7B32B80C6E9E67DCB6C1 DE96E0EF6ADFED291228CF2E291B38501CC5377C78487AC3D53C1283C81BE59B 87F2C053C551628E29EB7FCDC9B38C8C295BF79A73BA852BFB4768022F19F4BB AF0D753BB151A02E889F9BC3CA803CE35C796879C75EFE5BFA0F69D3BF25ADE2 D4876CBDD76D870794F6182A6D0BD20744FFD00A0E88AE2FABAEC05AD8B20989 EF38B1EE71A79C80DEEF573D7243787D710D1C4FBF9D7993F0E4900DA616AAE1 189AC104C048CDF3E1C34E3302F8244D2F27ACE762898C0814A6584C444D3B4F 249F08A7812ADD85C3C2F9A96E473BE9E2A22067537220ACF7BAACA4CC005DC4 F802046BBABB2E5D0B4B6C4D45A7012912993D9A93181711962F5C593421732B 1B17C5255E0201E7B07722B275CA3759427E1A8A62EEF25652B0C2EB60394D67 5FE7CE796275345A29840F9F3A1A345CE0D4988F6F83FC66522A41E2682D0698 5145104D457FD4FC10FD1DBBEDCBB0DAD9D2A87128C6BBE4CA9E456FA72DC703 80FB474F8137F48D5BE09158ECB322D11AF532C2CB27328E077B0010A72FE439 C52DED6E0858634C558E0BECC26456BCCF0D12965418650D0214522F37BD6A66 F63E92A064A30E4D15948CE14C28311DFA579FABC642FE75E3B0DD584A4F5732 4F5FBA18AE12FBD20B654F98F8618FDD25F42AC897F9B6DFFCAE4DB7BF3FCD84 17593F384793F25C752B95939654014E202A9B7C21B0DCEE1B95DD653694B752 E7411A62397B71B9D0436A4B854353CBD2E52CE87B78A47A1132B98E818289F9 35A6FF0120957DBADA7277779E846C0EC537E9429FE7121B58DD423EF73876FC C20BC33A7B0926A4B2147E19C4455E61052575C2356ED0B34DEC0A0E9AD99DD8 113FAC67594203F8D0430C3E05D913A10DDD0A35188DA48BF79F4DAA2B19E099 1A67FE98621425B7AC2C56054B241A02EDD5ECD11A866F1860D6BE46C8997B35 7C2AEDB0035F82D94FBF48CFF7157B2874A92CAC0FE685F1062F8BF32807ABC8 A11411FB3024A165749A18F2A6B70D7FCE13E0EE7AA3E6E48E68D835B6A66232 EE3DA36DB906BA94134A59F53F4EFF4782B3B7F9E80CE94E356A0E9ACE11DC31 9852F9C280A369072CC2784A98B60B53BA73139F1BC786B7DBF62AFE72C8EF64 1F82CDA5D7F337734509CFE6B783156973A1FF02C07EAAAE06A07CA57FC70010 DCFB7CE05214DFF8D7A09AE329D8E030E5DED1F4148C2DEA719489D77774EE4C 3EAB71B8FCF8367A10927368DF465A4CE8F389829DCA75651DC6B19D0F8BA3A1 DAF8C0B05593ED1A1DB7AAFC0BCCDA1343D71602627E233C30B23F7FC9CF0D5B B460A365C760C2FFB4E1D9F57E0B34E2510B5D0E097915D4BADF85F47DC7F494 7CE354972CE758B722416B636C056361E0CF130A54C6DD30FB81AABEA1CB087F 42300CE35E132DA10070464A16034E67AB05F7ED2EEC9F0758F9E0ABDAE2B705 85A861523B1372CC8FC03CB1A1F6B6DA1D65958175DAEB133892BC804EAA6CAD 24EAE1044D2BFBCEA0F6EED8894CE73539947678F01518EE021061A1A3889CD9 FEBA798C324FC1E8B3A7049CAB9DEFF757C5D021C3E35B4970A8426551E50D57 21891518DF3AC30577D0A92A58236DFAD603D454C627491CECF9B6ED2B7D80B0 B57C50978E5EDDDC7E692FECF444E20470FAA606F25FC03E530E49115803EECB 321631D27801BF5965DD14F27161C8A6A717A2C6E3F4981766FE687166ABF4B5 FC4702CCC77A0459926CD934B73EC2F1DF68623214E5AB44C8238DAFB65F4EFE 5CFFFF6DE5463CABCA2F80FAFC70BFE5BF44E3290B49B22B26FBB8684A55391C E360A4E00107FF99F7932692E18CBDC98E0D1E8BDC17E25DDB3D509828B84FFD AB9AAD81FA94AB80A0EEA8656219FBD42B797558BA77BDC92ED6AD6EF95BEC65 8A90EF090A7B6CED016F31BE8BBC162BDB5BA9BC8633805116C2FA35D00CDA68 145F18F1CCE9EF7877E48FA94C6E355CD62A18E5FA65F129DA02DEEA576F5408 BFFB787A0886352F140BEE54DB652847983EC4C496D624605130D5720A1447A8 0953A5DA2523D7BF455388D404BCCE6CF761EE2F7982EE377F7EBD25E6974A69 095B123C4AA01E293E324F34A7B36AA58764F42F6E42D82C460F5522E99569AF 06A708F7CEAC19F00039DD3660C7E94D13D9E8F3BF9FAC0F7BEDD9169DC97C19 C16EF276BF1DAAEDE320A054F6F5B934877073FDB50BCA209FFBE3A3489261A0 678B9658F8649182BA4DD7D16E5DC259E3F508317D2B1B27D50B5F8E93AE8BF9 453BBE8FD563B463842187A9B2C04618D40E0CFDD1B23AA85A32326493DCF0F7 022C4E8DFBF1D77A634F74977E6CD6D3B3E036DC6EF898745860CC48E55E6259 06298C05A8B0094D7548BD0A4FEBCD4ED01809E0CFB48BDF9A3C2A6E03DA735F 5DEF39A01E9C18183C34B5BC870C06862DAB8EFE4893B9AF7EC84F69B0C95D4F B1273EA2B4C4C59B2FCEB1291C549BC9ABD6241D2D9C19F55CBC8D3BECEB718B 49F2297D416D2A3401DAAE7510A9D0ABFCC711F604B29E7601EF35FB6F71300B B918983BAD18079A8C1C34FCFA63CE7142DD70875A523E378F7CBBFA3387FE25 CFEF435292714A8F491E2D0E400496D5E85EA99AA922FAA53D9D03C54706B5EE C50FECF8939B041A8223FBBC9371D1D672EB3B04BA0C2D2B533ECF1EF2168513 008BB3CDCE8EE707017EADE0AB1944BDDAE1FB609F621928A3A51EEF53268490 8FC3EB793647EEAB531A76DEDF92FCA9AF51CF0C4DF238FC6DEE80DF3654981C AADA75574B2BDED25079396928F948E31B89CEA0D44B1E9FD3E9E8CFBC3572EB 75304F9A5C8286AC95FD505FFFCE931B60115BAF0D060B8CCB23F49CCC825175 CE2A3ED37719230061EED83F7858FA73ABB05BD003F42980FFC7D49BE88A3AC1 357834C33171533EAC38A2303969F4228CBCB5C3134C59FAE8DB8EFA707B43D3 EBA7D9183C5C6D73B1F74794F79A77A6779090AF0FFE0D3B0B72D091E55A9B84 DB541D8D299C5C5F56DD69E7635073B64DC8D76431B25774F7345DE39A3F1936 FF1DEF5402DC8B512036A986387D8E96689E912149A342974F55952915E73526 5413B1CB62F544C3791E2FE62B0384FFE65725DEE581FAFD1F33A85B6169D479 4B1D73940EF19353EADC57AD57642E6BCAFCBF85D00F5DA548080A33F5289EFF 0E1449019182C7C6A1D52CFA76989AF5F3A6713E67E7C08467C617E31DFA524A 30DB6978E480D5A156E3EF0EEA375E66905D49892B70588D75FBF5229ADABAFB D771DC292FCDA019EC65DFBCE76D7590ABFEA5BD633181D694F8A1F7EA92932F D6EA731BF0241EEAC306DB1C2695D6DAFCD4F28DF3EEA1A39343618A5A822B0B CDB03FDEA6BBF79910583873ED6993A2B631360664A35CE2BF47D21F6A7D4E95 C2B48DAF3C087A889420CA64CC1B060E260782BEF6721F80ED7632008080C78C 427E8E051B99E95D205AD9D339BC29504830F03AEA815ED1812E2D15E5335915 D4058A952BE760F64560F50B146EC0F3B3FFB1F9D7B2A92B393C1329F91FF6E0 5E273B5DB89549315DD15AD9D8500D2132EAF983EC746E9CD69B8EEA34F54482 F30DA3AF073C9DED0369646F6B36693E9A3C0BE490EB3E80036CB39365B733D8 759590CB8309079CDE3686D31928C870512F628D998E53AF47E4E541A01B9E89 2454B0E292178FA07A6772E96B5D7284B8EC383230069214BEBFEED880C0B57E C099D813172E3F553757B8ECD536AF7A652BCF0541218D571C3EB1A0503604B1 8FA624CFCB41C4AC208246C197114FDF5F688F5AF40DFDEF78BD5B80F9D79C8F 744F224DA5E87AC97EEC6E8B4CA921C1AAFC0EC3E24C38BF6D64E9C25DEDB62A 581199E65B1D8E5F59136D8FED9BEF89C391CA6409D12E90D1BBBB4BD84130D8 16DB1255CB254A4208C2E2C56EA5C8F822C591411144CE72E06B401A96140E70 8EB3654A3C66EDFFFA17A94FFFE3D9F9FDC50062627895DEECB32E5BAD12A1D1 1EE312E986835692E95913D53D235A93B70CD71ACB0EFB065D71ADE0573B012E A2371452E23091C65D76AAB3B0B47746F1D774D00F1B54515F06E60CB81420DE 1D91BA212A683F92A5534030BEB136E2DED01B58B8684AA0C7C98A674045257B F43591473F853FE3A2A43B7CC317DC7BA5D46639668C6CD6A238DC736A95C247 199D4BD4160575F2CD0EACFBBA826D65727B80673D6BA889F511DDC232DA306F 6F29C43472FDCC1CB26D7B4D25626628C929D871183722A407F733D30FA3D8DA E1D6A93402DABCF8609A44D8EC3699796B3279E13584565CB7FBA5DBE8374F7E 918DC7FC542ED9B1FF9CD954782571A626E3D929F48B5A3DC8585D0E05BCB51C 0527DE69F25D2F0BBD1DAC377C191953C2A71DBA3D4CE7D41ED8CE9D807A30EF 3934E76ACABD113E5207338596CE8A2C0453849D263D829A69E2B42AED8BFC25 80F3B2A2A8D84796AFD59F24BB95AFA47B4E9F707C6A0E127A7C8ABDF641EC33 988AEA67532EA54264268C8B533DFCF4305560DE27B747738DEB5042E4F2DE14 5E3ADDF01F441FB953C76D5B35F2172C2D1F3B2B646E36169A81A05C1D3F56AF DCC73887169596E18937905E67C507B30B2A2218F6A2E3024344970D2509DA0E 2D1214C9FA0C1DCD350A45F8F8357AD91D0BB121D5C24886C5DBB08EC560056C 03F79212824F512E50FACF0D9F1BB63276A1BA4B12241E56B33A3FE1C885400F 1C00274A2BA3822993A905C673C4BE6B27AE1BEAD8DC1F7D948B36807BEA8959 639BAFBEB368D75F44277C58C6782FC9BCD1C2604E0DBD202E6464262E353AA7 8099D4011B944E8107209640A63DDA2D853D45909298E74B3712372EDCFE2BE9 3D2C9A1471E2390290C2DC14B8771935BC344D9BE36B95473424F098575C0399 B7471FB409D8F0A5DEBAF481CDDAB4A2541096B1240EDC18A0A9E339BDD3BD76 41F1C08464513F362DE2001EA0379435EC3EF27EDD8496D8D9E1C4161FE569A9 48A72B672FD613C776E54F784263D550B08EB76389F4ECB922EDF185892B51E8 523F033BB639A33ED829A54643BC10D950E4E021D1FDB9F63BA438229E4A7CFE 99FD537EF90387D892B0683C3869D063588B2E1907702C666659A1182F675FAB BAA79D33704A0F5D888F0DFB95EAAB983F5D66C32D71AEB9C37A0948BAF29DB7 71069155EAFDAAAC79EFA95C90202A1B9D4118794C56A405BA024ADCDBD7B4FE A45EF769C5CA8E9D02F6E1DD01D4A9747251F7B54E79C2 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /UniqueID 5000832 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A594210F B5200157C0F02340FDD61392BE9B0D9C46C1A0C4A3AB05918672D6D6020D3A88 8C18A08AFA6BBD8A513A3C06A29A0FE923ADB6F9996F3516967E5066FAEDE5F2 8317AA4F40CE23799373B747829904DF9040ACBB8C3F1F444865AAEA85F7B91A C0DFED8DFC14579771303207BE44379760DFA62661A505B9D7EE626DDF66EC81 DAB29ED969A22B385AA46773CFDEA40371B01D28A4713820D615BA8AE4E63D53 09E361BCFDFC60A29D8900A5570DCC154CB3B3B4C114A198A8AC748A436DA85C A0B7C26E6872AAA76CD3E50A9DFB413BC19EA844F79489880C120B5EEE3FAB3E 8E69689DF8AB95889BB3FCB88DB5553252CD8F6A76E622BA62907353425D855A A2225AF9855F7FECE560A28F1819655CA1B88E1EA0D64F3BF02C62D0497A8F45 0B102F89D7429C99663336E2DFA0AB68D12BB1C155658822947A2038D350F86F A32836B68FB7078FAE07C07ED488B6EF06D5CBF919831D0A982AB1C0D4999123 FFBEAC65B6998158F01376993BE0BEFFF76907B58BFEC47E3B56BC839E4D8C98 0DB119518F8915D1A6BBB918BD5558F69C9F1850B2F22C6239EC18490F137C07 4D7C9C058457FF0757E1E1B9D9BA4B060E1F94F3955700C92CB435D3CC0690B1 AAE543C4BB721B91E3B18B10A96E8ABB5CFD28CA18CD9013BC80F1304F376693 092414F780B84AC4426BB987BAB12917E875CE90FA8C1FAA9A0ED29053C0BC98 37D2E51B24B22D4EBDDBEC18889D30DC75DDC5CA281DEDE1D0202C456E917DA6 35EEFA010F66C23FE9CD51D3CD318F065A9D1579E8C73A784355C51AA841167E 16BD3F94B49CC123DB9B934AD53A8B906FCC084BC8DB2420B3E3A28D735C5CC9 EDA9057F44BE1B4E6148EB1BD98D5E3532E70E13657B72403B7113E091902C83 68DFCF1AB2546A75D92490BFBD98006F556A8A17204A290A562AF46CE779A777 F5C352BA0DDD6C54A36A49D7613E652A3C193AEE4A7BB4E6AF8867696AEFF716 7D12F372090179CC4FCE6D741D1858EF35C7225EB657589FA42ED5CCACFF30A1 135626FFCB8DEC1F62D5655A2941F1E48A71B8CF8BCF06114D9A5A4BE0615A84 6AE285146BF0217DE1C0DAA7792ACC69CA8BD1321563424C158EDDB75FBE395E 4C458D0F3C2F56C6D7B86A9EF1CB111C64D322222318542435994E636A9CA902 8631860ECC1EE9D29DFA6285D190314EDEE61F171B62E764A95D332C25D5B0C5 00862C4530A0AD9A4267B80E836C032BEADE20C001B5D797F1641754620432B2 66A48D9DC5076A5647A8717926FF533AD4C43573F57CE1711A3DFBC851B33180 13072D6BCF97775922C0450B28BC43E1C713FD1E8EA959AEFAD61DAA53033F9C D4ACDAD318A82BC7FBEC9EA7853CBA4A7DA5DF215475F5192C05A884542E408B 7D69109110D649A3F9C47B9CF29D8D5EB5C3AC0DD3FD1B2CD5F5F474DAF42236 8976ACBAF5037EC11F9F79E172832F39783AE2C447F5915E05693165CA38869A 7EB73370C794A6D42B82E32D8BBF1504785D8EAAAFEA34B626723F894AE365FE FC46D9018ACF34CF9BA5D7A93848CB388660DF4FC881B1B21EC5E2B3B3FD9771 81B7D93B7F3FC685091B5D95E4EC7E279F1F1A14D5AF5E6D826E97FC91A0A25F 4787CC36EFDC155035C98A727AB19F22C1575F132B32E829D10EA96E9E829652 F04C160CA0742BF5887D633411CA2297E29ABFD3800F61CE35DB545B3EEA755F CC82AB381FEB0FAD37B9DBBC40F6BB6B0BEA8202AD6E876931CB6E1541925E05 0CF6DF9E4F4512359AC977BACA8EE7F72E226767EF41EBFCE302F4CD994EC08C F08A883287C458642AACCABC766F5862B7DAC4CAC1DF3F07DF4404161F8C5058 DA20F5AE483F9C7CA35B39296D48E85D5B989522C95B86E7819E24BA236F13C3 B53CEF5FA897BB4B1B8BFF2815EA730FED64195A91418D7AC2E422331DDAFAC4 8E79006D139E762E83D1FAF55AAD62247659AB6414905BF4E955F0EE44F2805A 95A1A3948F3C1624B5F9AFB3AC7F6591690FFEB4B0BE0BA82E6A9895C58A97DE C9CFCD8E818A9F89B3DF4AF5A0D88586E1AFDBB2DD1A1A289CC9216E57579B5D EBE4443993EE94A4B4817DDD5D1778ACFDFEE1FAFE9CD0A8B8E587B3CD1F01A0 271DA66ABD7DC025FE220347F9D7D0242DEB7DC1BA1AF124665C5356EE9E295A 34D30CE02F15E45F1353E057BCA77E68900465D114CAFF8FDE2C887702F30792 0087B3437AF3972C820FACA78A9D16064B9AAAF9939A298FB39CD63B35324E7E 36B6B8B26622B93D6F979E29B4FCE68B369DD8FC3601FF75B5163FED61FE8658 F7DFE02EAA94EC4D06941A0F4C6C2FB302CD059BF7D7804181BAA5479CD054D7 4D97F7BA2CBF80FB4E719710BF2DF8DB67AA01D4EE1AD1ECA291696631017979 602FD973E1A67424B5CF48327FBA64DC13A0826193FE43287CBC3305AE9296C5 30FD504D95C934350CAA3B6D148135A883BF18DF35BA2EC4624567516095C077 5E3E1DDD3029FCE2CF0251EE1BBF17B73F2022B997F022EDD98243D4723E072E 30FDB1A4F1B28E6CF318B496AC77604316D67EB50DB3BDC0B3A663581A4A5653 3DDACF528A60F9A3BE803E66C040A9272A53548760D548D7F19E7F97A02DBD81 1945409BCFA6BAA9C4A3A1CE79EFB1977C07604B899D0465B5E8A0D8BE0F0D8E DE5E0BEC4084F9EC5DC7295715237BE87A2FCF27267BE953C1FA5A97C2F5189F F87357F4F5AECD3FDB807AFF1FD10DB3AE36699F9C270DA53AFFEF94FD342BC3 C9CDC662B2DADEEA8C4193BF683BF00FECA9813C53C066861920F007C88519BF FAF66C699CD3AB202AD09B14748E6778F8D5795E026B2BD0F8DE5FD8C8FEA722 0CD352DCAB8DEC5C1B8F1E2349790F3D8FA936AC9AC42D510A67435DB54F4B51 6F557C80FD855F1733F5AE68B689CB43A28D606F657CB06D3A266AB7AC9B59F5 905ED411A18C5A9C99C42D0752564C79ED6C41F198CDDFFA6E534A743BC279FD 86758B39E00B1830F980F8659F5283A557A996D0EAB4ADB79D5C02B229479E42 6BAC210AA4063213AE030CE8C705996177DC20AE01EC9C40C042693EEFAA423D 9E5B27692009169E011FB5B5212405EF4FA73B15897FA511574DDFA6311731EE 925661730C15BE7C487F363B4B2FE480CD066D10196C808FB8D5C10F7B26C0C1 84375B53C5ED12BA49D22357B2CE33BCABF00CBA36D68BB53CC1FEDA4E030C60 6E73D75F724DDEB4C1D21905A5765460B6A3F52E8870C2D0AA008C14D3D25DD5 83DD671C769D852575F0A73AFAC568268B3792B65FD609DA87EC24E17FA6AF9D BE5BDDAD0A9071374AA9C7B52B2950A4FEB6DFA186CAC7C5BE6406EBD04D7F56 2DDD9D1F212927D3FDDB9A525239345B4FA4F7870EA072AAF73A8256354D7F51 5033F2CA224AE0484BE4140325114C59856E72FC53694224DB7D8B0B1B32E3BB 7E380CC0A3C34064F90B5E8A98C534DF8198F13FF7C28928A2E0F6E45F76605B FCA04579EAEBBFF110B325BB80746631E6624638F099D992E936F5ECECF6ED81 EFC3E65E4F65A3B0F84A2BAC9CBF6C084F3F0E691113C05417459A5566F4815D 59DBBA11BDBDA6F94DC633A68E0A11595958F6B8E22D80259843BA93E66C26BF 03CC9F1B6F7051B993659E36A6E565D387E6C0167675F0A258E531E1E01AB5BF 3BEEA9D21940DE85481E34BFA4366A586E38E0B6135543B5B8E77B8D164B8AA0 AE5465CAA500B3D7A49F58FF86E51910E82EFD5FC0FBE36C67ACD225E387B99E 27E3CC90E4F0C090FD3B8E8632C167E64C73E496B5737D6267DFD3B8F8564A9A 6252249FD67CEDEDEAD27C7985DA954AA742051591E9098E98C00E8750C994C0 DE3E7856593897324F3FD5BB1EB1077FFAFCF2D0C8EC241BD6EB18D2BCD0CB98 9C09884646E2DCD7E40DD8DB7B1EB609E35BF3BBBA5FBD2390E4FB709657E9A6 247DB8FC11106793C4E3F8883F5F452D3475CAB591AB983F8D2C61C5633EA632 F27AF6E165E2466FB524E0BF69392FC7DA95D563B0DD95BAB691BB29CF24CB51 22C72309C4588DF08458CE6C40B61C7AB51CC00720D84B39C85665701E6DA4B2 E89461C0A855B92B115DA3BB513A65D271B179926E8EA119ACE42EEDF0BDD6DB 0620451A7F8EB3AC9F51FF6BDF6D533A64AB89BC50FA5AA26EACB9CCC75C0A8E E8156BE8B0CD9EEFB39FF503D4B6EC897E7396C90E3AB0591B5CA971B652C779 8625BE773B30F6A098781DCE25931C3FC4DF001A9BCBC42AD29A4B4E1441AF19 1FB7A0656B4BC688F4751D4E980518467F75516E239407E10BD6BB117AB09313 7F9D4C7A00C18C315CD2390E3C4003316494350EB75709A9C7F15314598D5172 55D67E42E0B4F4D88AEE9B9F5E174B916C54FE84DD0F5E6A5B70745B8E45714C A5278E39A1E6877C883C12D1978B46E3BFA26327216A1B5797679E44B1C9635E BB5AE3ABE0F67FC9632DEC51BF2901FE87BCFE4F0B29E0CA3DA665CB4F33A22D 8FA8BFEB70C97F0AB9BE4F8B8D9860D2FB257AD4DCC6E9C8320874C2BA5D6B9D D2A6EC70335D370ABDF797E20E019213D198F20F67FDA9973F7AD37CCF55AAFF F72A7D173E12D5DC0335D56082A69BBA57BE7143CF4E8CBD1B1EF055DB4B7A4A 4377AD89212AADDCC6BAD5536BFB7059C76E07C3C8840FC638CF5B5C85EC182D CDC46715A446F8D0F6371D2562383DF5C3067AD5685E0F5A2C1234A375AF77A2 7404365D41C3DB6691BD819911F69F48EF33034BC4DB467415B153AB080208D6 BDA93A1F7B798FD29F50BEC1BD114F6AD1E96806A1C0AA1CAB8B6B8F9134A078 8BCF99E2CDE156C56145E9211C59B534415314B988A61FA7CBE775164DEB8FDB 48F33BDF2C183D9683AE3394D680861DF4ECB0625424EA5E3095B66005BC5070 12825599842EAB0706958E690C2EC898F3A8D2865AD79C2F82E1A8B2ECEE35A0 A0BF1B2686DFF839B09D64156839852901983D54AB49A76897D4F60C79616FF6 6E68FE7AFA84B076798A9F6ECE7CD21E9EA7C872BDE7703A963E0E4AAFC7B039 EAC715184785BBF63A98DAA75B76AB447F0490147537D77EF481C304E7BD85F3 507C7D7817D233509A436B57D54DDF0B5AB07CE9AF5A7DFC2BC3867FEBEC0648 9368847A1163D6CDCF4C87E26877072C55CB8BC17D2A700198A74B846E9DF8B1 B359B90336C495A178093D139C7E91F6CE46BCB44EABD8E07BC73E8DFC47FEE8 3805809C344693D9DF9E369382A695849B1D73C4CB1E6251F82502E4B5E4126F 8A4B7EFD2C353E0A5DD586FDB22429FC663A060B23CA7B981E401D2569B7A8D1 555351C99E7D7840E84085FC8F70233F5629829D154B683C6FC8BFBADBAD045C 005A74E115F7CA4848F7B48D91906FEEE516CFD0B4159AE8C9F18AD2AE804599 DDF1022C8C88ECACBDCF0E2D19EEE29B22DE7CCDA92BADFF68E0EC59F8DB25AD DAC724321974BEF2B8A418E72FC8AE9D835BE355103749E8A484622940E3D817 F13FDA82A2F47197E12883746751E80AC06FC6931FEB6BD2F273D93E0EA3EAB3 AC31C5D522DF96CE9D9EE0332358F54B62ADD2F047ED49A0097D95AE3CFD7030 AAA7B0A2CEB8B4E73180D1C8EF1FA1DDE5DD02EBF34F36D1BD1A4AC2D289972F 14F701BE97E0A2043D0560460F13CF077E989063D195FF81B0D7E4442EA56B2D 0B8F8E56275D363DB6F319DD1B25CDB4ECB4B0D09B560FF43A19CA05F8FC512C AA56D070E1CDD10F2AE8D9B808FC0AEC7007DC3196988FEFD8C3E5049D3D5482 E465C56955570325754C343A4EA73A18852198F6685EC568631B304D70E4FB5A 9D7E29AB23DBCBD5EF4D7E44E21F53FD257387FD63E606C89680D4FE62ADFAF0 127C5A92A54E9D7183391B44967D9C7BBC0FE35950F29F67DF75A41224D90C6D 1466C2D7C0C1DB076FA5D58736C443C0B54DAE7240DE4D72ABBF196F5F0D315B 5925D3967F43096A438759918B6F848F0512E09EDE8828F523900159F39CDF50 669988E1F5F9CA089D92A1DAF81F989EE0F1E7226536AA75895297C0BCC1A738 4B7E28430D73BD326D612827B102063AD1E1A2626D1EA4020DD674B364108E6B 0F3AEC53EF38479532D61172883B5FA0A105A210D1858DABD41F18EF8645023A 44D4AF05557CD6290455EC9518445EED550F58D39D55AEF7CDAF4006E69325C5 254F6B5F2E6FA0C1C3DE830B670534A875B6F578CDF32D5D6D790B50FD3DC00B D6F6D4F4FC37AE95462939BEBDD4456B546F7A02077862F18FF18D26BF0FF227 4F42B22EE885B4A6FC9D84B6D295951B005886B64002F88D1088B6E39F8B4090 AA8C821105A5ACB3B26219C5C1D635FCB1B8BA682A31485C9C38A28341650D3C 271A019B9834B230E597B1BB592116AC9FF10213ACE5802CDEEA4FFD09C2D13F CAE5A750E5C9F6BB3093062AC5F70C8F10D7AD30FCE1A9DF225F28E14EF964A4 DB790DDAB84BE8C466D1DF235DE89D464EF4EC6C4B3D9C428957DF5E2D9E61B5 471B4464217B34882686F60EC9535D8EB311353C096E6A2225B55820C21AEC0C 8321622BE68B70A4DA82680AC57B9BB4A82FE61804E414DB40C1C402FD048ED4 CAD41F2F4446F3452E36968CBC585B5B396428665BE33C15DC233CEBC2CA5D2F A2E6F9631C368F6CE747D016FD1892A94AD4FA2EBB41EFD52D5B14BC98B19001 C760882155075C6159AF5D87901BC46D44283FCEA507AD911CA05662E83AB3A5 266D7BD24FEEDC89C83C78702B462ADB19DE8A04315DA22B057D24706413E582 29A59AF41A514CA0C83ED9A0A283139DC02465931AE6D52062B51972BF506BAE 3F5EF4AC4ABCEA0A566F589FBFEA7E2C0A03BAD84A949FFD4D5B2C8392A0C67D F3DAF8B4F197B0D44C66792433C3DF19EE7B979224C4BFB7C7BD253DC5B8B6CB 5C89559FE48006DBE6AD9E2E77DB794C30629C383BB938ECE5082CEF72364D09 39BEB8F44132A0AEBE5808CA6BAAEC14D8FF5D9A2168441C99C79DAD09F5C7B0 26D3B9104A6A6F04E8D99512298FB69C3637BAD5F9DFAC232E1E05BE6ABE2918 26BADC118A79F6DF40A03DF7A13EEF18C40C039A2A8CE436489DEE2FABC22952 5C421C98DE1E611C78ADF498EF02A63AFE7C390932897488A0C8C241CE8C2659 50544C374EB92D723C6597EB449B0BA6880B4F5B3644BB3F93D745988E9B1907 ECA5B98AC8CD9EE1E5798B0856EAAC0BB189179D32693A47485930CCEEBBB4C7 3E20FBF804E6CF3BCDA54E8A547971424A2D7B7997C2510E90B56BB4D75DF53A 7BD08F1DDC8BDE53755FF670D5C061C85778C5D9505CB0D8E353F5ED557EBC4F 087587214E00B2134DD46C874040B808F41FA7D2C1C9AA8756CDBECC2C6E0962 B2824DD1291946722C475BC7F9EFECC7A359D5301FF8E3CAA7963EF6638DE699 1A72DDE036AFF018EAF3DBFA5BB7C71BF8DFA379C6A1BE92D1EC2515DBE47E99 89B2B4E7E3D36C3BFF93A26E7A6661D74C7AE33D88B66067BDB9744BBC0AA8A9 9F57C9054D3D014C5CE74EDF262DAA02FFCF92599EFAE822D4A18B461A02F692 9DE7EF5BB5490D9A3BB965C73540002EAFD98B6F1A52901DC933EDFD4C3F4289 2DDEEF1EF8F39076254542802CD6A52B8964BCB59C72DE1EE5F073B38C83D2C6 049C84DC7E64067B34AD457E7CB0FAF5F9D2D3583A57092C6B8424A9C463D562 930A3EFE583D302095228B4DD13690D8292F85D59F7D4E5AB81BEC0D0952754A 34A9A04FE68A8BB32DE36CD37AFE2CF397C850AF82467A9E2DA3E1BC76247BCC 3206D91AC5C607C1E01B1F6653F0A31466107AE2FD46F3140AEF378F7AC5AA6A EE92D9F5A2A6344AE5B360EC9C76B5022767167CF7876C63878DA7D069A6E09E E0F69C5DCD5A790CD9DC3B36B84696304079D28DFB8DAC2E03B65A1BEAB7E983 ADBA1008AE69397DA8235F0490EF8B09118189151B8BC97DA1BF4EE327D20B72 56E8D19561D88FF30F19C4BA6A05F2E78D9BCF55C9CDD6FC45401105E4416E95 5F8F0973A67A8FAA17EC2B722151EBAB1A189F4248313EC0357698AE8CE71C53 63C90B51216002F9D66A146D0A0E5FD0E13D3E83CD4DEE1D5F7A84FDB9A14C79 BFDD94C306F763E5735C65A61EBAEE50C1B2DD737675BEB243EB2F66950E0069 A6949A243318F1F242F9E65BA9C507750225184FE687BBC5D26A42AEEF17ABE1 C0CDE38FB5E7950AF58D6039E435551133BF6A42E73BD15ECF37DB8A2454D443 BD8B716F5250685B770D128A67117473A53EF1393E25B92D2522151B620F96E4 D4722A0DA0467573539D50B2A70CE340BB5A72DEA08A98AF182E66B66AFAEC1C 532FB2B183905D4D4E10852C139BA8732725C02F58628D3AAAF2916AC16E116A 1DD4F853E3D045450D7B62BB683F23C568A372B952867C989FA581DB447467F5 E0B9C3001D9782DE7672F086CA1F256F6F42D313DC1F0E8D6897D64FD18461C4 6F4F93C9B72060110857D3DA05B3E96C96ACACFF073F8850FFC5D7B67C4D8786 C8404B37468DA553E966459E2411FDFF89F9A93C80B88C47756BB00D0EAE2F2C D166DC31BA8184C7D210722C2258415D8B6C4206652A41FE983BEC6F29A2F33A 34A087B80B04D23CCE4399CFE635612223B1FFA6CF47F9AF0580D7D76193EF50 C48A8F8D581EB9FC42DC2B8D565A5B37B601145B6C4E7E0F0FDDBEE7F067987D 284C8E3402032B99D89BFDE801C7653017BB3B04E2B9478D57377291E65D36F0 7A0236E8203BAD2B158471B51F60AB0ED28B020FE626AAFDF3C0E9B2EECAA01E 1DC7DF229E57E081C2822A2A57463EFEFE087A6CC0F9C5603B14E1213C689B62 59987D0DEE0178F4ECF77D2C033DD351F2522947B427BD83F23AFCCAE97D9A2A 33FF3330885267BC1182506AC0028B285F1607CF0AF4EF76DCAFCD8F6CCE08F9 013DACCB0C499ECB61EF88C4021CC2DB1B475AEF34D6FE2DB5DF0D7D51613F21 CA0DE9E764B2B08A3A9830ECD85E923DD8656AB96E7DBC05D067A18C727D8E0E 16A8780E05B57EB25DF311F7A26359AE82BC0F34FBE960B4E9A8F8E618D0BFF0 CA1EF79F536B0F64CFB569C2405DC38D3416D21285C3EB77B8B4DF1E92F828A5 6711D859A10099FCDC75C70005F7961D5036DB2BA280898657837B4DB795BFBC C80FE0AB4533D59F1EE0200925870D358A7C937310188BE2932CC9C55E85901C 1AB0A68AD980237A6E3F7252A939463D54FB0D6B609EB08D0AF17FF81E4E5A91 FE9D9D2485F20BA57510B8BB2380EC9A0C6DE99A8892D8C8F6B8EC64EFABC7EA F02DAB4BE8A1E9CEBB02C56C6ABE767900C2639975C7BAE0277F33288B69E27D 6907C7E309A5BEBE2F6D421DF42C12F848AFDCD83337131B53745FCB3150A348 D68EE3F9B336D729640107F644584975FA6B364D5E798784D02E8801355FC227 A547FA902017AB68667FDC164ADB7A2990BFC7DF0FC3CD98599B12638E769C3E 53138E4B0F47CAEBEAB344337BD4660F5AA395629BDD3EF9EAFDFE6DA1A0C00F 770C6B46E6F82C36AA410FC30478DB3C146EDC288E4429F65F1A019C25F0C756 8C7184D4FDE23DAF0853890DC3509863144746E818F4EC53B69564D3DF8BD1BC 1BDE3555BE1239B8956047390AAF3CE03A4CB67DBFC95F97DEFAD2445E6DE91D E2854539BE394FB3B8AB18CF46ACFEEFFA3224A5483A206E207A3E7004FF5498 8251933F99888A53533474E7A32C8BB2687C6701DEAADB70F62B31A3E8330EA3 1BAA890DC7F9F8BEF03B12CC45EDE397435848C25A35FC2D32FC0510091FF49D 5618AF851808FA65D21C4861E9BB0511D5A2B507091F1D3196ED47BA72536A35 AD0E7E8D7534EC69CBA3AE132F5B95DA6FCC5FB5C185CCA42EE8B5868B2117AD 98B7A4DD9B585153522D15456FA73684A9417870615505D5B0A4D60F9E4BE603 EFECAD2696A59D4612EC15BC1AB77442A4403ABE2947B56C8C77E15B1759F07B A5D5A14D17A0321B7A12975675949359BEF595F081AE3BF444A66B6ECD6A2D75 82CBAC4B1F5E5B7D87184EA1D81A3BEECC1EFA5C9924056F33EC0F7D971A9880 84952BA6086197891B888799C02320E8D702391562129FA1BC130A598A531E96 8CFDD77325EDFD3C74334173E62DC19DD99DDE157D66FD42A3C04EE4E8F53668 A2149638E5699BA1807A8E1640543C130DC51BD41AB2783E9549B6E792B15B1B 4FA721AEDC558F30326F1BEF4D1B367324842DDB72A40774599A5FD62C336087 307534F9C359E585C56D4881125E726537A9EF24745577AF0DC5E47853753852 7F017FFB657782214FB820B1B5075C509BADB97F3D8AC4CCA2A0F4F0EECD4F32 E16173B67B5CF26F8C6A61D4893637D9B75FBB8F253E3C4E65BA40D4020C4FB1 6D26517097D3D658AE3700B0ABCCB516BB89A8B36B45F42B98D163D601328D32 CC741350077C96419988D199CA3AD9E3D50EFB77F5768DB061A7FFF5E0E51DAF 32D00BCC822AA2F8AD8F94CB767F00D1EDB94761302819EEBA326EF0BB11D295 E4E3541006D141314FBA5D746177824F9884A1BF4AE8B304BC350E33AA9A2157 EBB4F9BAB4DBDD62C21C937E6BD40575BB9EA37CF6A567DAE115C76C322E06BD 16DB828E77B6939263472E5BB4D820B1DB4E22AEE8E0BBC244D7CCA195C14268 8286370EF5474748A7B5A29D9EEE6BF0221279FA0126466059853F7FD77B432D BD9075919D4FF27AD2FBB89626F2EF79B25706B7DC9DD363F0AB2D1230583B1F 785F8CF0233696F2547010891F8F9C49E32692D63408801D5CE0DA864606C3CA 0662158DA95B10F6621A79D761D65E13AB16F33E1AAE3187E3557E6831099B9C A1CDAECC0FFB2CF3B5DBBDA79353F8D1484D60B3F3BAFC8302E1C0C3B7D60EF2 91615F5EE3E817EBBAAA5E86D13FAE538FA9E76B3B8213C9244CF737DE76BC08 0AD71BB3252C2C7A8347D0DB6EBC93691A2AF5F881B31B07BBBBAEC325104928 DF2A0352619917A068103A20D82CADE3046D34F4BEA1A581DAD91F8F8850E76E 8C56B71473CA85D0D77E741180B1F2F537B3DE53D567DFEC7572D6AF00FE6EB8 B915643710D0BB7555899D26434C884FAFD5CF2D965F0D22DAB05A6A83A4030A BA9C15E98776098C87C873504F16A3C7BCB3E0D8F3A0D44CA03FFDC4FCEFBF09 957589E9A0990544E4AE8839EDEF40DD9D5C135BE8D6ECA1928084EF890546EF 4C33C1BA1B63C53ADE8020B7934B2931BE0AB98A236742B4D70AF749E52C20D2 5A713D1CF4F05099FD443F76BA30589EC7A110D522674F25CAA44BA3FF05B69F 178F76683E61595EE22B426F5826DD2661A27BBF739C4E96996E5B3DCBD203D9 5702A6AB99516EBAD2929A189D5ABE729D6A11DD93EB4543F9E4520FE0A495CC 7FB1A98FF9F8AE3C3D3E0D5B9141C20B6E319340E1CDF81BBB3F74000A486D9F 58976F94434C1FB7378198721CED2C699EBB94DAEA23C2E21164ECD8504718A5 3285FD33BEF18CD92A79E723112513FE37F35CA27B17BE0078B737DC34F55277 DDA6A97889234F48F82CC07609F9EEE08BFADA9B07B757CAE62A2AE0CB9417CE 49CF60C7CF14DFA467A64AB3F9A0D0839BF2B39FF74BB51BC42DD2235DA901D7 611B7F1D28463526B60707DF42CEF94FCEF4BEEB244B376F918E20CAA0971821 F7A6D6905B6240BD5D26EFC4793F20918038354B09F306633232F25F6FCEED3A 72C1C6823ED9D1FCFF6B514106DB7A39FCD726558F6775BFBD7C553286936931 0B0DCD1E48793350B09FDA9DB743DACEBACA1D4EE9212924CF1AC013899BA432 D0D945DD6969CB7B7BBCAFD8A1BC8BC551FD607C3A04CDF77ABB560BBE6F0D3A 1EEBAC91EBF3AC68F31C33DDAFBE1A712ECE33EE8864C64A65C5B5A87EC9C829 9532C5940356F75B82B42AA9950148CD9BE858A02F9C388EE3E5E8410051665B C22146B2FEE436A8CA620E92E25BC10199F0CD89E2781DF204B48C5E6956B87C ECE5725676BC0485A09A968991B0C8CDB09277442760B55E030FECC30CDF54AB 00EA6752A8B698B722589F91CA56DA217A31F953FE18D406AA8AEB410B34778E E114FDAAB49679376864B7DC75ED9D7265745E6CAB880D4913A23D0C168DF095 E2416A0ABA73C7BADAA5BBE9AC95701BE66F63BC5BB7DA3284B5B7189941369F 272DF7878BF936D368FC55682B6B8B33B0DBE86A3A80AD33A33E4DA36537C969 76AB01FE1DD82FF3970E23577C8E774C8AD9594B1974064DB156CE05AC8E7E4B AAB9DE55C8AB1A3D9B16BBA8E4E8B5CEF0D8ADF84C734F7907E250A3E1CAD203 0A0D4832D1212D8CA3BC5B3D76762313C9436C800182E5A93C5D3A24F308284B 0E234106635664C7E5DF937B9D8D98A67D49F53BC444329BC8ABB5E8C6961F5E 72FEE5D544F2BEC13894905292B9EC19C974A08B9BF5C1E2EA478E148835EDE9 6B87202F1F6B3B55877AFC9D9746B815690BCD5495164627EE5BBB9A23DD6588 36931C104C10D351F8A8FAEA675664835FE58EB764B91D12BF9D2C8267B5D6CE 6A489CF99AEDCA3C0660DF163D28D203F966225E1384EC568E54962215D1A28F 606B8950A75F4A129D6CBC16E9300F5E83FBD938D0E1E2F73BC0F8DB00135295 B0A518C1DF9353CA0321B7127F7A350898493119DEED8BB409A110DBCA1F66DE 54F719D6242444B458DA27A9AA49B9C4D8CF5A375EDC3B1CCD7ADF8800A7163E 9F6A7F5C204B380EF7289D82A814941F681C1148C996BA7E368F7F1937FB9A15 4381AFEB68F80111C1097C974B982FC858089BAE4CDB2BC3E958C5D3001C524B FF5A880974E78545536F8CB01CBCD0F2A4CF577BA57A89B698E93F23B0D7EEE3 A5409970AC77BF5F8A5D50E383940C4E361F12DF13486B4A1101BA6050B6CB9D 44C7D8A286623C25ADBAB08D55E3797DF7FB51A9195766A7AF3A09EF4C847A09 28E7E1A2DDAC848482A63C75FAD9E58BF72753ECF4C384F249A1078F55840275 89546C5890B41D4E81F4D9B8B3BE959A7A2DE4FEA0442B12641FFD3484D1DA68 87ED7AE850750B341F2A828A6F089834130185091DEAEE4BAD6F265F72BD9272 FBBAAC850132C21DF031E07FB8708A4BBC6D4EBC2F7A59B5129658A9AD2C6EDE E30227FBE4D273015247CB18A33CC7A30BBD9E1FB50FA27AE3C4F91333D6CD38 998B138C5D1C49704DB3BCF43E6FAF5AF4852C40503B760C5F6EE22129B04489 5531951F9CB2D7F5807147B17D858816E0519453A3FEC84040750E05C9441368 C4FDC9EF0E4DDBAF098C86F96B1ABE7432D545E9AF53C5266654D1AA1F135726 BBD461ABF52F64BB66BA1F4E364EE43E7CB72C7B3359A67ED9CE79EA162AD085 854C2705B32B34BE00AB235F86D20C6E6FD862C1459FA054B87BCEFAFFAC6169 9EB04F6992829F89F0380DC61C43D81F6840B5B910E41AF4F9B02EE6612C7CA6 0930FE42735CA6AAB20E07D7684C970E148639E4B830C94C872E611430177840 8DB9BC3E61EFC420510A186A2354BE67E447C0EF7626F1AA9F444C42FA999DA5 5DC5D24FE3516260837B0D96A6AACD6196E6FDF82F6D5A8212780BE16A2076E9 B82A0B7EE0E07C42445EAC4BAA8B9A163B912E563C8827CC340A0D2EA11471B6 4F5C710BFFBE1A8B420FA7E1B2422DDE4668CD934F18158C99020137231DC383 5638E2EC898234064334D9F5B3684BD009F220F44B070F3F09862181F856AF6B AD2145DD3BA304C9E1971A2A3297F13F7E6F3E9A72069A1E4249ABCE187C907D 166A41E4586D25976C386B4DAC6C3716C9CEC571BA2936BEB02D17CF36FEAD79 551C7FF37E42D16F280F1F6A6F15DB2CBDD444EABB7A1644586449D7EB356F8C B08AB3E7089B12C71EBD3F652111975634987C0AFE4699946BBCC54DAC2675AC 80A18B0E6FA54CC85EFACFEDD05744B3815E3B4FB4F3AC104170479F407079EB 97E49926C2535FEAA17FA32D31BBBF39319A0C85AF0DCBA440CB5BF150A8BDA6 764DEC6BE7F261EDB3167C5DC672D33371EB10C38C8C46EA137B499845E4CAFD 2DF397EB48FB610B75D8FEDF8A24A7F73717214513F29D994F826D09026726E3 7DD102B2C3FB09B48811BC1A958499F2357FCF8BB4A1552942951372982C3668 FEF6084342F204CD518B069C8DDDEBF7B9386CB7A28A811B9C0CBD47BCCDD6EC 5FF66EBFA59422A17124B098EB147DB25CB27DC3611CB7976CA639566E089D27 2910B220535A2C0A0BE10C1D3BB0AEB23BCC5120B81A724F27A0AE304393AA30 04CBEA27B7B934D5C057BB254C3DD7E89B8EE8E357A1C7255D26ADC8008ACCE3 A3B7D04EAC8E402D9CEAD62103E5B189758128AC4A9B15FCE7835225048F25BA FA3E6E2A8682EDD32954278F4DFD4FCDAA1BB05EA1ADAA4B94073C6FEBE66ECD 1DDA3524F01E593BD6B8B009704DCD337A258204311494272A5EE06400F712AF BF8F5B5448BD46D4962D04D299E04A8C057A52FCCC003C4E7D1AAA6BCCC43646 00CA7850B3F0557055ED2622DA3A8B0C372420C84245C33D14F3BB3A977896CE 842FA7F7B8EA8FE7F664C583B5BC52FC92C044B2CE4FACE8C65E03F278715AA4 C9369E189F8AFF34DE9D9E4CB3AE78FC81676A1001FE53DDFA3450275FF8055D D421A2090565BB8574B9AB0F501856B200783E97B6393E8DFFAB3AC03C2A8B00 3A34A729DB81FD47CB3AA6BF4333943A81EA2DF2B136A50F49A230BBF9F6F533 D32A29C656B9B1CA9742A6420E82C28ECDD2D12DC0BC5D5158264067256A2EFE A46075F783C598D8887E9F43BF18FE971EDD1F5674CF1FE40232CE4ED09C0C19 9E6B2270C5D3649917C92A7B534DA55205665C0E10CDEAB0381F39F909E7FEC5 4CE730D7932D30F803EDF0656F0023DFD85F7BD11ABBB3674B3BBB189EDEC83D EC68E9E38F794ED66FD4AAE70971FA88219B95DB83AA01974331A270C1EA2533 2E2AD42DC1583D58EC394590C6BC69512F58930B9E2108B724834FE4FD2C7A5A 4D4FEE181D484102A635D897498028C0CEEF51FD5D278E47CCC60E4F6473561B 1737604B01F5BB52C6C2C2D18D913E56D3955890F4317F57A1D0E9D044F7E2F3 C45013A9E58A478D8E1BF80CB01106C8D1F0607C30E9DB3BA19A56F404C10509 D822B488145F032FDA4128A4A31091200280DA6EE20917CE396ADA39C8CA1819 821839D5B679E47754CAE161DEF122C196E7334847B98C61532B8A8F87D20DFE 5DC217AD4988F97B3829C35E1DA858EE379B36E358958C7B4BA5D37A6EDB376D 4EFEA15912EF7AFE22BD4CF057D313A210EA954019A74A210D0F8A676B928A88 56A399EBFAD9B88FC3C5150D4FC23690D7FCD183449347ED757B6FBA551505BB 8A957D3DAE33E4255B385F11E1021BF6F42A0B988EE943279614408C4DA03CCE AC2B33D33F00F85AF973E3C7106DE30A0B48968773D9167BE998607CFC51FB6E FAB883BE5A1EF4FDAAB41FC67E7D80B8712DE16497DC524E080A58D39DB80C4D C61FBDDABAB6D16FB6324C1FEC1DCD80DE8119EA4B468552C68A8DFECB0A0623 F03590A27794D5BD382485AF166CE5E47BB944F71C07507D80E69962C8A9A233 EA0F1B98DAA12115BC53103DCE6200A425AC8D1038390EB3ECE72351316146B8 7C82F39B33961BE09EBFAA099E3A19AA5610C82FE9B6F90C2B6BE97946CB24B9 694CC6D250D448FAE7133A3CB9784CC4CFDA98EA6FD2CAAD5F2919BB844878D6 F7DA9FA889CD1E34870FE4F5EF90B7E4B27260CFC8AD64CCD9389A31F2510A8B CD9337E7B850DD1103FFA302D75CD251701B242F0E37778B3DF36C2BFA92B679 873BD133F739E534D63D6EB08FF798C4E25CF3641D5E782D1B0086F8B2658BB7 FD328434006CE90AE5B52588466A53F764030AE461F11CBAA7D35FDB04B3CDFA 052DFFC8321F8FA7623C3BBF48E298BE53E38ACE4E9ABD688E191E7BC4CC125A AB7A2036892EDC2364A6A2F9A030A919CB761BE9220C93D276C82F4A44F6328F A2904EC7DB390B0E4C173AD0F8947E1CE0D37F097A6B62AE560591CECAF3F13D D3A6C1423BEDE3FDB6230D3123380AAD5DAEF18BE256B239B5CDF06432EB013E 2C69FE1C96EB0EDEC5C416291A390CF7FF446410FAA0026919FB5C4A2AA64B1A B81AC2F69079B04D77F83682CECA666674CBE5ED00D7FF6B7A11872B45B2AF7C BA585DA6C4748FCBB13C6C31D8270645D3756791AF6A1B6D03176BDE6ACE2A6A 349FD9D2DD7B6D5ED1EF4C1FFE84236F4D110EAA414479F5A4CE89B8E52E6AC5 B490D7E3104D196F10159FD74DB352E67D8D5586B6821B3488CCC94928F50237 ECB4F9D426688903ED714090AF12A8135A4AB63DDD1F5300A71A3D672EC13159 BDB1E56D7262D83322EC0AFD712A0E172D5136076CDCECAA88633AFACDF6EF4E 8A9D2DBE691E761B95D6BDD655216BBD5CDF274C42F33B9C9A47F8DDE5D9118F 43AD79A27254DAEF3691D4C9197D61A76941890AFBBD69D8E9EC3D53C264F073 000A006BD6AD76E148CD5370A882480A183904DB67A1A5EDBEFC0F19B22B5FF3 FE3559751BE6531DB049680C39C6B1A07C90FD0DD8E8EC2B07CA95CDF075BDEE B801F01459540E1B0297EE8A83215E3BD250048B1EFB8F590550CD9229C72BD7 39DCCF33514E38669C996C8578FA2B5B2FB20DCA334F247017FD6B7473B39524 23C849FA934D92D7CBE9114BB5099412F4CB3FD1E5455A40F6E26C554920731B BF47EACD5825EB401D389AB5615E626CF04D2EE177337D31394D277487AA2E6C 30D420F24AA836143C320276B8717DB0EE7B2FE315F42CF508BBC563DAB681FB 973934526BED421A363204AA0398E16DC43B4A000EDDF4A19D32AE43C0DCAB1E A9D7914799E88D6DD9BECE8A4231CCD8A5F8D41CDB831E3CDEAF632B186B06DF 40C078BC83907C00F842E21C7DCF58B935E5346E44F150F74831E454144E1508 A40B4FE50719E10D2EC8470FF46B8B6DC9CC1C63BF66FA48EDA9CB1D8D78C652 704D1207EB8725516241D6EAC26BFC27F808AFA1DDDC8CBF7DF15A88DB683459 31217BA05E17A0588B08DA15D8CF7BF937221D0C46A6557A28B10E868B238023 EC81599B72E3BBC25ED381F7D356B7106E560B24539C546CE1683E4FBE26A436 8E8BC6F9DE39528C52E3CEA24F47004DE14802333F5E807D04054A282921AAB0 909E9D60745A26B1FC7CAB9BBE2CA14CB75C69DD11F6760850FDC7E55590CC68 D483AC598DF70152BF9E943A3F2A563A4BDB8D3FD135E0B7E427A94158585A22 66B8ECD53F4AA633CA46D8791EDF13E3D867684A7058F26BC2CA6AC32FE6238A CFEE43E061F3F8D82A8DB49263E8B63C331F4F1AE93179549C5BAA81B7547ACC E20C4D03FA19DE1FB0F654BAE4DAE2DB6421A29D973D1F8C89F2776299CAD5D4 7A469CCAD16A293EF5B08D36BFD2DB1F1D498C88AE4471523E4171C9740553D8 E27217A1E9ABAC86239FF49946E86C549BE9A8FB08C1F04C943E464692590C97 460C5A9F3EE205C89A5922BE49F0B7AA54F4AA3168BEC018CC26D5A9A3F81D5E 4291EAA3E699B497B5BDE2BA8567781FE4BB03BAA86B2ADFE7375B1D065BC068 AF73BA6F3F45F776567CEF62A5B14ADA543612736F29F5AEDB5A3D027843D3F6 A6A1493E2DFA00B7E7F99F306F505680D89CFF3396895B3564F8EF1D411F8912 4EA42842DC10A3223265A21C0F2EBDB10F2A6CED4F2656DC701009FDEDD1FA4B 8C1BBAF7148B5049CBB9941F3B106928CFC8EE865A63BA004B14D47B2747D648 C51295BADFFFA70CA0A3BCCEA23C55DD5B7D87C5CD420326893144E83FCEAC68 8AF23BD2EDF2ABA261C50BBB9FD259F0C57C268DADA0D1E80357EC3502536FFF 262BADE386423ABE09C4BBDA985DC4D6F66DEBCB62DC95B3343FFA27DCB784D6 841A7CBFB09BF421BAFE39BD684ABDD2144CC7210FDAE5641075C8E5A6837FBE 644F13E394530857A1DB1FFEE3AD748980441F9BCBA21057087E5516FA87ACD3 BAC39FDD4B153A306983849D58F6B0849981924912985015446111F38BD8FBEB B9C9A2BDB9EF7AC849E5E7F7E1E7913AC3C10391EA852DBFA1DA038DAB64DBBB 51825992C05C29FE85AA5A44B4B5EF333D0DB88E80A63294315BD9A3A4713A3C 88F5FE2150D6016265BF855C9F9998E4D09320324BDCE3D1423BAB50E990C273 6D45EA11F7ED9B984D7B47070C851B885DB14B484B94DFE5649A8C178ABD1971 E8D1FA41861926B5408AF51B701779406DC55C0F4705EB4C634FA90B8917CB05 FD07B0F785587559E1051BCA8389048B4B2E8D2AB97081DE8B54A4C36BFD21E1 4A6CE505868B4C3363A88CCD8B18F5E70F578286ABBADCA6F9B55C7DA9B40F69 BE851B251B04C721C1823237CC9B5D0BF020A4684C5D030A6EA1AC4C8D2E5B53 7029CA6DFE89646F7F2A0FB1D8F965AB22477873845340B9699AC18A76AE22D7 871C598C63836BA61EC16A61F393B09E74B3D9FFD9141542E040621CD4994288 8CA8A3B8207C22F6A513BAD26087B1B130C46574E11A85C12081BE5AC77CC571 DEDCEEC0EEE4A66984CBA769098FC4BC907F16CD222DEC2255B080B4FFC64182 6CFC268064149D1D16226C650EBCF1354F5F526CD27B767E603321D2196A0557 9F49A971A929BA5DBF330591574501F7C6A79F8DB96FFC02C535DF2F96051217 EBE9B8294267C7B7CFA4DFBB7393A6A73DA113294123B55B5498A4E109F61ED9 0781FFE54A4127B9442B828804290A6A153C8453A0D6AD932D355AA0C3BBD0BD 4343B25F30465B363B93075FFE2586C911E20C335B382A83C9F9445DBB9D6292 D939222481EF3FDDE0EEC674D6D913B343B322833788F7C4477B2458DD357E1C 324D041C47CAADAFE5B163A2F7074A050EE5C71223BF9EF48E34EDBCE703364C BA738C75F9B82B32E3A43E45DFD7A895BF535ECDC1C7F702FC7925627206DA15 3FF611735A320ABEF5BA6886CCE72B08CC5F6A5715C1E954C9C728392602D0E1 ED7DD6E3907E13E4CAE5E994C9FE046BF691344B8FC17E694D9B3139A39FF132 507DE4E1BFBDB0A668CEADFBDFF461B33B93074F00F7233E10A6F1675CBBEFB7 B46BE23D26125392CA7F5ED9B5ED27D4C4E18154CE42779A631D5A92821C4A83 0A57777EF36A32F20FFA7EB7C88CDB05F9EA36EBDB18C12D80CAD28C442492E7 A89D2DF0C9C9302CD53E8311F4219C795D9C7D47AE56AD9837A8D0AC81DD64D6 9A9E43905B58157FF652243BA17DD6B271569B4EC96925E3B1471F65138BB68B 6610FBA25CD5DCD9EE15E57E3C1AAE674347C2C99B2F01C23B4ABAB079BC6FEF B7602811593888DEB0F8ACD4015419A9889C5CC5DB62700B4266F889ABE43AC1 2F579DA4FDE6F5781C2776B1ADB3064AFD892FF21FEF1FE050B3881F571DCC91 94873A60838A9F5C4CC84959EB6E08BC52560E1A91108C920E1E19DFCA2CBD54 84766E9038A155FF23D91052B4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: MSBM10 %!PS-AdobeFont-1.0: MSBM10 003.002 %%Title: MSBM10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name MSBM10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/MSBM10 known{/MSBM10 findfont dup/UniqueID known{dup /UniqueID get 5031982 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /MSBM10 def /FontBBox {-55 -420 2343 920 }readonly def /UniqueID 5031982 def /PaintType 0 def /FontInfo 7 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name MSBM10.) readonly def /FullName (MSBM10) readonly def /FamilyName (Euler) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 82 /R put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943E919FB4E3240FEEED78EE63 0677FAF39AB2543D18C08A2B98B97451CD42CB7893DA8601CC0F45A65BEAFC64 EF72554395DA801CF2E9E3B03F65F1BD98F8C5F8EA06D7457842303C1A817E7D 69821807328AF426B9DDBC188A79A66FBB9E6193B4A3EDFE3136C6574B9C4C94 E2CBA4FE7997F949BB2DAC0D329C2AD8E4095BD18A037AC9F77B794FC389E5CD 56CC4C0B74D64FB0D02C92B88942C18B6DA84D4CF482DAF3A01E80BE483AC6ED AE98F5F3E49BC762EF6BA937D528E751D9588B0A1E82EF0A5998150EC3854472 5A91EB983915BC1D6E2C3E615E0267B39D6937ECE0EC16162FE76676E5B69F3C BC1AD934BECA284B89F0613B70876247D768BCD246883CFF4D819D6265302730 7E4BE6B2FFE7E91CCB8C6D2AFACDB4C5DB9688153E1D6B2DE136BF7068418A4F 2D1C0CA301B1B97290B46EE14B8286A81E709980F67382A5132F01B2D44DCFF0 9753E776AEAE2141D580E64C82598DAA6DA4057FFA9D02C3B77AE15A50AB457F 3FA5A10A3C986B22F8E154C1E564A55D3BE4487677613DCF793F7E1B57C9A925 BC57746C25FE567719A9EAA9CC44F1D0FF8F92C03132B205F57E3AFE9FB66632 D3FB3EF5BDFB9848030527FE759A5273CB81DBA2719611355F43E34F8FD7D0EC 9BE47685A2D122C9B60198A430C5F5E3F972376F0FF4BA52BAFF64095F7ABCBA 022622692231FF87514FD912B80C07A0EDCEECFA629E2734B5EFE2604E8DCB24 32A4C691DB4CCCF19EF897A9F4EA5B2B5AFCDF87AC06B93669F3007C1295E016 FF0A99324B80E37020B1080E80949525B3278DF111ABEA48E7182B6F4DE2DC90 B8D31A953343D5DB78B1F2CC6CE631EC7E3D0041A823DF2A4702AAC0F0A2F018 E5ADCD42EF2EC8AFF6F4705D30042BE7B6F866C14AEA1CEE04DFF82BF14931B8 D297C38E6DA6E587C23EF0864F69BB0DBC9C1EFBBB97B92BADC336A4AFAC6A91 0A6B158DC42E975CB5D8D2054CEF367FB112456AF50684C41F80B1E7ACAEA853 B843CABA76BDE9582090299F423519EE3AF8F83AE7F7828B314B6E36E9127419 F274E9FBF5622C5E48D7E95664D6C0C1006661038CF2C93BEF1DE34A163A2C86 693A13F4D0F052D2E183F36401F0C29862BC1B36A086524F76C7EE2C6D436A23 7009F146F1756DCADD3F70C51FDCE610E30C0F4AC538A2703423A07976ACA74C 25F4CFD6A92969E206375FB0C672E45948B0E832F2BE688EC22FEEB3E06BBC3A 272F73081A30830AE4214F2F029918FCA40BAEBED6299EDBECA01E08F27E5627 F53BC56F4AE7CE2D6273B27323AB829E2D51672A4990E3AEE84331583A99DA4E 63610AF8F10C50FE6196E3F4C1E4FC9BA6BE0ABDC81A0A7BF6A5792A97BD0A7E 7BBD31C3FDC01D734550843C8D84C6CC0B492CD1A6CCD57428F03A863E959C77 457D401028FD00FFA9BC422FD09D8B8A70446A61CB256A2FA0B59A2646D9C5FE 961894DB8B315C52008B4416AC35439E010BF90E43A05FCB2FBE8E62385E220E 588B7FE5509F1BB71150E159D01D24EE28008D4213227FE9BCAA34364B1039F6 BC142AAB19C8E9B15F0113781DF9C9B3BC145955552A901AEBA588D39D7E87F1 CAF27D315E168807021B0CD1B2CE13B611A7B5FC28DEB4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSSI10 %!PS-AdobeFont-1.0: CMSSI10 003.002 %%Title: CMSSI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSSI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSSI10 known{/CMSSI10 findfont dup/UniqueID known{dup /UniqueID get 5000810 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSSI10 def /FontBBox {-97 -250 1077 759 }readonly def /UniqueID 5000810 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSSI10.) readonly def /FullName (CMSSI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -12 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 101 /e put dup 102 /f put dup 108 /l put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2919BE7E94DF619E5D4CC604 78288A019B254A5A0A8E2D5ED465C9DB3CFEF0F444DA2A7DB2022495EA1B3FF8 BA3E769C503BAC77336BAAEFA8F7B4BCF9BD63253ABE621C7C696DDD22E0EDDE ABDE1706338BB5F604B4F42356E2A96751B8EAF1112A1BE30B618E7F7BAA96CC A264B5EA7138FD007E2CBE19B1F008AE13B47252D2956A06299FB28035624C39 08E9E5A4BC08DADE08861DB9940F6F0FA67E97E9A73C9F41525E865D0BF68F8B 6D48D1595EB69B3FF78F5F4B18470370BA219A010F9B5EA904289205DF20C7EC 91A2B866BA05251BD3D00FE5229CE2D2F220B6E25DA5B3C0EAC68979BB312E2C 532264814FF214CBD46C8B9C8E45878C9E28FF334C5CC7DF9D378EA5A37986DF 0450E2D5645371B8C577C28A008AB7A702E89FF337A17D05AFB0FDC55856AB3D FFF997FF51AAD70FED81A5D307FFBE26E862070E361DDF6D162934B7852D2FC2 F3FE611F218E28CE0B964BE311E59D8729C7C0FC2B2D5781F73C87D64E6388D1 D7798FE70E74E76368174F5E055FB8CDA3809536768B0E6028826436C7E6454E 895EB7E435FF8AA342BDAD46A2C7BE5FEC83B8AD16F2C773F55F58870E70F2D4 FFCA12D89B06A706CC204383C0238C17EFD01E0118FA4CB77681CB7260BBACE8 30C8E7B16669700F884F234C36EE9694841EDD4FE5644949AA28AE2745FACFDC CFEF1590F99B0DE494BB0851205DF4E7F2EB88CFF794DFA7958F6EC9197021DC D4C3590B2729779345143AF6C349CBD2F17AEDDDC23AA8F0998C27170C44FE2F 163C1E2FC314C6CE27D6CB497C3A12F6D10B92D699E1578C23B5D9A907EEA297 4BF7D5C4ADFACA310E61EBE5655745FDCC48B661CC2D3EC016A87632AE410B69 C2B98B87D3F46491EE8611E31CE17843B05C05924FA42FBAD7687003C14599DB 08D72670855271EA55082BBF6AC146D452C1531338138D9AAC7E4D2F0CA1FDAD 11E4CB830A9F38A83999F6F0ED15D12FA631B8604D4E3018E625C8BABD8E1075 93F5E17CAD3CADA2210088E71C02CC6654DB4E12F8C2B6B7EADE37E52FAD3FD5 83E45B62FC9B573A6068EF3B43856CD4B6C3E096BA93728B05AEE2BB96C60AEF 58214FD24DEFA63E3FA299289B211A57E4B0CE9EB58414FB78E20151BCED3F4A 9AE6B1D7ED559B3B619385AA8496D6F56D2B353E4B1BCCFA0A50247E283B1540 4300E1119F710664ED5DECAAE9087B8C0CBA63F3FA09F217757B8448D13648BD D16FEAB50D245C198EDF27C8628CC7BD02385EEB04AF8F4C76308BEF4D640C8D 6F2FDA7BED98F1498CEB1226F009BFAF6425265EC0D13FCACF4909B7495F4211 BA32B04A3B0BCBAC89D6A9088C47C47B4BAC36FB59D9B5D73B2E9E926A9DD183 1AE00AC58E9485379FC6DA119EEA3F6E478F22B60A464F192B2F43379407D4A8 795073B4309C27D8E945468055493D0204B4A57C39CFDC951A04E0288775FCFB DE3993852671BE697999C9831A33CADEA75B369C179EB8A807CFEEA5CD97BC55 1B0EE49DCC4B6BF4137124123626A5C91603B01B4E0AC759526C129F6AC5BE74 B77B4E431B596E29C17BCCD1CE8279E9C00DF7557AB25770FC9B02762D7EF141 84FFB4730BB8451A485F784A34647741D9B8D2127D158283E01B38BDC39BFA8D EAE249871ADB347827989E11FAC23F76C2389F8E883B01FFD1EA4968B44D1B1D 760A1FC8F79B50385D8327D6A6381923BE9A2FB8AB0CC6ACAAF5C7701C8F7BDC 81424F63D2CB312235AADD050FC4B71448EE02B7B25C82B6BFB070261919DC1E 32F5E6DD4C38691581D472C254BAF83D7F568016B5AFAEC895187E88AA4D05C8 FEBB3AEBC348AAB84907BC4D85C1F888ECAA5ED2714598384D7369F5FBA0B92B ACA0B6BCD2D22F9F10B27FBF11A8AF204794CED402A3597D2D469A99CE64BF1C 9242867251B8EFEC0001A1ED0F470A4346BCD9DA22C005A079EE1DE3E33970FE 56620C318D2FD3DD9DFBB773B4FEA7FEECEA9FA1923AD4B2F49DAFEF48E1C529 DBE9EC77299E02DEA39C7B91F9E4F6D68EB224F4555F53E66CD00326CCB5FBAE 70243CDD407BE63DF7BB85E70A99F8B58BEC1562C290D8E50666E1E4EAA484DD 487C567B7BBFEED34A65A6407E3D8925E3C667AF40DB0EFBAE2C07EBE60A83DD C1A02842861C994C4D314A87986CC94EE74DD4E29AA9E70F393CF956D3BE586B AC618055571DE00541BA60D022DB49CB62C13FFCB3932DFBFD2D52C8F0C72F1E 9337D95767E376B80AB35264405CC5C385ED6DC9F95535E00C5252DE66961AFC BC7C83ABFCFD5E0A055E37E7D261A19039D47EE792CA30EA673F80C48C0EEB20 DB21686ABD169A45DB94E35FF086C9946F51409E9E0836041081B04F861838C1 87157DB76A983928BB4122798551318EEB70A32C11A412FD56B7805BDA93AFCD B11D35FE799224AE30C3BD09D971AC651D06184FCE45D898D09685009DA35EC9 CAB63751F8241297562AE2FEB577AB074D36381B0E5FC0DD5572E3A3079B166F 56C42FBE6147FBDC7EC2ECF6380A70F87D1E44CFD02A70BB3AF4BD9D350C7B21 5DDFD4FE288F0D9EB2FF4C24612FA759B41D0854C04163DC973570B974BAD7B7 BF766AD59D543E808E8F56F831472ECFEECFA7BEA74CBCCB025AB04079AE0838 75852BDC83E1D723824761459DA6A8920A27282043C38BDDB43157A70D552072 400E84CED5FDFDA0F09DF94431956F304F6E92F3DE5F99874F995B467E2038A3 B9C787E650C4A31B2FEFF078BCAC93ACA5816F5DC3FCE322C9DDB15E34856182 BA15F2D56FF4E91573BD2D8B34767974BE928F10EDB3525C2B259F320DF99B88 87801826F2B6AAB2C178270B27730496C44CC83C8036EE6D7D33D6D4C0D871A3 62B7BBC8D8A4E86AEB2CAE76CC7B091B7DF5516EEF043C7D2727FE569B2E28FF F6BCC6FD3696A85CF5ED26571BFD346494CD6C0974BDE257EDD4A2C53C70FA89 C81F9D32F5CCBAB39A7C00A1BE116FA1254F291AD26C1DE4CBA27BC03C5E5561 8E960A7169F86C0DF884419ECAC607FA82B00CE0B41F7696B2C384582AF6A986 5A9FF800D3A1F4B6C2524F1A4300B9FCDAE2C2050B9882BE4F512FF539FA6BE4 C9577484EB323E7BFA5BDF628875A3634214B14947F7C16541CCE359F72A0E27 C0DB4CCD1653693F7D0BA68D02D5A61AB516173E794BBE4C2C3F34ED9C33BE3C 4A9E20A687498DA1DF7BCB1F6C595B90A5730A10070A54180318A1BD01844585 E78C6EA28EEACCDCB49F1CAF1D21EE97B1DF74523291FCE2ABFE2C000E8F061A 7CAEA494183B9261307CEAC6CD13B362130AE56A651DFACBBE7A6F6747CB61BF F94BF393769F2A1BD493E1E6502A3507416984FE0F7E509D901A106B857E2448 7284E7ECC2D316EC1C54EE4FD7DC9972DE33B46356E414C92CF8DF9E472F7FE6 7404362C8DFF6BE223B8886503A83A83348F7E9F88726CE068C904D45496494C 641E4443D9474344508ABACF3FF3424383D79A8BDFE6E9D9138E660EB3FFCDCF 8F4E01B24B3070E8B480064D946D0D200F4468EDDF7BDE9D3DAFF03B6D8165F4 0CCB584D542D40DC72554A7597A19EFF3BD72B8520EA71A51048F15E2CA53F3B C3432278CC19751B38AEB52534BE6CD9BBD489444D313F8C78C2C252AB25AE6A 5EC7D05F3FC21202C4B30A7FF9E1BDC6AE3F6B39B1E09F65E95292FBB1915D20 44D7212A60408FC0F5A2E957BCEBE93DDDAD35D05D23F7E58A3602FB3FC1D431 754A3A21F181C437437D7A22C402DC82275DE903E256979985B6E794B459FEFB 393317FE573DAA5416AC52AED36AE9E79040097E2BAF6A0C6CB68C346E4EB059 5E8A6AA1C751CA4A4094257C39ED48FE4414BE73B4E0BF6394FAC05CEEFD1C3A F5F5233CEB4625752057789ADF113E1E2F77F5B471A0AAA761AEB46CF37C2360 E701B0DCAE13D4583D8DA516BE2E264230DEEE5053AED15368B6CD81DB761A49 9987A07FC48E1EC246D04D80D86B32F7A093AA23B769B0DBC554EE48DA202C28 55847E3D36D80B7C8E779DFE6EAFE3EB35811A1EF80DC639195D5810D90B4DB9 6BABF8F4468AD92939567DEB43BB00CADB46964B73AE13ECC82C3A57A63A23A9 92A46206C70B027CE34FB81E6919828462F8C2166AEBE9663259CE5D4CD8084A 8BA479CDB203F1B0C3579B3E0B8B8E7AA616D798970A11423C391C25EAD95351 A46A856512518A92C7693B42BE92C2E375047E9DF8620B624AF8DCF2836FB1BA 801C822472AAF5AAA719038D3B53D0AE481753F2EC689394CFF9A911C42BE535 C5B4A187712D487C63A0C8607D67D1DBD0EE766B526184768A93416366B2CCF6 364F2D24B44021D0935CAEA289B120A613378399B53E2B50C11F67B7DC4BB1E5 861D745B7FA3C7906AD591765884FA7D746A19EF86C30309DE0F43D4747EA290 8E3C68BAF4D5F4C0C4E08DCA301E46AE3A0141A58074BA2EBBAD8B3F326C240E ABE33FA5AC689444E7E04B78C29E49D3A128567D08E712C5EC42EC1BD3D95E19 5A7337B8AB2AA410EF1C0EB31D5766575340016CE477CBA3478FB68A98362C60 18CDC9BA410A545AB339B2AAA2934222DA734F6A1AED9942B43B18BAF77FB63A 71059FA66EE04B76730B499FA022A52139BEFF9CA6CE3F9855C7706E3F804F6D D622A6929D049F921079DF979F31828C31A73CA0238C0D2F11BE2FD68F2228EF BDE9837348C10E9F08477F754F6343A39736386912D6BC865BE30D1862BACA23 0DF2061049CDF9F894D73A549C10E7BE7790043F9A642E4676F9DE2B934A7F8A 7B0917DDF3255E6FE122D88DBD80252D0C1C8047A13F835E3FCFBFC0AA1D92CD F1CAB8D1C673EBDC5601B84615F513E4D9FE1F8CBF2337C9FFCDDAC85B6922E0 0BCB0DEF0FA647E6828DED2F5B20F227AF3A792C0C63AD888D7AF39B10171FB1 A24840EDC55158FF3D8513C89F666A2DECB4AA4A1D46503919A4CFD911977DAE 4779F23271C23BDF14F4EF8352D9C66A7C24100C28CAD7BCD89E6E344EEE173F CF8BD462E1C67F06D73A9085A2AD1EA3DFCD19EB5FE217406771B80C8A3EE798 A4CBFAB9AA93672B8FC9D02014F7076FBB477A777867C6A6AF2E6FFE3CBF3917 1E4F68BCED22EC345F87A92480F4568006BAC16A2DAB940CB9F3462D254614B7 78ECD86F7C3B3A7DAF06DA2D790F353D9254133C38D668C38082D0CC1BDC226B 4A7EBB1460735A5CB04BCA4D71995483CDDC9EA7D3E070C00D5EA6DD4AB539E7 E5C8E436656C99F30B3B464E5BA6CF7025E098C1FDED8B76260ACF62D1A08DB1 F126517B05C47376D20C999565399B06CC686A817B226101AEE3644A706F3767 372117607576BC2B9AD2637DD13C76F9CF2A356F1B9101496868EA8875C94C3B D181936A02D5387D1C3C285F2DBEEA25457F6A74FF7E00449FA41878776C0DF7 C58FE07009574AE6B457F3BDE448E71CD04AC7E3C22E0CC8AF56B8B5611C4014 3CC20A39A5FA3D9F6A5599495BA0457109823CE71BAC2B7057AF826DC623213E A6738E640DAECF08E69FE365741CFF8858337131B53A0AF9E49C3655F62E367E DE824A37A5DA853E1DD5970EC07D3594A59DA1AA85D4FFE3E9E7745FA7FC7F2F AFD4B9405C7907F383A5149D4DEACA083B457151CDCE3BA5F0C350945E8B92A1 635239241B8FAF7704E3013EE5D21F421254F23194B537C36F8B673E70073189 8B2DE6C30159232A2D054AB8254A450759ACE9C0B94DE035D9D6E5024E8AB56B 644A5C3EF00A5B2EAC0F89C5FE8D7DEB9BC817EF1F87C2BBD956AFE4DD4B50C3 A3BA4931A32827E612DC3059E97069D3894234BAC0E9AA1DB7B7EEE7F97C648E 0B7E7012CA4977258733C72CE466A2EBA8F2B391BDB7652BC07C2343FC8A4B5F 7C6B926D1B751BFFC6FCFDFAB9CBFF6D630CFC8BF374DF4DFB4B0845237E1E0A E2D044324B4F05C8C96970451C9348E8AA6F1153EAC8BA1C57FFA09B3A181CF1 3EACE89F204BDBA7884FF6F90D1D0CB578DE1CDE56F526AB11F9DEC4FC09642C A68C8F1DD2EFC7BB301279F474967B1B10DD7FBA6B09B95E7B4D34F66CAAE07B F792BFE7755882FC790961FAD109A7C35258021DE25BB14410828F9122E01428 D72EDC917C835553A30FBCAE5D067266A205DDD3AF3A4734371426968A7BF7C7 9F48A5D91B596D765E15356F388E74D100B2243D230BFB33147BBCB298320930 000670CB15B7EE9C787EC751621851C3BD5EA6E70FDE66C9834189A9B0D796C4 1FA4179D594B7E8A39987A3DB806F337945A02DDD2B33D43F1E39FD20F41CA25 BA3B5ECD3B32F961F4A98BE40604BF61732690F3C8B247C6E381AED4F277788E 223F8EBECE8CBA7F48801118966E39D4EEEE3F04B254A87EB21C2E4B00F15AE6 F1E2E59DA6353A45BD0A5BF4B822D86E0E7237809C1F0129B83BA2DF82D5D54A 522697FD78DC73D8A75DC6BEE09FC523E5DDEA837BEDD90DEFCF214640DFD4E5 477FD73B86A08885AC44CEE72F0E27AA63A901F2DCC7C42EC261EDD9699A278B 507ABA7BE7101057297C6A3D67C37D61CA4015E7A46C30202617F3585D719309 7DFF48AF4FBDFC7DD9F66E9549B8B800DDFB2D8AD69B3C6D2C3410E982559191 93498926825E6A96A2CB12F8FD15F858AA28E4F9A9D1457D7B9AB16D9B9D4D45 8FD6853853DF5851C529D134CBE17C6B99A8286519535CC1368407909A5B3CF3 C75B4F86A40BD2EAB1918F03D93A283EB119A8F63E346E7502F0CFD12369B2B0 09A2AD610FD210E8CBAEF4C0498B0E53BF4EE1A00B0C067C113F88E5E000E6F4 FACE37B09D72B4242CD320E4F72F5E123E5578ACC48F604124A0A45559E1DCD9 B58D9EE14F3BC6B4452B9236F6A3CAD7FB7E7D5C949DF2875CE44537DBA8B1D4 C7ECEB76F55EA06D56209E0BAC984AD37A459B6C45B4D7F8B84CA66BF274F1D8 02BF247751733715BDCAFBD55854B0F436BCC787F66B44784838F56AA29F83B7 7D46F0D88835E45159413BEDFEC525BDEDE44291003D313CD2268E240C2388DC 37380A430557D988332DF505B16CE488AF68C8F8626B7EA790121D6ACB87D94C 83418919E0CAF58E41A3E036DF13D13C6B107500902A747CD7D7BF12235A766C 00539129C31EA3E738733C4E443698673AAF4E9588AFAFBD00577721011A12BA D556591A82E2739AC4234917DD7A850C05F595BD87E0F7719D42DCBD9D724C85 520006A9069E1CB2557D2F97D7A0C54AB564DC62759F793D60A4760854AFB05B AE445CB9131D0C14B6A6ADFE12DB225684D8254EFD295E7542031CCADC4B27E4 F579C84F35DC502F17DAD24C1775F15F505888F0C3E0FD42357ED07FB5076E78 E862016F7E5835CD5BAF87CECAC4BC92375B426E9512928E748E0328947B1844 E251F3A6E99BAA5B97045D1ACA798296D0CCEC2044E59F32075BB7CB7C636BDE 755916CB59C802761A99B211EEB550EF9BC14AADC70818D0053993C9F299B3D5 AB1427B463A4D76459385F036A95770A8157D225FB75B2C92CA39D1AE7411AD7 19AB8DEAABDE9A2F7530B474CC7119E4335AE12A9CE84BA7FA92AD46D6A7AD54 A676EF1B2B0F3A73E6FB24B20F9702ED522DB7BC30DD2212ED63C88128ED1FA3 7B05D70B0BD95BC58F1330343EAD91AED48EB4252314C356CAD761C6B0E20076 1F6203EAFA1A7AB2695ECF4ACCAF7DB3F3762CCE1D21245CB3494F42C776D948 2C85A47B93DC4DFE03595BBFD7769DCE023332930D0E1BFDCF3E3D93AADB4C33 EEF1BB68183AFC55CBC7A21F225F83C4666B166E5BCDC33EFFFD392924E57ECB 5A258A29105CEF516B3A2F5A8284AA2FA9187C32D91D47628C148C488F11D9AE F8DBAB34EE26443381C8DB3FA8E810C504360FCB236B33EA5BA6233B2973A1A4 A64AC628602CEBD691C1F29AFDAEBF577CAB1185982139A3D4C7B3E39DAAA822 520BF7452B70B68B474BC73761F6F345A52A51B2031A263B812A7915652F417A 765C3398327589E5F35EDB4D783B6EE91ACFA9FDE43E4E692B8EDAB13CF5AC05 D11A33F2D53EE263F3F73F954505CBC76B9127245B79FB2A1CF6C4772F9880FA 7CA6FFB24BD76E7DB11F404DD53ECB657670FE8F4D2882D04621B8D963D63CA8 564DFB9E69E5B1B671559DD62A2EF10D9F50291C6F02D63B56C5E325F2F0A80C 6ECE94CA37CEF1389D0FE311091F0DD6C57D339F26C19EE6B9BC086EF91F3AB8 63F37B7ED3B19BBC746D3764A5A0AF2482150AB38BE6373C2846B569B8F8A6C5 6B23D4B3A45CFFA19FE9B78F182950CDF87DA3D8772E3DAAE93D2719C618F98E 8DC4FA6B758A3ABC828CB8E5290A59644D2B75977F5D19BCA3373816F0CF7170 861AB334B42D36E054D8C3ED2D028535BEABFD239F7061B38004A3F68ECF09C0 08304F436319D720E3C79EDB1B821CDA126BCDE8747A51DED21DE73DFB47CEF9 720EA3646C5A6941EECAE424F58D771229C2A3A446AA438412F0C0F5398757C2 13318B15A7B71D14E406F78879D68124D753746451A455077D64B52C86D362DC B48035DF9946B27271E66E62F5D741F10C8812F2915C0D5F6A5EEC859638D941 68CCEBECD8D1DAE255BCFFE47DB9D55D390C18F0A4589E52C6512432384DEA0C B2CBF1C8FCF630C3FDC8B381993132C09C93021E48C27711E7D3B01D5D350745 ED4AEB7B7D1050239035266747295516D1023A6D4DB0B6EA9AF3F018A704F85C 6FD786D147AF35DD9D35C1A7275150D82CEE420B04C7E0B51D7DBECABB91B166 742DBC1F976351D4CCD68E20A0CB76007C1EAC8BACF29D8AD309C8B3744D64AD 5BB8A26DACAC976CC61244AFA1A096033D21CF5F4AD85177013854B10911B6AB 62D9CF8DA8B3F32069362D005D2F34AA91A8944B49F2F53BD35A5F4B098B7423 0156B0DBF8E33E4B4F17E6231F44E9E103398895BE1E35B98C5EB89FE02713AA 41FB8FE44233E4E54C8C02F1D1C4C72CAE7B31F7068DB481918CD38114C299AF 666522E2249BA2D9EE7F53BEA04E4E1C75001AE9954BA5350C67B21D5B982DB9 8B12C58E08A7FC8A1D168E2EB23034CF10392ECF1B22C892FB7DC582BAFB20BA BF702CF12536897E49F3EB4321998E2FACF497B0C7D08FD421BA8C79CD8F6875 C9267A1226B352A8A1B9B2D0CA44289581E63F86203892CDEE915E4E61BC6582 3D51D593EC011ADDEA8CB02D60D33C87DB8C72012E29C4159E7E3C96A902A93B 3D127F34DB222508BC420651C7108628BF373C3D21495BE381FF9A92832CD72E FE624B5E8FF8666AA85D41FCD19DA86D47FF663B0C4CB2FE12404933695EA0B4 040A7BE8445E32900368274BC4DD2BAA7B8498B12BD0729C790332B323DA07BB 5A9DAF21681EE037B675940DC47271D12BD4C59F0ECF1DB867906497245FBA51 7F495408BF8F4F921787D61074108628B9B8DA88B005D7E0C21B8755AEB6ACA5 086B23BF864B16B4C3F30B892E92C0A1800E4FEED2E6B4CF13C2D33AFBCC1949 EF381C9E54F7E336E0252237606D4CBC6F8B88DF66886CBB44E57E179EAA6791 8E7EBF2A4B87E32D41B4809EEB04519B9B341A2DE8AEF3D4BE47918479BAC58F 8B11F1B160B7D9E3026990144059965492588059E3429DE55C375DD7C35F518C 3DEAA3D441F2AA9FAED45489BBB59FC206E67558AD2AEE12FB9A072D538A0375 47836005B156951121C37C77D65766097B986974BAF687C2F7814CFA0897F64B EAFE81E0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX8 %!PS-AdobeFont-1.0: CMBX8 003.002 %%Title: CMBX8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX8 known{/CMBX8 findfont dup/UniqueID known{dup /UniqueID get 5000766 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX8 def /FontBBox {-59 -250 1235 750 }readonly def /UniqueID 5000766 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX8.) readonly def /FullName (CMBX8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 102 /f put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D4350D67F24B396427 8808B79FF5CAF896E4A8A31E46499CEE35E6A5AF0CFD175C2DD628620C681947 A02A01D3C2B715AB79D7FDAB638D887B77DFFEC5C3A9484104D84FCECC7296CE 2A3488AE246E233A8D5B40ED5DCC44558B77422BDE47E0435F960EEC3A26DA9C E137555F0638511AAA14992C8DDA9A4A11B3F90BD4DAAD1883BBEC357DBD8389 16EBE2AA8F93C2AD44F383ABE13B8C95B240563FAB987EA98794D301785E1E9F 03DD545E51A6D58B3618E0750208D3AB913F9CE8C3B865D4CB83B90FB24962D6 142B0204A1E271854F903A2FF600E087EE2FC222326051F155BE709B3E7A808A 487B8AC3CD7D2EAB52C2ED68285F962D06677C2A5015A16B3D12D15D658D89E5 18513C020222D1A995EA14D7D9CCAC4A552172146B53AA4DCF6DD217B61CFE98 1E14709295D97DC8B168AFBBA9990F0BFB9F72A5305570A1848A9E2CCA702C77 DF4F414CDDA4FD7DA25D9B09F05A77F37F1496F2601AA5FBE9B52C1C16FBE860 A3FCA20DCAA3BBADDA16304242A306400D2BEC9BA12788A5AE0E0CABDCF565BF 474A615DB6A14695E6C7288DE0B852EB91153F8A337E66DB5CB43E8234589F00 4868530A5216CFCFA0DCDB92D6BDB092855E9BA80682D5679EF88F3152E8C2B9 E38D0D6F26276BC74B8664E13D4B388124C88D19FFD2448E2743BC02AEB14694 1AC48CB776F8526FA416549A3C35616E8FA5632AA0D557B90C5CF40BE1B62325 97E45F7EC4F04CBC178B72A195912CD18498098C901CD35834FD6EEF765CB292 5A753BAACA557BEA0AF989BDEE0F0C5DF8177084AFC20E7A78BFA536DC28E9DA FEBFF50E908CA6B5DA15D3CC28A00DBFF8A1D7FF0D82F2A397C0B8B23F959C99 63BFBA5FC83D7F51CD0EA2E2C925F7F4AAEEC8A0483F50E02E4C0373FA4D7891 3EDAB498C44A259B6A2E3E176143C12E25C7B880E2E6B96592BE77AEE1190C74 35F4BA28952C002AB6B3A4B0BD9054855CBDC143CA9D20D20EB111A030D1C979 86BDE77F3BB47918F4A456513EDCB90B7CF72E97296FE07F51D0DF8C9E666024 69C209E6A4A5343F3DEDB6F09B06297505F8F8AC2AA857DC545E030DC9337FBC E48DC186C5DB047D0FF564B444054F7664AC72B7C39F39959BD574C099562FAF 9832B2260D4F1E9FE64F6BE5243308B57499B6220EB4431A53E8D9A3C6BDF5F3 8D7EA0754D363E897EC68D7E45DB4635D3E7D7176C8C364082D1D6B00D9A7AEE 5E978FC3AC4D9D73E8FAE3086930DA11497F8867E01CAE42CD9D7D1558DA4694 48501C4729614948B9DD2065E5F13275325302C24E28A22AC2F33304EAE0A317 FE51288D91EFB7AF68B8B9C3BE1294CBC390862BC28463FBBD62A32E0AE3344C 5F96E2343E5E1662E5626C6014E1F0E661126A00E1E24A4F7A2546C37B701BA8 F18F93372B48893E3C0449CEA14D228BDB8FD17256DF2FE0767661F6A3972DA9 33C746E2AFF1EFF2B44159CFF6A570C10260751299D8A30A3BC19239C9FE0DC6 BAD2AD2558223FF4CA1B672426EBC422A12514F67D9152099848B13E131C0E90 9037A6DBEC1CB183720F78C37D5EE5BFE81FCB2F615A9595791C6F56210C84FE 62FF6F5F15B866C686D8881212D7B3F4342FD09FC1E4874D35DCDFDB9D506D5A 06E5DB61F496E70C8E8B145B9BB951B2160B6FE86EA7AC1671BC40CDD866A9DB 3103E91EB483E5BE3C037F2D2388A44D8154B216C433FB85231DA4F55D3D4A8E 7FDA4387923679067F13454B02D9F2E2B030FD62C0750576F32F090E9A054DBF 4BBB729B94162C080ECD81F2DB2BD1D65C1D50CE414D0FFB4C7E994B65177F04 E786CACF71A5690F62AE3AE57F43247B8392D2BBD4E61262EA0CAD3868F33296 BC7002271448E865DED4324FCD923313969D1355A579F918E6225955A2BD5B7E C2A0E02809102F295895722930FCCCE6E8DB301635221B57FA589533C2C3BEC4 9B1958680BE6102180C667E4984C7B9250C5BB231F8E443B98EF07FAE3AC29F0 B4CC4BE8A3DC0058FB2CCEB90262FC959D5ECC3A887E10E1E43FAE7DFBDE4882 BA9035B38BB0F69F8659C0094EA643DEBCACFC8EB5C73AA25A1B83B2DA2D1D47 29A27B554BB9A762D020EC05001DC8559E096F82581B248AF95D6F12FB73E4E9 58BFF246EB803809F561F8E17E6B1B7B1472FC342761EF29FA2C3890FEEB96FF 6B1A173A74A2A61837BE90AD9574EFD8D65602C63C560DEFBE5F0C1F8250E66B E7A8C1A68E8445CF67F672E2F11583F70E77F479916339FA7E5672DFD1907CAE 45A5DBD35C535D903442EECF453495A6B256DC635941A6781C426A2E12BAF3BB 73C147A74DDE4925D642BB73D9F2608554D967A0944D38CB29F984379073F6B2 77301EA7AD503121EAA1AF349D72677869515D0E537AD762304A6A5CF31E8431 D053D4A1B6C03A4DBE6BDAE2312FBC65F18FC8F4AA546FA69D09DCC722CEE1DA E02B6F69B69F675AE544ACAEFCDE959350E1EB6C45C162E08E153D1F3151AFF7 B539D0834CA4B87B06732D5EC077B37373348A5CD7B39811286092ADBDD86931 3F6867AC5D53E565234847205FEDC23BC1E1166CA113787DEB72AC251FE7FD1E 250557284E533F3B2DA3BB22AFF13428D2537BBAFB70734A7FDDC68AF58A9D3F DD456ED2E4A0A89C6E22080101412164A955748ED5E689308C96FA5D23D63513 5B8890A57983C9DAE333B38ADFE356C6CD6BB865C493151B24B9A1FC4D66C491 12E8637906EBCBD60E76227E8847112135CE4FFB00B396FE3DC237292B8D2EA3 03B263C1B6CDA2719C0D99B6CEEE6C86CB397C4D0C058BC2EE9D6298612D01BD 31531819BFC228868453DB8EB836AF2394D45A222A21EBDE795E558E84A277F7 D8591ADCD9E16C34201CB0D0FC1FE62FB107D53DA0D95F61A9A55585A3D106B5 48B258A35D3AF66995A9DEE4312C0DA4C91CD3AA7FFBB7A5278FACBA05E5BBA0 F936BC210EA4E107EB883DEBC83BBA0798B665F2DAF2BCFC00D524930B394187 4712AC73DC2F901BDA21589E9132A50B6F16FE8C6153209BDEEC9025C3C24035 F8623B3CDF420E064D2D3F1BEDA64E39C8482972C96B38BF7D25C1025A9DC57C 40BE36086161C419BE1B0CB4B653DB07FA28934C41AFE90152A14AF2688FB6A0 71AEB8175EEA7775C13F2B7C598C30E91EA8DB07ECDDAD64E40A8C8FAA3ACCAE ECD1296AB2075DE150F10502847E970256A70B7329834B1D80D40AC5C8DF55DD E3922D85820114F898F87E644EB8F460BFCFF752B635B6D08F46AEF2123A2E86 913CF1B45DD2D01B8E560EC04230CC8DE7C78EA2970C224B371777430ED41B02 63C87C9B29161341DAC785F547C2E6256370BF3BD8D7AEC72F6F9A4BDDFB6EFD 45AF0A366B9387A4CD9164326B997BCDCFFE0D25D88E22888889D8E47C5709F7 CAD17E0DD435B20E767B31521E9E14ADE57C7C9CDC2FD7D09DAF912F6C5CDC34 6362133B50B8E5954814EFAE6AB8D004AF3CBE097BB0F61FDF1E10170F4EA28D CD93B802BE124A435403D3BAEBE8C1131718579194420AD650A3986AF9220363 75155975B60093A9A6CD171834B2E39629041BEDA7CFAC7BA6411A206B09DD78 CFF14E36304B7FAC838FEC6E4AC6847C6CEC1559B41D81383017668DD230C98B C317B08B199C270FEAF50868DFE6AD4243EAEB67590855074A248CEF8F64DB80 D5CCAE6445AE92150058660E861467D0CECF61DCD5D4062CE9DF07CB098B90FB 6CB59553A0956BD6339CAC2FA9C519C46AE9775672DD69D33C0E6D7F626EC2D5 85070A68A450227CD535911F9E0CCD1BA379C750CD10C4190EC8B979C1E4ECBD DE2836E85616406FC2DFDA7E27A411276AD1B3900453DC3AD85C7A9BE51CCAEE 315E3E5C31F8E6962721DA166B9660C8087C1F1ABD77950E061A2D924FBF4A89 3FF5C570ABAC5EED011D2BF94BC1268EE4F2A2CCBCBA29FBCC4B186A3FCDDDD3 B462305EABECBFD279C9860D5E490EA63D9231638E06EE8D58EE6E926C4A3D3A C5E957A20F1F99FA05C43BC4D1918DA051656EEF0C498748879BA4258DD73CAB 0F32F20B98014C2B14A77186E43470F0182828955730F440493D34B0877065A7 6E7B704B27F93DAD747DA77109C541A15F08A694A703E6E7C62BD0A86331EE79 6C18A6C38923B88BF83BF212C76BA6EAC620CC859F0365F5511821261CE29DC2 BFEBDE0CD36F0052692C9945077CD606E4841CB991D3C3DE9BE28EC7CBEC2FA6 75984071CFDFA8857CCDF9005AA8FC549EF295DC701260CB4A5CE8FA0F439B22 BC2C19D3C14E7B2B6B41AAA158659C307D9C91C2B12331BE152D3EF8FD324B9F 8C3B74D553AADE2B0E89805F47FA2DF36766B8DF01CC2B6B44344BF4B11C7FD3 186662A11137448ACE7D3F4CA515E0BEC21859D2BB5A25F67C48817404DFA0CA 7B3D11495250150C6A1E32B80334E8F5C52D4769C8BDF3E6E3DA4FF1BC97E009 A1AFD195205FC741837F21CC2942CC8322F3D6AAB6D330E6CE120E1A15E91987 AD98FC12019A945B215BC72768F32A7635AB0F0E6E185AC7099F1A0EAEEC5FA0 341EBECA077B25102310331CA87B74345506156CA5E853728217608416EC8173 2D24CEE766E2B3B0BE183CF2A8B794E0E0E91C11D59B98DF5F4E5EA119F197B5 D8800744F9FD45015FCF5E740105ECE72AB5AB7E1CFEB15807A0D1CDE00A44AD E94EF57AB546990A691FB2E24CB55477B7FAB6F12A28676DB7ECCC014AC70C80 9199E921F449C232EEB88268A48DD86FCFA2E29FB450FEC618E9E317F4AACC68 C51EBDB1B9E43F7574B40C0EB05E769D30F1C172645006D799E8C3D7C79DACD4 FD269ABF9B24B215B534365D79535AE3578D714606D22AAA5A2039FE7A5DD52E 506D293824BEF78F5E1C7228FF9097FF5AE8CB7B46E69C72FB43EEA7110A9EAA 546E9975C54CFD56022EB1B21E00CEC393DFA488C49C90E73D57CAB0324E36CD 0D2F0F0641DC3785CA9BFD680D609392CC2F852056E90276DA93043B14F30BDB C32808FCF16CD13E4A13B727BEB4FD42B29D6C215AF4811B965822960F6D7CDE 92BBB8FB84B59075FC14075C30CEFD9D095ADD8043FD12452D3C5E4EFABC9671 6E929D5932C337969F3F5448A2BC8001ACDDA043EE975F35E64D7436FB73B197 697E87860E071F326C7080E9C2930CBA600C6875ECFA85DD4C3741945004B3C3 298F2B741302E0FD39D990F20D68542B2FD0D71F52DE1ADF30FFA332306360C7 C6BE3E6D510A691029D503FBFE96831D332831C69B590025C831281881968B86 42817BFDCE322355F994FA9C8BE68A9222CC09AF9AB2AAE8BCFDEB69B8481CB5 75E66873B08A4E8265F369448F0E3BC0C82D82F65216D0C93DE88322EE7D0FD4 1089A1D6CC3B52F681BAEADB1C82EC3B82949C27C6C340BE7E27020015CF142C 37DC3BA8E4EC2A4FA81E50EE6854C23B3EE301E43D83CF6B82E80ABAA01EC82A 36CFE930297EE3A45783871EC4E77DCCC0923A9FB1654406FC8070BDADBD27D6 0BA8837A459481ECB63F03DC3007700D360643864AFB3728C5573A20870E5D55 4F698DB4B5610C30876DE56786D84C71AA9FDD5198B4F3F8918AF319B7FCD04C F06C90B2CD0CF2241C2055DB68F1CA5CD57990E68F6F832A5820A481B0823F98 0F4BAE4D7E92F4F2BC118E01ADDB7D527E6BB49E85D37D7E0BE7BEFBD1BF9E1B 9ECE91D28E664284D190010D1578C1F61F02610A9AA6E9527872276E59A25362 68F74B88959CE84F497D8D89735413981FE4EF573E4E0C02D3F0EED5FC100A4A 563949D21A3E29D86A84C9F945602D9EDA860C6C44492EF219DFEBCC016FA7A4 AA12A727D4E218D22805E5EC878AEA7D8B5D79E84E74E78FD9E017FEC4220A7F 9ABCD125BA6E9D378BDC19D0B267A323FDD0831C5E7EB7D4A5CE7047F272D3AD 1E25F7C5327127A058C287FEC98BD81144447D5BF73C56472E552C7B1AAF6705 05286122B612BF5A2AA8C4A6CD64088BAB59B008A43121FBF5692418FFCFAF05 260D6EB20C680BB73F3988C3E4E3CEFC65BA637FDFBA60E6D9D63E6C7FE196F4 412367C1F43343EC6FEE8F97FA0E95BF1BC2C15F14CB6C8E8B28248B5EBB6478 FDDA9D183AFF6A63145824E518377F384740984DC6095FCF3F8B777DD23A221B AB1ED5EE27C19941184967846B8800E489E1B86F23ABC34237502ABCAF092C77 38A1720A851E8EED24BFEC9AB4C8D4D7FFC3ED0C1CF4FC73B962EB53725DB67D 983A8C2B9E30F4F85AFAA17D86EEFD57CB17BACFB8BB2204E7CDAC446C679226 F21D1A5CF2EA719888BC727725346D58479B69213F9EC3520B9C3A1778061AB0 3B330514114833525D40B3F7F45EE401534732803B807953EE20C9660FB790C2 71513A220EBE1731295B205324F275FE110D60A77CBB43441472193570E67BD0 E97D51AEDD94B4DA0D71DE66E18F22F1E6CCB81D1DAD113125743D82DD4BBC8C 190BF7073078FB1235E8A329EC3C69E3D25B37B1BCBDFA50D0C34BA486AB50CE 0F411AE5DDD05BF3ABA16151A06D566860A08B2C634786C823D615BE622BC8DC 36FADBEE389BA4F7A5A32BBAC6403282F02E92ADF11C14F45B51D579631F067E 09C17ACC247837A8B6F66C66574F91317CC12C73D09A75B80CFD11993FEFCED9 859D36B55033A149ECF0A845F611FAC0A8DEE32B407091C0233808C79857C2C1 540A530EBFAE98C5D51C955D02FE62C8F207C97D614636AF826A7F2247E56B54 3B496509DEDA8A277F0100A94376F5FF85586C6721F65F3F6BCF8B19CAAF8E4A EB16AC97AB71C32FD3DC9E7F1CF02D29ED516BE9F8F0BA027C68A5467A91338C CB52C099EC4FB72775138197BFF472B4FB75B84D5D45824A705412F13EC5A2DF 363D37E7ED7DEBD14AB754B8F7C829998351F76E0660BBBFAE6DE96BEA394965 F14D65CD28C593B5056D41FBE0780AE9AFE5F697D3F41FD750D327F5DC23FE02 1DC31AC1DC74721C939D38710BB1BE55E895C2181365CD2BF61E8B59023253B9 7694B2215942A702B855A0102029229F2CFB8EBDED2BA9B723CD915E0CF54FD2 D8B4CA2A0BD43DEB478AC342F292FF590B2FDCFEB7195BA687A7C7D4E17D5E06 EDA0D7F0195D255CEA7288396CB53A961DC4EC29F949EA8AA48DBFD6BD2BC7C5 7019E26D342B8BBD0AD9D48E689550DC1FD581EB0D6E4156D107E116D9326BF7 E29F3479790283C8FA5AD1BF8562D11A26F81783E7B9CB3C74EDB9A2BCEE56F0 0A6FF68026B320FAA86EF294C07F310B832941D400337C0A1C8DD466F2AEA9C9 7284F09CF01CB6D17E333AFEAB84DB7E5451829DEE0B97F8D4037877EB32BE6C 871C9B477865AFA9BECE34891B81B4416BF1C82CEBFBBB6757B7032E04E2ED10 38DC59E06E65379DF10372264804733507A929783916D02CF3158E4AEC0531EB 95502E07ECAAAE6EF0E70EE934263D6C8404739F468228484BC5BF2EDF9BF06C D5CABBE2E28975711AD2F485846A92D22DB307ED63FDF99120684837B21AE421 751B4681AF90A153AE3B977850AF1B7FADFB4A0D074AEE539DD1B553D99CF869 0D589B7C27086CD89458E78A94E33C2610617A56771E56B146D9143488B01742 017A7EE0444948173C783DB8643039B61CAE1D863047ED474E47A1CB49DC43DA 0099D2BE926D5C8CE61D98B0DF3B532AAB90EE57BC17191EF4119FCDB991ACE4 B124110BEAD7BC80EC8A205638E2727D8464AFE44C65F47D33F454316DD87FAF A1C93E7C6C1E357F3E111E41706635476A360F789F0153DD8DBBFD19826BDB1C AD807F7DC8E44222D425EF8E4FA926096F9CD6FA39A45095F0B0D83DEE822BEB 1A13607B8DF12AAB3255373E4A572C228A9C582B7636FA0314FDF45F05106C06 979DC28A653B2C2D3F3EA3BD99E971BBC0C54E0AA87AE7410A891EA744559A58 92B85998181E616704B17C5EF6A571CFB69D6DB8A1EEC9327810E4B95CA3A5BE 63C3D8F777845FCF5982F80627B72E605C01C1F35A2BE648D5F0B1CDFD9D1C5D 167B3CA22D0FE0D43FBAF8E0644C5B9B051E4FBA7BFAE143FBB9ED3E09149184 409C828CC3D727BFC450589751E16E458A8F4840742827BF4FFF951C0D1A365C BF85AD253B5536703E159541D7F5B2E5FAD8DA4E014450066704368C7E147957 3EBFF088E438AAB0B663B76BADB1CE731423C929B70FBE9AD9C5E56849ECD188 6A4548D37CC305EB98CBA72A976D0E5BCD65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI6 %!PS-AdobeFont-1.0: CMMI6 003.002 %%Title: CMMI6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI6 known{/CMMI6 findfont dup/UniqueID known{dup /UniqueID get 5087381 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI6 def /FontBBox {11 -250 1241 750 }readonly def /UniqueID 5087381 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI6.) readonly def /FullName (CMMI6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 107 /k put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFB83E8A2A6085DA11 61B1632328B94B21D3CBF2E7752D441A2C9A03F6681FDAB37C4B67D5857720F7 0C4BCEE266586738012A2237A85FCD0425DA7E8E8632543F5BD5D50F9DBAAE69 9E053AECA6027559DE42F7291EB381D866F1293107553809861D43508C6F2341 5E4FCC431AF4A9B3660386AE63E877DCF5E513D0D5702B98D58B34897FEE163A 75CD6F5A2196F91CE5060CA5E72F9C5F79D18F242EEE58135BFAB02D5CA430B6 D1B9A376849751A45E52577B1810C4F0C7F6C8196071D5B08FDB731C5384CCBF 03B460347E0CAC959E4A12620B6C2ED62E06A241D1637F418B5599A7FF3C1390 7AF66A00F7C31B4EDF249C56C268EC9D546CD0489DA51B734C8292CE7B3D9E30 71448C85ACC64FA99B2DEA91AA4CBCBBB9DE20833700AF96395DEEDA3FEB7D6E D6E3BE4A62CBFA18BD0471C14F3A2FD025C88E8166A9830C5B5B94624A3D6482 D1A1D83805D0EDAC1C79EA858A523D9FA3356DF42BC01886E77F6AA6B04E4E3F AD107D861FC626F0A439BC3F125D48649E5101BF79C71507FDACACBBB4C4335B C41A5C15ADF1DF69E1D68C3EB9BE30BDD5385F81D26EC8F2F206C1C7032B9EB7 0392BBCA23B4693686AF8D2E1ACB2FBEE81D75667CD1DDB906BC5B675660ABA4 E63429F16623F20B6A040E4942107CCA26CF6C1F52DEED9EC7EB15BE4F18F2E3 9ABDEEAAEA9AC41E9F20C37C54B33F609F5835AE5A1EC9D674DC50FAFF6D3511 2198195590F62B3B8A6FC8C3431BB8895A2F910F0361062DE32CDA9A7F41E761 B09BD8545CAA2D7124B5688B54705AA52E4716E36C0303FEAD38E0510B3CB496 6C30B115C37E02043D47B4ED796C671E30360800EC13F0F0FF3E0DBF5A642396 EB0F39A9DAF0974678EA1D041F08BD73867065DA91B044EF2AB15FAA6546031E 189936C1FD302BCFBE55EAF369DBA4895DD0996BF7292762551A86C8A3604E9A 8AD29E38BF6FD40172051EBE7C694249F3378ED0139D37EEA3ADB66F3A80A1D9 9C3655F054CACE93BA4AD42DC78A03F42455ED1BD5C122F234F21ACEB8FEFF9E 3BFE0DB2DA6D368478299ED63912A234ADB1DCCF1E519AD20772B71F8522B5DB 24E9658BDC1333D76F07F63D81F7A51D12C445ABF698092A24E5E5C36A52206C 0C41F7DCA529BB0A4D146DB6B4B341459FC17FFA357CA5F93DBCF30B61374613 4846D619423BCAC59B7EB40C14C70ABD985754A0094C98350D01FE9FA371B0F4 38884690DC7700C49236EF68BD6E806E8937AD8B77648F552C0C907007465A76 1475BDD3FBE1CF69C706E703226471C249A3448F81C240ADBE4B5474216D0235 6B0816BB6935A2704E851E20C002F85B653BB0700915B358DDC168ED3FAE3D91 8280A5CA5C2708D622B03DC47A70E5FFCAD5A7C8D9AD563857BBEF92A3BDB588 8B5B55CC9B960F20CA4AEB598DA8488004DEDBC9671488011E836D9D8B6251BF 256D08E6F1808E9D498449DF1F18E48B310D561D4DD3146C2BA64D960E66447F 6DA8B07194E3BFAF662C00737BB7222B55A5CC206A1C46F252ACF93D2063BABE 2BAB874C01AEC438D3F86AE37C9D7FCE4077F5B5785E12C1E0B685134CE2E8A2 2E4DCDDAED2D53D13014E428FAAE22447763D4693E82600F850CA4A49E1ADC5D C8DFC16E97B9F6164095CF7F31373B591F815621F45DFF77BFBF89EF60C9F50F 0C2FBBA4EA9602E197B9447FAB6AB57B19B1C801DAB66BF7D263F6572B9EEF88 E06744C1FE197B8EAA71E1EB67716B7CAB30C859A2D1B2DB95ECED02B83FBA32 E62F97EE4403FADEC936CC8DAA161F7B509B2723BA2B735572A80D7D087E6395 6A9D34D5963E3C6E37F307C66D1CE551D2F055BFCC7360FBE93ACAFDE2B1A849 37FD373F62BB23C1A2E3DF61C9452A8C995B03D44D6210A968C6293B4A3BE662 C7B0B59E6EF6D53FD293B2C290436B0C448E7D15A63533DE321643E53C85EF8B 060C434E46A736EA617EA00D185323460E77B95C49070B035194A2E7693C3B15 104ED7F56FCADABE49F27F9A576B354C574B5BAFFFC57FE9AF02FBD87B8874A1 24C53826659BEB1EC50446AC26EF3A95877ED3D81D33A8BC1BF7473FB9C11ABA 0F27B38EEBDF77D3D3EA63AE6022DB0D4F1125DF274B86EF0A4A263E108D6044 7A885F5E87362293A53F457CBA6C911D23653DA7CE4BB7D4FF4481AB97C0DD81 C13515F0E3BF8A7E8DE2CE69B25BA9C185D9BF31A65DD290B0D4FDF40B61E2D9 AF92BC6468B3F5AB5D5B88710C489ACC69198D697055B39AB3DE8B3733825C5E 6E763E2698574381A01352A7042A36EA96D17DD2EEEAFF04ABF7BF7D877B0FC7 B6BA51BA994D431F472B6EC4B4C327399576470A1773BCBAC61CDBF0F95DA6A5 0BE5239B7E9CD39E1E4D27EF6695D1FB56D4CA2C2370509547D6D01273CBE6E0 66A696C35D2D0282CB8C85D7B1C51453A0AD0BC80E1D183D11AA78879643D9D9 A3D0B2BD8EE3EDF29483CC5871426232A20CB058EEBDAAED85378B163425C270 B0F7BB46B7D1B89CF84E6A06791195FB17F11F34A2548FE424DE10E376B39A2F DD9B0BA2F2FDF3ED4AACBD0D60E67C0749D6DCBDE6E79041398DF3FC8D9B6CFC 693B870683CC425C52705902DFD324E157C9829F25B14A057AA92AFA17F156FB 0BA949698EAA0657B03D9538288D887959EF24A427EE7EDE47F304A1A6A715FA 2966273831B5B3A9C11021C153E67A73FA606FE3233C3DB217404C6AED6A4C59 DD4C2A98B31AF5604D8DE8354448B4CEC66022E756B0056CD32E9B002ADC712C 0545C2C16D9457E271D98A4ED7DDE01BBD1856F5C3DA28794D2C7951FE2FE6D9 18643CEEC41CA4A3464D3D3A102653CD6EAADA59CDD44918523B8811C2ECCABA AC0D188F5E07B37AFD56006B10B32EDD179F4DA693EEBF4DF5425D996585F21C 8780A4D23D24FB0618C12DE65CAD42A0138E28A100257978EDCAD168C55C6F07 78A067F0299890356C2A184820A554FB07448395ECE36C45211757552E288ED3 7DFE46CB92EB2070442AFC85864A45000C4854D728096AD3D4C552EFC26DB6B9 C340358451B50AF9F1B35C2E32D495DE85B5848D78940270DEFC07A14D960730 878B5B55916FB40FD805116C9C2AC8C6D4645DA67A978F1C6FE705EC188DBF7B FE7AD6769F2EEC4A9B05306D5BCD6EC3A240D6A29ED07D1D82E697DC8CC391AA 015DB6BCD1DA5C9A5A7BE3C5936681215E859E9837027D108A54F42AB24E38C2 4A7D8CF3264AE049D4B1AF48BBC564BCC88AF19D37DD81CCC431D0C554DF29A6 94ABDF8126EE4FE1DFB78559B9BF36FAFEC9791049C865694F9E2FFB7A308FEB EF0195FAA6BFE7A081B65C5125623903828372F117EE17E588B2FA26DC9AE37D 9A6F0043C019624D3D87AFDB4B90C46AEA78919CEF5D7ACEE316F30EA0229742 55E02E0E2533CAD78CE9BD6E0260A695D776ABA229D89CF9BEA92CE0397821A8 830A557021B3B90CE0B07A4B34C24337FA3FA4A3728B6E013BA01071CA7FA667 6FFB4BA3A28B5D5614ACD4E80E00938C2589CC6CF885A260AF7589240BF8987B 20A19FDAC73FAEEDD93EBCB3D46F735214164AFAF1A7828FE96E2BF7CE1EA46E FC1FC4527A0ADF2B81CA51E3D96F3E786511AF00FDDD9764CD3178362CF9DEE5 F05D100EC21A301F40FEFC3EF05AFEC140A9466AE68FCFD6CAC1A143BAF2B7BF D0DF808F0CF87FE2399CD9D2DD424227CA7D4073ED002CD555FBE8057A797B60 313D18ECDD779FA7289D4E7BF82D95A7535CE3F0F4164AF239AC666653736654 C13E436B526EC5A1DC97E1D85C4EB563C7061AE1E81F0B38BC45B17C15FDB0DA E5F6332721A925D4DD5A97BFF3E3F11D4F4F43BAE4E73A294D314527397F03CE AFD12DDF9D07DAD8D6C8EFAFC2F52E20FBF62026810C0C31A1EF71FBD612654D C68B7A24112F0ABDD20EFF3DADBE447AF9CE568F873ACE72B63283CB26B89BED 4B3315F26084453B1EB0877065A76E7B704B27F93DBEB365574A78E92FDB4B82 D6ED91A1728F571FC9CAB636A6E81D0C1C4F5E3F6F4574B6EED48BB61EFDDC80 1831E2AB9327B37881F0CA5D5265575F210BF4BCD8653B4193F74E3FF65028F9 2968B8127C68CA2919DDF529EC882EE99901146CA629A07B4DC59E7868DBE083 6E546C5769655EF6628FE2EA78AC891D130108192053D5056A7BD06C09592AF9 6310B3586A2609DB94CB0079550358F5547B9FBB2B77917A327EFE3F972C7263 54076627B4DD74638C3105FB25DA246484799D5326EE80503F18672B893289CB 1FFF8D3F662FB33E93025D86803551A8A1DE363D1534BFA3EF968871B19FB189 DAD841C177E2AC98B6B69A78048221C5EBBBB86511939D3A9963B3BF021185AB 0B26CA7D0A779DC2F7693C7E48286BD60EE46615E31B93FB0E6992AE20C792A4 72AD6FFAD6682D0F606807D7AE63A6280B5967FAB889DCDF0F76347CE302FAED A59E1B1AB785D9D0ED695A0D05DD3DF0EF0B275AFCF9EC7031E1357E99A3DB85 B4D137567875F7580E2BEC96B08C97ECB40876000B610E0BFE81E7884C9BBAE6 6BE9C2C612475396BC10EC7FFBD1118A7971FE1971DFD0CB677ECA65DD837B5E C7D36FE9F20A15A941F1E77C11093C902DF5B7639580B9C0E4AAD13518E1901C 1162FA095F301848770C6C618E371A0AC3463D0D94221EFCC0884B21300194B5 97E03BCD5C4878CEBF352EDD1D2173B56C9B6A08BF3F33419DF226E1633CC5CA A88A57AA85E21657569916E9B4B79E51B5535A57B2D6FA3EED1D0AA32DC0165B 12F8F5A681040B456D8DF175AD6053A2954F327F4EB4CD453A056FB1701242C2 59755058640C62632C764E002CE928E6B908BB137C28630A3CDBC7C34CF2B643 FFAFF20E345A86F31756C78A8EE2B9B1C5DAB2C863B29A44190770FD90BC6AED 0C25942BBD6A370C21650947B49AC8EB6825BE65DEFAFDDA32007754DFE0273F B995B8986E505F95E58A3F8873545DDA6F3FFAADE992F3FF7B2DAB76D663280E CF2BA18BC8871A7C361AA3600B192948CB918FEB0F2900AF2BCF169576828325 449CBF0C7AEDC299FCBB061F491469B9ED1D56771A03F9F202550E17FDB15B51 4772B2F06E6AABA4027D13E8730999532DB2475630D2F8EB98242E36F5B45A94 2D8083014B63A806BB9A01906143482C614B5CFBE8C5354A3F2438B2160F6DC0 81AFCEB201EC67F66DC5808C907A3C6CB664F444D24095D9A11D4978A7B57037 87C67552FD59F5713D0FE03462F9A1A323BB3EFF0AAD61B1792CB109CA9AE4D4 D7F7FBD3FB91258DCFFB4634669FA13E03C0AF699165311CBF37D24378022787 87D1320ECF878F859149B2F994E700A32CB7253297AC58753E4583A08A1F83D5 CBFF10F2D26D71CDB20E1C69A666E9C4D23BB0E6BF1097FBBB204EB736E61FF0 C3FDE1986938F8099694B9F998B3C735770FF21F73B1A6B750498BFD21184F11 5E6AF0F1FBB08EAD436C4AADE1E6B815F5E58988C113B4B2335A340798BFB201 40586D0BCD6AF5A08CE9AA042910197F47D98CBB4411A6D435A46F46B3964F85 032D7F8D880732276A8FD24DA772F642F06C9F3EB4C9090AE4A3AAE67D8768A1 7B2A57E15B7FC626450372F40E3EE28D8D997CCC8CC89C644461D1110740407E F6D884A0503E05AF830994AD0CEEA924D935749F6EE9F2DD65A58ECD59229918 A303C90E19E9C411FAF24AD5E9B786178F8182692CDD508A4755123B4A594AF1 A8E7287456C1CE2CA485CF4CF9DEE5238AA7328DA204816F98B7EF49EDB30875 3CF8C48E0465BFFA8F2A1CFB6A8F165B63CC80F54C669D02BFD9A0EA0FDE2B40 D69F0101AE4D2C10185AB10953019FE7D373BF40C2F6D4E36693F118866D1267 12BA7987ED4313E8635DA02A4FC1F7815105F8EDFE8004A8801CC1AFA8D123FD 1768A6C39E838BD489C6BEFFD3BDF650DF48D5F8D99DD5A2E8AD235F2CAE8BC9 C13AE9B214CF3FBFAC7BDFA54CB6E675273330608BD35600775FFB2A96FF648E DF55A78B43CF54CABC0DA8D574CC5C5C62E9D658EC62035EA5028767749E48D5 658212BD39C7E76ED0C6F3E0A1D138A0DB8BE574987AF1E43070F1F12C560009 F48993FAC935EB56A5793BA13C28293601D268B4880F9BC33D553FF3B6A7900D 37900BD3B4B558C84BBAB09B4BC2B14D32E49596DA090E586E28D560903B9744 7D014EF2A6AC4F711A025DBBC841F1C1C93BA1F8327DFE33C803A0993050D590 C7AE262261DB7D04B9DD91F89927161A69E14BB2A48D29578410E312A4793101 B6CD65B298988AB798F45B76E1F58BE24DB207C7E07014E17525B436D41FDB28 D1072CBEB526E17C72DDA00ECDD06394940DEE8BD02CD3C81BFD12BE0568A459 0F53010A0655942C932905FEE87183CE357887E2ED286DC1E89F2F401CDDDFA9 B418F218D4115043892882C09F2E3749D4671E75AB1AD01C78F59FE3F54276D2 A91512C21C68180CCC0E147E834002D7799FF393842CE88BEA714672E1952C9F 7CEF2FD0115B0E292079909A7775769341A7888CE6063537ACFF225B4F396972 41BF46C599D278906F3BCFF81DF941BF5888DE8A53CB0A2D71610CDCDCC1760A 7844F89FCBB892AEA853CF5D967648995559EFE852C95D2EFDA2CF063500F88D 2C83B615618831267BD8F5438DC53C6433CE7347E9C55E103B450EBED6229219 20E979C00B0B9D86345FC3A8EA2B049B7E148A7AA1C859AFE93381DA74CA578F 8FAAB28175D5B57F6A74F9869B2F530009E953913C6925D0045CB2E817A17742 3C5B7574E9BF3BA7B769C161C2496EA2D346B4E19E434120FE92A0ED3F4A9ACC A8BFE55F04D17DF035D01FC0B06182D8C27B6D32F36551B9AA56D61FB6A34254 D0DF918C6716D8D05B973C8BAD5AD52C06EF3C6503D4E0F7F791511C79AE74E4 4B707612149D583C5D96E534CB45F1E7CA5B23642B1BDBC881FD8E4F66CCEE96 7CC0509B5CFB0B3596682A81E682DAF6AE58F605FD7A1F414F62572298AD8491 B76D0A23B4AC731FB8E7682F506B5CC02F7029827FFD866EF4DBF56E07E7743A D42CE65B38EBDEA193CE5B172E87DC88452C3DE192E363EB9DBEC4EC65F53002 BE9E94180F73B53CE1E8EE9333DC86DF5FB2561FA1F9B2511962CBEFACA739CC 38A286651CEFBF451FF6568CFFBA8AA68555181147C1CDBA18C4F5C77BA8548D 2B1BA37E05EAF7F69879C3ECBD02783028CB1A8649842EB71023F89CEB36CEEF A9B04E9ECB0577536B88ECE7C1D81B0D6D5A478F8E92DF83D194759437088D7B E93C6AFD0CC6D568E60E2F1265A6613F97A6C4068C8EEBA70F6CC4E88A80F65D EA7B498395390A74BA57221B86611D3EE5DC4632F139CA8A15E5B9D2DC97088D 7CC65197CD93F4803BE4246394F40EDC2CB4904BC273C597F13C8DC680245A3F F1AF2D7BCE5D69E9CFC81E5E9F46927C5F55C719AFDB2CB1AF2E4D55B0E3ACA8 6BBBCF253CCFF8F02B8542F296CED0EB8A06A88549DC959E22C3D6C48F310452 22B32C44B046A61A4F7F8AED613DCD3C464DB2280D56E517CFD16DC32C83EACC D3E936D2F3A883B265444D818393E30EE3AA59E6FA73DDC421F5A0FC8442F89D CCE98189ECADC080F1973E14012C2B87F6A8289D7E1B8958E2220FA1C68EF82D 01A2B3516F320EE84950A6A54963ECD6F606EB5693F6A0BC74CE2B5AEF26AFE6 7BF5D5357C3D53CFF50F60599F2165B6E742A331B47F46D977FC721867EC9CE3 7E9BFA2149C9E3A47AF0D0EDBF29C1E6D92BFBBEB52F816EFDBA9CFF83AC072C 5FD264F8F24CD5A1C0F68399FF4B29FD77C4A54D8296523413DCE938ABBAEACF 072AE89B1CAE513DF9810B85613549445F8E854424603C5A41EDBB163CB453EB 25FA6960DDBCEDCA3A40AE675BF9E906EE15862CE3847C4DB16C18B379ADA7B2 C46159EA36A73A9592378791167DE6DBD618581A5BD9BA565D3965A5A32F4B47 B53A70AA9A98BCF352321C225D9CA14CCE64814B804BB23CAC8E1B5BD7DB72BF F01C1B13442C0A645A8A8D4230EED98A5CF40214B2DD4C95227493CA5EC5834D DEE5493890F0DE9554C9B005EDFB0773E3FD22679A6710D45D9F324006E5C61B ED6F94803BD2ECF318079AFD3E687B29AD61CA19DE0935ACB1CD108F10528767 59831CF20C11CBB6FB48AE3C9565AA8549B18F08A8EDD15A891157A596D87BEA 4C269F4B1D2BA2F04379E875EE85882933D81DC3ED3D667447AFEBF2BBA55AD7 83B5D1C45281AD79CE6B949152680D4A66C4EA9DD69A706682ABB9B04FD05CD7 4318723571D8A589B644671A35BE3256AD63572F9E4D96D56E4B679DD5C12BAA BE865BE9C2C1249BDC2DF2BE736CFEC0244FA3B264A9094B9E2E2AB756A24D2E 9B638E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI8 %!PS-AdobeFont-1.0: CMMI8 003.002 %%Title: CMMI8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI8 known{/CMMI8 findfont dup/UniqueID known{dup /UniqueID get 5087383 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI8 def /FontBBox {-24 -250 1110 750 }readonly def /UniqueID 5087383 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI8.) readonly def /FullName (CMMI8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 59 /comma put dup 60 /less put dup 70 /F put dup 78 /N put dup 83 /S put dup 84 /T put dup 97 /a put dup 100 /d put dup 101 /e put dup 105 /i put dup 106 /j put dup 107 /k put dup 109 /m put dup 110 /n put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 118 /v put dup 120 /x put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBA9B440A6DD72BF8 97084C906B05FAD969086ED21AF0AA1471613182B26117D7494DD9F9270EF3ED 8DA4D957225F75D060237B6DAAD5A0AE3E702B3D1C437835B93B8AF1F9E7D966 E739CF3AD5E256F90286A34069E5BB4122F94F18F3485658D0D25B938522A879 8215A417CA2CBD20F71C5C5FCDE21EEA7BB27876D93BA667868A419287FE59BC F538980597DBBA743DBBDBEBC61E3286DA7977833DC8BFC5E52FF5DF5EFD9A92 D070EB769E31E760A50FDE012DC0057835E8B9B046FCC83F1A0C40326AFB4E3A 0CC3BFA35FCC64E32854F32EB7DF10A19F95830136BBB8139DE1663B7FD790CE 464EA431AC109FCA0E03F3E0D355FAE20AC8774D6B1CE233C27680C77DDA7356 560A27C75993E8C980CD1E3B0683F7E8A05119B3AD567DAB4851B66E418687B7 F9B21B3BEF607918D5973421B68E65DFD8B6C8DFDCF1CAFE2637D365148EBCE3 FA4CC00052A2A522205EA3AE3461CEE02042E1A3F11467CB6C8C849B200CCE3D 0BC188EC7B934CBBC0AE2BF5DEA228181DBF0F774119F313516E7D97FF532621 9278F856C166CA6547504F34991D588A0631A5CD06363F3FEE9FA0772C783447 ECD0A200929CB58EBFB6B72008E4082B5D14AA560C24915B9463A92F38237886 C35CBB2D4DD6D0CA8C1D4EC46093041C6181C2F6586EE3E7D4E647A107B6DB23 DAD9AB5A0C2905455FE58075EFF6B48597078BFCCDD84812B98986F34987CE49 7EFB19814F2A58B0233A59331F6F8EB66401F04EE7B1ECAD9BC90A2BCEBE213D DDDB1F75C83609ED6A669A0CED58B2E269E76ECF73616D94F13CF827C9BF354A E82202988DCFE856786B8AE569AFF3105B55C72C58D310FFC0E10B2ABAC8DB06 40D5F72E54770E9DED1AF4616008595B8481E3D9AF4191CC9A5BFD9DDD01C9F1 FE7165D21E488DB40879E863D470CB31CA06E5B5F1F8C3CCE04B697CEB0F3557 ECAA358D2EC2B370519CE06138FA702314BA01F1F33881825EAE1230098BB3C9 59666983275CA4E8D9DB34979F86535577E79393A72F84B0F768FE8C92692907 15E9FE9894E98A0EBEA490CBC8C7E5A9F3E43B24C2C5A4BCD71DAAD3CC0B8B82 AC13933543E295C163F61C9FD18371CB514493F90BF7FB460C029B8DD2E2BF05 FD66B451DF277864DE1EE42100BF29E01A50258C2758F3EDE211BB3457B8243C 20BE72983FD6FA2581C5A953D94381E32E80D6D6095F2E93A5455C101BA71E8C E560D4694E4C167EFA25FB1E9D214AEA745CE34CAA5468FAEF8F6BDB6C6BE8F4 3D58836C26A2392E4C4DECE284A90DDB3858A16D6135FED655A600929DE71605 6CA32F6851A2A6F71A9DF3D5D657593BB729CBCA2F4B059365B7263DC08AB211 9C547096E6427F6AA53CB2EB87DF0AFE2ABCDBD15D7EF228D3396413B83C6B4A 79E41F9BA55A2688F62A10472675E5658F151F9FD6634EC94EC0682C17448024 CC1633077C07A93E4DA8749D974FB8F4332B5DECF97D749C10DB60D4C90ACBFA E65AE928C88BAE19234690EEABDB30BEDCEF2660D7464D5071058C30C572A2BC 7DEE5384BD7614A4BEC4C84E18CF7EC81C810256E8CE6520466C033E2A36D3D3 5D6074B3857415011D8D9D49A474D994571CDBB89AF92BEA879BEBAF67663F5C 17ACAE809C2231EDD0A76641BA52FA7B19A2798D54A4A9B62C42F9905851229F 2CEE0191C8AA5AC12BB0CE9E5E3E862683AB57DBB4AAD6AC0FA8BA4F408D41E0 755F72B82B7C18EC6B13995BF7AFD66AF4BA0EA7523DA8B75EE751744EBA9CA4 4E8BC1FB37734503A5B24FB9F2C2D07A47CFC477F02413D55BD7DC180B0344E8 50248801FA6BE26C97F397797F5F9DF762967E7CD92CCB8B2E587C92177619A4 BF8046CBC72C6E69DC78B8CB6B7381A290080EF59F5B9F29C1167B261C932E9D 010D2D14BB425D157F22BC0305770AECC5BC80000F8CCFB9930255A68F299ED9 D3B5B83A2CC00E3305EB281E1A7054734661B175C6CA0AF168790985F173DF03 A8693B677BAFE23C3CF833FF6463B136FC370E4F0C29E322DBEF637F62C33CD9 B0A8338FD67EC628E3BF2FCBF7CF0347D5CBA1DBE6DE878DD670176B85F69EF2 3C5CCA1BD2B8A385F113EF1CE522F5A6AE053B9C1E39408C9459DE3E7FE2C4ED 77F026B0081BB80D40185458139C16333EA27F43EF1204BFBF80BC5301B2A3AD B10F7EFBB4F5B7E04DA1167F68BB6D4049440B0F57385FF0A95E72760C6A12F8 1335BB31CB74081FBAA319180DC00113CF50CC5A41D2E751E055DA1429CD75BB 0060C21CED634FDA106C49A12B356129D010E29F2919301AA7F80222AF3905ED 672FF85C9897A70241E8DDB9A53034B6BB44E140D9E739848E7A782F24B98AC8 00DA09EBE4532787E5CF3ED815705F659D8E52DC2C2D4949374A3BF192BEEB99 1D9A90A4F3250BF8A1FD40D91F5B34AF2CC561FD02FED712500B24330D87DA9E 4AA46B6E34BCB40B1F73A1DDE07E002B9478E9651D2BF85E67585B6ED812BE03 A594874A235B1C1840C4BF4BA6D863583D8C12DB49EF7F8CC24DCBB6B21FBCA9 378F3E2DC406291AB324571F76E0805DF8826090F0E8B50599CA58D124653D16 16C782B01C91A6F3DA6346482E3163D28D95EA49866360147296838A3FD0CC53 920F91D895F839CB61FFD2FBA296CA4C6304EEE579782AE5FD33D0FA652BA7E2 CEC7C01DD0D3E0D56E6177EE5F609A396F7FC8EADABB465DBA7F384E215C4DCB E64F807A50A461545107F9C3F7D7CC7D33E6EBD6D9228B1DCBFEF160703E6129 0DCED8D45DD54E2A36E698A616E7906A50901E453BDB2A363EB77144E9EA6F2B 6BD927495EB0EBA5755165707CCFBF8759CE5856881117C7F3EF6D494EDDA7EF E499BCA56C86467AC573DA9C2724FCC74BEB331E736FB093DCB67DAD42296655 415D110F2729BD1D55E5C9CCE2E724116F45FB2E66AE0F790258851A5C808762 68B8A110BD326F8D3EC45004E7CC08DA42F6CB80A6B6E7C286F139534A275BCD 2F812993DD9C9A1AEB5E7E4BDB4805DFF3A7030263AB060C9B74F0C25C5B9005 965284884450CC2815DF28D5F9B0496DC7A3AA85E1E42741E1538797175C28D9 FD904699C771FB066397FFDEE8E8DD1ABBDF67E6BFEF95BB700A7C1BA91354C5 42EC3864F6E19B379E79A1CC3C786C0DA146C6B0B8E507ED58DBB1F12F613A98 0E1F8967991427A22ED323901C4B83336CD343212131E8B59C2F5D232702ACC5 7891BFD4EBA5D0FA35AEF9F3520CA82D121BF6885BBDAF15248A9E4649ADB94D 0735CC4D14E1D7275427D00C8E709579612F7F74DB6FC218C10C278CC63E2AE2 37EC996B10C0229D687F0DB5E38A8C4DAFB3DD8A9E7ED37186FEFC97790A1EA6 636A88FA9FB4D282234BAAD301A1F3AD33F252C5EEC49410562FC52809CEC466 A0F6D148E9AF19D6DA2337C8283FBFF6005C37AAEB0B7F7217A8DC6F949B9984 72DEF163E4D5ECE4288404448C96A7FF0AC76F732D50AD63A1D286C9180E80E7 C218B1F48E3034FCABA6BF262CEECC284AC29E9F3CA1CFC1639A681ED66C1FBA 666F073D45C84A286E05FF809D4764FE819B6A330E73695CCF2F448B4D4EB4B3 F63E94EC289807A2F9A1159CF328C002B467B19D6E9454CCE36FC19E0A214190 B251818DD456EF658B0398E275514B72D9C1DA5F806EABCF1DD56BC025D69FC8 A0C2FAAC1892B64D2AF79EA2F57F103CA623E440307600D50E783FAA998EBD40 51D23A0CEFF8D8649B48B982DC38D613F882DCCAE5F51233A641B3CFD783F830 D984F116DEA3ED8F0D3369AE629A006BAD4523F8E3C7C6B39A6C972508B67AE9 32613F28CCFFC4BBC86CF31A0C25C786554F7A1F3DE97F5CFD1A941F775067A4 784385E2D02EE1FF886701B1E87D966D3F500E15591A5012E645837FE2DBE3E6 A3D375C6CA0ADBF96B33EC3FCFFFD888D7344B31D40427B8A8BED0FEC6FBE038 1FB5F0714C4B5A0E607E215B5B7F76ACF0FEAA4C9790EB7E13C0E3933B7C63FE 5B934EA34F4B741C3667BF1735C685CECA63507E6FB9EB06AA010311F12AC1AB 4CE3FE8D1EA1EDB3C700BEBA516FC71D740B1CA1A60D4578003973CC3EE21DB1 58FB1CF7E2EAEB2A4A6C742EBC3575EE6378531C6EFA6E6986E68B8E25CEEA67 A59623FC1ED2ADDA9D72DBA627D179E47DC7F5551E07EA4D54ADB6CC8109D340 7279F288E552EFD79C17DA3431E53EED66D16F24BF86468C2FE7EFF421560500 12FB048D6CE2F370BE4E560F8B4AA12362ACFEBC839351C1D5100C625B14CFDC 747B66082D4AD5474A63EA0054E9C3E6295AF6B133348487B0471395857F4B73 4BF8337DCE2FE2E1A4EAD7E7BEDC822BDDCE42B79B308C11897C98E3ADE253CD 09CEEEC0CB1DB66AB072E36E1E04911F40B535B0FD85982C21B8A587D65C38D2 DBC5A07A0A26DFFF7460F10781069490AC1B611CF7312A14B4AA6005A4582C5D 336BCC30EB47749193BE8D457A43F54204B070DF5AC2057B6437E23705C7FE8F 7BB150560F7044BE3E48EFDDA539FEEFB0D2A7856CD4E405FCE0F5EB190D91AE 578E2EDEB9ECA218573BB1A8EF116043A27DD17A4047BCCC7C5F3C563A910778 45ABCA32C7347E6180ACC86F9D665FF025DD8AF514FC3724B5C3510F3C37E0AC 5101D1667C6ED4E8F37F06CC2BDF66CB5A9FB7C52CAD26344FD1557571336A1E 1E340EBA149B4EB99016D1A411FB874914AAB2A415CE3F5FDFBBF5AFD7959B9F CB127BDC68D2A2F3F07FF3D4FF32046C0371CD2E68A6471E46B08413FC3C7A80 A107EEE57979DB387B2206D2810DB310B7232B2DAA385256C8A58964B512003F A0C24ED21809E2576229627278118107B9C32345C1EE8C0CFB452CA362379369 31320DEB5371037AFAD093B61E8AC7A6DCF7D49C7F8EC32DC0ECEAFD7E892810 039570D2956289B15E078C2545911BF535F72F7DAC619BBDEEFA855BBAA81704 18F7D351B0936357085A32157AD8E27438A58B2397D69264E748B0B8D01B33F4 D04DC59326A7DED39E247A1C1A1AE49382BDBDE9478A1CB48F88BDF14A268B40 A40B9FBFC4C87FD3DF1EB2464C3C14E36CA41E09EE0A9B75FEB0769F9ECEB1BA EBF73B818427FACDBC33BB95B9654F31C59A766E931C698A8608F15290FCDBD3 5C535D9036A19CB7B55BF54E96F9B2206DC71624E2E55FE632FDFDEC8757AEA3 1D83D190ABED5E7A7AAE2F41FCEBC7C18626BF58F9E9F02FBAE0C8AA85E9DB21 A3D8907522DCBAE4923C6A2A09FD2F08FE32215C544AB577B337D929E625E704 E041C2381AFCFEA37F3133B6CA20093EFD457C772E428325E56C9CBCC447EF9A 05A8C3F28017DD4FFACC51B38E4896C5044266EAB4EB7C13FE855E790DCF8A17 B61B1D30DD866BC57397EF6297C4891451FD6A5C6AD6D7446F58F56A68650908 224D9F4C31C6906FD29BB51DC947465B808438E6260325752808963C808A4AAD 60422ADD62CAF315F6AE92FACEC55D5B682089AC0BC051CE1E2C06A3874736CF 0DB5F7C8F178479E4F11665402781D80397C75456F5CDF0A4F382A19EC6AD64F 71A9275264800E178F212269154DD8352167C57EBC0A38BE794AAD1601C8E541 7E1AB8E969A76E1EB4092644958FEA2AD29635E70C4DFE2EB0D9B3E1644FAAD9 B27AD5466EFAC724718962B62E7B8C32F412B69DFFEB792587D571FB5C591D95 4CD441662CD1B07595E245FA537FA9EB5A20A97E5C9251EED22C9961B48B25ED 85BB7524F635F9CBA3714C6D60A6BF920C45A64F4C366C1F9D22F53084997C9A EFE2D79FBE3347111F5093E271DB7E3770B35D253DAF93653F6A23FA145AD775 AF11E188EA0428137D9A14542E3EDA6F7B2E5AA86C9F3D3649A85ED2F020C696 01A339FE6D7E42BC548C8F92A4E3809C67A986C99418772403D16D0E8662595A 1F37563671D6DA0F36CAC99DAA8FEA215DF7D45E61314915A30A22FCA86A50D5 2FF2EF08E240F9FAC030D92BDFBE40F1972DF413E6B452024CD11792BFDAA2D7 C82716528AD4B3D637BB43E748336DCC86A952BE96F1EA423E31340FCACDC1EB 02EE932F58734AF3A5B2279361B63F1D824EE3BA9F4D2EC7B33A300A1CE8CA43 24616444176DB8099D85AC68329B1F85E4B5B16F3B396FE2AE7774F3065D0203 AA140DC128D6F935C44733EF585F89E8639A2096A225A2E5E49D447D8AF9FD44 CF6C1BAD5C5E5262AECC5543EC8199B00B72BE32A0F110F64A1D0D5CCEF38FD1 155D6198E9A343702F8ECF5052333272CAC2FE016681E12745CBE14E1065EFD5 407DA3686080989F6F6D650A9F1EB3A813B070C30C0D3B4A1E9C206E2E4DFD51 D8DCBE9AECF956640A2E79F1B4FD0EB8E0449AE1B8FFEBC43275743B4D7F6605 0673B61EB3189E74F51F3780A91E6A5C6464C8CF7D563D9958D46F39B1A12087 6BBD4898BA9ABA468AE1F24115891FD3CBC2195F75958E26DF8BF1B93F7B521A C12112237AB23A8E5A7B7D0DC4C53692B35F3CD813EB463C0BD3A6486B0476C6 3B36DA71FE512E5745D097FD4AF5D056E434DEE2AF926B2EE79F7FC4FEFD4130 BB4B4BE01E5C720325A4884507CB51CBA4FFB615B78A4182444F0ECBE4161A58 E86FE1DA2E39C2BECBCF1F1D7B9B776A26078FC252128FA8108CB83F673CFD37 CCDA493234FB93E1550EF8D2DC049ED95B00A8A57834B024B277D3DF062E748C B61F183F2D72AD075474F8165528CE75E4F40B38B0FAAE45751C1907F8D31619 E88EAB02EEED415F3EE3BC5BECC6AF565D34E0BA2958FF337A2B06012DD1858E C53DE52C108BD5AAB76C882198C72CDCC958D68EA8FD26F76F04EC1A08B2AC3F A6D0E8724D2656555DBC0C8C42A3E22ACA7E1BC8E9F897D9AB692E0FB9EC32EC 59E31CCA4516A3C3BFD5411BAC3DEDCE374D48681CE7D67DEAB93F5B5C5290AC FEB29C5EA2C98095692873D36C7DA24847B66F31E4CA4C7AE5C79D7CE4F0532B 78620582E3731A2A6533A03E7155B33E7CD142FE79F72721862EDB24959B9783 F834CB616FFCB2A23497BA6D99AE34DC459A2F7B3E4DA2B54BED118ADCD92178 66C40F4E60F6E1327D5DBCA645A2A7C770807E6D7E47E1265C753F8793BD2D1E BDCD749CC24D4AF9315A93F01180A0F9A7F420DA1B87664DA5FD967131273271 9DCC45C3D57EB9B8AF14771E8E751D88B98D2FFDC72F5011D402EC34FD010ACF D3B0660304725191D64FEE106253FCB3470F1A16EB7B45C1489D3534BF94F740 C2781DAFA5E8A9E7B25A85BD7935DF3ADDE08C960E283D8FC3976FDB4085DBB4 B6B35FB239C28C785B18BE4FC98F3A5F410F562DB5FCA04E8074E4E790F4265E F88117B3D0833AFAE6E8B8A71D7731BA6F14FD6F217EDA3F8CC687A494FC3914 B84FDC37C8C335AB1E7E0BEC7FB6B7A595C50CF8F0080C8D461BCB8B579A5155 F963B6587873FA31C3A6572740C63EFBE58A2EBB723B7517D2A243F6CB08A038 54F4DF0F6692022B2EE8C6F6B73735ED3166BAC58D9216A06EA6FC7B63B20031 D0F0F99D83D9030B413C2360DD2C553E34BD67851B743C3FDA676AD63C5BD759 9131358C6BCDF05FCC048F4EBB9005899ACDD8E9EC9BB8C5A08E83485047D263 0ED69B4D1869A38068FDA03524022A1D32FA2AE0BF7785FCA8F089152A57EB8D 5467C28AD44E890380CEA0B0E0CD0F6427F2C3BC1A5257BF03D902BE94A449C5 EB8F33DD607BB4E0A1A7A24431E1DC2F03596EB2039CC1A9D524E10B374E34A6 4DFE6694F9E158DD6678BCB0B56BFF435FC4F5EC442E14391B45178DDA235B7A 07AB6EA76230B60456344BDB08C929F9453553452C97E016C26C11B68186024C D1AF6C638EF54E26AA88856FAF1FA9A0DC5A9EFB7130EE72EB3313510EDB1DF4 8D8E512036A986387D8E96689E912149A342974F559E7CA4621E84351914EACF 7810F41CC0BDCAD6165182C7040F052C34D073FFEE489549EFEF83111310B3E5 F67EA5449D3D81DF1FFD64AE0F1A760922FC629FDCC6AB0DA66CC29665BE386A 4DC43CFEF3C5904356B7B2EC0AF36BB4FF6A994C8158790674A8EFF54A36B7AD 8C8B833C1D1FDFEBD7D39122BA602A67ECD2EDE9D35C2628EF1FE34B2CDDE154 2247242DB2541C5FD49EB8348536B83A67E718DF66A627D7C7622F22B5D3A3FA 5149B224F82B72E4F2A1B22BD6FA7018B45A404E66E2C6B96476A39E5D330AB2 ED04E2A7FE38D3A88B439E804F390F4B7893506CB00CA5B21F103C6090BD81FD 8B24C085EF70FDEC026B1ACB30F93F58698AB2A4E7319B1F5250B6815E30CBEA 4DA1D2608C5293C750B4DCFE4783F5A3DB1C8CDFE6772B2543B9F803DE5A2537 2F24B57B0D576B9B04024BBED9CC49652ABAA568B3ECBB45DE5A55261419794F 3121F66A2722AF63B0E2FCE3F582CF8512DE75BBF2FF619B6945496C8D5B8713 1E6E549A516572C096410605B9168EC2EB8AE6A59C436D4E3F87D7F0593D4698 8DB70C59DA2DD496211FD2E985582464B12EDE500F390BAE0C8D665673C1CE11 4FD02F0F22B93C7AD94B69E2D1D3863576B49A86142227CFE6CA091EB11F2C18 27FAE3756F6430707EC1B268632477FD9934DB83B3CB214E4D7A2C0EE9969B2E 842F7977E781D7BD1737B8404821A35C8E879E89655BA4F811F26C9D3BCDBE8D 99F12625ED52B6B5531BD06DC86FCABD136456F3781836CD09B28AEBF4462039 9A967F87ABA1B5B8A1761A8EC299F45D5F36D9C92AF9F0FE54114529F09370A8 38ABCB81353AFBFD8A884C534DB9803AC0B8710FF30D27F7D05D944AAE5D878F 7AF85236135E5F752C45AC3AA89122057067E0AEA4D6646E9BFD1396CBF4FD1B 0E5D61CD420CC6E3AE9FD0D0F0FF8CC2686E020FACCCF08CE450538F4F3DA706 13DDA95871B96BFA185DCAFC5034F75C6771E88D8B1A76F84FBE1CCC790CCECA F9CDB1FEA187D5A262ECE189A631F5077F876AE595CAAB209AF7CF8599735533 14D87D306C718E0D4F2EADA04706594FEB059A2C99A000FC3090D458C4A02F8E A586874383F2E9CF5B5571A0AAF0B3867EDE0A050E4482E48D80701102EB16EA C95697C18AE656DDE4F3CB52B5D3BE8800D372C62A9219FD7F3C475B6D84FBFC CC4A97014B325EE68DB4154BA44D458E9D028E9B4D096CDED038E788EF387322 72AF049C080B6B325238DF5A5BD1B75079085D3BA3BFF2C2F585FE1256C5C642 846D9E7F4A0DE751CE509BAE6B4E59FFD94143446D045C0770319FEBBFDD9950 8E76C31D80887E2C35A81C4E125A3D3530A173C58A5B86F205E5568694195A91 E38BF77965C54B426DC2E1FFC038B6C38546DC5132A2B9E4F5D5F09B4EBC8DB0 B34DADBE7FBF144ADC52996845C086A1CD63206BD27F93BFBDF6752C3635CF9D 0C52B0BB48B46B88F4DBA757C522650BB391F25231AE9D56D35B888B3ADBC27E 5A307812B4B9425C60B3BBA0C62F3742A7F11832788EC5A4022C1A9DB36B25BA E1B38F719928116BAABFD69108AD124D32A21A84827EECC851F7696057D02E77 698E389874A57C90074E90CD37A1FC727947048887085526AF0A01107F3CD88B 7EE4C33535BF9DA456564BA8953437E7BC379C9B436F20A0C63CAF987C7A396C 20EC44BC4E5A754066DEB757471A71BBCDB66A775175A5C4376030F87F4CE379 926F9A9D14F12287BDBB2E07DBF308D2002D696A9D0CBCC167A91A743AF41F09 E5CB66CAB72907C8E9189BCB880A1CC8EA8DA4A1CDF803F687472382F25F3A35 BED61CFF1DCDBDE3288B76132143891CC5E7A7D27BE198C4F428617BADEEDB76 55F855735B2ACA65563EF6F087D03FB6E8B52A3A23FA40F0935C049B7D1A551C F80543B8AF7B01B8A69594798F3C2A7D847A09A2851C7137792686534A25BF63 4F42271AAE8AC3648A62890A4BEDEAA7A805BC89398864BF38526EC2CF523E35 1FC96FC8970A30EFC982F47F4BDD428CB10CC9CC89BC204CCF200BB630F862BD C9C036B84635ADD0E1B537708B7C5439D3A6101AD9FEC54A723C18F1B2D89B99 34848A970E2C5BE4850771DEDBBA1E8E99BE46E171743BB0CE9183DE0A255C11 5FF9C07363182E25883188517EB0289A41A956DF9753490348D5B98550AFA9C7 1315DECC17986609B4C031A6758D971582469BB1F55D6367BDE3FCF08313D79C 9EB67FF664E8AC4040F9DEF02EA473E360A6FD176B3703B2ECAC93899A3CB9C5 9513AF3BD57247C3553E52F3124CD922AE843A8CE359377AE487F80B2C90B129 FFB57DE84117E4CA84F242662B9520314CD8BB37BF16014A184437C7C9FA7129 E009A9BD9CBC1F322A3952DA26863619C2C2C9B4E4E7C1F9DAAF7B3583BA4A9A BE867D94E5FB55BBEC0915F6468D164E1E22B174D486C9E784AC41C789576737 958BBE130EA91AB2825B262C55F87A0324326B6014274DB7DE2EDFC5AB91A6A9 52B758FB9F027DEE102E9941D77D0D0CF59A17AEF6A02564C647EE7880AE6CBE 24DF7F0C816B5960376417D581996E25E20D3DA37FC97F87398BD1EAAA6BEA0D 58A25391809630D221EC128DEEA1B1C6D01C360CBBE92862923F310FE403DDFB 29A33A5319799F9E10951822F7E0E9F3415384ACF99108AA77089D68FC036E10 A637348043352BC6A01C9B945C006984EC46CD33EE7B581CD83EA5240171B5A4 09BE783C42CC734357F67F1A9ED80F7A7A8FA5C4816742D1629BFF42182C3CAD 2B639EFC8AB0D9970F8C2E5BB8325CA6A5E3CEFB34809231FDEA58E118C78C06 DFE022C2C2F06C8607DFE52FDC8E95EF6E4731DB941023571A09D84C20290954 8316B5558249529325A12E7CFDCE9D2824729786138D617221909475926D93CF 1AA9057281B3E465E59817433A4A9F9F19049ADF85C44999C58218104C0BB152 8F843D4B6FC87D5CD72FF7E65CCE0F902FEBB42118AE2BAFBA7BCB3065D38471 84A3BD46019AFF0FF487078BCA27B9EB6E533962C27805C7BC3681BF01958785 BB3741133CC142E43974E9902E185DF8F3DA3BBC08F7F1E00306681230477996 B4161DC5A7777D48352FD758830213A9D9829608EA2CDC8156A108D40B8F5E88 5354F83214C5E25208857B9603A84F1195CD60F375DB7551ED76B595C1D67BB6 01F4A665830476C51D51E3306067A4C4036B93EFAA6E41D2D8FD396CA0147695 83420A73159CC9158620FE0DD4CD64D35754827BD7B9A1C03C93618E7FEF1FA9 7770C9B575A93645E09D86C376852747E0305EE860284F53C0CB294D993E9A78 BB0A622FDBC80C69133049EC15A00556A279921ED8C8BB5E7B2EAA0BA24E25A8 B6C3C7FB7C97D8937F55A96C8D37D660E1B880A504CAC623BB15E34642BC6D9C 6876056B9A27783EA824B2D86D29657023B0C721DAF78FAAB9098CE413D0130B D49B440DEFE8EB5E4369795180768995C4E009028547EFE636FBC827999FF9ED 06F41389A08ACFABB9E2535C40D3002537359AA2441935E2D5E7893C5CA6E849 84305BB288B2B12B3DD933BD02A807166C12DE7D11C5654E204931D10C216089 2DB41B587EB88AB857C7A822B2840BEFBBE64123FE0A67B38C694661460BC8C5 DE377B63953C664FD17699DFB4AA3043874444A0778F2377E9A31584723D63E9 AAB68BE6D6076014543409990926623336A571811685A19B3EA2D11A378E4205 351C2E85207D0E3BB1D44565588DC50D41926E5BDEB37BA735BF7216ED6472A7 942D8D7A7B0ADCE8756ACD4A3E263431AD934FF3B8FD42C4D7BEDB4ECD047355 B83A169B9DC50CDB8A7B35801FDB5D687CD55892B748A6B803A94D179FA3CE09 E789EDA6551570DFFC0B7D3A67C56315DB2F75E5CF254D3D6AC0700C41B1055C 768BB7A40E411F13EF03D72F9322F45B719C7AA965B7AECA44FD572AAE72EEB6 EB772B0C63D8851E601DB66142D49307720872507B28D21348909663D3FF0A88 86D73E436A64070DABA70F4DE1850A668174CDABD01FD1E9D23ECAF864130404 01E81FD0C2C45CEA9C01C5ECB0EABD0E28A5FBC16257BA4E470C04789933CF5F D7AB9AD7B4951A56703953659DC25ED3FE35C390FBAB592D96D2CE8BEAE97F66 15B764518F1464247042940AF91996EECF20FA6C343EB3A92F3999F9E211DA7B 972CB6C5ED692C621667D8DF79057F2C4B3167E091652081AE25E57B7A7B990C 33CFC61E204ED7C86F580988AC01EED7E9BE948E7B40AE1852BF88A7F1BE7E6B 52D19FDD5BE5216C44FF915B9A863300CD800B353CA49D97D52B19E57E559E48 F5C4BF39ED2BC08B20A7757E93CEB7B9C9025F7B34DC732BB0F7B12AF06BBEAE 2D48A965972067FD3B4D87AE9321836B750E5A118955D4AA8D0186604FA03EDA E57A99306E1A676364FB933C88B0E48A23F259DA6427B0EFA35E63C89A7F66D7 1ED94E6A269BDB80A42C76D50FA9AD7E7C76D73B8523D242905EC37C9ADC49BC F5A6B63124231EF6FD0E1132C9AFCF2E5F655282E3701ED435BCC2E5DA98FD53 98F7F71B7E64D47CF317526396C637A28DF1FABFFEC4C8B05B2BA1907F1E936B 3CA4FFC2DA7290C38840F80E7C8945B953E00E5FEB7047BCC9361C75BA6E8353 634A5972AA66DD10EA43B277D6377BCB152F07548D4E37C0845AB2C327F9FB6D F5295F11AA23513C6E66D523C41E56E1A14704630FC34CCD4767355C6EB30D38 D43ADA1C52755C434486BCF6714E4371FBCA7CDB7EA0BCE2B9790A2D23F83F1F 032C60557840A177D33E94799C789BA65D2B8A83950FF5BC4085AE9DC4CC294C 462768A665151CFEF7CA05D687394B050EE09AC0C86498A4DD2525E53CAE1A44 677623F19E26FF46C945EFAED3007B96F80A4D00122DB29A9E2C4283BB053CC4 6C34AB9EA9E8BAE8CA32BE06CE8259EE8FF24518261FA35C62A522D533CBC4B7 345A0348ADB7A27D611397372F537F51D5A3976FAEEBE24CE8CBC66D51C52252 A0642D9EF06B021F85A111013FA3F3A73A81BD19BE87CA5BC8BF34CCF432C13B 80265FAF6FEAC978A58A19153E829387DFE1A72057D997750F576E4C07FEB7CD C461101C88DB6EEE4DE90BA869D53BEED65D2FFAF506C210428D126E6F54319C 6DC8ED46C66FB8EE42118E027AF5D5D1AB4E9E1FC51938B69CF347A4A1FAFF8D C5F57D3E02AE397F5E98BC61809FB2EC49118222E6CCA39958307AF7A500654C A1405046C76E57B29703A599DCF6B3B31E2C586389503D916607624AF7B66DF0 6EFA456986F268ADBEE685362C4444957AF9CD0C9B0EDF311C173715F0DF467A 9D118416AE4EADDED6A2E04D145AD83EAAD597C081A12198677043872BA6B45F 243EABC450C1034F7F9F5271306C00B3E39C65E2E1946B077443A609F58726C9 105BBDFB65F3F89493B6A526BF8105FEE2A817791311D660A8A1294A361E3CBC 59F968620C90E0B2255CA22EF41A002A56B0498BE10DD7A12CB9FE3954CF4155 4CEC51B2DEBB95F2B7FD0058EABFC0063FF3AEE8D8B385478A1D69FAD07450AD 00108DFE8B85DC1C5C6F5AD8626196FFB9027BA6D955922BBFFC1CC14884E9A3 341AA80D1B055609D58EEAA3724CCC50F5B354DE5CBDC1AAF808D040AEE758F9 844CCCCB19CAFC37E0532C40E1EC6E248BB8EDF0C69B34BAFDB70E9A421B12BB D4D1247839FB170C7ED29DF9F8ABDE7C5D5735059A0623A49748EA9CD1E3B6DF E0B817F33A04FB7DCED1EA729FBBF3D9609A6548AB73FD348F87069193900154 51F7A4D8F2FFA2CF8307AECE16E182DDEECB49B4941D9808A51011D21FDE302A E5C85EA95268689933C59746AABCC48DF580E931394519FC64217263D1E2BBD0 37331B5299D5A108259358BA868C8F0536AB06EEDD3C9D7AFBCF9155AD6A296E B51560F2AA2E22E0EAA8CAECD5A5CE64878D22BF05681CE0C6C51360D989F6D6 8876CB92CB08CD8DA62984A5608CA04F64F7666ED87148654E0ACDC347D04FA6 953CB7D75CD41B30B8D9C95B74AD8F12B3D42EFD554EF6ACAF514468C718DC0F 14EC2861F04EFB3F27D549BE8DE8F10DF3CEDF409415B47804E87B691F581733 965745F073BFCFA5FFE011A1CE803B9E2282904AA4A38C1DA70CF566D8205219 34218DE48913577CF34A91C13320EFBBAEA3F3751B8FA3794A00C3DBFFD7D672 734E59A230EDCE01614979146C2404E3F38E58BF07BC4FC9EF15A977AE29B87E 06EB6E81837E1DF1B44123CDB11EBBE058E02F02B812290BC36581F6B1C342D4 76178CCCF3B0E665751AA4E6EAB2F27E8889656D5D8AD883039693407086E2BD F996A145A3C8E685B3C1A160F011FE501CCEF94E93BA2988A0FCFEDE61BBF80A 7AE13BEC55A74A678F91E06F0FAC89CF9E395DBA055903E6D01BEB3DF846E701 C92381F7138A197F6849202D7DDC23268A33BA20964C0A0842D7E4FD9239BF9A 0CE234DB0ACC3B5CD6A36AFFEDC2D8435FD208A9D50C99694FE3218F4501C8D5 FD119D0603DE779C98F1DB59B7E06247332698E09BBDDF11D79E3B49F103EC50 9D21E29ADF598FFAB685C0CF4972BB90A454B8441EB35F9C1C4981A5591FC857 F9787366318C58C758E0BCD8EC50F1EA29065DC75C003C61DD1AD5BE403E8A66 44488EF6323AC6B4E43008FFB4D4FBE8281582C13230970442AB9DB24446065D 6D43115D5AFF7431E8FC2E65071D1D2C47201E3A017F176415F834E1FEED4F35 27B68F8507595291F2685774 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS10 %!PS-AdobeFont-1.0: CMSS10 003.002 %%Title: CMSS10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup /UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS10 def /FontBBox {-61 -250 999 759 }readonly def /UniqueID 5000803 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS10.) readonly def /FullName (CMSS10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 34 /quotedblright put dup 35 /numbersign put dup 38 /ampersand put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F 388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B 4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D 8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF 5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F 1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C 13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA 56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE 3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D 5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D 9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB 73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE 257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA 7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A 94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE 6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB 8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE 207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C 5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A 96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B 48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F 4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A 45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D 491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B 0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D 8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C 8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C 2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A 647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E 6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD 60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE 65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC 7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A 374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F 1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF 9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD 99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B 8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF 51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A 40E84014F5BF40948F05E8562C99266B9E54AECEF94765BC79375C69A0385023 A014B8705931C9A419C8F2B72C3F7054CD6487E75ED2E852BC19302D02C671FE 3892C7AF2A90D6F29771AF31FA95258B6F3434228B377F5FB494E28B5F0393C8 9DEA5E5726B81B7983D241BF7F78928EF8D8528C8F6DB7B307D720243DF00E84 A37A7B2C720348F83ACEFFA78929F4CFB5CCCCB2A074C78B92C8573750B91386 CECD4A1243D1B002B45B933534C0B4C51DDC50BE37BB6E42B8FFD25C9B6A4A80 0FDD3858D50F2166A9067E52D8B453FAE2DED99D96EF9523BD348F2C93DB66CD B17BE44AE1E2031C3CB01E713C3B3CD4361048D12E21C486C25269C5BAF6F1D4 88A0C86DD17FBE4BF01A7ACD72008DA3EEB0BBE3611F26BD3145C75C837157BB 4F71361A279F53E8F1650875D2C78BAFD6B2FE27B6D4E5AC2018D482EC1B6B5D 77B4E31498CAC80323F512CC04F1ED6421BDD6E2223145BB57CB87C67462CE46 FB1F601245917A88EF37239AE1E09507AFC7D83CE85563A9EBECED817C38D906 A5548034E79403CA78C9E4BD474269F936D2A331B19D0EFE83937474321B7E4C 63295997DD487BC4B2C0BFA6459AEDB6C7A96847EF66B919660191C5125D607F 8F24410F04C89AAD7EBA3A4F70D34C114ED071FD33CD22FA7701FC1C066F741D 1858EF35C722DEA4F0B30901535E76145C7854E58622CCBB3CC1853E0ED72CDB 595B9AF0F378DA0572C934637F05E79A68DCCF4D6EC463980D154AF8C6EDAE3C 16D853CF957CC287B3064AF293CBB555D2BAD9A9847B21227615E2F8D99B48E8 F29169E0CEA41BD28FBC81848A086E692741C991F39076EE06BFD36D20A818E2 66BF1A81672A604E85A5711CE0170D236D7FFF0CA6C47431E1E23B0A956CBCD9 5A7EC147DE2B141FAB51E3E49D64578C0ECA1B7DFA8E8AEF8442BCB92936633A 867F4B49778DAB99B3696218CE1EAB5D5C3015A82F64A29C7CE76B989CF65621 6D28ADF4B45EE97D589D6E06BADD6F9C30EF638ADA116AF191D655F9A6B9805C 3F011A1D21DB3F0F860E31CD7598C7D1ED353C0B580E1210642C92734A96EE41 70392B3AF78EAA1C2A0FF0741DB96873A4B1F26906766D22CD8AA681DB65B85D 0952054F76ADC3DBFFC8003A70AA8A19628D5E8314BF0FDCDB91A1DB08BDF0DA D7CDE3243679C3AE02E47D490D5B69A3B2DCE2218A77973C28284FA77ABF10E6 9EC310A47ECABF99294F4B11DBBE52133C9809A74924B0601196F5B2A76B1011 3AAE930AB4BDA1206AC4A7196898793A92EE43BF00D973962527EB04B6E098E3 B51B28BD28BE5AB14ED2ACB49FDCABFF9EE0F767B9FB5D7D79DE2F10551E0337 32BF0BCC38C944135F2ECE5D0D5067B4A461462F841C697CDD915E36FA05D6BF F936B86014688B418A6B18DD2C5524D8EFFF9251AA1218262DBC164B893C1646 7D5050AD009C084AEA4A290D8B3F3CDD117033119205155D5481092D339D4425 1F51B46BAE0806ABE7F1F83582AF60A8E6B10FF6DBCE0CBD002DE42FEDD68EA6 56441C855F9DA2A3D0BE58EB56F1E51582B20C680F36165E5CDE3E8E4AE87AE2 19950B798D0C90AFADA8248ABD55494BAA99505E5D28D3E7A546F427027FD589 0046B68D73567605C6DBF30CCC5448F031E4BB0BC8C7D451F5F0629EC8F9901A 0A9D7730CBDC8D3E36C6D2AD467DB065D5FF72803A8A662413D17D6C6F1ADB74 73E41814E2CF5AD253E053C1A890DAE8A3DEBEB081964C61EED41BDF7F16E2B3 B09949DACD2D5C7E7133A6AC9B698B70A22FD7791D41D30B2D8CD3940E7490B7 A810D23B02A497AEC65D75178DD87B0E346BC52EC3896BFA84D8AB5F8E90C0A3 59DAB00D8D24DB138B60E58DD3C9FCE4F3BA03A75A4C217D6B2EFF2443F10C2D EF95FA9E124084C3EE66B03716CCD25B2523EFE9DE2FCFB1B1B61C8ABAEC1E80 BA0CB7E53E5EC0CC62B4E8D51C795189035B3774907F4C9F096FEB8C6B815ED3 24906E76858DF58DF38FBAFB6608F9AC48FA4D67093F20642DD4B2A1A8CD5010 8007121D2D9130DC73290297C9BCC74F5FF814319D79D01DDAA02D8B01CF8C30 83A7A4A1313C31FA437BCED4D8303C39AC1A889DAAF7169DB304BBCA3C0B36E7 583209F824DF1CA1CDBC9FF6C28EDE56171C5D21E8B2BC0C5D98CA42086B4BE2 BC5D0805DF2B1438F0321A64EC8E2836D795D5EB9A9008D7D7E68300643CB5B1 538550FB6CC5185743E3AC17EE95C37BF74AEB500B32ED3ED63F7734AC60AA90 CC4DE805827868FE02CB3C607137115076E63DE438E09CBF367F01DA09E05E49 B0526FEAE887B49BC98C2994B75522E6DC7C01492948B6E438AB6A02043D35A8 1EC73F9BAB583378012FF9A1AEA9E8BE36CAD6408BB2666BEF4DD08E57DD9240 AA33D6F5D529AEFFBE5ED92C02FBB0E6A7F57E14042D1BF6927BDA4678064AF4 6C6C879A9D45ACCA5EEB95472B53910870053C0658B646933D5DFE226ADE0E6A CE8198BBF074C820AF15E24F40C8ECED29BD255CF6F7679BFBBF32E9147CC4E6 9E861FAE3D12FADCED169AF25576FFF270BEC33C93C2DD1E36B9C65A45A15740 F420C24971A11CBFAD5DDBDF6E7DB1337C8C9960E66FFE594C23D9DDF6863A87 1EA4BD3BF1B48F13514D0F9FC1164FA9A1C42E1822FBF9CB14D68F157CEAC8DD D45CE97866FEDA7D29CCB1CDA941ACE015DD274E8C1029E7DCAB0DDD8F014D85 933E8286B43AED8E16BA3A50B950CA763ECB22B36549042DE0D77213504BBD8B 4395897C2190ECFAFDA62813A632AAC1DE45A46E7E0321658DDDA4AA8DC9CF85 A9E176FCBDB6FE93AD2AB3528E7F851C92911198FCBDFEC2D9249CE09B3E7BE0 38F39F8EF383C6C7BF2063A64FDBA16264CE4A77D3C395367C6DAF983F19A1EF 66442C31228F2B25300F9FE7DC003860D22DC8E130F45283ACEACEFC09D53198 65070DD7FF9F9DA3A50F7F1FDD2DC58A1C566BDA64FCD953C31B24C268F606E3 58025EBFF341CDBF4AE893EE82B13F2AB799EA6EB8B8FC3C10EAE81830BCB9BA 2F6412A14480FE3C3ABA434525E5279D4965518CB4EB751F94C0C2338F9D55CF 1DA61B059263F7DDE3D88245861546A96E634E499AA64AB92F45F6465F5186BF 82954C35EAAB2C388897A9B1372F27AD8132B80E2EDC65A6FE9CE6E851EAFA5C D4FA9F120D70E66FC51D1867A9A3624F74E73121FDCFFDA6E58791C552979168 AD6A7FFE65E9D68C9D7C437A3841EBCFAB3F163711BBC66A6FC4316A16076312 270C3419F6DBC5D2E04B80905CBFAC1A1B2DA519AD2E1E1AB341A1958BE5801C CF596CF8FB9A24415AF283196CF8EBBDEBCDCF822914DFDF6AB56DF617EF4953 2845915A126DEA926BCA30A9F922AF5619CCF20218A2B2C1C1243274A2CE8420 A068CA90BCBB9F23C434430131B8957CF0396714EE228B394977A1DE5B75DA4C 634BDC86F48A3E25394C9F60E7C6C04DE9C1A9E9310547FDBCE4D162F3C97B99 3218060D1A541237D68AE20A013520F2ED965CF452025B6B612A1A4A93EC397E E8344B55BC3A856E3C202DFA30C58850207CF8A01B5BA5E8CD36A6E57CBCC6FC 14459B91A98C88F867E8E3A1B8848D5B568A09CBA79EEDE564968DDDECD31AA3 5D88DBCE1DE4E0B0CE5C8F04C08CA21C9970787E117BD0607110100124B6F698 90A1992CD339D22FF210DE097B459CE06933716F99E887D2FCC8ED5691B0AF8D 4E9BBFEBEEA14FDF66CABD85CE03047B8C545486365C345D38C2EFC77E1C6A9E 3A8652845F74578237F27D8B3F5C93BD399CA1E194C390E479E05C470CC7D12F 9DF70CE2C8731CF16AD971B0D83C74240E856CB336560B223567DC42F3FA8B50 3B2DD206B8BAB7AE2F70088A4CA8179A272A64AC1BADCDEBB87974BEF421A6FD 246C5D6AF679C631786BAF85279338866749CF9D1FE58786A1BC900FA536C92F F99704C3EA2E872C41B3B3D0D495124629C93AD601E1AF43956360D95D5D152C 7777D50CDC2CFD28A2C43FAF8668B6738F77395FBE7EF00B50C6CDB3B8FE845C CEC6B912BD685A39CF5EADCD1349269E6E620AD36D2B52EBCFFF073C6FE09FF9 D64DC67B473604E213E41CB4FC5E7863101FEF90FC888BB54E65CC1F458299E4 69B3156DA712231E3A80CEAA1601D41BF85A2BADAA40C7713E98327EEC8B919F C7B34CFD1D3DDDB4FE5BE73F5EA75A321BDBF423A15BC80570EFB527543DBE54 43AF09CD73F12FCC9B2D3A2A915A681B44CD4187BD2A26B529F0CC4ADC09873F 64F4BACC17F2B8A07867C7DC46D290B9F307F61DB56F053AE5AD269BEC305206 AF00321ECA49866BAA2DC6B9C903FA4CB82FAEB0FB188999A83DA8A3CB423ED0 C6264BB751EF1F46906F5A2619966D4BD0BBC38267E06AF1D9291FE9663A4F9E BCE57A1866DCC73DA02E83A4AA84E5B0C2EE0BEFB28EFC73CE8340765C0BB8AE 52D96521BD283B13EDE196703E75332640E527A5BA03068D5B75107F560F4F20 18F433A7679B4203346C01957123653522159B47F88EF56617BCC79EB7540185 053325143046308DEFB158BA8D43287C4C18ED0863477C48E51CC7C13C6D0287 A9A7423702800EBF4A8B24472DAE68C3AA1AAAB1A1D97E369E095072FBFFE8B9 39DE320592ADCB305770DFF1B5B4D4490CB1287D1CA6B6B14706AA37486B22BA AB0B98BEA7A3707CE0D48B1E10D22B1F740664D89BCA31040E79A5CC21229594 89465B191815F1C54F746F4AFBFBB596F9DB5A61F96FEC25F3AC9FABB68A1E59 B8F5D6310203FA4A7C24927531BA5522AF7ED6DF36218CE98B7F8E16E0C39201 9EFBCF327043F2B4DEEF67269934033D6DFF5EA6BD28F29C7A2E8896C4E213B4 8ACDAC580DDF9B5929F138F994D7033631A5FF2A8C331DEB45B8D64D159A6470 37E91BE326F6744DD073CA3A30D7E9F90DCD9B87E96933FC5F063963B1163C5E 135D18B469FCA59791339BA838A03EB104AAB0716DB2CE1B8B7E8A360B157795 83EA9E0BEEF19ADD31585F8C85C05FAB71DD913DE09C1C9EA1C8AE03ECE5725F 6D4EF56761A9D797DE8DFDE67F47468408CEA01D9310992651A17E579483222F C1698D8769062B250C3942C5BAAF8C5A8DFF206DB2EE1DC21B82725168AA1489 49107315560F6BBC5CE1EAA9A6995ACA4B2AB61D322ADBB3CF603CE357418415 6DBF6001575130951AA7769F0B2D0ED00FC5B4BE304F881CA148ABC9B0736B62 A93B88F8202D89FD901025D06F451520DD5351793A2A384C92029F39560BFC99 2EC28F2C953CF7217EA8AA1DC3868530EB20EA15150CA004A8DDEDAA27533BDC E636355F3B4FA151F2004B6572A06ABD653BDB4834AAF0BFB7D27E0EB63542BC 1A95BF242695AE1693B61142ADE61930171C8069AD9C289F885817D344006D75 80E7319981351E9E0FB30A8BCC4F66857D8DA321738EE1CE47EFFBDC3055B750 7AC54C448124D472F1A6B8906C4CD38A7534EA66587C8695A16754BB4987C5E8 996FCC7E9E76BBB7776EC84B2BEFCA514C361C951ED9D88F596093CC4D3A27AF ACCABE83DE01BC31E27DC5E580227ADBBCD8F1FCFEE2B088B60F3DA6B9A34A71 06C5D3B04E9D62B4234C7978829B2400A1B61F5F10DE65F51412000CF3CCD182 0B2F610B82F76EB12BE689BD6232DAC318A69F592FDEC79CF12A6685080A5E00 D474070C3BCBA17BBF27706E1A7A1C592B60AFB4B7D6297FA5061F73C43D1A1F 1F61975FD12D5CD9DC72FE93CB6851FEA47C98BA7B628F0D2E1A62611CDA00D3 FAF19FF32272851DC99FD2AA96525A9C5C8CDC50C3BBE2AC1FCC98190AF24811 530FD5CC77B281574D8F5259C90155AE7F4277E85B3C65A77E2412E8226EC8B9 32C497B83D9B2A8991AB6398F40C7D6250BD64F074B7C866B70865F4952379F7 A4E9DC36751A10783FCCE69D379B7F9645621FC230C8DA16F50E8088A253D747 74970BD72EF51D1FE138C2473B66773F950AE0E6B25C1D2D18CD9B3E287B8D4D 82F76D0F092221B51790A6FC11414266485C9E07E4068BA593179B799924CF52 5F74C306979949A41FE381DA94602F319081535ACE90D125D63BE6B869BF440A 7CF85432EC33B032C18064E50AD60FF0598BC52864B3F62A4266E23A13A72BD4 A3BB8D36C3A409E8E8C597FFCF8D95BDD3EAF6AF74386798B4DAE513234C9AE3 DA1EA868B57E14BAC07254944F5CD4F8F35A7BA534DAAC3B24C0B7B0D90DB4B8 3EBCE5D8E8EB108C434F49945DFF6E2902D968B1D7A71A480C1AEFC49933B2E5 7A54FDA1FC1D66EB768E8D0CF60C7E4966B4FAEBBAC07B7AE0966E31328E7ABB FAD7BC9BD3944EE3DA7F8EA9F19088C53AA19B8B3BCE140F9C1AFAD997A4F35A 31644A9B9086E2E2ED27B7F2D7DCB1FEF0F2D3EC2F962E535C4110F79EE177A9 6C2CE2B54565B1D5CCA24AB76329002A2C8799E7D95334245E7C49AC9B89051E 695813814C77646EED0EAA89564AEAC4F83628E491CCE749C1E1FBE4EB1B4752 BC97EAE80BDBB518AA63894D64234E73F88945390DE7B0FC7476F761A927DFDE 9CF0127F5AEF64C624B5DCFACBF44985D3BBDFB2B25A57BDB3611F897A4A0D42 67B2B22EC15BEAAC710060739CAFBC387CE8C16BCC6526DDD1D589B1B7ABC15B 9E49ADD8742A31386D617343B6FE951E217AFDC64E2DDC2B98530C20DA1AC9B5 FD4A6DF26DB37ACE66CF428A1CEF6915127C69F8D664952A09BEDE24259F5E97 5DC996DFFD9E2DE4D318B0F814D87DE335511F101911006730AC54A8FE1D20AA BDCF97894BE8A68E408A503AAA0934F22118F053C9798101184F367972340B90 C18675A05A32B46DA0457D58AB3ED8765BE02E28CBE24032372981A1EB597F03 B1F634257714AB60102ABD24AFA462C662591C365E01FF49AEAC56DB7C582421 9BC10ABBB61C4362F7D76F88F27C61308D5F6AA4E78EC3C16116CE4F267B7610 A6D157EADAC1E047AEC8198E1E9288BABD945A49A7324031BA3BFEB66D89969F E6B4327E8AD4F233C5D904E7E2A4581B70DE8BD4751009083E4E8559224D79D3 5280C0D6CFAFA7941686D646E79F2702AABA028EAE427307F6D57DD8633BD1F7 D69E3F0B8A3AFB9211342B96559552EE90A870E567B7F4C7C1A770A95B1571DF 17B47ECCD8E782B42ECD757EE08DA389B00912A3FEAE399E5901D84707DABD43 A80ED9FA2BD11BC3F40C2893B167F7C55CEA98018A424F42D343B1C3E6DFD456 9D3B44813FFD0CE2B0116B9286EFA3EF17383F9D74B670493FD6FB7E135E82B5 626898386A586277238917A595399C24EE8AC85E4D6C0D8AA6A77179C9A1C96E 2099C89C529A325F2A3DB674049CAA694C4AB998031582BCC2FBEFA2F785BA87 30A47AC1ED2972A6E70DCCC6C0F827705E3640025074455688E9E44D0E25B147 463EF39CF272EC69BF73495CC2943FD05112DA50D6C710B0A36DFE6CC684A051 07561F0EF99C4D37C55B90BF454D2C2E072B7C9195A955E46EE79D999D1310AF BEEEE2297AF807366814E61DE25F2ED8E88886D73CAAF7AA8BE2E5578AD9A125 6B1A2045CB8F98AB99CF78052158E637CC5DF5A9718F591E7B5F0EBD1E6BEA81 F3D8C93276727CA38957BE10A7685718875D68817A9FE313322D54CBC087D7EC 66BB18BA061B57B90DEC2E0428786A351853990FD815367F0AD9BBBDE15EC520 F65B7734D8828FD6B31C2F443B84A4C95321DE7120F702FF6EE69E941E365BDB 229F42658A0679DDCC0623768E8B1541FE5EA515B9A0A061DA0AE788BB2AADDB B4DE4DA69DD33A587C5E536041610D59C25AC09DC1B155BFFD319F85EA0A8F2E 62220DBB2DAD510A34A96CFD22D8BF7D4A439642642AEB8AE96C1B7700849836 6FBE3494EB9F12A77F5CF8CB55FC8FB20939EFAC81F69F7E151809CA4A6275C3 D9C3204E2D0E2E6024C774CAE4EB2D1D5C4152960EBE685E0A15CBA078F6F58D 0B17D837CC5337FE4B697959CFBCB6BDEE8BED67299F1D2992F00F24D6A8919E 01757021B3194241AF39B40489BF5A08D1966136ED4695B291BBD13DB8B14994 AC3741BFD046ECE62F4BE117B5BD8952E97E58DC024912DF090ECA2CE274FFB6 501782611F5F33DFB6D0BE02155FA2F410DB20DB336D3A0E446A6125651521D8 22282FC62BECB33544777C6211E72530AA98BCC69ABD0748D5D6A0EB77C56774 DE3BD633BA5AC8F5014791E51473C4B4A9C5C241BD5F78B1A09ADE339BE9A50C 2A028F6D2F5929DDF372499418D80E1362DAE773B8367FEE84C9701755560853 1FDACA3EFC4461E9D2D6693CBB2E1CB4FDB66AFCE91B728F803BA06826F2D7C9 B1E74E887071736FB95ED9D582BCFF529E874B448243540683001A7119807A3A 8A2B56EDDF03088A7CAF071EF0E451795C0DC2C23F70FA9D1CCDCA26BE93F3D9 E0B780B09FD39C84A71F7376364BAA5845DF5494090139052245BEAA4B5EFB1E 0DFA54CD861C838B205FF78E7002E7497EFDFBFA469D7BC6FBA916061BEC4463 9DB63984C5C269AB20BEC7E2C208FFD44BE674AAB9E5F87485EB081E0DFD0EC5 65888F39A0D0704BCBE14EA52966AE2BA8CB536F213C98DF44D0238809559924 03306F5738BD1A5F084E23757A5A7FDCF0B734F408FB96FE7AA626B34F7EA27D CA03B64462EEA9263DBE06422D1C075D84FFACDAD5B6521B539585BF9B9DA63D F2A8470208A00F84053351BC07BE96B4F87D3113711D92458446B3ACE4DF680D EAB8B3EB237EB85B600F6834C8519109242C9A5DDA67259E27639E5033C35424 6330F55ED6CDE8E846865E97D3CF0901883AD309D3BE60A8CF196BD1FD5D0BDF 6F00A9A7F9BBC97B4047DFBD1CBADF76EA5DE603102F1884AAC8C42DACA743A2 F8F05D006C5D3A11844338D9418CDD78DCD9EBDC8755B80B5BF2679F5782E82C 9E7320815182D50D1EE2A9FEF8541BC69FAF96D00DCF9936DF3B431EAB8C6D8A 3316A3AF5598374B6D41E4CC6869B1B3D2F9839F217C32C89B07350A0D881880 32A9D10A4EC672206C83AA7C8FAD13550A9AC5A1D3B339C5216471E430E87453 7F67C5CC0739ED7F36BBB9FF0A387D5CF6F984088DC40027D89A07A5B940CE6C 637C627983D90AA803E98D14537F41230A6EEC18D329F6B8C1E6537414904B42 75513D0B3ACEB1496E5D267FDA74C1A1BE75165D783D9D8F5E4831C830E02DEC 85CC343CB3D8ADE954EAACB0C482E842B9D601D1216A67462E3B609E0CA39671 B6156A3484477905CA392A5F13D43E522FD70598358D51E7868A53E89C8B36FD C2541C466D1B0FE2C60FA1829110E8005D9FDB78D655E286B281CB153475C824 E4C9BE091E7E50A98F8F4AD1BE86035C5179B3C3B363327356B68EC2A09B9F89 A62938BD0C7EA5CD34259CC85D687455A5C06FA9FE31552999DAE0F9AFD21CC9 512658A02485B1ABF578F218F31822D186FAED86579CA0EDB556FB45BBF5AB7D 7BA16CFC99F84B01D8E984CDAD8177E01F9F28036261CBD791230FB90C117F10 A59789829AAAFB27C7EFD9904B4F70471FAA0A18895266B19AB299A0B7145CF7 7435A0A6691BB4CC99B7320985B80DDB95F80ED9E8EEEDBBD0BC77F05DAFA3D9 719A86E0B724E94574A9B85AB44143FBB248AA643C73228718AF2BB1BF2D28CB CE848C2A5A13AE0E595CBDE5B13F8F8C94F7B143E77FCA8CCC35396F0FC241FE 5834991CE5417B830A06C738ADCC619C91FD42E260B55270DEA9D72A806444A7 D9CA13C3F754953130C26A9347AF7D8F676663B4DFEDCC058D27D5E309722997 5158232C2B168BBC1267FFE7C80E0817074F39AA5868644D144C26D9563EA4DC F7249FC79EC5CB18622B9AA911939A8A3C29CBFBC9C6CA0981FE88FAD14A15F4 F6062DE904797ADEF286DF649E8FC5178C69FF31B5DAE84FBB0365783FF6B32F 19876C31DE61F51982A11428BD444DD1B0EFDA21C837D6A563E023F9EF868A8E 72AF8DBE1764A1C4FEB6339770500E0447BCAB81D793A244042BE2614A7B2965 201AA0CA6B053CD1B85C326A02139F1D6DE3CF7764E2D44360D9E3C89596E184 E5F2B78F3EE8713C62E451985D380450419762323DDF37F96B18C80D6578BD2F A0F496B8CB6DB4837C6BE27CF033984A4084A410289C94B6EC852E68BDDA9995 339C54A244086CA36EE468DCC6084AA1A70EE98723E33958F0C94036CED0BE1C 813994DD9D4B98BF6DBD54A801E510E1E53623CE40BE35958BDCD621CB607106 71D210BDCEDAF3A9F80AF982F9B1783EB81391F088BB7E727AB0B50FC070AA48 828A4DD3B586E4A0D33477B841594E2A01B168B57056905F936ECAC510340F41 DEE08D49ED7C89865C832508A74AFC5B7A19E38845B4A12AD8275AA0E8985FD4 9F9F3EE2138D9AE5DAB65FC1962DCA0F0F615C76E325D0AED56107BD6F92134A E89042A131CCC380D16D93C8A93D104D204255DA71D9751C5149C9148F970730 F3F8E0361F193C8A7EF24CF287176E5445F7EE0D5368D4B84BDAA37C4FA3B9A8 CBD6DF049AA6AA648DA7F6353426E947EB11C52F59BCAB73356EE0A8903717E6 77259FEC912B6C82FCF78BC9991B1994C5D965E3C1538F7DAFC25356418968B8 C775BEEFAD06159753B638EEDB70890A2545BD9028B79DA6CF069A726BDCE443 F947F84505C740CB58C06CDB95D7CEDBADB178EC029E99ACDD78473AE748AE05 94653E8BCD08356F7947730D105252869D72BA15E403419FF341A832FBD648BF 658BF70AD7D3BAB6B7CCBE3C5409A0BFA70277707B9208DCC1A92BB8253B667C A490722CC144235CE737548E9C788EB249C08E51A3A51BD7E8FFD6BC62F766C6 83BD77E25C3A78E6567EE3273A91D9B0301EED532B93275B39311317EA9513E6 E42C4D37B2AEF68BE3915883640931158EFDF8217D1D0436D5EE5F3726EDD61D 014AC10B4AE0801937C26C1F40E6739E91CDD7C5732E3374C8CBC31FB67178C1 FB6EC256F9FA50D722A583B33E2D49CFAB3377D75D92C4C9DF1F49D41B46A0B4 25CFFB8AB2D785AE11CA29B18053D5D955A47FB6D3F1AF4763C11F2AB972A2CD 6C66A059F132C56F79EF69130CF821403CFB369208D9D7271BFE737B7682FD84 7E27DD68F60A11D3E09211F712A5090A54EFBBCA0B2F9AC6F74990D9F6A2B099 7043A65A73AA94B9BA20B435C1F8C806B62405F071C55109EA239B2E473F2076 933D5DE5039E4F920803BB92DE96F409F2B09BD7ABC0EFE41D46FE69A8A227DD 29952CF3AA1701E9261C3CE14538C0AFF1AF7D50F4936D8259F8AD6BDDE6C677 616D1F9D82339665EA146F787B70D5C9D5FEF689E90FFF3C2EB1F30228F8EDF7 E635B61F159EE85DE815CFF339840E7DFCB679EA513742CA13F66B64A34FAC72 B4AD33ECC27C11175054CE211F1C55F77C90B68DBF5840C731F0B29FA9EA0627 8BB082AD275C85C36BF154D38B386233E0F69047BEE2116C0E0C6D69282E57BE EF70E2B426BF7DB5636EC0938F86CE5F7CFA6FFEA18EE961F97C1234C5EC254B 91131095BFC5766AB3D642508C438013A13BBF22C8A40CE36D232B04834DB1F9 120229AE2D60E70FEA654469CC7C64813AF10FED55F2DF0735A7F8190B6D9FD1 45BB32DDEBCB9B47097BC3096194916FC896A7D64D1DF52D5C95D18536044E71 F104E60D6339C0BBE459036E3AEA95F9D700E3B3A2EBA54033C8DA360B8CA8D0 F25CF6BC7F68E0F345DA4E2EB4DB9D47D35BE481F8CB8D28FADFC44A63E33030 4470186186E9B6AD52AAD78D4C43BF0FB7AF20F531CF58A2F09563DEA197D4A2 0C0AE61419D2AD340BAB8A914F2034F2B387A1364E6B608D86B95CF80E68283A 00D7BD1E3000E6AD3019C1F1B25558FD4CC791EE8663C70961658A03DFFA67ED 3F8E913B507AB478C47AB84B2C086D2B86759426168455005DAB038783B22942 22AAF331D730A543262C8B0CB123AE9009D7C8C9A68B50AE2B47B591CDFD4679 F9FD55BCFB951D2CD60A38CE15EBAC0D1B332477A3668B5060523BC0392B050B 15E157BADD4112B69F8CB92CDFC81557400D9BF8D1655929B5E32CB3843DC514 EB2073942BB4F5E55327C55B2B0640387EC04714BAC43FE38F8B588ECCEC8473 08CEB9313D0E22FB0351A09245577F997AB5909B2929A9F1FC83CCC02DFBB534 2CC5C53F3AB23C22B24FD9562DD8DF5E6A1E484EAFDF69B07B97144572F1C077 ABD561B31DD1973DD09C5B1F24D0F25AA1AAACF415FC091846D282B8C92CA366 887DE5E759759AA9504F633857396EC837CBD289F711441471ED97208E7BB088 D82223C631AAF43B6C80B3C5A0B9B26694A57C4804B914A663EE0FB5FC6BD028 1617F07EF2F628F2452B2753FDB74702278D0E7F5F9398BA26B954CCDE33E946 81EF1B9DBE99C1DF51D3EAF24B7123E79B6C2E6A20DC005AA47215323DCABFE9 8746406C54132C0873D479EA541851F880E0643D5CFE0824E98A071151EF89BA D3B2B46E87D1DFFC4D3A0E26FFA672B1D164ECBAF4C4EDA93CCE 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS8 %!PS-AdobeFont-1.0: CMSS8 003.002 %%Title: CMSS8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS8 known{/CMSS8 findfont dup/UniqueID known{dup /UniqueID get 5000801 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS8 def /FontBBox {-65 -250 1062 761 }readonly def /UniqueID 5000801 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS8.) readonly def /FullName (CMSS8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C6258F0D99DCD775 734480114DD0CD2931DC18782C4CCB90B6906CE08BF4CAEC2D4283CD44730A2C 28919598227F98FC5524B0CC92540E349C5B190DF5F2317AE46FFB97221BDFA5 114C21D5E8FB0D1C298EDFF8836AD72A9B2AA132F52DD5D3F30427563C97CC46 D241B7024B4CD9F1E0037FFABCC88D8CCFDF3BC6EED778074F9590733CD147B2 5B68387E0F19E6A81961077BB7640A3C0E27ADD72556CF84ECD981ECCB64184C EAB8BD9B96A873D80E3E0D5B4F5925983C80EBC3A8A12FBC452582A0B37D3C42 4DFD22E9BADDCD2E69644AA271EECF366D63FCC29522FD72D6C1EFDB3597E866 61443179872395E99024F152F6D6A4FD71BF1C7383BC1CC27AFD2DE3DAEFC06B 6BA837BBEBD0BE09F6AEA31A83B1B45255DFD6FF33362AF8BCABEBB0D944B3FA B85FFBA0B370B9035460905432EE87395E518B4B670246FAFD535774467C059F DC30EA01C95EFBA4ABB41711818E23D7E69D32BD63243A6D98666BD46E234155 BD6ABC76F551C31B6CE2E52323A9DAD5C003FB116AC8A82B46ACFC45EECCCAA9 E12C2C8E3CEEFD98D49ECFB824E8677BC9CE9B682BB5A7117174E4B2A0B925EE 553713780CDF3A3A4AF1560343A8A448C0B5DCC4E11EDF5ACBBA0BA8E5B899A3 7321AA7D4B283AC9234978C2DD81813653A96F2BD129FA5F355D56C4E50310D2 0FAA8F304D8BF333F97A6CD20CA4BA7BE6DC1446759683933BB1F1617AEAD131 1C9EF2212EE7EA9B64E5ABFF45E1727EE82C00FD371BE1387987236F9BDBA4ED A966658ADF028B5DAD1F0878064221D0469BF17CB4E738258FB5D92E9D380C64 16E95BBA6A2BD9EEB1A187A7231C53BD8ABC9BAC46CA4AFA94A4920FA805F67A A0C61940F6826CC4539A6CD1F9900EDC3F720AE4FA097F1D7510746BCE2E67B6 EA2F2046613785AAB89915655408AC9D03201838BBA44F421D5F25CFD88E56E8 1CA23CBEE9C2E323DF1866D31F309C92281E514A87A9631F33B238AC6520A20A 346DD6A206C3CAF2830FE244F2AC5D894686CAD5F4BD1CC51EC0B547603BFFC4 F008FDAEBC93542A43B7C907CC85046313348CC8A017C585CC370604E40AC820 8B9D8F57A01868FDC93551DE10FA83DDA3E49E44C32118ED90FA67AB1C66B3F9 F80CF71131977ACCF4DB44CF1EC26AB363C5F95FC2523B5DFBF4D60647EB23AC 89CB971DCDAB3BA26846BA9317C051011C37468B21B159412E69DCB84A9F5876 F418908678F38880B95A4BFD3566A6EDE93AE05BBDCB3C4E240A5C0A06301896 69FCCC0B65BB269F2E10609B6446A68E2DECA905FC26D4F502CAF0EE9AB15E60 CF42CEB376D92D80A6AEE55BCAB006999BF4415815D0F5BA3B1FF9D2E60201B5 833FABE8B883847ADACF9B032721DEEE7FEBB583B89066ED9608F1EFBCDD09D4 3F3C2B7B03154676151753DFF53815F2EC1517C094B0D2CC5EC483AA93772D24 AD3B0084537B91BE1913A31C70750C6DD707761DD733F9ECA552D3F26825B2B8 3EA263488892C929DEC07E2F988B7F7657D53CFA5542CE336D35B462E5E8649E 05973AA54C0A4E63552004E3C77E5FA77F821D820B1620CC8CB3EC5B1D7BA751 16CC155DEDD4DB0FFD3009729F365670DF9472435557201D8E82341B4056D2FC 5D2F7C57599249DA2A99A522868716B076320350FA7415C3B10D77A6E1DC77EE 2D929A038DE3EB4735A4D4F5C8C340D6D293D57E83C2F379ED0EEB16AA3A2A2C ECD664E526D918A3D0A934170B6E1493843E6AAE87E850D70DE65D34AA2A36DE 8687D57A6B6B1447F9A4380CC3D4D11D54CBE762258426C46B8DE6059E6A2F31 E748549310FF4362129080CD98E70817A06422743780B86E11101BED14BB6569 D36903BA8BEBC24A478CD430801082CCF49382D6F04DE270D51CA5BAFEBD0F8D 901CDBCF10DB97E2B059C8CF7CDB45BF931203D5F8CA4622DF19682DE2BA7924 47F78908BDA23C4E21C0ACD2DA259B23648B6F233EEE830E7B82DF4371F55C30 71993EC2BCC7BD6411690B9B1621903F358450976D6B6EC6B505A593A9FB7D92 7223E2424DD5AABEFF254FBCEF934A4D51949BA0E8CD614AAA3AE6C3ED7B37BF 5324BD4998D8D5DA95E4741B753AEE580FB3913770C00277C9F609B4DF3D618F 148E0EC7A75218AD788F98D35989F3DB94413E70955EF586C0995A450BC75820 F5490EB55E5D0D21343565E1FA94FA64A74377F87E55EE0EDDC8F4286951A4EC ED6FB3B444206D89BA71A9723E41E93A9F6C80240437019F3C23DFC2491A19D5 29762876AC60A14404493D04B5537C1E6FCA67B69DC1CD859F9C956FECF4461E EC8B6CD5B5A89A8A838660A6C3F47B79ACE3B05C0AA2F17CF2DA947B893B42FF 749E2CD5E7B56823A119629931B1ECF65C51000A10412668877178F589B4DBCD 24D39F9219C46BDDD6F101C6AECFD3876056CBB858FE0C4BA2BD0B5FC26AD5BC 7FA9E295E72BEEEC721300567B6894FC48FFE5E3067C538CBB3B77E386F50D22 F8DCFDD0E335060CDFA49231D157981925F1CB36110809C12BA28D2D116116DE 01898E311FAACEE0E5402CA30B64D3D5A0CA33E417FC322F2F0BB7AD3FEE2039 56A15DD6D1E86971AD3A5A9A27F33AB62A5A3BF5660B59235398926D6BDA33BA BC43B062EEF199E4ED991518A62AC374EE21E8F1E1C954BA6D1493388F708D0C 961612444BAE019E1DC18BDE900BD7A781835580A74DC696BC512F7BBDBA2D0C ECE5D83A049F7A3286B94FC446DB5C3F33CA2CD3DDE2D0E774A579831CFDAC37 9612858EA613AE6939CED001EE662DB17642D0357B80BA0F82ED306218DA8505 A613CD622FA998EBCDFB7BC70F4E4C8F1F43241FC22FC5BB208F4B20311A98B2 73F30E4DFCEC93875CBD1ABD29ACF80585F59947F23A96D218C0CB8BDC1C49F5 70DF3D49704CBA9A23294A88A2AD61811450921B1E5C3C86435C55AF87AAF6A3 A13709082DA9C47D372A4226116342DECB14E4A4ADB7598321516DD637B64148 12AB17AC5B2EB25718856D50BFC8D64C78DA6E5C145187DB0325C30A42013A81 590E58E74094610207FC70BBF1A497395939B42A6EFCFABFD9D43221DE484753 DFE5311F1845592B4484B1CDFCC32B4E068B11A82BA189D2268D88FE63B9C6E9 20C9E40B543B5C401265D92A932476DAEADD4D3E2BD6E4DBEC0B30FA90A1924B 41D2EE9D8AF2D8CA79D15518141665B542C696C2507DD2F4D987EE5E22397FA8 FD80743186872DD67BE58103321467CF3F4B8898E66584DBB9688B9C78873CA2 9B72AD7406CDFE8B58FACA2904869FB0EF126DE299CAC08CB89F60561939D75C 2722CA57853372C14F5BCCA5C4FEBCEB0728BF9E30140E6B0D6C034195FCCC89 291CD818CF66757EAEB0AB5A9D5710988EBB052850DDE97BA0DC0B054BDF5172 2002AD6FFA44AA5D9D4EBDB6B2C04E8EF38660D9BC4C995BF37DE078C279328F 4C360B8EB337D798962CACBBDEA517A5EDFAADF0D445FBD1099837F9D689CD2C E330CF587246387EDDED64A2F4C397C1B2BFC325B39114609EF57DDCD7B93C53 811ADEFA323C59441ABC447F683B5EC43870C057463DD502E9B9DA7084C3BBFB 2FB864D26DF1BA41ACC815F2A71E96D2C6F572E1F7E4A224FE57CD605682F98B AC7BDE4B85A4C11D58981E981E9FC43B87A368BAEF78AD87B7DA0FE403AABFD1 CF414CBE75C0E9E257DADCBA035E1BF05C4E17FE92309F18633D93DF885956A9 6C27E77540F888B8336B61598CAB04F3B5A1767C1ACFE15D32A25E5B1BF51FFB CF3CFB25CEE7DC95203CC44805A935D5A9154A89FBD4E465F0E599EED4033365 0A31612F37BDAE8CC85BBC67F7E375EA68C2982FFD89284B027501184C4D2232 CE0FE4E905C4B504EAD009F047FE627C79AF9EEDD65D00A3858F88E699E5EB45 4957086CB22776AD06C317DEA41880D88F0EDCF71B4ED76BEE665B7937D5D0F0 E568C7615025172086BDBD69670EA154CC52C85CBFFE88C1A4D1AFB6624EE667 1B5BE2A31FCE8B2A4B03BC5DC57280199CC0970EBB636DDF8DF54C4A8CC8805C AD63CE866FB20C64725AE4BC9F0EB275BD83EC89F2F9CE23A084B45694D8C3E9 3F3D3C1A678690877E8B1B77ED85D4F6E03DBF1F3B1D177E330475F172E0E729 63EAD8034E6100B2A5773E2605180629972DE6BAC0A8C2F9580E9F1D2E77791F E1D33C2DBED3FAC47DDF1B74FD02583C3CFDBB2D1CC2B735C02B14B7AD3733CA 1682944ECFAD673A9AD5E80B6248FBB6E5036EA7FE5CA8C34FBCA6DBD0E76EB6 C2CB89D9815DB3C45742170DA926E03493AD86BB19A1D3FC623BDF1C920684FB 7414EF69CF39713A9495D8CB678BD4592B53C36BC6CF93505B8E32311D42532B 5661051B855F01A9B3D77AE38879853AF0FFE2448368DDFA3EF1DEB88AA055B7 91459586DD2DFEDA192306DF7143F998CC5D67C1CED313430E5CC3F9CE265747 8582102111E7AF9FB94D95B82D8E1DF01F04F2A2C22A20207B59C8976D56833F E3B79DCB727EE7537476A052E92F7C3D6A625AAED8F026F22AB59EC0F86E541F BC082D8E35234A18192862EFD232C9950B1FE0BCB91209FB540DC5729B9E36B9 94D0913A8F01FB6CB16DE85E6B89F144111B1D911DC527C24917D909F1CF501C 1AF2923EF71530F21F9BF049A56C7AB3249A420C28954E981EC464F61FA167A5 C6084661808089EE7DBD80A2D92FF4040B37B2D81A2F5A568D461BE1C62B0FD1 BF6D1063D2B5DB9CD48BB2B2AC9CEFA543E0AC5C86C462399C1E82F25A157282 D32D538029ED22CC5935E63FA076BE22D3F53B7D7CCDD344D68B4E73F87A5F2C 691FE68C981FF7CCFB124506FEF93F36F7181075D7BC6FEEC0E35AF57855BAB2 44AF021C7AD8912D884424E8BAEC68A5562B881793A1B47FD338B1EE4C0B8583 2867C78DBC2EFC8BA1431DB1C8622C99BB2C2D4D5475BFCE87B11762427867B5 7253463C6F2E1CF5F1DC1F7851F2EF6A957CAB0C0A55076C59A6FF9237917C08 5F97C2CB4B5CC903B76BE8C057018CD962EF90E1C0CCEECD52F2AE35A94C6EF2 D99DF4DA88247C920623978A1DBB81D8F171B588D617AFA8285F6147E889523F CF11EF4BE498842D3BF8E811B4B33131416658E03293AD911516D8AED556F7E8 0181391AF36D862F5F8B4588BC99585BFF0F1ADE4BF73320158DBACB2784768D D9794E2B0F2C0696E5ECE5C7A7DE78EB5CAE85EEA244D43D0280D4C87B6B93F4 803718596FBCDB61A0BFC2DC666128E56F3133B9D4F16305940B50ECF66D80BA 06C0A73C02F689314F1B4FAC22D16BB1E414C6F0A1A548AAB1364D2CD9DDFE5E C8887964D26BE84986A6B1246BC306E6343CA376F990B77BE8D68A4E54304C3F 250B2311586A1D1EAD2C0221FE1828CE8396DEDEF13E70E0AA75FFB6089DBA9E 9FC3FAB43B3633C8EE7598619A0C6FAE2F25274787348E3660D0EB7212F5CB38 032A41A54FDF14B32E721819AEEC54E8FDE3AB8F0ACEA267B01081F284B008C0 5861CEB5C236729AA17DC78E92FE1EF9F047B53A59F2D1D6A6734D0413D1A51F 75B03234F4775523A55978C73D5BF9031EE8BC6BF9E2637DAC07F5AAF2A6C41F 77620B272300A78E86F71F16EBCE2DBFEF4920BD3F16C282E0BA4C872E5F7E52 7ED2B663FE45D4A36A588D228D32E2861F26AA6FA8DDBC8110F4417D0DF29285 F06B57B1720D0D13828A4DD68D57BD530FEB9C3CF305594B70E4394BD60C82DE A64EC17661977B18199BA661C48860919CBEB56AB6C32848D51733F1E959EA35 DFFD823D92F11065C643AA69776F71163A60D4941B753BBB4A4C0C47BB1D965D 06C9BA1FDAE47926F37C0C5B591058F68FC1DF3933B2BE014F99A53A617A19CD 8BE011234D48CB7E14D31B02B1FC47C8BFBF04C4409D32CB454E8FA0EF9AF16B 8AFE9FDDC41F6A23D700D4AA922A0316A895D240C5595F21FEBA98FE0E74B762 77FCC80F4950A8C55B4A008FD381E9C0EDF4427CB324BE4ABFC790CEB53E8BBE AA90163A7BB19E2840FDA404E830F5478DD69B85C5E69573D8CDBBDFF41A8126 24A6AB66333C749C35BE314777CC222D54FF2C4C75717FB938724EEDDFC2EC1A 8DA77B5482E760B68F0A2D240332BD48803004BC157C6E8E192D512CE83D5572 D388BAE80AAF5E7240A73CDA7CFF7F8CDAA4ABE1D3BF6ECC3641B6BD1C2CC703 275D48D62A15E5A85F003E76D1EA7DB65E3476CCCF6B504514AEB1FF1263FDB9 81FBF1A1873FC287FC6B6DB11F0FB463637D4F3280EBD19976588F900B956FB4 36AAA8C1F040300CAB9C4F624B22C1D3D6414B7CAD36B5AEEC90105B5A5C2129 4CD540B9D0129813BE7E20870365F8C46FEC92DDB64D0A6C7C5B9867A4592B7C 124B1B47899CE2D1C03811AD1B8BA253B0D29DAF2B53E312827478DBA274010F C919D122DF24C1E372F7F3CA77A2C0EDCDB2635F4136EA0C202D4011346902E5 1524609DC031656660302CA36D376245A64135890C13A11C0085861792384787 D0831FA01C11F1E7B4429DDAA0B3A7EC1DC3CFEA24C34DA4BC993300F12A953E 80C8BDA360789FCB0F1AEEA7AAC310D0C3C56F43F7914C3B037DA02C31EB740F 2B1A696E0E5553656942BA567DC9C4D3CA06E45EA615B7B5674016DCFA07C0B4 285BFD9D551117A357F4BEFD58BCE60661187A5FF20D27D685B24BEEF563F0C2 B2CFA2565112F7F49023CDD405AF3E54FF994630BE678B0D6E1CED514FC93F7F 63710D289026CEE4B074253E7E0AB1DCCAB57DA7A1E2050D2B8D3D75F2AD7423 0B0A7081DB1FA44055620B0A2CAA54666C5EEE3C01540D96ACAAE98644E1D210 E0E020214550D723431813C031DC7DF0D177E82AE49798F8E0E5AE0BB8FF664E 4793F857BA380297AFB977065B7500E4C0AA1735AF4E15703C860A016F19E593 319D14C497F24ED8E42F3FFEBE976DF33D697656DC11A8A7C6A60219BF63F186 E0FFE55594B31E5C312DBCCA08E84E94E8BF57CD5F5B70EBE59F0D41DD3F6B05 F7635EA92FA9E082C80075A5A5F684160AADAD501BBFA7746327E3E606D1FAC8 EF7AE7C612371BB52FFF41A97A349D111E861A83C9C48B0145ABC3582FCE43C5 D121F0EB6F5D219E52E2BB660AA1DA5551D6B66A732628D640BF9D8BDE2BB3BA 046FBFE2E28DB31AEA2ED8F9405A39C16C3800E9B5611B460BE0F6716F2BF79C 902AD4FA3B6656E13E9DD7A785C17F28BD4D646D66058721610CD756E0D18D32 F09C740B6023DFAD45A718BBFB2E65544D4754A5DB23CC7988A3EF45CD3786F9 E100D9684549A16BC2DB736D43C293097E082A968C27F0C120C41A53E3464381 F7DCFA8B36344EDA85F53FF65BCDACCDE7EAA41A6D38C1F420F8F2E287AB0F98 A0DF7D8A6CF2E4C78D606569BFB7C51495493FACED57CF2D507DDD366247D807 28D73CBBDE2F4F666099411B1FD2CF7B93D0E9AA161024C58892285BCAA65E55 9FB37468777706D2C57A0DF6D520844B56D62CD10F2D7B02D17F97E4F87C16F3 9BA09013FBD7ED8C2DBBB432288E598241369B9DA6E3EE324290D73BDBFB5448 E9D7142036C0FE538F18E866A50DD23152E2C096E1045E7777888AF5CEFB83B1 C6FCA18A26E83D75AB66291A5A5A285DBB1B9525919564600D71A767BB03A8BC 7BF24CC3B318BBC0F40C79835DE626E99BB76C15719BFD5C15D967B84A6DC1B2 450D42BD399C5316396CB294D008771E563E5640AAA9635A1EF11001D0E20298 066B78B7F918E41FC48A6A6BAC8CD12D58CC2447D1BAC318E2717E7B5A94A4E6 462FE9017FBACA70F73952C2FB4B57406E692684CD10FADF049EA8173068CFA5 95F8BEBD313E01B345EA52562AE3847FFCBF9C5D99353819340952C7A4A509A4 906D09AF07C9DFC130B9A77DC8B15143C0A3A3C29782F102DDA751CB6517635B DF7F0B64A40FC47734823E0EC591BE2CD9D4E31D8C9CF9C379D3DC1471351BFC 4DCA8816F091506C72C83E3EF7691C7AC6D190F94D4D5F4E06C9F97FBAD23F44 A0686ABD8E7E89A5E1CEC0621A6BDC9E9B4BF822A31717ED7042DA6658002A4A C230A1CB709FD74E88452CFEAD667EEDB342AEE1E05A04EE9AADF6D7F2DF8616 E69B0A63BCE0108D5CCA7813A44AFC5235F345AD90B4AB83D75A33E6DDC00DA1 F0E77DF6CAA67AB8D1B1D40116BF5FC89FBD8DB8EEA1BE3954AC80BF34E63E8C 4FA62945 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMEX10 %!PS-AdobeFont-1.0: CMEX10 003.002 %%Title: CMEX10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMEX10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMEX10 known{/CMEX10 findfont dup/UniqueID known{dup /UniqueID get 5092766 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMEX10 def /FontBBox {-24 -2960 1454 772 }readonly def /UniqueID 5092766 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMEX10.) readonly def /FullName (CMEX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /parenleftbig put dup 1 /parenrightbig put dup 12 /vextendsingle put dup 18 /parenleftbigg put dup 19 /parenrightbigg put dup 20 /bracketleftbigg put dup 21 /bracketrightbigg put dup 26 /braceleftbigg put dup 48 /parenlefttp put dup 49 /parenrighttp put dup 56 /bracelefttp put dup 58 /braceleftbt put dup 60 /braceleftmid put dup 64 /parenleftbt put dup 65 /parenrightbt put dup 88 /summationdisplay put dup 89 /productdisplay put dup 90 /integraldisplay put dup 113 /radicalBig put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23E7BC2A6E71BCF95FF3DA948 1A27320759222BD7BC7C1A533E90058824F06942F0234C68671083E0E4708398 D246C94F9C16DAB6563651BA33D86273FD2DB3C50C106F3CA95B1C79778D0BEB B99D9CFB38E41BDCB4261A86A23E2CDEE4837D9B6F0E85ACEAA984C344A63709 EA35B61F08821338D363D172BD185A3658F43052AE1E61D879C99DED7F6D726E FAFEBD881BDDEA91FB09DB75675FC74AA2BEA8771027C7A51BF849F8E765B870 8F7CC0871F301ADEF9B71EC3C607B2F51325AA5B3DD74A2C5426E7B329FAE84E 94A159C8C9C35E27A0FC93FB98A4D616750DAD50068A5F0EB96B8228946E5CC6 B69E93D262C92E3BC7161313156E380A2ABE27BE400A23DF95E65A4F76B3FFE4 CF3CD141B006C487EBC73A5A101466D4388FB2CF1D9439D0714720BB58537B7D B3EE1F04AE117222CA5F0E5942F7A875D55D91D63958B1A02405D9DE08109B8C 7104F2D109EF7074852DFD74CBE02E0F3704F2BACA14E05EB1D0D9021EFAC23F 76C2389F8EA237D2E2AB6AFA83A725E16AECCAF025E05F1B1B5699D761F62A46 EC6F31B0FE4769BD0D66821592ADBAEFA9EB454CF1402FE870F5F96D09980C1B 8B6D2FE88BE56032C1959E6C3DC319B6A7353F3AC629CE5BCB947B4B235426E9 4769302817AEC1ADF50E50265AB488017634AF824D44D3C8423FC7CAD97F6D6E 6B34313637687FBDE3BDF6FC951CB41277D8EF49D14767B59656D214C9724DC4 0523EF896F4E48434FCC5D8423F07194C54D48C62AC29001B10C9C8B514B24C5 CEB60FF68D36749711E108DBB52738760FCF6571D5B04E58F24CC0247834B412 D0F6F8D7F1573F23E3E399D5A3A3A37FCFFEAFA044A5694D2458EFF2BC1F7650 8FB0A27C505A20C16776EDF94BEF9DF702F3C64DBC1939BEC0399B6AB283F832 DD8FB358F701CC075C596FA7B0ED7A9304DC73274C8169337D55124CB748CE26 A635B2704D8F65E23CC0FDA3C57ED451F8FDE7B6FBFCE2746F5AEA11B065A6DC C3D200D962A034DD6757991BA62D8DC0408F49083D48799B6097B61343365A5B 30FB02E9CDFB5104FB751BE8A268EE55C1208DD8B29D5635014EDE9D0D94BB64 ED5643B3049027925BF2FD7EFCB631E01269B731AE12AA6226B2656F035C7E92 959C4A21BE40D7C138C8FF28C9FD4B768CF25F08859AE84FEE6EA18C033B3659 D9EE250BA5FF2568E8BF7684A93BED7852251D1ADE5DB815AF3AAC36D1A500C9 41D1BF3A1926828CD1F9E501ABE441A07B1B96612CF0728AD5FECF7480421F46 0B18E06D2FF1A5B1183459C59517976474698BCE18A728515CD489A83C001AFA 47BDA929F60D0FABCD8786AE16EE18615C37D18703571936A365D334BACA9BA3 08E2523132887B5EE95ABCE8581C78C3E858DBF35ADD56A1F6C2489AFA73D1B2 379C5064DAFD30FDA84581FDE268B470636EE35F21648955513714F6EAA08AF0 249C937721DB0E93D95C4DDDFB0948051953F39C6D2D811D3FFDC25F786E072B 2A8A1F4830F9CFC34666A1D3F13268980E9A26682CAB64817318A1E266F3D2D2 DE4EBB3EDAF0E7B526C838CBD7F37E74A35B1C3EB96DA4099DE689A53970D4CB 9AB355E93EB294B07DD09356C338BB4A61C147BEDC152E58DC92FA69846E4829 551A5330006793CD88523F7B3AF7B4475C531C67A4B66A603597EE72C4ADA491 BF13706F341125CABF37FADA554FDA0BA5534C7AC35F1829E250C885D9A9983C 5D1FE8CE24458A8B13E5C7EA22BF1608AFA96B83C700889A2A6C9C4052DCB892 6CAEEAA9E7D7F3E215019719B36A5DAFCCF2396FA0C04AD99A7C23772A7BAA64 D1FABE8E476EAE9FC1A3E08CD6D1DDC6E087934E676BDFD1528652B6B9A50A35 2029466364300AF4CA3C5883F6293A7104617D0858B3E43D43752F814654A938 A44C33410BA0E5EA7BF55D4F1D57E27921DB05C059DE29BAC1BFC9B607D2C5CB 1DDC47793984FBB18BD99E1DF7776B563A55E15DF024D6D8E6ADF62F16F602A6 7DDE1C68637672AA9C7A1250161502ADDDC1B4F6011A9BD5605B73AEDC37CE4E 4467C838B7692C4D541EF87DB41123F9DCCFFA971553A5D9B0E7EC539A28750C 8554383585CD8B93DF731A301D85BA9ADC95B4A3A237794C30230A82300B6756 AE5A46A090958109C5565EF60B0B16D6C0A16A56644B05D3371DABBB67ED9BB8 9BD3983575D371419C7568B2556649402AFB9843106729E4EA87B3F9038218A1 F820B098A1271E330708432567297CCDA332B555A40C62BAEB16330175D28AA6 13AE6939CEFA2334E3E890B66A73277F0B63B1FA59F856ABECC5FC0A50571F5B 0747FA554F5FC72A51E215304B2E44701A13E41D91397B204C66AAB3D101004C 7FEF2D87DA558EA057BD492CD6EF93601CB63F78426B502CDC5C8E9EF4FF3692 376601B1FAADD801602668370B5ACEFFDBACA8F8B3F4E850D07A20F6F47440FC FD39504F0FDFCA35AF2ED0DA8BAB63AD42EA8CDA912CE17F5E62192DDD912333 3E9FA0884117F07221642490044A72E359D5F25D9591A8FAD568A3DEE435C354 11995C0EFCFEA21735DF44A30F79F747510E28767A4266461D1394F81344F6DB 1FA8D0B0D9E5F52FBB663C8F1E91192E5608FFEAA178B93F8298F70510A65BEE 12ECB5D675311B5B3B19205476512D92B1D16262720484049370A76F78D9BDC3 02EB96AC1E5B3CB078D2F219988FD0F36B043ABBF347B22D36CF541A8F80F791 8E4F92D900B7E7B64DFD500882EFBBF23565FA470103B2E0D2D14E3E4D7827D1 BAA0F84713A8CDE5904FFF2794850871DEADDDC53B77A502F5CA98B0744BB656 2FC40ED2AEBCC5CACE2301E983E6C18CF16AFB9FD8CA49DE51B22F4259D43076 DDC1BD4974CDF2E733EAB6334B1D5614288CC81FDCC722CEE193635D1088FB29 F80AD5CB96394AE89D920DF8E1F271585AF019190F17DB51FEC9064B54C3A53E 3FD33C3B553FC79F743BEC9674743BF0A821051261DE4527A2BEF4A04E293E97 02B181EC5F5EED3E26060F2C9EF6852B7433CA1BC1690C30424B03C522A087EE 92016EBDAC4B787133B4A22BFEF0B6CA564C6EB910E1DBF983CB4CFC3A1F8A26 45329CED7F5A8704ACE9D4233583365A5A97342A053EF403F0567E9D0A62EBCD 84B5D7145BBB11D31046BC2CF5B450CC68B85DA0E78EF8902F8D37DAAA9D4242 455288C0D73748F9BFEB1B1769D6FB84B94993D5F7C2B9CBDF75AEF2C930F277 210B3CCB8A0299F50AFE2548A4B8DF5ABB52F098ECDD56FCB8D3A406EFD95088 92D7EC39FDC7EB1824ECA24D0CBC6EC6F4C6A7F9590D593B269D2CC0BFBD961C AA8BB4296B4E4411B54367A341A5EDA97288DAC370A015FDE6D7FB0A4CECEFBD 1A67DF3A3703E922BEF2C414FDDA42482EB35D5DBB206B44C76C412A435A0842 6845EAD204BDF87065CE2C99B05D2D4080D5D11CFC3316967472C7DA44CC1F9D 51B83B4BE9B882D6E9ECB482F9855D024ABFBA502CCD624E0F88164A6F13CED4 85F20DC01BB15C7D78B1C79FD9FF71F4B043F59DB5C297768115542BC7C8A99E ACE39A268D32122541FB441FF1364FCBA2B7627F12C49ED038BC044B6D9D533B A72D35317A5AB8D91A9AC56CA90D1DAE9F967605C63BC9F406FB3D5BAEB4B38F 4934EE3D2F5FE434B45CF5C2D0E5E417EC279DCEC4F16504EE40E837B11620B7 7526AFF23381ED3E9A92DA4DBF4EA2BE4FE444B9A74AB60EFC818E20DD8B852B DF8CB659C0A3956D0DA61F49A9DD467726E57E9B32EFF540D551A67213D40273 AEAA6E319D92B4B406377D36DAB85662C755D76ADF5795C52D54ECCF0DE81E30 B84F951233A0A400CB063911837F0AACF44AD2441A7CE08818D64705E1ACF7E0 F59AEFC5DD812981C5508385274817056B2CDCCA4C9F3103C92838917EBFEC94 21D5737AC634B23B6F7F63B166D60C6BAA8F33AF44379C5A7337E737190EB3EE 14272B905D08C01EA118964D3444A03676FF3B62E7626168FA1DC6220699780A 0BD5776DDFA26BF0BB335B3C978CDD5CF1A419D4B5C562B3974FECFCF0118199 E547EB287CD92E32E881F344420FA3CD97333BFEF5D7E1BA31FD20622E5B4F95 692DD0ACAF01D413B21C8608FA87B470191C3CC5AD333263C955B4ADF4370FCE D6667FC93495003F4B6AEE4F83603D55F19EFBF56F955FC9CC01E494804952CD D426FE706C13D41F87C5C668D8B6BE50AE0370E07F52AC0534ECAB1C19851099 FC0BB1EC2A649795A62299F73CA606EDFB1D28183DC63ADF67294553115E8C57 7CB603CC491A6065802B925E6DFBF42917EE6E44C714228AE452851D61BF70AC 844B5D800EF029357FD659B8A648445CED0ECAE1474E443124F4B3644F54C556 A330D92EABEC7F607C6B13FACF69CA928F835056BD1A8ADA20EFE6BD5CF4A1A0 8B9E415E4A5FC6F209EF05ABF2E0C55F6E3060D1C72967E1E68791499F303C8B 3960C5A1F2DF6306710DFA98C8D0815A06B5590374554DCCDBDC4C295B3BA6B8 8BE3200CD4421A521C06BE39D4CA495BC63F3F982CAE3C82AD38DCB537E617D3 34BD96EFDA7C6A0F6D97A6BC9F084645390E194E7A11399FCE4EEB9A965909BA 6EC69D34DBA081BB3F18BD1ADB1AE1B7FBF96E4C546498667690857EB6931841 46C427A5B7C7D99FF889582C4AD11A7D267B301C5A5AAD9DA99D5BFD438238DA 62DEB899FF0F7B7997F781315B2CC328BE3572A3903A33EC901AC6BCC7F152A9 8A6865C6CB17189A4EEB699006A5F9D4482D53A76E88438E444F9302C79F0DC4 B3033D29D303B38F5959F020337EE6619DC8A8C3912101B02CF8AD113BF4BC29 8C6B9D25AF6B6A787F222C05964475B49B6751E3A3A6EBBEA03677D5B136B9DC 6D9AC20193BFB0759E89831C9E2AF68BD45ECC81175DFE80DC0879069ADFA8E5 24CF3C84121CD9739A28BACB9891945FA4E72EC07136682E18FCA81938FA6A3B 8CEFBAED60121530E33C1C0E698B5923D6AFC4E907A99B1367C3D435CAEDEF5F 878237453B8DB2FE53073CF3319FD096343F42D68F097759D051AEE17E4FCFC9 86E17099799DE82A38F22D870BF7AB90890E3B5264976700BAE594C8563A218C C985D9A5A7D7BD959F7E4E66286833C86E89203ECECD6FC4C6FE1F04010218FA A5714881C4C846E85F13BD68AC250CD0E488DBF60BB10B2CD7AE2E30F9C21DFA 0E84F76B4E996AA1C5C056E64BAC85622C160B56DEFD4DEF86887C1201F7C20C 076D4A27BA69572BE9C89FF3A9D3BAA5CAE0A6F2187AD01ED497798A305E3BD8 422DBFBF45E3F4AD35240B07285128B59FA9E83D9F6A2E620CAF6DB05129D930 44CB241CFF84E776315114C3AB61FBC0A8368D9154CC5066E2B162E89DA51165 F9CC075F2524F9A8624D2B56ABE64AF93B9F0407CC770C1F2C76CCDC06345D03 7B173C2FAA201D8E1F6C0315987A7A13902F4AA5ADF081C2B0A01C77E4F7A3E7 6A4AAEDDC577E855D69D38AF6A1D271B02AB496D94D81996FB078FBED17F833D C6C0BCE141BCDE277D530951DD6574B9CB3CF0370D74211E9AC00C7CD3A67842 0B4B72ED517E4906409DEA7993D0B8E92D418139960EBC86BE63A1B1D417C451 8BA13C230DAE1EC4E466F23351D410D9FC4A7BBD477D5FA07659B71CE9921B1B 6755C67AB3D4988064004CF75948879D16174E8097C91F7544352474C2D9A1F8 A1813BC6F4BA13E952678F5707F19B4799ADB3BD186DF650821DF58CF3C78D67 84E4E1DF8DACEC50D15647C3DBBC3C4355E602D3A03171FE1CB36FEB940211EE 0A5300841DD7B7CF91C02B3FC5D89C691156BFF8A38C6C72789DF260B868AAA1 895046E405661D97FA9A0048AF114A89E3ADAEBCE541753E4FFCD902391B5372 6A97E32F0257FA9FA1DC15BD3140EC7F0CA5A68AABCEDBE73C38B35FDF195F96 0F9DB0F592C188D72D73512F4DD92D2371D1A59254BC477CA084E68184AEAB6C 266BB21DC3AAF874DE999AD2A17C79621AE322612EE4B6D5BDAC511418EDE90A AE75066AF19662C4AD855E4200A5D67BEE4ADA9A399192C74D35E59B15FB61E7 BB167282D32D538029ED22CC5C9860C1F6B7BA7F33D5CF108D4BEEFAE7B37E67 39391F9934DE17956303532ABB011540645DB8420749C9B9A019C3CE86ACD566 1EE8D8D5E0D8D0DEAB33B5413EF10D4EE650F82417002E436E0B3B628A657F84 074098C2E9F897D9AB692E0FB9F268E6728F94A79CF4D6B0A07C8DFDC1D67FD5 EDD5863EA8949D180B1596D0009D662FC429449D76BF13D83F0D0CF165982443 E9CC288CF7C5F2E17EB7F3736D1FB814196CCEAB8C833720E3733BF594E1B536 BC0063080BC751F9DA1741522B2967D07DDDA169E7D3417B4A39EFAC15EA5E8E DE3473CC9DF991FAD2A971F44B09635085DB02D692F149F144F3DCDB69B72C53 A2AF34C65DF0D5F35E82102E67B733750646EC03A4FF47138F7998607BD93AB2 B63A0B82E8E225FFAD5DC468077FBE8C8C8E5B4BB10A8FE836B07367D742BD6B D36DF5304B9DF363120504C279453452EB177FBCDAA6F6FB78A24848F4A1D94D 1E49F6C46CB36796F3F4C9739346381F28AF085C5EBDB2A02DC0570C7A21E097 77522D4947B51182431BCBF3E55CCDDE93A916AA40CEB577277FA512380816DF 9111C56F36341381D62368E70462577D0C135BB3CB4462B269AA8E0F03245BFA D01DB8E23F2DFD5DAA88FCAFDD51D48E562EC649DB1FFDA0FD8CC8C48E6A9207 260ABE35733D75630053CC74A07E5AF6FE87BD5FEA69CB6AA20122276AD92853 6B225BC9E3350D1B1362E04C7795D473F1266852B02C83D02D938C55D8F0C671 7A9205F8CD058304DFA034D99A6BC16C582F02484A089602D42DF30D7A5716C1 D42A4CE56C19E40C01DC7DED931FA13679CFD2700B3826A1E6539AAC12293DA8 664DE251C5D1761BB45FE364CE3F7F7E9B67F86EB31D9626CCACE4DCE03EF3C1 0D2FD1B12B5774510D46C5C5CBF0A34847418B9A1DF0C67789422D0EC2D49576 9DDE72D63A4A98613461A6F730A05336C691583F96C3CAD2AF7C4BFD3AEB3814 D909858B6598FE19397006C8C4D549AA1635968F47144E7861A2BCE8AB4CA7F0 4D253949AA0127559FAE3161C810A8CE22A3079602E747C9398F9C8B2A868F23 D77D7AD6B980FEB038E0557E58E1D7AE471036CBB96B83595D9C96A4895971CD C2A810651A045F876A1F5AE470BEF39F856808B1F8D736030A722E1576BDB3B4 4DF06F73D38D313C8A0D3504EFBC774750C9F6E687ABCB1927FA1BB3882AABC1 2306A030CEBB259AECAA646C6497712F6C1E9DB7E1365A60EEC5AEDD5147A77B 1E3A10D73C477876D54FEE853D953EE75F7EDFB287550B93CFA8250D1FE2FE7D D34441F1224F3DB1D355188819EBB98A94DB193B9CA23803869DD10776647BF5 5BB42031AC44A7339DC036AD0292AB9B732E6FB79BEE852A103C3788BB0F4B72 EF37BB62356F9B2DF7F5899A26F1FE0A3D6469C1034B8AB14F52555EBF6DC592 3F24D6DB395A3A182ED4B8ECEE8254661C19CC942F236CA40BAABE818EC312D8 7F5762C210FCE8A3CB9A21C69E7495DA267D5C198848DFADA31AC9F5DD453B1D 3838DCCD32AD23C7D890BC859BAC8AEB18B09AC71832190E5EDEB99DC3904AF8 BBE407F5EAC1D1B0A1D662D1A896874566CBFB46E98286E82BF892917848B9BD B70BCCC4F83DC06ADFBA741F9A9E0FDDD9189DE5C3F2A05C77BA591FED2312CD D8FBDFFB276035A428E531D41C53700C98D6923FFD65A2DA9A78A3E50FA79BC7 833A2232444D1984C6BA33B510A06972844DA0B1D64C4F19C062E78A80E6349A 2D7766E0C532F6379318EC2BA20E6E2B266C6370598767B4AD2DCA885F6D7735 1161490F2026AE755A25A28E43DDFECF131EA7773CDF24A22DA49AE3438A0158 3FC9625BD54584BF043FA43B1EE9AADC6D26F1D34C65A456AD6056DE445BC9F2 59D3F28843E761AB26D232E57ED8DAF4A607E6A5B3FF15B81EC65EA92069B982 1B686229EF1A068BEE2AD3A7E7830C82633EF9BC7FA2E035173F3BE8CC28290F 1ADACBD6A9BB0098F1F78CB3239467709DF11E99CAFA40D90B0835DF4FFAD667 932D8AC9A49979A8E4FE49BBEE3A8E5000BA7CB27F10B7C3A0DF6E64E2FA747E E9A891DD6CD4EE8BF8B5126527E8F4D98C901A9FF2CFE99A86BED49C97511C00 9AE38C9C2A1F16FC0721CC49EE3933408ED162363E557778B3E1D31CFBBCEFE7 C9660C8E7F1E4C5DE70F2B1AF8E94F0EEFD3AAAFEA99F3FB85FD71FC0EE48A30 2843DCFBDA6C75F8C190DC9159F679F5141E5BAF8097265D11DD781FA1B04D0C E669758FB520DFCDDA91E283ED970B130C0AF8B25C2DD4AE4F5CEC948A421D7F 32F95D91408DE583375C50D77E2C0307FAB183E1C38283DD49B829C2CAB29450 62D0FB70BD161D5ABF1E4B09F10418B40258F6BC9BA358E316FA6D63387618EC 0A1ADEF639E3088D4624E94B5137FDB9071594D2B5BBA0FBB1934B91F3541835 3B9CD63600E2A0A9DF525D39EA4728AE0E13C7ECE230B515CDBCAB1C25BBAD2F 104F2AA92F20E76C530044A5788D42723E19F09A78877B3AF09D7ECC8BC8B3B9 65E68F20495D039F9C8FEEB2AD0E99AEAACA5803F62E797EC22553D49A02BB84 2572E22C605E9F32400429A75E96EC5042CFA87D2D86EDBE99290DDFD6127568 65001450A35E343F815E2542563EC1DAB20139BF732AD80A3CAAABF57B8FF9C6 BB5F9EAE61B58FD0619237A6300CC333EACF00863E9DE6127F63642700E5A5D2 C43799385F7F3BBA680C3D1D20872EEF77B6D367744E0E23AA665E238EF98875 185D73454297424ADA5B4E866C39B46432BAA225F82F30E9B9C7316BA8167D3F DA1F0A19FA3C762189575E839A365DA31016823E2EC75E932448DE232DB1E6F8 577F92C86CAAE83666486106DFD7036E6AAF4CEAEFA2852996499291A5887B03 A0473561BFC606A58E99A5CF54FF83CD1197569E4C39EE99D02D3FE7C0BFF867 16808362F8F530B06CB1C27ADF050D2BA8A7817AB86EE84C2BDA0176808EBC51 EABDFD32F4C2B9EF9A48AA932918052AFEA6D78EA1768185B0441F87F0FCA468 1C9B4668443672BFFE79BB6D9951FB716BA87B78B0FF94B4C5EC92E909BEDBB5 F398D73A9049C61DAA30E2717B8BB01739C8DCE8922700CDF0ACEF6C4B9CA782 13C8EBC3D6E3943BFC199C0CCFF9343D6C202527536EC8740ECD53261CDBF9E3 692E0F6FEFF696F6E3258D946E5D2933B59D577023F9A9F0BB640E427518490C C65C2C4B7C4B4C6A4DFF13B8449A3A169FE0DB65887D61F895C0A50E5E75A1A5 6D0BC46DA085633CB8CBA5570B5CCFCA9A21153E9412D6E90E40B9AB9FE64DC5 872F814C3C0C45670A8D4730C76F2EF33BAAFF1D8F52F9F86473F1628339D782 2F3CBEE053515E87D638557441BDE0C14E00E697147E72A4D5502BFE614B50B1 E1E44D5C3774EEB9F93EF11B9722C826A58BD12BBD88157A9CD240940D9C9353 BA979CCFB7BCC179927CEFCA50A022F2FC1704C003585FB669608E1635CF92BF C86BE0CD53CA996A5C9B4060917BA9F52AC3A5844F09F8357F0B74E3B73EDA10 8A82997252E49CFEA53498B40848DD4D7EE35773445652D70565FEC50875CF6E E39320F5A190A4C0EBB91319B3579F3931861EE0B3BDCB0EB29DC029D9133801 52CF4C89563396437B04DB0DCFD6FB5A65A3D0BEC0846DFD86F79E3475B28276 5F0CE0B22A5917782995307C4C9B8B193C68A67242582227C13718F9A196626A E7F666CF757853B47DD59CC846E656C6A325E52FFCC196A77279A57CA8B28DC5 495E04982F35017CDAFC963938DFA232C0A975F546C9B5B5D5A7FC53EB76F794 4599970C0B394BE677AE9CB67A29D9674E75E7D6405D4286E47D8C8D593948A4 61F46A00138FD128D3DD6EBD8D243D45E07ACFBEAFCEA03FA0939B090396FB8F 81223F7B22D8B3C6B5F74EE676B098056EE69E7DE63F2ECCA0C911F169E4B84A ACBE07C8AE1E73885272EFC3EF1B7AFA01924B43D73230DB3E02BF874D10F032 1C1395848689F759FB8933623408EE6966FCA2D176580FE5BFE1A7FC32D226E1 6FD639AFF66801C01EEE9F9B0034B4914990A8B6CB3580AFC53F272503B9E7CF DFCCF9E2D54A4A862027FC3D5ED63F5B8173C076DC8FAA887BB671713085F77B 4FD947FBFA2B025E596517AE295BCFEBC5CD62C2D76FD2996905C360671E755A B6C97717CF8BFC046C6F01ED11667179B8A78B63CC2FD945F30E4E68B44EE803 51862CEFC9B0E43BCDF6D8D0C86F718C6C635AFE47618C248507941E2972E11E FCAE6EC152FBE07C48C13B0B5DB1381E0211171AFF968D942969EC6D4B32C4FF 4B7B99219C17D8ED8C4AECEEF3A36053241C0CB7CFAE5448515DA5C70358E7E4 B468CFEBB584B6521ADC36E538D476AB4A2FBF2D7229537B4B20DC14CC237DF8 225CAE4631ED495264DCC9E07F228AD470D03FDCC008FE81C1987A5ADBCB4B2D 319FAD2A67897F5C27F81CBB8EF40AB60D300ED4D595DA52FC7314131319F43F 6B39DB59AA40397A81F3D9DB4C069BA2369D185CD04ED886AAF6837757905690 F0285616D65933B39981372952A48EE92397ED3C68013788702C502F52256B1A 25784FC9FD5AE3B39DD3717014DEEE881468E3D8781873EEC2F7DA99F1211028 20D81CC5103502C871BD0A03B901CC6B8A7A979F7F26741066B2BF524E3FD364 3690D906BA9AAD6D4A755F2471A62083C282C5C29C1731A4692A8440A9A1905B 7B7C4488DC4020EA395BC1904279343BCFF8850C4BA7FAF5852A6E45FD522475 BE5756C3C829970E255FBC2B5A9925101AD03C7FFAB1CA1CBF4548F70EA75D7A FAD66D2412AA66CFA0CD8B3822F5F30665025A11E7763243A6E3EDB50C810F23 12D4F5036FBD8EC5249E61B73E3B189B2DC8A7CFC020FDF635D955FEB6B1DAF5 0F2C72E27883D3F4C10FA5467E128D29A6385CE3793559BB795CCCC85050B227 50403F6C8B53483B8E8BEF5210112F8E69AD9F4F59444A5A42273C4CC640C19E 03E303D4324197ABBBD774A8AFA2E042AD8823DF0DC00E4FA64E1F552B84BD76 789BEEC702FF7923E831E2F2606FD28CCA24818AF68AE71DCA174C1E713A9637 6C289A778B25CD0570748C3BBE646443EE46927FE39EB5536075AC88CBC737CE BDCDEA025C376E9CE88664941B7D971936EA8CB14F72216C18BED9443CAFE4C3 9A103E7517A2DACC535BF7F9E7A346F968AC4BA9B30C2567235281F7321538C5 D2F1570A98EEE7AD8173384040EFB8289383CF6D76AE38EA4A3A6619CBE7B9C8 955B3DBD8FF8E332108E3A0063D66EB985772A488623F629DC3509BD5D05FA3A B30A9ACA2DF3F87707E50C07E4650D111D4EF76A864643FFEA4C39E2444D196A 6B510111A01BE10C8E5B9FF4BD36FF749E97308D8A3073E629A79590ED27B632 2C37DC6226CAD00EB28630BAD4BFBCEBA3711E3B73351F3755B8EE440A4832E5 C3168EAA590D8E3B70C59215EE702F75AA047CFCFC78456729D28F479DC884C4 9F95442466BC7B965919DE7ADBE78EB3BB3B64CCB41D7F16C659A5E99C01FE8F 4EEE92ED9F24043A4A5F6A39C3A02FBF1654D80089C60F8C944EBB1F1F3259C8 E50C2D12C229444A61D598C1543EB6CBA668704C4AEB303453AB1503456155C5 17A0B61A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY8 %!PS-AdobeFont-1.0: CMSY8 003.002 %%Title: CMSY8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY8 known{/CMSY8 findfont dup/UniqueID known{dup /UniqueID get 5096649 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY8 def /FontBBox {-30 -955 1185 779 }readonly def /UniqueID 5096649 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY8.) readonly def /FullName (CMSY8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put dup 2 /multiply put dup 3 /asteriskmath put dup 20 /lessequal put dup 48 /prime put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A4D80B73E7B6CB7548 0E1D77FFC695988391DC44AEED8CC947B3D7E198B9620E2238DB3A2819182F03 14498B8CDFBA48926DA721920B221FB33BC21A8456AF10891403501D0F6415F0 7E041AFFE109F640E54FC1A365674711EFF94E752652A4C8DA62CDB1149DB899 2C4A4BD77A06E81E93C5698C05DD02F74A0756082738BDB53003B483752AE498 DD718AEA8F3FB5A6B7E2D2AE8F309065F3D556F9A34AB90C88833A54295E0982 209C466A301BA3372AABEE20D862C6DC6B6FAC1463C8CBA8AD766ED1B4C9D712 2BECB4E6ABF558D8AB5281C35726BB8D046982C0DDAE17BFFC9394125E4E84C0 B283977D31460B8EED4346CCB09F64DA0ACB640C6DBF32F2DC30D54668C1CC12 24C7280593088E9958C047125C323E9C842801346A9CE5F50413D69F6DE99471 65D2E387765E92EA4C43F17B467DF6E266D92551009C0E52E7219AE9F5E2E8D2 88852086FF3600BFB50AF3EAF8C009D8D5F084B510F792385F328F7EFA8C38AD CDAB2EEDFBC6AA45F6DD7364C2F02DD2BE6C79C8361E83D4267CEC2407689864 B57B5D967FC80AB3BE8CA43955FB0FD3081D438437559AD24A7ADD484C1E4A77 B00BDCB0D1B121FEE983412E1EA5489BDCE5DCB4A7310135956B230C0DE7BBED 516369A92BC41FAC8D73490984942D930DC193BF0C774C1AEF627B969EE4B001 11381AC57815D7581E2372A1DB740B09F4A7FB4318B765DA4E7B44E8805CEF85 44EC3B10613FE7B397BF91B69A5CB2E9086D1E7A1FAE0A9ABF2A237A2D29ABFF E392A18AEACBF28274E775D3FBAED4F46B982B9DA4602E24094EDCCBC9D6FC0F 67C60376879245606C0B9C9A678E8917516BE1CF097B1C75C9F0DDAD6899F08F 81FB7A198D45FE060CD2A550D9B8D58B882B969D7BC3EC018A1FE92BDB262835 26516FF97AC387EA525FF987E5EB1EAAE4EA5866C9CC043D183763C530F7D7A1 2070E4044507C4E5611FCC117FBE4396E0B24F672CD53D5FDFA56D561FB86D40 90A52A7C7F29A119DFFB694A8C445367746A49CA5FA83163BE448EB19625DF26 609A8C8672631A10411036CAA3D6C2F822A4B2505DCBE8E1CE6916AE515E78CE E8C894B134BF811671D17C19248853131DFFAEDB24B15FF17EAC194662460642 48D23515AD434C68DF56753806FE96DB3A29F9D4980E0B6EAED7383F9FAD2584 8F85679D6D1933677ADF5D31FE6E43DABF137E834A1DEA632D36EA5728625159 8F33348893C9D1C510501628E4A9A80587DF6E179FAF68B158406A3EBCD726E2 AC17F2DF8B3607072824D2E5A6479F7BADE32E603E54E7A83BB2DFDEDB0D80CD 1F1BDD4F6C9025CC3A8A3685DF10A8183FA80CE0F0FE2BFF2500F76B1037AE41 56D2D7FB468C3CA7549E3599A2AACF66302572F1B35BC8EF7C23F6FC4B720228 1D673D903111CE378AAE83480B4DEB7EA84BB35F4F7BE997DD4FFF5A9B5E7650 3C7365BA0965B242DC369D03215651184024A08EC284F1798B0726152884B4D8 46411B3BC8F5CB53A70AD53BD7B1AF23528849B56CF2F75609FE715878CF6448 38579380688B47AE3D374B0DB6ECA5B8284414090123D47F3F9DF389E023F431 6B4C0DDEE4190DEEF4CA772742012754DA9A44A8F550FADA6D8FB0C512D5BA2C BB7DF71B1DA41FB6936BA71B710CC6A80751E43436F0F5888F51AB370DD4A088 40F402661E08732C960705C7E0D29B8DA1A8A3E119409E51EE575E9655F47568 023977917C8EC610BEBDB9C1F4EBC192084D63EAA00EC87B53E86620BB5AE51A 579B0F8E1972CE1DA02832FC75184F45409DD9D413402C2FA27BCB0AE6DB4CE1 5AFB114E23232DE07C4674969A1FC94D152C6D3A611F029ACF4D949A2C0755D0 31C7DACDBB4DFCFAF7E87295CCF5D4AE28D87ABC3533D87EEF1507B9FF9063F7 F007DF03734A20BC3A198B049000C92D2849C62DDAA719FC28EB372793E20128 D786670E08948808BA45C4F6AA0DD8A8357CCC47228A760C5C7864853BD9C9A4 285E446CB72C5C9D3F03FAB000810DC5674061FA116153040743E846506CFA67 FA8770E785D7DBC7293F37389A0859CC22275B23C44B57B92A033A7BD194340A D6BAC6E103402F8396A5394C617CB2A27D9500921D5DA06115EC81715EA8E360 4A95DCE8689CBE268B8E6C8B806CFB0ECBF634250243C9E1AFFACAD65311FA4C 1DB0988203537E5EF12B86FB454D06CF05E4F4FC4143D62920E99304245B6ABC 82E21192BE94F5E980DB21E07FEDF0EB0CAF4ABDFC20EF08A2A44A7940E2862E 08FABA516152DBA899D6CA561EB08C7C8298DD511084E5230CEBF28AB1D84C85 B5BAF4616C28FE05AFA4BABB3BA03F8CEEF3F3EB0D3034BD3D8D06629B8E9EBD 72484057E71C9EB4DFC7C2CE7749271AC926C2419D618FB0B60FD6F81F0F2C04 E529CC74DCC9E4AF32D935D7CA65FBD0842A7BAF162D08F782E65DF3AD9EFE69 198AFA9208B22BC21BC4ECABB9BFFBA84C8421B74748E1EAAACEB59E566838F2 C439579D6C75074F94493F7D5C8942D881AAE6302C37A61003AF77684EE99AD7 EB5EEEF050C52E75E4E842F8174470FA60CB213BB6F257EEB26CC55D1202931B B981DE2535A87CF37BFF912220C117EE166CCAE58BBF624170FFBC0716726B36 304D698F2CA131675F7B1199E6581B8C812C4FAF75814282477BE2B7EBCBA7C2 FA6356B2876F89698C6C2493989E9EB252DE03BB374622A7C88B8EE9FEB4851E 02F85CF70CDCA7BED5EC94E81170FB557C3BFC6F32CD70B506E56A2CC5451592 130C6F570C679577C44D60A811DCEFB3535D855259B1021AC168DB76DD38B459 F1813E3DB20AD9275D58880CE94058490ABBBB0D8DD16D4A65F680B30057F15D 07FF54D779CC978E90A850A2D8D79961EE276BB26B594C16F56557435671A3D8 ADD3DD0BC4BC73B0652B9DA8462FE614A14A11ADB2214EC4910823FB4CEC8938 24354C5C62547EE5710FB5ECD93AA45DEA7411F6CA8D5B5FA222685E622AD73C 1BD5DFD1C8F253352D6C7D14FF2FACF07CA5EB11392C6A33E9CABFD99F743BED 55E8DEF49E07B9444171D1780C698E5B65B540F41F845AC188DC7C0C8B5BA5F3 546BEAAA4F29F0DF30D5AC12A60862742623100074457BF2D820DCAAB340C1DF 22FF26992DC02F276B40A7C528C84B72CD189A4088C90070486C49A1014FDDA3 5093FC12DAF309FBC063653E6A33E14EB51B081126AB5BCB8016E975060B796D 6CBFDFE6CB9E191F12E309254BDD6660E3227012F5DADE246B02B6D8127F1EE2 248F48DC5ABBD229748444420C868450602120664984FE3A8B2373232CE5CA15 E67172CAF7EA99F73A66AE33B1EDE5E8351DB02497CE3338930147873D4E46B5 E918F5592A21789FA9F46232BE693DFC33240E2649D6AC1940B101D806089436 F0CE230BF6D0363510378822891DBD3EEF3365430E74FB6C994BB40C8EEDA593 CEDAFEBC3B87C7C04F52FBD7D557A77B44855CDBEC8A8D26F44D66446B5662AD 15B6B79D13BD262D79BF51C09F8F690A61C7F11EC2E05F6BEDA273648E9E1EBC 3D5F1D6ED486797F753064ADDA8494405556D43D395B1487EDE877CCC1EAE954 1AEE2513DDA94897B733609E8179DFE1975590568202EF20D58A89B34874CC3A A5579473AC65E0EE61545AEF578ADE10BE3FB3E2CDC96678F613E4DEF7BC1B38 8A551C93438A0540E292F65F1FA73D9AB30A5F545284085E4930A570C1807995 7108AA8194607304488616DD4AB189F8EDC5F4507AEFD7847817A8ECFFDD2DD5 DE95E04EAF2774F8AF661827229F01E769A32734097C457EB6FF056D90C46C5E 9F936AA6BF2EE8244BBEDB8862E56423F5845BB10C8809730B011D650EA18945 83C320A3F4ED095A5EF91929FC877ECC28A1C2CE74A53245E629BF46C6534983 307B1C94EB35CECDEE86551F0C308F66690E591C5D9D8FE14F534CF3F5DB6D32 39D7C799F392C4E65759B7BF61F4D8312E3B26C31466206A367A0DD7A90D25E2 805D36ED5CE0A4BEBCAC0A348FADD2D2AAD670E28BE6E33F627B4A9F35078B1D 6688084C4C18840673EF9B3526172EE14EF64E97C8B006C27DF6EF73BA6E6459 3608F10EB1EC4B824DD5360B42AFF2084788B165747AABFB2C9C0EBBA9C6246C 08F28143809315D6268E386F09BBAC54C34213438B56C386B34AA457D149CC39 A3C163F56E3C2E637C63A79CF7F2DE969EF3AAFF75F3F20499A9ACA61279D545 866FFE57D25998244F448AAB042B141952BD653007A889B1A716A4042CBBB827 C1ED5E3C616C22D5FCB39D3B3539F9B71D50D25ECD2E5D953C7A5194C867DDB1 75CE10B2C3A20E8CDE15AAE9F549D034838DC066CA649C31EE365D46450AF18B 893748D055DD88C72391FD92DDF0AA1A1316051BC756F87BC9A425019B2FA7BD CA9F35E89E2229B3021DD24C9DF0DC3217F44DCF510116DDC9E92EFDA3E0A892 491C8961CA484BA29B8CACD2FED2E246FA7414F892AF7B9F08698FDEC82D2E4D 8C6ED1FD9E0BA2645663E7E97B0F780033D025F2EF3B364574C03F04FFC4E09A 3D4182BBFCCCD8CA54A92434E2208803ED36F931D31C7498B7FCEE4B78AECF11 B27123A10F031F9CBA36066680E4748E346D18FD0EFA395D1A9227530618ADD9 64D96C50A0172F712CB427E8F7170F8A1691FB95B247A271499F0E63676BD64B 167438333A3BD9CD9641AC637E0ADB17F1E394DF34AF5A2BD02030DD087BBA02 E1209338B74075744A9A9966039AB6D223F385E06FF359257913E6C01BF32F5B A3640C7CA41A6C51F296E50DC1CD1D68491CE5D75E0ABDD4C5C4A97C8BE2BA35 D91AF9F8F38E7AB8C1778B06A212D0416E6137087329AAA2679C51D014CC4DEF 0F1543E2FD97621E552E19B29AA1368CB5046C188BA59B1E1875B25FB269DD2D C0678A42CD310702465694F2BF302AEBC43F714F7C657505132DDA71CD23D17D 628BF3400EB5DDFCE2850F31B40C5913394649AA4241CF646F3939916C2077AD C11F8C3E478586AA7931E327333FCD8A2EB31DF4B47AA2F31B999556602DD998 5848143C0CBD0B5187DF08E675550F2384D48C2954EA7D16AD2B94DF97C194D2 302CC47BF968CB1F6C9641A87525D5C6972ACCA1D4A4B4DA8EC54BEA6E7312B3 2737754A9FCBED3BA5F8220B751506BB0A5BB5CF706AFCC04BFD713A3BE3C842 9FFDBAA0CA5691D0FCE76134841A169970903843163DE68FF09649E99945DB64 491FD6D8B2DF237DBAF550D1B74263B3BF1EF6211F40D4DF2DEC46E4DE557088 5D458A7CDC6F34B8C3F5C76582C8B7D24A333AAE0B43CA67436F8ECAD7C50B12 35BAAD521033D8024E4DFCF01580AEC63BD5F8ADB778F822AC4FF0DA608EB7CC 1A52A51B9F38FFADC0D2F4D8394C5D598123B483AE5AC1215F24F2492EBAA134 3C58AD4E3B493AABDF753EBF1F04058C6981C353D6788C2D3294165B667D3765 7883A8493F5D772F789F73979B254BB9397FDE4F8B76CA6FFF312F4B012949F4 3EDCF1AC60FFF2681549DFF430B498405E79CB407DADFCEDCAB1E2FAD3B0F4C7 B575A33EAFF9F67D37F50BB06D06834EA683862991C5BE340D4A7F8D131E733D 289F72977870F9958102F5D835739F0F5A642E7194E8AF7FDA2937E5C0712CE4 EE15CB475725030CE0F238C32775D3EC95CE3D0886046E3EEAE322F59D423E83 DE88DDAB5CE0F70537487EBA5A16A9306BA7DDCA14A85A9F83B3BC3600DC9421 BDADA2704A5A24F7174A3A486ACE68739EC5960038CB44D969A594E97AE1F42C 42C1B7E3A456B3CDFC7683537B337AA8777F18CA45B22C8BEB18877DC624496B 9E8EF9F386B7FE4D94ABD5CE3B5786E76FE04A35909C472C04654A4405932EE6 A4A3E0F6DB088603FDD82F0EFCB85A962002A662D1AD0647A2F484B59075A1FA 9F4327D542ED7962620B998ECC3A95CE736089593461CED9B5AAAB05C2DA3820 5AF29B32904E1EEC357C8E282189C6D8F562DB11291091E6897E24CD8F8E2A34 67F35D261E01336152E69831B0CC6B03FF1AC7EA22B745F513A25FE10F70E74A 3FD71FE1EC9999BEDE7CFA6A97EA2DF621711BE950FF8960965685BAAEA71FA6 36F165573A0A6A92DAEE41A9B0C97BF03419FF6BA1F44524D00FD671EACC4233 9A857680DFD27B9F1E7A760058C8277B3761DB9969241D1824A7DADF70BBFC38 89C6DB9091E3BFCB36851CB9662B365A4B7384BDBA1D385902D1E5DABA72A159 63790096B927EA49299AE03E41C7F593F3B995D1155E91C62D5F68845ED3C797 7798B56858F96C2FE2E37D812873B7801767082A6D6B60602CEB94B7F6D7A142 72814734DC584A18D1FFEA7333D4C7E2DFE5B91E9AD92EB52533CA52FA888980 C79FEEDF0FAFB3B20B497F9AB668BDAFA364B405916526D5C48E57DC30BC35B9 BF684FDFAD199D9A28541327F3899AD505FBBBBB22F419E22E0149EE5FDD2B43 AF442E2724EC16934C307FA731F90AD1C76B74569B78CDEA7C19808233C6364B D049F3F50A68D3EC5F29F2B96BC58C44AF90FE13F244B7129F14B5DAC3F3F310 B330E67CA4EB76F895DAC8025F11EC7630EEB4826B5721348FA38F28B2AEEB1C 5F7CA413C486C94B1DD96988F07F7A08D3635E28624878E55D4FFBEB5E183CB5 93014D8A272EBCF3A09133603CFFEF43A6FF059BCE525706D3795884FB495748 C8AFB50DB464459A5C36D7CD087631BC09C693A11BDF1C6011D9864FE66EE8C0 4824A42E97D16E017C0BB73732D4537E2A5BB283B3568950E5681364DBC1D6DA 058A122862A44ED85029A7B39F2FA7C362D859D0B429E056891339626AE6091D 74F6110CA32F8F3E9507216997E6AD1A2F1FFBE8B407C9880DE230E234F6FD41 A291851178BEAE5DB9DEB22E3443807E2BCEF12A4AE8C490AA9E3D2918329F47 42314CD258A0760DE5FDAC4AF7209CEB530B8508B278952A3638CA8491C3B493 516F461610DBAF32E923ACB834B15E2D169A10F2609EC0ACDF7BDBC777DD2C19 2DB330FD557D3B06B78824D6AB237D8F2D57A7ED35F02CFA9290ED6893B41657 A2485524A3F1642FF5808FDB77015D9467EDAC4A6BBE8A175833B1225A5554F7 2C60207F7A2632A4023255E8EF1F38C1B8216C9B03319B60BEC9799E5378683F 46E698FA75F2DFD40F17C603F3335F1EC70DBA1449C7A33EDDD46CC3DE4A6557 EE67BF349AA8680FDBF415DC527129288B5879500180F75DF80394EC7CF11BC8 9EE9A4ABD64DE3076A2963F83FA333F19FF74F79ECF36A87A31D6F125FD2415B 3F6A6FC33C179F54CA164835F3C3DB62AF444BDF27AFF23098C7212477F688B8 6F48D9AD080D544D57FEDD33D3D9AED9346CBB644C97C951D4AEEB2BF6F0CB18 E2517BA7ADCFD00FE44E290E731D53E5C0D762FCBA08004562DCE6A5EF2FBB74 B3053CBED3B6E896B1C3356DD9E8FCB69691AAF6BEBA0424D62B9F266D560B40 89E20A9F35AD4A7F65A7183761ABBEE0F7EF26ED3565A25516A3A5A57143979A 1EEED8CD52A69E4E1AE4795F3EE0CA21B9F4D166783A9AF54B08B6C56703932A 310197E328C6E6A6BADAA11D66A952964F31FD690082FA02D1E2A4512A9F2742 33B203FB770A3A1C7490ED630D0FAEB3066429D0237E18818EC368D0DA72EEA7 5DF428ADB692796415085A0C3C917A5117A9461C92DE712D74BE41FF43D070A7 3EAF55A3BE7042F6E114D3DE6ECD95B4BE8C22431094706AC66B30445FFF661B CCCA755EDEE4922E00C3EE943A7DE7A65E32BFC9A596472C721DC08E941B1E7F 573D8C0964194509C21E85600DCB77B817793536F67C1588EDD14D6BCBAF4D8D 22068B21474C71933C90CF92BA6C5ABAB1864D85AAED9FF4C1D98BA42AA91660 B2AE39F7BAA5A9077FB46001A00C49620DA84A7D1D2EE42BC5614F0744B3D75B E4582B4C98B73630B967E4148136D99ADE052D5A2E577BB9BC650DC773CF31C2 CDF058FE624ED84BCEA273F000F765D1CB762C01F0925CC89920648572F1005C 5B8BBDDB702DCA151C8064D9033EA065C44F4DA84DF20998014260A53269FBE3 8672FC59BF4678D08E283F8C74C0035ADA5B2C9B9A65829C56DECD4C0B02C46C 0AE33417BBF49B2B4F773628A14FC96EBFD4B96AD916EFD2D13C0F9687044ADC 59A243F951DB26086F158D8163A2BBF04AFE4627E035F74E728529A74230A3D9 2F1139F5EFABE1C7806421B254B7ECB487889AEEB5DB5DAF33A112FC84DD8D86 D77F26EC6E3C902DFEA667D2724A27023DF5778BC4CA4E0FCF0C3361E95CA5FC 03C60CCAD4F5FA1DB984CA154AF22EA82AC436A54CF5348A699E3A371B46330B 9F9D22F16E4018B6BBE870674BA307BD4AEA4610C53D663B9ECF6DEF3A81952E 548AA838E035464809126937CED266BA46102C8A48BC13FE3ABFAEB39C0DC012 54E3F2F1B90ED64DF30CE7836142BF6670F9F5D76D0CA6788456A42D13B97A87 7F174060743F33757D996860CA2BB932D52F94F75697000A6F82EED9E808D0C5 8D7DF0FCCE61CA9414E2DA70871AD842EED44DA582420BA705E34D0F0A7872CE 9FE24A9761A3833636F8B33B0C6637CE3CE3B0E76C24CE7293D6148710FFC8D9 932DA549D602EA1147933F499C357FF36EED2393B9AC7C92DEC6F782913337FF E1F6F4BC45873BE9C6C1D5428C4B3A98A21183A320D73815097B428B309E718A F92539F58CD00F8A8087A6E7791A2B87AD0F4E6D34DB3FF306AD3861753B0185 20B3A81F2AEDE94B879B3289BDCD4E7C8DFB2EEFB0105EC9B9196713FF246937 1022D95945C55399B4FEE86CC4C67990F4710EEC119EDADFB079638C21C06B0F 5D729ABA913D99AF92391BF8B26BE94A4085CC0045EC78016C8319F29F90808D 4AA1FBAF363B89706B1D0BE7D17DDDEDCF834DDEF414BAA1F19561EED2D19AD4 F266D781BD4B66FA745B07EBC3F311B9F14A37B16B0670C34C08C6E96CB7353E A5FCDE6BA54DBA60CC99017AB64C72F08BDA066F8765E34D45209E5F2946DEB4 403716DFC9D425274FBBE9FA75D9EA904AEFF7A0B000969A21EA5C3464B0245E A081FAFC3DFBACB4972F48FBB89310A265E5C1C3A22C992D2375443F59A569F6 B3C773FFFE1792DF36BB0AE98D27A65AF5104118ACCF0D3A054D36EF92AE551E 79F718ED5FA52FE440D1BA995B6DB9941E9257D9BEE80A8BBEDAF6F96FF540D9 6C9845BC21AA2922761A4421C39CACCF0C5DEF22AC6CED9B1EEA7598F397AA23 D72302930D2F1DD7A01052EE3C16BC38EE5DB9FD8866D7B1E8797C36CA147EC5 5C4F0E528BDFC6 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMIB10 %!PS-AdobeFont-1.0: CMMIB10 003.002 %%Title: CMMIB10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMIB10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMIB10 known{/CMMIB10 findfont dup/UniqueID known{dup /UniqueID get 5087392 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMIB10 def /FontBBox {-15 -250 1216 750 }readonly def /UniqueID 5087392 def /PaintType 0 def /FontInfo 8 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMIB10.) readonly def /FullName (CMMIB10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /omega put dup 60 /less put dup 62 /greater put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943569C4269F4A3F32986A7D15 50483BA7C04CAE03D8C22F6F9A1827004DE75B70455207585BCDA37DB2ECD162 363518DA08026AD9B621422303A6D262158CFFCC48946A47FE42911F1A43CF10 7CE85E61151664036FCF591A1CFF0E7AAF263909A6A4A50DF0CDB60C91A75327 8C011FC63A462B0598140B4357EAEA08DC2C5445E1F8C2C913B721D5A1B67941 77BB66689F330A22D1DE5D86B2C4712DE9EEB66EF95D1E68BE947672CBEA966B 3E26531084152B1412F48697A965C85B0338CAD1EE054DD4445A9726A72E959A B5B74F0E0A5A8F630116FB8342254BC455EC3667E184A9954E0B76EF54015BDF F3DB7D1FAF44EEEF38E5F07E9589B85ADCB9B529CE9C889CB4C43D1C7F5C676C DFE91F37CD6CD338DF774DBBAB9A1493C7384ECD4B588506F23A024487CE4903 0B8C9D1483536BF7CBC05E9326211B9211F11FC8B2B098A0C5F89F19106978D5 84C9134F45A542D914AE56D73299B3FDC93C2E8F4D271B54F7EC0FB05C1DA397 E9A2036EA69C903EB95485765BB05BBD2E021ADD7B5D83555E490EAA81157819 A2AE883E39B4254EAA5C4FF60087C4875CDB9E4A85A54955EEF5DD5B15F8C970 8E22FDBBE98CCD8E49C27F55616F3588E6699202AE58B0D9A3E398A350D90CA8 D3BF920E504EFAF93B5CCBB336B072F2B3EFEA907599A95774F4870B6656257A 29ED37ABFBFDAA41ED08161F473C20CADE82D6F7531110CE680EB172A2024F8D 6F02DDD49350CB0BCC97C657BEC9A7A92A7C1E623E8B0E409A74B01DD0A470DC 94ED4CA0B6BD786EE287B753ACB1C10BD826A84D8FF92424FF1A2418A6EF9BF8 0B3D0F708E2F52E4557F497E749CA9F2E513F33D6D489612C68B68CDBBB4CE24 E53AC2AB756F64B838CD2B0D9402620B0903B8A357D8020DA8B4DEF15AA06A1D D4D78057167B901643CFC357D7283A850C139E1BBF6E4079F375EAF63C7C4F7B F630FB23A70A90178560B1A2C7F64A2B8796D60826F3B10BEFF755CB59DC26AB FE5E0630FA1E16D083C8A5ADE0345F783D771AFE185F3DB251C33AD86127C0CC 548400D92F559737FD421E6D1A807AF696A22C1779AB236BDD37F7BC467570BD 4C1981D141680DC78513430DE03DCA87134EE46E90471F4DDFB4D5AF445433D9 FF6F9700904F274A610E5978C0C14110C00C0D49891AB4BC8690BC93418E9EF6 DF7A3BA8AF0BD66C17DA2694FF55528771B28262917CFFE822E973DA4B55AFC4 AE9F6C28994E25F88612E804C918278040097C028E15C6B7FB53332908842185 10217D7AF376DC438FE712CDE9C50040E0B79F4BD67DEA70C6C2FD34FDA699EB 0F6047A613FC8485CFAEC294FAA0214F0639603A00F19A5D92A3BE89E5FEFFDF CBE800B960AFAC6EF1B85F4B74D8830266D0FDF78081F6DF0F596C90E1954C09 631D98F44A8F0C2394AEDF98EF8BB4D21AA7905B3703D76FC4E104389E61377F 92CA0B2A9CABDAF99CD194E473FA0104ABA283C76C20F003C604199E6D4D2A5F C72FC32D84A1F4EAEE4E20660BA4C14C244AB65F000B6D896054B2B52F19F708 CB80929D9F98AEDC99365FABB6FC42D9337653ED45D2A2B802017BDFB8D28F62 745B5D74F4411CFDA724189030854D6D578DCADFB37B73AE15E80EE20EFBBFD7 959AEA06EE4A93DCE0D30B894D811EA3033FE26358EDEB614DA60CA8F9DE9855 F26F1B7FE1EC8DF0E6983ADDE63E3DC55C1088EA3091C21FBEA4C39E59BBF3C2 7C4EE5AE85C89FAECDBE6BED7B789D390EF78674F41A8104BC970E81FA9CCB45 DF6B8C2C2DBE4DACD0FD66877529BADA909675A761460C3F6B6F122ABF3C4F3C C2B74804989359C5C127B69CE1D89AF4A74BE3B8499014942319D03AA740596D 863F0ECEFB11825FACEACB3E6971762E5BD8CB9D0055C620F4E276C3339B31C1 C321D785E1FD9D7AE53725AAEF68C258D2AB7F8DA4F9B95DD5CE20C35F3E9908 964C6CEC56D0AB5B34FE2AFE412455C971881B144FD7D979BB6C8B721A6499EE D39109FDC63E5DDE7CAF6559CEDD080A1624690BB6565FB0828D5025D153145A E8885E5D37301BC1ECF95161DD88ED99FCD11B77BBAD6BF1E1D1BB265817AD2F 40B223CD712D48CFD86428661D191D0DE40CEE65272A90AE80C134307D575808 57CCE5A72EE709196847F25EC20775359490CD96F818E135A4770A5D477FACE1 18C3E44F1C1F60D1B6BA8B206F107DF7FB7167870392CCB34357F9E4499A4164 0FD3EE38365F9F16642FA5D4BBCCD53E9680174838110C2F341E8856923D67FB 17F77E3C9EEA8B51509ADDFD595784714495BB36BF6331697025D64718C37131 782349E44FFFF0CC73A9A01D0F41D89A433D01D82267B25B15774CD010594C91 A5FE2AB68455420213D78D44D0D29DCBB7C27381182947FBA133FA137B8B7A78 9A1514A411497C4EAE49ABF00971280276284E642036ACE628F142181CAEC3E2 2FA3B8B74109C3317B8A0DCF444A2D7CD40B56A6A0FB571F29020C10467F8E5D 56DFF57F4B067C7115CE624EC693759F6C93F10C4BF79C1083D72390CF06110B 6A909581DCF8D72361238801670A67DBF1A2C831DBED6740191FB43F325AEEA2 7CBFF48305A64AD9FF4EAE3A6F71596DB0E5A1F5B6BA2B6869F4F65156E823C6 4FA7BEA68663C5A539F7609EFFB902DA29DB1AEC8D477051840A9AA16FC5389A 121D76409D28E23E7908DBBD8FF823B62036C9526C3B10375A9385A4AF991B59 88BF2D51C62FABFF359AAF056DB79D13260016F6217B32DFED2938DF6A313D9A F4852580D0C5357C413D5E06C883D19CC2E6968A5902DC3E4CA25FF06C6F76A6 9E15D2395CAE81EA10644263244B15EAA5A40C6E3D66C0B6AC3AF60FE4C1F473 6D4C2A110EDC509210E58B4A5E5B8408170535D1321825986A1B998D105991AF CBD6A46610E58EB90C9ECDF50BC0D26C7A681F6670ECCBE1B091808E4016D871 E3E4123FB6B1927307950B814B19D665E8CE2D5E5A77BF59108B2D9E183A1BEF 7D229985E5D326571C07E94A68EC0C495E8DA0DF16C11F6DA761BDF810195971 3EA07F0BAD9E1118239673FAFECDB14C685427B9FBF3D309C726D9AF11FBE3F8 9BBA94E8331845E2CD62549F90EDA5482053354CFFED5185ECBEB1305057F699 3FF0F6B568B180A1690C5734054B8903D637F31F3255526DCB44C8549B7E7AE8 65EDDA8AC5A34FF63EC3DEE34A9EA6F7FEF817CEFA9D7B22B603ABCEC4A45A17 4A5FE48105B99857693DF7C56F148FD13F085EB821CBD3F3DDB49138B1875A98 6D6E48B2C2C124EC0BC9164989AAB1F5AE8C0F21E63193C70038DE654D67F565 431FC9CE4B58D283A2DAA40287616409DBB7F7E94DCCACDF68CD8ECB19B98BA7 BD00C1499731B7959DF35899DEF7F684CAA993990B6239B66BB2220919C36185 A3BB431DCD9197A67852D137C00BF45AF3698C115A41CEBA5D3F1E2FF32717A1 69307623AEAF8287EFB7A7019B181C30F2CF4584351E8176E17A42BB48C5F521 B4538474B2724B5DB5CEA51E783E870AA97FC47401CA0FC0DFC4998613F2946B B827C2F7E874267DD7BE63ECC00AB0E2448E7951EEC5DB4095F9915085A97AB3 812A376AC0101429983921C76C8E686A52A669E8BABBE21354C4A74A6EBD99E9 E2DCCE027FF45D75DFA6547FA60F2A63243D5A3AE3A808C75A99F3D42839A080 557C7DE6628F353F57B704B809F249DF208245612B47221653F42ADF0AA26CF8 57000DD580F6BEFC12E654AB4C4317490832055B92EE69CC2CF85A0232986CC3 819877F3DBAE3AACB1F431C216077B528B1D863CCD0BC6860C97009B90F33779 4DD77D702A114565F58A1DF4B7FDDCA0157CB0A7E74A116033212D83C1C2699D 65BBB42025622243B1A25E399014D0C0582DC50561373C8631D79148CAC3DB86 DAA8CF5E39387115637865FCC04676592C3365F2130852EDA3FD572A353F4B02 497576CE8B5E7BC90A46E02E20536AD5DC1F3EA2B832253D1D1A819B0BDAFE91 893067A21AABFF14BF0485EFF09F6256A58772FF91877896F54582EA274F32DD CB96295DBA8BA6FAD260A71766FBAA4865CACCB938D96A7F35884B2F80DE838A 532F64A69274B1E648E6B18333465A3B89E8EC4ECED5855F6188825DC2D232AA 88283656765F0F957E152D46620E0001C4B0713F7D9AC4E887B649593353DFEE 334A3C8A3DF606AD48E286A7962ED8F7B0F382373CF35DBAFBAAD8B1B4B564FB D421EC6183B7051E3F3022E09818EA7DA564EE44E054C995F112E33DF2A7C38E B5BB24A172F51B5FEA5D11A81957A075AF1CC2D7C9041F85E46709ABE201426C 244C07EEA7550E78D3866493E451937C404152E4B9E081F52653EF379AFC7F85 D00FDB5360563EABFF210F4D46574091A6FBADE205D15BC7A0EAC7C25BCF58CE 479497AFAD121023BF24D9737C42F4566B3CE3E0DDE592E02A4088354A4D5799 02EB0EBA57C13A27BBA913EB949A144FC4F913E3A06FDF1C7C88AB50BD994F8E 08A5837496483EE06EDABEF4381339B1007CDB8D888A2770536EB20DFFC71327 B768DE076F35D951034F4E09E18359837D2D5B80339885FC6FB6E6CE88BC0C7F 465D36783E58902AF41670D0E01656E2983B45459BA7D7822DCA1D505E36F554 4625A1684579A20F7B9491B949E2FE69F32A016E62A979EB9C4A05944001CC9F CAC4B8E45CF45726B6BF10811DB74CCABA5EA5E5F2AAAD3D24B2CBCA416F2BF5 C86B6495C5C820757C4743F1464B300F47EC054EA29215AD2F2F17F55AB92016 9919577ADF4BACE5695986055FC4730E531FE82E9D926B1B03A8C204F6FB4A39 1C94C310E6D5F2F53D41BBDF76848CC247C89D4CCE56EE40FADFF0FBB48804C0 1823A8A70992C265A469576F47CA341810FFC1B8B58ABE8EB762567DA328B25B A9D4F3472428AE0FC180543D29B8E4376D7EC48D25A411991924FFC2DF520BF6 90A7B08513D2A6B42F2AA51B0E3E5F2F6FD57E63BD1736482F303A13D6E0EAED 1761211598B1F2AB26DDD5D45ED477172287BDA7062E8AF61D232473EC060F68 31A225E0AF2E6A5BE2D8604384359C53F880B0A503B5DF5C98D2D657D1466390 6736B42A24D1DBE55ACAEF4C5058DE5ACCE069D39746488D6AA244BEFE1F32D1 BF65D0EC3FADF515EE45E672AAC72040A1E1065DB5A52FC889E1650487BC4C79 77D55ACD9D726C74B6249277B0DF721ADB3293098639658F6796F7A012416C14 7C694BA55C734A527ABA0C9E6363C2C00633058B69261961658CDC29A477784C 90517818017B6BF89580BC66BF15757490F131D9470A323287091DF45DF490B1 9328CCAE434A9637E0E7D3A63A418989384C98463294D25CB07883B8637AC816 57A0AB17C4BB9891599D2B8398DC08A13B73A2DCBB9A79218C161AEF14D238A0 8D00C90ABDCC18B11AF05A54621B19294D09A4B533A7F1D4F0BF2E637BF5E723 53AAC5785828293988797F37B8F14C7CD165E8587E48A876C96D701F46438349 0DDF52FB12DE623F786F13D9BCF2D5BFBBB9D5A16E3FBBB5E6A9C34494FA3F6D B81C12FF86521554113D1AED9A894E5BE1E7225A9B98D4980AE902A8DB3DF1AB 5D48B334C4476EE4FAE42C2CFFFD1BCFD99D82AB3992D3CE1F8642FCF7BBEE3D 5840F516EE8F6E87B5294DC8BF2DF4A0B7A380CF7A2BECF45CE0B0F8A996A463 E6193879C8E25724BF182AEF116B7FFE8BF1A1C7FB6FEDCA86965D325538AE1F 2863A49700469ECD3BEC3D75AC255984373E4A5A621AFE445A10B8D97EF1BCBB 61263A4A2009650770801C386AC6F95F02870DEC62FD6C556A084FD4C165AB0C A52DF2633B01DCAC757F614FFBE09CE217092414A7C0FDC43FB02DD311A70063 2E594A67C9F8D8CD037020C074BFE24168E810C8804EB53F16CB67ABD8C9F99F 80D65C981C4221E857378C4EA79E5CF88CD53B841C2CEB7C58581AD1C3EE79FF 6B07BD35895A8843393EA65FD48BD248DE0E7799845B1B568189EE76445A58E1 42ADE3CC51747B8B97E031CD51E90C75880B6EB5D7729BC29EC0AFA8690955C4 AA5E809DE62E0AC18C5F1A6FE5E5F767B70C8DC44C965E7E2E8077938B4EA3CE F119F7F824DAB88946A3BD00FEE7D8CF68B5A35614F864473C24A95F13C7BDC2 00F018B5BD313629E0BF5A5E35D0A34000BA338653FEB7040C3D5A43DEFC7FB2 5999A596BB7A701E8E03E8D3D35FDE11BC8421E8283EBC327F7C9F6D457E573D 073755A97EC24BCC4C33D93D72F62790E732CE02320F8D7B385DFE2230418B1E 70AFA7DF7D83D7E04A2F657CA6C2410A63F9B45C562B7736A272349BBB18E462 A02BCF7CBCD049B2FA692445C13C4B28C1762DD4A632CD41A8196DBB26075B7E 9708EA316266289D910151A6F7FD5F4755E7A41DCC3AADEFEFA2F28D241DC4D7 0AD828E18F7541FAD3C51FF4938FFD048E1EFFA5A6E443049FCA2472FD9CD0D3 00A0AB032E36C43ACE958C75B2772BEEE4327A53F279FA49DF38E5A3BEC64EBF 7677CCD8EC1B972B65FC2643DC5064EB8A66A777124B70F2DC6FE62030EA59CF 9E328396317798C1074AF49EE9698EC5B3A0DF1112669CB2EB0E2B6948DE7DB4 B136C23C5D0B2DEB49808EDCD5A3B68E161ACCDFA41C8FEDDA50942F8D2E75EC EC36EB127AA8656B0EFCDEE65748D32220E16F296B8D06AEF513E272CAE380EC 17A1A2B0F235FC70D479A606B33AFF70D324C6FF178A38DBFF6F2BA86115FC2B 7237BCD1325690F655B912C30BC069B20095279D01D4AFDADEA0E9FBFAC0B22E 60E377515AF3012FD9069DE25DC4FA527AB6B2EA9CA5420243D815C95E0F4D51 FD84FDC5341F20BA6BF1520C684788BA2801A7CF3B95932EDB3D8693ECE35D70 3666A19F6348D59155A89FF25E119B37D5AF6635843E4FDCBBC413F4A6031F4C 615AA55A257FDF806FD0CC1A65FC78F1427DEDFBC1FC71408978F46E3F32E8C9 96FFE6AB284538B37213D6B88AEA47E99DD73D9AD4369B428EC913CBB75FF2BE D9D9C51701D2D0559632530D6231586A667F3A530FF2F6227EA4CDC10BAB9FE0 E313D378C933138BEFE6D0639DE34F45A5CE2049F5DB6E28A70246877C55DDF2 079FB885DDA5C02313345CE0D2373638BA9990A6911978264D314CF74DF63517 57EE8699DEECC391365AFED7C1329813024B3ADC3565E28D754217B5B1EE6BF7 AF11791FC1BEB8E6835BE35B05CCF2992ED7EB12909C9D10E89DDF362036ECA9 FFDA4DCA0A6B1485F4C4B8A9BA588C708DEE0286A83FBBC77B9E9B8DEA69E54C D7DA907064DFD9C45D3CEA56AE7503493D5F4BE359D3F1669F0B4722B2171811 C8C58B922FB5A692314BBE92730DD235964A7CE0DA5F79507D659EF04BAAA9ED 372D08CA888C6640CDDF10C3811BF9679C6340418C89C8A56E50467C11FD1BF7 D7A58A97F117F511B5BDA0F10AA18F32C4A6A2B7AD54974DA8E693381243AC52 1BF222A8CF93A087FCA2CBF3C036E803B2A5FE026072BDEF9A6AB04B50A9AF0B C78CB24EAD3C4C6C1043F6701FBEDC2B16C73B0220B1226E8CF1C4AE76A77D50 A4F2FB0D95866FC447A648A6E95481134C882B3CFC3CD9CD8BE6B0D25A1CEAC0 E1CA4591E98EACE52EE14B5FE74A4A729CD3E5580A9B0D0473AA2ECE3C05B9D3 F253C0B613BA7CE0AC4D16FD02C19C536AAC90E5511DFABD5837A3B800C49239 871F61F40EBB75EE3024F37818ECDA106D09D2647CCC4E6AC34F49B8FFF4238E DC8441F3D1D2660CCD9E74EC97A6ABC38DFD67586F2ACE7E0A5E3221FEAE72AE 015057767BD78B47348036F41BD7AE960ADEE7EB6DD68E768698E440433640B2 4F4ABEBE5D0390ED4EEC3E1EEF06583E92AF482608A8CE18AAD60578942157A1 CD20EEA08C935B71693DC6846FFB81B4DE950B5CC9FD22C724FB5377CB991A5C 2AF54FC011F3BC6C0A078E9B606DB858EEE6A39ECB6EE2AEE56303801300B6C2 844758E01CDE1CBD6E86FB182C0EA6BB202D24FDB1756639C5B34ACA24F4552A 380EA414F8A68E92B1A89816B0D3032CB96697D32A04F48BB71C01A499E9265F E9E1F413E4A1DC362FF223737BFF10D0F34C20B636158E4B304FBABC9329B785 BC31F795942D5D97AC6F70B287E5392C67D11F050AFEB083C250909007CA040C C81F9899E6B64E7D42C87E092A048730C81FF219FF4210EF7396493A8DD106B6 E9DC705B33601BF9E03498F0A01E8E7FEB8281080B614458CC4A42FC35AFB6D7 D34971C252EA509C0A60A64051D825D512C6F5529AE2D12A0FD136E20FFB3209 319DEAC5599F66AE083ED559459E9BCD0544A1F886C0642801F0D3349E2DB863 C1CDBE0B520FF74020DC9CB24FBEF328ED1DD0F176D8DFAFEFE0BC0679B0C620 A62528E1C19F5B5F17078EAC0F7497CA3112055C4F6FAEB2D4403ABA35BB0E72 7E2C3E05F564E3B933D25C3A51A7F072B23ED0E86D950786EB75DB17C6D07CC0 C2DA9D6C33BCAB4CBE200D09325DB2B189A59CDD2D5EBFB62CEE097837749719 5C6A333FA1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTI10 %!PS-AdobeFont-1.0: CMTI10 003.002 %%Title: CMTI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup /UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTI10 def /FontBBox {-35 -250 1124 750 }readonly def /UniqueID 5000828 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTI10.) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 14 /ffi put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 50 /two put dup 56 /eight put dup 58 /colon put dup 63 /question put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 86 /V put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E 2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD 8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2 7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC 32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09 482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF 118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381 1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA 8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4 61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20 C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504 3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70 9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0 125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8 34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A 30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9 39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49 9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184 2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF 0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348 3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D 9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757 802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28 FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0 98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9 5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93 5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815 DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37 4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC 8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362 E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F 42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96 3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59 A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F 7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4 49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428 D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C 0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955 CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485 1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB 8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388 6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468 83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29 60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284 42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2 1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A 21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA 206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9 D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7 7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B 55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4 6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762 4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392 871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E 9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645 DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5 41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8 2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F 220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001 A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D 981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F 337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8 139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B 1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC 100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A 1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905 F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB 72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7 A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D 310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928 7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989 1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2 8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33 80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610 3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996 4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB 865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B 301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48 3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9 1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29 0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0 30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E 2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0 C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89 14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A 44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654 DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34 9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87 4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3 2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676 21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26 47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4 F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9 D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F 03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5 886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8 352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD 9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0 9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3 92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F 821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93 3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0 47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0 F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B 9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1 AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71 C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978 B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E 81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038 970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C 6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7 97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668 A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594 971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96 514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7 8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C 392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170 3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F 464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053 911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6 261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA 147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516 C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB 61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3 F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C 2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C 7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193 11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C 9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66 C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3 1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692 5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5 6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0 EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23 AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D 8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94 376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6 B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B 02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56 4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF 9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD 751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198 3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A 40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962 2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360 D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A 0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E 8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946 AFFD0B2B724EF0F28393F2034B2E69DA5061426805353EB4D80E20739BC4C510 6C45275B8261DCBA10DE1D104B12F46ACD230977EE7D7D1D35D2814139E38C4B CA6937CCFA653349B1EF64A98457F7B4B5D8F2978F16ECCEF7054905863AA46E DD524CB33459220C71E9EFA7845A3A760A507B3D3ABC525B35930B613710A13D 098832C58EBBC8B0CA6AD516E6385792C59220331D0922A1F6F838A8DE13C337 900462F952EABBDC2EB1FBF94A66186C177501453CD3FE3582073DD86F04406B 41B6AEB440DA475E13240445D46726A6D45185D56BAB8807CEC8A8F7CE1AD149 7CE2E1BB5DE4E5B9592241DD136479A65905FD0062C91DFF7349874BFEA5D9EA 2F610ADB9AE7757B2307A1BB9D6797D9F9C4844A59841C7C7682105E23A374BC A91885E7410F56F60C29AB8B417E2D6092F8BB70A2DD5DEDD4BA1077D7CC62FD EA43428C6F79C332342E15F75B08A1ED360CD1885730E570A3252A5ECC419A7F D124C3FB3A7D58C0EF6AC117F50D7D4B6CD852200A1F3193BE101CBEF414F60F 85935BDBDD23254648DEA12B95871AC8F859AD8C9315B258E525FA7BB0DD294D 497646805C3CFC1CFC72C17EED56FC5E7A5FA54691474DEA0C85DD18ECD59923 619117DC6AF37242576C4E9A56BFF2D3E717DFA750607BA2BE87050F8AE8EA72 8056655F9D9DA1ADBCB07A6697F6664AC6B6C1F5650255776305892A6E3D986E 10A3F76B65763C33A249C23C8616B866CC56D8440C501D46E821750FAFBA1CF3 06101C7D563C43EFE7A7AD8D402F232034B7BCEDA9C49AB562DC60CEFA521711 DB3D81E0400F776034AA7370C867BDF8F8CBE2F2E59D2099F8627118EFD202D3 51B7AC1FC6D959ED360DC88686071FF45FF4893C8C58C4BEC02AB175C3645944 2931F3C13438B06171B814FADD837552972E4242EA058517C5E2C69174395C1F 913209EA0C72D6FC00F57428AAD3852D2B22B8A80BC62BE33B6810E923D71611 9830DB44FFAF36266EDDB105E92B6E0BE02CC9B501B878415E9950C6B84F74CB 7B5F8460E0240962086B547540264F9CD029F40E734EC9E8B0C72335662D0BA4 2ED66B3E5649529D21E3B9479DEB3053E25D96514DE0885D3BA5976E4D90C21D B094A39F0AC8535F07BA31C71CA5D158A149F9339F2127B3C69A0ED01AC4044F 9CFC6DBAE9427BD16A47984402E72783D4918D2C6FF35AD436D828D913DD08D5 F199F9EE9ED19941FE693D1733CE3672C8A584A6F1ADD85A2B273D46EA84D990 85AA9AE8DF53A2A2EDEC89F9C9A6A5C646AF571DA905DE5FC792EE9FD4292B4C 730C54CADCBEDD838CAD24FFB5D67500F54A2C3A15DACFF65AF7E7B919E34D90 637B34D44320B723392E3F9B21849A2F8520C2D0698C337B7E95A5CC571361AD B8E5C86D33E381E570D50EDC85B763C354E8017CD117CBCA2B8E9FC3FF3B65E9 3F62EEC686AA23869A4BCC126E1586563641730867405783AB204281F94B9D06 542B9F983351C0D1260E2DB6426A83FAE409890C9FCD1B636E55AA94D596CDE6 C5F8B14B9524994033E46EDA743CE5D7BCA6AAC5C893E83424A3BC1ED0858347 3B21FAF6359E2D858001D0F08DA33F1161523C76692F213E2BE3E179B674BAC2 F5366DC1BCB3CAF7324E0A8A36BD3EF07DF9FCA929E0834456AA86D0F24F8E33 BACD0F4D746442D1034890909374FB13DF8ACE922C9190928ED4EB3D2083450D C0675C45C27CF2B31641EC3F2CF6D0C964CBCF8B75E77E0DDE0F9ED874963AED D63D790AE6B2D6166C5D7190F2C24F9A9A13961898AE5DC311A762B8B785C659 9C81446DFCB6B336847052277997867DA5CD0DFC35BEE83ACCBC73C481D12695 81D4B3D5003D79CDA6134495F480B392129D179CBD57E02DB1E6D8AB3B6E6936 B7611F7BB4A88FCB0B58939C7AF1CCE46D69A9E54B3DBC11A99B50F00D4F0240 AD2BF3132F9E10835BD48AADD04772AE1D41629906B92CD90B1D7BB7D34F77E8 A16C7A3674160275B835F2D4FC98DD0F344E13F39F4399172A6DE7D6700FC37F 5BB99113342112ABE3C88BFEFB048C4FF1C5CE51B521F225B704F87DE9DAC36F 1BC313F148C4BF1BB8ACB4C2A1FA49CD56323E649D4419E7069A9E7E1B9CABC1 73D49B4B4855817C22860F9FB1970F624075304BA29FA32307DB49C6908ACCF6 E4222A3BF369ED22F6F4C8CF8587EDB0874A4551E00462CF53D08212F92E74D7 0CBF83B142EEDBC007FE06A06D8DD4E0D8791537B917935B4B9BDE9B86784FE0 B45DD898F54B9EA2F95687D1D9ADD22E09261C07034EDDA896D6075C40E14352 2151D437D555CB1FEF886C3FFC610649345724C7C9D0AAB585906C5E9366F5AB 636082E7EFA02DCB8DBA1612509A59F3447A2465C460E3DF20C9B5E742635403 B3CC004D592193DF553068F1DF66B627B992CF9BB68967704D31695637109405 150D9B3A9D82BE7BC57EEB19D151D290E50A0B9EF24A5ED767F4D533BA6F79E2 A45DC54B2B25B0996CA4EDA63B5EBA0D36732EBF2690ABA9E34F3C88F3283357 A738A3779DDF7A231C59272BAD167479F8DD75489F62B54C8AE4D3A04CAD3775 FAD0264F387E38BD7E652C4F43C0AC856F2130F5F65F789CB97405CDFEF1BD01 7348ED790CE851FB9FF7A67BEF29EFD5CDEE8AA375AEA1A0FDAA7DC6EDAEEE76 52A290B6645EC1530C928245B3B08141DD5CDECE110D8AD136FF2498ACF5BF24 DED2D9A9C9CA3354622DDCDA15A32F7C94676EAE9147F380709B41B573F98B98 D41FD35F2946924E1DE920A001799C5E2F4E02FBC196FAA9C53BCA2409D922FE E588AADF5718A13D7962E63EC5C2A2E6FF4F5091F59DBFAC4A84AEB15E063E62 71A60101D2ACA6AF8B672EB683B0C831F39CD2360720FCF83115AE550298A730 981C8918CFFC1E275B8947D85EFA65789B7A5A6163E4908FFFA2ED4CAFEC4CD6 1D68B6753058072DEE79CF812429FAF31745ABFB2BB03949E14322412D9DF52E 1A5DAD80D40E212FC60CDD646A0CEE3CB2BFCE2C3F95225CA91148306B394936 E4F3A57CEB84F3FDA1502F02FD47D6E0B9FD6C66BA9D1254360E395D53B6CBA2 F876A9E3657F3288A82EB066FAB98DB851A210289CAB1498E7845FD09A454856 6902EFF0DFF46D3254B01164413A6A431DEC9E8E9A1B870A546C3577E87ADE93 130E971D4161F1C8EE24D1C7AF310A37A43B48797C949BEEFC33E2464B264AB5 FDC9C4650F0F2EEA830B871C170C98F44C156DBC7D268A81114A4DE9157B7B6F B4548A6B27967DCEF58A1B09FCE59B8805055A72E0876E3CBE7BAC8E97E3306C B57454421D65656E0F0C43053D84FB92F0EFFB3D62D296020B7FF09821BE922A 86ADD443711C36D0C69FEC977827DC8BC601FAFC1670B22AAADEE756C743B109 A78B8CAAC34210864D0FF1F0F66C223496AC253561DFEE1D12FC837C5B1F168C E1D43A0A1BB51A0748A34973E36D897D35E100FBD309672546D5546DE6D28A76 9514F7EF06C6B42BDA516AA96B2DBDCDF3D43310841226905624360B5F02D12B DA02E5BBEF7FDD6FAE9113F3D8561BDA2AE66C2B036DFBF094E537B982E890C1 BD300FFBE851825FD5AFB3352B07A913A10DEDED62681539E0E469E88BD87CD7 93031CFB791D2FBA54240623AD9D8946D021F067D74D96CE8E59D9B2E77177A0 C67015076CC36E8FCD86A2FC235BB13B5995389A4ACF3EBEE99F4BCFC330F1B4 7901289784AFB1D3CDBB07831EE275A585B151162CD5896C3B8CB1385DBD0A34 AE55A349588B669E5E6139572926983EFB1A63AE527D40BA13C00624D9E8A5DD 15A4DD308FD438B45A43B47620D7AE811EFE1C69D859F208826C614CCCD8F829 1C5A6098D7EB0EE1B8006CA50A54AEB0A490741F186DFCD2EE24BC49E532E7F4 FA213ECFB4A333151803CFD137A9CD0E7032D6C2891AB71AF46AD06278E165EB A5F0877A25D1EBBE5ACFE33F444B29DA767FA8A16A23772ED5BD3484E5B3F7D9 1E5666E9BB47780B03C13FBF582FB466E827298F25F9F33A2AAE3CBEB9AD15F6 DCAF7E2670A662ED26191392F6304869E1CE0C80AD221ED14510C50BFE571C4B BD45E069A97C1AF4CB47F899227765897A4BA41F79251449C17096AC88FAC314 182E89474D52B0BC3521D1DAC8936854A0E9B57BFAE52D20F5F8E892C09EA546 A86481D81C57F92A6F875A9A9688D535E32885328FC1DA8FD94C492BDB5B32DF 33E9EFA9B98B271F2113E6E06BEE379E11C860C7FF2606421B5FF8B44B755315 A435628AFDBCCB34B1497F9B15B2BD1B99D1D78967A3744F9457EBE45093FDAD FC88114A232CCA8DF667C2130B69C698773338806A5A794A408316ABAA52B575 972B2EFEB0A0DD22D63EA0574DB1AF3CAEA4C419ACCC6940602456E171F37B7F FFBF68DB58905363384B0F37080B835B6B217822A3256ECC9FA317C16B875313 59D19476A72D3EB811A07DC7F67700819DEFE644B283CE4369D2BA0F8CA284CF EDD75B4E4105E7794A98C6118C7EF17F6D9483422D9DC307E15924AF5272EC9D A833EECADACD640F3C9A374BE62D1527F017E2DFCB846BCF5D56A41F838B410D E50ACC827E19C122EAD0C04A594063FBA594C0EB7E515D7ED2B1A3E0AA07EA7C 55282BC62876E55E38E7DE45F9CF0FD8C5F6EB1D21ADCAE50F42E9376FA656E7 F4E76D763457595324987F2C8BF4CECB5FC5170FE83231398FA2074241060B72 C2BF7C46AFE0BE7578B7A68258E3A7A6D6D4778000E70E2B6992E01177F0363C 09532ABC67B572B480B639B1FD8652DF511FA496DE1D8627BB4F011F4B1CF31A 2D4225958600566DD8E1EF9351DA68AF4D2B1135C23EA35A3AD98F6ED812CB4C 032B61AE03CCA46236C8AA96E2134A0EDEE6DF1D033C32F800450106D771A460 9A1C113382971AF0B184BCB8919FC236173D5D9EF4C45BDC5DDA483007A8D1A3 2D288AFEDE511E6141A2DD706ED066D5223A0222B6EA7575057360A700C8F5C3 AE8E10E78779FE0706224F8142A796D092B8CA02843B61C7CDA47C670CEAAC03 86A0383CE9FAE067DE45F5C6A9BE85EE882F1518CDB72A18A0C94A6E5A987202 FA23181A8E60C6DF395C8986EA2FCA431085E15FF8D4016510F5DDBEB4B1D547 5DABAA23F0901FBB45F3C1975B4A92A881F81106693C21036972E80254B9B80F 73C32471B63243FCC9F064E20A9562C814B4640B9E1E626EF67604E61662C61B 6884A6396684C89BA471B63593B792B6DBB58FDBE7C78EA16F0F59D678A8E8A1 A8722F962D39A30A3D5D43D6F41D091D3E76FB2F09A174CF6529E314CB384BD9 1BAD6691681857FF327BE512B840EEF7752DFC9B4E9C9D24246D73F761363625 E17EA530AD96EDE8DB61B82F69412ADC12B62950237A015266AA3D16675BFB02 E4A10519E8CE3617BDC80D8A944E03A510658BE17E214C8701711757DCDF40D9 216E795CBE6FD49584EC9C283B46FDA6FB8B5AEBB16AF72D44C1B6013B7296D1 2ED76223A1BBC4FCB6B27F76DECE9A5AD2EC87A9E31529724B257EAE05ECC299 FBD9A74A3CDF090886870D36683AB5414749C64C12C18B62E9210E6D669A05B0 87506546CBBA07E3C4F89EFD48E998CBD88DC5D8A89FE3896D81038599D9617F 0CB1AD4563715853CE895C0BBBC828C64ABA3DA782497E98B1D086D2C5372FB8 B253D6BB5B75241628C2B011985051DCE5A420F9A637EB6135584245C2E68CCB 74988277B7CCE1D263FEEDB75E96C118E1C5DE81AC27A9DF6C64B12D7378B170 AAB511A8964E0330BA6DC6281D933CE38CAEDBF2F849BA9EF9E5F5097ADA41B8 69142FE488F9EA5C32B7A2ADCBAF3996A48ACE8AF6ED73654480057711F204B4 CCB44EE9B619DAF580B7C688D2057AFC30ECB42C55696909A579A5C519914F3E B69109C4F918F9C3B7D50BA4AFBECA879AB59FD113FD68C674D41DF9FC7F22DE DAB88CAF5CB2A6F40C7DD8E9935AFBDC65DBB395C0BCA2830C4BB6541E356424 273147215B347A57A352DC6D96301A69348E50B83B2E6385D533203A903B0AA1 42F3AE97ED01F19D65E079F28D21D8C392E0C59C28F2B202A1FE4AFC393ED060 C02CA2102BC6886FAB670C74D0B9B17631D8EE7AD3AE12772CCEBC54E906210B 51A7EBB935E6FBD9DEF1C7DC5FD9F1F1A8F65F0D9DC439039F2B360686E22409 42A391EF164308835974BCDC6535FB5F8FF00FEE6E3BC18DBE3BD327D0B84968 5642A259556E2B9456B947C7FE3EFCE2BC1C6D49E9AAABA212AF79445AA46DB6 8A40F8A96967A7508CA2E75081E6B7670471D57D83E2170D195D9B0AB014F4C3 D2C39B853ADCDA46D4253F1168287A45572A109256B9393365E692B73AA40731 FF829870D7D53C664C24DCF163046CDA82B0440291E9A3647EE913F7678B26DC DC6B8E49416BB13CF2A3D726020B5E350AAA08318765F1042D43B72E576C2B61 696875D48F6350A58A6494F9AA20ABE3B162970EEA8E4E0F0654A2B25E69CA01 C185E8B1E1CD63C2533ED9F2D519DDA1DCC303191DCFE0D7644FE7D6089E7EEB 6B916020FD8ADCF18FE57D686BBC77FAFE4A805D6AAAF285D85FC5CEA8FD3768 565FEA37A5ED0341DEE7B66DA13F814849F903E7711850FE9A82920B4CDF73F2 659AE8031B8B3FA3DFEF87E3C0A89A298C9D8BE918437CCB430996D330C0A887 5E15354B9BA1AE9DDD58701EADF469EE5BD7304B903D8CDFD262DBC6EADD979E AFD875E2C5C5D91C8E6000C054E46669971FFC87FC2A4945783D967FCB8B98EA 9400CB69F652B35BB25348DCFAF32F02EF2368C2376C253BC8102FE39375F5FE 60039E31A9E0840021B6AD890CBFBCC7D40D2CB7EC96B869F01A72D0A2199480 2BC99F5B7E841DBC5A750C196ED3562E57C8E59DEE74F5D8887D7DD8ED5999AB 6DDAA1224856908AAA8C981414AFAAEC581BBA886788D39E99124DCA002D76D5 CC8540D34F49D26C86F5B137F2C67C0346477C53F4C1B12B5A3084947D62C804 EC582232888F6087C519FB9E6BA7889CE9109D9D8FF3E4A86BF19472F373E826 96FB4973D3A643C5827265A22683D338F4F262557FD9C2581E53C33A288288B8 143099401B6A41D1B3EE672374369C460F84030FA2D1432D9BC2A9156CCC0CE7 5E0BBDA85E90AEA16D3889FE411CD3AB58906127E82AB1732155D6EDA6DC623C 7C373A52EF9102B38FC5B7AED74F430372A3C009C88095AC41CF32A036CBBC34 F32A7FC871562168B888018D3E68376E9AF66413EC719F80934565D62FB95C3C C53C365EC68B7475234BBD83000CC9D5AC49671888FA54192921DC26FE3BAF38 7E7FDEE33C632774E434B0DFB0ECA68DF0046B6D39102662FF23EE6E447F7CE4 4FEFDE29656EFCF3E06A2B2F2E34C1814CED6EC17668F006AAF347A324147B52 BA871C2909DD21A0A3342F84E552EA71383B3B3552649AA67237971058BF7070 414B0EA69E14CBD1C87F1B7C462B68D4B0D7D7749B0B10BE8DCC9C2CF91FD56D 992D0BEE66895138D01AA3D32D11B00AF7FBB095C662BB6F9FFB9381C0FC8510 3E8814982BEC5D2A3CB35EC82B5D5284B6C65721027132503FD131ADC4EE4D93 7F60F66406774497105F3FA9DD16ED2FA9BD25CFF65C84EF574214518D224AF1 D6F941883133DBEA5CD1A7444374CA8961AB28A4EEE02EC272967FDDCC2124B5 B4A112B4547503C1DC422A71B76C6C80F483D8DDFF09F65754700DCC1302602E EE4DBF9AB20902B619544371E97C9ADFC641E9A482ACE25CD60D4EE345E2E5CF 5C9F749F2903233188A59B9A0F607FC2A3674FF4BC76EB74513C961554771E3B 2982C4A950BE640D89AB01B4A4AD8406A72EDF3DA3071ACB3C47D9997BA993C1 9864651A9891AC1430A892FFE012BBDA36874A2050956D3ED267B5A6F91B47A4 A05D9EC1905518AB7E412D0666437A8EE0755CE50CFC123F367F2175D51C40DC BB440C046BCFEFB786B4C859CD9A9C632316E87B3C1086C572C87F5D87D26AC8 A4AF249328E3F48A9052BF53762B4949D207DE9B6B16A7D525B57DE1F35A3406 C8C083AF6AC9552EE669182FB58C10D03DC3681B087C7C1BBD7F2B7390F654AC E37CA17517FCA3E7C79BF7C52E97FB3554DB147963329642AC5FDE48193236F1 2BCFAF581979D86E6497E8BC0E87A9E4741F85F7DEAC6BB696ACB8BAB015B11E F47386889877C8712CCDB7E11CF7471FFE030E8E74D51329F1A8E84BE1D0C63F 70E5D1C5165E91F0B6329483818E1A1DC9334B047C3D3C6C7E0CE9A8FE195C47 930D3B6647C5FA2CAE45CCA804C12E3D50D1D6242C4F9EE0EE0295BEE876A6EC BE319AFD12F8BC0815B24D8B3E195261A0331676575793E355A4413FAB33E48C ED3D001BBB3B7F78C24C61C8AEC7B89C7369F4B32ADCE3602214B8DB626BD9F3 2D17CF65D3F5F9194A98ECFCC3CEB7970C148813BE1DBA3091956F7B09A7C3EE 56A64419C7A56C1A236BFD24EC0B57C7E1905B35B223620CE795C57444B95EBC B91E390F04E710050D86411D102C8597917B700B876DAED2573D9B03037DA390 B33628FA0F69CA594BEE98EC13413305F9BDFA01BBA1C4903704057BAEB6D4F1 7C0278A93AF43B1E4E41ECFB479E58745D5835B758A4F509C78E9519DB40830A C9EE39A72DDF6552CE33DD86D9C2D93FD0C8B97199C8889E1F495E81757BC2FB D3F629707C56885189CE5FBDDCF347C979A411303B4C4A27ECAF8ED7D477C465 092C4E1E4EF2EAEDBC57D2AADD8A2D41C0B7396589856863F45AC7536A3FB3A3 0B19803CC484E9EE0AE4CE3AF682D4E8C4FA728255D1FAFEBDF81C3D358D91DE DA59C7D90851BA4D43FD37A3E05FECDADDDDBA4C50634C79C473873EE16D957E 1CABA6220A36FDC96AF97FF92F118F16C961D525F8868C9F19D054345DF14473 1D30EEA367C815898D73669C417F23D7932EA8B1FBBE6B3778A6881EE0468884 F04B06B8343255691BDC53B4471F4F5D6A2566F48C7A9E83F21B8054AD22F701 376AF1EB62858691AC5D76C12AB8470047DAD253F6174C9E26E2AF3F51B9BA40 0E8E6FEC3CE578C1DA437811D8D6C73F7A653967A62B7DD828B8AD0E4E1A74D7 2CC4B2375D12E8794FA518658A557DA0E7F2E19E80CD9BA41A408DCE7C2DCF73 CD34D211699ADFA9B95F0841AD19A143373FBD3AE9854127073B22A80BE20C9D EEAE482A9B00415DA425BEBDB740EFFD051CF11888B9FE39D0826FE05237F7D6 DF81687262267437974F2E365AE940C9B9ACC33DEBF824E202FB49426E1800D3 DF3804C137C454B87B5C41E38F6A0E9D6E747C3A5FBB9FA1D6C3FE3274A2C355 937E377FFB3169F189C40C1460A445E43B5876123653F8E77C12C2E47C81195C 9A82821E4FCC91B8F5F2A4E8CC1ABF17348B9921F1D8359EFFAFFDD496138A71 0E7E6FFFA98DACAEE411BF55C54BCADE1DEC075468446B00A1F7FEB38C162569 F8A1700075588C874F55BA86D3390AFCC228888B18FCB649F099E25ACACDB209 8F621959053F3CE39384FBC8977FDC19E4369F72D7D9FF9FA2AD862D35857868 47A82B94566D989F6D0DBD39144EFFA47415C31AD35E85EEB51EE019749E68A1 5516C5BB070B7DEF57AF93B3BE4586C4C12C78577F9A19274B7980F03275EE52 3C1E5F31CDF28C6876074B5CA229BC0C592E6F393348768B939EFD5555D4791E 100FB47B5F072931190C935811A0587BCA86B2EA215B598CB532FF91A4A09B8B 5B8CC5B83520189916D63AF5804A8B600E0AEAF8BAAF221E3D7F8C587258CC61 B70F42B86C1F358CF8737B4FE2FC5C40DB8E737DFDDDE07E444510D9CCA0E074 AEB4E5246C18B4748E042797FF30AA94256CAB02F535E333F96A32C70ED487DD C7697B92AD0F9077A1E1F8CF7D36410C43ED3AC7DEA8197165EBA2BBCDE2D12D 559BAD27D3C565E58361B3FA58135313599FAECAEC2AF8A800C8FAD11236E8E6 0308E8FD76A22830C8D6052059A0F396EF7DE6663EFF745ADB0E3BFAABDBA4C7 0661706273638624FF77BD0FAE75DDE44FBD7237C85691F2D7896CD6ED4FF49B 0C02AF618D7094289664BA76391738B5AAD48AFC703CE9708B53771B1968E176 0F8B247CB93DAE268B1735D85E3272B4C86D5857D46E21C86C2863B858477D70 AB3DA1A98A217E91E7AE2F05F8B524204D00718F18A95C58DEA6C1A12DF387E1 6ACEE0D9D2A1AF34592DF0A8E1233607C31445648DDDA4918EA0AE0C086A8BFE D758AF665054C9CFD417C687AEBA72A3580FDF0CDB13F25EECC3741835CB9239 6ADB94F5E9BCF49D557A285F9BE4C7E164F6EC5A68E7BEC73D6522C4A8E5FF28 18F610D01839983B7077D67C98ADCD063E56C2CBFDB9564CC5EF224B7BA48DD1 776014FF4A96697B40435962AAB4B66ECD132E0BD4A65C8B2E8B994A48A5DA6D BA55B1BCA5B4E4363E9A21FAF41A77E38910704C54D5B8C597A7E175B5750A75 7D2947F3DCE0039A1E926CDFCE3452E0EDC647838FA70E5ED56CF6E596944DA1 3FF8625A80F29B639A5B6A4247316DCCCEC19C5BD369FB96BDEBF1EDEA3F24CC 88DD4F32B83684761A3D54C2010FFF830FB56214665EB0C75A9282AC65B411C7 1D90BCCE84D1861FA31FEFAD30F800C1F058E6ACA6890A711AD3FCCA68ABFC7E EF359BB62D1A813ED77551352E58923DFBBFA8150A8183C31971E0551F269205 FEB760E67C040A1AED8E9BB48DC23696B35B595B9D3ABCA1135E963C89817A1A F8A0CDF3C47FC4A2E83BEB468EAA8FAFADD19E49AE2274D84F44D6ADEDDE45DF 92315DBB5743DAF3CFBE84735E5943691268E487A9D47BCCD397A6AC740A6CA5 2894FEE261114AA26C8430E357FAF31F8AA5FC369BA58446162C56456E1CE41C 91BE6E2E4FB29F9F0495ACD5901E27576F2226FA095B85D948C6E91ECFF204F4 698412F3F2A7631097F9D27D0AC133D5E8C7D20EEF6B20C7DBDDEF7EF90B9F2B 17E4A6FA4DBD1BAAE1F8972D58370EF8400DEC0CF5AA8DB06006D8411083CCE4 ACA28C7500E1A79332D25EDCFBCAC250A8DBAECFFC56FB07ACD7616B76F6CCBB 6E79E670BE5EF317EB0EE6BA437A5FEAC6152D1BC1D9E5BFD137D24B62D4C069 A83C0ABC88BF25678416D3DB71A098E3E1CB4A984B8B5109388BCF8C4363ADF2 4C0B8583284DE777D5587855709D9B95B8C8CABDA72C46083DD427291D6B3172 DACFFAAD8A20977F83F241C76CE0F61159ECF7433CB6F72C39C6EB5B2FDB3993 0C869789240FA9A418709BB9B75491D0EA09B2ADB9E2C04DDC78743BE8883485 CBC978F01D95E18A8604A68E2F9F4EEC9A543D55728AAF454A80E03FB995AF95 C8D2B29515F1A5964741CC36FDC2B505526B6402A8946B5CB48D71936D00B3F3 EC25CE1D1826A81AA9CED847B8292F7717341D1467ABDBD2860BD9C58AE0C183 C189D4C783E0CC0001AA712B94946FA65FE3E6E73EFB4ACC19EF51F578995A06 FFFEB717E1C7A2D095888F2150942CB5359307887019A6F6EABEBCBD6E028AEB EE5358B27C5FE628966EFEBA860123B5A3A5D025B3C0CA9868A1B44C402E14CF CF5B1054897CE7E4210D59F3301BCF1C36686CC89A51F23CA4A17C4C5B7D976D 01E3122226CC35CA008E2F182273F524EBB597F74316A44448889C3FD2A4EABF FC4BDFC415F9E00B42B23F70B745DF10BD7E3A14EDF9FC97EC80E3F2246A1242 09C0ADA55249C21358CAFB513CAC78C822E8CC69747A910AF65A3D1C0E149ED1 8C2E83519FD53A3CD1031282DDCE36303488873CAC2EF4E6CD91F89F3B79E469 C883397F0D03F38FBB2040AEB4EAA2F894EEB770D4DA08894328F6ED8A047490 247BD7E8A73246254786A2BDA17E228684245FB7211391FABA84BB8250CDD373 BFEC712F31E4FA5BFF0F354F9D7167199808D28C1F123C617A930555BB4E30E1 2AECD486887A3DDDE8D7B5368CFA9EE5F4BA43FB3BF78927663457F84721CA21 17FF707D08E8CB6E0D05860EC1EBDEB458F15FD4ACCBCC5B0BB096419931271B DF7C0FB0552C4E149D21867DDE7BC9EB6F3B064DB2C2554A3EB20DC1C037EAC8 5D6C54AB46C97BE18E2BBD338D820629860F8F0D7B724890792191399982DBE5 E6038988C4B681234BC20B627933F35C7A4DF6CF3D41A91B12CD347088DAF7CA 65CDBD1652692D13A6DE61E81A475CA868E24E1F524B96C9FF647B7786FBA83E BF1660FBB1C07CD2489827431CE23404FE8B141AACB332ACE36DE5E4777A22AB 45E4ACE75FDE08E5F0495F54931E7414A484EFBEBCC254ECB86AAFC34F11AB9E 5E1B0EDB51BA68CEC1DAEF07DC56306C9A380357B985944DFB7B8F26A6B800F0 E1EAA42507A3E92ABD042E8A6581628DF6880BBB4492981F376ABCA05864CC43 E803599104CA1856ED45B7BF488C676C2F691F886AA19C2FE167C8C1E8FD3D60 FBA42C80BC1BFBAFB99D44C5B9E5F97A2D14B70C9CBDE536A4A2F3D4ADDEA79A 25E0878ADDEFEA41B5B0F1EBAE97DECA5EA259B302C625A4E2499451DA1B5DE0 DCE87C4EE92BA8BCF2FA8CB946ECA1EC896A4DA24B701F192625A417E9913E78 0E17B49FE73B330B40E90D6E9F176C5D38A4FB25E4781987D2AE549B54339095 39D77AE10E5A5CCC62518809FB83E46792F998FCF85962033BA9C3ACAAC68119 069C5133FC0420BDE8F556639835BD516EDF5637E3579234C4326B22E79C204E 5A3BDB0C7182055A76A91713A7D6370DA29484125E6E7599197950B800A0DCE4 DCE1C53A042FD49815B55128D5B8F7167D2BEE1CF8BD2D6CD8DDC5CA41C37F3D F74944897574F2C17693977E2EBAFCFF9B79B45D22D7082BD270F80611706265 87FCCA8C828165677F07D52B8DBB65C17A4A8D2D6C599C3850BAA90305E475B5 21F17A1B8CF7D488E98311474BF2059142660F1BF495CE0D9411A5C48C653032 4319F0E4D1D96D845AD3C00BF2A762E376B5CEFC07B9B18A43D92D165B69FCAE 3F0AF1FAF71421831AC726DD04054CD4ACA1A1E0019692EF22F0F29E2E3B55E2 0083087EBFDBAB159BE0451775A93373408CB39AC00F7086BCB44F0AB3712E42 CAA87E1441D16D23B9FA9A35B2269F58CAE2555DC65D924795F16FA2282AE43C E6A455D0381391C77C75B2A14CFE13587BD72F717319D108E0CF14A29DEAE733 B3BDCAE02025BA37B2E8F391FFA9FBC6B67FAEEF18737CF8B319C8E4709AEDD7 AF4F58C2622E2F201FB039D81A2213995E318DE9540E6F4897F82A7BADB3DDBD FF4FD91072E0730DD629C772CA236059826C8A87DFA4C5122C5594C99411A918 38A731ED83373977094ECE80982E630FE1CE53BBE89CED634B6C0A6E9F3C9D71 8B1AD51BF6A349F591C655F24E3311866E7EC48AACCEDF87DF5CB15C8328E686 6CE267808C89E5DAD7A18C9F1244D6D3F2DE7A2FA58E327F7CA5D3FEC4C57DFF 1F2441AE59957380A3E9C27A5A9BAC50F61683A0F1691BA9394DECE6CBE2BCA6 6F6A39F9A6253550B3BA9BAAAB69356360F6ED768BD87C18FAFC0565FAB0C97B 6692C861B1C56BB00525558AE26A5586B408498E14ADD09F5D6F68D3C2CFFFFB 7FFF05A1E58CADA0D8EE840216771DE0254D8D9C6699EB6043C2600B8EB4BD65 7A3FC78A45FDF52D0C18E79241DC4E7DFA7A6E3A4DD40867C8AD2C9577761601 A5310F9CD618FEC6A56911C76425C9F01A8083D375A999A812E7FE91C693206F 35A7150F85963A6E88D0DDE8C65DEFE7D6DDD8101742B22870A2B4626DE9D700 20F560E69EF3D0DD6BE2E1A4D52E2051CB5B648C11DD4C46F4DEC4AE1BFE6F4E 711B427161917B78006FB604158A4E418B6677969E8CD20FAA332A89EA30B2E7 833C19A2AA9C27D3A0FB35C933BF941556EB7A28B520990030517D07FA3C5A15 3C138AAF829E96C9E628F5B2D12750CAC45DFA5D2ED2B891CED3FDC2869B4AA3 998596896284612A6CF6D5437DFA18CDF3AA6603E7BE95D2B9E8C0582372786F BC5C6CB2ECB6A0AAFE71C67ACF038DC21D6F938A9229349EC73456BA1D05A178 75ED2A8A3490A858875C4F258CF6AF8AFC64003F248F70C711EF89A567C88217 7778CCA69565591761897CC75B9CE486FEBC38055E9C5994CDAF04646EFF25E2 4740C6247DB59B116461CDFE743A7C36E96232D94702DE34E8CB267F5C378C53 A19F4B6AB700A5D75F886DE3B920BF5ED4A0CB4FF32A095BF7124970DF0F1556 1DB3C1612B69F69C2DFA838648C376E0389EBE359D621E90E7A0F1098AD309DA D2AAE95D92859D6B5E02DACEFEDF67929F434AFB86741E77B095CA4BABF3AA36 39746785BDA94F4437820BBCE344480B89B7E1205E7DC5C2B8AEDAD72691C296 6D5C0A49ED41BD0C81A4E262DEC5D4B52FA92ADDF91128150C6056AD18B835A4 721396180F0A442715CCD54EB4CC393DABC00C2CB1F244D8F02E69514A7B9426 B894A2B9A423ABF95C57826FE43F7CCD583459C454FD946D9CB7916D992571BD 61419D5DE0588F438F98E182E472DBD90378CFF2173BA23DFABB0D430E9B88D1 0B180780C6E49DA32EBBB560ED17BAE109EF91A08885CD6A7357A97BED282299 7ABD6F710DD0737152B7410A0EF4DC8B6C5A3AF0FED475B969EC93547B1D935F 14DB74A2A5E54F7ABDAC568FC872F661A52275A876C7772F827ECC88A7108602 86B41EDC3FB2B45FFBAAEF0D022551FCA3FC96F2A5A7915ADCF72D3E8BE3AA30 36BB45FC34D301E125A9848FAAA03EC63E72183D46FC81A98143023AB42F4307 6E67E1598D340E168AAC61BAC409B696FBAB719929EA6EF6825ACC553835B0F9 819FE16C5281AACE78EB971D7CB405A7593334F55966007A2496036E4DE4CA36 0B6C212EF19CB7212E3958454E53ED398E7526E38059D9DF2E45DC798383E954 8227436DB527C2B910A38A3388593FD61E5A0DC91D70CCC980456EF435462ACE 7550A9CE32511E593F0C04F4987ABE6338C1AECC97E762D20DCF7783C70FB457 F5960FCFD70A6E70C3DC92CA881F4FA1999AAA5D953A7ED4F4E5C268F06539E6 2B3F91A7E1C2774847B2594731D22AFA0490C734858C230E96CDE3EE4091B682 69EFFEE3D0643DC3BCEE495E1BEC7594ACA76D558787C9050285BC29E9ABFEE3 3E665639EACEA0D3C9B11F89A33FAA0EBE1442421C9DEB85F08CFFCDB0088497 882139D7DFA26A0191767EDD1B2C01B019DDB5E25B2149B87826D4AA009ADD63 8380E2C2B957F9BA4B7AA9DA2FE36D79575963C337C089A0E10B4B25CF791FCF F9A6DB789A4E4FCF6670AE80B96A9C9441A3EC886700533C65E1151AA95346B0 84AFA2F20C0CFD2E1A03CF860EE1224002B32DB97EAFD2030615E4642B274C54 35C7812799C7E25BB21CF245A75CD98630724AAAF5B10E17310333E44B6F4308 24DBF847224A8747B9056AD4C2BD39FB0E6570D24DC73875E2564166EEA7A836 1B250FA140793E5CAA93878B7621BAD178890DF0D1F855EDCB23F6FBBFDCA97C C236241FE7B23FEC72E7F0271B594896D377CD1B2B1990B5B057AA3AE9D82F4D 144DB031B3B46DE2251727AC92338E89A1D0CF865F4F1D671B098288494F67B7 47029AA0B5CC97416418B47CD91A7624288F203B39A3D233DAA8FD8CF6AEC700 0B0D5A241BFDC87D610F9E3F57B43BFF76878592D866D818BD54B1FB3859DEA7 4F9008C7876B06538497CF7B02B33EDE6BEB01A4BF8B6D4B69484FD746616BCB 741845A40DE2530AF72F458B3D225726761F4D258EAAC39BE1C01F74A99B9961 63E56362131FF62680BCC4BD4AD9C56F527185C7F6EE72B645AA767E6B536D56 4F38531CBFEDCC3C629E06439E4E2D77125147CA7ECF0140FD5E86DD2DF90802 E973ED144EB3AE563D56A37AF416A56553F3E1709CF5D2E747E2F1EEBCB7D542 B2BA9027BBC2894722275BD316A15E79A4F9BEE62412DCBF5E11AD5A19D56EF1 951CB93926E54DD5C40A1DE27DCB7F39511B19FC7E1CDD06CBE615133665399A BDE7E15E5F472342E842DEDA093D9BF33AABC7DAF5A178489D3044108644408E A96923E209CF1A47AFF57B292DA4631CBABF2032798DF19DF7CAE82D6B82FD40 31838DCB03B807EBA89D3DE2ED7712EB6899EB3285669DE79ACD417CAD8B5D92 324B0221B9FF40C2DD36200ED6B8BD94ED888F0324BB6FD46DF38F8F520F3850 EDC06E5FF85B3BDC265C0FF0A33297A76AE58055487D8A5C943F807046B0A19F 3FA0D3A4128376428380CF84E15DC0278CB791DE6744E13FCCD8B0BAB2ECE8E3 9504B8C758EB03E08A0E13500EB023360213070078CB64A0468D3F2732DCA07D 5BA496908738A9244E11D91702246A86A4BEFDD9D8B805562BBA53DCC9CD84B7 DF7C173D0BDDED44C2F6DAC2A9D381DCE25E9C6BFA6EEA4EA9E6FA350C3FE659 A868B093E11BFB7CC4BBFA283FE33BF9E4931A430DD1CA062977874A89E94BFD EB0208AD2DE1B135DA44125D04CFB3D625A8F7F18383EAAF4A4C83A1E016DF66 983E485F2F9286C732E8279E92B0625F0DF42AB8C12D496CA98B5A9EB4EA1404 4B9131D667B50C2627BEA05930421A24DBE9BE7EB9FC8C75FDEC0B6A76F267AF 5E5A48D7057CDB28AF872D994CAA9BAD27AF42781AADC77E3FC9F47A8E6A3A2B FA814F041CD8E3454CA06EBB4DA4AEBA211A64CA8EBE3C97C333AD9975DE28F6 663DA29B86E063C8B6F0441CD7E52A6ADE1EE666F625385F99846C0C2444855C 50F31515D8191874935CEDA79F1C5893D5CAE302BBC4A09A9D33176F890D7A65 BCDD08E84A3EF132EFB49EFD1853DF3BDB6EFED2864233DE250E77CB3E91EA3D F5B64C81FD8B4B1355E638DAD0770AC0EAA8C22EC6DEE45466B338A94BB3EEA7 564026C6A4FB6A3DDE901FAD9A2DBCA2789E183F4B4A43C21E039CC4EFE02A54 09803219E17AFE0087206319D5880E4866D7AB4BB7911EE3E1BFF5193BFC7740 519C60E70C1245B1A028396FA2E662DA017D52D05813516983F84FE54269D193 8B57144CBEE5EA5D73A584AB03494BF75E70DDD40506EC871DE7D07319F072AB C04B433C51515C6150ADA86BB2B5D03B1950B25EEE416F167EC1B5E351039E2B D4B46B1697F4B4B70660489927102768D5FB541810EB355EF309D63E3A05D2F8 724BC9799F9F61E89836876568650967D10DECEAE3E33CA1FE10146325F596DE AE2F8ED5157882BE6417B34D18F1EAC604C6259F736D2395B43095E4582FEB0F A2290F19AFA408F9AA6DA8298519B0DC8A796914E52ACD6C903FD076A072B8FC 10B72C3D58C90DC6F1E8D328A53406D6B7319BC63477ECA12F874B1F762314A5 74CDBA64422DBEBBBA6218DD863F43565C399744517C1DAD52C3F8B5FAB1315D 68913D7494F57A135CEC873610AB0F7C2270DE3E5B3027C7F53CAB6D4CDCC063 F0135BE6CBA3BD3E84A6E200DD31748583388BBC8480151FF7EEBC011F7E1AE0 4D1E2FAB58AFBD9C47A647D5807DBE045A58B8866E6AA49E54CD901A8D73C3F7 91B378ED0C40F0792B732E0275462193580C3308818C40D719FD508BBBBB739B 78943566BA004E7D1BD733B60395D7AF2D3FFBF164632E1A1C9ED3544F371B65 2B27309C373307606E677AC4586D517CA58ACE072E71795F19B9E114F09FF5FA E34C716B1BA770F5952E40D373DBA3E29DBCF4765A6C78990F6F292F950C6A07 C119FC282DB4ED08DB3A5335B5A41C01FD404D6B8D78D997AF70526CF070783B C4468C287C5C17DAAD943D10C16A79545CCA10AA4D387EC91A4077B1D9BD091C 3733540228E37E8E0CEBAA1FEAB6B523A166823F649C8C500AD5105390B85C5C 4CDBF063EB7D9029AF46318D03424628816E072CFB9DA95720C8780FE3D05C0A DB1AC2FAEB6999EE7C450E521EA5C905FE26A2B1CBCD48FB4619F3DCC8C23739 657457BFFB8B11B64B700623A8BCB5AF8CA5AD74C16495EF792173218A4375C3 481CA71A01A2691D658E89ACA14F061FE21C145B2BF9B2C135AC06A958DB2C0F 006FE5846745F219F80FC695D56BE70B392670BD2806A79E58E2018A4F0BFA18 BD0969F23D5F3AE83DCC4B3F96ED9625BAD31EAAF6E791C0BA552882F11A6A22 55D85857292CDB83B4F7B9A6BA762BB1B2AD0DB6AD8396E309B8D626DFBA7BE5 9654CBB1BEF53E04C9DA0A7C0AE379A39FCDA651A72B14D9DCAE327FDD072A1B A42612D2AA7F8A6C9AEAD25805F736696531EDB5A9081EC3E90AF2818951D37F DD917FCCA7ADBF086EA835F94FA793DA52D3C786B6DA15095B756ABFDF5AC335 FF77E747019C997A04BFF1E709FA8C481C1D68CA452017F2AE1B52D1C6832ECE CCC6463B2AD062AE3A45E7F2B7D512CEE96372D1AE2DE7FB059DE537C8AC1FD6 3556257994EE7321FF6C3062B592BDBD6E65A2A8A4088873EF110EE35C269FD4 E30E7FA6A63D01BD5E002F18FA7F919217824A063723DF0F5C43B28D7926A413 49F39F1E56264B8E31F7508E1D2144DC26BB6FF6DE6C54A8697048BE36522CD8 AC2E5B2C935AC91B8BF5E77EF07EE119292A9A8556227A0B54D8B1C272F04DA1 0D81C9F2FFB4C21EDA35E062956E14C88989E021A78BA4AF9D712040D7189A85 E7EB0AB51334E1882CCE44BEE97B9113D07F248D327EA9E116C1CDA2CD272416 135DCBFB77397CF17E4D4A7604DE83E0EDB210650D38101C1B711266069A9842 611A4FD6FFFECE5208DCED926C76420DCAA997ECF11FF3382A96DCCD098787D3 E1634868503CEE909BCC3F6EAADDBD68933CD71EFB58D0365ABCAD3A2C07ACB8 FC0E0D14AF68DC977781D4564C7E635902951DDA8BF6690605C2B63BDF899AE8 AF138777F5300B3412E2B4391590B62AE809888263D97B29380FCA3E1ABE29C9 DCA35802C332E18A7E682F558EBC53DAB842EEAF371FEEE23FF93FA84C61C9E7 927C574F397DC9C0B87398328F7BD2E8A038FA2746ED72578CC7461CAD133051 B333F33421FE6847F54AFE3A7BCD595F9BD8D5332D83E81D714AB0EB1B914618 387F1CC2F20381D8EC727AF152D4C8E26C889C6B00BDF6DC10D57DF1E0F5442E 0E8B0D4E8FF3830E67A5C05887ED99331572A50FDCB25C33957EE377C058D029 9E0F6DAD7A21A8518EA179A181447B64264761FFB9E45365EEEF8C0DF6CD74FC 30B79ACD2040752BF94A9890FB6C07B8E42A9632B093834F7EFBE0283AD1ADBC 1BA9BB5B071A8F3B39E7F66DB8BAD741158C95DB04AF96E7BA0C43A2EF7844F2 F6806CFABBCC68043A53998861578C3FBF90AFD09E2C4B779D8F4652B2087ECF D7368407DA148F6B649210CC20CD858E68C6A9667DD8B8D730D16D4E212C0E49 78917E38F22B5C32F6C4A91ED4F9CE559514DD447DF94F91DEE88CF1A85EBACB 1F54F663BC730DE25879A5B09A9840B83CE8774A9D85983CDBF37785E96D7921 B456919FA7A5302C4B815F4D41EA7F65D44137C8660D367866775C71AC63ED5A C20F4EC4FDF856DF02CE4E9E4DE5384F032FC1BE9149AF755F6EAB1B39D0363A 06E13A7BD3D0B7A435EA12AFEF6B087B274178A87CC33E2956BF9A6D8C263A7B B935C2F3C1443093D7F00BB1C95A64FF455D0C007032A8BB42F8C508AD706414 B0832EA22C48D9CB54DF0CC425A9FDF4CC21C29EE772AA3E6F0D95BA5A5C1648 EF731D8D5DE44919B23F306C80EAE5D21F33D7D3E199C0B873303A427ABE7BD3 6B022175D2C0D74A65B028B16502ACE31240C012211E2122F3E90AA5630F19C1 90FDB376388B47C578E09B12A8AFA3F9E6FD079CD9116485D6E053E51E9FE5D6 0200357664FD0161D3B692701AE91460CE2FB771FE417601685C3CC1B6CDEB55 3C59DD80CA2EB0DAE023AFE9B653D332B6ACF9831D561502B00D83673251D2DE 495B75D0FF 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /UniqueID 5087385 def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 16 /zeta put dup 24 /xi put dup 27 /sigma put dup 30 /phi put dup 34 /epsilon put dup 58 /period put dup 59 /comma put dup 60 /less put dup 61 /slash put dup 62 /greater put dup 64 /partialdiff put dup 65 /A put dup 66 /B put dup 70 /F put dup 71 /G put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9042537872831BF5F1F340A 8D3E6DEA1D9675E87B3425FAA0172DBEFD7C28E30906B9FBA65517C9B58FB6BD E0D474E69BB90B0D130A32C4130974A1C961CF064A5BE8EC1056858553FFCF7C 0D78627BDE04E5D0B9F6F72F92B61A915DFF7AFE7DC3807891D039AECEAC3F50 0A09579E661D3DC3022206061E0250B09A05CF198DF82D4F28FCD3671E815A6D 94820D0C87AB1DCEC251605D9490BC465D8A62C95B7352250D76D9FF1D3D5A32 9690780A5B56F9BA2083B29AAEA996FA95246D55AE88B0D3F6F307959251AFD9 82650287B5A98758C8FF3A60C40CBE3445ECB497F3E04C98DD52DCDB2F632D5E FB5654C417A12EEEF2DB5F0CC54A379DA75BB9DEAB9FD9F256C1B832D55382E1 22A7DFDC37044BF0CC2CBCC4405D8A3495F4886001D615E1737FD9877EA3EB51 823C2FA1940BD8BD802C34BD648B41E268B825129BB13543961334C69DDD8407 97E868B79C83752682CB506FC1C801F63AE7B3B8D7EFD23C54232AA97FA8B2ED EF2AE0382B4ECC8B24CFC62F698F8BBC90215BEAA8446BE6D261E30DCBEE8CE7 6BF8D0E51BE2597E8086F27D4C58573A26B9AEEFA95BC2DDBD5AEFFA596C7F7C BEBF0967B74CBB3D5AE7B9C01D1484D908C8A610D9002E9FA95CE40F5EC70BD0 1FCB5B5A7926A873D7BD1ECF175AD1CB8B89724ED66820FA474EDA6DB08AF4D8 B20DA215187A5DAD5E5C5D482087EAE8CB411D4559A61C32B18A980A982B1A90 69E998A86E7A90DCA7EDCB6E92CE731D779EF776A8CFBD7F42CA433769314203 2BEFD3BD81AD0032E429A393F618C60CC956D67A705B84A1FD65686BBCE74E5F 9C8F83765CAA8C09A6B117B8DF8986BA1BC5DAD807478E0DD4CC7DC081A1BBF9 07B2740ECBEEBCD9303A7DB63F4D0FD8DD35D5EC09719311AAE537CA68C331F8 C8BCA7BC4634D927EF15528AAB1ABE7228BC1EDA8EAF451E0D9BFE5C2E55647B 01608444122B8529E031C5F37B8B45B49B1FE24DF4D54DE7A995A54BDFA530B2 578118918F976E0E7FDC6D8793BCE5C8D00B82325D1E64CCB98039D51B2C03FC B5A3D2BF6ED9CB9E825C23CCAF0EDB88FBA41CB4CFDFE27527564746C1398BD4 5D35B5B9747B6A8EB1C654DCBEDBA6F94E55371A11E14920A9DA117C87E452E7 61E1AA2012F307EC553428F8C1096D83CA7B7256395D2CA26BD1E7576D064BFC 9DFABB3ABFD134EBA8D8FA7BF67CC2C29A0C1F6A2CD56641CE75444A117A7579 04292A9EF85F23C5257723B5485FB5108EC10351D2F51B9BDE7A3F8759E479DE 998374098DE3816934544A7CC811EE839ED626E7088441B9AD94E4F55696F570 1ED454012AD9623183A5A43DC271E6453B04575CB26046C6E0F6409C4165C1FB CB7C25669C2543121934F744B273EAF3EB0754361754F28132480637E6823BF3 426C814E47CADA882F9DCF713A81A8BF865655D7122B33BA443C02FA00598CC2 0749F3A72610E19426AF4278F2B0CB54EB9B7313062D1ECC9FCCFE9086F647A4 A23BC6FB3E22AA931E7A82D38F18404C1B86D944B01D48151D355C68DE0BCC8D BE69AC2E35BA03EADDD0E8B4ABD8CEF5E47B8B093594EAAB851808FA65D21C48 71DEE026F46F752CCC0DDC69A5663F1DBEDBCDC9D37E877A069A581E37C09CAA 4965D3A6B8B14C8D60323B3761E30DF6778BF19EB9223F4AACC1D91A133F430B 5E72F71016F5F80AF44738FB7DA45FDD6D846CFB658E23E7C07DECC3A026D3E9 F0D465F395930D88A5F7313603F3DA8915BE6B54921466A8AEAA120FD43F883E 1C794B9D893F821BD80B149696C1D784BBE329FF1CEA534BA2AE9CF29C04F66F 33F191AB39F901341C4806851018C0F6A25DFFEE1EFC12F6584FCCA014E493EA D0F58CBD60F9DFBDF2260CEF73B12DF7BD2CDDD3018A491EDBDB63C36B50DE86 C5FF0D6761237FC6E5443B2F1CBE8750D8027F1EF3E1FA8EF08F93B4D37A98CD A473542AF579F1E517BE9542AAA24CD15432E05002196F048B759D7634D25D46 7AEFA61CAA3E1FD2882968D82DD14CA941953CCCFEA67A5C74CE3BFDD794345E 53D073E89803E08064DE126DBDD5AC48DBFC4D8113465B93A2F09FF15535C86E 70B8FEECE714A01893AE34C52B853AAB6D9FDACB598BCF91CBAACEC3AA943B64 659A45147D8920FBA981C36D9DB5B0803BD451225FADB2F8EFFBF6775797AB3C 180A7B3C73112812BA74359A6EC8793DD9DF32F20E663BD07B40822E83D62301 F0B0B683D1382278C7D630C95857EE996FB580A2A04EB4C18D11A899264F3218 73AFCD093B446A49C9AC7D180CC6F0D1CD046991DA5A2F452AF85354E80EC046 6FF8F6E642613A52ECBE765FE4A161740FC23BEA9A4F2312EC701C2ABF5DE991 3FEF750358E8B2FAB47C53A24F3D6E28F94E80158173ECBFC813096F98A706B0 09B0CBEF0925353668B5FC6782C2DB0937949A56A7F0D914222ECC956D06AB11 A7670ECA95D4212F2A2D7020A37815A2FE2232EAC6AC718707C390D7E9CC2517 DAA5EDAD4BAFBB78C8DC0B8878EB68063CA8C6C9682618ED0C61A5AB2BDA174A F1FE21BDF34DFA53C6A887F5C7DF25C61FD5E78CBFE7A625E51A8C06401D7D56 B6DD8EFF96E5B5CE9487D6F163385E09D314E4226B58A0FE397A05F0E4D9E1CF 1F15356833D2EA7FE07B14F380C13D3F2F5F797D8B1074416291627698473326 827B1360B506E948C9AFB4C1A4B046F28FD5C3640E1B65B5392F5D49881BF0CC 8B22F37E950B648E2181971710B442DDE6F828123279BB8B41C8F059D6955558 AD17F0AB707E9579B0476313CBD38FCC2E8A508CBA41035ABBBAE90C33229F9B 620C8E03B1D60981A0755D68B75274E9AE8CC1C49E467E5604911B96C58733C9 1248309405BBF49D6C8C61CE2C392825B5FE4484B89C0387B4826C6FB6D53C40 B77D585EE00EB978BDA5D5A0E8D760D3FC0AA425A0E35F19749597F5A44F59AD 1786550E205960BCD97F66A7014986E00D2C3B61B4FFB07C77332D1F00C2BEC2 886E31E56825E5C221D62C8BE06358E0BBD55361529DD83BCA0D67FCA8C261C5 142E8AF509078E11A0B5438420F42E260D2D52DEB709A8714C5D3CB8E3267848 5F8F5DF3E5E73D24538474BEE25DC7DA72789DE620DCF234A60A384E6BC12A9E 90216C3655010455FF0FB6A4ADE6D61745A045E7394F24821ADAED408F439346 99320CEB417B117D9058941E0DCD59FC9EC9FD2E6666420AFB09D64CCA060151 8DDE1CFE2B8A2AA2270543D442F89562362169AABEB3FCD7D95B74194F5C955A 0E6E1CF675F16D7266DF7C975B9F350FB85AF36CAA0734ED8571CDA3777CD099 A78D647E0028A8C746438125E41D8CEF1BBEBD856DF7D896E950622740E00A7C 8D66BEAC3493F441E44C35C1271A5F3EC95B0C67C1C3D29A868A35331DD180F0 76549E81F4F990193A6F42B364AA12F892A2242DBE76C2651C409F5AFFE99763 9E6007B43CCBC90D9F24137EF72C232CC1F1BDBB8978CCCA41EF25F59720A2F9 6C5564E476E2E4FA0C0AF0A9476359912D7451E2FA4ADBD6536EE215F8F225A3 A6F32CFDD5A106A7FECC5581DC5457498A9F829DD7A0F482E9DFB8AA5930A091 3BCF14E3C3C86B1258EEFA45DB4C4A592380872A095B33683058BA5AF39B237C 53D39FD64353CECEA753E4AAC7D29396C9095F999517A553109F50C4B239E85C BEBEC6FF4778CE2439E7DEDF36079354AD95D10F9DF99B96D0B1AB7710148502 4820F68221ABA28A947F4557CD0686DE515C4B1AB65E266F99234E17963B5C1C FA8D99F0B67E93CDBA3437191C421667206D9940EF9148428D2FBA1BB3E0EF4B 18833EA73A15F3095DB044E0FD2469C8CDD9AD334AAA4BC366C0D142CE79481E 56DE3EB26477A2E2137E84DCD1FA7BA926A24BE7FA1ED52404B82C5650B3188D 73A1B630138C9B03ED2FFFF2DE2F2AC33C5C153D5561E42FF0536856EC665359 8BCE3B3FC1B9DDDD56288375898F5B031E3B1FBD7AA5006ABBBB632BAF64D604 6A5A00A6479F06763EF1257D5F8875A290471E9B129A94D13FCB2C961C5F7789 E9F269A4F19F5D94D2CAF09F80FA7D883E32444D6D738F5A0B25242C25136E5E DF615ECFF1A2AE53599696659612842B751C090F26D25AA24450FA685534EC76 1E9B2E644A6798F3FB418D6E4A53B6DE9940FC7956B8463F31A972D456E454F1 4D5DBCB3AC578EFAB4D65E6CC47DF4ABAEE04B182418EDF96D8BFFC2056F3B87 D1AFF63440371FD890382CC409F14A0A3E623D9B903DB29610670619996429BA 6DC7AC3BB12C5968B6F43E97C9D6986008B31EFB6AF1DB0BC280F20C129CAA19 CF63237C4160E0F97D9C29E03AE3816513986EA2CFD21DA8F917F50F81BC6582 78E4FC44F709225F87CE1C81F359EE333626F0B2CF2431863B437DF11B0DC51B 1FBACC32FD9E0635A17A24E23A5AD8EE254A0827DEB0A7ED6F6C3C986FF92BCD C6A02B5F8879DEA7359BE4250835C7773C7FD9F448792C6FC18BC6DF3FF52026 0B59BE4EED00F489330A0AA99FA784B140494E1A1D4C9A46CCDF0A61B5268D20 1F6C3A95D0FE93BA703BBF0C12F88B56E666080EB8A154A7EAD47AC19ECCE9EB 3ED938AF121E528A0706906CEE15A5DAD48B9E7B251E2C89F07909DB919497AA 543285578E8C08B015BBB8C24CB89B8507F58A43DCF1431E67D80442D5BAD66F AB1B33B9E11266716571698B8E35E397110F79D73A9206A3F4D041DACEFB5C76 812D7B18901B5A3D880F966EDB91FC230EF85CEC6294D1EC40E253AC2C60F1D6 43D18397587EE9DEDF4DBB50CC08DFF177471F7FC6BF02059610816CC813286B 59DE7C73D0D0FD16549EB6BD0C37F950819F4C613618030A06FF1122D029267A A84BB12A39DCC74D21DF306BCD6A8B36458F2825E7EF13B46D1A62171F18491D E1A566A316D41161EBA92D2CF5F7594061A0AA44A2EE0024A65EB340491CB19E 0E92C20F00732C4CC82DA381FFD6ADC0B2D36E4CFA5F534C609BCB49518E5027 CFDAF614276CCFC12C648BF82DB65349F1A5EAB1A7A1071CCC95F1E9EC96D560 E43C52C9A7336B6F27A6704CB094F12D5FE705C06939147BE6BA82373BB4D143 0454FEF9B5586168CCCCDC1624F0F13055B93F99BB684B74369F2FC5353C40E9 D7D6CCD274766D6E24A83E7A923ACDE86A348969E08CB00AEDB52AA426C6D6FE AA6C4B0C0A8429DCD99F43E43946FC6491ABD5973EEE3DC81AD51ED2F4387D8D F1BFDC7A521DB05D3D045AF67BDA09C03B67972C1841A484D4ACD5064322FF0A 0D07A460BC683D634F1B085D3A1D5D81B7B605357F60A18B6DD7ACDAF64A20B9 E669A5AD48D3B089652BF483AB85E875A5E0E332D9EEA7F80DA457A36A1D92A2 6658012D0779E3DD0D85D88465B8B5FC7BF0117C556C692D9FBD4251A962BBB3 4B58865CDFCF46F3E5725730F41531DA2EEF26AD0397AACB2694D766B4FE8758 06644B9A8698F846774CE02C305F47F22B712AE998715CE75A0D708E9EB80051 FC4B4399B86B7AEC4E9B1E6559B311D6366C78604FC170011DE4B347E6B130EE E8C175C47020A6B0CE449841C63F4B751E5CD68D6E4CDB4BEF176BC049B4E01E B8AB5513D66C9883AF5D14D35EAC9BECE4E69543CB847907D26E2EF75D14DE62 C03726099314133A7F8FD9AAFBC439B4F487DC9237CA51AC6DAAFEF570EA287C 4AB1DBD5469CFF9A753D33CA17F46AF821D265AC43E039FC2EC77F11931B1AE3 53BDE388014089DCB9A32E7704AD3B3998A60EE5C4366B167B04E1DD1792F4BA F389CB0058286AD789DDBA6DDA12117819AF548CC2786A319DD5E6BDBD828960 AC299C4AFDD78D04E0267097658B05C8FB67F252CA1B2CD946BED2E69515796C 2090C8ED7A83EE3F61462982365097BDB7239ABA7B58BF376C096A93201FB7D5 071231048C47D6E8884BEAB7538727807BB7545233CA1FF284740BD61603529A B247C805824C1A9739B066E3F2299B994F463314408EE7B19001BE15AFBA1AEB 4F9C8C92B93E5A6828192EC964D7125F89A80CB63B8E46E5A41ACA3E1AE6BD63 433D0A9A7FF4F91566D66BD64729E8002E4507A11655847F3887B30332C4A498 893BB3598D213613A40E29C8A5CD82230EC071BCE19DFEF17D5E72DFD7AEB2BC 273168FE347A38E206BE92AFE0CA0A24CD6E0E8BCEA81205B773BE561A2FE0F9 38B6EA2A06642B888F534BB197A5CADB8A63644F45E99420BAB138ABCF88E9C5 7C5FF1FF02E2863AC3E583A424CACA9177234341C15296BE3EB4E2B1B8CC5577 F4C66C1E0328FF0F2F90641484396531E87A69CAE739710B42863A309344CCF3 9235E3AEA28B65341E9606399BEB5F9264D97CB7FD89A0EC76BCE1E90022F8B9 E04287E45E0163A8CC7C04BB9DCB1895967A963439CA3ACA9D628F3ED40A86A2 FD478691EDA841D281762E0F0308B77C25BD57C480A04FA37B44584813CCCCB3 B0723061CD74ECDFDD76F2F0BF9FCFE472DC276E4AF4FA89291705252167552B CC954308151837D19C960C7E87360FA5AAB380FBF08875DD32632F8536484A0F 7BC1BDC8E0D01DCA7D53568B0A36DB6C2277F2B456CE57604040B0CE796A177F 5C156485035B3403ADBE02F08D3CE68AB18B15985AD73A73C3BA7ADBDE0526CD FAF044F33045802489D8E3A23B77B461841A53FB2C4EE6147A336663F6AA2A06 37BE3CECECC36C3377F7E6ABB92B07C19CE37835CEBC4E4FF6D91E21FE66DC68 0125FBD7DF5D57368A81C0DEAD3F6C504DF431E64CF0A74C70669DB84D7D5DEA 094B09E8C0CB6AD8B161002F0A1330560A9E88C37F93E1F9ED6919909CCBD78D 9C467E196835E8A4E66693E0788E8A39DC1A893D8DD75EE147590C88D6A367D0 D54AECEFA53F6F3A64677E8F0931D3F898D8FA2D2A349257A44001E6DC3C33B1 01451AB7625B80C4EFF1578497F9D8C0CCCF69DDDCB90D738693EEDC74718FA2 02247E296CCA58CC11877FD0EA57318DBDA8197A7A45358BF5D4F574DD3D50CB 58380176493E1667047BBFE1E3DA0CBF87DC1929A8161B8781AF9A5C8A9714DA A4A7983AB3445F86B6BCB9F5A657530989D6CA8DB902CC66CBDCF54D52B778C4 F7AF54322E3432A032B450D6B92C928B4B1E629BBCAC8495AB9EE2103D489C66 D3F6641FC5CD8DF51206D33E1B3545EFA4B9ACAA8D6C79695BFCC88606B538BE FD4EADF3939D7665EFB482039DC815165572C735F09F11560C59FBEF6986E335 A12F9D6C0228E3F9E523EA1FB91699136AB3E010FF5838ADA5E7617541236FCA 32446B2B7BA00F826EDE8F4BD0A97871C785CBFD09E630AAF8A9E7AE451471BB 9E5F0851F923C9E149AB25E8B200E301EFF678775AC532BD2FF9ED49C718EE5E ACAD524E12EAA753C5C384C807AC8527C5132EC6C290D5B0D57B97E194D5E1F3 5AD474B7861BDD1C53B18129DE8F6DBA2EE7E531B99E1B3363C5C20A8AF0989D 1AFB5686C9B250806D290C82577E6EBA745C861948689AEF77D87FE5864A2DBD 0555FAAE58B57EC44AE08DA77DCE1A4E282896086B0793EBD9DCA3E7FF0110C7 989BA68BF7BDFC97CB9A6F19E2552646F3ED671B5D1A116FF634405FC819215F B1926DA65D7DCB2261318A465341CD697B2AD76B6B7744E393BEDE7ECDF3A3D0 148384AB911B6310615320993F41EA6C5690DAF61A093A94361E89935A01C6D5 15E29165488301E9FD37B0E7890B210B4670DCD3C4DCE08D10039FE3A9D6578C 227FE5EE6ECF3B771C2507F4D7D8B70AEF8CEC2C90A72480A3C18CDF0412B9E4 2918B7B22D3E25F6F89B51CD5393E7A6452F5F17218EB368E57E9623301F2AE4 9A2C9BDCF24F0808DB3715E87BDF02EFC156D895DE76C531E5BF9A37DB01CFC5 089FF39344F2C0632CA78B0C5086222C856E83E4B98BB43D7944635EC18F3441 F509F57D1C4C90F543EF163BC853253F2BBA8128EE561D68EAA6A49B962FE49B 07368AF165236B437E05E846ABFFA3CDB69D5D6A483D68EAF0345F543969BD91 2E8EFEE1ADDB423B67AFA377EE5130228576735326B80284DEFE24973B7C54D6 06D8054E7217C03BBD3402C62FB0B691842E71E18AB9E89C68694A08F85B6BCC 394E706E48B768E6AB2A04F203560B81ED9936DC93F4A8E6A431342DB29FB8F6 FAA038F63801B61DFDD2803CD734C2EA16BE2FCB29663FC9F83CC022857D1CCB 78AF40F69EDFE0A04716DCC7F2C51E463AE759D0B7F1869376C0D4B6D106DA35 99C72F8B4EEF6D5C9773ABFED6657B4971310269D5A6D568BB407141D7580029 918F9C6DB19CEFDC34EEDA4A6331A1228A4805068A11F8711C4AEA2B50108575 109E4C6BB570C495F81683450AFEEDD76BBE82AB644261364051261BB65842CE 62C16821BABDBF0A15ED03E89CB7355F042A7B1C3569C818197EE22048F732AC EF5D27A3E62D941A85C47CDAE66CB499781B80B349D258E2506F6B2077D5BA25 BA850EE56A5DA84BC0F3E55FB65AF60FE5795ECBBDC29D7838A1DA6710FCE66D 593BFC8697AD35D2AC26084C479C12537E9024FDC8C8E681EE93D813D1421320 073D02D66200DABB3515F1F1AE8BA0716BF2348768672CC82118064AB845CF2B 838BDE212A9BF23AB9F3ED77B5A9EBD283B22DF32BC18A4A1B9B6FDCCD6D5ABC 1C9F08CC0A7356DC3050F76A61BAD0DC9214CFD7D74BD389B3E3D394BE95900A 498D3AE4DE53316FE3972951ADB395A9E844F6B47C6AE1914279D301E2B37C13 23B46C3BC6F3249E2EF10C66C7A4A35C7E537223F9E786B61E7E9345103DC8F6 AAE533FB5159C692B9C9840D025D0D28A4011CDB850AC3B1875DD78E61E5240A 69B21C0F604E12AC8D2AF8399F4B1D2C13AB2281C508F6E4E24936AD0C2A3427 0D41FA1A42FBBA2E130256AF4454C166C6BB4BFF75F5770C77552D2D16E01355 B4E9C24876A0701621375C206E823F4F0437E0A96A360DCDAF605767068A8A52 B17617C86CFC446068A3E0D0E9AA147C199DC8BC7560C8191674540EB3349B25 A4BF0DCE9FD12E84651D359A07559B2FCF403D0B18B629A92596BF83FE1F483C 3588838867044FA3C2E3A16950F99AD94782ABE8B44F11AC6A648AB89B23C0D6 B83A1BB5BBEDD6BF25E3ADA4857CDD5D8F9CFDFA4A4485B4EDC73D1938027B8F BDEF878439D330F061559370301E2EC319CD49418C23DDB3849A1DBB5E539C68 8FB68C9CA5A2BBF9A8DAF91BB0ADA99819F97DBFF983FBFCE566E25493FCB603 CB067393BFE0F881E4ECEEC69AF0E05B61739158DB2D9DE773F2FFEE474193C8 58AAD1C0508952D67EA04ACA899A5C7278CB50707540B21745BD882F5B4AC5F8 BE1224CE5B53588C1FD7101120D3A7D6C077C0C33C35581568ECB4A942E561BE F009BBFAF69C8E9C6CA16DF69AE779C55571A4A1C1B092E34098D56684A511EB 4617FEE6FEE4086A5A8DC039DF54410A8909FF676E66A47B1114D27AD08E3247 F7190C9F46393BCFFC404C34E0E657DFC2A06E954C4242C2822143832DD88A87 11C7F37F2B807F5D6646B584314559BB2A49DA3363323511E4290E45D6BCA226 77B23600AED74D154C94179085D84B6A602277695EDD0711AB5A4AA047B00B7E EDFA4620F358B77A6FDF4A0D6D5029C2703E4C58CFBDEF30D914263530CE3829 0F21281E35FA5D878A8038DE5BC075D83CC460D1B7F75C98C75D441AEC634A78 D4C930E887D7B45A6A84A580503B8A42DED2426B58D1EC42E7333422D7B6C4F1 8C4821A7470050FB8D47F899D59AA360401B8C4796477F44D7F3EB134A0360B3 8BF893909F79C46F35AB339ABB48DD4E8EA410E976C9F08739AD242B3469F5CD BFD53CD6B3393DFDA0B8211FBE0C7ABDD650C9E6440494BCB96E14364B67996C 1643ED67FB466A59607D6ACC65328D0ED0EA7A01742DAF1B63EB8A826A2DA6FE 68CC849104974F8C80C46963EF9DDC8956852874EF9AD81A26FF1AF8A736A913 F9AFC4361BA1159A4B7D140AE913EF116DBA720E8A0C5B44BA50AF225302881F 415D95029A43D2C713E32520992FCFB054968857555FAC60F48686082906029D 4F1E2BFB926DE9DA9B8CB8F654800F03A4A5B4CA3B5CD8F23220F42F694AC44A 6628AD583A91D157AC53415718B54E3F66DFC63818C24E4806A89B6B25028EF3 442C2A3BF14F04DE17DD9C131170D0D432CFD4F5CF46A9F6A58E9557D3FD8CC7 FAA9D26C53F131AD1F07A11573CDBC72175E467F48ACDE34D4B0DECDF5C8115D F97CF787A7578D0602161D4D0B7689B4193A4813F0A88D9B74099A76C75DE739 4102D9CE1D9BE813C3DAEC73F6128952015BF4DCC67AF4B213352FA4935EB818 82CD601F125293E095DD66D116AE42C77CCA09801257CAEB85698614754315F7 7BF5A0E34CFB70BDD6FB1A81536B59BC675A455542C41585D2A3AC805C79355E DC02A563E96C20E38CB4D7FDECCE75400704851AB400195CBBA4EB0F1EF53749 D555D56A2E173A57395DF0E9989EBD4C57C406997133A418D0BAF72F95A0BD33 EC8E7472F30BE9312ADEE5669C384F88C66677335F8852F28812F1569BF4E956 FFA4E2F61D5EF7755CF179938974A94B6DF8023F8EB51FEF6F4438777E8CE83D 6309958F31B108043715CF43C66A355A463983F8F9D50D5D90B6F2281A9C74D8 66627304FC12A009B37C5380D844424BA5D5D95FD189097DE4B61F61188AC0FA F3ED26318341300A77DB1E5A152316A7437CFDF143C57157BD80B8FBC0F4BDD7 2649F977BF199CC979BEAA0E3E67F2BE51E62172C0D478F9627E980D8805FCD7 9AF2E25D16BB9361B0FE90BB1834DD7DEBB4A5C823BA5833859F0E600D9AF7C3 EBB9C0928BFB4203F105904264FCF3EA58BE1F20876919B1BA32353C10EFFFB9 9DE84D21D885503A5FDFCC8BD9ABC466ADE3FB78AC9854E0ECB59F7F9713F521 697FC713D15B4972DAD68D6B132D26BE02BB0698DBD95AFDA0578B314202B62A 85400AC463B4058BC040B0CC12FB36523917F74817E453513226FF1C80278682 1E75115B56D3BDCD98F8DBB42CADC5725906098D1B03EF152130AB43DEC6BD13 9A6C061FDAF88A5F4D10FA6B1E26E1DD1F56D5925E04589F72F0D9B2ADA29F34 486DC2D4027759332B34FB651CC9EC72CAA4194B5E0ECCC3C0E2420386E20D33 BC5357A9C37E87EB4F81F20B020251B9E4D962A54E63EA1FC3477FD1B008230C 757BAFEB11797DBCA5D5FC8FFD94337464884497625F8926FA1029CC138A72CC 8AB3BF8F7D8CA0FC3DD53473AE4AE5065DE1C8DE1335D0F2871E49D464794645 517C29DAF310F092692049D19E61AD91F6A24DA7A32F678C01F6E6E6F9394BEB 658FFACA6ED9E61A2F3307E84DB005711E201687025D88E3603ACC86FD00A29E 670DDF84FFF3C6A1AC5E5055C8C5DFCF2C960CC7D5E218BCE3330441B20F0A9C 334263F0BAC9B135BA3BE639DE77E65850ECE9727D2B796E4A183BEA98191F96 F987A070A078709959188F732D5C86CE897BDD1F5CE6D58C8FCEDA7869387619 A703F77549D0B41329B9ADFDAB93C6EC2A44613344B77E5D5FCE868B302FE02F 30C4E308C9F98842776066BF4BDD5B27CEC60C4234189E9C657318F8C2BC4A47 3810B1F5A98245F3A2A39E98951DDD9BDF8DEFD3CFC2192A03E93FDC25AEBBAD 0ADDF24989A546767C455CAD583C4324F5DD237A19AE2BE99A7A0858D7D2A32C 178EBF776AFBD30C78B14DA4041A869A0FB4EC72E9E0BE4FD70A504E98B84F8D BDC950CC20296F1750A5053E55675BE64F5E06839094EAFD639FC3DDC2BC05BE ED13FC9D6663B38C231BE1B06BD16266A1D88F22102F71EAD70F2C5292245D33 6F736D34C92ECCD4FF60F4E2DAC2F7EB44DE4D873E84048603A9D89F5CB6850B DEC7BBDB816DD8470BC6008527CDB67DC4DABA77F1A9211B38660918163F0DDA D7393B30365C9AD8233CB3FF3F48F1451806C6BF5E7C26A557616653BD8D2D7B AA860719C1D56937F3FD7F42EF564582FB73517B790FFB540F62363823F4F830 F09F08746AC90D04470CD75890111A20752A1CB63463EBD129F04059386867BD F953575AEB6CE6950C6F19321EB70A2BA741A9AF12C8D922A9800C70147753E0 76B7435989DA629ECC7046CF8DDD4651A5F4CB2A0D0B77AD4C2E55A0F3969E91 277155D8252B34AD9BCE1C579038EF1F09821F33ECFEEE5D39B2E0CBEF799A77 05F5DB3C1EF650EB9C8BBFAF8949512A929379EAD9B686EED71A5C58DFD361B2 A9564051F665A15BBBC1F12C45C0DB23C19B07D852B9ED6DF0C951991041409D 676AC11923C45D406A495F79DC5F47F46C080DFC1B6D0C1FE9FDF30ED0100702 0B218D67367C0E608C6F0A941885A6D431359072CABCA7A398391B784D6B6714 6742E2B5DB7696B1D473B5A99D8FE874F42ECF17E965FE55FAD77F44608B0E34 9436159A7575713AA321574DBBDA612CB0733CB2B9ABE7358652422EF6DF9A5B BD9A16DCFF6D9FA5496E983BEEB4055DDE32A2ABD6BEF9E1A7EDE4D8EDD93428 906FB1964138F4AF0F174D036B35F9A9DB9B0943262CEF96E18EE3C8BEC48D27 4B531DEF85666C6226E120961CD9210F8C0B2DBBCC6D29B45CE71E1C06903FFD 7443354B2ACF5DA8CDE057668F925CE369263B54164C9CDD7801A3C4D0085494 87B7E55728CFC649CA83B286C21EC600038BD10A6DC66998F78E08EED091B518 2A078F338D32172AEF582456A08777B63011370CAD212A57F8A1CA1FEBE2D0D8 93E219E8A64B159C933BD87B051A96712899B8F72D7D9080A09FC32FC7E17EDC CCF1E38628E78DD7E99EDC598CCB946C451608B7EA5BA1CC7CD916F300F4EA31 FFB411ADC19248536A10E458396BDB57379BE96C779583D23C34399A09DDD5B0 0C8B86F9FF8600824E07A4292031C49A8EA8E3B7A1E5FDAF642EEABEBFFCE4B0 1FDE41838002DE210F056D366DB578C101154BDE61C1848B441B1216CC2C1FA9 F43A4541D821D4A3FEFF7F91124427D79B2C9968A207DD2935A96F58A452F254 0F15D52FEBFA94041F17EE746C615CD12971617DF5B30B06EE21621F184CF8C6 7230F8FE2DB87A8F0A72BCFC464940CA35798E0A10B0E8127F0A1DAD4FA7597A 697F48C470B0EB5E09E4E0B5FBC292BE23A17897A9F44FDB3C1C5A0185288696 92674E9CBE3430C3918C7675EBBF394403AB37ED56882B5965B3E01D59DFBA91 E8AD59D220D67C0444D7C509B8BD4D61D7F43630DFC3B071DBA00F96BE958C38 5274AFD86BD01A46BE686B68B76561CC24D7E5342FA135E773704AF83D510390 580660A2E4F76F88CCB53689EBD79FBB911A163CB7ACAA6A65DE05311A71A575 1ECC0C47DE84CB3886CC4112F4D39B6D5FC5E1E85A7CA7C791955006E4AB0941 3BB4B20FE531A8B8080187CC11FA524FA96BA270AE61D555B5D9294906C7EAE3 0D3B6C4BAE49426349B327A84B33486B304B90EA06BA4F1D3E0E726E78C964C0 FE57F994ED83C9989D2357ECEA46F69EF7BCD20084B69843793676584B3BE2A8 FDDE03152E9876472DC14537919443FB1FD51BF83ACA332165D94C43DC7CEB83 5885EA66D1887C3DC468F2C9E6C5C4502A8F7E8F90ECA4524C95D6CD9365701C 84980F1E87918E7FEEB4EA637965F87F3DF2308BE2A67A1A776EDB1FCF793320 A3C8CC15EDFFC05B1768F450E37429E440123D52739D0A8ACCADBE62F771014E 353864BED83A4762AC90B72403B91FBD3113D854A38AA474CD0FF6859EBB852D 1E76870BAF1EFBA54DE5258938332EBA7334DD0648774E74E056FB5B75038002 E0243FB266F364461A227D93BA170D01DAF5BB5C74F1B8F6A81A967D6B65F060 AA4C242CF47AD3BDE129263DF020870B21970810B34FEBB19CFFCED48A2113F4 6A2B8B0860CE40E8160E14BD6DE894D41BD0361DB4E8AE59283A5ED0DBFB5146 C26035406988F9D3E83CAB574D227A771331CD164057160B7722462EEC69908D 38BBB259994C4B55BBF4A84BF8F69C25C809514924320FA15C9816FC0D7590DB 1BED25BEBD8E89F50A951E655591F2ECFBEC96570073B42D95BF42C80B82CD36 6B9BF88CA616B088826CAD3CAA5CF924F66BD6940362C2E35A0D8A06908876F2 E03993F7A2C2E7C32F0E57E31000D0D72332C4DD50EBA61F192717B44671CF36 3F3F80CFA8F541119C50CE4FB363871D9626A60992708F7136942C58649BDEF3 77E3436A311AE7D6163BECE4F683B47D0DED5B6877F23B80B88AF33B69E89227 3D8B4065F40DCFB218212AE8A35931784A968552A40FDBE5B7FC736F8D22631D 0A83C610D16381C94F9BC99642EDB52F43246F650B8F777144BFE359DF1650C4 B40171C874A4D6B3E8B505E68746B94535F32BAAC5A7CB33ED0EC9C8BE93E0FF 99D76B512AB00A30356152A4FEA14632F3B3E6CA374AF97692BB31FA17657475 48C236185CC7E1AB706BE4C057C042D6217023E947EF21D490F35EEF487B43FA 36E70F226E90C5654666BA84424319D99D755592EA8DAF62E4FFCF68231246F7 E4EEB02689AF38420E91AE8BB69E1D977E397795ED48CEAAA82D180B1537E4AD 9BEF8D7695F068A6BEB16EB01CD0FA61E56712F9B1506B76735F6D0405C91113 1A598C659CD5807CC6D7BE273A4A091D001B1E1CB03F159A6B801F378B0742E7 23FA9F5B7E7E7347AB302982B446B2E210E72F6E5BD0F9AE73DD92D58B1960DF 630B51ABC5B6845A9D7D4557BAE8931F7C4B8F93BAEDD8E890F4465D504669EB BCFC471FFD70777CFB80752F32A0CCD4ABD4A90AAF8A688A93C5B726DDFD8803 2BD6BD2AB2AC2283E18FBC2386CA06537DE16984973BA221631FD343856DBC08 5E46AEF94D5FA688675B557DDE900659CEB34A97559AC7ECFEE4C05E29ECD234 9FB4DE6D4C1B03A3D4CF5E30328FED84DE8192A6E3BA49434ACE7A351E9E5FD6 1495A1E26061AA08A1AAEB00F0A57D6D259CA7E1DB3F3EA4D3C053083E39514E 30F4E3FEA021F87A2D1DD3982A210061EF71419A88ED6551096125A86B2B1175 BAE75542C5CBA3279AAD0D075AC2B75F3FABBEE4F2810BDF9DB93C54C5991FF5 21C4E9574AD39699A1DAC17A00928419B5D5565A7A296F1EE976423610EB896D 82C3A7A839709F013CBC16DF5D2982BC15396FEC893C00CACCE3B451E5D17F7F 19CBC4378CBD25D50929490E26BC39A881C3476F320ABCD270080FFCCC826583 2056AD77B7F5ADC8C0C81D036A072602E5D654C623AA6A4C6547CA7A1E51518B EC09609A4D1F65379AC7E9A960234A98F7B4E2D65761371DA21AADC8B249631E 145B4361B5EACE04BA7E80E7F92B42E9CF1A223C6A8AA886C3E0D517902DCC6D 42DD2A34316FDD90F0D3909A1BCB8CC843020887F3103F5E9E26B25107C95155 81AD8C6CA764FAF373962174765418E64F4DA743C427A35ED0C5EF0BC001F5BB 917AA4C4190EBA7C003FA8ED1E58A96035A857E52B722F1CA8492E8B5EAD1F80 062ACFABF6EED01C7751600053B7FB9D32F49A895A7471C98ACB2E65BC0A10EC CFFABA27C65E88877D766896D0A7209C778D9A97A2246EE1DFC06835A49526AC 7DA363F598641E2E5F275835A8F030AAA89039F2494B3BE75DAF60B4FF430725 D02601B8CF40F48DC90F29E21AA85B477B0E719B8BFC912FDEDA4D00093B3C4B 82C51688613341A812AAE7140574E4CFDA902896B301418430690582B6A44675 58A865236E7A4C9E5E45CFABFB182ED1517C674944C7ED56786CFE4AD966F1BD 5CCC05EDE18255DB7E6C2D4EEC0E73B35328987B9146ED535AE9659C4DFE790D 806646B609D60468B2849D9F1289D275C5A68DCAEA8360ED3F8FDC29CA283449 FE378BC0C3B9AA948F712A8E6082B626C78BDB6A36EE7B378B85880B0FD06E8E 635AE349BA7E1D2BF5D2ED6BBEB12803EDAD0A597C4BCAB5D2BF9CBB658B885F 4A041A83178A88EF6FD742C95F6824BCF389AA13AB43EFBDD5B9A211DB5A9D26 FFF05043FD738E35C0D2CFEF76662C32CCEF018A9D82D8B8BB4804E5F06052DB 525779FA0869694307B7E2204A54C74F3F901FDC9B042F3E1E4C22255DB35B98 9AAEAD8ADB2AA66C4D165C8A71FB9F0A4E91372BBFFAF0F06A27F8039FF55AED CE1FA33EBE811544DA0B086E4861DE8FEEAEB135DD3F7E7B9BC7837F069B2EBD AF766DB068054FF8D735D5A5F325268E5317F9E837939CF8BBADC6F93A978DD8 977CF576E548DC231E25034663362956BA7411024E704A8A9BB43CA8881CA812 D658BA7EE2D5E0C01CFF906E47445B822AEFB5E3B662C3668CE93394232F5DBD 56DF14BAFD85EA2F52477B307CEBDF830F8210C60B5FFCAB9EA231ECBA9236C5 9762E72FA1C67BEAB6A4F915C97E350E9020FDBF9800D7C51BCC0DC95494B527 3F2244955F3DF0B1028B49AC45F42691E165E53D8910E842F369CFC3674A22EF 1677043FF582F44AB1442BED3F16901403606F25D02B7F23BC4D3925818F3B89 F95C9BDD080855897BDF9D4FDA091965DB22356B97FA00241AA39441B12CA8CF EC3D62F02D556C9B14D1B36D2AB28258681C8C6F2900E8A8872C140B0A73ADA2 1250119B510DF783DEE1595B679CB27781D1775AD57141F9C5DCED967A06DA32 FCA803CB9939318F0C405222BDBC748AAC8306CBA76F68910BC00E3C9E94987A FEC23ECC86FD2EA2F6CBCAB22CA6B0782A4897B8D03CD5D15ED92501AE239C07 55EB98460FB6FA5FD47E918804AE12A9489012B64DB936B6126DE95CC9129EB2 30A11BB23299DA02B611186DC0FE2E7DCA61BC13085CF6A33B5215801249385A 8A745FB513DBF79E12F3C54DCDDDA2ADB3662257E49180B2C197A9F20291A626 865B7B451E529E67F95928B7AB3EDCE229251BD97BCEA61BC1391B020431F400 33034382D03B25D925097C01F054E5E972140E64196AEF9F121ED1E04589D7CC 82354D1B0F61B6C2B90C8B9D6A8681FC684DD7001654A54D25672307487D51B8 A01FDB7BB54F90BC5E10C18D660BF919F01684273AEBF359B5C5AE462970F03C CC01DD3E63A1A9B36311C4DAE17B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /UniqueID 5000798 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 14 /ffi put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B1422DEB13896DD78CB7B7F400EA5A6CD639D9CC828F 52311A11F2A84E566DE98826F1E28D55FB08ED70950205DE52C207CF14238446 084FB4DCE04C781858BB4E0744C023EB0B563769751AF1D807EED20E4AFFDC46 3C1510C782FD92902761F7557FEF701AA67B20A9B019C760B2BBA8A048BA3681 35DB440925CABA05B8A13B2D30D14FA875D3E200A018C78BE2E930457BC33AD2 FE3610314A268E9A30EB41F7C771758410E7D1179567B22CFEB5163F7CADBC40 4D40860E83BD5DF2BAB4822B55B863D0793D3B60F0DDDB6DB993711C4C7C2F39 31D02C7D8EE36FFF8FF2179534EE4F2DF388C8AF7468EB28FD5E0CBDF9E23D1F F320EBF19352E03458A43BD42366D549EEE1256555177E3D6A0932C6028CA6D1 1849D17B5DA8ED647B79AB412E0D5BB39A58964B4CA44CAF45F63AF49B330AB3 DD863F5EA66EF0C6D7FB2EAF256CEA1CF067D32DDB9E44EF1E351BDB292EADD0 55C9796128CD979A5F012FA15EB06B0C15120E70E0FDC963BD83BC0E73C5DB4E 29A03DF4D2722616B45D8664ED5EA0F0587DFFD8DF4D75E2B6686336B4E51EEA EF4203FF9678CC85DDF38A6D9495D51E2520C7AE08020F045863C622EC633C33 C8E48236814087336CC51FAC7321B6ACF9EAAAC8C7F43EE9C02CB6F255F4CCC3 71A4D8CDCC5935E238A250116443B7A8C84069D80CCD49C8549B17D22491EAA0 0343FE56174C6C6DF9C68E1CBA3BF07798E49070B51A08F5CBA8893DD272723D C458235318CB10C530EE3BD24250A375BC5236707450D865549124D5F8F4E404 A115EDA7FF6951470827B61113DD76D95D089544481D97A808A48AF9ADE8A111 56E5AFC85907D153A6188128643FA505A45A89306871BB7B62C250B5CF643E03 E90A47252F9232E8F227E8D0CFEA14659E4A300FD311D9EEEB9BF9BA261019C2 A4AF2EC3EA5E15936028F675F51439C815FF80A1EB0F19CB8580D55CAD1864D4 BFED38B14202990CC993447FC71337DB79DDA5C3C404676028162EC3A3B5A9F7 50F7308226F59AA85C789E70306D3A7052CBB59A2B7223E727C01E2282517DA7 547482552AD2E7C20CB6268229F5F77F2532681C249F8533E4FB424F0BD40F3F 3B3D615F0BB10FD49F54164AB9EA1278E210D30567D7380C3A929B63397965D3 0685881ABFBA6CC62E330734585C07B18D1536E6E66D6E053F31DFE46412383D 214F4C132504F68F76270450F146969540C347A69068639FB12199551AB1FDD6 A59E06F3D4A72F2D3E0021C0C999A61AD366FED1069E11A39800E30F0E786D66 EFAC45A9216EBB98CDE2286F6DC94E47357DD29C274B64E2D18B774A0D5E0478 F9235A49AAE15FA4B9EECC44D71CF2D2E7A39E6535111B243ED0346635BE8CA4 2E7731F732BFDB3259751EC01DC67AEB604B563FDFC54FE77E4512AC587AB359 081C763C09A0A24A33C28539CCD186E013416AB89EF3547DDAC78EC04BAED0DC 1A7E3FAC4C93CEB3092D8D893F93EF388C9042976B0F3BACFBBBFB664F581AEF DD3E73801C10CEE4C4239F6399EBDB7711189ADAFA6E1D97F1B5803869718BD5 27D72EBD8A9B4A05B7EF211C0F01C781F82E9CAFB3C3C50E70C34261796045E7 0ECC4D8BFCEBC4F234ED4B6D61C49ACDF290BD8BF2128EEDE83BC01EE9DAF1A4 AC6A66D505DD82B81CA54FCB3A484F2A5D7EBC173952F16E37DF1EB579FBB531 2B468E5555CD0D547D0E53E185533E470B266B9F4B882780B6E62A22A4CB44EC B70F6D242B1CA52C57967086B733DB62D36F0F12F15E4E187E374EC2815BF1E8 1F07DA9849D910334C176ED482FC03CFE0E55B1EC80649833876FD8BAB9A1454 F7EA49D38162CC76A2680FDE116C35382EC6704870542F15D1EC9D0C4546A965 DA656996FFDC52E3D5D8CDC6255B1C7504505ABE9872BC9DD54580B35F4BA161 36FD8DC3F8CDF98C6AFF467AE3D002E65D67FF3E7DD5B1FD8AC493DBC76F27F4 FF6ECFCE31C43155A7A4658442399F17985774A7A28203BACEA1473FE84C915E E501DEBE2DB72BDCFFEA51B01BCA8DA16CDA84A2C67E4CCC4038420E1954DEFE 02FE5FDCFB97F8DC77E759BC3613F65CB04FC026B378ABE9909B638AB21F8246 C905D3E93137DE153F3295C5F8B657A5B5D358C28883756DF2E572BA936C5DA8 54FA51FEF7BA66FF6C2D86F86C5CEAFAF530AE271F032039F412F7E11A589DB3 3115D45DB38D75B62F235C96E3B9C6563AFF2D832C801B767556C2F0629AFF68 37AF3D9FF177CE80DA89E53E2826F24481FFEDBC79F9ADE9A3B71484F9BD88E7 0104E9D1C9679BE6EA7B3CA9C1A06A925CE16A2F74C61E7AA08111E274DA2D63 D74B14D078800284336465EF2068523E0FA5EC09BAA8E874E41F3B6E04BFC8BB 7F321C2B3ED69B333BFDBB62E64B9ABAE204C551384AD298E69C71A592DFCE39 01AE5A03F8D763E3B939C0297531EFF9C9FD0D051B57DE12B6AAC0F7D03FE3D5 C5F6691F8E15292B312DE956E928F89F9E48369F7EFBD891E92C9B0B982F6552 4A4DB1E3B82549852043B5A93B6A9448CE6D2B928F4C57992B275F6245744FF6 DE7AE0353B4212533CCF00065CBFAE1CB98E7B0C33F5505DA6BB1CC0B9FB5CA7 C515F04D92836F1403AE28908A4A810AFE6AEEC0BC95946F83E6CFFE6342E1A0 1DCA180DEEB5A312C72E8AD90751C44D60519DE22B03F552F37D5652A75F89F1 F0484B34F46433CAC90E08F8A3E97E834F25F109113BEF2918FC1B244C4A23A5 621160D482355B4DA1E439568B2F90D0808FBEEB955300F49F3735E5174FF67D A5A0C2F46CA3CF1C5129C9D547DEB3F0A0BBDE47CD12B90D1F6E1874F4897B02 B5FC9E4E731D471FE4F63971461777FC34DAD2399C2C3CBBA7EFB0E0A7D0FAC8 361265C538040E6CE1A8FD0CB24429E02AC1B174C53556E1935AC33988784092 7650C91CD1B8DC0B3729A0C108D036C4894094A67FAFF2FF9E5F76B9EBB6E554 55C0CC0C599763BC50D9B9D8EB0DDD9C40AD206AA919E1AF36541485B015C46F 0F7ABD09AA910CF4E047B1FEDFB8B4F9D08C24EF5D8C48CD4CF98A9478D77E87 8CA13FA6BC915057F440E44C93C0E7E72EAD4D3569F3B9352581F7C870086A70 1C1BC814CC85B56A9E63E26EBFD4A433C2A05B5F88200E954B4A6DA6617EDB48 4CB8AC52BA120623621989F90E0462CB9E79B03A3F43C01D2BCBE745F4B7618C AE15431E873FC9228444ACCDD84F8F395430F5B6CCED700C5EF94A3D51F7F457 80E2343F14B1717A900916F0365A9569429B54B3E8BDC796D6ABCBA05A12E595 2054F9A662731CF1DDAC478ED3DF0B5A65EB128C548BD1937F15EC69F4EE08A0 AF0E5214F3D3A5A0AB981835808BEAE0B00B557E76FCF69D363D13AE5C18DA67 F86E0040FD96F979382E3F18242AAD341A7A5E4C95FB8243117DF55DB8CF9FBB D4C33E6C38CF2FDF2F53C3D69F8B9F12907F3249574F2E40B3DEEF10626E0DA3 63C7D3152BD6DCB89B01F658A79C6A7F6915A6DBAAE82C64453BC4105D8E582D 304EA19DFAEF3E739006B6FF321392D465755D4799CC78E723E3623150CF6AC6 4F3BA42319134165AAE7427B6C42E6BD27B46776EE1945F1B179F82CB77F7843 C0D4BC008A4A557D18A99CB59411CD8DF268BDED2E8F556637B2384E6F433B38 34120399F03AC60DCB8ABAA6216B907D773CAE58C8E17588616470F93CBC1AF4 0D3CE8B90B4CFF377DDBC5ED64ABE53B489875C1FA2601C4A5626E98D45E6D8C 41C745B9D3624FE4E165A0026C070EFDF93073B62FE3E0D54E79623289C71C4D 9B4146341C3A4EFC354A615571E23DECC1C1831FAF5ED6BB1EAB7974525815FA F308D0E19690A63A5DEE6493F1E2F70301AA4050D1A626FC3E980168DFCCDCD0 1A017DEAE3AAD1DD61DADD7AD78ED669CFF64DB109CE06ABAB4A2707A90DA232 DE34F4A5A75DD29D81A696581829059778661006E30AE73F2A5535F5586BCC99 BDBA1B572CDEDA12E0FAE3067D029D559551AF51457D6A0A83ACB38B128E9ED0 0A6A68AE2D21619CC7C67B43EFB3CA32BFCFC105EE1D5DD1AB312B2F646F6CDF 5C9281C5A8E541F7DBD2C6D415C478C2254E358C228F2B3FD776909100423F61 A68578112A0A936E94A54060F102AA345A58892F98830439E9F791B6745D3565 9462E929E87004BBE44801B14B0D92F06B09FCB7975BBBF8B29143E8F521D775 667AF2DF67FB131F5C8B8A3397E45429BE2654583944C40AC0AE7A963C92A362 46FBC1298B7182F477FE58B7B10BF8A7A3B72084A00718A34CEFE38F511A8CC4 A7E1E8D6CAF751C1335C165810C75B6ED56EF34FC51C89BD49CD7872A3FBA5AB DB27FB3D71C4232B20ACB5525F213B2D534B3EBA3554FE53FAF9ED83C8BD269A E8DBF1F2D5E4D92213C704F981426F9ADFAE31C362A88E17C3D47D939BDF466A 8A6306C976BB668A7C9BFAE325DB230A17380D3CF2C222DDCB85D14A6B1EBB22 D11C8A3186B3BCABE11CCB38DD6674F7A2D88E092AA40A54131B7057F319B8C7 CF3CB74141274AECA5BBEE254057A105BFA6DA98A62349DF4ECA925267159E00 066B124CC5EC95A9BA986AE8D85B0A9FC2FD8B6575B4A39635F044AF2A73E3A6 104124A8F95F4091BC9E620FDEDEAD5A8CF881BC6DBF0805C6BB580B944D63FC 65DFC50BBAF71FB8A771DB68E0635A6857A812E3AA0FAE646DDF72FAF699CBFE 0A715BA03B8CEE0AE39ADF12135E1084D5FD2AE1B8ED3F8482C4EAE527D2FAB7 0046FC3BA8584C701CA26EF753E1BB8DC803C400A7A1D3986837AEE4EA8AA88D 8AC810E99AB3BC847864F7511977555BD896B05ED57B13340F75C3218B259864 9B4E45504B561E8531B8BC84468C87B6FFCC64F0589E984D076E1CD7EF04D508 AFE28C892ECB108F13F1C0FF8E5A5BC2A853F595B9397057D3AD58E30F6CC55F 300DBEB09F846E2FEF6DCBF895BF0A24700F503C235F552F6060CF8687015945 27120DB222998D23EC825F9B4872C09506AFEFAB25E482844982D3973087C751 DC90D60C610068E0CA15958A663CA3AA795F8A053C22D9D41D7753ABEF077C59 6DB0336A8D0238ACBDF0B733BFE9AE8191B4BE1E02823AB5C1A78534FEE7DE3F B058E1D6F8AE7B74CFE644E312D38A20ED92092303556227800C3EC8E724934A DF907BF8DB416935BFF57DA6C0E57F4EB8998D9D437C8EE01E3A2902B9F17BB7 B910AB61754BAD9BFC6C2DB5DA7A1B987E54E4B1EC8B480591B316C7CEC8E82A 733A9A79FC45B6B2BDF0D15BB9820970A64916062C1F0448846AA1C649C278E8 3B2E00CF2048D6796E8ED35F5B1458E4685B0C54CBCF8A9C3AFA9AEDAE74E7CF 1558C29D50EC260D179676224184F2FFDBBA4981A5A7AEE40171791E349D36E5 AEC889325D0E12866EDB223610F136A9BA28E4105DB69AB924FDE9DC45119526 B2C3D2945A997820CCC983F99E1D309CDC8822BA03620E0249D9305B575455A3 C3790C706B654A27A008AFD7766C00B1388F4CD1BE85980FD6342C0CFCB2A8B3 5CC9E7E42EB331216427BB8D2B44FF6633929FE74F8129D11EEA503F5BB7BC95 86AA8A6C86A6D388458E3F1B80E1BF402C4D8AAE96DAF11B68047DE9D1124297 49F0C64258CF48CB8F2C875354FD923D8879716EEBCC8FDD2116CB6387D7DBA3 639D87EFCFE2D39A6A8C84FCDC063E8B353BF64D7EBCDC8D5C9E222E311E06E1 13DC66A9410651E3A6B4DFF8887DC0FCB29BC6E24CFFCACFD9E414C188F53007 E4D248C24B3E1BC492A091D7D5B6F94A02F61ACCC3FCF7CE59067F2A91B27867 2D9406EFEB56F80764379AD3AEC50618AE032C2F6C00B58F80C408625F0CEF50 C07B474C1B2B5B691BDE137F305A0CEF06003FC97E8CF8AAF6A6C16B8BEC4D15 7F5B1743BECA4B3C06DA60FB9AA0CCB113F60FD6EA3C4D5C586DB32240440DEE C43B66FFCBC66D0122ADE5C6A18DC5DAA4505BCFBCFA6F5D288C7AB1E6F5AF57 D9979A5ACF29BC462CDD55407BB044A7F1C5ADD0B9AF3BC321B2F766A3B1BA57 104A17F877216C15BF27F59CB0616C7350B9E71D2134C408023C233335A41350 A1AD5128FD417A29B670FBF3A95EF85C407138EF296821A984C46265FA8C5EC8 C2EC78663879F685C2D35D851E56A259D89C22D499A0FBFD6B8E5706EE9B4A1A 998F20E37B9A42E6A978C66757A654F03238A3942E40129815CADF0805AD2E1D 196AE4BEC663140B99CE55C894C6F2D000AAEE52013C451999EFA2FFCC5BA933 F534113840F599FAB71E9021A1ECFA3491A1030A6A02B28427F813655DA67878 7B3BAB9AB541D421504403EC5566D6D4B2D5C606388FFA912949571CB463642C 6D07D89E832DBAC74874B5761897FF4EB5485E53564CC295A68BC3304CAB444D 8885017F95671C9678A7AD771099BDC19CB27C9F5F17372EED5FDD0917C70F04 492D01CA790A057F0123976FECA15557DE63489E82FDBDE9DBAD1D70DD0DB1C5 45558E36E969A60730B1ED9C277D5407F3A0D220F95C572E471D97BC2962106F 4A09DDCFD3F5396B7266C58F6A3EB02DE70935D2BA0C879405A5C1090607E415 06DC07B8929DD4E3380FC3F1F87053E723EF3930F9E810C1A49F9281B90383EC 005DEC95AB140A9D0417AE9AC487B23B3AE97BFBBC4B72F4177B341679D7C1A1 CBAB1202A25F25E43E6659A8EF6B416C8C77BEC126DBA1988D6C76713F63FA53 6500BE8FD547987FE40C12D76965A48F92320DE2215FD9CE4060C0A7E62AC180 1BD928672C3B694CB0F53C289821B988212F7FB7228696ADD095F0F618166505 94955584055AA70407B98AFE57C5D884A477AB39E0718589DE23F372F69135DC D5A936EB5498524DF6255A648CE0F044F763E4EF8B95D7CCD338BC6BE561408D D1A7DBC948467DA38DD8EB8EED75A23486F9B834AF81E68A26AE22CB19760605 EC2984AA1EA1A6F6C1FB3C18847B3C9122347B529DF3A85F1EDCDB41E6129CF8 B187900201BCDD5FD97435C331A62C31750243467DE999FEFA2FDD6339FCA32D EBAF03B8BF8F7523BDCE1F9B75ABD3A6745BB44D2C2104AB508CCE9D23CEDD20 065E114B331F4712FA4CEA79133449EFE222378278A42F4B56C3F5F81438CD08 7927EE926C495CCAD22532879939F0C4E301CA162C88985C2625F1DECB34B59C 6E7C8E2D8CBE72B923372C387F147DF556FA11CB8310737F087CA7C5906820EA 81F8D8B9CDBC97CCD21D524471F13D102947190F1825DD93E1F4D6A250C56A27 E6D4F8F4D67647A5AE39D71C90251AFE70E83A04F2CEC0A14F1EFEC7D7B12245 DC83955C1635DC7C12B33A48661AA7AB6B325844A5FC6BD5BFA76E66E2702AB4 72D461F8BA1D3EE461958DC54D789BE138C8A6A3A86B8A31EBF0B1D9C37AE820 BD9E41AF87D26A57933BB6ECA2AC0E7C355656C60FDB6D27440DAA93C648045D D57B23A6E2A2375C41DA0A3653FD44B3D18DA67B8F2A770F364C459976F5775D 1C10DB29A5AAFC3A8E91F48F6F19409FFFF301C98A7F1B152CEA5F7779E98262 4112475D4EDC50BEE79E6404CC5536EB0901F87A335B800E3D15F79CEC609799 C46BB6634C85C3736D0E84402E3C3F64E9092ADB2E2EB4C0DC8A751C2748C38E A4FE95E9FF63898C686DEA151CE7F57205D516631ED5E981CED66B148444312A 62A678E0FAD20044D0E11D106A3F15CBB3AEC529B00EA933DBFC625BA56C3E3F D75AB06B2EC6B0C3CACF87FD8F200952C0BABC468EB2C49BEF9F40EDC5467593 19F2A91361A8AD36EAC18F6DE602F006C5EB7D54CF4BCD25FE4B57D2ECCC48EA 4425C9EB7095B483ACE879AEC3EE8E605222FBA5886152C1C16D0FC9A9D2CAC8 BEB6B173014D6DAA36E9A718A3F14FF8FC35FDE589ED23299F1F5D29C8388261 77D145BF57BDEB9FF133417019E69DD63DCED634DC73F1B3E1CD5DCA6312C7FD C0DB888F8348723DAF4A7688544241EE43C21999A8B4BACBFFE0B75D67075134 7ABA7F8CA1E90446015C602018F715D5276BA15B7A1E3258D330C169AEDBF7C4 BDE682A1C048957853F24B30201F712027E09733444151B6D648DD6A7C1B018C 8285EE618517DDA00E772494065DFCC585668B40B1FC688990E25E62D6840BF9 D13F8E3BDB47A7C295E3D7E66CB2E381EF5EC4B9BCA26FC47C419632D945743C 657C0B5B7D4C0E57C7986D63D578E0B2870791944B7A3FB9A844C3C127E497E8 50238AD92C7998A6B34686C86455E1C70E553FE1CD10EAE2291589AC1771AFE4 DED5868F848360CBE9B80FE1230EC1EE52ED35FD492812D7640F9219F7809BC2 19461E855D3A2854E3F6E849807632C5853448CFFE7322339AB43924CFC6064E 41CCCB86FC02E7A6EF3FCF919A69C6B8CCF698BE5243E102A912A6D7820A7FC2 4BE120F7F5BE8C0870663255A8EA152A63313F7AF357AB8A0EDEBA6EB3498804 1373863967A4FF7FCC6AC36AC66BB5763419BD851D387AB77026EE6DA4B861FC 1A0289C27E2BED8F8239B5A6BCBD58BC674FF0ED9D96A5B7BC7EA7DF9A910A71 9880BEFAAB22E7886881E88CD4F2B14F0310C8F18F8738F7916CBB50DF69C350 1DEFDB663C53DE79FA248052CE4B6E1D83128C7FECBE8029C30BC87933D740A1 3EB312356AC4CFBDD41C01CD2A81D13F5107B98BC0F0DE08954132C4F8247C52 B0882FB06A7796F187122E9DA24B4F153183391C8361E8522FD4DE35D78F6FB3 98C5ECC0A300C073504FAC8FC7B9AEA20A69AE2CBADCA61742D42C7020404215 564236E4A77AD31B0496E1413A54AE57F3470EFD62E84377EB6462A54F28DD38 A1BA0479B96ADB4AC8EF875BABE6628A8CC8F7211595BA8546C5E61DC6951E3B C3FC4D302C5D93267B7EC40FCC996FBAE7013A2026CB1E59E5CF687CC6314DD1 3C96B352000D20B726458908D4F4EE6ABF0C352CCD241E95456DE3DD86C115FF AED857012534ABCB9DE9895F47BC437BDA483748B7A301B96F1371AB534B2B1E 1160919EC06ABE0C64BD3FEAB8329357110F2C44E25E32B1CBDD4C7DA2FF9DF7 E027D9DB4FF10665E9BB2F03C9D5091DFBA64273A1B520FB2B521F4FB798334F AC2BA1CB73D77C9FF827AEE711C695D3BA18BF77E16D1B0387849B1D43E63AEB 8435B1BFD98D7B2E09B3F2FA69BCA398A256CAF0DCAEF3E17DB8146C94DBB4A5 F6CD8E0C9AB0319BC903430C6E93196265DF8F7AF4B876C70C24B6E034C03373 B95A7C1BEFF173DCEBCA4231473469BC8AA65EDCC6ED436CA370DDB6DE99D441 A176EC13F932A53B7377C7275521A3C023C2AF2224DF9CF9D51F4CAF90A8C562 55D417C6DAB73EDD011E19B8B9C1A6B01015F219F3BC6BAAB8EAE21B826DD481 BB51FDD6086BDA03443F86AF0238C85DCD76ED7362B70AFBEFD010F0A982EEE8 FD279CDC32EC15657496B9F8EEE615C1C21F26F8DBDF456DE2F6070FD6E56680 4A23795A5F1F1E0D3D7F164654A56E887E714891E6A85AA26E172A12E9F74AC8 52B5E84C0617D7A3A215F7F8A024E89EEE388A3587750A221D3C11146C441417 E4D57CCD4FA5723B547F91A151660C8F60768D956E983980B670DDB9CAFCAC43 D761E6BC99711C0A2EFAE6EE3AF85762C3C1C94A3FF9BB37ECCF69AA382A7B28 823C96CB58D7264254147E6BC089789473AB0C872B1C0359EF8EEEB7D4B989BA C88E8DC1239EDD491DC937773144E7AED086A67D0F3B9B704A2D2D9CFA14AB94 BCBB63579E2908872BD9156289061C36448B4ECFCBCF08FB8A631BE307A6D27A AC7359AFBAA21DF94AA21BA4CF52EA94A379907F0D846EC8AC1EB32222A966CC 3E612F06E333CD9792CC2AC9F5067C2DB412EAA329C29E7E8CB8590A831C9740 2D389BEF9757EFAAFCED66991E31C07FC5DFF816F1781785213D442CA165953A 9BED586208DB1B069B409144B35C65CFDA203CCBEBFC1CAB20251C81A8FDD8CF 2E6F4644446D4E00503122683C5BA5F2C853522D9879D6A8C9827C79F77D902D A6FE0A5702A0520AA1D1642A57BF02DBE9B132CAD36E2B5A5C9E7CFD426060CC 0C7B76EA3A62092AEBDF7C079EC1D4425910A0761AC3C7EE23D63C41429ECED8 245C562788AD7C602A756F6F3ED7A7E8D5A215199FD8D0F86F3ECDB9ABFF315A FE54AFAAA78C8768348A69A44190F938065E0B09CF40EE8D0049D674EF573E52 E9748C1ACC64171C5017C5F0A4CF2D280B57DE96ADCF6B9D9D59FFE985D8667F 9BCB9C834E688EA8E8EA1E273D6A33234E5180919497C7C15B710CE14CF810C1 471E2ED7947ECAA411489197170C0344E6E5627D613B68E94955519B141D3538 F55AEC1B79F6489376ED9C976EA2A0F93DC410609A2C9F2496034A626593F0CE E2598D79AA3CC7E5F090554DDAC23E471165234865CF19D0BCD54E62BC785425 5CE42EE7E9B8CE582487DF8D29F5C39C5E6C82880C578D0D4255F809B88E57D1 C4621C6B2A7372AB524245FC1364A09F739ED28ABA438BDAAB6665DF5E1EEFF6 85A5F3B3AE23C93858FAA88342AA72AAF618D0CF6A69C48DEFEC164C88122B8F 9C9AA3AE7B7FC0B88A6FC3427DF705BAC69BD5C956B763D9CC674215CF8A35F0 DFB66B34767D9CAC121D6D0A4804FA4278B47C84630C8BBB5D7A084261B5D3A1 5C1FCC5EDBD181A459B8C1699A405B7397A0113A615AA66A18CD288D8DD36DCA 53CDC23B7036AC4D2C086A43D7023768A43CE7C30DF75EE04485C1BDB6292384 0B58319F76E4E948559B1F1E9C499581ABDBB6497872F4C0C5916720142503A1 310DEAD57C58F3626804B94C2A968231F93932938E6128B2362F5B6DF73F7308 59C892A86EE47C024A0244243FED9EE7CF4C0B8E4C54AE7F8F34E0A1E8E8C00B 3C9A06D326A8E91CCC455A7772FCCE2ECFD90DF18DA2AA0C9E47FC49080AF9D1 C5582DF1C78BB0F5A2AFFFF8AC8C8FDC43B56E01034F4A37546D694C817B6BD9 415B6885AEC37B0CD78A1EE314008F92C621D1D5748428265183500A6E0E1586 BB70370484B8A768A1D1EADF6CE2C1F3B7F551C010E85C1AB861238DC5EAD001 E310FBC1C23A8571236F11E65FFF7826EBB61092A6CD0F4BC659171DE20B7E4B 20E5E006A48079C347BFF2421E9FA78347AB76BB403CE24EA6CE2031AA39D983 EDD2ADEA805B8483114A5D89C7BEA1872CF3F14EC22E4139B19E4F036D595AF6 9CD29414C962F1F1B8DA771062CF1989F1179C80ED7E451BA71461A8867EE668 76ABC0CC3CA6FB57FFB3A0C52C8C81026CCD539102333454270A81F2918A733D B32BC019FBFC1B0982AD4C09E0D09D99D2C95E5060105CAE12A4D5656C1FA762 6784CBBA3038108CB8B99D79C570D0701E64B88D1027CF8F7DD88FA989B9F74B ECA39A71759B9450C18441FB45B430C56DC61C6D892F1455AC49483A38AE28BB E3406C7706C61374C77228A55D2D73540D2184B3D65BECB387924D819B73E8A0 5CDA445769109E7D92F5746FA219CDA1D6CDD7E967E27E753AE0E6D57C4594EA 45E98F210DEE6C7BAFAF51161A9FD77F19E321FB90970862C015D7A3A2FD05AC 97E60AA412C0DBDF8E3D9F68E1AF93F9FA752E4B1C7335B855835E655E89CF4F E35EBE4F587F042C5913A55B37618665C3D99BA072C9E1CE927A0D2D5D3BD3DA 6C2A28FE977F15B89F7892434C238FDC068F8FB4FB64FBE9FB1837A93A682223 A9F5A950BF3DFDA5B8D4620FA9BBEAE87A3FD3902B871BF967E8340E9EE5FA41 BD7C715A32C631E3AF925D45897DB84DC5F5C24EE2DA039109D707A27BD74C33 92375B98DC197839B831E4F36977F420C2A116F010076CFDFCDC723EF3DF601D B742E1C5763A2968F609B73A73CEB5781000A7A1CAB750E771404A8E33972B2C FC6D57AC106AA1CB87F583261A34AD42C0CAB40C26E9C3F910974BF08CA4B36F AA2A2B5E1319E280240B6DB0F48754F7A7E440D82215B96D6B246B840B8C6F8E 844924274FA996ACDD99BE3F399C6AFF2E7DCBD78C7A8590A078C85A84003435 01AC005031DCB41B7E2C59490E62A048774857AD69118432B73134EC5F984F49 45110A0ACA65EF0A4F86BA6A55E4B3F7AA82ECBC3FB658A383DCB4D179663E61 AE6BECD6A16D203EF209AF78E052A711D096F417487D6666DD56F78901AFA300 2F8074F1DAD03160EA142F3FBBB124015363F779B792C2130B0D752AAAA1BDDB BCDAEA07CF7F7D258D0D9647BCCF7E2E0E097E6E09CF8B5C10E51A7759490D27 8DC2F6823035D872DA60687007AD3C830F29E99EA4033CCD90750B594B324585 C871C2F68C8464E6738BA5A493A7484ED821F669464AB29B7D436FE30DB5E396 5E3193A1263B635B2CF16ED797EB4CD8CEAB12E8E7D2120EEF3634380E3DE9AC 35F15B6E33B2BC9F4D2E9E8191090C44D3A16F6931201E55055EC2916C44D274 FBCE91028D97BA7FE0A96C87894A493210540FBF577D0ED477386257019F5DD2 34133E6F599D8819E27DBB56EFB4B53C5A69B55194B85E498FC779320960A4F8 EB48A276F1F898383C9C144DF48EE2F1C7BC4E0BCB381CFABFCE57448DEC84B7 6D3154BC8BB831EDD425C95A0149D175DF346ECE271D327F927F35111E4D4007 4250E487544850D2A6971EF3BECF528653C5FED03594DFB62A115685BE801A26 0BD9C10F3B91C0F753FE3DDE0FE4FCB261380D8BA17B5E301774EBEAB5901EB4 1491F5B0039ED831C903D575A64B67F5F68EF0DDA5AEE2567FD7113888FCCBC4 EAECB378E6A75B0258944BF7170278E49E391116C66A7EE3383AF96A03BF713C 0D17C9881ABE95F89B2959AE12CE35AD7B786E25A72709A23C1F2F38265796DE B93A1EF879DBB1F5E5DF92000D6DC273A8FC2714143526B3F55DD7790C5E3DB8 0B17A1B9FEEE4B2C1061868BA84DDD2B9F0047A2901FDEFC46A79D39B015C4E5 AF3C1AF95CFD5C6788116D8F6FC9F67EDD7544E34F875D28A0343FE3E09FAE22 773DE75726823F018BB5C01F02B52F87A3F6F96A65CC6383F4B73E6F620B4DF0 5EB3B4FE331D5CCE7FF5FA5582FEC9AEF46949751A9F025FA6E626F9EB4B7020 1641CCEFF11E44388BBDDBEDE6D4A08B9D6D3C74D444AC8009D259ED5C66A125 D5EB0DE6BE0340F35BB42E538C007A8E7DD22F41863D73D831EA065E775AF9F2 DCF0BE0CE40F2CAD9C86EC705B7DEFD5D5C38CBEEA5C35C00786819536256B59 87A285663AD695387B37876D46B2B834A9EF105D3E243063444DCE0243F8D86A 96F0323979FF824DF896DE80DFE1634DAF1DF9B9024F3AAACF4844198976E0BC 7C3F6466ABEF2BE6AD6F216744D16DEC60CB0DE14D3AA9CDBDEF8B2964B9E398 C8A59A693836C0F249EBABB0A2E4E7DC011DFE7A4B3D396F01AE3E6A8D40FC50 8E5FBBA5D77C9198709766DC0DCF61B856ECB5971A833BAD3D551CBBA8DA57F6 C3A82A19CF918BCEFB5DA64C40645F3AD11E09FEAE36D3FCF5B4E0D951780FB1 E39BA55253084A00EB0E2486703488DF0F41ADAFC85BFC756368B5169A98B504 18A4398AE3663ACBF509C4824F99DEE56D256DF6EC7594F3147459501D5C971C 3AEC8F62AF82A85F3F55771EA8B3ABCE7F09D2F35D64A490926D0686C0B4E74D 4077A98FD89C3D03D6263E47C29BBDCF2053CD760FCCC6DF509FE289C9D27ECD 3B9F4F555DE83D06DC16D0E41CA36BDE87A4DCBF355AE68AEE71C9ACF7E71468 888D6A9E30B9E707FC1374510D248539B0E00CBB8FEBDAC69D73DA08385EC706 67656E14D4D7AF4728C22C676FA6F034D594A862702E323E1EBE64734E35D945 A44AD1B471168673D663BC1BEE7FAFB2EFC727CE2DF663D0815A8851C4E85412 490D527C7F0098319804C7C4370C5190F74AA8829250D6DE4B99BFE9FDD06C74 638BB1BB14018548C6BCE8841742EE71F9B170F04D9A546C4F402B6AE30E9E29 737DC743EB4CD02CCF60781B54F8C2DAAC1D23D964B00FB2E685240E829C07F1 736324AB31D8AEFE98EB17D5250C54D6FFB5E084413FC16731D9FAF98EA5DE0A 9A44760E4FFEEFAF2B7727F4255E0CFB8C2C7CCD1FEFC01AEB0CE7446353A3A3 68862A512BB62DA0744A175EEC5D292A0A5D944645A629D6DCBE592A87506FF6 68CE3FE812AD5A89365F1D58898DB88A23964BDB499DFD0DA6C407575759410A D1BE960F9A7577A4BA2F3EFC3DF5F9C35BAB7C95B8BAE6A076181C718EF3E184 E949BC299BC4F6DE0C9BE9B6151B074A8F6E963841A78070FE534D99C0083D32 B1755B2929B76549E55B0608B678D1649F345020192D63D25C42EC2A0E814FBE 20B3BBC9C6FF94FB4F5BFB3D1543573FE6A606F682DA14425128C7199F913808 598A4C0D8F0CA2192AB74BCF1AC0C742B33AD20598F985021EA39D6831CF0627 B61700E774B930DD15B5B0F5CB22C396B33A09C3472A99460A1475CF47F29098 97B6080808C887A6A08EB7179E2AB412FB017C60179F204B8A791BC939964F69 CF1F663B445DC7A2901A3E14F0D337D81AC919E0955E494390154DEC6B52460A 244031F70AE243FA745AF01EB4C6106CDBE25A35961D1E92428EEE81C7E14B85 C0CC49DBFDE526358D1B2ACFEBC75B874DF33D79E62CE357C0A8FED5AD1E0DA9 4262BC9658CED06A1959272F98B30943ACEBCAEEC19FA1D3CBA47EEE473C3921 405374D724EB7205641CB06DD0C18D1293F755AEFA96140B00FD19904824241F BB1C8E7E4CB9262BB3A43F08E30D9A58A4B29AA137858F235E37CE12CB5C3865 521EC0E614A65BA40042E2775965647F09F7A6F5CE1B170AB6302A43D49EAA68 2B8173B6E078F146FD87DF49D1D1712FE2040AD679132D9D5A4CDCB93477FBDD 92A147206523ECDD646E328D62ACE762F6B765FB2FBC6B68EAFCF22B12E2544D 6B9EA84C968E81BF98DF794D35F5B880647399B97A99F2579C48721C53B131C1 05910FEB726359F6CD1BF3EEDD9A5523114B02901F0193F900C7D681D8379872 C4358A540BC683D07B8D59673B430FBEBEE09815D475F4EBAAE6EE0BCE56E48C 3BFC1F3179BF3C34CBC4EDC06676B629950240CA16053ADBDEB5DBE55CA1DE0C 4FF67649B36252BE21280C39E8A2B7C0E920D6578BCCB2155E9A5E4CDCCA7865 1F2FE5BE1B42FBB36D574EA0A83DD8AC5CDB2F532C45D35E28CE1774F31FF1F9 F2A4311397E122D74A197FBDEC00987647F7EE31745592B4013A09B415FB4DF4 4B109D3FFE4CA3B86F0EBCD47B2F694ACCC711BB687688A91327A7AA5795019F 6DE00F27B7B939AA84318F6A611E22F76407ED15D2FF118F367D539697F5FFFD 02F8E9CF6A65196FDBA21B68DEB3B71A813EADB9427D7755263BB4ECDEDC20B0 7CDCB4856C226CC6DCA605C67A2A156972A13A3F0F3E9FAF80A9CC85CCB2DF31 426DFE301673933E775387E1ECB3803EA1A92D9605745C58A570EFFE3C31D0BF 8F6BCA41D8C0DAA9251AC3DF2C069602622B71A6CCE0302D69A3A52A862CBA50 5F6B3E27A74CA72F9AEA4E0604D3A392AF81D081208E5AE6AD18AA87D0F1BF4F D9DDF74D8785F5F46AA27BD14A884EDF0C30764D51D5166C979E7DED749323EC 6A1446A3016E9640CE044FB86E16DC1E91B03FC3254141583167D8ECEE2AB312 8FEC0DF4CFD594C0141A9A3E3A06752D4F8583263E085ABF42AC07558EEC9163 95ED009FF79689787822CD19E73DE0629B1DE98EAC36784759A414759DDB27B3 DC259AAD3D4F32D7DE3B8C9C3E5A774F2D836D444A651E5EB2105F4867FD9635 21EDD0CBB2F260B7AC75AD67FCDA2007C7F661CA041996F08CF06B004F08D879 DC97C0EEE663CFD450D40BE638727B33CDE115C76D4C9EC5544F3B8F4D4CA21B B998C85BCFDF3C9F5175E42105A532433720048DB4B8B2BDC57C8CA72FC95689 9E740ADF171DA41C5532F94A105EAA29405522EFE7A2B784265EB65D0D3EB619 80C485C4930B3953C0807B3E840EBA4B1E476092343C2C49F94397CD6D21A5EC 1636845CEFA04305DB4151FA607E57C22EEA91D41B30FDEA8CC199686047C76D BE96E45C91B8CE0DFFE1EF2440748C7947D88A1EC387508A165C0E4E6723F906 D30BA36D10FCB1BB353C9A91FD5CA867068568A958B1E5E863404542E1C6F095 1728F4A931AB38BA5869EB07F628EEB03FD24F8157371EB4FF453E0A10379F89 DDC29CDC16A79670A52D792A6DDF36FC07BCF6F56ABA3992AF03A2A7C33A80A7 43FD3D889F21519CA704CBC2D55BF0D6FAE15CEE9AAD6FE5C5C13FACF7396EEA 8BDD949E3F8F4078C9F08E1086F8936102D7EBCB8609A8EE401A2667C1CAB201 1272D364BCBAE4A99C10B7EAA931250692B5A09C425CCC62FA2202AEBCFA554D 0ED0422238B1237C667A6C6A6DFBAC7D04DBF7AB77579D4DB447330D8C25735F 7EAA0A3F9A614F5EAD7A737BCCE35AD31448A3485795E18E45C0929BB53C108D 04F5567F51F9473893DBA69BEE72AE79403C2E35DB00B61060B9A0DF57AB3E4B 932301FDA248933445E1ED5D98F7764DC61FD39B7774FB36186CEAEBA778C0BE 1483432240F0F0874ED8D6E8FF6C1B5312CC719CE85ABB2B292FC273CD3CE0E3 58B1D9D95CAE88A7BE9EB3D9EF64FDB0C170B75908D8C94BF16D83DAD3C5045A 6F32D6BB5D80864059C4764B9EE2BE08F8078E2331A2A0229B50A72CCE3BB1C2 4CF121814D3C64ED554E5A726BBF760B2A1E3CBD08E8B2FDCD5953734ACEBB33 B7DA089B5EF54F7F9C3810DF01720D12367A417755D3D25AB0B6F99E779F4A8C D31740D54F8DB19E24A91BB79B2D0EEA82E4D7ABE0F9A1507E54EE349AA3ABF6 F4C016928F2E36AA446D8FB2D3B3E4EBAD72C666892A51F52EC35E1C48BB4F2E 6D876428BFCC80779C0523D95B9051AFD53428C5CFF3738A40BF7D2C3F23E0DA 1160E1A2F7871412A890876D1EF1EEF18BBEDC77AA601064285FADF3DC5B25F2 0126B220632B2B752BCD25B1CE0442988F581B80D0562EB155C1C188BC7E364B 83779316BEF11BCDAA329A96BDEE099ECFF4E8D7E260FD2940C1643E0D4264CD F2D76BBF0360A104500332F997A05D3AC776D207C4176A3D202A9FBDD6E61EE0 CFB68A4A66FF0ADD5AA3DA3883FA6382E97BE51D9D09F54DD261FD2351FDE707 5D5D58560C5C7FA0F1AB86EA180FEC49B22E9E02CC2DCAA88DFD316B7DF61ACE D674C52B9F5ADDAEA04A2E685FC3BC2F211C4942BD110785627FED2D502184AC C49996A26AC81C43BBD517C17859F49D0F72084DD29530290A5DA8BE90B3A023 A32D39081B614416A0411A553641E0F8A3E73149985D55B8423DF30A73EEACBA DAB23B573B458A570E75FF13B76BAE36D641B5D322B99F853DAA2E0F6B7BEF11 2B17AB158F6E91CDE19D72C095BC98C213CDD4160ADD8D202005B314C823B40A A8321CADAD0F90C95CBD5067F9C272006EE0899428401436D2C50B9157847EF5 EC0F2B94B04826D33B68B52A4EDF23BF478BF8473FF791F9782AA8D0FAA20476 0C0DDF8AF60780D1FEC961A2EE3414AB1E2BB411CC93F28ABB20FAA368F6C0A3 501A34C63B73F4618E20BA2BD1E7249F5431115C10B5CDC592065CCB27306EFE E070B301A8EE36C544D15B2E35C72518746A6250F67D7766C74A26B77159FA09 59A5DABFEB78ED1CB4CFBECAF343014F664979C4681FC920706C93779B8478D8 887205FE9FFFF0E130732E3E418A2931CFD3A1CA6A0ABC247D54531EE64F03D0 CDDA9875FF295F556469D0AAD9C88972360A857F366DB669AF8D3E859655022F 09470E8819E9278FD358C92FCB4C9337760C730DA81AACC8F5B0AD0CCC9C347D 4B07803D64B2C2CFCB7A0976F4F86CF1C2167B355EC780B9311157A2692F2A12 7C3986B9309047972B409995B5EB6A880F09CA822F3EDE7EE2FA698AC052F390 635763D3C3FF3E0FD23470EF635361214743A733FD2B81F97114E7988B635356 58FE2143DF28E78FA1E2393FAD431BF2B30244277176C18D40959D59242B66DA 32C56B75D1F741EAD744EF84486D97E7C6E4B6A3BFA790E81A3A7411451EDD2B EFB4E5096FA59D91D363D6EC5491DD1B31C84E648364A29D54029D08A01D54EB E16104803C81F61115128BD3022F728A9C900D23F287D3A5D38C23C628E1A2B7 FB8D52CA24A667053E02CAB57B9DC5BF9816ED4F7B6C42D7524A56C88F444717 65198CF88FBEC106766FD8D77C9AA29B751895F3170DC74F7A0F0AD8F9DE2A69 04D56F5CD6AAF038765B29584F22D5DFD10D7C6CEAFD71AAD5564ADDB87FC037 EE6183A134CEDE2BC9D788882E9BA2544E1049DF4FE3D401F28ABA9F7039C3B2 EBAB6CE5C972A96414ACED753DDD2F4AB9BC31168F5C818C637D567E55E2F1FA 4AC5AF8514D26F277CD23AA9368BDAAE4A34E06AA8EE6A129A14AE2D9182DC00 DDA6F2326AAD4628E9614F5D4938BCE392B7E62C25AF8CA4FCD9C9AEA38BE016 1E84AC918939741975767BBE4F591737318025946F0350F376C94EA19B0E7DEC 9EBEFC01F88CB2F02112ADD7C91A19BBCCDAB4925F88C072725355849EAFF618 2B640C00C3733A5FC4E99EF92105C4AD9A80DA5F3468545761DFA7C418CB3FC3 C1AF8AA54E52D2F4580CA3C002189473877EA3B67C1B101BC74467190D3B0763 AE2E083E7272DB3531F388C8E46FF64199038C006B91AAB1A3A7B69DD5B8E804 0D6B7DD1C0AA9AF0470112611C219DB6EB965D8955E17049E869AF2E0BAAE4B2 493A944D30D3B9EFE46ADE06E35502274EB9AA43A53F89CA840374C07B865FD8 24DE45349934BE3B9F948455959FDFFBDAAF8D91CA46F611B7312F2EA297E260 5D52DBD12C949EDB1874AE73492A46C12AE1A1EF8DDF9E0E23FF5B278B03E1D2 DABCBB5477359E45FAB591C706F05B80CDE729F1CC8DCE507AC0E5F226F06E27 1B2F83E29DF92763D50B92274E1F35429B3700454058A1308CADB6B7644C5FCE D779C7B582438922A9DCEA130F0A76C885579498B2F38C016D476322C23749EA A2DB10490A786E24330D14DC10EF2A2F769164BD20279A5EFEBD622F3F4E2F5E 62BFEDDD65723CFEEA462FEE5F9CF7029EE2A98BF733281D0B0CB7184D3A84C5 15681B8F6D7A9DDAD982D51E7F73D44D1300B07D459F08A66754FC8ACE71235C 6A139C069DE7E99E14DE8E978A785F3516A03BD76BDD92F854AE08B04B4087F3 558F8EE7F83588EAAC9129345E1C69806E2779F26FEEB3AB9FAF2DE16213BC27 7896398BF92A88EA4A8DC22647B62DD5CA75523BBC4A8ECCA913800CD804E1E2 210D5A1FD65CCC845FC24586341E18A981F9031BF29BFB44928B0E260C8390BA 281B5ABD7AD6F51F7B2E1F7F09942940135F426230632EBE784981E4B38EF29B FC1343D9B49E691BBA66D5AAE8E884A8E88DBC6AE9A87B97E18DB5AB5A060392 EF8D75404C40214DDF2A27B97B53662D290AA9CC9AE3A6F25FA3ACFBB29945E2 830BEB67B2ADF261447CAECBCAC233DFF59A25E99F4DF405A8BFF2A93CC22FCB E2AE713DCB4C38978D5E24E6545A943F39F717FD23E0FFA55F5830BE4A26802A DF3096D18436ABE4B5E4F198991D542DC4829405CED4F8532BEB6AB6806CC6CB C9FF6B2D155D93707547A26FB4426E0260AAC713A7FFDC0A598D2EA8032C7CF4 E7DE6B00E973A3E2132C18CAB0FF67AA298E3B9022721850F5F9C35977CE6835 B85D93BAFA7D70692E6AEB04EAD8BFA2531C3A7C8A027F9A6BEA765AA157EE04 98DBB573BF80E25FB0EFB2149A2C14137D2B3A256F7016A034DFBB62A66E70AB ED3E3C3E336D9310C06F32EBEFAB0708B439E4B8ECB5DA36C6897C41F34F1D12 5DCF9C6D201AB543F4E961AC0A440FE89C9B06BFF0FB45D800B94CAE28BA1E48 85DA4C88CB2571520331F2580C5AD227D12553B55F45ECAC92245A5642A4F475 9B7DC0CF35BAFA88069AAB2522DE5763A11E84A97695147C715B78E0176EE840 CD10F7D658CC87BBC6B05028F0CD3E99F9D17F547F9813AFCE475436C1749C64 959C092E5FD269791C8CD2A99F679193F5A5C1A7FDCF671673F567F2DF9E5A58 94D97D9CA6F8DD750A5C5B7477E824C12384050E6489C65709481CF8E6543E11 F8142D0D66C965BA56CB43BEBE4A098F9B2D7E2C613ABCBACEF7D9A6FE7375EA B3C7CAFD8F136E4BD20B96CF661201E4A9B2040FDBC37C8A58804C7AAFA29394 DE29D02B78741A2027170011ECCCEF7494FDC0DCE1E0159E3FB99F7CF1BC4BAB E5DACA85881D1BF8A3ED49768C8D9B4A687600C17C49F1E526C3068FFF057BAB 48CF397D0E2B7109277E1180B501AF152BE8667251CD0491A563AC528D861D3F 5AFD38410C0ADE08EAD84014BE4E1CE46815D2665A1D0FEC06F831F8BDB19BE1 2351A0F5BF0C16E1892E75C865F72050A9EE3713F2408ED5525C088B1709E794 9A82B4A41225A27316B277D65A36CAAAA5F7ACEEE974237052AF7295E1B9BBFA 8B6963AE118EAD7290CE8B1F206196D08EF39C02F5475210446E06BAD2A8AEC2 5724401CD25E4F55BC3C18C3B10E98C0C3417B4B4D78C665FB6428794954E34A 68332E0AA91995559ACCD189DD514D18C4FB61486C21CC05DA1CE1392F8BA88E 6A4B2C1B3844F0276285743029C8BBD2D9619B5B6019E15EB26C949F337323F0 CB30228DDBD4FC6FBEC5C82E1D15851EE20062F3B31127A61248E828589D0DE4 0353B9321289599EDB0C74AF4EC291CBA41EDC2B2E7343EC21ECC23B6E8361BA CDF92428ADD97E684CDFF454D543701034DFF364B74AD2E4DF339CF8CEDCED56 3636954749A4E840D7B8908642817B9E615CFD21DE0ADAB8BC46335041AED832 7EB7EF006E33545471420099552678FC2101108589D2 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.0: CMR9 003.002 %%Title: CMR9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /UniqueID 5000792 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR9.) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 14 /ffi put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 121 /y put dup 122 /z put dup 127 /dieresis put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D 2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA 700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C 4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F 291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB 2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E 2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D 9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B 42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D 07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A 31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E 44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E 24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E 75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE 53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F 7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD 866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B 40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B 14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B 9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F 289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE 67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF 2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D 064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF 1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF 01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C 40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C 72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC 4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F 852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C 3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD 855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE 1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C 1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C 552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D 744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 5D207125947C3797DDDDF27B0F05D69411E79DF1586378263BE1BFB9863BF9B1 B2CE4EAEDABE212A040FCA30A5AC8F758F4B543CA539858D7D2DA5E8D4AE8343 DA1C74EFA3207BFD3AAF761712526884385719C5B2B1C3C2A125975270E98803 BE1717D7FD9500E68B2C77DBDA49C6C7CC468986AD847D5976FA7D445365047C DEC7C2EA876A6D2048DB062B6682A49CB88706982B6687B8E51E12F0AD378B85 8DFDA6DD200D31F6BA872ACBEBA94F1FE5920A18A2F17DA30AFEB722FEC5701C B3691A04D0896F1A60DA20C9BFB9FF931ECEEE556BCC9C4374EA6B2CC21E5301 C5B8623C5878851857B3E665490A7FFCE5A8DC0FFCF3D56BF55E4AB2ACC6743F 4DE7216BA87F183CC0CA3266EDD52D3A8681B75AD590B3989A01A62745ACD499 17C30C6D5AB9B7AE32D938D2A9257D3A4444614D8DAADBDEE4C99F4FF66DE769 52F52733B7F3B44F48E7FBBD1038AE21593A5B8B4C649ACB5F5C66A5E4C7CE09 E8530FF9E9E77B6982E21ABE6EAE47E2372B4552D66D2C141237569D7CE41808 CD3259B7325463CD9475124A0453475186BB44083AE9262BD5EBA8E709E36725 A1257264A4CE1F08102F2D4BD5640F758B4ADA3F4EC9DBEC4063547AC174E81C F88EF1B4ABF1EDB4C6C94053DAEA20D3B36179F1490B23A95AD7CA9B8C5E797D B75DB61D83AF76F0EB2A612502CE147B11579A6C8BC27630AE14535C0B77E4C1 06578A1C23B48A90E2E786462439CF2CC73F89825E5E7B4AE1245E300CED4B30 C9EDB92AC36F7DFD0FABD94996A0D326D478B7783C87AE473351ABD014CD380C EF7BFBB68CDB7C90D1C85A5D96C622B04FCDDB40B675F081053377364DEC2F69 2FC74AE7FF1F486B78D68E137D1E6B740311B9F339B2B4830DA2FFDD7B721978 DD641CDF0C04591128628EE46E65F4C501E208857CFBB6E3DF0BCCEA8DBA8AFB 3129A508F54655B5B47DACE807262DE6F99F755AF5F1C05B1237C7D010056642 702A4D8C1A156A4B71FF31B02B6DB146F4B358C2890599A3C590E3A7C5FE2404 D7748075F07DFD48CEF6189F15C489FE93469C707D8180D4F078B87930A6D5C0 E60A207893C1A4FCCC29386254DED7C902121055471A218E4C972085EE1EA6C7 F8F416770AC1F98F12A9E59DF18C612471DB3C8C771345EEFB47878CC42CE433 0BF181E419EB38C7433849C02805E1C56025C2A0C30E35C7B7C1D182C9CF7D22 D4E5286AE31463751E9FBED42DFE16DE3909DA1132653B5FA9FF78D86334C0EC C06D2EC674DE57347CA87C9345F7D9E3B20D36D20926718FD3762B8C104B89A3 7575171281D47B62421AC3243AF5F9D51A4E976EEE3AE07442D24BFDFDB28A50 C9F72B9ABA68B9495E156D1869749A5DE13FFEEE969EEB7F6A2B39CE01BDF946 3E1BB4D2CC4B661EA30107B2945D18085D91ACF2036EB46649337914CBEF8E94 077222B339700B84DE70CE0D01A294276F86BA9400696CEA6F807F2DABC31694 6EBA4034A7FF763A522C2B09390AECCA59FA67A4D1A70A60DBB15E19968D6616 2ABC78B2E9E3FEBCE28793C40544A989869EB84A0148542FBECDE3EE45019BA6 FF7DF48D6C4EB8960863109593B5916B9A2DD56EC0717C3A40790CE64065B6F3 1AACF8562E1D016CFFBC57A60E4C195C3C0D1442D4C7EFCFB25CA0D6F5ABD046 FCD1E586842FECCA7D4419B8C988456CCCA4553F7051FC322C38B22156780F11 3DBA3E418D394A00F12B01489158442248ACD2A797A3E1084B6B423935854603 AF41EC8B547B68A41FC346A1490DC711883368A40C23317C6A58B053EB63E81E 92C9369FB88B2756D5EECA0A809F8EF09B3245C968922F71F5848DBB6267E9D5 8963942EBB6CC8FDD0E0E6A8383E21C98CADB350E8D90E4ABE3599210CD4D769 4F73728D4D6A4223B208DF9EF5BE90BA710681C3BC28000980384C869E87BA82 6D0881E6FB951D2E9194AB6CBD68417F1391AA32B0EA703E6EE873EC04657235 C2DE1F22F3AC7AE5D597D13EDB6CBB702FD120FF18B9981671983B8A83BF9E6D 8824B9D57D5592DA15B29CA142C7BB2296C59671E27A4AE50E9D3D2427FBA592 BDA358B1A86F25655606191AC5FCAA0ED19F18081DD3457D9AB5DC8562E700BB 3DA0ED0FFA11FDBF711E63D70683C1939607E3A9592CF086C4650AEA303ACE98 75645867D0EA3446F4FA176517141B75FA51F69D5442874EFDD3D7586D95E7DF E70FBD7E679F03A8E2E4C8C268CD84F332FB505DB3A35DE963CEF8CFA34D66EB 44A4B63A6497C0B276424F50CB186BBCB369B984A5DEF54CE999BCE6425C6A0B E4F2A54569A59D638F46406458081B290E073B8A067D9B83437750F08826EA5B 60E7795A4E3B234FD0DB31CD4F1ACA9704215BC584E34344215287B25BCBC3FF BB52523073B979205A90930E177C708F0F49D5F207915DA2F10E46CF71C05A7C 911225D77F402626B033126AC26EA984A4660F22D390595911A900FED0368CF0 DDD078FF2E319A37EB5CEFDBF36492D265A37D8F00E9F582DD36C1D291666192 AF7535A991FA745849C942A48B0AFBB54D9E075B0E1E43F5C0C9BD8B92F63895 47FBBC6540B4B08872FB50CBC485E1D342E15A3B21E9F636AC58B04C89D5A9D6 3C55A19F056DFA3497CD19F853ABAD7378A8CA601157274EDE2C28D6E1253BFC EADFF35DA48B228CF68EE00387B954DD1E5A2BE5E614B091C8F36F3D19EC4562 72C14787CAEF8844DEA3FAC5AA5DD7DEC1C1835F83616B6AE8928F6968253E9E C0F9CC0C043F591F76D5E422CF682FD5248830B70FA100D03A7A91E772EE2A4C 9003BCE0AA56F132DBE7C8F0A556B2DFA0264A605BF4EEA5CE458711C3C9EB62 7943E031E41F311F3A98954848CE9946BABFBBE1C91F2BF9A43A1A533FE3281C F408D7B4F989219CED5B02C354A8EA2CF43D6A7C877999C5F56B0DA66152EB47 C2EDCA7677764E30421B0FD16CE375A042859ABFB4BC2CD8DE59A72B9882DD5C 1D1CFD6163C4CA1AD4830FE316ADFF7F4B839B58FABD44AF59232FFA9D427EB6 98B1C79EA6594EFEC4C0CBE41CAEAD6A4714069E1905FFC25244E7590336EE91 AA451C180127B717F7D595F04F46C03735D1C3FFAD8433B57A63C1E4C2321AE7 8CACCC9E9D5C84FD660BA2B6E49F3484039BF409D95A1DC11769220726225269 F177FA133FE2DD06C2F2682E81C72E3A9A0C1F6C63710AE589F77CF51C3F6EFE 9594A09814EB65E7FAF0CBD52D1B747177746525CF9B43ADEEB691AC73BE98F6 5CE82E74ECC0763BDF5775D56679158EDED7F4157CA1B8FFABA285A415E221E6 2FDADD44E35FBCFB974D4C77381B020A8B909B704D014D6CA3B7453E8C2B7D4A 1554AEBC784CDFEBB96D12FB55C866FD2338AA5548E80C814FAE95779D89CDD0 F2D8A7F53E3A87D4834F3DA91D7985C3FC819E0B85630468D231DF31FD74DC4B 3CFBF35AD468B13D006B90F7ECBE2EC5FD076428B23BD81A4567EB68009F4BE2 579169EC21824FEADBB29045F934B1F01719010D3ED1D7125C10F04D79F9C991 1B1C1537625AD134635D84D9505BCBD305A922924E80A8E59DAF85DD41B02906 27575926A7AA84A5E965C9E8C7BBF03355F6B9EADD0A42DD9D86B48B48606658 EBC012471E0EC4602D7AA9B6D759073759A93838182B39E43519D7AFC1B53470 33FF34025C8CAF5C9D965C4544907E63F5B78D082890AE3809A0084305994178 ADF1A496C53D8598D7A5EC3CE9A1EEFE56E6C469B1C0F76F5FB588A2B8C5C041 08D0DBE741CAD67736799319CB4A3B2876B5A1D90D9371B8F05F0D1203524A59 01B15B7807729F90214BA1CB1FCA94642068AAAB77A79DF221A0638DCC1A7728 5EDE6C0F3E8D2672CD950808FFC5B93C89C9A77A18D0B554DB823F5C9FDD29E2 9790758AC03830BAD321285962972DD58BF36D88EAA5ADFF3D132D5AF01A5DEF 1D3BF2B625D3A4C5717FC269C11EA7FFE94965173CC136C5DC6DA8C599504DA9 89DF8AEB19E7383D05AF90AE7C1FA1FE0789D65224FECC8A437AE2E1FA698669 F1A5A15C373A9FF8F4B47857A0FF2B2CB642CAC7B3DAB69689479FDEA4B26B6D 01CF4A76DD9A32C47D8467B962ED4A762BD672BFD3C99441106260A99CD8EBA8 9D3CC72ACAD57063F0C1F3738ED18E5F205ADFBC019C7B625EBF15D55BC4BB7A 590D2D15D5B3B7A463F3F2DC46DD4C9BCE0CF8C7E5B47E7139E7AB354C2AF66A 2B7616DBEB6CAF7219806B73ADD1D1917D5D547E26C55D4B6A02B927B8519E73 70CD04650510449ABCCE0E7BAA08F7C623C508E3515A5A32B7CC008B32B6449B 15AAE7490D332BAC4C6F8C39B705D2CF810ABF23014E04750BCEA6826EC1FA94 811588AFAAD10E166DB6CF97066AF9A78553D3B64BDF9A3E89DE1DD85960CEE5 3C2CA59FD43F3F3331F6662F92CB63287D9D49F7E0F0A85AE2B0C77B07205855 EFD8B63A15BE710DCA3E8EC62608B13B44A886C867F82B98A0E5A7BCB6BE3893 20E30EBD4313598280E73E1FC881041D0A9884A2CC660CD813CD4694F14EFB76 D587FED979E7EC3109CD33D3CB32808174D72C7BC064E1C29BDC76CEF76E983C 4E6440CCEE6375A50C13C491A526CE7F21F6329037F5623E12D9C31486F11194 61A2C21D7F94918F46A9ADFB58DBB07874D71F0534850EEF2D1D86D3E1DF6EB2 A940E40E9A30FB83B7636E850BBE6D6D4D6804042C7959E9AD86ED56250FDBF8 3A47DC41A67095602F227F7CF102E58015C55317B6D3EF1533CD1A3C96F4DB9A 0710E57C3F93F1F33992AB4024DD7F4EDFD56B4FD48F5BEA3ADDD38E36AA0707 D432FA4CEF3291EDB1EBF3FD95C829BA1924733AD199CC8C51A5CE72140B4330 2DD946EADE5A860A43D48FADFCD084B4DAFA74AEE4465C910F9478B0CCC99F56 DA19C05566AA7DDF8CA06341E8B320A41763E4303E518D43F36A032BE3180E36 EAB8F0B02AF390A9DCB764F94BB751DB0AEF1F2EAA39D7562227D45F543F4320 D0F34E70B8854BAD02576CEE7C320EEA86BDEE6B6C3B2F75FA4782CE95E68E24 63959E7A86A6874B09C18204477D821FE1D96F018DCB2578D11BE772DCF52FB0 2407A75C799F56D592EBDBF85528062D87368048807B1B120A9252B345F7A533 393865F154659F06F83CABF7B2DEBE5EC4E202818710E7BE8A7B3E96DE971E78 B084E49CA0266C78991206B5B7669C8D8172E53BE579653356FD4D8B23FD51FE 4D2D3FDEA114F232752C20F6C0A5BB478C39AA555DCF646F393724215F53E2E1 852725D9B71D879C5BE65D1C79268EF917002E5E01B67DF000B0BDB6C95250BE 179E279125A5FEB023651682B5976A7F0CBBC3DAF8E3E78E1FAE2A1D00E810B0 4F49610F28309FA7F6CB660DA35D957B4DBCDD7889CDDC4BFE2886261B78C6E6 DFFDE771DF926943DE183195C38C8396BF9A1B51446B4F46307BC9ECEC1AD96C EB2BDC48FDE9A20458B7D6FFCD729CBE44EE3B4DACF77A9A22CCC2FCF1A0B58C B821BD88A999DB3073C5A9DBFF748395385701AA4AFC353F77DA910C49AF5C7E 748CE707F09D164D5B0C3D4B6FE445EC0DA087A4A476F14733B1DF6DA56636EA 59B97DE6CA1779FD9A70F00C801BE6CE71BC12C39630E593A8C9115184D162EF BD6AE9F22BFA7601D11A474EF4DD48CABD3CBC37359F877FBB1C085F1D103F6F 89743D6D7BF99B6BCC1EEB70796AB6DB5CFD436FE6B0521E392E56B13D96BA6D 51F120944F679A2FF4B98B9118A6033C0B8F1E773E705EDA7A028AAC315C9BE1 6FE0B997FB197257406A808FF7635042BBF09B3C3FE30329F6A5EB3F515A7B8D E3021F88EFD986B5D9C1B6B1402A1CDB0CCDD5ED9302D530E6A9F485156800E2 EF2BACBB2E879C88BFD6CD25B4CC1AD71488053C4D7A2AD1AC7C834E3199D699 1B5AEEA43B6D0694422C58BE06F859C3B6AA280F90F6AB5ED90D8C5DFEA59102 F75D76D37928BA6702EDA05B4CFFE9EB8ECC1E33C8956BCA521F902A6B819E06 DD585703E1AEACC6BBF6403B7906CDB2C837D9DDE5517D0EB883C7833763CCC4 5B064B684F1C65D27844B42D86A611ACD393030366E482CFE2FC35BB0E9BF0CF CF7D6AD760E765EC96FF02D2ECDCBEB201FDC4D3C37BDE2AB62148863D0C5B56 CF965F42CE0C6A1ACF57DEED760F7B155E40E765D119D895B9F4AAD107B444D0 BD9B04E2B978321FF95AADFE249794C2C361C2A249D6A5FBD1A1CE3F545DECE1 32191D6B8F0844D4177A97E9E2FC8B5DFB17F821D067FF0BAFEAF0F06B1DD1E0 7B108EA2EDBA87CA0EB0B322FEDE7C4A0C83D9A7B348872DC4FCAEC8719C1FF0 7C8C055A493150D8A83B50BEA75624070D508D9F90DA599C77F2F197AA4765AA 15A5359EA8DF7ADB5C5E9B44D3C0A68425E2E6C190E8710B000768DCCFD1FE2C FFF4F96991A772B7D83DFC097E0F1DC439E3DA8231A7ABD4B235FF13AC7F178F D0281CB0373B54B48A33F3ADEB58A65BDAF824D1EF631AD4F37289D44B992D0D D282D72666858F924F74AD50806CC64099C3681674554C32DB66544DF740707C D152550640B16E3116DA88EE06FC28762A90981A585752D89F3F8D8670AF5EE7 85816DEC0A2785E4E336BEC2E31947036C50C72BC5A5E23ECA749937BBA896B6 A12EB9DA29003465550C5C73D8A9AE1885C5A0F21868A6877ED807428C87A60C 028E2E8CFB2C152855147DFAD391611C20047432DC92FED105CE6032FBBA8EEF E07974CC065E45DAC183176D6279A0271BA0433080586C8F01D92B531F34ECEB 6EFDA37815A79B4AF8E35BF32937AF88F7160CA68169C7E272E394A4E6AABDEA B7B5A21872EC5AEFEC5E31D4537A329AAA92C4031FED90EDCBD09E0FA9529788 A7729DEEFA4B4F833816C25A7ED5477C6A870F952CDDAC72B754FD17F8163ED1 91A793E2EA0E731058786B1D3F56AFAD267C9053CED438AC07B5A85E701400EA 39E2A786CBC73CC0CA8DF687B9406AC560BE6E300A5F75B2EFD0D22803770A77 2C094B17DF809BB6B9E4738770CE38419005EA41DA47EC6FD4190ECE1A00CC6F 8167613BB854A5AB3BFE4218BD8421756C5A6EFC3192DE2075A05E067761EDF0 082B74B5E40EEEE9FFD3934077764F9C5B3B980249979D44095B0E25FAC58C22 BEBF07D47A03C22CADC99B1BABF935D069F5A742E468588D762CFA7D8A8426B4 DF7AD59EAEF4691D7ED04B8FC95CDE6D2F56335B1732106303980E5EA4611AF4 83C15C8370727C7416E7067BFA424F34CAFF344BF37B0CB881D39FDA55D0C3C6 3700835F90CCB7950D6843D81E3376C3D86C072A56451FC005B51DF796147E59 619CE15559856A88797D75028F6D7B7A104803D9AC695AED28E8B7D506E58AB2 7DDE6D07CA367D451CA83ADC20BCC900DA73F9CDBB3ED59784ACA3F8B90588EA ED634DDF7E49E0CF2D9557BE0F6D274F3983273664902E1B7AC7391C2FB9E041 B0CB8C5E5DB1A5549253F1DF1D6325398C7DB3430827B7A4003F680BA277089F DD753171869BAB087A872C035B3BB98FED046B99442CBD6B34E236558083A035 06649442C070887F679A7621CDA7F845AF298B63DC08DF2F53CBED7B5189B084 C16EC43AF59C255E117D2D32167FE7CA9A9AE20FA03541678A11E0E6A77AB3F1 77F1FB423F1428C42420AE760DA64F10052BC2F6C1D4DBCA9035E83A0D66FC34 482A763D0EF48B7386EBA25035198904978826712FB8BF9D6D5ADFF5FEE33FF1 E1DF2B3C427B7598CE733D8285D21EB78A3C4383FE7E8A2833E607D5B002AC3E 2CA7F5CCF0F51B3643FA423246819DA346924EA4197F7CEAFE2057226AF9B902 191145EAF0A576FACE3547ACDE8197F9330BD651D17FD2084FEA438716498CB1 83D8FBC57FC6D947ACBF4BD54BA673A708F5384A549A2C7523163D55192A9A19 C3E1A2A102DC993A7D841CDDD53B1F902FF27B1DDA580440087DFBFEB51C2F5F 4C48BF0484EF22A4C18B94D7276EB12E5AAC66FB143F7A95E30C7093E3C17DC7 7F10A7987B0D790BB76EE33CF6473502BB320EC865CC834261277828E273910B A13D3C69D5CCEB3E8A5616997690C6B7B072165420EB33A187D62B0B40B29FC1 7AA00DB5DCE46CC4BB9F7D9B6D47E7F17F30A494B22BCC42CA0254E1A28F1BD2 88256F79990B42BAE579A7EC22CEDBC33FCFA9BEF69E1741D9477D7C5E71CCDC 731EBE7F1C4692E3D67EF524C6D8D48EA6F21615FDA3D41F5B71CB6DBEEE4AD4 BE78920CEF6146C4DC36D0B83C2DFB9C792A96126A7ECC5768A82D051D5DF2DB 7DDB7EEF8415AAE62B538D4F809FA63B202E90D37174FC7498556857A3203842 B602B51FEC216BD3CB9A98A15D66DB82C5EB9357716D2B03920F9D73BB69BB99 838A9FB89EC3CA0B16CB3A2E083FAB859397250D3A013EE09D9983957AE8DD64 FB12EC91F532CE0171D53738081E996CF8B9F78C041191F5E0D83297C46FD333 27CC601391D23D021FAFF95F7F658D2F2DBFD3407FBF4F826FC0384E5298B7F7 FC744234E606E79CF711AA93FD1F2D51F4C23D23F9AD5974624FD90D8D844456 2F7CBDDE75CC42537349622DF53AEABFFECC639BD80B1E17346B69CE9102B1B1 19690B07782BF8F226B9FE683208653C68E693B878D4998764546601E2D89A77 248A5C408E8C547989AACA1DE88C033A2ACE0263016247509313C681EAAD2A2A AD4076CBA717CDC04189055BAD4162B7A788D282FE6A433583FAE10885AFEE51 E44ADDA2FF69DADC9185EC58A674FA0CA29A5460D46176E18E006D8C1DEEADC3 E4C5CB5B5227F47C1660BAAE3563A3F5F46706EE620B58D436A69BFCD20DEF38 0E95E7DF3F1C41AAB197AC8662B056B166F3F1FBD4BDBE1AAFB18D6663B099D0 45F0B03EDCADA4926CAD9876E25115DA7ED7C4C2CCAB4ED67849D0504C25A956 EBA242C74C81358E70F2765A8858B0878E8C084FB8A73D9CE24EE4799179200C 790BAA2712E2A2A0BD4A358C5E6E2D0651993E2786088D226F452C26353DAE6E 8D32E221EB37D7B2B6D2D51207630821BB6F327F308093F05D075A73F7A89682 71315945258D5468F01B2BC644110FCCE8AC35346B6DF8EE1ECD1BC3A5C0E281 22B5930688F463C1D42A6F1EDC9D6BE2673F7C1AE3856BE3CD74300B4A502B6A 22738D8832BCDB6E6BAF336EBCE9234E33F27839783004427676B8DEB37D03A0 4BCC3A153E93CD8E0C20E7DE1FC605C2C85F79D5C6127303386558C87ED49D25 D57666C5E0783BE8BA872215BC0B38C1F7F92CE418E7B1E69BE50F8E653BB2C0 874C81967A5C07E256E1D6A93E494F5FCED9386C41E2C51BDFEA0DF5C0E809C1 7938DF083579CE7C30170A6607C8A9A4DD03B625984D0C496C41E3BF0AFAD9F6 FB1E451A57D1916E2534B1AECC2B260A28F660550F279F1A51C2C9F98318C96C F5603381E95A67A070D794EA8D390FC66A05E9765AFF8A8E341D58BAC9B6CCDD 547181D790E30F656DCE38277CD13D11AD5F1997EEB9E3FEECBB21954F15C8BB CF0630CC2B0E087D347E98E09D1F636E3C386C2C6A3FA57A8E71DC2DAE65E3A9 2E1094CD8C64D1D3A285AEFB72DEB1AC9DC3394BD2C5ACFFD20956D8D5887CAD 0C4E03EB70399C02CF041A508E90BC05C125D03B6C7928A34EA66736B9B62AB8 CFE09F310446E53D0AB1B6E27B1C13FC14BCD5EC5CA5EE71B0930EF1F68F6089 78D2E92AC5EEE7A02097D2EA77D98B5F784BC8031195382C47EE4C9B8B17B5C1 CE634CE57DD2383BB78191DD5EFC9AA1398A25E083A10B89252AF5A7B4039D6D 20A308B6261F1D63706D36B5B8FCAD918BAAE131AD41218DB8CB7EA301417515 06345045E6E718B7CD23CA787FEBD0AECF101A97D32DD4793D9FE1D8CFA559C9 392275B4867094590AF974C8E729E72CAF2BBE312C01CE8D84CDDE6B163DADC2 5132A23E7B70C77BFEF2F1793B20E7CD9D1E4504DF4A3906305B017B93DBD755 AD8D34D2CB49B9CE260A9025A24BED5C7C063E8A955E25938D201D1595A50DF5 9739771F8884D48617224078662A500B8C455BD63B3697425EA789CDDAE7A75E 316DF13BB8D5C002B178BA8A0D96192CC0AF9FC641884B5D237434E0F6EF0614 B778BD75AFEA7E20BC2F6FBA41D805179FE9C674CE115B5431411965B4CF1A0A A5C3C7F44E538A1851EFF29BC68B75255844A19DF7D5F1080B8AE8F541A7A46E B0BECA7AEB3575A2C227A865FB48C99DD1FFF1D3E48861F7FD37233F0FA3796A C32E0BD1F60E1F7312B6C8311600033EE3BC798E759FE376525525997F715CA5 975867DD9C435C3E853A19C2B03B0AA9A620A0466B8F27625BE98E1C5BF0AFD9 3A70E4BC918F63F4610B5868C0D22F3E0DCD7BCAEF14D321E5EBD13D8750F497 D5054F8373A146789C14857312AD393CBFDF196C16595542D86612FCE21C34F7 8011EB3E4DCD4E88AEBF1248737E6CD997F63BB5BBB69DA7E7238E8ED56D681F 88AACD695B37E5710947C2F5BB103FC4386C93469FB4038A32CBCDC9EF11F68C 1BAFB74E02E8DE4706BFA4C9AE30554FCE81711834B30B1E79BACFD622177B2A DFC17F9898773105DCD17DF2B443303A6B869BEC469719BD458A329583356CC3 8F425C6574C6F188FF0EFAE8A6E81F8026A88EE01B1728D78FEEBC63EC61F961 30B5C213B89F92AC9A554332541D10E541753AEB1852268646D06138A4E2DE85 43929C47BB6CE7054186845007C66D78054A9F3AB624E46D036681BB1C000870 2CB9975AABB38C43E2064E6A1B26406D96292AE8001EC13E41FBB38DB3E70BF0 76EB9F6287AB9A8D0075E1D3515A39CD6D5966BE3FDFE8D9FF9DB46A4A493915 8043A509E255EE110274ADB5936918FA9A07732D4B23AD08E64C6D7D69B8C75D DE756FBE76013BE300705F1DF348DA2DE9F2CDE41B15658F536620DCC9F1B506 08D4449242B00BEEE5B7E5458F5E186832BE669602A7393261456C64F15130A5 23DD4EB57BF64FE4BC6EE9F6FC17CE43731459EEDA627B8044D6E8141F5885F6 D98670EFE4EF92D4223B98F9C65E813C5B782F7E6B10ED0D73BE571667554B5D 0CF7A6ECBFA97BF049DE7CE218A4884C455696B5C40E3342C9FC75F522C4A4CB 84BB4A1831E77A47031FE44224381600EDD15980FD88A75C4F1DCB5DFE38AD18 DC2D651236F8FB9BB29B70DCCE830D214866428D8ADA8A93F7D86813F0DCEC4D F9D62A296A5DA7D84641D50BD07611D38666C31CEA376225BD440107FFA0D4C4 E25F77E974FD022E8D26D5EF092E67F8A6CFD990485E87A4CC5556166FA42EB5 F848FB7097E0C85D0BC622011C5CE4A56DC66B152887FB19861708D9BDD5051B D6846D929EC19A5800CF4F0A8E6BB8F08AD8A110904257F5D95934A4290847F3 2991E3A9E08A1F386626A62627335FB88E1122E101359BFC26518E547D1699FF F1A99F055AB06F2DAAB7F43F26DB209F6FD455E4400E86BA60079E16684E2315 99FCD58CCB7072FC73478017176D9D63F6CA94DB3C7519017D468717503C1B35 6E87ACDE073E990586274DA65081A6E10A0430B55CB4758A2B98CC25D82D24E8 AD27F471BB1B411CFCFDA67BC6BF27B67EAB6F00B9C125F9C376C1EBA96A0D74 216068F01D8FCF6665AF1FE72BF8E60CDD3FD720761D5FCB25C0E0EF9A95EC7B 5A8B72074AD7CA6B5AD4246231202C62FFE26F5230466E90D05E3BF9BF11DA75 BD252276BE0CD6FF91A3017C9E58FF229B1A424E7D73BB713DF9F4E46A905C52 8A2E387522E198243C432D78B26B0F1BF2F39AA0C752BDB0535CE76EFC52F4B1 F3543295A4A01F421F3B813A004F334D87562FC61E5619C60AB6AC289F18A179 53124243B9E481506E1C885B16499E095B9EF324FBD9E46CB6E180591A0C3DEC CF250DF79F6B37203CFF2B88F8D16F5E6D7E6905AFC8ADE8265290C5DFF50BD7 0C65C982D179E45C54039F81D7599886D69CA34AD01C5CA1F57D494376811A40 A1679697486FC1E445583D2B668FCF0AC3B90667901B20A9CC64F1836006A478 86F6A90F404BB29E6A1D84ECA9C567CE1747411112872D44DB43D6123F3A4694 9F10E3EEF1FBD3E803C72541EDB15D562480D6E16DEBC59DC37CD9FBFE1E01FA 384DFF47502698B90FD85AB248BDAA05293214C0FDE3504B86F92664F404970E 670844C212E40B7D7E34AD354C5BAA9D68CFC3F38720C622D94C1D3D1593C081 FBCDF0E4DF5EBF2A7ABD4A1B855033CC7C9B768AF9922C98BB91DF4CE25F1810 4DB379F2C66E7347BFF86C1C929C2353F3CFA6AEE13C99BC86FEB93D125F1156 28B85466527876C305441CCC7E4322A086AE2FC398750AD01CCCD193B2AE47B8 7B32F09CA58C680F7F45F09FAF48017FDA673216876F9D6FA529592F6F53E8DF 9427366AB97FFB906744E05ACA3E7560D32D27DB70388B6015839D1A9CB47E33 059B83782B17C847B3718F70F02478980316FC314831F60A33A1EB30A2E4BE42 286E9F8AC7C81E0C4F2554BD6F1FE9D4053A1D48031DCECE1B6EE5599C71D886 DD516F6ED3B08FC613C5884F4B00879381ABBB783A9F6ABB40A65DD3320E00DB A0F98BABC154279319E2D0438A0B7317763EF1C3EA95FE45EE9F642BF53F75DC 4BF8247292E49680E6EB275562EEE9F65A5D588324EC8820A3F8476E11B04E3C EE7F401FDE59682248C9D6443335A7E05B3D9706DE372D081E3D92E5068871AF 4A873346810AB050FB8364F67699CF2883ACCEC2082E20585B5574EFC211E72F 255CEC5332264FE5B4DCFB8D570DEEAE624FF8370B78CA5CBE30FC9822903D35 7C93AF24FEF55B06A6036A79B9D42291AE04329B02E07F70BE332C3A4555CDFC EB206A83AD6EA7727479BE599443AE75438191A9248E43D92BDBE303DD62C555 981C34BDF5AA822A636382BB2D73811719F2C8E4EE1622CC0AE0F92D3AEE2C66 79A44D69D30857A7D9CE301B1013B92F89BDE085EC2BA6A66975CAC18A9D0038 5D703C749B314EDEE61F171B62E74BA92FADDA6792C04C2E26758EF012B1A963 8A6617C9C9D67284FCA0210F10D8BC9F3BFFA7C8C6228D0A8AC376233A36D8A1 78E4DB153BBA3E09A5F428BA5E95D2244586E68920219AD92402A53410017D3A B81C1E2E8AF4AC349394E61FEB21C496F7246C8E40B6AEB440DA475E13811508 F900075685F4278A5AC12591794259EDA1B06C33784ED4AF7CCFA88BE22F849C 92B8AF9C6ABC04DB0EFB1CB6B92AD8C49BC5FA72C9EB4935DFF3FB8345BB2C95 C5C3328F450F414EC680FE27D5044CF880E57F8866F61F03AFBEF38D20DDDA1C 9BBF0C6CAA429CD8C8E8167CD0A8BC645272DD5939869A9B5BB2008E44C5FF48 4FFA31D2373DF8F4EC408361D2EE7B007C5B448C89BDC148752CF6D059D4A0F4 840F0DAFA73BEB5E5B0DA7C988AF9A4C2E89366D73A62FDE499BBE592B851274 E5828F517E525F12BD552351FA6A0BFCEBCF10ED20F14F0A375BF88ED243742F B41FA0D741988D4500828BF846AC50D431012D24C953DBCCDC4FB74F0AD554E9 144FA2D05101A9FB82408DE0139C45B7BEAFCFAA129F8A39957185ECD919E2A5 41677336CE9CB53511E193DEE2A107098C6FE250900057312486F2753F162AA5 A6E639640298A9F9D845DC8AB36A930760631289216DCEC1079F9228F5333462 CA10519E675BC75CE58C47A339D7C55C202AB34CCED17F0D1D0216EFB4A449AF 49ECE804BACB7C037FB4269326FB32A3EFF75B7F0F7FBEE11B05314A923FF8C2 2C7EDE52168820A94BCEA3564434826DE08FE349470E07BAFE6697153328CABF 7FC6E768AB8D9C7CC193FD519C450B97C906A27C6D4E0536BBAE69C0C18A78EC 1D838F29F928AE6974B2B7BBC28DCAB808540C553DFF7550D877138BC38A1FB3 85C04DA8F939AD77CDD1271F1687BB1B6BD3B91BC99E0B0679D9B939EF7E4FED 3FF09F2E29BB6C9A173A06F6E8B3D99077A1B8CDDC10854A506E161FECE0CABD 564325AE8F33DBCB2FED6E0A56C2E4E827D085CBDD199BE10F1493B6A59DD745 BB7E27BB693CB36C61C76C75233D588E73F10CDA838EF96D043E0EECB92398CD CCC6FACC86BF4C364AA4941BFA34950475E615BDDF6D1339A4D0DF8F11BA13AD C44B5CFD2D3893BC812A185466F10767F91FFE83378317025E2906764D69CF0D 3D062AC845BAF663BAA57E2BD3580CE7FF4262B31BA656E7AAA7C6C23EFF93FA 7EE177D97F2C0763D734CEB692DB1933F1B1EA557CBB7E40A3A931FA447D02C3 B9507D205FE81E2B99FEC360F139A8E6C5DC3F6613378D4555A68529A119FE91 131B02FCA2618FDDDFA97FA30FABBD21A0573816AFCB995DB915FFC60548D8B0 4892241209DF508F97266E014C5493618B5567367D8373FFCDE74520C82C3E3B 8382B8461CE95D5436067D31B84B935C1994BC650A6E341DC39DE2C1A8519ED4 9630B2EFED8859F27C1AAA410F374724CBD4A27C1F6E5658E35F9F509E87CCD4 4E3EB1B1B62B9CDDEAC4E079A6761B9CB6F6EDA54E861840BE377642EEAE5437 255856C077951E2A3B88C911669AB6E24CA208B58883E5E5AC15212B3E3AA1CB 49DAF4ADB88F57CE4B0FD407328AF47D59DFBC86BCFE64741E135949E5DE05FA 7F09A297BE811AA272E818FC62B5E417E93B1AF4EC7D15E810F4F619B517FDA8 CC7ADF5E6DE975493455CD3490BC50163A1621E4337E8C449D02241AD30F8D17 0E959C4BC5D620BDE3CC9C09B669C51E3D354B735D0FD254E4699F41AD1AFEC0 9399BBC0DCDD2F983A4F04AAAF04837024D24E7375203F74C80C0D6E6A26A9CC 84C57EC34323609EACEBE5F14FF089AC97E423F4C4F8E56B19F1871D233AF5F2 5E1A320FE256A73DAE560281D4A928E2B7943FEF96DF184E0F16CE97B8FF6B20 D7D74E12A1BC2DD14132887457F6B892F1863968608228C1571F4E4285847F17 8A35BE55CDCAE17BB5C4CC263A777EDE774B4792EF098BB3C4C2C435F5BFDE19 420E155F82FCDD91BD22A3F00A8DDAC57312ADFB298C551AED08E1A2870CBA52 D28D7744B5910C7C079BAAAB15801BB6437E8B87CFFF41250DE47C380EFF9BFF 6C89A8E491D6CCCF0AC148301725DC051511313BA888433F94EA3280AE895730 5817109C443DBA9F3F4027C540CAB842AA2031929D4D3DEA26D5F536292CB79E 6C3E3D6247F06E955B5A5B1259FA7D7D22B5252C5CCAB66647D7CCE16FA01893 29756F0C30ED173388A41E9024FF6ECFEED932A900660682C68E951F2DBF4D01 C67E5E2A0F04DF7F57B84C5B2A683859D5D9CBDE9852E9B25F02B3880ECB0E74 127655EC04F13B7F3590BC77B2E5B46DF12418237111102A106216EB6C1CD3B4 1F5B87BD0C90E1830410550FE339B1E00E7BF55A01D2100A6636787017448586 D59E51891296A603A0496813687BB411671A334DE2BCC4328B3C2B100C5A6682 030D108849B98920F96A19DFB9F2E4457BED1983C6C68E7CB69ADCBF43A34E10 DC7106BF52ED6B61FCE408C39CDC9AC43CD5D37D725C20B85350F490C4F32972 2C69A6962ACE51BB97A81AF845343C45E16855302CF4072751C67B887768FC47 4EBAF5F47CAA4286B12BABED3EAD92B8F40E7EBACCEE319B29F0AFE36CF41D32 AADEBB2E17ED7984B05E6E14B28D0ECA08D68590F5122B8B81CC9AA53D71E5A2 B5BC4EE49C22355EA94971F4A5CCE1C3A9CD405187368C0EAB1F5182C9620EC0 2C349EDD1A87B40A4986BB491EE9F8A280F2FF338447FCC8E955B4B8A74FA3AF AEEC9949D4AFEECFBFD816398C20FFD1093DB1B2F582C1F697747F8DCE6A8BDA A42E4B15888FA2A9E52147E2BB424A8118625FA749A8EC350A7831018665221E E30911C035039A8AA12C7108B7B7FD3549BBEF541B15E108ED7761759E55D7B5 80242DB84D231C85B1B965389C94960199D946C9AEA834EAFEEB085D2A2AB4D7 1EAB1776C05B4A7C92A96F4CEDE20A8405CF5BD8BF83EEB8BF4D69C1F4DD0123 8B3B3D8A0A0CD6383119E9821BE821449BA9D75F64534A9DAB5AE37A8CE6F831 231E15C074A47FF38F63DE2B9BC810419611FC80F8C9ECAA362B7C610DBF5691 09784AA7BB5EA303ED16194E7885357F578B11444527F51EDE35748995249815 F05951C83C130F18E914C66B94DF7C113D8F7DDBB11D455EB28CE324857971E3 D6DFE4C00C392676FBF170590B0A990AC34E120515EF4AB7CD1CAE430B1F8592 4C4522B4C174C63FBAB78160037B036F7D1CFF4455B281AE2B3EB11BFDB440B3 CBA42C3B499B58CB04A3ED9BA01E5B1F851BE372B0C03C81EA1A76E1E0483305 10426E5F399D013620549478E69901FCFFA566DD47B1C0153C57144CBEE5FF05 9D2504A7AA26A66503A874392E443C9867FA178DB8143FDE9DEDD82B61EB2BAC 2B0B374F83BD0D13E0763E4AD4D7E2EE42828AAC123F71F451EFC4D9AFBC826B A417D634485AD5F43D1AC21554E0FF1142C6661C477C60E31BC0E472C76AC178 EB97A2F05F4523540AA0B72F9E788F859E7342D183924CDBB6F64B4068D0CBD7 819EE7A538C24551FF 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR6 %!PS-AdobeFont-1.0: CMR6 003.002 %%Title: CMR6 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR6. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR6 known{/CMR6 findfont dup/UniqueID known{dup /UniqueID get 5000789 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR6 def /FontBBox {-20 -250 1193 750 }readonly def /UniqueID 5000789 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR6.) readonly def /FullName (CMR6) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE339BA29C1C6F656 1DEF13780383DAE38A868377CC7D396B2A05F341AEE0F8BD0A0191F51AD11A4D 2E927B848A1EF2BA15CFBE57A51E3AF07598275195C9613041F71C1AF39E61F9 EFD5F6512FBDA76E29DE6B508F62F5CF9F73F5288DF1C7B0B82C92D3B6358BAD EC3CA20BDE55DAA7CC58004AA86B6CBF8C410D8287E88BF20588A39309C2B703 CED322F030AA6069869064486CA651DA054FF3F5E56534CA358B0829A6B954D8 9103436E6B06DAD1658BD4A95AB41343B01F5866FC87C4EDFC71F1477C98F8E1 1DCF27EF743FF90BF918AB8C4E5AC35841E2F745480E5EDE1C1DEAFAD8D0018D 2C1F1CFCAD9F6609859DEDFD1648A6CD23D8ABB80747F94899F17C8F3E6CA55A E176F19CDFDAA0D7C920B3A72051A4745560AC81978C92459EEE5AFE85AB247A 32981139CBE352B248F4BE5F73503A084A3E91F05328EE521D9669E44E202584 5407E7846F9FEE3D54EA18FFB144BF2D6803BF65AE402034B3CDBB40DD24217A 3CE0E95E2717CACD603A958187C42B3558AA38D6B6390EEEDD396F96E6041FCF 6F8888221AFA87EAD79F46E0E32CAED91E6C8500879AB6E580C581E8C8CE9B68 2BB5EFE2604E8DCB2432D39D75EE556969F1B2FBDF6A4BC72D106AA7CF22C268 464027898B311613E06E1584707F262F71D9F49D2149306A88E02BC60BBD6BDB EF41D90F19197BA9AEF32B5E63D5B9FF41B5602F9F786E76621DA54D574981AB 87A72081EA05D6C6BA940EFEBD0904EA4E77BBCE17E20B42E1722617E0F6EF32 F1ACDE9D758594E9C81049CCC10605A27C2A06872FBA9F159CB155609B496ADA 4886F478E44029B5E620DE8319E257697E93E1CDFD27D560E2E4D34507020E2C D9FF06BFA14E056D81DF701FAC3ACE4BE6C098AE116E079F0044391EC1661F6E 7A93B9320BD7F91E8FD2E8EB3F5CAE997D5CDD35107A1D35302260D1499B8B65 39625B7925F97D917B66BAFEEA992873F07220714F192839948CEA080BDB9A03 77B9DD032273DDB5629CB28B5D8797EDEFDBC601823E038384C90C79012A7D96 8F27784DA15BACE21501C26E3AFA5DCCE81B52B0ABAF71A35D33103EA86F2415 A39A830D559C5C6CA7423945BD3DFA942B20A06D7A8D8671F9831DBB52907AB4 4E54776D29C6085CD9970B6DD21DD3EA8EB09C49CBEC6CDCEEB0BBB1B8827109 3BDE64DDA024D67F098D6C1998506DDFF7907ABAADA1C39C759C850E0C6F8E89 A392D1C9329ACFFA92D361218D75E115F70A47C53B73B356D703E9C499AAD098 AA9C8119EE9E9708A9EA3049E976FA19AD04210D5F6092C7903FD155113F3A3F 269B746560F70970AC9F8D09956E0E84DACE4112C4E7C7F6B3F0B63D26EFF95E 2B2E9699D16BC8AFC4AD9113AA3A974C9E82E877288CF71E9169D2DCC61AAAA6 C536E5604EF0716F6487292BBB677518504B52C63822BED3BD5FD14EB41EE6A8 AD4B6CF90D39F98E12A765B645CBA3E8552FB9A986390212CE119E7C3DD675AC 17BD006144BEC534DA2A860188619F17589008409C5A309CB83FBA70F6446B6E 2B56991B6A03B1DE10C621591CEE45BECA27C54BC8B4F1754A9E8F660812710E 117850E1BB6FD89BB13F8CE391C43DA89EA67E9C3E7A4697790EA26B0E4E2E80 DCA508873A7AFFC11B8C02EF86C2316E8D8B6BCEA37F81A3A87546705F070C3B 9D4D28C366CEBC1EE485B8E2357DBE46E86C87B9939DADA60888AA9F1B92FECC CC1C198DDB594BB70A8FE690ECAC21A414BAC89BF019F34D2A130F485EAE35B7 2A10C67EA3A48A4D9734759CC93AD85C6A570500AE5AC9973FC76EFA06BF5DDC 26E20E28D16B50957EE01AF2653F8D860817967AA5A9BF9BF7ABCDA710E9F34F 4F0EBCC32B3C9C2971F6225D2DAA6A451366B83F32B2ACB83E746D365B2DE38D C1AB7447FE7B37F9630E410E5D8F0ECE74DF46C538947B3A167AD9F3E4A7EB3D 60F5425AE75AC3A27D39311DA35696C3DC7282AF1532E7AECE63D13DDA0296A2 01487185FDF1875AEF55A36C17D6A8DD329279D229259463A2F05CB7A874374B E2320E1F6CFECB9C1CE62FF468C29751ACD9754AF1EABE8E7696C2888914416E 235B6766F20FFBEFF285277B639A51EA2F2E30D207BC891B00F0436008F980E0 9EEE7FB375BB069B9E0BA11DA951A99D8E60B4F920A0495C247FA7DE904765AB DB5C3B2D634757E43EDD6FAA4DB3C67F82D6853E1170F0B2D8CE496DD4E72B0D 28277BEF172F1402959F64527F9B640619F04416DDB9D05FB2ACD019CB9C119E E544D24EA6DAC5C69785394EA50E6EC9AAA9E14B904EAF29A733C6D7942B63F4 85729686742F26DEF78DF0DA1CA7CEFBB684F4CAD99021A3B3D1FE03B9C5A4B1 BD04CAC89BB91B11952A2B17A61789BEE0C54B46C03FE9A1AE73D17CF94BA30A 237C29D414C3BCE8E3E2DDF83C0BD59DCB66C4D2C3DE73DA8378F3C6C8035D28 7464399857E57651A53E9C4AA68DFCA91B2376CF98AC5290FDB9BDAD9EF1604E 9B0A70EDDA1E564B6D2456E7BC722454ACA8C4950FDD44B6EB9AD01169A9F845 B06A0DDB7897C847A5B1F42258AECF3807AE936C8F52C3A7A0A85D68160AE442 FE81543DA6702D76AB6E8701F80DFC1D87C961E350D0E52AB2A298B9E5908600 7E14D2A87309043CBF13F69AEAAB1BC239DEA88EB5176624F6046664B1D2691F FBB2071D3706F97DCCA355A6DCC4D09FD35DC078FBAAF672FFDECEC61050A120 10B5A96629041303FD01ACCC7686165DED6AA712FF8E5E85DE33C4E7D877C49C 6C469A90410BAF60BE65ECD91CDC2EE7AC0CA8BA7B53865F26092BFCAA0BCA77 B80DC51DAD09C93C8DD8E43502B4B68F3D5918C3492196292447732BA90F5AB4 9F5E1D634ADE1CCAAD028DE5EBA9535F6FC5908DBD2D643E0A7E059C8C386FDC E72659C0033F535C0D7F6B98D0335552D0BF3C6E302B672A5EAADFCEF81912E3 8F54E6FB7EC2B325125159713D0AC50DEE3673B9B148643727E94C80971A2E73 5E1E13237BE69C84FC039DCE02ECE2668AFD047F21A61BB94A9F498C9FE5CDEA B274B40728B6F6CA9B6C15BAAF92F465B0D7311B46545CBA90D874839443CCB9 3110F052EB247B24B45A3D2FA6FBC7EB2A4BEC2A5892914B3C5EA3F4F9B9DCBF 6F932D95700E045B49E4B1F2C9D2A42CF39CA2F5A2654E6E8E6E92473D28AACD 5E35C6705EA728F704F5996D286BED433F976AB7E018621A577AED7C0AC0A84E A032FE1869F603E6F20386E3A190A30A21EA886249ECF8CDDE2C33D73BA8647A 3DCA7A8DD9E8EC8D9A415D126BA38B6771C489DFC419303EE9C1B83FBFB3A0B8 97D64F30E4BCBEC24DF603FF3BF541E00D5804B6B6543D3D2B661CC551D497A9 9DFFF535AF424B2F3150BB39AAE8CDB306AAD37767BA10BADB031DC2FAB16955 EE78342CCC0E8B5976BF98F215461A8C6F63EBE6E2F1A1104662DDE53388CB51 8B44F3534853B8095F3B746A2459C2EF800FB1EF7F235EBAA9731E3AB3BE4369 1D3636E3ADD5BDF0C34FA80E90D8A1DDE770943FD196E0A7C5F1FAF6970B34C6 4673AACA6B2B5C12B9608521AE736C1F4B97209B063D991300ED5AF3D7F27E76 68E0B858FD8BFF86581E2B9548C691E3E5D9EC4D39C9715CDE86C7D22223CCEB 8A38C776A30AF14912390A7546DBECECD7A687D4F08646E57A12C80DCA022B7A 33399761A50B8E0ABEFA1163EDEC3DFB5DA3248792EEEDD894872D4E6814B4C3 548BAFCDE0CABBCDB97EC6D1BA47F2E77CC1389BF19D73661749AC33F46A618E A665A85776545BF9662F2179D7BFD604FA8EF4700591AF3AEC647E27B24B76F3 133F9198DC15C1AED830E737909E43EB91C334C44BA35810007A3888E33F5DA5 B3B2C35481C648AFE630CC3E08F77744E401B2934E407D1EC17ECE737606B076 F8DE8EF3344F57495EF49D11580D6FB28AE0B1422521B320843B13467501CAE2 3DB93D7BB779F73B6AA30050DA74BDBC3F8DBB30F32EAFD07734A151BB2BAED5 C9B1F790059339B64BB4146470F30928C9A49AE88906BD6FDB7431A4B50809CE 0F67ABA01CDCC2320B0B097187B9299E3D80CDD7BB5DD5BFA7B28D924C5633C5 45A23CCEE097C41C3759C1FA8DBA0DD95034BCA89BD23FAC18C70093F40FF2F8 0FAC5DD4835F2DFD40540E9A9E9FD951A8AF2CB766597DE00147B163BACFB7E6 EFDA4DED594F1C746D8B46A1145E0E4058F5917B3F21E9BEBDE745EE72CDCA64 FB31EF7A2E55265F32559480E2B6726D3DE26FFC97EB4E3160F117E890C4B2E5 8DF310E6A728ABA85540F571C024F8DD58E1D7827FE97CED5EB31547EBC36415 02B8C0E10B7E37D816F01D56A364B8552CBFAAA95BC4BDDCFDE91CE0EF005B4B 7AB56FFB47A093AEDF0DE1EA48FC8103CA3CA1470864D2693E360006D05668A8 AA422CCCED20DCEEBEA5CE0DA1EFB00FB93E922B18124FA11A88D0F6E0F719DA 57603DD5DA42E1C56C2FD9E5415AA199D4F334C151C1157E75C107FBBFCEB706 5F4EA47A29B54ED8CAEB8DDA2F53D2A703B95487619780A52DA1270011648A28 AA64338E04AA5B92C1EDF3D8DA34FA6D227A0325EA6F22E9B38B6338C657BB21 CD4C582DC04010330F62923F817E4EDC6E5C0E6500F2A975A8A95BAA30C4A134 BB31B5AC45A2E7F6E9CDFC810D41344C4F606049445F8E93D74271C1E29DF7CB 5459593BA28AECF64D903D3E4D77CF5C04B06DE44A41EE4D9FC769854503AC85 69E4A5106E84016DE3D59865D4AB30BD6C9E45C45DCB5408421CC50CD6179C85 34E55CC70FBD8FEFE9F1D5160664981716E3BC7F24B6F54E0323D9BC4B692971 24419EE62D8B0BA726E2B4294A9A76F328B8101DA29E78BD5C4AC383350FE196 4D42DB1653637D19530124858950C22F1E9CF5BC07D46B7A58CDE19CC88DCD2E 7FE4EEFD8AA6047E919823C8CAB2EF5274F45E861E6508CC11A8AA90AED2403A B2BF1315C2157B3B50A3685205D93E40906EEE9DE5985405974BCE0B84BB37DB 080A45C5237B269B93C0A7CF294A18B45464A41F604C494CBEF829A381155CFD 71CEEA54CC39EEDB6DF58A9896246B09F95DC6BC40BA6916AAB5ED3D24F66154 3662F8978FC63DA9280FF7ADB09EA5BA79D3B66E0C88BEC1EDD78DA93839073A A4D7B0E627000C4ABA76C47CCFEE92E319315333A5584A951E34C55412049C4A A5569FE65A006F77B416E0530AB6A8E7AD6C72340AD4CE25937158FABB2153EA 281E1D840206F5DA38E00815E9081F81DAB9FAA8F4DAB305867AC84735DB4F52 A36129929BD2084A8EA37BB6889695204BF7290B68D5E722540BF8A276F8BB6D 451D582EE59D2FF03F6B97DDE05FA00C3D375D2D0AAC8FE298F85CC067B15481 48D70B6A0354C705715B891915FE8EA45244677B9FCE81E72D66177E309F3F83 F744B9EA9E55C3B30DEC6E5E03B3988FD526A82A5E8E1DC79127FC62B2FA7949 B3AD3148868DE22BD4B5708E32CEAAE6ADEED1F463EAB9692411E18F8D6BF391 126B2700B4CF3B59D02E3F8795130C96285A63FCD1E0F647ACB1D35E9C58BD01 1DD06BABA00CA4343BEBEDBE677E053E9732B33A7495DF51782A07DA07F5646C 770C957AD915CC70BA8E08BE7A1F4E6BA5BB9C603E38F6FB0A2578471C4D02F4 283069856D926B9076EC73AA39CEB0A061AFF1575C7093FDAC9F89C3DC06EA45 06F3C2A3BC9FF21128B10CB758DF0F099B459A5264A8C24C098110D2BA1A8532 8FAE146A91BA7D033F591AB1A94B8A6FE0FFB610F698D216D58B4EF6C87B1524 8037CBB7E23D8550A620341C6625A1A2ECE7CEE2598D66277F857231A36155E3 984F147783E9B93975AC38A29F2FBCF704C8A04AD84C3E04A12D2321FA56811A 5B6744813CCC187968C5C26BB8D3E6615A912FA5369C01CCF8C0DB790593B190 1A90CFB5339B8771F325C5FC448D36C7312B11A15A8635BAB59CF3CAD176131E 026F6E141B2619EF7F3048750CC9291397F141591EEC8B612D6656DD34DB54D6 DBDD303CED74BE76664E7DC86FCFEEF2001C9DBA56418FB61F589566A47AF36E C94671C5E8939AF9F4D53C0DE7142B7B63C86AAFA65877EBBB48C64589AFB2CB 1280AC099FC48058855CBDEB6C2D2A0D092267996591DC3B5EC8252984E9B27D 2E9EDE8CD8303F0905DBFCAE497DE1B755B924452CDE11CF4F20893DD6FF7251 427F520FE00580DAF1703FD968E0F8ECCDE618E1EA5820EE6CFED97C78864EF6 26FAFEEE194A268F24249D44829AA360D731C34DC285501E966A959180718F72 6330E4CC060588A2F65AE64A720DCAA818D49D4440F5D0B6C1F6C3A107E12445 F1BED2D3FCBB87A9597F01C7332AA79143564056219BF87D4B907A04F77621AD 054935E883B2B137D3D1C4BC792E8335CA08B6D83227F35736C41312A0BB077A 60FC6488C5E02FD51A10AC113D4EF70038C649C1677B2204A77F2ECBE9B3C341 F4126BECBCA61E3F3801F9188A3775924A62D30FB096B440286FA655EBA00A74 9A4162904BEA07CE68EE76018346DEEE20839C9A2FF71179B58E1D4AB30856B5 F5D97295A097174467010B15D733AAC5813CAA633746B430B1AAF9F997FDAAFD 436844D1A56B8E25A89D2CC4BA6EE7ABD167818FD4F6C747E07B262C99EE2C35 323F0B471586CA50F54C6381B052B15B0C58C19DEA82C0CA29F00400B727419B 2379979CDCBFA966AD513FA903160C571C3BF1BA239540B11EF2371A3880837C 6D6CA2F374280CFA1586427AE975A2AEC34244874E4D441DBAC6CD1828841C91 069AA87FAE849C5DC7C9EC1B9876E59F3CCDF8BB23D939F5348D7486934BFB02 CC5A22541ED352616830A510DE7732E5D8F7E785BBD31C2BC9D348CE5632654D 2C1740F89D57FB2AA1FD8FA3304EA03F757BB8F498ED98E48485722E78D97B12 A05F3A28438084D1CF90AC4C3FFCD7B3365941C45E1E02CB13CA1E99F7FA1D00 1C9D489D5C95F019AB4CE89FA3B6604473DBD2CE8E278969E0A0FCBCE68C23F6 9381882443D3FC16966555FC222F3FC4B1207522201AB7A15A7A6F22CDC9D392 360BF4C95DAD35770E0AC7E5EFF015F2C74ED7391F40EC94B8D1C163B5DEE5B3 911A20C2625AD3B24BD94D2A42405E655DA47D3F94F882CA2F479437B4E0BE71 8AFA4482C6FB270F8D05B4599A01403DAAA90C01DF3AA7C2BC7E66AB6AA833AD FB6E5EE13E45CC7CE7E200FBFE639F9CFFF5D08512C02764997FD28368969BFB 0876F236EF6189BE73AD827332DF1B2EADEAC0ED3B939CE5BC3CEC78975FC636 44FCBC2CCF4396AC7343EC62E0E4F3DFFA2B880BF31D93ADFE201BE9CCEC8BA5 0B9B919E05B851E0909968DA259EECC6AA0743F25247978CC09C28C4F878E29A 5070E4023BCE95FE0ACCCC01D0EE219FA8344E8F6D7D4347563BF8AC030B9097 41F24D4BC9494915A82EE9FD37FBB6A46BF077B728FB569B1258CEA5F51F36BE 4F4D0F890D782E44748CA3FE8C8A515998371D9C7D2311F192B4B7E7C68FC6EE 3F7136714C282A2570FE591F247A08319CE9EF1E43274E4E57166E31A2ECA506 85350DA31AA4C33C9687F5210BA225EA1007C444FBFA2126769767E47A967884 9F68589E4BAA9ED32A7A466DE35554C132810C68ABDAE536D9D884352F28EA02 8A555D2CE11F30598F44A65E2D86B43ECCBDEED9E4E5B5B7DCDA20EAA09D9FF7 422FC91F2201431A9E8FC624FF44D26C0100183D77BC7E6B1A6CFBD3FA8BABC1 AE4CB0FD382E26BE0A83169B46D91429DCB746A0326243E212F802AF6A56C709 6E70C6C7CDA243F0BDAA8832B2533A7133035259FD4BF7ABD4F214ED51BAC2E1 7957997FFB4B643294EA147956179DDF4B4BBD1DB724333E2D5EB49BE2197714 9005D675DB5319C4A1654A681E5075B0611D5638F0B9A64DF51BD6646235A81B 45F636024256624B8FDC48D5996ED405D9704C27408E9925014984E0DE6CDD95 6DA8543850C0BB8691A91DFDB74CB0DF28F825BD92C6C18C5A959F9234DE7E69 675CBD9EBF2EB8E34817E951A161999C2664BE0D11B4400097012F5031B5ACF8 83949020356034D74FB2D57BA3C3A2A2BFC5DFE014C7A13C61B6BE59EC9D7679 55FD9DF58D076BC329DF950A28672CD8A33B6E7E486CE339993CABF85F93B356 7769C76AB18E313839CEA4C33FE45D190D37F01FA2746F288A3DA17FF4DA285C 5A6260E86B7F75F002343B90F92CF1E602148DFF4DC42DB1F3C9A5874B536BF3 32B36319D8C7873BD008044788F283F8D057392EDD7046CEBA92D692FDB94619 0441733ED617BBA362F72F7171793A38759B4E388ACD481BEE18BBFEF9F3EBB0 C8B5AC6E70F8EB41A61EE7DBF3A84555A34E64B2606DE030ADD3B2EA4F8C2BD8 BD14F321D23071A729E56F1508FAF9842661674A1AA680DD01439AC96213AD23 C2F981445D19FA8C215C29B3575F3ED975271F74A0B74DA0891F324E5A30C5A1 80B7417ACACEE8553015FD052A35EDC51283BB3D0B66DEC16910CED32E031A16 EEA19ED6C6736F47E982E29C6848AD2C26176872E5AF2F8A4F93075F87013FE9 002282C19558E24ECD9F77CC747449E05D3FAB34264413E50EF3B5355E091FF8 EB97BA392A84E536CC41C1859F18D0F9C68960228F8D637E0DE891252F006CF9 E687F57AD4E1402A70E068D9910D5C7107A32F0C4FBE1D0ECDE9393CA1944AFA 14EF5243E21360A1B1FFF2E2C7B7010F5F989B9A1C09915F5B33AF8D6130403C 3DABAA3E520911A61F9E725AB816F93139EB9490155852715CF757D0FD5BACEE D85F6A291F30562762938550390138B5190A0511984147F7B9E66688964A42E7 5935FDE9A7CE547EEAA5A38411ADAB145C94B86E5E49CB4874FD30A64071F7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX10 %!PS-AdobeFont-1.0: CMBX10 003.002 %%Title: CMBX10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX10 known{/CMBX10 findfont dup/UniqueID known{dup /UniqueID get 5000768 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX10 def /FontBBox {-56 -250 1164 750 }readonly def /UniqueID 5000768 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX10.) readonly def /FullName (CMBX10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 61 /equal put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43B233BABF23DF8DB B6C2BD2F04672F9A3B7FE430263E962F16A948319C51B8ADE6E8A80D3D88023A 6DEA4D271676C2C8615C4A0EA7DC8F6601610F398673A4D4B905F49EA868FEF6 39BE073001A36DEA6C08ED51452F062B971740019692E221F4455EDE46AF24B8 407A98B791F6AD525C72C09776247E194043281D04FE1CD1D8AD8DCEEC3045B4 F95B3B41CD3300768D8A049815348BD7AC1004F5500817E3A267D694AE108BAF 285B288FC5F28A03E9D34FE5D9B2F9A9BB26ADE66B1CF8EB5BE606E83D213C33 DE083C20D636EF780E761944FCE3B8A950B1E6E7568F33B557C6D59E0CEAF185 53E609A4F58AC4D5269116F958C4D115C44B5A6DABAB79D3BB6E60BDFCECE108 74CFBE258779F32C80CD7D9A7CEBA50A0966BD9961F71560119668C4A0C30A5D ED91ACB30940502B24F33906D6E0F16F81DA87EB6D7FC8B7853BE388C40D75C2 2CA8F94713AAA1561F5321CE97997CB4AF0E37F44E25B0F73CF4986422B1CD89 8F861CA623004ADB1C28268D7F8C484AA10C9519B6AEADC95AFAA3304D60E85D 718B2F67D2B734095E5A92C90785252C98067DC05137BE735220BBCB7C341D61 C4B98BFB1EAF883D38D7A93195A059EF82B42027F23B6CD633231D704B891A9B 03D11A646F13898F20321D7BC150C63FD6DC6BF9CAFD8DA759E95384B729A0B2 767B9F3E55C682F7A248BC1184F7D294CFFAE0B246DFCC8F215625DDD4F49F09 FA8D41CBF4A06152FEB152C61539ADF7E70A4D23AF8267D25CE3B12D39D62377 547E2528D18DC4134FA3BE0437EE0B3509223D71F06D44C6227D62BD01AC0A2A 3EDA975E894371C07CA1027B102549A7D552FFD25ED2DCC68E29E71BBAB43C62 57B0BFC6A953ABC2EF703F35D112F6B5460018CDCEAD17F149DBE5B52C2B9E10 9818EA6D97C8AC884F6841C9B600A7D868F59C1D80E98DE0741D06D69858EC84 1B33C6C9938B7E8A6FF6C12AD456EECBD3EBAF0D7331536B9F6422019FAFFFA4 822E79D6D89D6366DA636CB708894FEF904F366E295F1CB808E78E883913C4FB 1631248ED6A7CF1095C0C61C4F05E4B9DFC47533A5FD24540AD71A0E2907B98B 28085EB88ABFC3478C9644594C7DC4244ED5A7C1CA8D960B65497D56D174645A B88F12C2CF0A807DA314017984CF3C4FB7F47392A651EB9CFA961B28E2989893 9FC4D97171BD5338673F5D1CE2C3C08D48A1B77769F01D5058236C655FFD864B 80E28F900191D4EB349AA5E400A7B0A0FCA0F3E79D7A7C69775BF754329397B7 D18B20B2683CBC4A19729BA878B3C17EBA0A7E9EE297A5B67E915CAD92C8F356 582B8299DE6A58E73408F525F7EA895C48A8F0D626A06A96A50348DFBE479D89 4272576FBB0CD332193D28A8F11503BAE98F8E1D73CF5BCADF23DCD4E6586ABB 323568F5A34E359661074D50CD8D9DF27191FCE24F10225A5D721EFDE2547E1D CA998077D2340B1A4ADFFF570AA677CDF3305D5E3A394BB1626EB35074D4EEAC 2F037CA2EA389F7683FD17A8E07C12B4CB3BA8C249C9B12D297C618009F76717 0EBF5F2DD39A6BDA10A2E5A811D4E190660F5FDDBA29201B6F8042620397AB2C E59267A7247B0463891831A6F40582BC3F614E5167B646A8F53D8A31717DD9A1 9034034E705BA7884F0E0738307AF69D3517147C282747F2788462FDC4336A4F 9CD222908401A25F0A1F7B13B8DAE622DC965AD0BE62497420B70C04AF432237 E0FDD043456187658ED93B0F9822A3998511DF05E59CC85B7B9992CA0CE3B814 9723BAE70D2631F32B4BF93511F67179FFAD2075E1591CA5907A4C67701B56CF A5E5B02EB4A842BA1F18D6864E5677359C2FB4AF5BCBABAFB053F230CC129B45 8D15413F736EB07C571521C7DE2A13F2AC1C133D491B0A607197BE9AA1231D96 BED7968788246B2E4D2BD330F802810F5BDA3760FEA5210CFC6F54748FB1D921 5CC3624BBA5B8962AA7D94159651589540B17CF7A785F297264F9C1006D36928 6E2756D3B623A6087E4B106FBA76255903C624C07E18A1AF4E185A533C640711 86BB477A906ADD36EB6C8F4A12BC2F01B2B98412E4E105977640930CD998D990 0254A1E5E9843B7A8ADE0AF6D5871E6D3D666465AE69813A2E26333213FF6713 6F08D55A90C079A56E1B9AC655F720FC22B5AD8550FFF26DA7B0C5A0B60DDB05 64E8FAF684F3A455BA9BC9278043D79537D201D520E38750335A4C8FEA887377 879331B68DAD6B253F4FF9981D0F9B9550ED5179B15EEEB00E560A3DB6E5973B 63403E4E2F40A3D0B937246E9652000B917B1369741E0F913C14C2D2D6D1FCBE 2CEC4422177C58523715BD070002EC2E13D383A1DC8C84228862B6C5D3B65667 9FA97E175239BB7FE7E37E14B96DD7960A8AD49DF428CFC13B5D3CC22E245317 47B5244DA97F1DF954CED2D552477237CB23D037C0DE728E26C82738954EEA1F F34FE497DA005AF03746DD2ACF77F6E6F2C224862A1D18AF6F7A5DAF34564387 9E01DBFF49F8621C058C04C2B3F4F3033FF3E8A977B2CD6B2A3CA4A6C569B19F C5AC457AE9AF334DA66A730960C7565E93A2D373C0E3DE14646FFDA05DF4C6EB 6D4CA8ACCA3C3115764F77B842581760BFB9E5C0EBE55308B0577A8F4D968CE2 BA3361D79378D451DD150C34D7E901397AC63B33BD7DB13C50D678F5DE999238 4B4EA15BD449C46F262D931478F5685CDEEC4C4201FC3EFA607AFB8F27AF6751 125DE42D2FE2D31DE769B7E7FD8CC8C5D91343B537139A822A5BC4160BB5314E 37501F65B4FC35475FE9E03E34CBF6795AE86CE409500BD0799DE39FA69978B6 EC74D2197C03632D3F59B85F404DB31240968FA75059B2581B101E028CDECC2E 7E5E25DFA106E9B8ADB81E82BE9ED3BAA9D03EEB22B7B67AB1262DF6AF5F5EFD A5627EFEB84F3A5F92EF2557EDA2843D7D18C592635623CEAB14CC3620F33986 410D6DBAEF9F86E4E6682054540E2B01D8FF2161F10E66851A188BC15BD6666E 8D3F21709F196A31EE676D28A2D12639CC2E7020A52910F052E61A0710DF09B0 064171D05611451BD24FAD64716F141E1C41D3218A8115A3D73CA041D02B46D9 28C3D07DF0FB668E8E91409C8D0A26A65CD737C075E026AC0A974C9BE658199B 3B9D82ED95E4646977D8F60717DA4C68767DBD7E8320D5AA1D5DEB2E6B009759 8282F27D64F1F904830AAB501CDA4D9233FC2F12F77F0FBCC46E6B729C71F6D5 E6F3EA02EC35D1048394F4EF2177FC5EB726DE5EF2DE7997166B8BE5B5105D08 EAAC3481FC612665CA112D3F889A0E5B7843EFFCEFACA24A01B6AC2B7DDE02F4 A9295AA2409A3756BAAB44608DACBB56840060037869455BEBA46F10AFC68DD0 0563843DF111C6D34911CF13AA6023E5E899060B5EC60D0F78FDEF3E981151A9 24903EB13ED1A67EA1977449716D1A5A7EDE1A2E9465C9C2B20A58AF02D9F373 73E627CBF296B3A6A4670C39F3B5EA30D76F0362C81020A1777F0ADDBC6B52F7 213FEE1718214087837049CF2AF00407639657428B9E8B532F68B631611A3501 3D9DCA38090E227BD0D6D0FB4130EE866DB6B195C873AFD18DDB3B1E40F740C6 B3B375ADCBBF628A07A5FACED539FEDA3379D3B60216C2EA6629BE2F65199D82 FE3AE627D7C67270F3497AE75F7A9514968B5950E2D63C38DA240AF4E6CAE88E E25167D179108679876E7C80C85FE1D2BCC2EC9B88BE76A8F5736E8E6B3A9CF9 42E58A4ECB7914865E67C1468CF66D658206830B9380FE346DC2DC4BB56A92CE 4B5E4EA9036C177869315A2D9E6CFE97E3BFD7CBE0747D40CE5E8A3A0988576B 8AD2B1E4314C0D8A0CBCA08844A49F7E054D31BA7543730C0A7390BC4A288D10 CE29E389A4791305D3AC1BB6F77C805F1032787306F78FF76A20A9E629899F6D 13356768D33D7B9E294E8CD50CBFB9CA02A193922BD9B4372C912D1689B6644D 52CAA30F7421E8114D077288119AD9514EF21E5B9989CCE2ABA0C12549FDF493 FFB39736AC9EB72DAF45E4EA6057527FA9F5AA0A1A3F03C12F7482E465C766D3 760DA7714D56C91BDAED507A5572BEB51A895F8DD3BD5AAB042650154FC7E4E5 5EEA6194DF73AC5EE2CBD4EE26E29B1D2D0C458B4850BFE842DDF2EBB4E2A25D C6A11CA2D8F346E2B736DF88A3D57BC0380B52396A6C039212699F5D3342EB58 0C3DD5D01D5078479BD9FD10C07925556C0AB0F03606F33796BA72074549EDA6 E33644F62CA35207D7421D2727AD8419AD1772789D33405FCDDC9286BC34C974 A52297F5BBD2E541E8BB473F733AE5097BBC9D5FACF18DE4173B4711E28B23ED 16E0A6746A60F6FF903026A3900169EDA87D98396E762C2EC963D89197B8CD0C 25244806BE7CBF46BE60A8F9171731EADFC969C28679B025371E5572E52A0EF8 B3FD9B4638D03E20BFDEC9345E70B8166D38846DCA68E0D0B4B53629C7E7620B 45E0A610BCD07FEF8814CF915CFB11119F42407D1C6DC1E6353451D40A382C2E C74DF2A4889ED5A3495C3E973565F7178CA190D22C9693C10EB12C1E7A8679CE 4AFECFC964CC98111BA4ED2BA9B10292A71D5B11870EB08EB483922CE8628A06 05E7CF6DF93E112B60EF888AA8DB52994EC33DC7277D7B7A4F913AD30257261A D6EE80476A9A8D316D190BE6CE0046CBBCED365AB305495284FA921BE0638E00 63DB2AA4C5F163340BCCD1061B469504DEE350B82FBE1689C1B65D095405614B 35997D6F0DACA7190D64ABA351705B17B23FE2EE5996FCD607F49F54392463EC DD5B944A4B82FA2BE3E75E2946D483060DF99277340B0AB65A2042AD088E2B75 BBDAB869D1940F64B50D25078519D18748AD64AC5615EFAAF4F3105B0111AD40 70EE173ABE6A4ACE486B4E5999158A4377FDA6922FAA6E9305F48570D14BC81F BFF4C663E1EA9D1E050534F9315A663C4C5DA52CB02EA6408AA473C32CB0CD71 169BB43C0508A842F400240F0063243B4C459A1FCB3312C41C32ED0EE87F591A BCB6D5D3830AE4645CB4D40336DB4AB6540B52E70E1EA415CC6D886827EBC5B3 EC35CC5C136243B0C20B3C603B648B132B99D05F9B48263ACFA59A856BE74441 FECF5C6D1FE9D1F4F9942F460961901E16017144C37E83C6822177B2A6C47ECC 6C47A1104460665E5BCFCF08874008302750EB991CD98D0D8D22B921F90B99B9 05EE7C39F2BC2A7798157503743C9F2F267BDBE2E8A4CDA7317F81DBF8962E1C EC02822CC7F770FD4D08D335904375BF0C6DAA0510771627ECB9EE69C0F47D30 69A87052989DF80D9F4F19F75B070C3689AB3BE0966453F9D56CED6C1745B50D 813AE6D7E44B73423AB3778ABE4CD2C4DF40E14C5A426043F7057E2DFA2DAA70 EA6723F1C7967FECB1E7C1C0CA283334163FBE31C32254490170C3513580A552 19A5DD75E6C4ADCB12D33517A03318A6BBC7E4214266E125140D8C40F78A0340 1F95D9FBEC4DCC55B71E89375AA94B0D55646F6C069561480407D0A3AC127024 D7D1E9ED6B599A2A8766B8792F46D35508B66F302D289405B101A3C6BADA680D 8C56E2A00B766A4CB155446F862FCF17537A2BE85418E20CD77C4F1F69F70BC6 17BB5DA8FAA876D0E8BABE273A19C04A8697B3E3CF4725E2C77C8761A9243F24 96F8AE96399996001A57FD75106745AB4646FB9C6421F1D4EBF3BE533BD11AE8 14BFBD6D308376B26E08E4ADA490DDCCA94BE8240403D5EB0FE3549061DFB668 4105B4FE77189546619B6BCF3F9723E278E98D50A17DB8A4C46744FA21760635 5B332689316BD17C966D466AE737FE3ED7ABC443ADD88D4823A10BC9747ABDEE 027515AC353A420523F85298029475D8BFD83A2CD00C02CA07974BAA581D2215 A850E6E4C0A5E17E0EDF91C63FAC18C70093F40FEEAF0350B403E2806F4EAE96 BF616A805616EE55C4657418C26CAF54187A6684821B86A76F15088AC4D5B551 66C3CA8DC61E9810858D1204F899C7E3A1754F483134609F6EEE6364B1CC04FD 92C86EF194FA3249601AD722D75D1D395CD15A93C768EC60A486AE885683364F 93DA00A865C1035F913FDA69E7D9A0422880FB81EC23C00427F07A5EA3CCB613 83C859958AC53FAEA26A6BB39ABA068863CCE3D447720BC31A5136E08EE58963 093AF587A72112D55853A1048A2B1695DB2D7F13CC924F2F0902071260C33ED6 30893A04577C0ACF0681C0FEC23E5404F844A83BB5A2F8DE1F0792196139993C 1152094BC36A6AE5BAB4B8281E506F485F0BAEEBBE71E174B7CED1E52A8242F9 DBDF3E0FBA296538D964EB5B7A4E23B1BB0F59872C9D4FE8498203E3AC08B71E D2B965AA6CD5D20DA6C83FDC86F4A5D68A58A72C5BB9BFE9BC755C56B24025CE 6F24443D3CF32CD711D3D94C7C1DC275DDAE3341D840090F97CB6CAEF274C94F 9F3BD3AAB3F98BA8A7B5CE5E48D1462DAAB37BEB1C10B410E8D33FA42D898183 BD4F807112D78AA94509E33C179BF7C9E82E55AA7D09E128A0DA06A330CF4AF8 5DC861498CE029CE8C1BD15C923A708F2E7AF98E4F7B34212A0CB417553C86EB 6DD46B0466F1A21D29FC5111226794ECFCA5DD4240C0B8D106CCD7EA6F03E133 BB7733F055D6FFA04EF5C6F872B4FDA3E42F0F036C4825543D75682ACF71B548 DED160ACD05625274799D0AE201305DA526E01A3D2A719B1B15C05CC09467F3A 5627860C0F36C503EE392E1786620F3F2287AFE56634E03566B9B1F537FD92A2 913166228791871A8F8CBA1A1DA634E8224058052A10FE1E67CBD3FD21A6C07E 243CBF58BDC78577847664EEA5225EB8D6679AB17C563848A9D4D58995EA3609 51C1443B752A070D9872FE1643F0677019235AC25DC2B29169D38308F2170A1A A0FDCC59E6602197D2815B914041FFC7106DAAAF30CD97400C6D0826A40385A4 C8520119A065CF32CF2FC5FBD8DFD29222528A7F96FDA533145846B3428F8239 E50277C366418D713F84B12A5FD4F904DC13DB1844A391FDAEB97643A6FD2945 942FD4FC5A4A35E184F23304B8B4D93D0C37EFCC4E106D4FCD0DA3E5D2117589 3FFC2BD1D121026562C55C455C3585050B9460891B006F62D9D9B66695C3D348 A467C14C0256FA9621CB056E7CD389505194FF463BCC4010897F9A690EA87D9D BB3ED4C174FBADB8A4744C6E4A44D773967FD703EC37672F9993DC48BCC8A060 6CEFE8E6B8F10886E15BA0466AF410B90DF0020FAB88BE493606B6A734EA85BB 926950EB10D2F2CFDBD182B0F133809612CCF6ACCAD049C8005A42FAF78368B9 E7684F98DE421BE0A3BC0FAEE024A7BE67E15C8394F17FE84DFD8156C2A3E94D 08259E15CC657E8CE3088395BF6B5F825764E141AE15EBD186DC049261623D26 8636705E06C6E4A1F8ACAEA59F91B042DF5DB9C2AB986A784384706A43E5F18E 42C29CC1CA86D4F247B3BBBC89F3633EE074DCA4AC15B1E33EE4822812A62E88 C32B0AA57249980EE17AFC1346074800FA529445D18649A0475246A25CF325A0 BDA06AAF392FD455218B13D9ED577D51A9500B9FB7860716A8E2FB3A8C4BE3B3 6656C6A5653AEF00184020ACA0BCCBF48BE3BF91E11C8658686C89848E714E6D DC158DCD1C1BC03B83FF94C60B1DC71CE8A86B46DBE661C9F8F4677F8A2C7CF1 E41A91EBDA2304735147BE66CDFF2673F09D408297302124C127F0B35690CAE9 CE1679120CC4D582FB69550AD34A047DDFCD9D411724554CCED753DB52D6AA7B 22B0C55EB698ADDBB0F8ED15C971AEF113C74B9E25DA29199237B98DA4023665 C2A63A837E4CAB38F8DF37DBAB5DC80C0AB25B56BCA5D899F1575E61ADF75676 F48EE26C054AD9A75FD88A3E17498AC26FD4DC8000A125D6DD423540B8A98779 B28CE97C9CAFAC45693FF43249E4B559E7F19FB349F94B60AAAAF05B5FBF244E 982B4B51D997DA5811CD43E1917DA885DD96133A5CE1A290DBBFD88AF285A879 D3136C41C839FD2276760A7B4F21F4026AADCDAB3F113FCCCA9588C7FB72643E AB8F6D8AEAD1DC3DCA6E436B3DF24E7DC6AD37137B49327871EA80F3B8AEE932 D20D9A5B4779DFFAD7B3E5D447023D6433575F8F5AF589D7E094DA3786555D0C 046A427ADF128E00AC7B458D5A131A130D6F49A7ABF47833791F172D69FE6393 EAE0E90E7FF7BC2333D4E0215D5201E4B209591782F8A664335F67B9DDE36DBA 793EC77E5EB405862D14EAB6A99218B3F66F11EA2F345629C402BD8FD9CA0AC8 FB5A2E119DAA9F80083C9BC54F4586C44320993CB5D9CBDC8F8522001F82A16C E307F175B794F4426E5D273581A6D2844444D82093FB03482B270D693391DEA7 CB26D4A418E48A2989167B7DCE251F0D53D5C9B29D359A568FEDB965DF31CBF3 900392FE739A2B43BFA2363CA74FA72668FC761D1A17B9C0B56D666F94E090DE EA37CAAB4E066201D6164118B5A5DB3FDF0B15175392AC33785AB5DF23A71731 265FC02CA542376BEA19619D331286D44EA395793E3909D01A16D0CC46B67F73 ADF61251D85C9744AC6334EC8DF8E5C93474AFDFF399F5F3C9451E14281069DE FCD9281FD8978DAF08680C2CB6C279519A46159751BF3CD0E36B7BCD9C831E65 52ED07652914BF06C32743D8544A636A804D2FD67CA10F0E3B6AFB289DD1CEDD 4E94BB26AA4C9DF1353EB7C9BF95F544E3FCF67EA5E0B2FEDC7F622FF3C96C68 D4FFED9073979E1F49C984D0D8731F93868E8F137226777551D4DE437AE5E27D 9AC6340013620938885263EE631BE20CC17D597484A978624783C2003885B830 269AD74A047F2E1EFF2906517BD765EE9BA27728A753A1BBF0615D7AC52C9370 6D730166015B5579401DB7D251E1367B190DE298114926B34AE0824F8054FE40 2799EA3E8DBDF999FA98E9FC634677BEB7E2A5062ECA0C2EB86A038754504AE3 5AA17151913D7B8071150521CBE040A2AEFCBEC1E0DCAE4EA5592F134CADA707 93FA57B02177BC98406E9FD02CDD47B8B2DEADDD475CAFF235D5879EA3D51A22 D4359129F80A9A705ECC2042E5419A6064CD69D506E7D3C910FA9DF6DB85E1D0 E5068ED5F4A464382F8EAF5EA8248AEFCE2C57F12368A2494F7970B396F508C9 99AFEDE6F666CB3DE7FCC667A5B810B665519E7E1450E00BB9D0279E7306279C 91938C746FFB2F9BB1859B9E19B54C00F323B79291780BE365DCAE0F0CFD1C19 02CA2E7BEE10F6ECB0658FF099EE65B791C63EC6AF40656D93D61FB7DAE0C845 09C5E1537974E0CAF7DAEC080E933811655BABEF23430F28DB530F7EE522ED28 10C5CB1928B187FD918D3B0ACAB4DD394F6FA4728AF2CEED07C5F473334549D0 F9F9C71B704E04D0E72D235A8D5D1C97096A2308AE1E55B85CBC2DD258113B70 2B2C13F34434EA594F46C3BB844048F77885219C54974E7DF47A96C96D8F3BE8 779580A9273DD50EFF343B69F77A375F54EBC467EBCC77E61F50F82E80A2E7F4 900D8C60A35245155D618B1BC0038D57020ADEEA3F5BEE429EC9803F5EA7210E DADE29D28FD293D39AF4FE3842E48BA66469C08A8FD90D643F270AFDAFA10DAA B8ED7B95B8A79FA0DBEDBCEC5599C6CD91A0C2FF65B4E3B215E5DC46CC789671 BC4C978FC383CD901BA68772C1CAEB0A3EA7DC95317628F3D39E0D60348B4538 5B6C780DBC70A1E0FB6343781A92146F55AF0856C955BC9874A9A38D3DAD511E F22CD122067C92094F00C582E7F497BC7CB2DFBEE9DCCEE4085A402FF2607DBF FDFABDFCE6EA7FA3E91DB1CAB70F0E305DF5C2CE6C9AD3A9E175C23AA444FFF1 4A9CFA7584BDA4090134E33FD00255BBA271A4EF003AFF094650AE016810E417 95633202D1391D3AF0861323F6AEDD0DD902F01A09CBAB8A730C0E99E1D5E7EE AF7A16401295C6F139211F880A2C104BEF8CB936A82E25AD6B4176B3BA04B798 89807B2461AB528877F380254E9E6F03CFF0563BC67348C28449A3DDC98B3FD4 BAF26C1556CA23743106475C9649C7ABC6136B4B4AFD1F64315127F8500E97CE 2414B2695FEF7304AC59AB1A27BCB2A25D5724AC1139A5F3332699713A9368A9 3AE4D9A81DCD148F82A4C13F7D0D4DDDDE3E298AB3F54B995885FACBD8584525 36D090A4E2F757AF9985EE435F0868B8E190616E7E4D07DFC31F833E3018F1C9 2103F42A72FC7A3F3286D03DCB55AA78962C12920C00EFED65FE8CBF2E39D52E A68158FE4B00A9E60E7D5DF243A1FFB4C6FFB8F559CA683A3E78C404540ED702 157D69CAEC86B5F92CAB736E7A47B22136CD2517B8BB71E8891F0804758861A2 05D49A14EF6A289C01AB88876D92BD1DAB1F6758ADEA4A64BAE8FACEB26B2D9E 1D8974465D740CCA11DF380F91122011DFF6C62D83149B03B5398A0FE2A465F2 3917EFCDC1AC5EB4FA4A2163FB04B20374599222AD756837D351D4A88908E165 AC702EC7C7AF5386BFCF1DA54CC408F0D01EF4BECD91AB1E9CB07B3B48AB7AB1 0734FA0475D4AA4CCEA042816BA861EC8CAB1C44FF9287F2F4E623565955106A 2FFAF9C3459366F2AB48FA18536395955F2F47BEE81869E5ABCD72F3FCA1465A 590F2FB489B8A09A1009A55A980DE591F5A9962D953AF02C2F51F6710EA6FA99 69B0CFC976C80E2DBD81305BBF7C4EC125B3ECF744CD56E3E06F5BDCF5E10577 569ACA17902C5132EB25EBB003E3155F21FF28842B02183737B9E9E6D72BE4B3 B08BD6A3C0EA6FCB06AF560CE97B45CF06E131B395A8CD2C80F2BFD124F2BFC3 28DB07360A80ACAE652D11CE7CAD9C699F81469D50DE7EBE8DD74224D7EB3698 46C091EE9B9135A79D2898CBF283164E3E746B597150AFB499BE4C29D022F8B4 2109413039FF8C61A481471600E17F1E73B67016A5054F73B9D9B3D5003D79CD A613B8B4263412C0CF0B6142632599D231A1D39AB6BD9718F0B6CF46F89985CE F68C8ED28EBD71ACBA23B26E3D97A1C00DA1B74BE2660F57E382D5C02DB35C76 42D1913555EA167CBA377805A6BFEAAEAC47372BBA661EA1242AAD8AB052EE9F 8CB38DC043085255591314013EAF489BF52D2A9B5E86CB221DBBF3C334B19222 7B3A6E7F84D1B46FC91A10C45E2BD3C34399CA55DD5F15CE4179710883F8F624 517E958E51755CFB285CC46E7E44873EE33D33B56BBD8255E0EC15475D8230F9 9EEA5E520BFEB0BE9607005320D03F66644246198F984DB16C7147B64CBF0C5B 65857EC1CBE59F04F03A275EE06DCC3B2ADACA003A14DA972A94EE7E91E86684 176107074446B1B55348E1E2CEB827C74133EF89CC4C0C4AC236DBEBC18195D4 BA3F2D9C1BA99FCFC7C1AA00C280D3548914CA986D90864B513126FD09544DEA A0B12646D2548FB01A2154B765C4EDFF98C6F3BA1A50AABB21A7EA84306CA32A D8F314D51572E0EF30134F834DF501AF4FC7321F1085B819E983A94D600FC97E EB77753978A26A6AEFE5210979A18FAA96F35412E6FCF4F9AC6042555D27BCDC 453C01878274BAF10530B2AD398A91110A55187060935838E474E2A63E871949 65DCD8A5EC2A20A788CF0E2A1B99EF0BB9BB6BAA955D9EFFBBE127ABF4DF5BB7 7DD35458B6E29392025926B94F3EED23A90EE8A7E00080300F0A05D265549982 D56614809AFE63BB0F42D0CBEE87AE6D8F3EEA6002053F537AE1B0D9EDEC9711 F4E2D83787C591C3F2AABA930D964266398898AF43B51FA94E5F26272589C6F6 1D91A7600C77C83F395B25967599921E6E98B27013ED7BDA6E1FA43777929A8F 317791ED4D432390BF6D4A174F0A52ED3F0065FDEA5D0C24BAADCB80BA65A0FF 77CF59595BDD30639113DA11A90FAA2E7CADA1543F95700C20EEA17AE82E273A D241637B5DB53A9C98C0C61B960EA4117F0BEE4C748D16AEC17A4FCB4C7D0980 B29C9569AE12CD2EC5D33C9C04025CB6BACDAB66DCA35E80B1711D62D2CFE047 FFCF55729C8A8D9AF9C02043829D911AD78C756BA892EB5D2F1DD7C28B5197EA FCADF0853846FFE42F91F46918FFE8D2E0332DD7D7833C5C73B8754E243BC001 B168036E766B89FD64F3CA7EB933AEBF30111A31A79093905B5B6F67F9544BDB 77151C61EDB751EB68CED49D31FF3E49E5CFB10E0727E73AA0E4FF5B751D4E17 A50B73BF8751F47B80FDE8A5C19EA25C4B7E17F0770D454308B7FAC314241E96 1C66E92B375A5A9D9D3B8EECF35CE81EADF885CA1520E1AAE47C1DD403587E74 A73416771260E5A6FFBC2B6AFECD235B6155FDC899DC6EC02AFA682C65C41176 00F004FB1AB4DEE34A0F35A3339C90376F8EA9EAB8E25F7A5F7CB5EE19A4ACA9 F349E9EF22023B9DBF670289994A79444E727E3F1DE3D62F9480FFE4907D404B EF02F6169834714ED829BE540DA86660BD74E3F0D460B23C8F676F6D052E4FD1 7467AD481FBFB88644D090C75FA7EC6DF988741D3E9B2D2EB329909B562EC4F3 32EFD504F119A3FACA538487DF84EFE3CF1F2C357129F2A78ED77768C6F17640 A3F4AF1714D60F3D0170AA38D2042D73E93B15BDD5B20A72C21BF76219BD3480 BB944F9C0B87E38491C42A9973A37DC55C95C0B0AA5AAE008D9A54475B6074F0 070FE57D16CDEE3C7C5F9F94B841D302E7387A3226ED107B416BD419497AB605 9AF5113DD759DB9A9D55E5FED64EC6384E4608CA1C59B0E248A7BE2A30709D65 B93FBCCAD68D6B17706972BC2E87F3938BC8E41BF56125BE70752BA68BBFAF99 393CC1BE5B5CA23F2138E11740E811BB8C685A6EA431A8C8FDF607C08685C7FE 612F5E4B3243EE607CC5E8C7D8FD60447B78D89071EF7D907214E088DCC79746 6C897D8224A1B4D271138A1903A871C509B1392C2EA7EDB2BD09C7B3793DE0A6 9D03BCC8E9588275AED10CCD5AFA5D6A795E62239571AC170F4FB0460E0CC649 683B8D250F36DF0A6C3DED4D5F65227181571AB7C7D658BD1ACCD91E3649F5C3 B62AEF7077B8FA9BA9059D9F79E2B8C696139DBD059DF1FD2B45049379DA8003 EDE9B1E90FCC62D82EBE741C5A9B96EB34ACA2DDC2C20C2E4AA8F7AF18FBD44F F6A7ECD9A7D500571902528C1990F73213473950EB4C486C07E5C8ACACAE058E FDCC0CBEB70108F4B55E5CF9AB0BC0438C5F9AB0BA2483B66B3333CA69AB95ED 68A3755F0399FF862F5686DCD07995BC5DC550B44B01562D04909706D9134514 590C331E641AF523758CA961D95E234C8E9D69E9CED83790B3CA0EF5CBC8F059 6A2319473A95ABBB39BB8C9AEDD832C548FDEDAAB2535ACDE293489050920E72 4FC5D622982F19639C8A29528E45C47F0912B541C824F8F99F4943A99C23AF4F F19290C5A86050194A2472B10ADAF1F7CA68A552AA47F3854D94EE7FEF8D7A74 4561F9DB9E347C784DC8A53E0332450C5A328A408E4016DA2FD262D9AD90109C AC1E2A4D01F6FD91F953FCAC4CF29CA38E8CC52DB88F74EAEA48B26154BE4117 DD83E44EE5C2DB1EBD09C94E05C9FC770B0DA36B9F9972E573C56049EE6AD910 492D2CCCA26058F9B17D01D2D7888E1369FEB1BEE7B5CF47D32DE6541F493C03 5A9B26000F7B8A78B206E4EA9EE839EB48E98D80187BC48C5FF192B89A570F16 F7956C3832307BCE84097C0546D0AF7F14674CE8F545D408E6A26C445F66E18E 8BD663A9CA264D4DFEF4F9AD9C6F5DFD58DDC978DEB5DDA102887D845FC92569 CC5C52332AEBE7A401433396ABAF38E7A28FA578EFDA453C91924393FA90550C C414185D90094EB79BF159699AFD5A1E07B6D7C0870DDE8DD9318B82CA6DA379 491B73C54D83035B28AC2EF9A7D0E3FA55CE8F5AD02D8CB9841C2AD119E47F6B 5D9BA68A28FE27869D66AB474BD4BD9130AEB07B81EC87D7245CB3632FCCF5CA C126D5DB1F4EF08116976E8451843F67CE702D5573318E891607D829AD8F9D3B 24E10CF450BBD6D14713E6DA77D598216EED32D13A5E1189700E37EA2F2C3CB9 0B285FC2AC72EE2B0F1B2028DB0154C212FEE9A0F87F6FA3FFD7C8A1A465DA75 9408133AC609DA26D5F3B912D847CFDD267CFEA9EAEE586DBA8BF11E2F24ADA2 E8D99CFA7025DA13CCE0EF0E1E98A53A97D8058911A2C8E5A8BED7F3E903676A A3C3C9C32E74731C3B527DFB025AF0EDA793FCE34BAF3F7822D302FA162B65CF CB4F4DC10451DA62618675D1EF86745D29CB77C6414D1CA0A4BA8EFE45BAA7DD D7109C0A39C5C4E5FA0155AE7AD9F459C540827D3D699435C809FCD9706CEDEA 98EEE42300929054A1105629DEDC7A147F1CCDF552F18498C21DF8746CB6BF06 0E33C3911D9D1C3E322AF623455710E9B3283FEC8C3EDE7E58FBA7B7B1677763 F8089C01E0EAAB8E70577C784E78533851E6B2EA0404251815C5759434C0ABBC 6CDB636FEDE5A2D9BE0BA098EF2A6158421442C74219944955408F38303C6A0C F831EF0F8DEB63E29527D00D498E789D592ABF5AA9991EAE5A8F9BBD918DD962 6223E104C5CE108F66AE3BC9D87CDBC1286C1BC9D56B4641B97986B1A4BA6D15 26184E86042084E893580039E74DF306CC15929BE2E6CE0CEC4E311811B063F1 FBB4413D3CC0D515CABA25020AB7834F622887B503027B7A1A79C85A221E3A4F 4288EC072FE9A0019D2DA640C7179A205779F7A72333CF62BFBBE7D00A23DA1B 4E2CB5A4F4619F556193B4A3EDDE1ECCB3F9587E6B311E9FDAD71AC7E1314FCA 66F0118B6526D37FA95FF14DFF8E44BBAB9D750D72C8986438D9E379692DEFDA 7769CEDD944CCA21A5EC6042226669D20B3AD30398CDCAD0D368501C0E893B5E C925D2E6031E1D17C6EEE43A379209309DC5BA027C1D44B5A55B0B9807307B83 2955E1B073D805E3051C616512BEDAA4F809053617366766CA56409FD1E6A798 0A522E89884E61B6D2B77E37BCBD22BEC02B4092B677C117C7D4D92C3B9B65D6 D70ABF5FB762AC7E54A8C18DCA63A1320E672BEA88CD6C0E7C3252651913281C 536FD5A7689808DB4BB32B81EF18B5DA5E5ABED6DF60F1C918C22DC4B9B5EC87 1EFAE592F2D1EE1B70A98AD4991F3BDDA05F520A28E7E26D1C0EA31C18B57ED6 835FDE894A71E7F5C726757D29F83D9E8BB7323787A859980A9F5EB8B15626E8 254917C1ADC3F4798C3EF4A5DD2D27640BC41F70322160BA048E43A6A8E9FD4D D947F2E3AD3D84E0E9F8ABF9FA067B9E2D4B24D4568A7F1DBAACE2B052B88256 8AEB5321CCC541F01D6D5EF737DE89B1A8A8DC6E5A82EA65CED2619A117FF9C7 661461F6E2774163E17DF53E7338CD79B828890E0F1F3324C7DCBE1FA47A2A19 E769681228E35BAE8679D0046EA87C99B113D1083DF38C9C313824AD55A0DEAF D4312D42D52C38319373F6A9BC68D01EA63FC1A1A4C2C5BF9ABAFBC6A057F6DB CAE34534220AA2F77CFA3BB708BAB1E9211B625369CF78C1F619F5569952A6E4 16CC16ADCB37BD6BC80F8F10D5A3BD0733935A07C4C956690F1F8AD22DEA9E90 199CC8BCAB79DE10B008575EC0A4B87D06F6D875762781C9ABD5A28A1CC0E4A7 314887B8E7A2E8E7F6437D6906967D0F74AE4A9E1BFB20B60A0FA106FF669C2B 371A2751DF2506E7670BFCF88F85427186F9D8FBA43D403F9BFD7FA34E02148F AF0B2ABFD9DC1F30E15476A7BB79420158DCA2925C2953F7081DCFCD10C3DAEC D2A2DADCEC9BCBEA8864585063A0E56D6A698FBB4E121F86D617C637C70FF6EF 6CA2A8534121C532E71FDB301B5B455564BD1F3BD283AE81EF324EAFD592149E 394EEF00961BABAAF9FF7E6B54F4CAE72701070B6FF9CA1F39A5945F107EDD6F CA3BCA96448ABEE4951D1E5A790633E501DCBB370970DDA3A3D4C6F90417BAEA 8E2BE0055A71186D3D0788B3AC9AE74720FEDCB8AC6BEB42DB7DE56E6559B320 473BF38E7B6F28CF17F8AE50A7E2EEDA02CC0E2B544B21A877F5FCA219723386 F0EBCBBE10A00EBFCE6F1C83228F7F4111E2EA9760143D3393AF5A482B14DEA4 B4C69A8FB09610DE5D547174D5F04D56DF7C21D7CDACEFDFC6145A37EFBE4A03 906981692C2F84961D325616602A1F9DE9D547077568FD6888BFCB634F746496 CFAC38435C286C1F3567A19BFCACA389CAD5A7572F634A7A7BB056CA4A941E65 3F2D1E2A8410FA3561E9272C80975B78978E8F99BED6A45EA233B7A003E39298 F6C8CC8CCA340F6D2F686CBC359C2C4BAC9FB1EED864A61990B4EEFD97AE5D18 8F832B95CFC7762502F72EC1F84C1326C12CD83AABF64EC0132C40E1C6930CB0 91D76FE54E6F38989993B490CB5BCAD4EC4535672AD35A087E67F21137EFAEC6 340BA4BB361B93D41FA9DAA5315AD48639E50401241826EAA81FD845C7D1E27A 9CB438994C7E238CFA7BBE8A2C0D5CA2B1526868FCBF03A709EC0FE64624687E C7DECBC86D846678C5DB065611CB6C30200DAF8F7BE4B7CBC89E198049CD697F 159D058EDC82B6773882886DBE994D3C284B352A271E442F858584E3A2D0199D 8C801243102CF814F2B8FC49C89B4D0F44D42F6B6E440523B733EC51466BCA60 FF7DBCD122C1C96E0A33CD93F8EDEAA27745E0208F6114FDF723279EC01AA89F 478C881B492E3C101C3C65AD30AF6B3B765347896F4E02AF6E9FEB35873B7270 3E0189DBC2C0CDB03E8CFD707BECFF08CB6FE6CEB367E5BF4C51D2F0117C3D80 387946BBE251DABA82F72D20667CEDD2580BEC7AC0E55EC10AE5AF9EA3B8E6EC 9AA6BC716EAF57875292056ACF50AFFA39D3040AC8FEA6949F98C7AFF21BBE6A 8AAE7F507EB0C878184D6599EC40A49B5D9E6F422DD96FD53B69AE8B571E6F9A 6106C3916B70139218C69772162D741EBA058E450E6B97D403F367A1FCC07C6B AD7069EE35B6B1BFBF894CD31BB1BD2430E1211CB6017DE3D5B168DB7EA374EF 7FC76C05BFBEA82156ACF21DFEDC8F4FA3C6398720A7F029F06DB9C6A53751DA 6183F84227CBA2F30AE917AAB3DEF409838E00B960676089B81FE35148D67A65 A9661A4AFDA4AC28A831C032DF5EED932B72163A32FDFBE812757E453A9C32D5 593F0354DA53712C69533F72DD6376FEEB749F95017B06706691FACEF3C54231 12920736AD964B13C3F4319516A89CD86634A7436F884685778578CF9B3542FA 5791E114E999B9932BD9455907A5C741E2D3FE5F41AFCE554A71F20473EE93F1 1095A9499F3E32F025F561F78E451281822FFD26A885C092616903E4A9148A96 70E2AAD67AF9B4994DB7131EF6881829FE3C60A1F943FEB36A41BFFEA53B4E35 6FBEE351FFF258AE7539D7901E045ED33365FCB8F78682F4EFE791B7C9B020FA 480BEDAD572D55A606A8B87E92FE3D5F2752E87B85D56DA207C999736567765A A8719615569BA65B139B3ADD86AD184391D34DCA9F7DFC6D1682D106577C6A6C 86D68B66AC7A1092AD3BC90C7820D2C2280D4190566DFF9EC8ABB932EEF03B35 036BA370475BD9A9427FC09F5FAE7D43FF34949F47739C1CC05EE362C6DAED60 19EF41B32C1F8E7AD3CF787B3511AFF5FCEAFB188F04DED35623B68B4824DCD7 D16A241712779C8DF8287CC11F92067EFEAB919A38052310D56B811DFD7F5682 77DF25A1F92F83F9C7D59226275B4BF02045BE8E614E63CA5378BADBC555DA73 F2361490FDBE8E869D5EB78FE8E49CC469A59F0DB12E20C644AA463D663D36ED 30E0E677649EEEFE6389ACD4099ED017FAA7D401BAFA69818FFE9EFDA8ED8D8F 0845A43F83015C49093C84AE8CDDF25447195234423E6AB3061E4445DD5B8837 158BC313D629C01323B9ECFE45CE7411F1A99627A094D52C6D30F4A3B3C2A5BE D7E1B1E9290E404E7C7BFDCF2DD0E0E9274D41E210CA94776ECEE2C276803DAF C28B9BB500E555BC45336AF1D551F2D6803D324A1B08325EDBF6B46AD12FC6D2 5BC3B0AA2CEB1F1E7429161555165E50FB9A27E8E123D5BA52FA94D1C4B672CC A22E82138EDA558257465F18DEC773529A3BE653A80FE9B5F6BA46303BDE9C6D 7204EF6F13CEC9A4578C0004561257ADE53D1ECAE1B432A2DE9213CA8536E42D 3D537B52EE41B18394CBB099F8C428C17D6E1FBDD125012D5D16C791BA035224 F07FEA172B53F51A94E8CBE8084EF874C0BD7F975AE6E2D29E98CC8A27FDD08E 59046D3CCF8C41CE0C9C7E3A5D033FD4DA19A0A2B1BE6562410E436123147A95 BEF48D14DAA1324574CAD1FD051A20B983864C0A56F5D4489B199185BD43D9F0 BF2DD4E596FEE10C0BB268BBF0ACA7E5CE51A1E2E8844CF92711855165D6D277 7BADB39A6965EE7C601FDD1279CC9FDEF0A5509C5F9B495FD8BE0F855B30217F D9C0127FCCEFD9A351A6C508068B4EC4423884B0C0D8D75E0C254F78E0ED0F11 840A7516625D56728C1705277C6E4027332109498ECA9432754ED32B0DF281B4 403D34B6C4D811A8BE9FFF4C4C3371047BE704B905AC10439E0B7677C4E3B310 500463CCD6AC20EA418B8CE09D22C970F86EA7BD2E25EEAF2BF4547700D9FB7E BA8C61C8A39042BD2E9415371BE30DDA50B0C94A4EF7356CA5E30480F5FD9D0E 509798D1573A4AAAB0CF887BFA7657ED29A707269196B1CEC295E60B7EB748CE 391292C5C5CF407F42028F118262A3CE280285938E8A1F5B23A8EC8DFDE3C371 5E9902E87383092FEB52944FF26DB7FB038B33F51BA63F92754788816BE9CC53 27F4CF9EBBE6F80E75AC7ECD2B918F10AA635176DF3BE10235039551ED094560 BA888A3C2C85170D6E2FBE011A0BB9D52A011E4C19E622F4736C6D37AC5866DB 630E6BEAD6CBD942846F5A7C79D9D58546DA28E9A25AE6F9BAFFA4FAA9C9AF07 4E2A6158E388DD8A31A0090A7C0F6EBEFD2329DCC6E86D07AB3FEFBB94A2D111 BCEDDC35436EE7C0073D3F026C919F15E06B993C98EE593BE237AC0427F2141A 13409DB80124EC93796473EE03294DEC6760CDB08B09DD8CF4AEF7B9256569D2 06D817B7AFF0EE668E6C1D30DADB92024D239D285AB140AD78D8832C1B50F718 4C0AA7D3EAEE2012B0B2EB6CAF5A703CCC64BF9F7D199101835EF6C1D7E4B5C4 CF5E6C2589E4ED5996D44D73914B730F96BCC3DB9F0ECE2946F3E4420D01E814 0C5ABAE7C05C755EE6F1E16E83765FEED9271E051549F6A33C28D191BF729238 2B1F513D849B5613CB0EBA1A4AA6CBB79BC4D30766ECF046754200DE44F13FA0 54F81F41C2AE0E9177DB0B8662C23DDE3FBA6163DAE3BF31EC42DC6A95255450 4077ED242785130E509AECA798D2AA31BD7CD10D0253F09DF2090ECEA9EB7A1E 11B8163011721B333F38B01C8A57D187AA5818D59F4CDF81A2B229CA3E76511F 274F815E46EBDD5C4CE1835C3E5E6A6A53250F6BE51CE219A4690FC1ABE9F04D 5792A65E953BD42995F6F85091459BA23BFE4B42813BBC3C7D025057024A5D6F 9AC976501A81F8CEC2C07B255A7BEA5FECA4FECD166524D3E6DF5CE4C0B26966 D044E8D6758248FAE89831C5ECF6C704637F58E021D59733EFD6FA960C15FD69 40D14DD635C94A0BD2E9E466F2CF2D8B33F3657458B66EADD995AD0B3F6883A9 BCF868B177F19CA3FAAB5167F92BCA95743C43C89F80678CE810E18BEA6BDC10 4783D7F468BC3D597953375706F955C75631942CAA640A2CF591506260A9E574 0B124CAFA41B4C5D5DC426A64AC3E1A5038E9A77D24B401DC620F91E3F966CCC 6CB04803542C3EA8AFA88B4F499B761F7AAFFD01ED3C5F73206FE5BD883342A6 7DFEB1EDF55923696F366F4F94338CC250F9AAE458DB4AEFA4FB65C416BC63F3 1EC4F812B659E01F6EB496DEE53F78BABB4A9D8A248E87740908DC34911C662C 3B73B8C8FB868985D59D8681AA31BBB6AF6C576FFD672365A1002206F47AC91A 71D9ACCA58854A4431C3B7659491A23715F396005D5B239A69426425DCEFAC10 60142239E9DB335B2721288B05F849542E4E3635CE7BA547F2764BB3528BC280 8F40706DD918D3FE426594CCF0C1CE93ADB4E2FEB60E914A49DC2DE2744E61EF 202C7DC63DBE88E79FAFE04ABC2942115552FE4D97E47B5AFB7BFD52F9CC8963 B84253EE033034DBA83160B9DA24D6A756CE1BF715BA5DC83B57302F317383E2 9FDB9EA142899B199F8009ABABD2B074FCFFDB2F9F130C674CF783D532A2F8F8 75BC1B99D11BC964B75BB81C0A7C667B119DA2C1224EBA2FDB76EAC305843BF3 2C25A7065D7D5101D962780EDE733994611DE4D1C9DEC294A10FDD0405D48D52 C40E3FA43DE82BDA1BF5C4733632E99047632D10205F51CE2F9F6454C34DDF5C 576E372969DF0412E6E10EB8C1FA2BDFC8DA234AF8BDFA5F2A5C405E4B9389ED 10F2B03F1019452EB3F704FC5CFB68E551065AC57E9C7812E05AA5788FFACB6B BD3CEF02C070D59CF6F81866614B3EE468EE7810651BAF05C514B5B0966E6848 C53CD46AA8425CECB8655125EF0926036C65F40DDF817CBFA60EC6595F5900A4 CCEA3C128841F0282C5FC859F271025346AFC16771833C65658B659CBA7D2D34 8927981AACDAB51957A0FE800CF46232FD92D5F23C1A9D22D7739E40E291E93D 26551FE009C68E94E01303E480FAFFB336288DBB885C46C5CF561B703486DFCC A0F3728C72759A0906599E065C3544FD0CE966B9CB402F4684777BAFCC503321 E156E875F188B7E9F2EFCB37C33AD85A32BB16EAC674909C5E2D6F80C6B5F1C0 5B75A5BB431CCD7932B5D19B5B69C749C82115BCD72E635450522E8103BDBDEC 252FE9AB3E3C214B261933FFC7CE5651D1FCBFBF5F479F90BE5DA86A5A4C15D2 F752EA5B073D5F1A797E048DE98413C3460CAD12D15981A01F3178324514B594 6BBFE6B299B394D271529457668EFFC71CBB111C9E2643F858E7C1269634E496 0194862295E8F83F0CDF60425813E3E5AFD8B4FE0695A77D0B3A94BB5AE0F159 6A4EC448254EEA6369BC55529E88C88F0A4E24B01BCB885276919968475741FF 016E427904FF342A8727E0506B0E31977B62B9BEC25B3445DCE35E975411BBF2 F616AE32463DEA1B779CBB6B8AF0A9596CC5096F2664905D398915B30A2A3101 1C5FC03A2FD71CEDCE89BE1478600CF3A6836CF848F29B7F3C5BA1260755675E 2578A9CD6E1C42EEE3E5F01D2812A2B58C882347354EFBBA897A5F62366B2C30 B33C8B40557B0FEA2478F6A4827F585D54425A35B4225273945A3F83173034B9 8304A9A3F912F54F695BD45556EAE666944FC48B01E82620878E1FD9BD71334F 5E4DD01BCF8B03DD493D27812A2015CA5A684D437B1BD8164DD5119FB9B4ECB8 8A8838B97AF2A046AEF86C188AB160D9340FA50CAB4FBEB19775AD4A7F322E4E CFB63936295B8B86E648C0C5F636B3E94FE7A4447188BF60CD898833B1102EB3 3AE0F8CB8DBC8D017ABD211142D4FD7374B4A275BDEC6EB94AC665F1AFE4C735 79F7599352D5DDE1F6CED12B2E551CDCF46E457211D88DC3F5287E84DCEDC0A9 C36345EF1015E60135ACF2D26B3E890BE1D271D33D6E3202B4BF5D1C7A5F750F D0101A9378D4EAA70D6D6F021B4E42B58A001DE126140BEE23B12C89983C1CCC FB64653F167B5119E33062221CA2B99A96FCE6EAF656B7F0FEF4F8A5E53DF6E4 4711578F2FAB5A9C985E91AB795AFD2C35740ABF1B4CF4933841EEDEF4C96903 156E94ED7348472A58A3E0653E9C37325F41BA968E084CEBA8FBD9E68B503BEE 563BC30CCCD6D51D19690E195E3AC0C4E48CDE252B1093C8327958D45450B5DD E2D24321E56CCE2A76EE4DD90206C9690CB3C47AACADA42D231B574BDED6E8EC 6A58365DC0E9FE81133065A742ECE29D98E907AC72F33157FA9102E58AA8FD95 C9BB3AD1E68231ADC0EDFD216ACCF4757C0EF53D72C572C83E55593A3B8B6E58 A7342091BFB220531A32C686325D1472B696A51F7C666769B3E797913CA32B6E 7E33ECD94D5223A63BD7151A56C2B32F6CD66F3680E82EC631B90DAFC1AC37CE 0AF7C4ED41B24DE1EEE4B2E58D95D89F90C25D667958CB7279ECB1216DF868F3 B111E2B62703A05EDFAD856925F4272F0DC1C233F84C544651BF43FF3125C75E FE6134171EA80AFC16AE97C81F0B8ED377D4CEFC579A801C9CCE41223AC7C9E1 59344BC51FFF90ACFA6056169F189B14CB3FF6CB33C00E1DC3859A17012A1CEE A6D5B7D19D12F7C975FF818253E68D54489D62A42A283E1D8BD10BB7D21889A1 CA401AA3372D1419ACD3145227CB0A112B08AF5F9B96DB9536D3211D022C6DA2 0F815217F2524988C5E25669C6588CC498F79194558AD562F5966AEC09DE8E47 76CC5F4C6BA500ED73A685AB18638B195889FCE23AF58B108E17783C1D43F904 F35B1E8241A803A3473CE985AF5FF1B8DF44B177BFFBD9B94C2CBECC0A957B61 A224FF1C32235789852B419926D108FA0165CD47D91E7B95E542B5EF603B57FF 4D182625D65A728C65797720890042511B5B79C6676C5661323A5BBCC1338CCB B440412C7027E26293BDA2D60FA9C0068BE4F5A40B4C1BD04AD9FA5949AEA2E0 041E8A5F40CD4B9F6BA6766228C6247412D671A28D3CB186DAC98501E3E60006 AC590EF1E51143BC05C443192C29BF4C5346CCD939FB3DA3EAF20FD084535775 313432AAB47E46FFA5F1FA555E8E378BD2B4712A82E18BD4F3964682B8F8310D C1A53512503B7512C7406956660F6EF2A58C7740C4D073D94201FBAE57F1D18A 4D130E71964116BE79D6250D9CB7D1548954FA4607F8EEEB6780C6C0E9D73539 CAF317AEE3BBB0C2149F4F8DF55ACED61742B708AEC399177665032D37795BE3 2183AD9E32790565581C8161E5AB02B62BE60DD3B54B3BC9DAA4A721CB340A44 08440EBB3990036278399FC7EB39D9E3E1847583E14A09B04D57EC9028FE072A 2C6EC8D757974079CC5A5C82E271F775895C65B2B33D3B0D73EAE3EA8A81C61F 8C491E0A306ABA070C995608632AC4518CC069B20E01ECA164423A8B91DF2841 5EE200FED04D5AD2A302B10310306A13E0BA5B3F7B32A962F7CCF20CFC940651 D914A0F393339921290E47016AC8E9396EED46E2B603413FB342942AA780F780 1ED5E49C3DC6A8FA111FFB448D11870FFC82060941A5608ADC52F8466963DE93 1C421B11FB1850A64684F02390FBE3D963A2772D00DC6D6AC4C9A1DCF5F8C546 39099D6E700451141AC84031D279F2776F6EE9F24A516FBEE0E73B706F20C944 101EC7BFB60E15C4E1121B95E24E2FF6FF3DC1A786443C705385AC87817DB67F ACCB10EB40C0F92BBF2FA6E8D2AB60912317A564C39FC47895EB9B616B34B5BA FE83D93D8209C94E8875BD26DF18E20EC1F536AC683616001F8C4F6C227C40BA 1259E80770896CF474E342666BD870DC70AFDBBA49B372B85E86B259B7FA33EE A8915AE3F83CD772907D4DAF2D94A8427E30872199B4C7B014D8333CA8D582F4 F46F321A52A2726AC9E2BD1A3A95864783CE673FED7C44E645FF1EA9C0D0A2E2 C9AFBE0F79C466FB05F5DCC73AC4AE7A3ACF5BE381FB26B11AA5C40D98180F0D B18F1934EC32287344CEB1ABA767F1533D3744DAE497ED90F23CAAF6EBFCA467 26F5A1E4C72A6B75FB2F803E876924BA3D464E6DCF1C8F00AE2CAC69B95EB549 310C9E8C648DF8E45452508B8C4E41C4D5532C4C266F36D46A46FF3183C81A53 AA86CC7D87FB7239EBF92FABC1AD2BD1C98E1984C77B0140822ABC5A1F0147BB 623AEC55F49A39FC35881EF608856DA16255ACEF9F09F22549A5A5FA0650C660 F9D5E01A166495520B59D5EFCDE012E138E98C8FE0FA108C37E81D67A312B8EA 122B0D917AD020128D8EFAD4D8FA946D3B8F539D18585EC98D713D700F449B30 9AF5B4181ACAACD964C9BBFF97ED7EE79B56CA389AE4B3149EC61BE95BE0B049 E3CC6763D7B1D9A4A40119A1D93E6FF5BC20A8C5FB7B4C92ED30D6DF0C082CA8 EBCE1C87DA5E618A87AD5D7F2A599EAE5695E425C38FB8317248A2B798D65B24 7AD141260768AA57F6D07A267C472A4773BB1B0009F567951DC485EAD46E78B9 EDC464BBB34609BC0A2689E95A168A6C267A90F642FCF12FF8F7049546872307 F18F95893A8C0996E952C2B55C869DD82F552E5E5093AA74E62E2E51901B893E 604C0385BC3523E74D22C139B01168ADE02C10469E5B7569ADD49E3107CF2EED 86A572DF2BB41D1EE0C7D9F28260913705D1FD4E78370DF9BC64B0A6FC13BF9D DEBB0897B97D21AD9D77797768260A866D761CEE512AE56031CE2D146232CA07 E580E364F7D20B5FC96F1B3DC634F62A16A1D62A4FE50AC4A00B9FEC47DBADB7 2B476C5EF776FE397B82F9CE9EC6EDC4721ED5A33C3E051ACCB0AA658462F434 6D86600AFDFF2392A1F603FA97A0F6E9055AC907C15948470C985CD7F7673790 237572305B5010E342FDBDEF8058B0D5C3A2C5090178DA726D4859D83AD7D270 C96CE577A69CC5DD27227D8BADCC01B304C121099F272664142AD1CAF3E8D308 87E38CB45A0106A65711404A64F694672546A6AC1B107D5F1B1D28EAB4EB3258 95CF8F79D4D5E0522973C57AD799AE7473ACB6D47250119EC94AFD18BA99EEB5 12B620526ACF14CD7674FD98F738CE9CACFF37954407DD4CB70206C7C7BB054A 692F8D375A44FD18D52D17C3B7B509A33996DAEF61BAB889CAFC950E9AEA233A 04944912650650EF1FCF082DE57D90882FBABB2FE17B29F4003AB1ECF6E803B6 777DD53351FAD6625E78C0070BF67889A777C8FEBF121AEF6A6B102BF4478298 C670BBE7152C42FBEF2607192A44E66936687EF003D423C1636974DB7D8ECB85 4A275DCEC8CD382E6D4FA2085EBE893B67CF5DFF68879F87456B00E201F7B046 D67C6F84F452D565B90974534F3C77B6E2D893FAEF1B310422F0BFAEC836AE7B 94105A98E5ADBFFC87A75C9D344EE696E191EB96FCB9AEC50E9B732420B88297 F69100B581CD0FD39FA7229E9051B9B4820F725421776E5E9487101BFEAA475A E8A6F85EF0D8F7A77DA9CCC348B46527DD4B1C67719DBF5D64CE81F6EE38827C AEDA48D2D22C6D9C33FCCB74EF4847C14B05E681F5DFEC1C8C7CBA239E45C2D5 817D8DC3036F9D7C7CDA9FFA9A86F6888251438F05B3EA1FD29916AB6C61A42B 5CB89A25D6438C845C539F62F24CB7D9B038F83DDA1CF01946C44F650CDA4AF2 7E72692BF7513BC2C889A0683E1D2649491143B8AC6E79CA688FDE9EAA570112 ED0DC3E746FBB76C56E5041D25E74FD80F9F08E145F17392F55B0413651F8648 701EE4BD6CB24AFC8739C230C3D1E9CF8914539B768A7B3545DB4A2F5E891056 A0CB21D78BA4486910C777F3FBBE5AF10181AA2492BAA49A288AF11ADF075D45 12BE1E266C3DB99CF88F6181F67BF0E82AF19552D766E6F904FAC4B6AF130C46 5468E0407BD31298DDE5B2A8F5E8E7C824E78A60F772A3F9B88EF85320419A50 FB8D219776A5AB9FC0463211BB3BF15C2544D8E36C390935AFEEA497852451A2 F3282C9436F703B56FD9997E7988B579CCAAA1AF0587D4E1F7AB4D9D54BE2CD6 A7B8F84D1D39ED0DEBD7E67A837634AE8BBDECF568BAE27975E3F4DC2F6A18A8 9EA1EDA14A7089E46ECF62161D6A7540EC5B4332C37CF2C621A0636E14021FD4 D3D4CBCB60F1A7BA488F5FFFF308F4EA856935F3FE900A8D81A3754F806A9552 59A1419C8C8B2DE9290646EE6FD693F008D7B2F6200EF911AC7E51ACF2980AB1 17CA9EC00AEBF347AF0CA573FD3A1F52B8C6BF82750330EBC48809D9D3D2704B 779C55B6616C1B56FCE98B446D621F3F36B7002C77CD42FE34491FB7FF982876 53D6DA8F62389AFEDEA72B97E1431F81670871944EF315816BF84CCAF163CDB6 BA1F063A740A8C47EBF02F0D6AD8CF1A5122FBCCA43C37A380A44E1BB1828593 96F98A79A4C8090D5D9A9E0CB160F11D70AFFE1CAB817BE2AB2E0B1F5CABE244 D85E40722FB63DAECA83A1D5D2C47F1621CE886557EE80B605EA74FE14087E65 35B0FBBBBA01C143E2BFFBC64033EF889715EAC3B7B0213D8555758A7CC83969 D8D71CAEBCBB463A42EE4AA36B49B170EE3CD5906A8E99DCC86061E8C468C411 DBBE5D2DFAF5D1669F8340B4BAEB6939FD7EF904C84F3708598095E6E0DEA435 EC4286AA3C6BC87DEC60098A145D7F4637F7A7963011F980B6D1EF817802E6D2 90439E2618B35E57D93EF96AD61022E25C45E221368FC297B89B898181826491 723E37D4227FA779C44C5D3CDB36318726CE3CB3C202FB84662C5C2A620026F6 EA0FEF4B8B723F233FC03E604134338510713C8A0190AF59DA4805E79FA18BAB 41BA6E285323A49844D92D33130A608774AE540B928A9DB9077118A0424129F9 F1FA39CFD2078698CDD1404C0BAAB1E960937FE8A105CC561935032158AA7170 8C1FC269E2FF897743A05175A955185AEC446F4A92520953F719BEF4B91DDEB6 8320E671F9749B90EC2FF9151CEC78E225930B2B8A4F6278308AAA91B7B8FBED 42A20CA06436E58260A5C3361FB2714567933A4D215C6707DAB8255DD45760CE 19EB1E34E2FC25239C530B50CC5227065FD86DC9F2AAD6B122AD49CE3AD4CE79 576F0AEE2196230ADF51F7689AEB3E38ED3918A0883B2F37D4A94E4B895EB44B 0EDD539F4E59098522B469CBE39CAFC22D720DC2FE6217978ADB950093755B40 CCD5B5E8D5DBFE31194FB4C752A2E427B3143512DA2E6457721FEA4FDE34E7D2 DEDB6369AE6B863C0B242F5EB930D67DA826B6805FA5A13A00F45C721DFA2E51 D3479D836F46153C836A29801E4AF89319F6B01FAB2C9B223592119C30B981A7 84AE225FC033F5C779327CF8C04FCE3D75FCCE0CAB87647884ECFC038409B50C 3B4846D8F00362B74E49754C38698C005695579E72DA661996D7570FC38E75C0 F1C84952F1B764E5E8B21FCC3AB9CE83742493FB166BDC5C7E0C3AB6A9D53F41 84314E5F604DC79AF3CB067838A6200A8754BDFEAE8D827357E0A1B5AC26246E 0230F23A10A0D539A12864FF621D3BB785292055E472D981928AAA2DDA69C6AE AE2D97E0FFE663A9233DCBA95CD0F8A4F4F478E3F6A5C3EBF559341875D686D9 D6F62ED29639E3A0DEB874CDB15707996320FFD2909AA913C7C76E85B6C02217 8CCCFCB79450BC7E568690D770B5F98CCBCFD227CF8869709CE4A234C2613F99 4A3C5FE9695FA83E155C64594F71F551CEC7311BC5260031D9CA5A0D07BEC91E 231C9EB14F438C1E8F3C374AA4A59C999D54876CEE832C4C485AA946B525A68C 024C3C3415D4559725BE6EE476405859415AD3BFFFD0662DC54E43AEAFADA428 DC197D4FDA397494B96366727D2C8C9F8946C316BCBE5A09832B56F2D7B86A14 DBE111EACE2F46D4143F3BB1B277C115DF3C937988181C5CE2BF6BB430917199 5067EB2DBC4171EF27D8B7E0318560AADE630DB8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /UniqueID 5000793 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 1 /Delta put dup 10 /Omega put dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 14 /ffi put dup 19 /acute put dup 22 /macron put dup 33 /exclam put dup 34 /quotedblright put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 61 /equal put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 94 /circumflex put dup 95 /dotaccent put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 126 /tilde put dup 127 /dieresis put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6 652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA 07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11 6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2 BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77 2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDC250E2AC3 9A160EC8C9654FCEB36AC2B586E978D54744FC8A0E963D8EF6E228ADD22D093B B889C940206F504F14DD921D909BE06EC9BACBC23EB9E9D137FBC983570FFD2E CC5D2EB5D2A4A8604A4AD418B800EDC6B89809E00091A2315EA8C071AB631CCD 04C3EA77541646B7F9D70B7EA564D92A65C4DED8966517660EFB9F77E172CD8F 1B5FA83270898C3709DE964B0C4A899418435F92C13E94F5C1C5B9D7DF3E8793 5F9E83CE1430E3EF275A5169C1005B864AD5B7ABD694E7D77B43D157B6070EAB 843B16BD639F53C50A48E040D063779B47F67AF0E115947CDE6A0C9DE8196D3A E61C1A57B150A5B386F71C863ECEB8ACAAD9A9B92C336A7B118D8D5B1FCBD698 2637028A7DB25D4314EE94974E09C2413E9C51A2504CF5B4ACDA26CE82FD1900 CF01D52F946CDA5F6434B8BD541503B1A1BDA72225592CEA5B55ADE52666C150 B0FFD1DA9BBBDE3C40E443C917C0A91444CD19BA8FC48C88835F09F35C6B43C7 C81B914BB437E99E48FCEF5984A0E10096DE7CBD0AFBD750D7BF11B5633DC364 6F547C1BB5DC55F4F2108D1ABAAA7CE8CAA45AE2984FBC51954AEBD3D188916B B0C5FF9339A80310E4A90B3E8CD587CDABD9D54EA413DE4E7B777779C2022362 96A9052378EDD3DA31F05B94979170169F1B43C60BACFAD96C76BA86B66DC30F BB57A48CBCB99683368A8E087D65343CD9DFD9B28DA91EAA3BC9FAD76337D87A 047661444966D02502C915E2823AEAE71C7640BCC8AC451239E34711D34A753C 44D5DD5647148520F4B28C97D8FF00A10B1D34592A32E90CF70EF4A01F9CF8AC 5EF9C240EB792EB337DFED508E5C91D91A3F16D2E067208120CD058F4EFB98D0 3C634F3DCF13881E7135C3FDC75362064CBC02FE1DFB6F49557DE90DE0C12A1C AA5F609267E04AF24404E050CDB6C3D6BC5DDB715621D4315D4D30E900EF3A5B 03D6524107544DFAF0ACE84F19C2119ED9CA58E88C81FCB5C33A327A8DA8CD1C BC87E83C7AEA2E430ED13B6F1B9E6045FA02C88B025D5CE7D6D191883B928672 AF8E7B0467A90A15680C1610576D93E6492A99787D4E0D49A5306DB04502D5BA 2E9DC1DC55365D68F27B9FCC33D55FF35C41EDD546F479E7D69B54B3BE72ED0C 62C80AFB76758B53337424120BBCB1872EFF9859B2BBF5F9B82BCB01902D7268 65B72FDE5A7C8DB2A7A03C9E8646AAB65F552E9342902FFD80972B325816F999 AB36938B6B88F8D84CE7EC8B95C459191023377A30F50EE2D9C8C41FCF685389 1F4BA89C1547A41B767259CF565ADA5011FEA13A782B5668D9FB215FAAFFCD09 DEC9B740E2A86055486476BDCF80B61524827F3870095BCD16CF26E00CD6396B B45F44BE76CE28AE3DC8D7BA4181106C9C1CDC7AD5A0EB51966A04C709E61F83 00B5BF8D4BE40C36AB5AC1B1AD1EBF980096ECCA942F2AF8136D70B78DEFD4E1 D59097AA1AC1D5C4C87B5870BFAECCC6A0737B6840DD148024FB2170D6B2B5BB 595517E22D52DA45EA252B5451ECFCA7EB8C93EF02E633BB56EA0B1727F613D5 9B4FD6036DF8929437C666E99131D128DB37141ACA92AAF934839EEF9F5C3F9C 1E9D2837AC8FB624CB271E530F17B048D5F934748C1531C15276590ABC4663EF 32032CD5D20002B64F49688F9FE88AE9D411596960C5A566F79114BD0374A7BE A5B305B1BCA2F2E37CC25223D2E47DEDF3718C06315773808D3F30F55419D085 FEEC2AB346696498E911D855A87CF141A4F54AC20EB75E7EF41A4D5992E51666 85C3FDC27532C9C11F899B3BB65867B929A093D71B98DD6C57621626FA4AB3FF 004F9290CE0383232143F849713BF232F37CE6947E4F61E7EC67CF0689D172E4 4F4904B8067F383C6B8F3164795E36491D94F0A487F9B4CD388958C874CF7ED8 92F1A55E037E39FDDC7414008661EC0DDE30DC291D93A30271B470B60FB75F74 913724D73B1079F7FA07AC48FA34D3BCCF435AA6701C975C2745D46E9BFB841E FD2393734F99B81B13D33D91A463A0A7EC240177392F60E826BC123684FED356 959CBDD22B57169EAD82F807CEE69B5523212FD125A6023C4B88777F963E7B95 F45D17A13C41C69F3BA48249ABFB5B5A0B823E2AAD687852FB98DE11640A9342 23A46C18168DBB0A4ADD4F4245DCD8BE40617E42D59AA5F34150729F1258A6FD E68672554A6F152ECEFD4621C895ADD52C206F1EA8DE78580D8CB49817539090 C1ED6B5BF9F0750DC171A73D1C8FC7A1AEE0A56BE808D6CDC7D822A920A91E4E ACA64086BA62D6C36EFA1C0316E0640F4BF22DA41325876BF20CC62995D43756 9345F676ECF89A89738AF302FE9238C42FB72B3FBB389E5B0D0C6A44B3025DA8 28E382F7C728EA2757F34ABA4E91E3DCE92DA8F3231CA6D86156AB372F1BBFBE 9272799EBF4C9FC600AB3CCFD6D4F314B4595C18B7A24B58F3A32E102E245A1E 3B4BA9FC45968F30D3D45B9E0A9745747E0FAE6E4942AFF044845F16B02CDAB2 34FEEA0049DEB4520AA0C29FD983EB2AE4BF2323C750C674154CB22304209F30 FED66BD9299101AFAF200ACC9384D4E6FBD48405DA464C860C3B015A306F1EEF B66B2CA786FA1D6678376BA32ABB58A3B89485A5E32ADC30AB11ABF593EAE39D CD8D263C9A3578EF055D43C9234B4B3B7961171D67F87D2F8DBD834FF1E9FB43 E654CCBBF4D14051EE6BB37DAEEA82881A909ADED8CF71D86F6321DF5D4136CA 42F7098EB04C36023F571B855339C3006159114D5D58C58CADC62E4F31EC6785 7D585ACE25A1A89240EA977FA6CA5F47827023D0FB668FE30A6108420F045A86 9DA29B49C2FF1894F73302D4425B1CF5565A0DCA7826A0F511381320CAC5A1B5 A433989251F163F48F0E53B6E32E8071551896F2BFDC6EC5CCBDA463F3F2DC46 DD4CF8077DD54F7BA8C674164312D79083026E4E0F84259EED363BF789084509 58CBC3FD7EF650C5F47ED7F8001B7185C04D031151BECADFBAF2B8F2B50B673C 69541F159EB60B4908540968260DF02B8583EC31F39882E6E81911419B3D51D8 BBDF288FE7AC7559D8CEC02E259221D66F223A6ED2EAE1A36DAF24E051E2DF07 AB444174DBFD566D2CCA1E97D4E38DED2AC8374CF75353E175546AF3EDE43B35 79AD4D1AA767FB31984829F71761B883DBD39DCACAF6F08C1C16A1EEBF1C9E35 81F9A9A50CBAF55D61D0FADC09E2106A8658018111DBABC2472C9022E32CE054 93847D893790E845B809F2ED78ADED5AC70E49CC26E2AACD2A0B0118CEB771D5 46608D763570BF5120A0CD1C7FB810E57E992303F818258EBD0EAE00A3CF0A30 D004A186071464EE07EE936EE644F634FC4E903FC910C22D0F098A4AC2C8C6CD DB16AE3DB4CDFD2D0B45B670FDAAC8CD8150802E397A002E6E10D5505522337C 7F6A820DDA476D33098383D12D92AB952673F177A238168FD327928052B0D981 F7703CE2AAB392A305E1648BE88B5B3A58733804EDFE67DC9436FD3D12A41041 56A8436A56F800C6576B9697457E6F098F93A336904C322BB196E5605D7BD7D1 089AE75E596E08D144D08B34A2B5DEE056258AA295803CE0C45220ACBA5A4640 189452E2D0429A2A9E1CFFF12053445D6FE25B51CD9F07BD438382E9406A6649 B98ACD98A7499DDC8509B88B642CCEBF3BA5B667DA575221F91A0181155AAEC1 1229708162E175E86EFCBA5B77F418D4A2A876EDBE85632DD122067C92094F00 C582E7F48C34DE8B5874229192430BF5E63DD8CD3EC75326188E24F5BC34A9B8 6BC3DF5CC35CC5AEDAE190BE782E9AD83F57F39BCCA255C17323912234DA320C BA7A7951CE86D4E2DB76077BC72103245B993F68ECE07BDE489BFEE038E500C4 AFCAC36E1C7EBC14B4C59A1AD1EFBDF8C1AC247499FFD5CEB461FB5ADC1C1DC9 E4C214326C3EF753F804E335F3DC475FE7189E5AE5BC49266491D771B345503B EF36D63F81F93E257D3852CEFCE83B2032266AA7BBBD271AF1B6A8D13F6A0D34 2715E7C5A40E6CB11C31D9C26C2C0928A872CCF2BEF0C8449BD221ACEF728264 2DBE1931913E937E2E67723D5CD9160D6800FA73D978EAB02CFB8E6044E309C5 8AF1F30F8DDD0DAFD15A23647503A4C27393D7AFF5149314E37391C0EDE9EF97 5D15EE7201192AFE1D5D69AD676FBDCED62765E4D52FBC3B768A8FB6611E2097 179D2F8466421A8F3A70237FEFE7AF8BB5042264B6E07A335F25074B68019136 7ED26A0A689C6F5F5704A331A694CD19F12EBB16F64AAB9756C5E10B753BE80C 567698C7237D323DE605D53B513E967C303E570254AF4317D6A3C034771FD02C 7C4E9569AA1EBF87F75FD4FACE6AB8A46C5A7A31F4D962275C90080E783C7A56 426E4F0B2AC5312E8CD308EBF48E17A1D55EEDEBA0A9235B9B13ECF1D03F5749 82EE612C8E72706B290B8C9EA92563AD473660C6416B93AF9D2314A03AF74172 5B3398A243496E2B8667236850D34F9107862710066B5AAEF438748E314691F9 8E8E954D297432F49BDEB64EC77F5542BCCC7D3A683705F05C752E2CD594D05B 15173D5A85A7C58E0A058ACECD87A377ADBF20271877738232343CF3F0145748 C8913FC00A089F58788F4E68833BA0D64D1D3367849BED9A5B87EE0A257F9B69 189FA89CD86B363FD746159C6CC239B7453F4033E429911917E07ED917C68EE8 A37C569A4DBF140B80566568B6BCD6483AE9ADC39A0CAF0B2941AF8A11C64787 B612DD3A2FA8AF15665EB01F0D51ED6C3B5C2EB58FF2636212D444154FD5A7D8 E671EF68C7F3ABAD00F6B8B71F2C31A5142EDF8FCCAD40DC6B5AA7CB10221728 5FB6BFCCA113BE682E0EF94B6F2C48AE2475BC909090DADCF9EEE76E12481671 726F72FD4F80E77DFDCF25CF9F18BB77C2B2C1FD9CD65D41DC007DA42D312626 46D64BE6C574807E5B7E9A9818E0DA7FE9EAE2DF5C1DE4542C3C8902AA806AC2 0C1D78B20D33035E52F6D81FDED63A3F8CE6316047D5C0ACF51BCCEF7CD6D65F 89ED92E4CF1F8364D157EB25B2F7F992183357F07CF34DE0689A5D1752F74B9B 471FFBC27D0FEAF3AB2AE58DF09C0B3A49D708970DCD936F212692CE1A2DCEC2 0154691162CA81607CCB3F8737CF61EBFB77FE244BA785466DE5DBD09E9FA77B 092C67C22966EA17CF15DB6F134334686BC61396D09BCDD61E0114C19D26B522 4950CCD90632DCA6F1683465D482F3F92BCF8FE2885B68AEEC812997BCB403C3 564A61EAAAA738F31C5DF7421257791237FAFBE2B2C94DFA2360B980123094FB 7A3763F197FD978E2CDE2F7942441899995DADD3C13D180444B71E2340EEF9E9 907F40F5CFD0BB4852C92BA0C45EB825BD9B054DBCD24D97C57D7CD81C55969F 3569FB9D4FF48894BB6AF4B070B6F0CB5B44306B72DFE9EB743A26AD14951911 C218C803A7E9AE113EE05B713CB145B2B7D00473236C106357FEA727924AC8F1 86DFE64C4BE2C01EF2808F65A190BA459B494A05ABB77A0BBF9F3DE3302D5C1E 010A6139049856935FAE6257F56F3D06431D133C6D01F1638BC544D36EFBB860 1EC4EC9E373D27C0813C5CCCA7FC7A44916CDA32E1F19761C1C2BDC7D3D7BAC9 6DCB6672C72BC88264C134A79481BFCE1468D1381E2C2C464670A08C0ECFB72B 6CAD617212E56603A437FC9DEF49325281716FE72D2A98FD5874BE9CE012D42C A2B31F310C3D9F9DBC18F4CAC08D70CA876671F739FD447BE747D1226C38F178 6DB3C9DE86F495A016CDE10C1A1321891D59916E76BCF1F30D3A17FF29F8BBDA A7E1C9FBDCEEFF4C1E66BCC67AF7F45D2B759C106B8D4A3536547A252063DD84 6996830DEBB72C7B165A86A5EC6ABD63876F5F92652C3F2BEE5C514F44C93F73 BA5DA5B5BEA81721B9A6045AD00266EF192DCB4E87FDB38938FB79BDFB300710 2412A5395279BA75BEE045D377CFF6494F3EAC42E1D48B80529A56DDCCC8ACF4 AB0FFB248641EC9EC830B93769A70E8D6865870BF9924750CD5E742534FB613A DCBF7153678B25E0A09DBB5AA58A0C34BB5118844475382447D65B6A06F98319 D7CEFB679A1234F99B5EA8060BD78D7B9FAE2D16C78DB9D54AB5B62B474F92C8 CB0FA77792B86866637D4C5183DFCDA7C8C07965D8D9196F3BF6ABA6255B1479 81C736401EF8464B5A8A7153A23A90327D98F7ECC3BB1FB1F45DC8B1C0573C8D D7C602A1B19E45F2F65CDCAFD692CB5E5025C1A7F08970D5389130549E0D9FA0 D20F1BC878995C2EC5310D65584F67740E6A84A84C25830F5407563EF0D23758 0C46C88D7992166AC487DA6D917D0656678B46F8BCE2FD4D67CE521039B02E50 24BA4DC2E5339894FFC5B597DE46F8EEA68808DF8BD8A59E599CD993D11E519F 94F7EF7E2C3CB8D791F3FD6BA9BA0AA0F3B96C4B8E7006F100350BCB00299591 4468F0B7002FB66C8D74576D8E70412A7D0E89733507D90C5214B2C6A4E4D538 02E9EBD0CF5D9290F6A3C4BAE626437E154DB8800CB449840E92087CC95484D2 72B932CC9AF3203D347134F28714C231642F6E33A109A4D588D7A5C0FA1C9D30 5E13208E17333144B5601A5ECAD44D698D0B54130C7A9259F87B5A98A2DAF80A FE88023F1076212A335FB083394C1D875FAE38C2D53CE46A9F0267AC854CC654 415D09E0952487FCE3D5373528FAC4F4A748B942947B426F8C1FA38E200B4751 CE173CA55F5FEA2183934B42D588B9933574533B4B66828BFCDF5672B42537F8 D754310377066B16ACB7552910D44AD2ACF21BD3954CC118107442FC716C8270 22E1084430ED6CD19C1E6ADF0D612912E844A7D97BBA8B11136B1AB828F5F5A8 2E873B92427F2FF531FC77BFFA85F9A10437FFEF7A977B0CC643D88963CAC10C 50D00557627ABE75639369D631605E42F9745F9CF5EC22920BCD6AE7C4B74D26 529836DAB9B37526705715CF867D499A41E72C350F4DF0EB69A8A860F4393570 97DC8C160189FF49679EE272DF9530A35F1D1FBE38641270C6DC706A27642B75 D6AE8CD53823BF2EBC0AD8E1FB680A4A379A6F2F5EDCA598A2C7131A73F3A25B FF65A4AAECA627CE6119C2221893084F76C58533BC372AA2366D93B88A278CFB 99B69BAD68ECD7FF4BB7002344381A04A3C546DBB0D97E7E446270035F3D0188 F558AF6E525D311D1B6971678EA3492A16E6238A7439217C30B402DA69F4B7C3 E523D22B30562FC12698B0F942E74A3DAD5FC8DB1F55683958992778F2BC6C08 67F6D2C3EAE216B3BC6663E2195F4E41A1240A86771200A7E40F732241341180 4E9627551D1B7ED8BF18CC6B3C89475F33F46DC03D5E6632A507DF622B1BDC9C F4E243FA52A6D63514ACE78ED05A243C6826473EAF73DB4CBB2FCAB3E3AB3873 D62AC26C1AEE16522DB094C4263DD7521FBA0BCF26B01AB2B72F289CF99E226C DD3FA904E66B47E22BB8D6C79064746367508B18A3E79F50C0E457017C32A48C 35B3B2AFA2DB776901461EEDF3C2EF1C03142855889E2B37D888F986A480A2C7 DF3AAD24F369DC90A6BCD592EA2630FF99D2034DB53C893C466FE0F54EF8CCCA 89C48ABA5268B3A2D557A5FDDA0EBF5DB2206F5294DF7F4F04132B28011B87A6 9C0602BFFB0CDA11973686A8638A76D14A97BA9FB3B1593ED2CDDCE908F5D909 6E1F56D8759534FAC6CB982056FD630C75FB06BEEC071735B14083C9F980F117 C88CB1CFEB473FA1466111D7AC43C13F192B2D68A01D30221CC0922D2220E0A1 9F8909F3BE2A18C31E545A331094BCBBD26237D496B37B082FCAB3079CC807A1 1ABD995DE6909042B382F76B7014EB65C85972B4A6DA8F694F1635F7CE8F3CAC 06A080E069598EE11CE9EA35BDA2635B92EEB6055D8E81D8ADC185AC772BF120 2145EC4D78B26706DFA245E3C0477DDC5D831E3BEDE88278D6B1082E18AEA48E 8F4F03A61D7DDCE5E9C9F96714B661257F2BEDA88C4616A33D58E0A02B83FAE3 F04F8DB0B8D36D2DE1934954FB52854547C9E2DA26F1A10148EBC17EAD46F1E0 530B2FFF323C4BDAB78BA7F7E354D9CC159D829E1649D1AC8624ADCE9E74D76F 689F9874A71B79F606D5C3A157B7AFB114D22501410AE8D52BB5E844E8F2D0EB ABCAC420B93DEA5807BE80F9F6D7AEF9744BF7C2E008A1CE21523C0D03350093 E3BD407A549EC24EE4E340818F8EC43AF73D7D89CCAAD781FA31CDA835959913 E0EBC5CD55B44464EC881D2C6096FEECEDD96D7DFE50AF957FEDD026F308870A 1E5541AD8291DA15FF5999A8A048B1530F54E34105E484C6B24D5B88D4910290 EA50B8B34A963EC32E9C96E2CD033AA4E4A71790FCB7CA671C9FB0E1B434A51C AE173342F4A51CEB59CC04A3713747FA412C0449E901F7D5F58F4A265AF26776 2A8240D4E01E418F67C1FC6901305F9F4FAE6735083EB14AE82DA681D93F2C35 3B9B19FB70A20A4A2E715E5FAE44D3FE948CFF3C70EB2E792E75C2A573DCB7F7 4312898C2F605F2DC7EE47F22ABB5A31156D68B12553743ABBB66F3AE13BD10A 6444A437D177E42DA9AAE3512AD53449DE89DF555226267B88161842C719325B 6A2F98CE009753C8E689197CA6A0D578F2854728D32FDD9497F8EF6AA686C37A CC7ED5B489064CDA1503BE015771507595DFD2366C3D909D6CC04E66D4DF3BE6 BCC5441E291E4783A3903155690EF6AED125274749044347CABC44746DD25370 033DF3F4CE4D8F318FFB9F3901827D74EAFB8574243FE66B43C32CD9190B0E78 B08DCD2B94E26F1F34DA4708F5ED22007EAFDC7AB837D9A3A5EA983DE11B30D7 D57D3438558A9ABF4FD0D9C516C19BC3EE72C196C2D980E90373DF1BE8617535 BB90701980C90DEF536CAD321A778F6A7F4B756AFECC629A9AD62A4A30E78D31 A4C816D92E2D83205E44A84D9AA9894F89947C9E4690C75B163DDC5F148E11C0 E409531BC4E6D79499BA0925C5B0C281DD10FB3E67A8E3710C4D7C30464CA1DA E0AD4D131CD9983EFC664EF7DFF057BC98D24FDB242409D638698119A4330ABC 767736F19E5740AD4C8D9F1B2A794C2CD6CFA2992D1BCC179850C54AED05C611 9CFC722030898222571350EA1CA53C12C39DDA83AEB360269DF9924C48A04DD6 6F92D34E7281AED05FCBA210A84AC54FA4113C47E1E3EAAC0834D286EFAEFA80 52E8E7CAC040DBE16BA40CBDC5311FBA06190C3867CECA719566DFF429774874 2A58848CDF8FB26FBBA2C9F0E633DBDF00004AD8608160F92C4D04FCCD5613B1 A959C339241A7E6AE19ED210D83986C65B61E0BC040FF467D722AC7544470CC9 5633950A393F4F1720D2FD206487B182EB5F1D9D08238AF44447008189BB3BB5 9AA9A381067D1D181F5D16BDE8FBD006A08D6B420BEE4C3FD9AD289232F8531A 5DC43C927A33E60F1E0D59E2D8027976AB13544C028CA6FCA8AC08FE5F633236 C8185E19A8FDBF1B7A86904796592D47ACEA8CE033CFA2CB82140B40C6B2A57F E937178CDCD17D34101D7878F0FB6C4D80D6B1A54E1BD5B589246436F912A27B F2DD9099F2F851567B5932B621946B47B339FC4CF7B2C8DA3C3B7F8CFFC1D006 DAC18D7B2F9DC6A5778175283AF9E9F9DE1795302F320DA0E2548CE55724C117 F1A6F42E04B97FEAA949CBBD256F1A41003612F8F8EEE2B4FA8128DCB5E39445 11CFD9915DE4B64FD6E43C08E853A1E51C08F8FB7E7597494ECF781C1BBDED13 34C5AFA03693D8B020D18C31F0F2551BA028F7D45187976507BE475D47E47C99 ADF192B1CDA1C3D767874F8BD12066850FAAD5CC7AA416AB2AE2888082A5B1FB A3F92566F77CFA0F0E79E2ACB87667E954F8FB335F0117790475CAC5B97255D6 29D2628BBB7BD7B13A55E9F3AB439FAEB18826B7022034F8EEDA8799967B9262 95F13E497D4795994B72CD28824C4C30FD338EA2A6E247EB3AB90AB858B2F0E4 CFBB30A69A3550DE2C27306A19FCDB98D1AC2C103E500253719297512443075F 0B69E125A101FE3F747EA5F5908BAFA5437C9CB8D9CC39C43A33E8E9D3B87972 DE9566C478D6E892BE42B4A8BCF98679477C99C920CDF76089E4FB98FEBD39AE 86A76F50F402EC91F5F7AC16DCE92A418936E26C88965BFC5F8D70A819BDCB26 346D6C3617EC8EFC412B3101AC84797F91AE13001D484D662CE2E2678A23F560 291ED5B70597126D07E889F0FC0DA2588F59FD64333B4D326DDEA3A9530D7695 061BB5384326A00B62988A2B110317BCBE2D63497A1A71012FD5415E73446F90 54127B959F25B6D06D0625A8FE9C152AC407122E74B6B1806A15CEC26E5F4371 8FA0C8EDBAD763161933D095CF0D55072F6B688AF93AEE92B8F8F989204AE779 EB85D759E32D451D3C947FCA03882855AECA05F04784AEAC690964A40D60BCFE CE18AC5F65B7DCB6ABFFEAC389397B5870F0E84D285E517E7F8176C646B65DE9 3CC293C7E89C5F648E99B742A5AEADEB93BA956EB6F385D20958FFA693664B1B B5C8DA712772F2E325D74B52E7EE9F74BF427027C54B9E5C0556F37E47CB3129 8990DC442DC7736F99D6EE6EEA91F956C71A2DD5F78D903D33C6531186A6EEA8 F37FFF94F31DC70C446A39A74C5FB2DA25AFEDCDBDA71253A034DEBFAB1A1032 8E4F68DAD07461AA5D5AA8CB89FD2FF4B8E954ED7B9C0E625B6BDE4F8E0AE47F A440F99F7F0ABCE836A281DAF82FED4D383CA0391E2F2B6107B3506C2E8406F0 133DA80CE6B0A899FE40768124F1AD0C42288B23C2DC9E19EDB92E82B0D858EF FC66CDF5E5647EA3E4722FF5546616CD4CF5342B479A4651DD7E050EE8995DFF 1685C13F49CE4C491FDF7208ADFA11F40E8D565100FE95DC8BE7B1113B21A573 30F334238BA3F4EB6FF903A220F3E8F7FCE4B26DDCCB5B5A79C5716C3631022B 4D2E93A93ABE6C7F54D1E9051D95F9A45AA332F6ED55AFB396285F1A811DF0B8 93DC73D461ACC5FA91395518ECC640CA20FBCA0C37F4673700794D79852B9876 8FABC544323890752679209AA1054D9B098F6F606F94A477823E0748B1F702B5 6F7EAC059A0D4A72F0D48E1D3CB87A06D8EC0F00E69924F87275E7BAECB8DD9B 228A5CBEF4B81BFD9B2D2AE63C27F10FC6D88464F479A4752E0073D09D733C2B 36C8978FD0075E7F2DC09384C9639E3DE2E0959421503B339146CA3F9F52D054 68CF4AFF6342B8ED8BC40D09F0856DCF147BFF6ED5F3DD4BA03F766F202DF068 5B84B100489620188F3BBA56F586C464E467FA34F3D9FEC91F2068B60274D5FC 4F22510822FF54A74E36B6B962D7CAA63C137261ACE479BCCFF981576AEA2F24 C0CCDAE81DF71D9AE7829C9F6ED8D8125EED95A81A37544DB01B765F222A5C04 F27B8664FDAC5042215ACFA0AA0CF35EA042B3B551F6D9FB4942B7EAB82EA5AA 63AB99F8671DE54716CF63A4F11C99E03543F1284AB5A713B2CF141676226B43 50CABBEC9EB62311ADF8117D176345DC050124C2E95DF9FE0B0876D7AB81451B C04BD40871AA40469BAEE14723626ED24CEF389EB2508271870926D839E2D32E D090DC427AFA5758E265BD280629D56BAA3979ED4CC56A281056FE40F7DF4039 982ED5E5664981F1D2FB624F08916523A9992B933CCA3394DBA935365EE3D7BE C6CE1303CDCC09EC16B31858467CE65349B202D613D5CF8ED9008C46DE7B9444 5FC62D38EF13C16EF5E944CDD95AAAE316F7A5DADE2EFDA9D17BAEE4489E3DFB FA4627A8861103A468F391A1F34F87D739D385D9EE982EF6491CF70974CBA0E3 68848D5FBE038469551C027C9E65C03C0A3CBEE624A9F181602E9EF081EE3198 BC0429C8BDFC8734B151398DB98F4E03FDD04FE6EF6DC4B33ECEE9A09225FE83 4A4C8B78921C014F1A56ACD283C64D0C08B37389C35ECC0D820383E45DBD190B A0EB7682ECF8EC122C318FFBB1945EC7F3ECEF97EFB23997D62D5D7F5936E9FA AE8E798C1E1950044DEE5085B0384A7B506C858D6608F304E3C11E72B87F1962 A49117EFA050751E7CD8E10CA5002BDB7125CAAB09A072BE69031FF1614D9D78 2B6A93332FA17BC19839366C2721B834FA2E76D2539F0FEA9E8C690AF8A1D939 0AFB97DEF309CE0A3C302B8D5D28FBE65CB3436005A8D9F8056AF1F23FC348CA A146ACC37B874A4663D549A401E98BFC01D56205DCE7532B10890ED4CB20933F A67A1551E10361B069CE5593207C521F3B2BB797C9D2822DD04E21BD3BC252FB 30E92E77F4E85BAABB742DB8F062E17EE61A5236DD260E14F33062C489714403 3B3413A5066684622CE8AF9460FD6DAAA5BFF4370E6EFC77CE81F4B619298C77 2391EE3D1F23253E536F122137822270AC3CC632119B31E932783A9310AED124 14143D5BE189BBCC3812D5D0E630AC359BB10302BFE8B99CF93B3B1FCE84BFCE CA996717FFFA8146477F8DB1798D9E8D5528484C85CDC2DC2E76D6E4580021F8 5806169215259CE932B9D13E3A9FD729693613D69F1995F1D63089A879C0380F AF749B016BACCA401F4CDB542E2611F5C060C050F73657FD9348ADF43B2A34ED 90E784F41CBF364DEECD123A26BB1D0107B4C89425CFC2DCEAAF010ABF3C15BB 7254DC13EA44EFA101BC45254D7610BE5A2A082C64A9DFD4204555BD4C45590C D77C270B2451EA7977FCE9C167E691C492560D897883C87077CEC321DBEB6B60 C8E3602D5031204CF1328C9C4227CAD7009F857CC655AE6CD4A935FF6600A76B 82693147BFEEACBE2D711F4EB2E9D1EDE6CEE54FA16103971DB2892407CB302D 239CBC83BC83BA938888EAB9275E8319302058BBF8DF5AB3705B9F35A4C08B0D 6668B1D8E8B5CC4BB0FC413CC26AAA9A46C6D4C5B185BDEE74CFA284E24ECB7A A16094FEBE1B41980F1B04EF4F8F210E15B1168B757B06DD1D481454A826348A 4AD2B5CE5D2382D7FBA0D30CD97832321825A27EAB3E42C611F31DE946144D5A 0B466F81D28882C0122B8190B927C9618F886EAA7CDACAE95032D56E6DC108B0 DCDB867D5AA476934173E4E78F031C98267B984D4FF153CB666FFF0A7133CCDE D47F9DF18EDAD5B7036163640C3366222D847E04F0C3F48C317BAC8AF1A2B82B 68464297748E60CB5326A1BB6B9A00EDA4E0B16747E36D925C2CAD2FFC549426 31B0F4917BE242D78C8E10A2100D3ADF037B4918D763697283478486E627CBDC 03DB15CC79D529CF49A29030D2803CF1C568D8CA5F1AB9EEDB1B873C527B02AE 7F478967712F6EB18A0E77D42D65D7BE5E015773FA932D21F70EDC20A905C5F7 28BCB96E77025BB93648D671467BE7911C2C3503F9042CEA5A4627F81FEAAC67 A8179B198B61827E01FCD75BE8C29223913CBD5CA0540E56BC54FA5B4A84C6E3 9EF6C201814E016C617ADB5908B36489BABA19FCC06AD4C1F5C1F812C269A8C8 AC7E5A1406E30B42BB57BE3B2DE60BD88410F55B41EA62706D29873C78CF85F8 FD5250E3D1B454A3260F041E5A2DFCC3700295A980C1251A21552C8CAE493EB5 AAA8A61D179592D1FED156B9FDFDB979E971B5DC85EBA32B448B3B431306E425 ED58138DEED7533E295EE14DD6E234A5703337D54F7390AC40B30A3E6859D50B 1E0D3C175F764715EF5EF1C662426A823A7D3B4FA4A79ECFF1E139541B1F676D 4CDD23BC253CCCADBDB47C8086D7657DC8284488144C6C2A616C249E1355E83B F0A67287F723E6583C1B489CD612DE80B8089AB6335EA9B13FE508961307F9D4 562222C36EB862D3CEDECFD5B3AB365698F2712E96886AD3194118BE196DCB9A 1FF45415201EC6CC499BC77D7D81CCE095F763BD5C485FD26B098D5FC4D746D6 BA5268E0646473C2473962163102B3CC634AA7F7396C8BCF0B389B095BE7FC2B F97EFD661BA953E05DBCD629BB4D8F04681EC34514D6241CA78E129EB976C3EF E92A44B2CEEFFD483085CB8F837AEBA4CA8A1F7439566BA57A38C335ECDB5F9D 359B9D280F57AF90B51E293501C4E770C212836B472E61D984F2E38DA01DAD1D 0DA4D22D56909164D8794836C3ED15EB3D9725A7D143C1B91EA3E814FD163854 42A3109EEA2FC0C7F3BB6A0AD0F0A670717A31068F6A5C589C6272A00555CE9C FDF69B946C6FEB3229EDCD650F7CD50B8D87A605D39A2A54989EB7CE1FEC9D31 41AC46FEA35B2523700D1B2DE93129AEEEE8B128E7F4BD4C84CD17362F3E3D69 26359D3037119095D728861BA164FFFB4300BBE12F3E96C5A9BAAB69293EBCD1 4BE56BF3B14927E1BBD5341874FE5CA4ED6912022ED7A505307DEEA144E0A302 FC58E58CED0826CAE2F50EF586FE01558CA12B909B85549AC1168921D68EE906 27313A946D6E77D356C81C7B04436F507639342EECB62FFC50305E89D2D54407 88F9DB1EA31AC6BCEDDD431D9E30E5D1B65137A0DFDAED04A8DE067CCEC81847 79A22F637FE30E6DDC5B53AB5DFB4C10AFB47E04267A4C24E3D4B014CB2FB26B 079C0011E3E6523A05C6501947BF194A13097D7C20F841874F87CF2BBA0732BC 60DA4805F79B5A3DF518686B8AEB02718597CDA7C92BADFB0DC7341B127DE9FB DEE8E8CC04F19776565C122EAD1E8AAB1F6763CE1F9AEE40E860F7007C92903D FCA3AC93DD39FE1388E450E74F2610133FEC58D5921B326121F4EA2EF940220B D221A8FB4E0A508F82C0F585E2F833318E0FF0586FD6E20FFA8229BDA3A6B84C C7683B7056EE108FF5B6EC293F943000B5766068F53814FDF2ACB20D2B232455 012AFB9C130A5260E05125CAFDA5C4F5B9B06B6C429484F5A5721F0E8C44D981 9CCE5F13B3C6A8C7BDD2C0756A0AC9F3BF98B0D7F29ADC4B04113DEA1C20263F B8D8F0D4EDD89939636BCE5B7933ECC23BC0784068A53085D2031F1944628EB7 42C73A478323FF0642B3FF86F596F39458EBEA4DF37D40FEE5DE5685B025310B 622F7771DA09AE94C3F9CA763C106D24B1C6890ADB919BAA169718EF7644FBC9 04C53B5E6916BFF6B2417DEFBBFE46A1AD8E113A83A675DDC656AABF32BA1C00 3A4D5A6099CFD99B5989CD779946F196ED976AB39A666911A310442CD7E65CED 84F1072CD70666150E4249078596716DF12B86A66453BDE2727AFFD46F7072F8 C905E5FEFA8C3703347C1452F36D9349174E5D0BF4C688AA62F617D0C2132614 94EF3B479D15EF9F3167839F73F05EEA73FF73CF0510733BC4E2C358CF53E619 CDD8194417D091365326C4E8E7460C19DD67847D66FBAD913752774A8CBBB702 A4875FD35F154E08CC3322C484FEF7D623185BB09289ACFC927B885E1FE8AA9C C676C237444EB2BD8919DCC2B4511F4A9573503A536D0477ABEF0C05D0283D68 52E45D3792ED5763ED5959C92CF3CCB81DA37324A083259F623646D8005A77E3 A35B7EE5FC52FC36F7E799AB5EE36B5DFACDB1CBA0CB96D5FA4C438A0EF1219B C0D3FA3B03882821B99490A5738D3A5230232C23F6D2EFA9ADABA14F1F61F4BD F3C29F20FAD3520CCF1F23C653459E489965F53305C563A75FDCBB9088903D7A F6E9A79949E9FC0DCCB4C0147C17C4B8F3AD26524DACF9A6A1F76D7EDF4B8109 DA748A7579C57A13B5FD513FB76936E4393F85F1DE216814A866273208349EC5 128FCEABC53D93DE84645D7501AED73D109164F016ABB45C90E6D1C7E7EC13C3 AB22FB3F3EF6E119ABAFC82AE5E1D371E28F941A9298F4C7F679BCCBC36993B8 EED1F55CDD939B8464FC982E84D7B8AA4BAD4768970360E9C99093F9C9F5F223 6AAF5104F04339BCFBD129EE7488855E9EEDFC10C891BE29E742535DCAF05DBE 1618D36EDB5D8F40FB5A547EDC45FF3F44365950517A90197E8F842F99ACF3E8 B345070C55E919FABB38EC8CDABB88F027F5F3D8774FA6DC149A82E2239BDC1B 20C06A301A272094DF3DBF9B227A9A4DD2BE83EF224617620FE776C5D9DC6F54 047F2FAE5A3E15EAC83DE6A2D89A4D5E59A4D503F061D3230FD6BED27AB109BE 4EFA0EEE9A0F289D131BBA1CEDC02E319A3723EEE98FB84BDADC23B095E48721 0A85CE4895379B8A7D59708A1DD94DE02A4AFE3E5BE0166FAE6C0F5706817B1C B2DDD7E68A4799BEE124C8AFE8DDC7D7AFF7D394BFB74B9394F554875E6F83E9 914B4D8816D16E62AA0C593D0107798CBA1CC095B463EC888E530F5D253F9452 6457087CF9EC76900D9F11637E4A43CFFDF3073E148F6DD82A0AD5A4962EB237 6D74B43ED747752B9FE62F9FE20AD62A2EE61897D5651D6D61D3A64DCE59D84B 3F36829A1E08FE27C986B64984D472008DF125846277D7854F4DAF1EF7B066D0 49828F668E671C77402B543C349C4744677E31A24FD761F96B3EA4721F57D980 C442F90DC92B981273127D061D413E37FA8D08D0F473080005BB900719999034 3EC253DE8340CB8241400BF43EBE83FC2F7D039FBDF98C3AE5AF967A79CE311D 1EA5B11D01C7D57F1ACE6D26185D47666C13429DA58B48537125719B3FB91FC3 F7297A5BD924C34C87FE0D007E31C06871D5FC0D1CEB088C4C1F5C721975597B 106C8218AF965069C536CE44A458C5F5EF16A5C32C039E91269DDCD6172656DF 94F9E3A088D25FD0716D3A105021076517BB350AA163E3C5C8EF5AA0F3506F4C 6BFE34C363182D687F1689A3A8A15C5A989F8373AF8079027FB7E8A703B38F0C 163F89FE695E5753FD9FD572A62318A76D55CFA8112CC3D7D5C0842643A4D5E3 22758E66ED28F0404B1CA2AC3168613B6643C2052364207431C0D49A0E6B9A24 8C7D4BE9E3DBFC08C4FFD3FC569EC96350174ABF893DA2A0E9D40A8D64792C31 E0F54E95188025B6333EAFF3DDA8C2999422C9CB849752D8692D10E1910AB2D0 645E92A9B210F91118D1BD0A87283D69B232E5F9B76927824B667D5F4F42179F CDC67A1F77D0336E3BE2E86731E7DD2E22A4858E7E644B02ADAFF107906A298E 4315CD0D53AD4267F477F99B127B76A1574AF16F8622CF9D3E3039556D4A0650 B48964E3FD1312D6359A68F8DECC0E9E50FAD4AD4E251E2E9437F2144DD6194B A31C2354D64406E5C81432B084A60F03372D111341C87820769734D4575C12AF 6A37A97731F66B9C6621F75D36759571A0D112C61E0377DB49EE70417D896ED9 5AD72EB0C37EFE669E8A2D463E69702266FBCF92D6ECB6067474E644A4EF3AB3 1FBDFF2CD67EDCA97F03A8FB8030A909C8C880299BD440BB9A83186A9A371051 1A9144E98DE8940B4CD74241C519F61A65895AD1798221ADC87108F46C4B0053 F52392A252B5626018BD73665832CD0811FFD4C2B4DCC95C5120D4FA3C0EFFE0 0E142C26912591EE6B2EDA58A791CAE13CBF9163B1F51C0B9DAC2EB611CCD11A D06C95EDCAE3671575BBDA696D80A767056B82E732155650E4FEE9E15C84B4FE 2084ED8A51B748AE344587EB125EA0EE9501CAF82021913D6C9DEE9FF6F8AD96 A6E87E5FA5B9FB30345B710E5A1C24D247D30F31A6F701F5A722C92BAF496CBA 6DBEB0FA393A87B36944394115B21516AFC18078E1FCC7EFB63EF236E08CBB6E 745B20205A30B82CA5F6F0FEFCEA72324D5CD9468C86371AC76426CB9DA22BE5 441C0744ADFD362CA056550AACB0E820EECC1F496359AF22F1F7552B8704FBF8 80D45EAB7F55531402F9F5A1371E8724BAAC1A4CFBEBB50FBF1F86244C8A1267 BB5FD011571978BC534FB4413E8FCE25EE2C8B8D37657F210F3DBAB74A18AC83 7E3A0C7722B55016004509CEB16AE83CC0A440F5F429B79BFE7E0B7E4CE20798 A6AACF64A6D8035CAE464C529F1BE74A1AC2C3038448336BC99E42CB9EB5990B 21C59034A3133F9C931A1C4DB2EB6D5283B367F2736D1BA00160049D06D8EBAC 0A99536CC92BD88EBFD6EFB39612375679FB7107BB536CE1B19DC8381B846B69 B5A7C5639148F95DB5215C46FEF6A3C9CD1F9E4DB8E8BA82360C3451228FFF88 EDA04DF44D8F6BDC7D7E585A9C84546EBA7AADFC388E851854E57EE2C9002FDE F4D76E5F43F66DCFCDCAA7DC1DBE2F83D3537E1098576E3041BB5E397F1D8B4A 5EA2C5F1B7684633B43FE536565C15B18EC1B7C2AEF45EEF01A0825FED97AE88 41EE6433D97087EE0D9CF21530DD0D8B218FF74F545D9600721A9476CF863CB3 543A9D3FA7C7612CE5D44BA932552FA4F5CBC7B2DEDB8DEF6D027DC03C943625 EC8821B988DE33E3B7D0A863B40B85C44814FAC9631C29D0C7101884AB875BAE D25ABF142B5BB10DAE3331C3E33DAE98676129D5E3B413316A72D5DC5F0B178C A4476C1787F871018D1B944FE893D4D80DB3F3AFCD3FB8301155A05B7A291B7E C8B71734430235CDE0EA3C06C79EFFFFD72076947D7BFA45DBD2103447FD8040 35F503FF7C2112CFE9E41A70BA4B007E9EDC78B26C61DAB11D5CD83479FE9D8E 5599820A4A627C6659801E3A1F9D86D812C558BD3470530E00FC17B17A3A5498 0C0770EFED72E02C4AEACEFFB33AF9084FF2F11C767C3A6A7AE6CB0731B05959 EBD984C620DF4444143CBF1044AAC40FB0D730E3B051D0D3FA89B44CE8B2CAEB CF40A6140262DD8FFE2EA85829555AE370E6CF273DAE91E994372409A3EB487B 71CE92769FD8E1BB57A0A4FF156E7D4081136487BD5C54DFED6A5F13A5BF1E9F 1D59AF64B22F3133339294D20401B9C0445E1330B3969E9AEE43571BE9D534F0 7A366C3CED71C476F4E47FB596A9C3C01E642E81DB51FF261521632B2B6C19BF A4810D6BB3067581587409E4F1B7815BB43204B2B4F5649827DE1CDF531B9723 C7C19F66FBA7D6160252BD81749A159D3385145E22033B35CD23DCE0E10AC009 677247744BFD73E05FCB4B6325A283F1317441AFFA99559CF45BA86F0213D614 60A23D586BFA6AD380D869A6FF2F2A79B3A533D7A1466C43992627AF7F02506C F1F78FFE1713D2CD22BCC83E4552FD08E02A47DA5912F05381C10E5F5DE695B1 C0DB982003DCC249D70EEAAC3C2E82FC16C600281FB73AB5C7AD106D76AD6A9D AEF175EF3B9AEBB6C3D1E74538226B5DF710018D6347654C3C9EDB461249DD81 460D442AA26969E862E552144D21CD5AFCB9E47BA6EDA8A7A721C80C3E5ACCFF 809BC54C08ED92D7B63978398F3995CF651EAC08C41F273FF5849AC34C3FF3A9 8400D1C58A1114F850316C79E9807E3C7AB19A59B9FB269FAC5AE172F4E61A7A A5A594D25AEB917ABF40759B88E520FCBAADFE1AF835CD321D89ADD1F7397592 15C6C139FCEA57C4B17BA9DA0C57C28EC59A9981F28E6B9B1F9D28D4E59EC59C 57C1CF6A57022190DEBCD20243215C9B2E4625678B304F68EC3AE9BF5A0701CD 7610F0CB7E04AC8CBBC22567124C478861146A562FC55E213DB45C72EDF25731 6E3568182DEE470945B2F038ED888305E5156E7D56902A8A0AAD84DAD8E948C9 7EB680063AD550A9346CF4E365A00484AC956C6BF4A0DDD09A7AEBA307976CF0 3665C04D7330A7645C960C276BD00533BC087F771162971A8497214A5A581FF9 68AE42C48FA707E1982CD09167F91CA1872D0F1D4899AE9B7984E682DB30E18D D31FE805AE0A6859A5CF7502D250BD3A503D4D5E46E18C7C832563940EBD5734 21010B0A71762B179B038D83C1D4888D2F9787B88335FA4E4E4B52EBCCA3577A 5B25FB1915C7C12251874258C3C19BFA85EC1A0E03D2046FBEFE2785F345AC20 5019557717BF90D40772C81846B0AAF1FE75FC2E4E228FD6F948586DCC272B77 F0F09B94537F4822D9783D260F45FE9DD7D10245D6BD60C0059D9A1E43D3DB76 A7277DEF18EA18C41A11773A23EB34A28A9A7DD34FC3EF767AA453D066F334B4 B07F8BB41F93D7889D3796251B01A41EA61F4F08E9A6DB793C1BB3A3583501CD 42166E9EBF44D95FD3FA3AE8158463A792F41AA648D7D82A5740B5EC845FFB73 BC9A94943A0129E11CF7715072CC7FFA04C1298D813994CBF66210A5CC25B6F1 F77061BEB56C0D4EF7928C23CDE77082EF9D631CD895C0DE20705E74DC1BFF52 F60C88930A227429F2BB4D0387920D488A5D87B4A76109DE715F9636258AB3E4 76A5C4383B8C93FB88AF2E937FB29C9A491CE6A90DFFC701EAE23825EBBD2625 A3084E26F7C9B27D23E37E936C73FC5B1B0FA43A45F9EB7F88076D12DB2BB6EA A9E0C751C37217C1B8A7C191B988BEA124AF0AD7DD6E71189A6FD12547CCC1C6 8A93F2AC3D21C3AED0F9920AD4BBD1A28E0CF6660029D5FACE40BDF759166DD3 A72338C9950378D7D1F1A3C57BD284EFEFEDF58207A519CE60B172EA966F110C 6DDD88AC7C099B9959E14D9103722D3E9FBFC97DB363D6F41F534D2AA20080A3 0CE25BF8FEE5113712BB947A2F2BCC44AD202A5AC22EABBA774DBD891992D33A 694249B418DA4D3764FE0F9D42A89A617C45881DA0406E36CE48CF6F2590ECDF CEE414029A59C97E1A18C253CA36240C0CE8AFF2CFBF2A0A83575870458E83F1 6E3C6A062C14DB32DB2106480E73441C270C6A7E8C97FEE3864883D2B7CBE17E 8A1F3B945718B2381AE8802603E336CF151B90D2774528482B21C330774C0EF8 75025A843337779143F288F5D1054A7AA3D92D7147347102FE3C5F432066D46F 3AE51157AE497B213B804496666ADAA0B0571D57BF7C4C049C567F9A1137294D 133658B88E16D6778FC4E19EA9189D4608A49BD69E7E6736A1114F7053563A75 CE1A5FE65817234FCF46D0EFAE748D2AEE55117D0A7FA42CE51D499A8553103B 3E0A877485DE52C15FECD203A7945ABCA74B5C713090354B0CF23F7A00786F7E ED18E269039E3864DEC8BA06B9FF91332CD54023AA67022FE63B1D24414303F9 8C6E15D95F6D0DF83EA8F0328112F59E9889C13888AFFCB4F7F998FF159038EF B02FF8808035C4D33F55B15273C3727043829CFE0615420F2FE0B4B536CFBE32 F8F0802094184015315294D1157E4BD26A816CA9C477F310A67E7B102F630502 6B0DDB7C38F75E68B23A9E49D96776A4F53143F5407ABAA39AE4407F62AD71F8 5BDA6A22DBCBB034A56EEE834250645B404C8BA019CC460751507AE64DD2F7C1 AB4C8FF5F4A9D94719F604EA68B1B7CA0A85FD170171B488175A02C224598BE1 84856DFB99EB6BD7F7B9E184D4FCC81100519108640B87F6E18645758C184495 D66D82E0E4CB8797FB6873169C050582319E224B69B9FB4B33764709A168D60D 07BAE5FF7A1582FF7E8C23FD359743242034045945A86DA160390743692C7F52 AC20F4E4CF98309045B41BCF0D13ACEE02BD17273843A47F542237F8BCF0A892 2CBB194D76459384C4CC2D6555B8240B2E82B34329AD47FA0AA13F55BEAF949C FF7941CA4796E145AE380C79302C68E1F783DDE5FEE5FF06D46A233426501730 4E5F897FABAEAD6316581F61F82895DC638970242657436D10706986D2F41F00 17B44B799B4F01E7C81B10E7DB7CEDE54B50A646AD18CA272876C9951D08CED6 6340B70E56DACECA85C186B5EA37EFFC06421E6D81B84BA1A8AE7520C446C8AD B75CFF5FC1CFAFAC1AEEBAD09C9FCF05B42BB30A9B07DC2321A50164F0EFBB91 4C17725890E74621EDD7454E584D244CBDCC54C864F3446381FE57FAF57E256B DEA38B41E004F6701EC3C15B868303187326BCAC527E9E79C8D4B62B8429F77F B1EA93EFA4542200D384F3BF4DBFA7EBE5B2B1A534DD28616CE40646201633A4 49E5345889ED9CA43EF7269E0BE5467E1CABDE10C08CC50A1BB330B0E6E6ACB0 CCF8CA9F8CA3238535339221BA10BD045CA70ACAAAD220385C01552ECF01DC2D 17A80D73DDC8E11810E48B06E5ABE94703303DA423CA0D982AA41A2D268DE6AF 6BA006DB7E1AC6A9CE4FC64EE47510C7FA2EF1BA1240D9BAFD92313F5C632947 EE9E38BF50DAE2B4E4002CD4DCC270F5F1CFD7E3CF367968E6CDF77C32892F03 06442C6543AEC478B948104127A22BCC376F799A2DFEB64B836A892806A0AE5B 7010B37FD5D20EF06ACF7D0B0585B494299292E98CCE3B1EEE844EF5403BD898 9858E6E8B26E66B2A5E27E9C7CCA363E16C61B792346A0E1CF28F10F3683BBEB F1A8AD665F860B3B378F796BDBA042D32A95EBC20C6D3269311A05CB145CE522 1F148EE96A22AA927B00FB5A8B29524188CC192F81F17A094CA4776ACC042F8D 979EB8FDFDA691CE85B39F0C7FF7559F31B1C22AB9C9A844C21AAE92F577A028 6BF17E18A4DD162392B6A38046C2C19245AB77F4A2219E43BA3A3F578A44BE84 202F06127270F1A089B437329EA381B920B8B5096036E361BA60ACB2662C29EF FDD703BCBB4AB4F9F7317A4088C9A3C66D695DE0694A0F73F551824D3AE2E74F 2B0B70E477ABF0144098B111417505EADCAF95F0B9E656B6EE0935B838A88D9F D11A6E0BB4C6876FCE49A38C299F941C489517FD72E3BF1F0B9D09C6C7A139FA 1B088BFCE2F37163E25B963D9677FBCC9618244899FD078FE95ABCD454B608D9 158E310B50810C31FAC7BFA761E234CB91C1117C63516F561540F1E11F1BB4E2 0621C6725E886DE38EDC9E197C9A2F7773283DE64614EF7811B1F89F62003C5E DF4B7ECE921A9874A1E8610E1DEF998649BF8143BF8CE948F1FDBD88A5FB547E 9DCE9549E83CD5948DE2157B033D2198B0F9E20018D3F7BEB8183EA221BF3632 25494081462028CB2FCFC0B501B4DE8B0BD75149079F557AEB115AB9690A35A0 F086E741E9118CEFBAA6091B03566194052A56BEFCC169FFC005F991FE1CBF98 FC9122CE065BA1959FE231AA0D6605D833263FDBFD1D6CC17E8966F089053337 05BBA087515336152538DA60662F902D8E4730CE42641BCE3ED2502482EDCE8E FE5623AAA7A1D9E8F8CB6F74B9A3426C6D07AF02D5DB93CE19DEB7C6A1F2607D 2E27F73102BDD83D615767C5E8EC0CD8F79E7C967F29D6705490579B901AEDC2 A70C2E6C42F1D04FEB0EFB3D9BF0BFBF09FFC1AD9AAB76157C77100A29394A76 7442DE2A585411E8BD559F06D7206C25FD3FFF3095CAC41278569281D676245D 285B6ED28F646DFFC4FA108AD7FE80C7D7270EEC41747F32D7459836513DAD07 CA6690093F91FF381A3A425A5E3EBBB3E27DC0B5C9B74892B1E1998530A75807 40E709ACC28FD220F61F6A4C82D21EAD31DEBBFBC4BF727EEF49510DB2CE5AEC 315C16F698D269D49EE81E49130E0B2146A2AE6082B4EAF0967AC5FF6B512749 E9A2494945151CD31DC7450657499947EF49838D22CFD8FA021468818C30C0F2 84A860B2A95CED7E339659B83E7F4207AB9640B889D16BE4A6EF730704A1FF19 4575228558C1309B0A93251568EC4BAEDA110F60A1C3DB700F7B2E0C8C6A9E7E 8443E3F3C5F8069E570C68CAC22463A6CFFE2F2C9C473239DACCEFC0457641BA F52831BAE9B762A844B34F2D4812CD7C536075DFAE79252CD2EDA30BFDCC644D 6D29DB534884A7BD66534396C537BDE3A1A9A4C99787F5715452F710EA7022FA 6E82EDE4C388ECA1307C979639404E3B49C7446E4A835E48F0E4161BA4904838 174B57E8400E31F236A94FA39EB6F1CBB0EC4BA09C555157074FA3019D0521F4 636E33445AC15ADB06C027DC485C4B34BF85F887B6BD33F5B2DCA9D79078D36B 4A2709B53A151A44A458DB5F2C02323F0A0529F562E190D1E1FCF23F4C7BA929 A0B6C100E2FE4CDAFA75338E8E201361B6069EB8EE251671208F402DC7E227EA 489999F4992E39161102FD0D1A58701730346664CD6FF343AA4B08E97B5BD346 FA10BBA3E8BBCD9FA1D1FD992DE6AB788B863541D18CCCE29825E447A5B9A1B9 B3674FF3429BEC19A6A190CC9FC79D615DAD65523AD27966C907770770335CE1 C90579DAC0AEB2D3D4BD5BF20511AD18CF46F648A06DF790054AD8B1D564D62B 0FBC235D0999966C868B55CAD49B1F4DDB994A73FB4CF30A8CEFBE5AA4D7746B 03D12A79E777A63361799B35C0DDBC6DE4AA458EFB4282CAE74DA2ECFFF469FF 5A0540E0F960A445E756692182B54097A5EFD5E335DD048C09202536B7EBE5E0 86D24F0A66F6579D18CDDDE520202109405BFAE071B9D2EFA67C7BED42E00700 2EA9AD5D0DD2FACEF0A8E302E8F091D04770218ABF3CF535C199F489714F6F5D 6AC612B2248ABDAA8DD13CD476748B17C18D878C5A95305011115898AAF2B520 5FAB65A13EAAF496CA610A70DEAF9D6A80EA0EF32F9D2D0B62E17AC49F27970C A8C81050AA8FB4A95B5FE3586FF009841CE0BAE1D2A66945D3C4D4D8DFCD74F1 DBA79E64560F3880243B4809B7648D4EC954A78A8790DC24FCD947592508F5DD 6C5CB1FEABE895C0A466A0A9E88B6D82B2F612E301CD2AA50DF6C8D99F667892 0E97E05671DAF0C3209A156DB64245198F43994A96F83D3735A435E63ACDDF03 610F5F43E0EC74C4B37F6517263EDB84402F644EBE5306EB81DDE0AD262EC889 028EF0A0FE47AC889AE7AF0973D437FE88A07FB392BABDB3661D0613DEB94F29 BA1D4390143AC9E9E241AE181740A9D6DA3FF41D05170E7C2FB2C586B1D92B71 1973EA7E6A0E64B1441BD682C608B56B3229435E277F8AAA192574F9163A864C EC1FE25A7B9CEE03734089C8E6A09D2049F26F3CB42D151CAF0D7774E2B045C3 B6A80536DB33A9E7932070BC397F96C40A4FBBDDFC8575A8E2722932C14351FE 75CB3AE344D9489DB2E5C7EDCAD2AC96B596B7872D7D4004DF4EE35A2825CF98 D71A79D475FC28AB012486FDAE4AE421A86AB931196EE965CF6266B431BC80AC FEE58BCB75D5BBC0F115A33743FCBA20E208F333670116A058414E1D80EEC85E CF28824FB4C81936AF92BC52A17E616D6C6E056159B65E2DA22887114CCCAAED 58E21CD4CC903AC6A47C4DB7C64F98E99F6E32482B36F548BF7A4F5E4D2BAC54 4364336268C88305880F22E5339C7455C1661B9407C725D5B2B3384CE078B0AD 92D8F4C2C1F7970150C6CDF8A6BF77B4469E902737A0040C72BE5B06E96DF20E 413BA09FD4FC91CBA02DA5A19DA9FA703BA89595FCC0F9AB4F5BFE89F1BA7EA1 16A35542A8772B8A22438D8EB0ADE0EBB458FB234E9FDA6673E46E693F3138FB 08AB52CD429CC68576DCFA65E563D2E63C04AABA89026F41E669106ED38F100F 043C72FFD0ABC4F542AF466AEA83FE4FB5DAA8D76D25AC2FB6AB575A955B4AFB 48806FEE16B0CBA1AC1BA45DCF4E6AD0EB70F70BF00ED5BDF21793AC26D40BBB D70BE8D66EAF70CBA62009A31A7BF72683C793869E20196C16595542D8262160 F5F1DA539E8FFB25E0DAD9BEE6342C58E640C8ED1FE26D857E660D5829395EE2 C3DBC0531B2E8B68B520508758B25DA850802873E47D809CA056E7A73C3C6599 D3AE8446AE1338A262F6904F4C71CF97D8AB67EC45292C9F52F698C6DF3CB951 8A7A7C78C4C3E1297E94FF6FEA013B91A454340465F78568EC409F5AE9D48DEE 1F93328C01E30F30BC12BB80F3FA7586457358882E5FF4762F11A4ABE1112FC2 AFB714FB3016CE1C2DD4D02DC3F8DF7B5D18AFE4476C2CD4424F61D37AD7E17F DAD532561561486498C477D9501A49CA1CD0395599C9A911802102417997DC91 D9A32D73FE0C499CAA8267EC34EED8FE6633668883B722C9B7E407 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /UniqueID 5000769 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 14 /ffi put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4 0537D461EF019E046DB8A6F08DC7B007337B688E610C55A35496196C01E6F8C3 C7ACEA49F6AFA7FD9CC809E9916813F64BB5704664DD21422F8F32477EB874E4 D86593B4D4050C116B8861EFDC6BE1ABCBF942F0BBBF4E4241C418DD1263F252 B16F904E5B650CFC5763390916625B28ECE4C39C55CA937E28093E66A9837BBD 98666F090E8E06F1934736F800CDD0E78706E3F1CE6D2EE55CC48D1302770DDB A139EEEFCF8353D4473D89EAD552B810E0F1737A6636D15265E0FA2699BA05BF 3C7C6AC979C1AC6BD4F619F53D766AAC07176E0AC34857846C6735AB339ABB48 DD4EC03E17E90C052E117DA3DA5F60DC47F38C5B690EDF00F3FE94B37E81A7A4 9A104B833BB95F6A8640E4D2C6B11A1AA4FE35462654A72E5D4ECFCEC28EC1F6 13167DDC19D24E6B9A3F82127A24829D28A652654699D664C9E14E57ECA63CCF 80D9FCD3C4B63BFA7AA5B31046B14E3FAE94233181B239BFA99F019B214AE3F4 D89B62FB0DA814D96AF84DA4AC6825B41560387334A664DBD19654C43FC277D4 4EE4D57BFE501D9798543F0B0853CA03E7734FE1C65D214203659F4361871E3A 201BCB2F3203A50F5BE9828F0829E34AB6F1E46CC86AE99E4152800BF62C2447 15458D5CFE5AAFABAB71C351A034996AF6809C208CF46A5E08ED6A79120C93AB BA4373ADD2B0AB9464FAB4AC973F968DA99EEAC045FD0AB1112574164D3BDA8F 379DBB568193A3EFE0AC225952CF508955B9048EF259E60868BE6E8B79CFFD00 425C4671316459EE609C726A80D2AAEE6EDE64F32B70AB559E7BA4E705477B27 B85F065AFF7EA11ED5F69A0164E1C56CBC997B76D9BE411129B55DDDF355C807 C1F8499DCDA76CD40E5A57365D715332EE0C6355AD62AFEB89E09AD2F444FEDD 3148B020130D47330B4DC511DF621C8F7C6A7F64B747C9E57DF7CCC94C0D3B0A DF855FBF3A101F67D106E264CE5F0045DF568CA83236A5A69D356D65698C1805 F2256B1EC57DD6EC92662F7401403EFC15D1E831B1C481373FC9C09652E26AE1 9685E413376B15D8000507F536390D07FC88FC73A3CBF6AA3A6F5F1E07791446 5B6710B3317DEB20050731A7DE6F78E680093A763837DFF31A350FBAEBD4E628 4CC8CC7CF81431D146033F4B6E1021AA830B813C187BA2BECD2557E3BE49EC7B C1CC72B53E5AC0BAF1D7D3B798AB9261992F9902FCA15B20878084C4E32C832E A7DAE641940D7C9050AE7C25747863DC1D70CDD34CC0E50345AAA6E104C9A9E8 DED5A41F6111D5587B2758174B268AB16E573FBC1F3041FB1D66D7019AB812FC 2AC061912E110A1B10D32CD81BB580EC101CFD50AC3A6E3FA9BE1FFE0F4AFFFA AE7C94156E80E3BFE98727A8921DA3AAE0E0EBD1AB334CEDC602EE21A336C607 902189D10CDF3724E803084858852A75705E7C77531EE893FFBBE34A8D6D63E1 8CA66C40DFB01B9BB81BA6F1AC788C330837BE0784149C91F159C992220FD655 F0B517FA07D50D8E3C57B5681592B2666BFE0CC7DD0B9498B20B3DB0F5C617BF 591E50553C8639260735EDD4672D448D35E971D3D08D9557304AB9F69CF7A9F6 85F2DF49BE615A93C3F2D185F7AF089579CEA49DF1E69731DEF0871EC7A13401 859F6D8A1A1F208CBB3A11A1EB5B489D1D3D09D27EA8C1315C8949D54C2559E4 791730AF930B70A1DB8B39FCD57C71303BFC695ABA57609341EB23799FB5B8B4 CB30415E8A054FCCDB588F1953B1FBDA4085BFCD6AD3940B646CDE186F57C234 14A1EF67CBE972F4DF6C02F5D17CF9434CD45E414E1C341BB6C746E63F791B48 74FA0782F304F81BAAAE2F7599D745B0AF2371D5B1373A39BA5EB0EC7550898D 3031F083C2CDD68301BBA1EAE88E1A3A90E8F31C3AA01F513EE1E898AE95DF90 E86D148655353A23BD63D96EBD846439B7A34132DB19C6E43058EA0910C80837 C1D9562FD05A4A5F78188087C0EC322A32B7E7AE21D17A20FEF7C009A2DB4C25 AF1DC7232FFED6BCB56A2D1108317A847C6B8E6B2AEC3E5582F681732524104D F962D58E7D30B77C0CB09FBF077AB89280353D563904BB16D97859ECA4ACACF2 A36AE31223F537473140B85D5936669D2A801E2EC34DEFC31FC233D2D2187B95 88CD5E4021B00C8E12575551A7DCF2E70664BCE0EE2FAA043A7A2BA5C6C3A49E EFF019DACEBB035B995CE999B701F8D462003A17E4CE6B20D20E99AEB869EB3B 7D58A7E92CA69BCFD8D593313E4570D0ED4E22AF1DBA24AE0BF0E02DAB36F9CA 49960C5981FE120FD526E04FCCC5A6DD960A8E237A67A507E93022A0609D842A 5637A1129580E3D21FE2CECF0B5AA8A7B8B0C3DC2719194B2FE3F1D9AB492698 547BEB6D0BEE5087694C7D16511F02FBA2858E2780BC2A6F615E297DE8E3506B B4937A56D1D946F271DE9C099B73ACAAF2F2D2652AB0C84BA9F7B4A71D0B6162 1D5998D528B3F35834C32AFE44A9793BF7A0EDD5D0E73415AC731E2D8ED42D81 9D043C8CA71CF577BF84E8CD144BDDF96D58D61EB4D0E9FA93B69B344FF334AF 717EA791A503CDE266019B71FAAC43E72E0AB34379E0386AF071F2B679A878E5 B8F204BD86D315FB6F0A1DF353A4FE9477A0F24448CD7691239040B4B52EA970 A2F7505CF27E612B20FBD4505ED830E40BB45D53DD97FF667A632A33BFD037DE 9AEECD6B39E84D19ECA0ADD86C81455AF0A843402F1F6A431ADCA668F548A5A2 67391E12D7395AF21E716243E8E3BA1E4E2F9D8E072D03D362B95F87621DA009 8B82C8A6191E58C2421B976B6B295DCFA79723A99663510B5863BB86869E8318 E9E90CB7C0BD873EA7A25B0266B16DD20371EAC31A0903CDA31CBBDC5F3A513A 6ABC56879B70E5F70D2272B00FD054FCD4BFAD1E9798178F4C72C8EE3C3DD46A 13F04DDB0AED395C71DD43EC65807EBB23010FE335A9550EAE2D5685225845C8 AA255B0D1D8B552A80D817257D16E2CA1D57A45613E7E1C862C36566BDC23D3A 1556C6BE1F1FBCA2C3A706CC67CABEFE50052AFEDAD384EFE0D3F17C59EDFBF7 EAE2D5B7662224AE94EF9BC8490CAF3E5B12DD75189732745635A4B9E47E1D97 42678899705EF4F87BE27E28A246ED6BB636C420D7DB7A1BE65C7245CE7BF4EC FEFF7A097F4880C49BD3EAE4DE0A8330DE5383FA380A5C51C9578D451C07CCA5 7C83FE2FDA551B3A78D6EAC6228875FEC28642176D5F0E3880AD8B077D1BA5A9 B8607ADEF68FD2089AF2B1E63FC20085659B236ECAA7711B1F9AB49275E7F0D2 1EE23C26611FB7072E532BD2B2644546DCA0A021335838EF43144C3F12652A13 D44C26FE447C64BBA54EFC65DCDC125CB666B8DC0AF06A476931CFA1CDCBF663 08E4FF503B41DC949D4A05BEC1AEA660E4B7ED93F537B27952DB0195C3814DFE B1E8006EDCFDE140EE6878F4F3152766F1DF68BCC50EAB2BCD89FFB33BA12BC0 9941F9EBA9E28A03444E5433BA2FAA4E455F7E2D326DF8E5D25512035A16B2D2 1A59B443E55A0A45683B39439E16FCC12199E7E88C594AECFA5EE0443786293B 0E1775ACBE0C03207DB5CA4CA331D97BD1EA99DBE68F2D32D0820E1690DAC14F A069C4E9D8E3F8CFF88A48AF001919F26EE6D8E7CA4137476338AB99DBDE10A4 EA7FB6A1B2A56B2C172B4E14654C56B98E69C2F39408C33D552567F00A635C58 27B2C965E965856C9F6E09376C6C449CD111039A43555033D3C2E178EE716919 B0700B50291173DE00CE5E6E950DF08F4166FFFC46C87308F3AB3452ACF79E30 AF140484BE74F1BC6AACD1AB4770972C86F41169A31382275137136FFD867E66 4C01C33B18C2BE6BF9E7772848B14EBAD1FA2147A3BCA90B0AB801CE51AB9D46 AD23D26F0CB8FC2236C443BB4B96B4F32424FED99074F672138FA4957CA438CC 1912EF538D5DF59D64E32197B85088749F3CAF158ECCAB506976EAECFD33E0B4 E906407618365EE9DCED74DB7BF7B0D0FA6C62EE5B5F3ACBC9B5556A324F88D9 BCF3556585CA0AD0603F093928184EEF8861C784A8AE2C172B16C187F379FCB5 AF678709478D26B165CC9CB9FC523A0E0B5A367E288064C4A9699F08D83F376B 7C2B52C866B76C92EDDC622E97C3EDA0B79D158B9207BF92075DEF40CF1A1CFA 44714D9C74B3E8F0D129BED0486DAC21B857A145F660107B118BE4F2D2F5B4D6 179ED5776DEAD213FD982E569B1331C73EA667D6306BD958AD66A3361B20382B 29CC4D4FA54A410589211458F86C340D61FFF2B39FE8125B39DBE53D9BDB579D 633FAF7EE7A350DFC90084708E181EF4B608D8E798EE80D0CF446BC822B25012 978FD1899017B14C242679B8A94C96FEC85CA7E51C5F6306F24DEB4BCFE45612 ECCED1FC85D6B92AF92E492AFCBEF4C8E96E54379380751C0AC6706998AAE58F 7CCB543CBB34FBB76DC0B07DDEDA60462B7D0B767D1822B7D2394D4142C9B70F 562DA0B58506C4D84B75DB4518C118972723244E2957FBFA4ED8F1A4E3BB40DB CDB2A9D5B738E7B1491BD9103FA7C5D24C82D53A7CDBB08AF8BC0944AC69172A 49C51C9EEBA5BBCB3F518A42483ACC228BA3AB87054FCBABBACBBAC0E6AB3F7A AFE0DBEA925290792CBCEB452BD96F2191AEB4D4EDC13F507465D88C7BE5B943 2682D5ED5DA3108195D102F0F142A3D0BA6E3FC00330DF6E177EA25650EA4C28 43EE28C843AD2EB2A93E742713863BEA83D9A6051F1214DE7CAE17488BEAC6FE 2490B9BBD7B980324677D2477B64B357E85FE2B05AC36996F9F03FC5E88412C6 CB8D58659DD5DF8D986239934527BD392674A3FAE3AEB54C09A55681F8B8F511 A1CC4FE554A2FFB02CE21E4165901D8A0DC8DE04B0436433CDF7EFF26EC84C63 9612188DA7E2D4D49066897725B7FBC4A3725CD8C8E141615D569915FA110BBA 1EB035C42C067B097E311F7C5D5A1384691DA5811B47B165ED0C8B99033985BE CABE0FBCEF8B4FD8A8A3CC86FCBD9D11C791902707E5D34A3692CABD05753713 3F08E5F8B70F0A83CC39131B5CAFA6A9B912AA0DD6499C3DC2D48DAD06404E1C EBDB1E566D6319DC7F74A63127BDAA82A64DFE8B8F8EC7849A63210A24067D33 428313F100CA10DE8937E057B40C4C309E3D1D5EF9463624BC7606C337AE2886 FA63FF14F9D59C84DD80652BE7724032413050FB7AE4BF0EAD666C4BF072F821 FED228D219B9ED53E464EFC46BEDDDEAA73D0F2C3AAEE66D4E3A5D9B158C28E9 915308807F3C04D6EB43F236EA540C05668843745EBDC63BA87112031E71F191 0A4129890253F3663CA81C4AE5DCFA67AC3C87C2954A1DDBD6AD656C8C7E3549 CC2F8DA776B058C8419A7D4B94991AD22D526FA879D9EAA89E1432ADE4D12E8E 323AC8550C4A5DA2E2DBE1CE3123B3060AE012651E3046E8EFD30A3DB5BD8242 C5045A537C3675048CB0F1712FDCAE714D171CCBF43946E008E097E2D8098740 ED832720DF1D6C2B0DFF963386E1204DB9536705B4FE18E336B0E28BD90904D2 63140337073BE4182D72A60C6F2821E7A4CA1FBF82DEAD78F66F12F766E9DE05 618E0E7598AEEBBB47B2D50CDE014092459702FFE545D3CDCFF0D072F7D0BB49 1D1C6738A7E0CE5FFA4C2E997E9F587B3B0DC5612954EEA8C9FE4645D9625CAF 6A57B2B3CFA0F2E38E993B049C0178B96BE4B401A17687FE2B0D6DD8CFA6D990 852F14AA5AD1D25E746719D52F9C792DFFC61E815AE7E3C13EB4C3D0FB74E942 BEB1DDACF21F982CCEB84253AE283BD27AC4DB2DBEC16C09DEB5C633C428154C CA25AB0C9DFAA3B0999AC380700D2F819CC9BEEA1EC3255F73D9C87145B9C3C3 C5CEB581DD77D568166AFB99A61558C36EE5D5E4F4E580DEFDD0E2267B1531E3 3FEFF9A6DF4E399E83399CB337944F402398060756115F58FAD5F213C876AD04 C533AF4D86E751F205083871F750B74AA876108E806D4E125C46F37B59EA212F 92C43B1739125A49D69BC8BCB401C6F9EF3D6144C442294D69198995C75E075D 01DB43D7359259906A1BBB443399921342E95BD1C667D0889B6CDC38A90F6C78 605161C954B6FFAA31D44F66EFDB2DB695003EF65A0EB5E5A772141BBBF31D60 5ED677884338FE71B8E4239917B4BA3713CC91813BD6DFB708E2DEED919E3F9C 4250C13ADB5BCBDE9D48A8C1963A9B1D57EF0157F8D07A30707229EBCBA60819 02A165FA4924D34FD325581626FBE2BD0629040B2BB976220778AF44410D1E98 273D1C638E73AE51A7BE16DA1B7AA869552F72DFBBB393AED72C046F00CBDB8F 51ACB0A45E8096B5E38F46CC66C76A26E62BF18C56C447DBED3E2A8BB61812A3 F7A8258E8341B3D70EAEA0E7B273CEE821C82BA095B4F380D8F7620C28FD91F7 FE231D33DA7D60F7AC7A73A3992BEA5D711278D1D593BD6896217C2FA7E73964 01300C02E518D642226B44B29C58F12001CA93DDAC56CBA99EFF3ADABE52DE23 09777A7DCFF726368C943C52D90B195646A456FEA2DB56BF35DA59897899FB96 17BA2D1BE1708F96352AF52EEE42079464F393A6187502C4D9BE227618F46AEE F606C8CD98CF834BE0D10DE1329C6E6F8EAA733A78453D9B0E1A5041D6C20E31 9BE9D46250CBB309B583515EEC7F6518CBC4E7FB8C2B501835776B1A775A6AA4 907D5914501B763E4FFD79D1061302765E224429DBF013FE7D968971E058F72C 6E2066A7EEB996027B8170208A2963BE3D2C9EC7BD5AC71199CD70883FBFC7D5 4FDEA9FA4B88DFDCDCDED20CAEE4BF6049FD965334BFEF4E2730F7F27DD8F835 CEBBEF32C44E15BD4568FE6B05B24611B675829EC45E34FA8380BABCA22564E9 413FEE6FFFD0629D8EBA6297523A4D2D88C77F3CC5EC0B971E673272D3249D67 F16C91C8B78B42699711CCCDCADF1D5249BBD181E43B2FC092EA0E6EB74D3FCF 66E7B5D771D1861C9C1C356E826E97FC91A0A25F66125777F6577152C8A69CF8 4305D0B6AA921595BE8A83A06C31A71975C881315A1D2DFB2C0589A7B1A0A1E7 F260E1E13F4B56FF2AAF136B04F232B5809F926D01A898D347C33528A0E10F5F CF75B9CEEBD6F142FB3810CE37B235E9BAB5EB908B518CE7E4022F3BB4777FFF F5F653B085EBD1D715ACF2D01B618AB37B4567B4064038E29A730119D2E19872 E0EC22E027A5283F9CE523D03C84D0C0756B501C6925E3B19475279E4D27F8E3 827F873935DE9093EF48E3D2FAA39645B095D8FF1E4EA123B2762505473DFD08 F2CEBD4C28B16A17514C96A730BCDD755A6A12E662AA8B43C6A2791F60CC1408 C9A53C67960E00A88E5328764C0FCA037AE8325BF9E10091BDAB6FEED0F6E0D6 15A9D0801AA2F7776C385CEEBC56D7215624BC5DA6704868FD80633B9D1051C9 4D2CEF5272EFEA680F77F3896CD2410A9782A31A46FF172E9EB4240506798F96 10A71348BDBA59119E784801894814157C9F9C5ACB0C3AF2EF6AD41737454E72 D0142B6F3AD9824B9E15FB2B4D3E64ABB8649D0DE0AF4EED5488DF23A7FE7B67 F01BAC44F0A4E0520BF8F41BEC25E05CB354E301EFE2B853747CA670FF873699 9C262F10D36BA1002221243D954769073B278356AF558C57B48F3C17DE3D290F 76223817D54035E603874AD06E72F6E26E1CD86711BE58923A9E8890C5AEB72A 81ADBEDA8C7A65BC6482F08669A65DFE6EB567ED04FC819A27C5D6E3591DA5A8 F24ECC54770AFA4323CE712515289A89EEFE18A0E54288E10C19A029E3F86C88 0B94F90AF8AD9383D8688D4E959562C9006A2DAF3B2E58102C797F6B4F571699 D926330C5A5F9AD474F9D964A1D1050A1ADA49563B22CBF2F7E6AB4F479150DB 05F8E4DE96B891A76DB6C76D2AD238DF15A467BF9B760A7D80B9B13C5D7896D5 4FE39756FABCB6D0BA96255C4E37B5A08E55E6319B5B095F9A166869B235AF59 FC19CD5CC2C38998C749FB273F9D2D8B391FDF8A0D203BFDB375B4AFECD10A15 BCC70CC321A63F1DCECBCA64FCC28AB5DF14B2A3460AA5AB895E1EAA55E9568C F24FAEB5D2E52C33BC4EC01CB0899D087FF294FA9B6C7CE8D821B7D2B68A02FB ADECE26F2643E50F3808FDB07E34A7F9C82DF841AE14F1D269A092F6BE9A0906 632876AD739D222A2D41DC07EF57962AEF04590620FCD0325DA9BFFEFED48899 DF87836A521E75F31460B4D83EAC61546AD582BB6FA8B5C9719F3F07D80264DD F51E1437427A2B6841E32589D3DD9AFD31BAC78E6A78E0D373424B5CD0E08FED CF550963DFB9D3F72A9B0E0760560F02F1BE89FB4A88AB658246AF7FA0BE6E0A 44DCC418D3FE28C7226605E5E573E0DE42239CD95457E94C5E8344AFC1EAAC03 33532EA5680544C65DFE9AA6475C838F35DC78BB88B70168C8C21D73DE7743E3 448C408936E58BD503CE9A5E2899F79C03FE034F568CC38E97202FB621FF8B03 11C2B8AD5B82F5EAF91A8D818CF2A464717CD376EBBDA80AC0E8C402C551ABB7 03B45C55CBE634EFE1C01076820D67AFBDE425490EB5F927B4D9A506B90F8AD3 6022852F813175BCBF71C8DF2A6E0D8FD3AD04D38707CD4E5802F66C75682B61 9E20F594A397FAF8B4465474C28CE676F69E20F12C2628C9C4A1187A54364A21 B9F0E83BFD7BF6F251F1A62628B79278CA1F50FDEC28B37BAA75CC341DA7416D F9A189312F1BE8F83943A743146106BA16C420CAFB852EC4C0E25B4524459A71 E63DE6085F3206FA1AF694EEF2BEFD885F32794FA670AE8043A0EF8CA049C758 B563CCCA7723C96CE4488CD7ADD352729426DE8E2AD89B44397BE625E9946343 0C14E0DBAB249B53460D79532FB027D941BFD5D92C466DD49FABC16F4E708489 D021BFA29A8F8B96339E3B369BD7D078435694C29864F7ADC34F34E3FC092DFD F8D879CE5F2DB0CDB210F3EFAFC398F679901ED3FC6EC6CEB184E0D06A4899E1 9F1AB8CC7677C2C889B3527CD0ED8D0429300D4897B1E2BCE352E70602946146 E4C0025E6341886F9513EC71D4264C47375FA9AFC0184475C628B400DF06C703 975087DE5E152053C46CDA5FDD1B90BBAD327615A6C58834A04DD4574230FED4 DB729DD9E39F7603FDC4199F2C83E21387EC33043F6D9384C5346C1DEFD057A2 DD07744CC4B588A26A8A3C728A8511B094B1032784CB8587F0C9AA9185600BD4 6ED32817725BC61BEA765F231875620DDE94693582B8B016C86CA28A49E0AE8E FC87A1A6C35B53BFCFD7DC1963FCF6FCA9EB420A6C26AEACEB3556BCF7EDB0C0 959068FEA2847A4AC1D6B27C07E788C50445FEBAC50CEDDFB51B6F900B4FDBB1 37CE1D0DABADA2CA9229B7CDD236B2381E5807203C5389F9A2D1F8374A26F2F2 CF71E969C17E396A944A1460FB4E75BDD5395112EEA9C63FA9AF286CA32E0C28 5C9BC8C1E3BEA3583FB6C1DBB6A0B5A5301D2A1D3B42DF303B7B8410C26CC597 BEC662C5408F6834AC531074DC2EAC662B4D6A0C629A6249B2A1447782D40EC0 F3F5C31D1A524B849D0FAAD35C465DF0E5A91D4B3B02F256D8DD0C80DB591A02 7B56FD56311A77517854F340B511BBBC3EA838D41F499F9A7D424781705CBE03 84D01E82B19EDB03520BC9A249997A7C1C978FB3BB406FF7233D494A8BB20939 EFAC81F69F53B7A8707A8DCC9767C093EBED0CD407029D58F46BE84488D9F4D6 34EA41986079C55A22069148DC1DF4415427E4A5CC1CB25805C1FA0F309E6851 873A2280349BA2632D25E37CFE86917870ED4D4A240477B102BB222A2D44AE17 D8198283350B4F333B4976D748C4B2E9185E7E552103047B32DA6EA7051885C1 213CF390D34D66C2FED66CF8FECC627FA383B4103099C06C6F17D6218DA7C4D8 05C7DC6D6F12B284F871E7867B3B61A272602973A3D66D7307B37F785D90A662 7CFBB8B1A583320E10F3757402B8611417185AC0A41CBC421D120D3663DE3F13 6C557579298BF65A549B5DDC9D526D0DCC8602A82FC312708AB751EAA6791325 9202AF395969EBEE412D1558BB54E193E2EC6972830DAB89C71AF7D23CDBC759 9928983E6EB0DD4F0B06A718ACB705DDC2A953DBD330FFD2867B8BB1FA81498D 3FD62A05C76E1149E6FB3C7CEEABCCCB1E125D3C95C9C7145EA15688A9482F58 808AA83A8A9B1DD46252E5A68984B148E60E05EA9E1B5457E3A344FFF153B8A4 029444D0A71DD335958B67C3C5A613FEC39E0AD03112D09C8AFFBB53DA16C393 AF0FD4C1ACD6B02FA424794D2958F4563CEB2F857318D6F5454D8DA75560A486 486E32D2E47F6E41D6AF87F09F6D5F35F62317C927D7C18911F787AD5C358012 F3418758129E6E8B56D14AD021FBF9BD294ADE3AD949C2512A8753CA7EC16851 C94109FF392C461E0730E096CD1EB2F1819095E15FBCA9AEB5548FD229220F21 8369B5FBC3902A6D9FBEEADC2BD4549C36189CCE6733E3F3B7AFBD294AC1FB2A 694BC308C32EE75EC66C19E872BD26FAF9D78B2818D412250945AE71F5DBFC96 4CA7E41FE4110B9BE2BC0D28D8B3AAC40A70F91B6C743A1C1F0EC5F761969195 93921F6EF821CA0DAF57CB06E4DAD470590E92431DD289051D5FE8751FC643DA 8AB6365B77F32ED5761DF2A8698659338762187C952F2885F324BCA148A3C86D 05F454B136E5A488A4076F776E6E1087C3E0CCBD0C66139883BD6961C774E76A C8CBA65F9341022EEECE6E28D4DB6795C8933479A98597AC6DD949A96C85A55D B5D5B49B561D35DA6A9A5D4C832A38647236FA72307140865E373894F7E51EE3 29D38DEEF5004896B51F410D78556C3FF445B08FAC37BF3589E6648996FA6CCA 0FA102355BEE00A6E7F1D917FFBECF77F1B5A50D2ACF01176F6404E1796E7CA1 01CBB4868FDC7E17C38E6B3DBF5AC7A4927C20FE5285BC5698806C14148BDF13 BAB578527D5721817BA1CFD856D7AADBC53B284E029E838316E78BB3BB8AF3BA 9BDD25A7823AF127FE7922B4B92C01E9C32F4D9C27E86859FC8F54FDE0C35A21 ECAC5361521494C50CF77D548B5D7B21A1979C1AE02943C193AC16383215FB89 BC49D2F6C23571EC729973CFF39BD16B0AAD578434E89BB21DDAC48FB21B1C06 3241C3DE6B1493A2B129D7EE314568BA70113E9E397EDC6F364A148C8E58CE1E 6CFF6BB393944DC5F61060B67413FAA2C26314A43E5576C19034AEAF1B84ACE4 9478B4116E7AB378E303488974311A6CE2530AF72F4BA2089B587BEBECB25E8C DC098821E3D216D228F63163EF9DA876E2EDF4BC61F69ADA6A97A17FED5B60F1 6E1BAA91C37927DC1F7AB2BCDEA39748B9E0B721C2BEEC24EDCE788D21D1A734 782D517085F00CC68DFC4BD3B8C33C709F8EA5612A6ED043DCADA864794C4361 988BC2F7BA3993F0A2ACDAC826177F5F10FF65C87354E257B8A4C8B8CB8BD59D 6DE0601144B6E3AF22F147A4F07795BC996826DDE90CDC7389FB9574F6DFA72F 455749A0C9920340C770957CEAD36FA66E7E338859E5B082C722CFCAD64AB78F 45CD08D348A29E4E41E0F063998FE8FC9B98EC191592A6038D492F6BE43C5DCF 81158FADF0A110D444056F8B428D0D64DE222160827DCE683E63F995171214BC A69A085E89D055698F6786BB17174F416C45ED4A730B66F160A023C5C11D3921 6803CF213EA41E2DD1E3ECAFE388FD5891D594F73B85984C70E1D1648CADB82B 9351A3138261D422A83900957423FCD88ABD789B542B864A6FC6CFE597334F8C 55B64C252D3CC88699E25A9F0ADDBF09E14E23B858266D4F3E22DE6B76178837 27A64D37BE438DBC6E71F830F2EFC0B7CC80197A09F7301BB0BBCF2E9E2E5E8B 74F348237AF5F8E093D9168FC4E6C7AC1683986F87EA01A70CA9B8FCA051BB86 727F42EF3C515B1D4A8F730C92B9EE541E8AD31DE5E14F0B55AC815660BE5DB0 0EDF1820E7AB71E0089752348BB76B1129358B9FB1CF648E42C1D9B2C81390EA 09881C067CEEF4768495F651DB1F8554D43F50927C0C96E4F0C060F888E5768D 0B1B1040386D45255282A224C946158CCD754C832684A54535D5BD235F3E6AB7 9D37E3F45258F2B036B90AF4D989C6220FBE4CE89EA80626AFD5DDF37353227B 1A9DED093FD6A37B45EB082D9CF345FF2F875E908B2B77D302CBE35B6C3863A6 339275BE11ED725941B28E89AAE5F4BF0E6F4A306815A6D4D6CF08055A07BA86 4E39EE904A0420862CA6A059C7C15AE3BC07EADCB2BE02E2ED9A8D25C11996E0 9805A2AD255C666980FF2DC660EB2CCC2EEF0BF177A0ACAFCA6E2CA8D8F1C020 8EB098FDF4AF24E849338FAABE6D632A12FCFFE8445D74340D08B0146C89523C 603E38D4F1DEA719CA7CD35C46495CB1CF98F67B2724B42E03980E1FAD54739E 54BFE59112D6D4CDC8A1B3A4F207F3CB477231E8CB43EDAAB8449EFD258C8D14 003D16210D6B3A50A2761C62A152FC9D1FB7522BD945DCE72834C1655DA64851 7E9F80A0C870244BBBCCD5A71EF413D8352277743C2EF765457AEB31121030C8 656494032C0DD1E306819DF09AD5A9F55CC4F8B1FA3E3A930D5DB0AF1F76811E 3373FC15AD583431224DA52B8639E5090A1865B54DB8BDA81836D9FBDBA796AC B449577BBAD5094157D8846ABE2E55446D03BCC83C8A254479BC74D46041A156 E380E3B33B178B22CF76BEA69352B2352F747EE1C6EB4FABB6C7400A956A1F0E DE7D41FBB12CFF132CC01B2D9443612170A6DE0941121E2EBA9B8DB79346B274 EA3E83B25B52E6F9495DB415C617F5113665484F8225878FDD899AF418347A7F C6F566617E018EBB63081EC80D576FBB5A31145EEB819BE4C24A005A9D52A1EA 7CDB5B9AFF457636C3CF2F5A311E3473F70FE1CA74A6017898CD4ADDAC3FEA29 CBDD671ED9CD7362AB2F9488EA7B1344971DC9033C506861A491FD7B18A34E58 DB7CB49CEC63391467F2AE06CBC62FBCCE73C98FF4C8AE0836C092AB921144C6 59687F39A637533602CD17F172B8C3F99616AC64AC5AD1849DAB6BED97A4E6E3 21FA1E2AA313E440A14CFE662FFA297517FE682258C035F8BA9930543E95286B 5B6A68499A837D55FCDC67DCF70CCB27E3458C2C8B3F6EEE851773363793D34E AAAA7CB765826E531A220ED8AA8E44A4F90E9E55A34FC065EFD6BADD0A169399 3088552DDD4C3440E13A76E153F2ED7EFE58CB2752C43CFFE8716C488DF373DD 9DE10ECAB17578D2144D8E805060FB14A8ED77B8ED6CBF27297B87CEA5BF5055 6472903907AEDD9BABE1139B9B4B4370307238D303ECCF4BA5BE015EF0293FE2 7E698D4B4215CE941BFBCC7422E1690B14BCA1406A9E139815F191D4AFD5EED0 656D109402F8C1C0FC9C1ECEAA855EC98096AAFDDCF3A44CD6AD9500122EB057 D6624F99EB8DD923CE75FA741634FBCBE10845B1FA837399A94E05961F461E82 31326893ED76F99070AD3FCD95328EA03B1A58AF696C9B0D94EE99292AE96309 374AAAF9597CD7B1E435CDA2AABDC315DFFCE82F564B4029B8E37F5E00C27290 A12F062FBF44CB20D8926F07642D4FA2CFCFD7D114E1626E546DA6076B41AD38 41D1FC479AA509A89840CCFDCC269D498BF925AD0F4072A7FA2C9254A2F415D3 9EB8EE6D79C90A060E7754B0DF64EAB1ED64798F7D19A7DCC1FC49AE03C4B0C0 4E5617B1906D3E52A43804ECB3C49876739AA66B3853B8C2F805EECB11A97A70 DE60B4BBC4E3331C2585FE64054B565E26DEAA1FA563363F2D11D1CFAAA4827E 3BBA6EDF1205C0BEE778B1A4B5946CFFD9EFB3A60543A8467C47C3D0FA35B788 B2A50C5CB0F91174F16702EA5FD8B36871BD8B6826537574F6F85C1C9A039061 06FF4605247509EC6933D74DD654C660C354AFE0F32D6C0BE5B4D2A63A5DF487 A4B559B787D893BEEAD6BA13D79E6CF33941E50101AAAD420984F5CC851CFC28 4C3CDBF72F7120DC15AB412E7A0D36032F885453738030052F2617089FBE3723 87E1B8F607419DA5BE3CBD1D79044676742121F9D17CA9F5EE501810F2FDB232 B0E68EB9291D1BA65F3FB02301545DEBDDE7288706002C67994E47C2F15A2DB7 D7D21A7EB139CCCFB702B86C4CA01C280FFA1E9869D4302B78A863A7B0D13848 31994B69FB44E0740630CFFF16DBAE0E82AEA753042CE71C7E44FE6F963C31C8 0808570318041A50E28927DD18BEA4B4D9525835B34237A1CEB6B2636EBADA89 758FC7B8EE3F81D0648BF9CCEF41ABD66A70D383B40EEEFFAD9BC8FD0768FDCA 5032E6ABA35070444C73B7CEAB31BE047C51BA5A0293FE9D6D21A00F28EB7CBF 8DCF3F5864E1E2B38C26133AAE5F5FA73AC6700E0D275AB9589C2F8DF458DD68 2EAE83E4DA78B0C4482DAEBF805807DF2E433DBB72B71EB5D176E079CFB28A07 AA9CB9780B0EB7B78016BBEDEE6EA1DF160971BDF39308A8BCE50532BEA0D3A7 2982243449E6E8B6C4F20B92347514CF6D1C794A0EB4355B9C829B13DBBC8146 B445FC9CAAF449C1A30900192DBD58CB4C9096306CC2A291F11601EE9D763F45 273E45596F9B22C6440B75F613F9642BD5E77DBF7B2461AB528877C71C56C6F9 7AC5A0295E6ED3A4EFFDBB7BB94C56A5F12D699C20574B688398F78AFD3EA945 936D2AB8FAB7E6830D44D7EC32A19E1B11036C9833C1A8753B20380C24FA2C2A 659E96E407C2068EFF13522C0C502878EC4E6815AE813B5470D3D7118076B8FA 3DFD1E22DAA48986AAB5434D842A244D2FDF4F7008E521300317867E4284B6FC BE11FCEDC5E2232A02B7363F355EBA7EDC7B4FE4FAF3561CABAA4C65F169BAE1 A8FF89C44CE09234F6617B447B7BF0AB383D69965ED8291CE38087964ADDD7CF FD92781EAED2A8A92FFC8635845A04A31F716829514750C3D0CBBEC279F951E3 EA88DDC1737D4EA067B7A7953C99FD08F76832BC2B56D885BB67DA86470A9FCA E73A61FEBBD60D762E18A6576B0C5AF3F34D3911CFE32F7A451F29A4D1599A46 2FA30BF9E24F5CE35C12C35C9A0CD12104C8D81FAC551B3FCBE862384A1449C7 AF64CAD90388765CA87FB905CE6C5289C6932C40F09AA506AFC1EEA6EA933A7B 0D1CF41A46249CADC952EFF95AA20DC5D99A394FFB90D3CCAF0B4ED71BB75CCD 168B08FE5BE279C507C635630C00EB634C5DA73D8A1B0EC097E9945C5257A26E 64D61BAF1DC7CAB1939C1DC3213D27BB68A8876A18EB6BB11BCACD65D34869EE 20ED370052514C5EB82339A8A6467E0C847D76003555689C3687E800D5B74CB9 4A7416F8DF1A7DA0CA4B0AD72A73B2541FD3FDFB16ED4623FFDFCC8077AD05D2 FBAB8B93E3313BF9CED6D71C9D37999208514799954C8F00E10E5F70EC3ACE81 85451E616688235DB418FFD3AF293983E312A176B00B1CC2A1D92CE80F228E39 89CDB1F4F609E792AE416340F4FDBB5AA1ED4DFF05414F6803A2696A8A04EAD1 565FD6036D25BAF6AFE28F93217BBDB1AF1D676BA270D5C598FBB5EF3B69E2A7 B9C59B48EB84991134C7E362E1F437D8FCF9A1FE41A81C362C6B7B17084DBB73 778D3AF07AC3DA8E74D38387F9896999D3F613F0FDFA746E2262AA278845C790 49E26699E3B1BA7591ADA518B59BDAECC087BD36A3BB2B258D47CBD73BF4DF0A DEDB3C56816862CCBDD3046669E8551BF817CD0D50D016EF8428C42CBF1190CF B69B950E7B38416C24E71F9B8C4375A4CD0DD6B9DFEC5A96C41254E53D004DFB 0FEA9BFD62B898EDD9B24AE6EBB1EAA66DA31E09B737F0C0B18F622390CF4EB3 AF24B7FFC5D70C9A72BC930A353382C63C568243CE60DD62C5CA1B4E6E056F4B B962F91F4FBE6D207D77B3A55B3354B7C5042F198365851997F37E100C9618D8 248739C6F898AF5891402BE583E8AD7FC67F96E21C19A34DD846E0C66892CCBA B6FA3532D36BCFA7BF955C1EB3415C9AA7FBC9C0117E15F9E0D1306B678083C0 226B2AB088D5652C1AE8E1AA71A256226A7AA6BC7DB602C71C5210A22E9F2308 050F0FC9C59B89345CDF50C281EEDE0E5346B72CE4CA84C458915C17C7ADE1C6 CBA76194A7F5E0DA232A7D183E91C6D48060BB1C2978CCA2BCAD8261A0A399F6 352D5276EF2F6C6F3EA6B8CE3A4870069C27DF4D73DC8DE3763E97F276886829 30C62EC1F83DDB25D48E5FE17976583583E49DDA0D2C77727060D189D26C5711 6BA108DA7FA90F89FF9C5AB0DA9142AD67DCB848252B578E92F0AB20ECAFBC4B E7BCBF537A07E17C11D53F6B376001CDD11CDFF1D9327BA5CF6D2B97AC3E1918 D27E04D43434A949BCF4CBEF77096E2B2ECB417A3026E4C4954E03FAAE7C0195 6C9A59132E1F181D1BF8E91972839E2C28D263F44404AADD9F6C02B4AE1E1184 BAB4D94935A8D183537A970A15617412DA40767C323F50C175DD2064E7291AC5 5625470E63278017D5DF5C7C30DFBADB5B053738253744696DA1400B154520DB E3AFF7A52E0E9971BBF79C8D3347B63EF2DE9B79AD7AB964486F84B2C1D3CB5E 608A2733C3DD192A5F4AAE620337727F7EC971E753F2DDD1351F8F9674B4D0C0 3171DC14CF11AFB524C9665654D6024B9E5FF60053232622ED213755263A071E 04E806E27700EB465017E83AD8980FA75AC30CE5598583EF9769C96A5D4E460E B366716B711863360C5EBC15E07793E8C3FDE485A5B879C7815B646A39628EA8 9E849D2160B29801D01D355A5FD18D3D27B5C3D536B87307C25B821882136449 7F3CFF16FC6B057F95CEE63DD6D2433EE822286D043DAFA6AAC2224EDD19D6CA C9699C76D627B686B5765820A6405A18407A3647B87FDD2077E0FA5119CAB973 333F515584F3CFCB158D4BFF887405E0E4C2D6DC1A7FA79E75143022AC945ADB C48566779E03C9927358FB3772999456470D2D845289A18F647AF244ED5648D1 9ED095934C521083ADE4BF6E8DD2C63842F6F75B2BEBEBDE8D48AB4EE58F65C5 36C9D2CDB7191BD6151A989B3DE3614B558E0CB69FC5B15ADA99189CF5A34CA2 3FDB1F25073DD10A36C8C96E720CED32629ECFE76201B40407019A2817EF57A3 86EB6DC798FF7A2EDD237831183D868E5C8798FFF51E97CA042E0521B954A64B 3A7FCDE7207FBC00B839E3DE532E61DF46A9FC21E34EB7946DB7F5F4872ECCE9 2F712EFC314E8405D352320B5AC1707AE91067B07C9E01D34C3E4C3E01F18C84 E3A41C74E411E0EED88EAA173ED9000B2986C49854C71933F73062CDFF70BB05 3F282A558DA81A4243F373DFC56C853E7BB5992B238910BF7A46D23B3CD0240D 5A5DDF1074BF7CC9FD024A3F1A3A9D151148 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR12 %!PS-AdobeFont-1.0: CMR12 003.002 %%Title: CMR12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup /UniqueID get 5000794 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR12 def /FontBBox {-34 -251 988 750 }readonly def /UniqueID 5000794 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR12.) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 43 /plus put dup 47 /slash put dup 65 /A put dup 67 /C put dup 68 /D put dup 80 /P put dup 87 /W put dup 97 /a put dup 99 /c put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651 F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224 FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B 8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0 B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A 966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4 2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E 56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295 EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277 E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973 5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F 847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000 72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6 3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2 57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7 547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88 F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535 47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444 24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7 64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204 49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7 FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97 CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1 7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5 459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918 1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1 6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846 67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5 71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345 2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E 3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801 F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8 16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542 29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327 0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02 A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346 39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254 28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56 FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9 D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8 116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F 59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74 482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45 4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A 323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17 C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB 5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179 46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1 E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3 4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32 5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735 9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117 52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2 655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42 FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442 87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107 5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6 6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366 B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03 3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34 343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046 BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D 775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5 8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0 7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5 E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584 397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65 7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689 37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257 2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E 37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817 DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F 89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08 90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1 EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7 FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C 5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B 8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665 54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6 4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8 86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B 08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54 6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC 3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1 DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98 DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E 748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879 0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA 1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D 6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422 E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6 F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76 FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016 E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D 903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B 6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21 2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66 139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4 0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9 E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1 2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6 585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8 D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E 51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3 A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E 512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5 F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5 1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407 1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55 BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578 43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A 2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51 D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65 8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991 9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8 BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925 969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A 3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A 845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31 E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D 6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407 E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93 3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733 52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6 F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F 95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149 AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8 39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4 8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3 957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07 55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F 53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106 CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46 BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1 B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5 218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521 3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86 31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9 7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195 196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9 1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341 ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563 82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651 E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A BFCF3BD739E32E7FE909AEE068D50FAC33605FFF98C7D0115FB860178FD03DB9 7985B78E0AC21F2EA065FA841F5928FB85163B2E2D8F850DC7EE313912C45C28 2783F6762C67882EFEDDC7E7567F91C16B16FD8D5A1ABF35B5586307701B91AD 54984598F2AD46FEE3D68A2731BEAA754C8E730FE0E84952EF77930E4118F8D7 2F3AD755280F260CDC2CC1849CE52FA724CCE85B1E92D0C946712076A74FB2F9 46795C131C157205193A7B6C88FD9D42B1F0459F8F23371BEE01DA1A65D57EA3 B8A6FC358B3492C66D5FDEFEDCCD4D9F9D410432FAE6D62C955FD362E6C44911 7E177BF690C9086CA8C061792228328DF86819DE6D6013828889E779681E0F3D ECCB22B03269A52FBC34040545BC919856D2E279DFAD1CE0973BE88488B323EA 7B8923C4DFC66837AAA5B7481A741F3D7276DCA3D4B1F00C6954B5F3522BF258 E7549560A156F2E5EE583B581ECB6E46DAC8514EC05BB2673C2D71B3D3FC73DA AADED1AFCE69D521D4709F6F1AA6A1587FC350DF274B3FF2F05F9D987A8A0BCD E032897A57AE4CD958992717B4A0D97056EC36A1DA9990C0EBE5CF8370258DF0 045736C9FCF544ABD2933EE433D8CA5ED1FB4686E01B3AF9A51C95CB3A8CE07E 570208CF8D870CED5FEE79A5C8DD70DD9E8852774CE4E4A15F30CACF73230EF7 F1415F81A93B0519E271339B2425B5AA818D0B19DA994F14F27D0A8B529995D2 D639359E1AA3E39E18594C18BD5786DA5F8EDDD89CCA0CE0D176F9F469640110 0202527FB7A010A288937AADA33B68C62C13C8DE2941AB427AC2A4A363D8F7B0 AF6AB9FE5381BB0094711F02C1DA26438259A1AFAA427993D4EAC9918AEA60C4 A4F599A90C6ABCBFB2AD9ADB27924E5FB12E4A2DD8D1D497280099B856EDFB2D 16DF718E1BB26E9D831F0ABAEAC3278D276E88311D8FA9F8DE8888FA54109326 931F784F42F625DFE33350DD39FD4576C7D98163201B48BBC7E2254BB81AB8F9 D120C5A9EAA98F4E2A3239FFB829EE7048DB22E916445864ADCAAA61DC814F89 3C2959673837E9A2D82C2558061AC447C3CA012627B061B8D8103206A16E36D2 71733D5201EC6CD8CD13529A206AFFEDD00D0131E0C7AC1DE6E75592516BFCA2 AEBE22FAFEC62F48A560F22350FF0F04A188426588F018C26F2572FA6B5FCB40 8ED42B657076EE86E9570E99C110FE312F8CC4DA33480693D9D33205B7C57F56 FA7796FCDDD4D11A0C3BE3B9E93078022CE894B5732725C02F5AFFBB7F0AF2A3 D16F24E2DCABD9248548A7B57328914044A521E1D7FE555E1B667E5A8602EF36 9CD12FCC80575FFE91CA50A713B055CAD7064342429F5B4574DB3E3E19C223BA 79BDA5210163E5E02F7D0C40080521192F92979DC8951021F9F12D1E73F7B078 84D37EA6B1B67B0A5DEAB7CC9353C416BB190633DF74BB5A85658FA8341C2301 621AA2E8AC4E19C1434C2E16B640991069CDA2F850B1D1FE8C62A6E727684E42 F65284062B7F4C695E9DCD3623FAED3858B6179AAAD52B83F441505CD875EE77 55E65FD7C8366A13D62EA7A014710CFA76C81BE726C0831F2479704812842C5D 6DD7AFAD5B391A2F1B68C4096B27F8C33267CDE4445B769F567F6F4F246DFF2F 68177A905E3E8DC4B95A7BB91B6C4AA171DDF27841AF31E9B33E4C1815BD5302 F647D0BFA5CB5DAED42B724B6EED1ABE8F7C300F013459E559C4EFCF0210C91E 839592412941187C3EAE92942F7596E942B87272DF8037471E76DA0C1C876685 31B899EE3E27FF24DB0130D673C6903EDAA930B046DB025C4854FB0471873D0A A250F07826011C50E16DCBADD71D67052FA3E2A54894114FA8C2D179820BBA73 B6E6F4A3AE4012A4F581526262A75BD89C082ADF75AA0F54A0398B33B5A32132 50E4B40A06074EB43CE6DDA29117E5ADF556AD9302F0B259B6E987FFAEC300DA 5790CDA3AB110A83AE34D73139DD1BECF879671D1861AEF9FCCE09526EB67C2D E47A05530509C73D7E53BFA03578B8EACCBD89FE19CBB7A41F8438B4F6181557 EA597CBA544E97B31195E1660854789B0186E3344EF4EF9DF0A7C2ECFDE3682C 7EF5D88E8ACE435DA4A6C829A78BFB5029EFC7E61A30F1C7FEF403393528211B 76713E696D6F214622DBD714E1D850EB046B199B3EB16F7A6D2ABE0319E59EDB CAF76446D7C81642DCFFA3D64F6754F96A9FE30365E842B59040B7FDBCD0F559 93D73845264805D0EB64D189843C5BCD5914B86AC72332CB3802C4421E68163A 74E8407B419315C5FB71514EBAFE9965F578723820050095AADEB351A0EC3724 85D894693568907E1EA7BBA407D745251F7E806C8BFA1344A2C5487F807D8956 7FC44A28527A3D25E82AC346213348003B798B31B51B4BAA4103C9D01624335E 61465B72C1608B0BFD1FDBB88BF0E4A1686472D10FDB6FFB8788C865AE51E8BD C85389B8199BC89C7BF90BE33511FECD2325D47C2116443E25A4FD7E22C3CB38 39B2B9CB4E3734B22E5AADD14480651BA7F68FF62669497E4AC533C34E17E699 B07C45791401691AD99F2E2B17FE83A9DE4FF2E6548ACE97840FDD94F50CFAD2 3BF82AF0579C86603949396632ADE22E9D516B370F4680A3839BBB4613EE9E2B 406A51B6774696F121E6811951A6392B1A392530C7248EBC0776F348AA44643B 69071126F2592F3BE3F083C914A0D4D912E17A474140995C3FECBCA4F89C495B A452C474E39511C2E1189AD6F46C77DA78014A5FF07481BB00501C2B1C5479E9 1A6EAC65E305DBCA5692D92BDDC4CE14F7965223514E4817A99534478BCA3A1E 7F975A7514B75894C6229D18146D0E056CC46F639B8252A524CCFCC716290C81 C20287D9FA4E4F4295CC30E68E0643393F8B0E77589AD9FB17544A9746151F3D 6C794E53FCF340A562FC9EA6022056BA56E04B5D2731963FEC3E59B843572353 ED2E01FF4C3FF4617D563723969526CA3AA7D6BFF7AFA63623AAD3EA2319D39D 7AB354C7E093A0A2D0F3DF66085AD6B116B828319F975FA1B8490AF1C1166B50 E631B1C9C4261A237AE51A99C1D2100F4C3AB0C796459DA39A2271C28E12D46B EF624F24B4B05A08127C56552CB8A0C99DF5B8B063E1BEA80490A32613FA8A3E 7CA674DB569631FDE3B34C566EEDA0E8A58D6BB1468F581348F125984EC45844 A411C90FBFD6298970378C087FAE5248A72B221137E95B148E2E4FEE9454F15A BF57E7A8134E62E31910EF94E459AAD7129F55B31322EBDF0FD503096A78E575 AF994C9804D489868FDA043ABE3BEE83A8D2395564BB36F4862689095777FB6F 7D067CD3FD2F1ECF917DB6F06EA2EA23FAAA019BF743B76991C5803BCE79EE23 4F7B29F65B0E80D2F51E7000773D4A5015BFD5DD9FC4EF2DA66497F18F015B75 BBB8626738AECF77E212D94BA4DD5971C18A21328E024688C662C0F6DA2A499E 1907CA627DC0553EA6959C7BDD4E8ED4DA91E2B7C27B56FB3860D1C7A4899C75 B40B37AAA6A3982020AAEE4C15D0F92FBFD20DC33B0EA9EE2E7E2D472C8D37A2 083001FF2A747BAA45A4D514C5BA6F18498ACA5C41359D2A887A1FE14BF14933 2E7BA4F23F9497ED45997FFAFC0F740731D2744C8923C35CF83D624742F396ED 0C888C1581DF5149A3F5E56CE05505F478038C898448236826E2465322D2CFD5 FDED06AD2A9FE64ED4507DA013387039E7C440D74B45A15B61FD5E911C44ECDB A8FA76F5EF68756333075A255F4FCB62F6C432F0A9AABCEA9D7611260312C9EC D77EC11E6CE3ADCB21C03E1FA439AABA33E3792D8E1055157FD46ACCA197F9AC 6E7169A1BD1D3FE5764ED1C7114C341FA93F30ED8486BA2A2C146A703062A8EC 7F8EAF984DF01AB24CDE94261BEA55A169FCBC4A4710EF52148F72E6BE860A2B 46225D1784CE8EF49097B77932BE502D0616A32F3D270A9F20C22F6BD09D7FC8 4484A0AC7D8BB62C82D6415790652484222BF29A04DAC8BD0419CBD986DC3943 F49352D13FE69909F60847586F8E5B9D15FC4E269867BA9DD3F909E298631102 A60B34C6DDF42E51073D4DE9AC8300E700637934A70CA44FC068748F46429404 91F695404F68206E0B10BCD386D19E8E47F5C47AFD272A28284C8AF4FC26B251 9EF7EB570A4CEB25E98F98C1914B9DBB0BA481B9747B37398EF15764BD437990 77151F086B3CC765D8599CF5E4A90670B006A5C3CED3BB1886CF2F2630585999 180C99400B7928D0DC5CE91EFFAC708F2D57078E1A7B247575D6104FE37C0108 69A5F80233AA2DA73344BB22918F77F83364B33AE148EF1EFD9F13EDC1D77A2B FD6C2567A41B7B4BF2C7847D5F21470B581EDCDAF1A0F8C20F5857B17E6181E4 E1B629B9F28D969E9312D304B463660B0A29169072D5071FE4BCDF85D713D993 3E7B78E643E05CF35AD1FCA1BA6957F395A0A2CA6849C31BE83ED9641EF989AD C61B3954C2DE5044AFC4D425785A3CC671A1CDB5725ECAF2BAD308FBE76C51D5 41D23F9D2694BAB97B780762BBDB14D7B70376A3CDC4B33919EF43050F0AFF42 4C2887C40F5429D7C1262A2F66BDCB1C72545BC6F8A36C7E925895F5D2918AAB 6B9BF1066D161B2260057E1A684B0148F6EDD249B51286DA1DED7F1C31FBAFE0 D8BDE35EAA567421009FF3BE6C97FB75F4A3B41E694B0950E0CBE331BB863144 A6BC32FB05678F3AC38A6E66B15798EEB813F8E3497E6D7C5735A3794C7F40A3 4E1EBCE51929696C18F4942CAE0A853CA9C4FC9AC4458171BD69CB2AAAA38031 E08F21671F113B934ACBC761F602E6D937B2D5652E1550ED93158D73C8383316 962346356036C0A8004FA41F1FEE77B67943BD50C4EEE507032E47549151C82C 21E87060BD6ED60486560E752BF479C26FD56E65288CDBE158C2D936B43176D9 564D13B1723C1F2343EE6D2BBF42DF70ABADAA18EB0B46B1B490512C13D99A2C 330A177982CBAD82F3345B63A47E9DB0BC2A7D456CA845C5730EF3690A2B6F90 0E888FED30507832A3CFEB7D299B7ADFF152E6BAC2687D48C83A1199E94FCC4A DF4332D1759D1ABF57E368590C638AFF9FBA978D8E8E63DE7044C8EEBF650CFF 75BDFD5B8B63C59469491CD7EEE1271BC4BC03E298BBA5BE96EA4ED39A27BE22 5F159D3FE61909EEDD9F68D1965627241C893B55826228E3FAEEC66ED14FFF3A C58C9027D43A94498D0CE2E575AA3676B45249084A6F7ECE3E63EDE5A5D75B48 C6234294C688358AE4C0DF2A487062AF9244C3E2D7980AF914B68A20793D90F6 4298040AA179F54897C679D2F78C5180CE46BEE81DFB579AD6290F9D81FB34EF 8297708F38F22B3F34C409235751B2CCADC5BC330C5A813ADE5E75AD85AE2873 5EB4DA3D02368222C8B8E24C984D61B19167BADB76741F115B15915E5E2A916B 05B6BEDC1F0948CF5238E5C45ACFCFDC32AECE4EA5B8CB2C1D63A87645C47A40 F244DDC330A2F04E9B4D167084649B6ABAF00856AD38A4C9F8AFEAAE5934CD12 73A31D7CF548474AF166A1D7EE736251A7F8DDA05FB4F4C50359F069C1B0CAE4 D950512A5FF9AB0B9D2A6CEBD05D23925BB6DBA855946B0BE70D115CF9C3E937 B85CF84D4CE524D698A936DF45AB567F084F3EBB690C1BCCBD05A34D932B58DD 51FBEF26618D221F1D565C0E57011CE687FB75BB98B992D061A22786FAE84C9C 240A30B93B681F8CFEC933BEA47E03BFE58C05EBFA30CA9238F0335606586718 0314E6DE0F0A4E56F72A761F3232913148A4E065EE7591198B400F761DB8E304 64309D8BC15E84CC1B8551AD81CE2862DDE3219DBC7DDA91785A7DE0BE15C471 1484075AAD246655ABC56FC29642BF0133C2F2FDAD8EB580C45BB03D8C967CE5 A713CE85997B38272497DFE808C3ED0F5A23862F144FEBE5F15594AB0220A64A 96AABA30A463589BF11D42276F64C2FACF8D4E454DB874293AB95D7469BFFE42 13A2E6C62E5E2472A0241EA6AE0B1F775AD11C67CEFEBE9E0B8217B9136FF91C 7A0DF3BC2AFE2959BCAB20EAAE245C01612DF4B9E9D001082E41375D3128EF6E 36584F1ED7E8E2C39F07B14AD486F61A177817963759D012E68B3EC43E289459 0D5C80F49E6A866FB89FC1896FC5BF776DB24668665533BC0FB0F25B27625FC1 6583C1CC10443B74A41C7DF2682B46CF1850829C5C634396114ECA2670DA8AE3 AF91410B33E6510CFCDADD409A1443B4ED8E43ED593A81274D6C474B22F002AD 79EDDE6326AFAF076DC69BEC5776F74803F748014CD294E91FB9469B97960876 00A51410973FE9626A794805EC371CB81E3973D1F066A04848EB0871C49D63D8 F51E7B7EB2DD396FC2B7E18619EEB7193A9854204BD917B518DE642717A4CFD3 D95FD2CA060E93CDD05C7F3A31D1B16424ECE6B41E4B363C36F0BE5FD12B34A8 478EA0E28136AC90DFB34D754F04737DC03BE9ACE43A4F730F5E9736683E7374 8E0DCA7036E1C92973DEFCD306BACCB26EB98A053A6E059366BD7F2ADC10A405 06B29A0AE8386F28602A7F3CF2A5A1317727EC4E3C1715C75503DE79B7B165BA 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR8 %!PS-AdobeFont-1.0: CMR8 003.002 %%Title: CMR8 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR8. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup /UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR8 def /FontBBox {-36 -250 1070 750 }readonly def /UniqueID 5000791 def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR8.) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put dup 43 /plus put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 61 /equal put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B 8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF 27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF 18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB 7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242 6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8 B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517 2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374 3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850 9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45 7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D 25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502 CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2 DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB 16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413 07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752 762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978 D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826 CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C 74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541 1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9 E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44 3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE 37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89 7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762 C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36 A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D 7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447 CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD 3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61 59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89 6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069 79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070 F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B 49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38 2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B 29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F 2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87 5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237 EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5 5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E 293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806 568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405 64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109 A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075 267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D 136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0 A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7 80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7 D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB 46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9 66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8 2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71 CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF 2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0 DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5 CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B 0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47 CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479 7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF 6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893 6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C 72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256 13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE 6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7 1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197 86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72 D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B 70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10 0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20 FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180 52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5 7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA 09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7 401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335 74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127 3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6 ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0 93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197 301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847 F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61 1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E 36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291 34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011 ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B 9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634 E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A 893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8 E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE 0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2 B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5 B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F 3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7 AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5 98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF 4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1 AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E 015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A 167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F 9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522 CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831 130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202 2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154 C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0 ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3 3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612 E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20 3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7 3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D 947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972 26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479 0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697 984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247 44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49 603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B 6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE 276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF 809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22 08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7 3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF 76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5 A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602 3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41 966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18 CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531 2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF 94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641 DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35 9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1 FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E 1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77 24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C 06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC 6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530 F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6 26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6 D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2 49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17 064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692 8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445 2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359 52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1 17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF 145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F 2FC33D0D499DBE56C6668E137715D435D6B683E0113647B2765AB0F3D98AC717 5B33C3EDDE18506E73B4E392B022F30480BD30F59B2E3A59D93017296C3156B4 B5722E1955777716388AA987B2665669716F866FE6BDAD5E74A523CC03915F26 9B7B231F5D9B1F61DF7CB01ED3F27070E36547B263855DF5B2E3ABD2ACC440B9 0826E1DCCD4528C76F40A7D8EA25719D6355B6DB1CBC54708B0B4101EB2C417E E7AF00BC8DA24BDD1904114AE15540121B7F47CE095BD1E4300C27AFB027F1D1 A6D28C2DFD763E68EFBC9917D9EEE0BCE49C3D004AADD65FF16C8F295BABC732 9C3DC8E0054D7F6FE5CA2A8C80A9CA5355AD5C636533999BEE95EBD0A73CA361 B4968F5F166A4D667CC14E657C20DEC71181FD2EC5B8F36A858D1D2D897C7552 E5F49C892BD8D24E71084F7699A0E6E31202FA00B64CDE416A1BE2785C542D8B ADD4BD7F7132D8A7831090DF6E46A601250542D74483F98DDB9518C4634FD1C2 391090AEB81A9357485E3610FBBA6C607921D81CF87E61B53930B7638BAD46A1 6209AAE8F30F72DCC1C33AFCEC43481428520AECC06095A65C2C1AF46AD97DFF A1F32E84C36363529DD3B55EC0659ECE622F091CFB2CB3BC13A03E16859C24D1 C569684CF5296CB85EBF76928FBE8D18EF8A396EA7C6BBC17B7C219249D6AC97 DABCEC554B3B48CAAFE470331451261B2A892D56755C707858970A941B0EBD8B FEA5D64561708050A021F932C0DBE82FEFBB377F69730C478339093944B8B2AC C2214FCC5F1DC74900EEEB848D56C6B8CA2CF43DA8E1ACC9D9D8F17734AA4FF0 92D8FDA81A93699D58D84B86BA7B381833FE7DDE35757F151BA7CB42CA2DC580 5376A6DF8B24779AD362885052FA2BAE92D38B0E568DED173B714C3B2848AD6C 5BCA7CF9A3C50467EB352A36940187318011527815D3C9DFCD4FFC0AA0AC9236 426D6057A9ACDF36CD02EDA7CD516A45BEC30024C3B8CF44E4053F913F1B0027 DEAEADEDEAE8FD8460550DD93AEDB83B3D04631D7B3E2DC5F22216F9654F6773 7A7A1653871FD23E756C715A867A930A6CDD0BF61EF1B433E4A6D1249B511B96 93E202D5593476077C31205DAAA184B7DDA723DA24E346243211478660A85956 A6D29EEEE7E15C1C351168C6D6AC0730D77F41EE2590D27F8646565BE204F6F4 82DBF306D862B9C5500FF2F234B756AE4D572319B09624517893DB2379B93642 246A8A9E5EEE5DC1E0D84AC063D3982158E8A9DD54BF33519FDF4BCA88815896 C8F286D66DBFCE56E10CAF2044A0BF41D87CDCD9424A06F6C258E4664EFB38DB 794761A9FF03397BDC5FF92DE9DE6A855F76F50FFEC51F0A8606C5ACECA07478 3AAF7EF2B03D87445C399ACCBE1FEE1EDEA8563EB603FECE8F64F970C9178C28 E8014A70AE3DE2DD58BF7E49CE936B0FCC1E2A243E105042D76FA808879E293E 76E38336AA331EC5EE33C91330B553B0A7EB6760725A0B68246B0EA23F1C42D4 98106890F3E14E4F8889AD663016F4DE43A5990CFB40F2B5EEEF34CCEC915EA6 2CBBDFF4061681E0A4FA5580E91D192975DD4F279D0B3130B6246FCCE103BE57 9D487A589EB9F35AFD17973F57D0D4A83D5FA6353ECDA77C38BB633D63D2B53C F815F6EFFA295EC48BAEC5F69145DC4ABE809375826B436EC21EE46720667FD2 C6AD06B69C2D1731508101CFB98F4A97590C1B0E4FB5E64FDC136094962B643A F011A3F73F23B5924F33A8FF6B8AD2C6719AFEE9700231404BD2E1B54DB46EB4 F6751F7664E4A10C3522B7150C36053C3950673FFB1A52F54BFA46E827174A81 1997BC1E158A07023CEE7026A5A47D11E564232F1E7DCD4B33D4E960D0ACCE9A C3F70CDEECB8022C00ECCDEDF261F9F42E67FC528044470A1999DB84BD30A9E2 E746D44808FD7A03054E3C420BBF10B83B6DFD1E47010F74D339289E2526DBC1 9148E1DF0E165808723552120C26E3F802F273F22AE32C04EC31D91D6D108960 C0304793DFB6263DB43A347F9CC5FC5B0D87120B91A8DD5EA25F5CEB81C5CF28 ABCA5EF57920DF8AE42FEC219D9478D6AB40047D09E3405386162F0DB149C784 C287E12DCFE5B2F6373B45F364FB0CFF3F9B1ABA604023278823E19101808FD4 844D2F4585FB2198D5952520F8A02185F8F9DEB61C60909FAE37FD969EC4748E B0D26D527A76A8754663E7C5B3F5645B18A671823064AD2DFE505B3F38ED1EF1 64DDF3BCCB93CACAFC26EA732C1529B5A039C8FA8857C053C070D4E902D2BB1F 166934B7D9DDDCA5B81786895AADE5E57E57112F102A09FC8BE8D2133B6BC3DE 05AFC289CBD79941D5702C8FED187B8716284D9EF70110302F39491E81970102 EB441D0893EA6D2F1BF538F61A4E9EDBADB22849AA5079FD34CA0A48809A9523 715669C287BAE8C783B1F8EAFF62 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 40258437 52099151 1000 600 600 (adolc-manual.dvi) @start /Fa 135[51 51 2[51 51 2[51 51 51 51 51 2[51 1[51 1[51 51 51 1[51 50[51 46[{}16 99.6264 /CMTT12 rf /Fb 240[42 15[{}1 83.022 /CMSY10 rf /Fc 222[95 33[{}1 83.022 /CMBSY10 rf /Fd 134[44 2[44 44 44 44 44 1[44 44 44 44 44 2[44 44 1[44 44 44 44 44 44 1[44 32[44 1[44 12[44 44 3[44 42[{}25 83.022 /CMTT10 rf /Fe 173[66 82[{}1 90.9091 /MSBM10 rf /Ff 133[40 4[47 33 35 31 1[47 45 2[22 5[28 40 101[{}10 90.9091 /CMSSI10 rf /Fg 153[25 102[{}1 66.4176 /CMBX8 rf /Fh 148[33 107[{}1 49.8132 /CMMI6 rf /Fi 133[33 1[40 1[34 1[25 33 32 32 36 1[43 62 1[37 29 24 3[33 36 2[37 12[41 43 4[56 7[45 9[55 20 20 58[{}23 66.4176 /CMMI8 rf /Fj 135[38 57 38 43 1[32 28 2[42 43 66 20 2[20 2[25 37 43 37 43 40 51[28 23 2[32 32 40[{}21 83.022 /CMSS10 rf /Fk 134[33 121[{}1 66.4176 /CMSS8 rf /Fl 142[91 22[51 116 131 22[80 80 3[81 1[81 1[81 6[80 80 21[68 4[48 48 67 67 5[30 10[42 42{}19 90.9091 /CMEX10 rf /Fm 207[19 27[55 16[35 55 1[55{}5 66.4176 /CMSY8 rf /Fn 193[81 1[81 26[65 33[{}3 90.9091 /CMMIB10 rf /Fo 141[76 6[45 25 2[45 45 46[0 4[61 1[25 14[91 11[71 71 1[71 71 1[45 8[71 2[45 71 25 71{}19 90.9091 /CMSY10 rf /Fp 226[105 105 27[81{}3 90.9091 /CMBSY10 rf /Fq 133[40 42 42 62 42 47 33 35 31 47 47 45 47 72 22 44 24 22 47 45 28 40 47 40 47 44 3[26 1[26 56 61 61 86 61 63 62 51 59 67 58 67 64 80 49 1[43 25 64 61 52 54 66 58 61 61 1[43 1[71 1[25 25 45 2[45 45 45 45 45 45 45 45 25 30 25 71 45 35 35 1[69 2[76 45 20[49 49 53 11[{}79 90.9091 /CMSS10 rf /Fr 133[37 44 42 60 42 49 30 37 38 42 46 46 51 74 23 42 28 28 46 42 28 42 46 42 42 46 9[91 68 1[65 51 66 1[62 70 68 82 57 1[48 35 68 70 59 62 69 65 64 68 1[46 4[28 1[46 5[46 1[46 1[28 33 28 2[37 37 25[80 1[51 56 11[{}59 90.9091 /CMTI10 rf /Fs 133[42 45 52 65 44 52 33 43 41 41 46 1[55 80 27 47 37 31 52 43 45 42 47 39 39 48 6[62 53 75 1[53 62 53 56 69 1[58 69 73 88 62 1[50 40 1[71 58 3[69 68 48 1[71 45 71 25 25 23[42 3[54 2[52 2[40 7[40 16[{}55 90.9091 /CMMI10 rf /Ft 129[48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 2[48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 2[48 48 48 48 48 33[{}84 90.9091 /CMTT10 rf /Fu 133[40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 51 40 51 45 7[68 68 93 68 68 66 51 67 1[62 71 68 83 57 1[47 33 68 71 59 62 69 66 64 68 7[45 45 45 45 45 45 45 45 45 45 45 25 30 1[71 1[35 35 25[76 1[51 53 11[{}67 90.9091 /CMSL10 rf /Fv 128[38 4[34 41 1[55 41 43 30 30 30 1[43 38 43 64 21 2[21 43 38 23 34 43 34 43 38 9[79 1[58 55 43 2[52 60 58 70 1[60 1[28 58 60 50 52 59 55 54 58 7[38 38 38 38 2[38 38 38 38 38 21 26 21 29[64 1[43 12[{}55 74.7198 /CMR9 rf /Fw 203[30 30 30 30 49[{}4 49.8132 /CMR6 rf /Fx 132[52 46 55 55 76 55 58 41 41 43 1[58 52 58 87 29 55 1[29 58 52 32 48 58 46 58 51 10[79 80 73 58 78 1[71 79 82 99 63 82 54 40 82 82 66 69 80 76 74 79 3[81 3[52 52 52 52 52 52 52 52 52 52 1[29 35 29 81 1[41 41 27[58 61 11[{}65 90.9091 /CMBX10 rf /Fy 133[37 44 44 60 44 46 32 33 33 44 46 42 46 69 23 44 1[23 46 42 25 37 46 37 46 42 4[42 7[60 46 3[65 2[52 1[43 1[62 1[54 1[63 60 1[62 5[23 23 42 3[42 42 42 42 42 42 42 23 28 23 65 1[32 32 5[42 19[69 1[46 48 11[{}56 83.022 /CMR10 rf /Fz 139[37 38 39 14[42 53 46 31[72 65[{}7 83.022 /CMBX10 rf /FA 128[45 45 2[45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 1[25 45 25 45 25 56 68 1[93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 3[71 1[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 71 45 35 35 25 4[45 25 10[45 2[45 4[76 51 51 53 66 8[76 1[{}91 90.9091 /CMR10 rf /FB 133[50 59 59 81 59 62 44 44 46 59 62 56 62 93 31 59 1[31 62 56 34 51 62 50 62 54 9[116 85 1[78 62 84 84 77 84 88 106 67 1[58 42 88 88 70 74 86 81 1[85 7[56 56 56 56 56 56 56 56 56 56 56 31 37 31 87 1[44 44 31 24[93 1[62 65 11[{}66 99.6264 /CMBX12 rf /FC 138[65 46 46 46 2[59 65 98 33 62 1[33 65 59 36 52 1[52 1[59 9[120 6[80 11[89 85 1[88 17[59 3[91 31[68 11[{}24 119.552 /CMR12 rf /FD 194[55 7[35 35 35 35 35 35 4[55 1[27 27 40[{}10 66.4176 /CMR8 rf /FE 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 71 1[37 75 67 41 61 75 60 75 65 11[103 94 75 100 1[92 101 105 128 81 2[50 2[85 88 103 97 96 102 6[37 67 67 67 67 67 67 67 67 67 67 2[45 1[105 31[78 11[{}53 119.552 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter /setpagedevice where { pop << /PageSize [612 792] >> setpagedevice } { /letter where { pop letter } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 0 0 a SDict begin [/Producer (dvips + Distiller)/Title ()/Subject ()/Creator (LaTeX with hyperref package)/Author ()/Keywords () /DOCINFO pdfmark end 0 0 a 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end 183 199 a Black Black 191 515 a SDict begin [/Count -9/Dest (section.1) cvn/Title (Preparing a Section of C or C++ Code for Differentiation) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.1) cvn/Title (Introduction) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.2) cvn/Title (Declaring Active Variables) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.3) cvn/Title (Marking Active Sections) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.4) cvn/Title (Selecting Independent and Dependent Variables) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.5) cvn/Title (A Subprogram as an Active Section) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.6) cvn/Title (Overloaded Operators and Functions) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.7) cvn/Title (Reusing the Tape for Arbitrary Input Values) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.8) cvn/Title (Conditional Assignments) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.1.9) cvn/Title (Step-by-Step Modification Procedure) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -3/Dest (section.2) cvn/Title (Numbering the Tapes and Controlling the Buffer) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.2.1) cvn/Title (Examining the Tape and Predicting Storage Requirements ) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.2.2) cvn/Title (Customizing ADOL-C) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.2.3) cvn/Title (Warnings and Suggestions for Improved Efficiency) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -6/Dest (section.3) cvn/Title (Easy-To-Use Drivers) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.1) cvn/Title (Drivers for Optimization and Nonlinear Equations) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.2) cvn/Title (Drivers for Ordinary Differential Equations) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.3) cvn/Title (Drivers for Sparse Jacobians and Sparse Hessians) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.4) cvn/Title (Higher Derivative Tensors) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.5) cvn/Title (Derivatives of Implicit and Inverse Functions) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.3.6) cvn/Title (Drivers of the Toolbox for Lie Derivatives) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -1/Dest (section.4) cvn/Title (Basic Drivers for the Forward and Reverse Mode) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.4.1) cvn/Title (Drivers for Abs-Normal Form) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -3/Dest (section.5) cvn/Title (Overloaded Forward and Reverse Calls) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.5.1) cvn/Title (The Scalar Case) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.5.2) cvn/Title (The Vector Case) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.5.3) cvn/Title (Dependence Analysis) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -5/Dest (section.6) cvn/Title (Advanced algorithmic differentiation in ADOL-C) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.6.1) cvn/Title (Differentiating parameter dependent functions) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.6.2) cvn/Title (Differentiating external functions) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.6.3) cvn/Title (Advanced algorithmic differentiation of time integration processes) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.6.4) cvn/Title (Advanced algorithmic differentiation of fixed point iterations) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.6.5) cvn/Title (Advanced algorithmic differentiation of OpenMP parallel programs) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -3/Dest (section.7) cvn/Title (Traceless forward differentiation in ADOL-C) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.7.1) cvn/Title (Modifying the Source Code) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.7.2) cvn/Title (Compiling and Linking the Source Code) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.7.3) cvn/Title (Concluding Remarks for the Traceless Forward Mode Variant) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -2/Dest (section.8) cvn/Title (Traceless forward differentiation in ADOL-C using Cuda) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.8.1) cvn/Title (Modifying the source code) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.8.2) cvn/Title (Compiling and Linking the Source Code) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -5/Dest (section.9) cvn/Title (Installing and Using ADOL-C) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.9.1) cvn/Title (Generating the ADOL-C Library) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.9.2) cvn/Title (Compiling and Linking the Example Programs) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.9.3) cvn/Title (Description of Important Header Files) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.9.4) cvn/Title (Compiling and Linking C/C++ Programs) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.9.5) cvn/Title (Adding Quadratures as Special Functions) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -4/Dest (section.10) cvn/Title (Example Codes) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.10.1) cvn/Title (Speelpenning's Example \(speelpenning.cpp\)) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.10.2) cvn/Title (Power Example \(powexam.cpp\)) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.10.3) cvn/Title (Determinant Example \(detexam.cpp\)) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/Count -0/Dest (subsection.10.4) cvn/Title (Ordinary Differential Equation Example \(odexam.cpp\)) /OUT pdfmark end 191 515 a 191 515 a SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark end 191 515 a 191 515 a SDict begin [ {Catalog}<<>> /PUT pdfmark end 191 515 a 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end 191 515 a Black Black 1658 606 a FE(ADOL-C:)2254 606 y SDict begin H.S end 2254 606 a -33 x FD(1)2293 606 y SDict begin 13.6 H.L end 2293 606 a 2293 606 a SDict begin [/Subtype /Link/Dest (Hfootnote.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2293 606 a 853 839 a FC(A)39 b(P)m(ac)m(k)-7 b(age)37 b(for)h(the)g(Automatic)e(Di\013eren)m(tiation)1129 1012 y(of)i(Algorithms)e(W)-10 b(ritten)38 b(in)g(C/C++)1312 1245 y FB(V)-9 b(ersion)38 b(2.6.3,)g(Jan)m(uary)g(2017)1160 1457 y FA(Andrea)30 b(W)-8 b(alther)1799 1457 y SDict begin H.S end 1799 1457 a -33 x FD(2)1839 1457 y SDict begin 13.6 H.L end 1839 1457 a 1839 1457 a SDict begin [/Subtype /Link/Dest (Hfootnote.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1839 1457 a 30 w FA(and)30 b(Andreas)g(Griew)m(ank)2782 1457 y SDict begin H.S end 2782 1457 a -33 x FD(3)2822 1457 y SDict begin 13.6 H.L end 2822 1457 a 2822 1457 a SDict begin [/Subtype /Link/Dest (Hfootnote.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2822 1457 a Black Black 1808 1706 a Fz(Abstract)p Black Black 543 1883 a Fy(The)37 b(C++)f(pac)n(k)-5 b(age)35 b(ADOL-C)i(describ)r(ed)f(here)g(facilitates)h(the)g(ev)-5 b(aluation)36 b(of)h(\014rst)g(and)418 1982 y(higher)24 b(deriv)-5 b(ativ)n(es)23 b(of)i(v)n(ector)e(functions)i(that)f(are)g (de\014ned)g(b)n(y)h(computer)f(programs)e(written)i(in)418 2082 y(C)31 b(or)f(C++.)46 b(The)31 b(resulting)f(deriv)-5 b(ativ)n(e)30 b(ev)-5 b(aluation)30 b(routines)g(ma)n(y)g(b)r(e)h (called)g(from)f(C,)h(C++,)418 2182 y(F)-7 b(ortran,)27 b(or)f(an)n(y)h(other)g(language)f(that)i(can)f(b)r(e)h(link)n(ed)g (with)g(C.)543 2281 y(The)38 b(n)n(umerical)f(v)-5 b(alues)38 b(of)g(deriv)-5 b(ativ)n(e)37 b(v)n(ectors)g(are)g(obtained)h(free)g (of)g(truncation)g(errors)418 2381 y(at)31 b(a)f(small)h(m)n(ultiple)g (of)g(the)g(run)g(time)g(and)g(random)e(access)h(memory)g(required)g(b) n(y)g(the)h(giv)n(en)418 2481 y(function)e(ev)-5 b(aluation)27 b(program.)35 b(Deriv)-5 b(ativ)n(e)27 b(matrices)g(are)g(obtained)h(b) n(y)f(columns,)h(b)n(y)f(ro)n(ws)f(or)418 2580 y(in)h(sparse)e(format.) 36 b(F)-7 b(or)26 b(solution)g(curv)n(es)g(de\014ned)h(b)n(y)f (ordinary)f(di\013eren)n(tial)h(equations,)g(sp)r(ecial)418 2680 y(routines)32 b(are)g(pro)n(vided)g(that)g(ev)-5 b(aluate)33 b(the)g(T)-7 b(a)n(ylor)31 b(co)r(e\016cien)n(t)h(v)n (ectors)f(and)i(their)f(Jacobians)418 2779 y(with)g(resp)r(ect)g(to)f (the)h(curren)n(t)f(state)g(v)n(ector.)48 b(F)-7 b(or)31 b(explicitly)g(or)g(implicitly)h(de\014ned)g(functions)418 2879 y(deriv)-5 b(ativ)n(e)23 b(tensors)g(are)g(obtained)h(with)g(a)f (complexit)n(y)h(that)g(gro)n(ws)e(only)h(quadratically)f(in)j(their) 418 2979 y(degree.)34 b(The)21 b(deriv)-5 b(ativ)n(e)21 b(calculations)f(in)n(v)n(olv)n(e)f(a)i(p)r(ossibly)g(substan)n(tial)g (but)h(alw)n(a)n(ys)d(predictable)418 3078 y(amoun)n(t)26 b(of)g(data.)36 b(Since)27 b(the)f(data)g(is)g(accessed)f(strictly)h (sequen)n(tially)g(it)g(can)g(b)r(e)h(automatically)418 3178 y(paged)g(out)h(to)f(external)g(\014les.)191 3415 y Fx(Keyw)m(ords)p FA(:)44 b(Computational)33 b(Di\013eren)m(tiation,)i (Automatic)f(Di\013eren)m(tiation,)h(Chain)d(Rule,)g(Ov)m(er-)191 3528 y(loading,)39 b(T)-8 b(a)m(ylor)38 b(Co)s(e\016cien)m(ts,)h (Gradien)m(ts,)g(Hessians,)g(F)-8 b(orw)m(ard)37 b(Mo)s(de,)h(Rev)m (erse)g(Mo)s(de,)g(Implicit)191 3641 y(F)-8 b(unction)31 b(Di\013eren)m(tiation,)i(In)m(v)m(erse)e(F)-8 b(unction)31 b(Di\013eren)m(tiation)191 3854 y Fx(Abbreviated)k(title)p FA(:)40 b(Automatic)32 b(di\013eren)m(tiation)g(b)m(y)e(o)m(v)m (erloading)j(in)d(C++)p Black 191 4788 1440 4 v 295 4842 a Fw(1)329 4873 y SDict begin H.S end 329 4873 a 329 4873 a SDict begin H.R end 329 4873 a 329 4873 a SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.1) cvn /DEST pdfmark end 329 4873 a Fv(The)d(dev)n(elopmen)n(t)f(of)i(earlier)g(v)n (ersions)f(w)n(as)g(supp)r(orted)g(b)n(y)e(the)i(O\016ce)f(of)i(Scien)n (ti\014c)e(Computing,)i(U.S.)e(Depart-)191 4965 y(men)n(t)21 b(of)h(Energy)-6 b(,)22 b(the)f(NSF,)g(and)g(the)g(Deutsc)n(he)g(F)-6 b(orsc)n(h)n(ungsgemeinsc)n(haft.)34 b(During)22 b(the)f(dev)n(elopmen) n(t)f(of)i(the)f(curren)n(t)191 5056 y(v)n(ersion)31 b(Andrea)g(W)-6 b(alther)31 b(and)g(Andreas)g(Ko)n(w)n(arz)h(w)n(ere)g (supp)r(orted)f(b)n(y)f(the)h(gran)n(t)h(W)-6 b(a)31 b(1607/2-1)i(of)f(the)f(Deutsc)n(he)191 5147 y(F)-6 b(orsc)n(h)n (ungsgemeinsc)n(haft)295 5207 y Fw(2)329 5239 y SDict begin H.S end 329 5239 a 329 5239 a SDict begin H.R end 329 5239 a 329 5239 a SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.2) cvn /DEST pdfmark end 329 5239 a Fv(Institute)25 b(of)i(Mathematics,)g(Univ)n(ersit)n(y)e(of)h(P)n(aderb)r(orn,)g(33098) i(P)n(aderb)r(orn,)e(German)n(y)295 5298 y Fw(3)329 5330 y SDict begin H.S end 329 5330 a 329 5330 a SDict begin H.R end 329 5330 a 329 5330 a SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.3) cvn /DEST pdfmark end 329 5330 a Fv(Departmen)n(t)f(of)i(Mathematics,)g(Hum)n(b)r(oldt-Univ)n (ersit\177)-38 b(at)24 b(zu)i(Berlin,)h(10099)g(Berlin,)g(German)n(y)p Black Black Black eop end %%Page: 2 2 TeXDict begin 2 1 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.2) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(2)3038 b Fu(CONTENTS)p Black 191 606 a SDict begin H.S end 191 606 a 191 606 a SDict begin 18 H.A end 191 606 a 191 606 a SDict begin [/View [/XYZ H.V]/Dest (section*.1) cvn /DEST pdfmark end 191 606 a FE(Con)l(ten)l(ts)191 864 y SDict begin H.S end 191 864 a Fx(1)84 b(Preparing)36 b(a)f(Section)g(of)g(C)f(or)i (C++)f(Co)s(de)f(for)h(Di\013eren)m(tiation)3000 864 y SDict begin 13.6 H.L end 3000 864 a 3000 864 a SDict begin [/Subtype /Link/Dest (section.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 3000 864 a 739 w Fx(4)327 1027 y SDict begin H.S end 327 1027 a FA(1.1)94 b(In)m(tro)s(duction)1034 1027 y SDict begin 13.6 H.L end 1034 1027 a 1034 1027 a SDict begin [/Subtype /Link/Dest (subsection.1.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1034 1027 a 28 w FA(.)46 b(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 183 w(4)p Black 327 1191 a SDict begin H.S end 327 1191 a FA(1.2)94 b(Declaring)32 b(Activ)m(e)h(V)-8 b(ariables)1593 1191 y SDict begin 13.6 H.L end 1593 1191 a 1593 1191 a SDict begin [/Subtype /Link/Dest (subsection.1.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1593 1191 a 35 w FA(.)46 b(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)p Black 183 w(4)p Black 327 1355 a SDict begin H.S end 327 1355 a FA(1.3)94 b(Marking)31 b(Activ)m(e)i(Sections)1509 1355 y SDict begin 13.6 H.L end 1509 1355 a 1509 1355 a SDict begin [/Subtype /Link/Dest (subsection.1.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1509 1355 a 48 w FA(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 183 w(5)p Black 327 1518 a SDict begin H.S end 327 1518 a FA(1.4)94 b(Selecting)32 b(Indep)s(enden)m(t)d(and)h(Dep)s(enden)m(t)g(V)-8 b(ariables)2441 1518 y SDict begin 13.6 H.L end 2441 1518 a 2441 1518 a SDict begin [/Subtype /Link/Dest (subsection.1.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2441 1518 a 35 w FA(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 183 w(6)p Black 327 1682 a SDict begin H.S end 327 1682 a FA(1.5)94 b(A)31 b(Subprogram)e(as)h(an)g(Activ)m(e)j(Section)1961 1682 y SDict begin 13.6 H.L end 1961 1682 a 1961 1682 a SDict begin [/Subtype /Link/Dest (subsection.1.5) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1961 1682 a 91 w FA(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)p Black 183 w(6)p Black 327 1845 a SDict begin H.S end 327 1845 a FA(1.6)94 b(Ov)m(erloaded)31 b(Op)s(erators)f(and)g(F)-8 b(unctions)2006 1845 y SDict begin 13.6 H.L end 2006 1845 a 2006 1845 a SDict begin [/Subtype /Link/Dest (subsection.1.6) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2006 1845 a 46 w FA(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 183 w(7)p Black 327 2009 a SDict begin H.S end 327 2009 a FA(1.7)94 b(Reusing)31 b(the)f(T)-8 b(ap)s(e)30 b(for)h(Arbitrary)e(Input)g(V)-8 b(alues)2321 2009 y SDict begin 13.6 H.L end 2321 2009 a 2321 2009 a SDict begin [/Subtype /Link/Dest (subsection.1.7) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2321 2009 a 85 w FA(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(10)p Black 327 2172 a SDict begin H.S end 327 2172 a FA(1.8)94 b(Conditional)31 b(Assignmen)m(ts)1527 2172 y SDict begin 13.6 H.L end 1527 2172 a 1527 2172 a SDict begin [/Subtype /Link/Dest (subsection.1.8) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1527 2172 a 30 w FA(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)p Black 138 w(11)p Black 327 2336 a SDict begin H.S end 327 2336 a FA(1.9)94 b(Step-b)m(y-Step)31 b(Mo)s(di\014cation)g(Pro)s(cedure) 2011 2336 y SDict begin 13.6 H.L end 2011 2336 a 2011 2336 a SDict begin [/Subtype /Link/Dest (subsection.1.9) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2011 2336 a 41 w FA(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(12)p Black 191 2594 a SDict begin H.S end 191 2594 a Fx(2)84 b(Num)m(b)s(ering)36 b(the)e(T)-9 b(ap)s(es)35 b(and)g(Con)m(trolling)g(the)g(Bu\013er)2578 2594 y SDict begin 13.6 H.L end 2578 2594 a 2578 2594 a SDict begin [/Subtype /Link/Dest (section.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2578 2594 a 1108 w Fx(13)327 2757 y SDict begin H.S end 327 2757 a FA(2.1)94 b(Examining)31 b(the)f(T)-8 b(ap)s(e)31 b(and)e(Predicting)i(Storage)h(Requiremen)m(ts)2898 2757 y SDict begin 13.6 H.L end 2898 2757 a 2898 2757 a SDict begin [/Subtype /Link/Dest (subsection.2.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2898 2757 a 73 w FA(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(14)p Black 327 2921 a SDict begin H.S end 327 2921 a FA(2.2)94 b(Customizing)31 b(ADOL-C)1423 2921 y SDict begin 13.6 H.L end 1423 2921 a 1423 2921 a SDict begin [/Subtype /Link/Dest (subsection.2.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1423 2921 a 63 w FA(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(15)p Black 327 3084 a SDict begin H.S end 327 3084 a FA(2.3)94 b(W)-8 b(arnings)31 b(and)f(Suggestions)h(for)f(Impro)m(v)m(ed)g(E\016ciency) 2534 3084 y SDict begin 13.6 H.L end 2534 3084 a 2534 3084 a SDict begin [/Subtype /Link/Dest (subsection.2.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2534 3084 a 84 w FA(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(17)p Black 191 3342 a SDict begin H.S end 191 3342 a Fx(3)84 b(Easy-T)-9 b(o-Use)36 b(Driv)m(ers)1270 3342 y SDict begin 13.6 H.L end 1270 3342 a 1270 3342 a SDict begin [/Subtype /Link/Dest (section.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1270 3342 a 2416 w Fx(19)327 3506 y SDict begin H.S end 327 3506 a FA(3.1)94 b(Driv)m(ers)31 b(for)f(Optimization)i(and)e (Nonlinear)h(Equations)2541 3506 y SDict begin 13.6 H.L end 2541 3506 a 2541 3506 a SDict begin [/Subtype /Link/Dest (subsection.3.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2541 3506 a 77 w FA(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)p Black 138 w(19)p Black 327 3669 a SDict begin H.S end 327 3669 a FA(3.2)94 b(Driv)m(ers)31 b(for)f(Ordinary)f(Di\013eren)m(tial)k (Equations)2257 3669 y SDict begin 13.6 H.L end 2257 3669 a 2257 3669 a SDict begin [/Subtype /Link/Dest (subsection.3.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2257 3669 a 78 w FA(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)p Black 138 w(22)p Black 327 3833 a SDict begin H.S end 327 3833 a FA(3.3)94 b(Driv)m(ers)31 b(for)f(Sparse)g(Jacobians)h(and)f(Sparse)f (Hessians)2500 3833 y SDict begin 13.6 H.L end 2500 3833 a 2500 3833 a SDict begin [/Subtype /Link/Dest (subsection.3.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2500 3833 a 47 w FA(.)46 b(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) p Black 138 w(24)p Black 327 3997 a SDict begin H.S end 327 3997 a FA(3.4)94 b(Higher)31 b(Deriv)-5 b(ativ)m(e)33 b(T)-8 b(ensors)1570 3997 y SDict begin 13.6 H.L end 1570 3997 a 1570 3997 a SDict begin [/Subtype /Link/Dest (subsection.3.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1570 3997 a 58 w FA(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(30)p Black 327 4160 a SDict begin H.S end 327 4160 a FA(3.5)94 b(Deriv)-5 b(ativ)m(es)33 b(of)e(Implicit)g(and)e(In)m(v)m(erse)i(F)-8 b(unctions)2323 4160 y SDict begin 13.6 H.L end 2323 4160 a 2323 4160 a SDict begin [/Subtype /Link/Dest (subsection.3.5) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2323 4160 a 83 w FA(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(33)p Black 327 4324 a SDict begin H.S end 327 4324 a FA(3.6)94 b(Driv)m(ers)31 b(of)g(the)f(T)-8 b(o)s(olb)s(o)m(x)31 b(for)g(Lie)f(Deriv)-5 b(ativ)m(es)2196 4324 y SDict begin 13.6 H.L end 2196 4324 a 2196 4324 a SDict begin [/Subtype /Link/Dest (subsection.3.6) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2196 4324 a 68 w FA(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(35)p Black 191 4581 a SDict begin H.S end 191 4581 a Fx(4)84 b(Basic)36 b(Driv)m(ers)g(for)f (the)f(F)-9 b(orw)m(ard)35 b(and)g(Rev)m(erse)h(Mo)s(de)2587 4581 y SDict begin 13.6 H.L end 2587 4581 a 2587 4581 a SDict begin [/Subtype /Link/Dest (section.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2587 4581 a 1099 w Fx(39)327 4745 y SDict begin H.S end 327 4745 a FA(4.1)94 b(Driv)m(ers)31 b(for)f(Abs-Normal)h(F)-8 b(orm)1712 4745 y SDict begin 13.6 H.L end 1712 4745 a 1712 4745 a SDict begin [/Subtype /Link/Dest (subsection.4.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1712 4745 a 57 w FA(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(44)p Black 191 5003 a SDict begin H.S end 191 5003 a Fx(5)84 b(Ov)m(erloaded)35 b(F)-9 b(orw)m(ard)35 b(and)g(Rev)m(erse)g(Calls)2113 5003 y SDict begin 13.6 H.L end 2113 5003 a 2113 5003 a SDict begin [/Subtype /Link/Dest (section.5) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2113 5003 a 1573 w Fx(46)327 5166 y SDict begin H.S end 327 5166 a FA(5.1)94 b(The)30 b(Scalar)h(Case)1183 5166 y SDict begin 13.6 H.L end 1183 5166 a 1183 5166 a SDict begin [/Subtype /Link/Dest (subsection.5.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1183 5166 a 91 w FA(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(47)p Black 327 5330 a SDict begin H.S end 327 5330 a FA(5.2)94 b(The)30 b(V)-8 b(ector)32 b(Case)1198 5330 y SDict begin 13.6 H.L end 1198 5330 a 1198 5330 a SDict begin [/Subtype /Link/Dest (subsection.5.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1198 5330 a 76 w FA(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(48)p Black Black Black eop end %%Page: 3 3 TeXDict begin 3 2 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.3) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(CONTENTS)3036 b FA(3)p Black 327 606 a SDict begin H.S end 327 606 a FA(5.3)94 b(Dep)s(endence)31 b(Analysis)1377 606 y SDict begin 13.6 H.L end 1377 606 a 1377 606 a SDict begin [/Subtype /Link/Dest (subsection.5.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1377 606 a 39 w FA(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)p Black 138 w(50)p Black 191 860 a SDict begin H.S end 191 860 a Fx(6)84 b(Adv)-6 b(anced)36 b(algorithmic)g(di\013eren)m (tiation)e(in)h(ADOL-C)2574 860 y SDict begin 13.6 H.L end 2574 860 a 2574 860 a SDict begin [/Subtype /Link/Dest (section.6) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2574 860 a 1112 w Fx(51)327 1022 y SDict begin H.S end 327 1022 a FA(6.1)94 b(Di\013eren)m(tiating)33 b(parameter)e(dep)s(enden)m(t)f(functions) 2378 1022 y SDict begin 13.6 H.L end 2378 1022 a 2378 1022 a SDict begin [/Subtype /Link/Dest (subsection.6.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2378 1022 a 28 w FA(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)p Black 138 w(51)p Black 327 1185 a SDict begin H.S end 327 1185 a FA(6.2)94 b(Di\013eren)m(tiating)33 b(external)f(functions)1855 1185 y SDict begin 13.6 H.L end 1855 1185 a 1855 1185 a SDict begin [/Subtype /Link/Dest (subsection.6.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1855 1185 a 56 w FA(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f (.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(53)p Black 327 1348 a SDict begin H.S end 327 1348 a FA(6.3)94 b(Adv)-5 b(anced)31 b(algorithmic)h(di\013eren)m (tiation)g(of)e(time)h(in)m(tegration)i(pro)s(cesses)3158 1348 y SDict begin 13.6 H.L end 3158 1348 a 3158 1348 a SDict begin [/Subtype /Link/Dest (subsection.6.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 3158 1348 a 25 w FA(.)46 b(.)g(.)f(.)h(.)g(.)p Black 138 w(54)p Black 327 1511 a SDict begin H.S end 327 1511 a FA(6.4)94 b(Adv)-5 b(anced)31 b(algorithmic)h(di\013eren)m (tiation)g(of)e(\014xed)g(p)s(oin)m(t)g(iterations)2955 1511 y SDict begin 13.6 H.L end 2955 1511 a 2955 1511 a SDict begin [/Subtype /Link/Dest (subsection.6.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2955 1511 a 87 w FA(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(57)p Black 327 1673 a SDict begin H.S end 327 1673 a FA(6.5)94 b(Adv)-5 b(anced)31 b(algorithmic)h (di\013eren)m(tiation)g(of)e(Op)s(enMP)f(parallel)j(programs)3209 1673 y SDict begin 13.6 H.L end 3209 1673 a 3209 1673 a SDict begin [/Subtype /Link/Dest (subsection.6.5) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 3209 1673 a 45 w FA(.)46 b(.)f(.)h(.)g(.)p Black 138 w(58)p Black 191 1927 a SDict begin H.S end 191 1927 a Fx(7)84 b(T)-9 b(raceless)36 b(forw)m(ard)f(di\013eren)m (tiation)f(in)h(ADOL-C)2372 1927 y SDict begin 13.6 H.L end 2372 1927 a 2372 1927 a SDict begin [/Subtype /Link/Dest (section.7) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2372 1927 a 1314 w Fx(59)327 2090 y SDict begin H.S end 327 2090 a FA(7.1)94 b(Mo)s(difying)31 b(the)f(Source)g(Co)s(de)1625 2090 y SDict begin 13.6 H.L end 1625 2090 a 1625 2090 a SDict begin [/Subtype /Link/Dest (subsection.7.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1625 2090 a 74 w FA(.)45 b(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)p Black 138 w(60)p Black 327 2252 a SDict begin H.S end 327 2252 a FA(7.2)94 b(Compiling)31 b(and)f(Linking)g(the)g(Source)g(Co)s (de)2139 2252 y SDict begin 13.6 H.L end 2139 2252 a 2139 2252 a SDict begin [/Subtype /Link/Dest (subsection.7.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2139 2252 a 54 w FA(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)p Black 138 w(64)p Black 327 2415 a SDict begin H.S end 327 2415 a FA(7.3)94 b(Concluding)30 b(Remarks)g(for)h(the)f(T)-8 b(raceless)32 b(F)-8 b(orw)m(ard)31 b(Mo)s(de)f(V)-8 b(arian)m(t)2982 2415 y SDict begin 13.6 H.L end 2982 2415 a 2982 2415 a SDict begin [/Subtype /Link/Dest (subsection.7.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2982 2415 a 60 w FA(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(66)p Black 191 2669 a SDict begin H.S end 191 2669 a Fx(8)84 b(T)-9 b(raceless)36 b(forw)m(ard)f(di\013eren)m(tiation)f(in)h(ADOL-C)f (using)h(Cuda)2922 2669 y SDict begin 13.6 H.L end 2922 2669 a 2922 2669 a SDict begin [/Subtype /Link/Dest (section.8) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2922 2669 a 764 w Fx(67)327 2831 y SDict begin H.S end 327 2831 a FA(8.1)94 b(Mo)s(difying)31 b(the)f(source)h(co)s(de)1585 2831 y SDict begin 13.6 H.L end 1585 2831 a 1585 2831 a SDict begin [/Subtype /Link/Dest (subsection.8.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1585 2831 a 43 w FA(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.) p Black 138 w(67)p Black 327 2994 a SDict begin H.S end 327 2994 a FA(8.2)94 b(Compiling)31 b(and)f(Linking)g(the)g(Source)g(Co)s(de)2139 2994 y SDict begin 13.6 H.L end 2139 2994 a 2139 2994 a SDict begin [/Subtype /Link/Dest (subsection.8.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2139 2994 a 54 w FA(.)46 b(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h (.)g(.)p Black 138 w(72)p Black 191 3248 a SDict begin H.S end 191 3248 a Fx(9)84 b(Installing)35 b(and)g(Using)h(ADOL-C)1700 3248 y SDict begin 13.6 H.L end 1700 3248 a 1700 3248 a SDict begin [/Subtype /Link/Dest (section.9) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1700 3248 a 1986 w Fx(72)327 3411 y SDict begin H.S end 327 3411 a FA(9.1)94 b(Generating)32 b(the)f(ADOL-C)f(Library) 1853 3411 y SDict begin 13.6 H.L end 1853 3411 a 1853 3411 a SDict begin [/Subtype /Link/Dest (subsection.9.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1853 3411 a 58 w FA(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h (.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(72)p Black 327 3573 a SDict begin H.S end 327 3573 a FA(9.2)94 b(Compiling)31 b(and)f(Linking)g(the)g (Example)h(Programs)2400 3573 y SDict begin 13.6 H.L end 2400 3573 a 2400 3573 a SDict begin [/Subtype /Link/Dest (subsection.9.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2400 3573 a 76 w FA(.)46 b(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)p Black 138 w(74)p Black 327 3736 a SDict begin H.S end 327 3736 a FA(9.3)94 b(Description)32 b(of)e(Imp)s(ortan)m(t)g(Header)h (Files)2057 3736 y SDict begin 13.6 H.L end 2057 3736 a 2057 3736 a SDict begin [/Subtype /Link/Dest (subsection.9.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2057 3736 a 66 w FA(.)45 b(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(74)p Black 327 3899 a SDict begin H.S end 327 3899 a FA(9.4)94 b(Compiling)31 b(and)f(Linking)g(C/C++)f (Programs)2214 3899 y SDict begin 13.6 H.L end 2214 3899 a 2214 3899 a SDict begin [/Subtype /Link/Dest (subsection.9.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2214 3899 a 50 w FA(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)p Black 138 w(75)p Black 327 4061 a SDict begin H.S end 327 4061 a FA(9.5)94 b(Adding)30 b(Quadratures)f(as)i(Sp)s(ecial)g(F)-8 b(unctions)2191 4061 y SDict begin 13.6 H.L end 2191 4061 a 2191 4061 a SDict begin [/Subtype /Link/Dest (subsection.9.5) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2191 4061 a 73 w FA(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.) g(.)f(.)h(.)g(.)p Black 138 w(76)p Black 191 4315 a SDict begin H.S end 191 4315 a Fx(10)32 b(Example)j(Co)s(des)1037 4315 y SDict begin 13.6 H.L end 1037 4315 a 1037 4315 a SDict begin [/Subtype /Link/Dest (section.10) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1037 4315 a 2649 w Fx(77)327 4478 y SDict begin H.S end 327 4478 a FA(10.1)49 b(Sp)s(eelp)s(enning's)29 b(Example)i(\()p Ft(speelpenning.cpp)p FA(\))2369 4478 y SDict begin 13.6 H.L end 2369 4478 a 2369 4478 a SDict begin [/Subtype /Link/Dest (subsection.10.1) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2369 4478 a 37 w FA(.)45 b(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g (.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(77)p Black 327 4641 a SDict begin H.S end 327 4641 a FA(10.2)j(P)m(o)m(w)m(er)32 b(Example)f(\()p Ft(powexam.cpp)p FA(\))1784 4641 y SDict begin 13.6 H.L end 1784 4641 a 1784 4641 a SDict begin [/Subtype /Link/Dest (subsection.10.2) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1784 4641 a 56 w FA(.)46 b(.)f(.)h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.) f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(79)p Black 327 4803 a SDict begin H.S end 327 4803 a FA(10.3)j(Determinan)m(t) 32 b(Example)f(\()p Ft(detexam.cpp)p FA(\))2044 4803 y SDict begin 13.6 H.L end 2044 4803 a 2044 4803 a SDict begin [/Subtype /Link/Dest (subsection.10.3) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2044 4803 a 79 w FA(.)45 b(.)h(.)g(.)g(.)f(.) h(.)g(.)f(.)h(.)g(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(80)p Black 327 4966 a SDict begin H.S end 327 4966 a FA(10.4)j(Ordinary)29 b(Di\013eren)m(tial)k(Equation)e(Example)f(\()p Ft(odexam.cpp)p FA(\))2722 4966 y SDict begin 13.6 H.L end 2722 4966 a 2722 4966 a SDict begin [/Subtype /Link/Dest (subsection.10.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 2722 4966 a 37 w FA(.)46 b(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)g(.)p Black 138 w(82)p Black Black Black eop end %%Page: 4 4 TeXDict begin 4 3 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.4) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(4)231 b Fu(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR)h (C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (section.1) cvn /DEST pdfmark end 191 515 a 91 x FE(1)135 b(Preparing)41 b(a)g(Section)g(of)h(C)e(or)h(C++)g (Co)t(de)g(for)g(Di\013eren)l(tiation)191 722 y SDict begin H.S end 191 722 a 191 722 a SDict begin 13.6 H.A end 191 722 a 191 722 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.1) cvn /DEST pdfmark end 191 722 a 143 x FB(1.1)112 b(In)m(tro)s(duction)191 1088 y FA(The)31 b(pac)m(k)-5 b(age)34 b(ADOL-C)d(utilizes)i(o)m(v)m(erloading)h(in)e(C++,)f(but)g (the)h(user)f(has)g(to)h(kno)m(w)g(only)g(C.)f(The)191 1201 y(acron)m(ym)40 b(stands)e(for)h Fx(A)p FA(utomatic)h Fx(D)p FA(i\013eren)m(tiation)i(b)m(y)d Fx(O)p FA(v)m(er)p Fx(L)p FA(oading)g(in)g Fx(C)p FA(++.)65 b(In)39 b(con)m(trast)h(to)191 1314 y(source)29 b(transformation)g(approac)m(hes,)g(o)m(v)m(erloading) i(do)s(es)d(not)h(generate)h(in)m(termediate)h(source)d(co)s(de.)191 1427 y(As)21 b(starting)i(p)s(oin)m(ts)e(to)i(retriev)m(e)g(further)d (information)i(on)f(tec)m(hniques)h(and)f(application)i(of)f(automatic) 191 1540 y(di\013eren)m(tiation,)41 b(as)d(w)m(ell)h(as)e(on)h(other)f (AD)i(to)s(ols,)h(w)m(e)e(refer)f(to)h(the)g(b)s(o)s(ok)f([)2945 1540 y SDict begin H.S end 2945 1540 a Black FA(8)p Black 2991 1481 a SDict begin H.R end 2991 1481 a 2991 1540 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GrWa08) cvn H.B /ANN pdfmark end 2991 1540 a FA(].)62 b(F)-8 b(urthermore,)40 b(the)191 1653 y(w)m(eb)31 b(page)h Ft(http://www.autodiff.org)25 b FA(of)32 b(the)f(AD)h(comm)m(unit)m(y)g(forms)f(a)h(ric)m(h)f(source) h(of)f(further)191 1766 y(information)g(and)e(p)s(oin)m(ters.)332 1929 y(ADOL-C)37 b(facilitates)i(the)d(sim)m(ultaneous)h(ev)-5 b(aluation)38 b(of)f(arbitrarily)f(high)h(directional)g(deriv)-5 b(a-)191 2041 y(tiv)m(es)27 b(and)e(the)g(gradien)m(ts)i(of)e(these)h (T)-8 b(a)m(ylor)27 b(co)s(e\016cien)m(ts)g(with)e(resp)s(ect)h(to)g (all)h(indep)s(enden)m(t)d(v)-5 b(ariables.)191 2154 y(Relativ)m(e)32 b(to)f(the)f(cost)h(of)f(ev)-5 b(aluating)31 b(the)f(underlying)f(function,)h(the)g(cost)h(for)e(ev)-5 b(aluating)32 b(an)m(y)e(suc)m(h)191 2267 y(scalar-v)m(ector)j(pair)c (gro)m(ws)h(as)g(the)g(square)f(of)h(the)g(degree)g(of)g(the)g(deriv)-5 b(ativ)m(e)31 b(but)e(is)g(still)i(completely)191 2380 y(indep)s(enden)m(t)e(of)i(the)f(n)m(um)m(b)s(ers)f Fs(m)h FA(and)g Fs(n)p FA(.)332 2543 y(This)d(man)m(ual)h(is)g(organized)g(as) g(follo)m(ws.)41 b(This)27 b(section)i(explains)e(the)h(mo)s (di\014cations)g(required)f(to)191 2656 y(con)m(v)m(ert)g(undi\013eren) m(tiated)g(co)s(de)f(to)g(co)s(de)h(that)f(compiles)h(with)e(ADOL-C.) 2849 2656 y SDict begin H.S end 2849 2656 a Black FA(Section)31 b(2)p Black 3212 2594 a SDict begin H.R end 3212 2594 a 3212 2656 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.2) cvn H.B /ANN pdfmark end 3212 2656 a 26 w FA(co)m(v)m(ers)c(asp)s(ects)191 2769 y(of)22 b(the)g(tap)s(e)g(of)g (recorded)g(data)h(that)f(ADOL-C)g(uses)g(to)g(ev)-5 b(aluate)24 b(arbitrarily)e(high)g(order)f(deriv)-5 b(ativ)m(es.)191 2882 y(The)22 b(discussion)f(includes)h(storage)i(requiremen)m(ts)e (and)f(the)i(tailoring)g(of)g(certain)g(tap)s(e)f(c)m(haracteristics) 191 2995 y(to)41 b(\014t)f(sp)s(eci\014c)g(user)g(needs.)70 b(Descriptions)41 b(of)f(easy-to-use)i(driv)m(ers)e(for)g(a)h(con)m(v)m (enien)m(t)h(deriv)-5 b(ativ)m(e)191 3107 y(ev)g(aluation)23 b(are)g(con)m(tained)g(in)1264 3107 y SDict begin H.S end 1264 3107 a Black FA(Section)31 b(3)p Black 1627 3045 a SDict begin H.R end 1627 3045 a 1627 3107 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.3) cvn H.B /ANN pdfmark end 1627 3107 a FA(.)1690 3107 y SDict begin H.S end 1690 3107 a Black FA(Section)g(4)p Black 2054 3045 a SDict begin H.R end 2054 3045 a 2054 3107 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 2054 3107 a 22 w FA(o\013ers)22 b(a)g(more)g(mathematical)i(c)m (haracterization)191 3220 y(of)31 b(the)f(di\013eren)m(t)h(mo)s(des)f (of)h(AD)g(to)g(compute)g(deriv)-5 b(ativ)m(es.)43 b(A)m(t)31 b(the)g(same)g(time,)g(the)g(corresp)s(onding)191 3333 y(driv)m(ers)f(of)h(ADOL-C)g(are)g(explained.)43 b(The)30 b(o)m(v)m(erloaded)j(deriv)-5 b(ativ)m(e)32 b(ev)-5 b(aluation)32 b(routines)f(using)g(the)191 3446 y(forw)m(ard)i(and)g(the)g(rev)m (erse)i(mo)s(de)e(of)g(AD)h(are)g(explained)g(in)2374 3446 y SDict begin H.S end 2374 3446 a Black FA(Section)d(5)p Black 2738 3384 a SDict begin H.R end 2738 3384 a 2738 3446 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 2738 3446 a FA(.)50 b(Adv)-5 b(anced)33 b(di\013eren)m(tiation)191 3559 y(tec)m(hniques)24 b(as)g(the)g(optimal)h(c)m(hec)m(kp)s(oin)m(ting)g(for)f(time)g(in)m (tegrations,)j(the)d(exploitation)i(of)e(\014xed)f(p)s(oin)m(t)191 3672 y(iterations,)28 b(the)d(usages)h(of)f(external)h(di\013eren)m (tiated)h(functions)e(and)f(the)i(di\013eren)m(tiation)h(of)e(Op)s (enMP)191 3785 y(parallel)39 b(programs)e(are)i(describ)s(ed)d(in)1612 3785 y SDict begin H.S end 1612 3785 a Black FA(Section)31 b(6)p Black 1976 3723 a SDict begin H.R end 1976 3723 a 1976 3785 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.6) cvn H.B /ANN pdfmark end 1976 3785 a FA(.)63 b(The)37 b(tap)s(eless)i(forw)m(ard)e(mo)s(de)g(is)h(presen)m(ted)g(in)191 3898 y SDict begin H.S end 191 3898 a Black FA(Section)31 b(7)p Black 555 3836 a SDict begin H.R end 555 3836 a 555 3898 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.7) cvn H.B /ANN pdfmark end 555 3898 a FA(.)660 3898 y SDict begin H.S end 660 3898 a Black FA(Section)h(9)p Black 1024 3836 a SDict begin H.R end 1024 3836 a 1024 3898 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.9) cvn H.B /ANN pdfmark end 1024 3898 a 44 w FA(details)44 b(the)g(installation)i(and)d(use)h(of)f(the)h(ADOL-C)g(pac)m(k)-5 b(age.)83 b(Finally)-8 b(,)191 4011 y SDict begin H.S end 191 4011 a Black FA(Section)31 b(10)p Black 600 3949 a SDict begin H.R end 600 3949 a 600 4011 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.10) cvn H.B /ANN pdfmark end 600 4011 a 45 w FA(furnishes)43 b(some)j(example)g(programs)e (that)i(incorp)s(orate)g(the)f(ADOL-C)g(pac)m(k)-5 b(age)47 b(to)191 4124 y(ev)-5 b(aluate)33 b(\014rst)d(and)h(higher-order)g (deriv)-5 b(ativ)m(es.)45 b(These)31 b(and)g(other)g(examples)h(are)g (distributed)e(with)191 4237 y(the)j(ADOL-C)h(source)f(co)s(de.)49 b(The)33 b(user)f(should)h(simply)f(refer)h(to)h(them)f(if)g(the)h (more)f(abstract)h(and)191 4349 y(general)d(descriptions)g(of)f(ADOL-C) h(pro)m(vided)f(in)g(this)g(do)s(cumen)m(t)g(do)g(not)h(su\016ce.)191 4506 y SDict begin H.S end 191 4506 a 191 4506 a SDict begin 13.6 H.A end 191 4506 a 191 4506 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.2) cvn /DEST pdfmark end 191 4506 a 149 x FB(1.2)112 b(Declaring)38 b(Activ)m(e)f(V)-9 b(ariables)191 4878 y FA(The)34 b(k)m(ey)h(ingredien)m(t)g(of)g (automatic)h(di\013eren)m(tiation)g(b)m(y)f(o)m(v)m(erloading)h(is)f (the)f(concept)i(of)e(an)h Fr(active)191 4991 y(variable)p FA(.)72 b(All)42 b(v)-5 b(ariables)41 b(that)g(ma)m(y)h(b)s(e)e (considered)g(as)h(di\013eren)m(tiable)h(quan)m(tities)g(at)g(some)f (time)191 5104 y(during)33 b(the)h(program)g(execution)i(m)m(ust)e(b)s (e)f(of)i(an)f(activ)m(e)i(t)m(yp)s(e.)53 b(ADOL-C)34 b(uses)g(one)g(activ)m(e)j(scalar)191 5217 y(t)m(yp)s(e,)42 b(called)e Fq(adouble)p FA(,)h(whose)e(real)h(part)f(is)g(of)g(the)g (standard)g(t)m(yp)s(e)g Fq(double)p FA(.)67 b(T)m(ypically)-8 b(,)43 b(one)c(will)191 5330 y(declare)d(the)g(indep)s(enden)m(t)f(v)-5 b(ariables)36 b(and)f(all)h(quan)m(tities)h(that)f(directly)g(or)g (indirectly)g(dep)s(end)e(on)p Black Black eop end %%Page: 5 5 TeXDict begin 5 4 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.5) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(1.3)92 b(Marking)31 b(Activ)m(e)h(Sections)2375 b FA(5)p Black 191 606 a(them)27 b(as)g Fr(active)p FA(.)39 b(Other)27 b(v)-5 b(ariables)27 b(that)h(do)e(not)i(dep)s(end)d(on)h (the)h(indep)s(enden)m(t)f(v)-5 b(ariables)28 b(but)e(en)m(ter,)191 719 y(for)h(example,)i(as)e(parameters,)i(ma)m(y)f(remain)f(one)h(of)f (the)h Fr(p)-5 b(assive)28 b FA(t)m(yp)s(es)f Fq(double,)i(\015oat)p FA(,)f(or)f Fq(int)p FA(.)39 b(There)191 832 y(is)i(no)g(implicit)h(t)m (yp)s(e)f(con)m(v)m(ersion)h(from)e Fq(adouble)h FA(to)h(an)m(y)f(of)g (these)g(passiv)m(e)h(t)m(yp)s(es;)k(th)m(us,)e Fx(failure)191 945 y(to)39 b(declare)h(v)-6 b(ariables)39 b(as)h(activ)m(e)f(when)g (they)g(dep)s(end)g(on)h(other)f(activ)m(e)h(v)-6 b(ariables)39 b(will)191 1058 y(result)k(in)g(a)f(compile-time)h(error)g(message)p FA(.)62 b(In)37 b(data)h(\015o)m(w)f(terminology)-8 b(,)41 b(the)c(set)h(of)f(activ)m(e)191 1171 y(v)-5 b(ariable)30 b(names)e(m)m(ust)h(con)m(tain)h(all)g(its)f(successors)g(in)g(the)g (dep)s(endency)e(graph.)40 b(All)30 b(comp)s(onen)m(ts)f(of)191 1284 y(indexed)h(arra)m(ys)h(m)m(ust)f(ha)m(v)m(e)h(the)g(same)g (activit)m(y)i(status.)332 1446 y(The)h(real)i(comp)s(onen)m(t)f(of)f (an)h Fq(adouble)g(x)f FA(can)h(b)s(e)f(extracted)j(as)e Fq(x.value\(\))p FA(.)54 b(In)34 b(particular,)i(suc)m(h)191 1559 y(explicit)25 b(con)m(v)m(ersions)g(are)g(needed)e(for)h(the)g (standard)f(output)g(pro)s(cedure)g Fq(p)m(rintf)p FA(.)38 b(The)24 b(output)f(stream)191 1672 y(op)s(erator)38 b Fp(\034)f FA(is)g(o)m(v)m(erloaded)j(suc)m(h)d(that)h(\014rst)e(the)i (real)g(part)g(of)f(an)h Fq(adouble)f FA(and)g(then)g(the)h(string)191 1785 y(\\)p Fq(\(a\))p FA(")24 b(is)g(added)e(to)i(the)g(stream.)39 b(The)22 b(input)h(stream)g(op)s(erator)h Fp(\035)f FA(can)g(b)s(e)g (used)f(to)i(assign)g(a)f(constan)m(t)191 1898 y(v)-5 b(alue)27 b(to)g(an)f Fq(adouble)p FA(.)39 b(Naturally)-8 b(,)29 b Fq(adouble)p FA(s)d(ma)m(y)h(b)s(e)f(comp)s(onen)m(ts)g(of)h (v)m(ectors,)h(matrices,)h(and)c(other)191 2011 y(arra)m(ys,)31 b(as)g(w)m(ell)g(as)g(mem)m(b)s(ers)e(of)i(structures)e(or)i(classes.) 332 2174 y(The)f(C++)f(class)i Fq(adouble)p FA(,)g(its)f(mem)m(b)s(er)g (functions,)g(and)g(the)g(o)m(v)m(erloaded)i(v)m(ersions)f(of)f(all)h (arith-)191 2286 y(metic)k(op)s(erations,)g(comparison)f(op)s(erators,) h(and)e(most)i(ANSI)e(C)g(functions)h(are)g(con)m(tained)h(in)f(the)191 2399 y(\014le)43 b Ft(adouble.cpp)e FA(and)h(its)i(header)f Ft()p FA(.)75 b(The)43 b(latter)h(m)m(ust)g(b)s(e)e (included)h(for)191 2512 y(compilation)32 b(of)e(all)i(program)e (\014les)g(con)m(taining)i Fq(adouble)p FA(s)e(and)g(corresp)s(onding)g (op)s(erations.)191 2655 y SDict begin H.S end 191 2655 a 191 2655 a SDict begin 13.6 H.A end 191 2655 a 191 2655 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.3) cvn /DEST pdfmark end 191 2655 a 148 x FB(1.3)112 b(Marking)39 b(Activ)m(e)d(Sections)191 3025 y FA(All)31 b(calculations)h(in)m(v)m (olving)g(activ)m(e)h(v)-5 b(ariables)31 b(that)g(o)s(ccur)f(b)s(et)m (w)m(een)h(the)g(v)m(oid)g(function)f(calls)p Black Black 1076 3249 a Fq(trace)p 1269 3249 28 4 v 33 w(on\(tag,k)m(eep\))244 b FA(and)c Fq(trace)p 2598 3249 V 33 w(o\013\(\014le\))191 3474 y FA(are)34 b(recorded)f(on)h(a)g(sequen)m(tial)h(data)f(set)h (called)f Fr(tap)-5 b(e)p FA(.)52 b(P)m(airs)34 b(of)g(these)g (function)g(calls)g(can)g(app)s(ear)191 3587 y(an)m(ywhere)23 b(in)f(a)h(C++)f(program,)j(but)d(they)h(m)m(ust)f(not)h(o)m(v)m (erlap.)40 b(The)23 b(nonnegativ)m(e)h(in)m(teger)g(argumen)m(t)191 3699 y Fq(tag)33 b FA(iden)m(ti\014es)g(the)g(particular)g(tap)s(e)g (for)g(subsequen)m(t)f(function)g(or)h(deriv)-5 b(ativ)m(e)34 b(ev)-5 b(aluations.)50 b(Unless)191 3812 y(sev)m(eral)43 b(tap)s(es)f(need)g(to)h(b)s(e)e(k)m(ept,)46 b Fq(tag)g FA(=)f(0)d(ma)m(y)h(b)s(e)e(used)g(throughout.)76 b(The)41 b(optional)i(in)m(teger)191 3925 y(argumen)m(ts)d Fq(k)m(eep)h FA(and)e Fq(\014le)g FA(will)h(b)s(e)f(discussed)g(in)2022 3925 y SDict begin H.S end 2022 3925 a Black FA(Section)32 b(2)p Black 2386 3863 a SDict begin H.R end 2386 3863 a 2386 3925 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.2) cvn H.B /ANN pdfmark end 2386 3925 a FA(.)68 b(W)-8 b(e)41 b(will)f(refer)f(to)i(the)f(sequence)g(of)191 4038 y(statemen)m(ts)31 b(executed)f(b)s(et)m(w)m(een)f(a)h(particular) f(call)i(to)e Fq(trace)p 2333 4038 28 4 v 33 w(on)h FA(and)e(the)i (follo)m(wing)g(call)g(to)g Fq(trace)p 3664 4038 V 33 w(o\013)191 4151 y FA(as)k(an)g Fr(active)i(se)-5 b(ction)34 b FA(of)g(the)h(co)s(de.)51 b(The)34 b(same)g(activ)m(e)i(section)f(ma) m(y)g(b)s(e)e(en)m(tered)i(rep)s(eatedly)-8 b(,)35 b(and)191 4264 y(one)c(can)f(successiv)m(ely)j(generate)e(sev)m(eral)h(traces)g (on)e(distinct)h(tap)s(es)g(b)m(y)f(c)m(hanging)h(the)g(v)-5 b(alue)31 b(of)g Fq(tag)p FA(.)191 4377 y(Both)c(functions)e Fq(trace)p 993 4377 V 34 w(on)h FA(and)g Fq(trace)p 1506 4377 V 33 w(o\013)g FA(are)h(protot)m(yp)s(ed)f(in)g(the)g(header)g (\014le)g Ft()p FA(,)191 4490 y(whic)m(h)k(is)g (included)g(b)m(y)g(the)h(header)f Ft()c FA(automatically)-8 b(.)332 4653 y(Activ)m(e)46 b(sections)e(ma)m(y)h (con)m(tain)g(nested)e(or)h(ev)m(en)g(recursiv)m(e)g(calls)h(to)f (functions)g(pro)m(vided)f(b)m(y)191 4765 y(the)e(user.)73 b(Naturally)-8 b(,)45 b(their)c(formal)g(and)g(actual)h(parameters)g(m) m(ust)f(ha)m(v)m(e)h(matc)m(hing)g(t)m(yp)s(es.)73 b(In)191 4878 y(particular,)32 b(the)f(functions)g(m)m(ust)g(b)s(e)g(compiled)h (with)f(their)g(activ)m(e)j(v)-5 b(ariables)32 b(declared)f(as)h Fq(adouble)p FA(s)191 4991 y(and)i(with)h(the)g(header)g(\014le)g Ft()30 b FA(included.)53 b(V)-8 b(ariables)37 b(of)e(t)m(yp)s(e)g Fq(adouble)g FA(ma)m(y)g(b)s(e)191 5104 y(declared)30 b(outside)g(an)g(activ)m(e)i(section)f(and)e(need)g (not)h(go)h(out)f(of)g(scop)s(e)g(b)s(efore)f(the)h(end)f(of)h(an)f (activ)m(e)191 5217 y(section.)41 b(It)26 b(is)h(not)g(necessary)g({)g (though)f(desirable)h({)g(that)g(free-store)h Fq(adouble)p FA(s)e(allo)s(cated)j(within)d(an)191 5330 y(activ)m(e)33 b(section)e(b)s(e)f(deleted)h(b)s(efore)g(its)f(completion.)43 b(The)30 b(v)-5 b(alues)31 b(of)f(all)i Fq(adouble)p FA(s)e(that)h(exist)g(at)h(the)p Black Black eop end %%Page: 6 6 TeXDict begin 6 5 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.6) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(6)231 b Fu(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR)h (C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black 191 606 a FA(b)s(eginning)26 b(and)g(end)g(of)h(an)g(activ)m(e)i (section)f(are)f(automatically)i(recorded)e(b)m(y)g Fq(trace)p 3126 606 28 4 v 33 w(on)g FA(and)f Fq(trace)p 3639 606 V 33 w(o\013)p FA(,)191 719 y(resp)s(ectiv)m(ely)-8 b(.)191 861 y SDict begin H.S end 191 861 a 191 861 a SDict begin 13.6 H.A end 191 861 a 191 861 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.4) cvn /DEST pdfmark end 191 861 a 148 x FB(1.4)112 b(Selecting)38 b(Indep)s(enden)m(t)h(and)f(Dep)s (enden)m(t)h(V)-9 b(ariables)191 1231 y FA(One)37 b(or)h(more)g(activ)m (e)h(v)-5 b(ariables)39 b(that)f(are)g(read)g(in)f(or)g(initialized)j (to)e(the)g(v)-5 b(alues)38 b(of)g(constan)m(ts)h(or)191 1344 y(passiv)m(e)22 b(v)-5 b(ariables)22 b(m)m(ust)f(b)s(e)f (distinguished)h(as)g(indep)s(enden)m(t)f(v)-5 b(ariables.)38 b(Other)21 b(activ)m(e)i(v)-5 b(ariables)22 b(that)191 1457 y(are)27 b(similarly)g(initialized)i(ma)m(y)e(b)s(e)f(considered)h (as)g(temp)s(oraries)g(\(e.g.,)i(a)e(v)-5 b(ariable)28 b(that)f(accum)m(ulates)191 1570 y(the)j(partial)h(sums)e(of)i(a)f (scalar)h(pro)s(duct)e(after)i(b)s(eing)f(initialized)i(to)f(zero\).)41 b(In)30 b(order)g(to)g(distinguish)191 1683 y(an)g(activ)m(e)j(v)-5 b(ariable)31 b Fq(x)f FA(as)h(indep)s(enden)m(t,)e(ADOL-C)i(requires)f (an)g(assignmen)m(t)h(of)g(the)f(form)p Black Black 1022 1905 a Fq(x)g Fp(\034)p Fx(=)g Fq(p)m(x)120 b FA(//)32 b Fq(p)m(x)e FA(of)h(an)m(y)g(passiv)m(e)g(n)m(umeric)f(t)m(yp)s(e)76 b Fs(:)191 2128 y FA(This)43 b(sp)s(ecial)i(initialization)i(ensures)c (that)h Fq(x.value\(\))h FA(=)e Fq(p)m(x)p FA(,)48 b(and)c(it)g(should) f(precede)h(an)m(y)g(other)191 2241 y(assignmen)m(t)28 b(to)g Fq(x)p FA(.)40 b(Ho)m(w)m(ev)m(er,)30 b Fq(x)d FA(ma)m(y)h(b)s(e)f(reassigned)g(other)h(v)-5 b(alues)28 b(subsequen)m(tly)-8 b(.)39 b(Similarly)-8 b(,)29 b(one)f(or)191 2354 y(more)i(activ)m(e)j(v)-5 b(ariables)31 b Fq(y)f FA(m)m(ust)h(b)s(e)e(distinguished)h(as)g(dep)s(enden)m(t)g(b)m(y)g(an) g(assignmen)m(t)i(of)e(the)h(form)p Black Black 1195 2576 a Fq(y)f Fp(\035)p Fx(=)g Fq(p)m(y)121 b FA(//)31 b Fq(p)m(y)f FA(of)h(an)m(y)g(passiv)m(e)g(t)m(yp)s(e)76 b Fs(;)191 2799 y FA(whic)m(h)30 b(ensures)f(that)i Fq(p)m(y)f FA(=)g Fq(y)-8 b(.value\(\))31 b FA(and)e(should)g(not)i(b)s(e)e (succeeded)h(b)m(y)g(an)m(y)h(other)f(assignmen)m(t)h(to)191 2912 y Fq(y)p FA(.)57 b(Ho)m(w)m(ev)m(er,)39 b(a)e(dep)s(enden)m(t)e(v) -5 b(ariable)36 b Fq(y)g FA(ma)m(y)g(ha)m(v)m(e)h(b)s(een)e(assigned)i (other)f(real)g(v)-5 b(alues)36 b(previously)-8 b(,)191 3025 y(and)26 b(it)i(could)f(ev)m(en)h(b)s(e)f(an)g(indep)s(enden)m(t)f (v)-5 b(ariable)27 b(as)h(w)m(ell.)40 b(The)27 b(deriv)-5 b(ativ)m(e)29 b(v)-5 b(alues)27 b(calculated)i(after)191 3138 y(the)34 b(completion)h(of)f(an)g(activ)m(e)i(section)f(alw)m(a)m (ys)h(represen)m(t)d Fx(deriv)-6 b(ativ)m(es)40 b(of)f(the)f(\014nal)h (v)-6 b(alues)40 b(of)191 3251 y(the)j(dep)s(enden)m(t)f(v)-6 b(ariables)44 b(with)e(resp)s(ect)h(to)g(the)g(initial)g(v)-6 b(alues)43 b(of)g(the)g(indep)s(enden)m(t)191 3364 y(v)-6 b(ariables)p FA(.)332 3526 y(The)34 b(order)h(in)f(whic)m(h)h(the)g (indep)s(enden)m(t)f(and)g(dep)s(enden)m(t)g(v)-5 b(ariables)36 b(are)f(mark)m(ed)g(b)m(y)g(the)g Fp(\034)p Fx(=)191 3639 y FA(and)30 b Fp(\035)p Fx(=)g FA(statemen)m(ts)i(matters)f (crucially)h(for)e(the)h(subsequen)m(t)e(deriv)-5 b(ativ)m(e)32 b(ev)-5 b(aluations.)42 b(Ho)m(w)m(ev)m(er,)191 3752 y(these)35 b(v)-5 b(ariables)36 b(do)e(not)h(ha)m(v)m(e)h(to)g(b)s(e)e (com)m(bined)h(in)m(to)h(con)m(tiguous)g(v)m(ectors.)55 b(ADOL-C)35 b(coun)m(ts)h(the)191 3865 y(n)m(um)m(b)s(er)23 b(of)i(indep)s(enden)m(t)f(and)g(dep)s(enden)m(t)g(v)-5 b(ariable)26 b(sp)s(eci\014cations)f(within)f(eac)m(h)i(activ)m(e)h (section)f(and)191 3978 y(records)k(them)g(in)g(the)h(header)f(of)h (the)f(tap)s(e.)191 4120 y SDict begin H.S end 191 4120 a 191 4120 a SDict begin 13.6 H.A end 191 4120 a 191 4120 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.5) cvn /DEST pdfmark end 191 4120 a 148 x FB(1.5)112 b(A)37 b(Subprogram)i(as)f(an)g(Activ)m(e)f(Section)191 4490 y FA(As)30 b(a)h(generic)g(example)g(let)h(us)d(consider)i(a)f(C\(++\)) h(function)f(of)g(the)h(form)f(sho)m(wn)f(in)3264 4508 y SDict begin H.S end 3264 4508 a Black -18 x FA(Figure)i(1)p Black 3597 4428 a SDict begin H.R end 3597 4428 a 3597 4490 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.1) cvn H.B /ANN pdfmark end 3597 4490 a FA(.)332 4653 y(If)41 b Fq(eval)g FA(is)h(to)g(b)s(e)f(called)i(from)e(within)g(an)g (activ)m(e)j(C\(++\))d(section)i(with)e Fq(x)g FA(and)g Fq(y)h FA(as)f(v)m(ectors)191 4765 y(of)j Fq(adouble)p FA(s)f(and)g(the)h(other)g(parameters)g(passiv)m(e,)j(then)d(one)g (merely)f(has)h(to)g(c)m(hange)h(the)f(t)m(yp)s(e)191 4878 y(declarations)29 b(of)e(all)i(v)-5 b(ariables)28 b(that)g(dep)s(end)d(on)j Fq(x)f FA(from)g Fq(double)h FA(or)f Fq(\015oat)g FA(to)h Fq(adouble)p FA(.)40 b(Subsequen)m(tly)-8 b(,)191 4991 y(the)41 b(subprogram)f(m)m(ust)h(b)s(e)g(compiled)h(with) f(the)g(header)g(\014le)g Ft()c FA(included)j(as)191 5104 y(describ)s(ed)35 b(in)711 5104 y SDict begin H.S end 711 5104 a Black FA(Section)c(1.2)p Black 1145 5042 a SDict begin H.R end 1145 5042 a 1145 5104 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.2) cvn H.B /ANN pdfmark end 1145 5104 a FA(.)59 b(No)m(w)37 b(let)g(us)e(consider)i(the)f (situation)h(when)f Fq(eval)f FA(is)i(still)g(to)g(b)s(e)f(called)191 5217 y(with)27 b(in)m(teger)h(and)f(real)h(argumen)m(ts,)g(p)s(ossibly) f(from)g(a)g(program)g(written)g(in)g(F)-8 b(ortran77,)30 b(whic)m(h)d(do)s(es)191 5330 y(not)k(allo)m(w)g(o)m(v)m(erloading.)p Black Black eop end %%Page: 7 7 TeXDict begin 7 6 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.7) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(1.6)92 b(Ov)m(erloaded)31 b(Op)s(erators)f(and)g(F)-8 b(unctions)1877 b FA(7)p Black Black 191 518 3600 4 v 191 2122 4 1604 v Black Black Black Black 530 722 a Fq(void)30 b(eval\(int)g(n,)h(int)e(m,)361 b FA(//)32 b(n)m(um)m(b)s(er)d(of)h (indep)s(enden)m(ts)f(and)h(dep)s(enden)m(ts)899 835 y Fq(double)h(*x,)433 b FA(//)32 b(indep)s(enden)m(t)d(v)-5 b(ariable)31 b(v)m(ector)899 947 y Fq(double)g(*y)-8 b(,)441 b FA(//)32 b(dep)s(enden)m(t)d(v)-5 b(ariable)31 b(v)m(ector)899 1060 y Fq(int)f(*k,)578 b FA(//)32 b(in)m(teger)f (parameters)899 1173 y Fq(double)g(*z\))425 b FA(//)32 b(real)f(parameters)530 1286 y Fo(f)1148 b FA(//)32 b(b)s(eginning)d (of)i(function)f(b)s(o)s(dy)696 1399 y Fq(double)h(t)f(=)g(0;)514 b FA(//)32 b(lo)s(cal)f(v)-5 b(ariable)31 b(declaration)696 1512 y Fq(fo)m(r)g(\(int)f(i=0;)g(i)h Fn(<)f Fq(n;)h(i++\))69 b FA(//)32 b(b)s(egin)e(of)g(computation)816 1625 y Fq(t)g(+=)g (z[i]*x[i];)372 b FA(//)32 b(con)m(tin)m(ue)696 1738 y Fo(\001)15 b(\001)g(\001)h(\001)f(\001)g(\001)h(\001)f(\001)g(\001)h (\001)f(\001)g(\001)559 b FA(//)32 b(con)m(tin)m(ue)696 1851 y Fq(y[m-1])g(=)e(t/m;)478 b FA(//)32 b(end)d(of)i(computation)530 1964 y Fo(g)1148 b FA(//)32 b(end)d(of)i(function)p 3787 2122 V 191 2125 3600 4 v Black 809 2280 a(Figure)f(1:)1207 2280 y SDict begin H.S end 1207 2280 a 1207 2280 a SDict begin H.R end 1207 2280 a 1207 2280 a SDict begin [/View [/XYZ H.V]/Dest (figure.1) cvn /DEST pdfmark end 1207 2280 a FA(Generic)h(example)g(of)f(a)h(subprogram)e(to)i(b)s(e)f (activ)-5 b(ated)p Black Black 332 2572 a(T)d(o)33 b(automatically)i (compute)e(deriv)-5 b(ativ)m(es)34 b(of)f(the)g(dep)s(enden)m(t)e(v)-5 b(ariables)33 b Fq(y)g FA(with)f(resp)s(ect)g(to)i(the)191 2685 y(indep)s(enden)m(t)d(v)-5 b(ariables)32 b Fq(x)p FA(,)g(w)m(e)h(can)f(mak)m(e)g(the)g(b)s(o)s(dy)f(of)h(the)g(function)f (in)m(to)i(an)f(activ)m(e)i(section.)46 b(F)-8 b(or)191 2798 y(example,)31 b(w)m(e)g(ma)m(y)g(mo)s(dify)f(the)g(previous)g (program)g(segmen)m(t)i(as)e(in)2660 2815 y SDict begin H.S end 2660 2815 a Black -17 x FA(Figure)h(2)p Black 2993 2736 a SDict begin H.R end 2993 2736 a 2993 2798 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.2) cvn H.B /ANN pdfmark end 2993 2798 a FA(.)40 b(The)30 b(renaming)g(and)191 2911 y(doubling)h(up)f(of)h(the)g(original)i(indep)s(enden)m(t)d(and)g (dep)s(enden)m(t)h(v)-5 b(ariable)32 b(v)m(ectors)g(b)m(y)f(activ)m(e)j (coun)m(ter-)191 3024 y(parts)c(ma)m(y)g(seem)g(at)h(\014rst)e(a)h(bit) g(clumsy)-8 b(.)41 b(Ho)m(w)m(ev)m(er,)32 b(this)e(transformation)h (has)e(the)h(adv)-5 b(an)m(tage)32 b(that)191 3136 y(the)25 b(calling)i(sequence)e(and)f(the)h(computational)i(part,)f(i.e.,)h (where)e(the)g(function)f(is)h(really)h(ev)-5 b(aluated,)191 3249 y(of)37 b Fq(eval)g FA(remain)g(completely)i(unaltered.)61 b(If)36 b(the)i(temp)s(orary)e(v)-5 b(ariable)38 b Fq(t)f FA(had)g(remained)g(a)g Fq(double)p FA(,)191 3362 y(the)42 b(co)s(de)h(w)m(ould)f(not)g(compile,)47 b(b)s(ecause)42 b(of)g(a)h(t)m(yp)s(e)f(con\015ict)h(in)f(the)h(assignmen)m(t)g(follo)m (wing)h(the)191 3475 y(declaration.)e(More)31 b(detailed)h(example)f (co)s(des)f(are)h(listed)g(in)2377 3475 y SDict begin H.S end 2377 3475 a Black FA(Section)g(10)p Black 2786 3413 a SDict begin H.R end 2786 3413 a 2786 3475 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.10) cvn H.B /ANN pdfmark end 2786 3475 a FA(.)191 3660 y SDict begin H.S end 191 3660 a 191 3660 a SDict begin 13.6 H.A end 191 3660 a 191 3660 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.6) cvn /DEST pdfmark end 191 3660 a 149 x FB(1.6)112 b(Ov)m(erloaded)39 b(Op)s(erators)f(and)g(F)-9 b(unctions)191 4038 y FA(As)37 b(in)f(the)h(subprogram)e(discussed)h(ab)s(o)m(v)m(e,)k (the)d(actual)h(computational)h(statemen)m(ts)f(of)f(a)g(C\(++\))191 4151 y(co)s(de)45 b(need)g(not)g(b)s(e)f(altered)i(for)f(the)g(purp)s (oses)e(of)i(automatic)i(di\013eren)m(tiation.)86 b(All)45 b(arithmetic)191 4264 y(op)s(erations,)33 b(as)f(w)m(ell)h(as)f(the)g (comparison)g(and)f(assignmen)m(t)i(op)s(erators,)g(are)f(o)m(v)m (erloaded,)i(so)e(an)m(y)h(or)191 4377 y(all)39 b(of)f(their)g(op)s (erands)f(can)i(b)s(e)e(an)h(activ)m(e)j(v)-5 b(ariable.)64 b(An)38 b Fq(adouble)g(x)g FA(o)s(ccurring)g(in)g(a)h(comparison)191 4490 y(op)s(erator)44 b(is)g(e\013ectiv)m(ely)i(replaced)e(b)m(y)g(its) g(real)g(v)-5 b(alue)44 b Fq(x.value\(\))p FA(.)81 b(Most)45 b(functions)e(con)m(tained)i(in)191 4603 y(the)34 b(ANSI)f(C)g (standard)f(for)h(the)h(math)f(library)g(are)h(o)m(v)m(erloaded)i(for)d (activ)m(e)i(argumen)m(ts.)51 b(The)33 b(only)191 4716 y(exceptions)42 b(are)f(the)g(non-di\013eren)m(tiable)h(functions)e Fq(fmo)s(d)g FA(and)h Fq(mo)s(df)p FA(.)71 b(Otherwise,)44 b(legitimate)f(C)191 4829 y(co)s(de)d(in)g(activ)m(e)i(sections)f(can)g (remain)f(completely)h(unc)m(hanged,)i(pro)m(vided)c(the)h(direct)h (output)f(of)191 4941 y(activ)m(e)35 b(v)-5 b(ariables)34 b(is)f(a)m(v)m(oided.)49 b(The)33 b(rest)g(of)g(this)g(subsection)g(ma) m(y)g(b)s(e)g(skipp)s(ed)e(b)m(y)i(\014rst)f(time)i(users)191 5054 y(who)c(are)h(not)f(w)m(orried)h(ab)s(out)f(marginal)h(issues)f (of)g(di\013eren)m(tiabilit)m(y)j(and)d(e\016ciency)-8 b(.)332 5217 y(The)29 b(mo)s(dulus)f Fq(fabs\(x\))i FA(is)g(ev)m (erywhere)g(Lipsc)m(hitz)g(con)m(tin)m(uous)h(but)e(not)h(prop)s(erly)e (di\013eren)m(tiable)191 5330 y(at)38 b(the)f(origin,)i(whic)m(h)e (raises)g(the)g(question)g(of)h(ho)m(w)f(this)f(exception)i(ough)m(t)g (to)g(b)s(e)e(handled.)60 b(F)-8 b(or-)p Black Black eop end %%Page: 8 8 TeXDict begin 8 7 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.8) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(8)231 b Fu(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR)h (C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black Black 191 518 3600 4 v 191 3590 4 3072 v Black Black Black Black 461 722 a Fq(void)30 b(eval\()h(int)e(n,m,)631 b FA(//)32 b(n)m(um)m(b)s(er)d(of)h(indep)s(enden)m(ts)f(and)h(dep)s (enden)m(ts)861 835 y Fq(double)g(*p)m(x,)497 b FA(//)32 b(indep)s(enden)m(t)d(passiv)m(e)i(v)-5 b(ariable)31 b(v)m(ector)861 947 y Fq(double)f(*p)m(y)-8 b(,)505 b FA(//)32 b(dep)s(enden)m(t)d(passiv)m(e)i(v)-5 b(ariable)31 b(v)m(ector)861 1060 y Fq(int)e(*k,)686 b FA(//)32 b(in)m(teger)f (parameters)861 1173 y Fq(double)f(*z\))533 b FA(//)32 b(parameter)e(v)m(ector)461 1286 y Fo(f)1286 b FA(//)32 b(b)s(eginning)d(of)i(function)f(b)s(o)s(dy)566 1399 y Fq(sho)m(rt)h(int)f(tag)g(=)g(0;)552 b FA(//)32 b(tap)s(e)e(arra)m(y) h(and/or)f(tap)s(e)h(\014le)f(sp)s(eci\014er)566 1512 y Fq(trace)p 759 1512 28 4 v 33 w(on\(tag\);)696 b FA(//)32 b(start)f(tracing)566 1625 y Fq(adouble)g(*x,)g(*y;)648 b FA(//)32 b(declare)f(activ)m(e)i(v)-5 b(ariable)31 b(p)s(oin)m(ters)566 1738 y Fq(x)f(=)h(new)f(adouble[n];)457 b FA(//)32 b(declare)f(activ)m(e)i(indep)s(enden)m(t)c(v)-5 b(ariables)566 1851 y Fq(y)30 b(=)h(new)f(adouble[m];)432 b FA(//)32 b(declare)f(activ)m(e)i(dep)s(enden)m(t)c(v)-5 b(ariables)566 1964 y Fq(fo)m(r)31 b(\(int)g(i=0;)f(i)g Fn(<)h Fq(n;)f(i++\))717 2077 y(x[i])g Fp(\034)p Fx(=)g Fq(p)m(x[i];)528 b FA(//)32 b(select)g(indep)s(enden)m(t)d(v)-5 b(ariables)566 2189 y Fq(adouble)31 b(t)f(=)g(0;)669 b FA(//)32 b(lo)s(cal)f(v)-5 b(ariable)31 b(declaration)566 2302 y Fq(fo)m(r)g(\(int)g(i=0;)f(i)g Fn(<)h Fq(n;)f(i++\))268 b FA(//)32 b(b)s(egin)e(crunc)m(h)686 2415 y Fq(t)g(+=)g(z[i]*x[i];)571 b FA(//)32 b(con)m(tin)m(ue)f(crunc)m(h)566 2528 y Fo(\001)15 b(\001)g(\001)h(\001)f(\001)g(\001)i(\001)e(\001)g(\001)h(\001)f(\001)g (\001)757 b FA(//)32 b(con)m(tin)m(ue)f(crunc)m(h)566 2641 y Fo(\001)15 b(\001)g(\001)h(\001)f(\001)g(\001)i(\001)e(\001)g (\001)h(\001)f(\001)g(\001)757 b FA(//)32 b(con)m(tin)m(ue)f(crunc)m(h) 566 2754 y Fq(y[m-1])h(=)e(t/m;)677 b FA(//)32 b(end)d(crunc)m(h)h(as)h (b)s(efore)566 2867 y Fq(fo)m(r)g(\(int)g(j=0;)f(j)h Fn(<)g Fq(m;)f(j++\))686 2980 y(y[j])h Fp(\035)p Fx(=)f Fq(p)m(y[j];)554 b FA(//)32 b(select)g(dep)s(enden)m(t)d(v)-5 b(ariables)566 3093 y Fq(delete[])32 b(y;)853 b FA(//)32 b(delete)f(dep)s(enden)m(t)f(activ)m(e)i(v)-5 b(ariables)566 3206 y Fq(delete[])32 b(x;)853 b FA(//)32 b(delete)f(indep)s(enden)m(t) e(activ)m(e)k(v)-5 b(ariables)566 3319 y Fq(trace)p 759 3319 V 33 w(o\013\(\);)812 b FA(//)32 b(complete)f(tap)s(e)461 3431 y Fo(g)1286 b FA(//)32 b(end)d(of)i(function)p 3787 3590 4 3072 v 191 3593 3600 4 v Black 855 3748 a(Figure)g(2:)1253 3748 y SDict begin H.S end 1253 3748 a 1253 3748 a SDict begin H.R end 1253 3748 a 1253 3748 a SDict begin [/View [/XYZ H.V]/Dest (figure.2) cvn /DEST pdfmark end 1253 3748 a FA(Activ)-5 b(ated)32 b(v)m(ersion)f(of)f(the)h(co)s(de)g (listed)f(in)2795 3765 y SDict begin H.S end 2795 3765 a Black -17 x FA(Figure)g(1)p Black 3127 3686 a SDict begin H.R end 3127 3686 a 3127 3748 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.1) cvn H.B /ANN pdfmark end 3127 3748 a Black Black 191 4038 a FA(tunately)-8 b(,)44 b(one)d(can)g(easily)g (see)g(that)g Fq(fabs\(x\))g FA(and)f(all)h(its)g(comp)s(ositions)g (with)f(smo)s(oth)g(functions)191 4150 y(are)32 b(still)g (directionally)h(di\013eren)m(tiable.)45 b(These)31 b(directional)i (deriv)-5 b(ativ)m(es)32 b(of)g(arbitrary)f(order)g(can)g(b)s(e)191 4263 y(propagated)e(in)f(the)h(forw)m(ard)f(mo)s(de)g(without)g(an)m(y) h(am)m(biguit)m(y)-8 b(.)42 b(In)27 b(other)i(w)m(ords,)g(the)f(forw)m (ard)g(mo)s(de)191 4376 y(as)k(implemen)m(ted)g(in)f(ADOL-C)g(computes) h(Gateaux)h(deriv)-5 b(ativ)m(es)33 b(in)e(certain)i(directions,)f (whic)m(h)f(re-)191 4489 y(duce)37 b(to)i(F)-8 b(r)m(\023)-43 b(ec)m(het)40 b(deriv)-5 b(ativ)m(es)39 b(only)f(if)f(the)h(dep)s (endence)f(on)g(the)h(direction)g(is)g(linear.)63 b(Otherwise,)191 4602 y(the)28 b(directional)h(deriv)-5 b(ativ)m(es)29 b(are)g(merely)f(p)s(ositiv)m(ely)h(homogeneous)g(with)e(resp)s(ect)h (to)h(the)f(scaling)h(of)191 4715 y(the)34 b(directions.)53 b(F)-8 b(or)35 b(the)f(rev)m(erse)h(mo)s(de,)g(ADOL-C)f(sets)h(the)f (deriv)-5 b(ativ)m(e)36 b(of)e Fq(fabs\(x\))g FA(at)h(the)f(origin)191 4828 y(somewhat)d(arbitrarily)f(to)h(zero.)332 4991 y(W)-8 b(e)27 b(ha)m(v)m(e)h(de\014ned)d(binary)g(functions)h Fq(fmin)g FA(and)f Fq(fmax)h FA(for)g Fq(adouble)g FA(argumen)m(ts,)i (so)e(that)h(function)191 5104 y(and)j(deriv)-5 b(ativ)m(e)32 b(v)-5 b(alues)30 b(are)h(obtained)g(consisten)m(t)h(with)e(those)h(of) f Fq(fabs)g FA(according)h(to)g(the)g(iden)m(tities)582 5330 y(min)o(\()p Fs(a;)15 b(b)p FA(\))27 b(=)e([)p Fs(a)20 b FA(+)g Fs(b)g Fo(\000)g(j)p Fs(a)h Fo(\000)f Fs(b)p Fo(j)p FA(])p Fs(=)p FA(2)92 b(and)106 b(max\()p Fs(a;)15 b(b)p FA(\))26 b(=)f([)p Fs(a)c FA(+)f Fs(b)g FA(+)g Fo(j)p Fs(a)g Fo(\000)g Fs(b)p Fo(j)p FA(])p Fs(=)p FA(2)93 b Fs(:)p Black Black eop end %%Page: 9 9 TeXDict begin 9 8 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.9) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(1.6)92 b(Ov)m(erloaded)31 b(Op)s(erators)f(and)g(F)-8 b(unctions)1877 b FA(9)p Black 191 606 a(These)30 b(relations)h(cannot) f(hold)g(if)g(either)h Fs(a)f FA(or)g Fs(b)f FA(is)i(in\014nite,)f(in)f (whic)m(h)h(case)h Fq(fmin)f FA(or)g Fq(fmax)f FA(and)h(their)191 719 y(deriv)-5 b(ativ)m(es)31 b(ma)m(y)g(still)g(b)s(e)e(w)m(ell)i (de\014ned.)39 b(It)30 b(should)f(b)s(e)g(noted)h(that)h(the)f (directional)h(di\013eren)m(tiation)191 832 y(of)36 b Fq(fmin)g FA(and)f Fq(fmax)g FA(yields)h(at)h(ties)g Fs(a)d FA(=)h Fs(b)g FA(di\013eren)m(t)i(results)e(from)h(the)g (corresp)s(onding)f(assignmen)m(t)191 945 y(based)30 b(on)g(the)h(sign)f(of)h Fs(a)20 b Fo(\000)g Fs(b)p FA(.)41 b(F)-8 b(or)31 b(example,)g(the)g(statemen)m(t)p Black Black 1448 1157 a Fq(if)f(\(a)g Fs(<)g Fq(b\))h(c)g(=)f(a;)g(else)h(c)f (=)g(b;)191 1370 y FA(yields)36 b(for)f Fq(a)g FA(=)g Fq(b)h FA(and)f Fq(a)1090 1337 y Fm(0)1146 1370 y Fs(<)g Fq(b)1299 1337 y Fm(0)1358 1370 y FA(the)h(incorrect)g(directional)h (deriv)-5 b(ativ)m(e)37 b(v)-5 b(alue)36 b Fq(c)3061 1337 y Fm(0)3119 1370 y FA(=)f Fq(b)3272 1337 y Fm(0)3331 1370 y FA(rather)g(than)191 1482 y(the)j(correct)i Fq(c)707 1449 y Fm(0)769 1482 y FA(=)e Fq(a)922 1449 y Fm(0)945 1482 y FA(.)65 b(Therefore)38 b(this)g(form)g(of)g(conditional)i (assignmen)m(t)f(should)e(b)s(e)h(a)m(v)m(oided)i(b)m(y)191 1595 y(use)g(of)g(the)g(function)g Fq(fmin)p FA(\()p Fq(a)p Fs(;)15 b Fq(b)p FA(\).)70 b(There)39 b(are)i(also)g(v)m (ersions)f(of)g Fq(fmin)g FA(and)f Fq(fmax)h FA(for)g(t)m(w)m(o)h (passiv)m(e)191 1708 y(argumen)m(ts)28 b(and)f(mixed)g(passiv)m (e/activ)m(e)k(argumen)m(ts)d(are)g(handled)e(b)m(y)h(implicit)i(con)m (v)m(ersion.)41 b(On)27 b(the)191 1821 y(function)f(class)h(obtained)g (b)m(y)f(comp)s(osing)h(the)f(mo)s(dulus)f(with)h(real)h(analytic)h (functions,)f(the)g(concept)191 1934 y(of)g(directional)h(di\013eren)m (tiation)h(can)e(b)s(e)f(extended)h(to)g(the)g(propagation)h(of)f (unique)f(one-sided)g(T)-8 b(a)m(ylor)191 2047 y(expansions.)40 b(The)30 b(branc)m(hes)g(tak)m(en)i(b)m(y)e Fq(fabs,)g(fmin)p FA(,)g(and)g Fq(fmax)p FA(,)g(are)h(recorded)f(on)g(the)h(tap)s(e.)332 2210 y(The)j(functions)h Fq(sqrt)p FA(,)h Fq(p)s(o)m(w)p FA(,)g(and)e(some)i(in)m(v)m(erse)f(trigonometric)i(functions)d(ha)m(v) m(e)i(in\014nite)f(slop)s(es)191 2323 y(at)44 b(the)f(b)s(oundary)d(p)s (oin)m(ts)j(of)g(their)g(domains.)78 b(A)m(t)44 b(these)f(marginal)g(p) s(oin)m(ts)g(the)g(deriv)-5 b(ativ)m(es)44 b(are)191 2436 y(set)34 b(b)m(y)f(ADOL-C)g(to)h(either)g Fo(\006)p Fq(InfV)m(al)p FA(,)f(0)g(or)h Fq(NoNum)p FA(,)h(where)e Fq(InfV)m(al)g FA(and)f Fq(NoNum)j FA(are)e(user-de\014ned)191 2548 y(parameters,)48 b(see)865 2548 y SDict begin H.S end 865 2548 a Black FA(Section)31 b(2.2)p Black 1299 2486 a SDict begin H.R end 1299 2486 a 1299 2548 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.2) cvn H.B /ANN pdfmark end 1299 2548 a FA(.)82 b(On)44 b(IEEE)f(mac)m(hines)i Fq(InfV)m(al)e FA(can)i(b)s(e)e(set)i(to)g(the)f(sp)s(ecial)h(v)-5 b(alue)191 2661 y Fq(Inf)28 b FA(=)g(1)p Fs(:)p FA(0)p Fs(=)p FA(0)p Fs(:)p FA(0)j(and)c Fq(NoNum)j FA(to)f Fq(NaN)f FA(=)g(0)p Fs(:)p FA(0)p Fs(=)p FA(0)p Fs(:)p FA(0.)43 b(F)-8 b(or)29 b(example,)g(at)g Fq(a)f FA(=)g(0)h(the)f (\014rst)f(deriv)-5 b(ativ)m(e)30 b Fq(b)3666 2628 y Fm(0)3718 2661 y FA(of)191 2774 y Fq(b)g FA(=)g Fq(sqrt\(a\))h FA(is)f(set)h(to)1408 2997 y Fq(b)1455 2960 y Fm(0)1504 2997 y FA(=)1600 2811 y Fl(8)1600 2893 y(<)1600 3056 y(:)1722 2884 y Fq(InfV)m(al)153 b FA(if)50 b Fq(a)2246 2851 y Fm(0)2295 2884 y Fs(>)24 b FA(0)1722 2997 y(0)332 b(if)50 b Fq(a)2246 2964 y Fm(0)2295 2997 y FA(=)24 b(0)1722 3110 y Fq(NoNum)85 b FA(if)50 b Fq(a)2246 3077 y Fm(0)2295 3110 y Fs(<)24 b FA(0)2548 2997 y Fs(:)191 3261 y FA(In)31 b(other)h(w)m(ords,)g(w)m(e)g(consider)g Fq(a)g FA(and)f(consequen)m (tly)i Fq(b)f FA(as)g(a)g(constan)m(t)h(when)e Fq(a)3038 3228 y Fm(0)3093 3261 y FA(or)g(more)h(generally)191 3374 y(all)f(computed)f(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts)g(are) f(zero.)332 3537 y(The)37 b(general)h(p)s(o)m(w)m(er)g(function)f Fq(p)s(o)m(w)q FA(\()p Fq(x)p Fs(;)15 b Fq(y)q FA(\))27 b(=)e Fq(x)1997 3504 y Fk(y)2072 3537 y FA(is)37 b(computed)g(whenev)m (er)g(it)h(is)f(de\014ned)f(for)i(the)191 3650 y(corresp)s(onding)19 b Fq(double)i FA(argumen)m(ts.)38 b(If)20 b Fq(x)g FA(is)h(negativ)m (e,)k(ho)m(w)m(ev)m(er,)f(the)c(partial)i(deriv)-5 b(ativ)m(e)22 b(with)e(resp)s(ect)191 3763 y(to)29 b(an)f(in)m(tegral)h(exp)s(onen)m (t)f(is)g(set)h(to)g(zero.)40 b(The)28 b(deriv)-5 b(ativ)m(es)29 b(of)f(the)h(step)f(functions)f Fq(\015o)s(o)m(r)p FA(,)j Fq(ceil)p FA(,)e Fq(frexp)p FA(,)191 3875 y(and)37 b Fq(ldexp)g FA(are)h(set)g(to)g(zero)g(at)g(all)h(argumen)m(ts)e Fq(x)p FA(.)62 b(The)37 b(result)g(v)-5 b(alues)38 b(of)f(the)h(step)f (functions)g(are)191 3988 y(recorded)29 b(on)h(the)f(tap)s(e)h(and)f (can)h(later)h(b)s(e)d(c)m(hec)m(k)m(ed)k(to)e(recognize)i(whether)c(a) i(step)g(to)g(another)g(lev)m(el)191 4101 y(w)m(as)h(tak)m(en)g(during) e(a)i(forw)m(ard)f(sw)m(eep)h(at)g(di\013eren)m(t)f(argumen)m(ts)h (than)f(at)h(taping)g(time.)332 4264 y(Some)c(C)g(implemen)m(tations)h (supply)d(other)j(sp)s(ecial)f(functions,)h(in)e(particular)h(the)g (error)g(function)191 4377 y Fq(erf\(x\))p FA(.)59 b(F)-8 b(or)37 b(the)g(latter,)i(w)m(e)e(ha)m(v)m(e)g(included)f(an)g Fq(adouble)g FA(v)m(ersion)h(in)f Ft()p FA(,)e(whic)m(h)i(has)191 4490 y(b)s(een)31 b(commen)m(ted)j(out)e(for) g(systems)g(on)h(whic)m(h)f(the)g Fq(double)h FA(v)-5 b(alued)32 b(v)m(ersion)h(is)f(not)g(a)m(v)-5 b(ailable.)49 b(The)191 4603 y(incremen)m(t)27 b(and)f(decremen)m(t)h(op)s(erators)f Fq(++)p FA(,)h Fp(\000\000)g FA(\(pre\014x)e(and)h(p)s(ost\014x\))g (are)h(a)m(v)-5 b(ailable)28 b(for)f Fq(adouble)p FA(s.)191 4716 y(Am)m(biguous)e(statemen)m(ts)h(lik)m(e)g Fq(a)e(+=)g(a++;)i FA(m)m(ust)f(b)s(e)f(a)m(v)m(oided)i(b)s(ecause)f(the)g(compiler)g(ma)m (y)g(sequence)191 4829 y(the)i(ev)-5 b(aluation)28 b(of)f(the)g(o)m(v)m (erloaded)h(expression)e(di\013eren)m(tly)i(from)e(the)h(original)h(in) e(terms)g(of)h Fq(double)p FA(s.)332 4991 y(As)h(w)m(e)g(ha)m(v)m(e)h (indicated)g(ab)s(o)m(v)m(e,)h(all)f(subroutines)d(called)j(with)f (activ)m(e)i(argumen)m(ts)e(m)m(ust)g(b)s(e)f(mo)s(d-)191 5104 y(i\014ed)j(or)h(suitably)g(o)m(v)m(erloaded.)43 b(The)30 b(simplest)h(pro)s(cedure)f(is)g(to)i(declare)g(the)e(lo)s (cal)i(v)-5 b(ariables)32 b(of)f(the)191 5217 y(function)h(as)g(activ)m (e)j(so)d(that)h(their)f(in)m(ternal)h(calculations)h(are)e(also)h (recorded)f(on)g(the)h(tap)s(e.)46 b(Unfor-)191 5330 y(tunately)-8 b(,)30 b(this)d(approac)m(h)h(is)g(lik)m(ely)h(to)f(b)s (e)g(unnecessarily)f(ine\016cien)m(t)i(and)e(inaccurate)i(if)f(the)g (original)p Black Black eop end %%Page: 10 10 TeXDict begin 10 9 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.10) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(10)186 b Fu(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR) h(C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black 191 606 a FA(subroutine)28 b(ev)-5 b(aluates)30 b(a)g(sp)s(ecial)f (function)g(that)g(is)g(de\014ned)f(as)h(the)g(solution)h(of)f(a)g (particular)g(math-)191 719 y(ematical)36 b(problem.)49 b(The)33 b(most)h(imp)s(ortan)m(t)f(examples)h(are)g(implicit)h (functions,)f(quadratures,)f(and)191 832 y(solutions)40 b(of)g(ordinary)f(di\013eren)m(tial)i(equations.)69 b(Often)40 b(the)g(n)m(umerical)g(metho)s(ds)f(for)g(ev)-5 b(aluating)191 945 y(suc)m(h)27 b(sp)s(ecial)g(functions)g(are)g(elab)s(orate,)j(and)c (their)h(in)m(ternal)h(w)m(orkings)f(are)g(not)h(at)f(all)h(di\013eren) m(tiable)191 1058 y(in)23 b(the)h(data.)39 b(Rather)23 b(than)g(di\013eren)m(tiating)i(through)e(suc)m(h)g(an)g(adaptiv)m(e)i (pro)s(cedure,)f(one)g(can)f(obtain)191 1171 y(\014rst)g(and)g(higher)g (deriv)-5 b(ativ)m(es)26 b(directly)e(from)f(the)h(mathematical)i (de\014nition)e(of)g(the)f(sp)s(ecial)i(function.)191 1284 y(Curren)m(tly)i(this)g(direct)h(approac)m(h)g(has)f(b)s(een)g (implemen)m(ted)h(only)g(for)f(user-supplied)f(quadratures)g(as)191 1396 y(describ)s(ed)j(in)699 1396 y SDict begin H.S end 699 1396 a Black FA(Section)i(9.5)p Black 1134 1334 a SDict begin H.R end 1134 1334 a 1134 1396 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.5) cvn H.B /ANN pdfmark end 1134 1396 a FA(.)191 1559 y SDict begin H.S end 191 1559 a 191 1559 a SDict begin 13.6 H.A end 191 1559 a 191 1559 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.7) cvn /DEST pdfmark end 191 1559 a 166 x FB(1.7)112 b(Reusing)38 b(the)g(T)-9 b(ap)s(e)38 b(for)f(Arbitrary)g(Input)g(V)-9 b(alues)191 1954 y FA(In)25 b(some)h(situations)g(it)h(ma)m(y)f(b)s(e)f (desirable)h(to)g(calculate)i(the)e(v)-5 b(alue)26 b(and)g(deriv)-5 b(ativ)m(es)27 b(of)f(a)g(function)f(at)191 2067 y(arbitrary)i(argumen) m(ts)g(b)m(y)f(using)h(a)g(tap)s(e)g(of)g(the)g(function)g(ev)-5 b(aluation)28 b(at)g(one)f(argumen)m(t)g(and)f(reev)-5 b(al-)191 2180 y(uating)36 b(the)g(function)f(and)g(its)g(deriv)-5 b(ativ)m(es)37 b(using)e(the)h(giv)m(en)g(ADOL-C)g(routines.)56 b(This)34 b(approac)m(h)191 2293 y(can)42 b(signi\014can)m(tly)i (reduce)d(run)g(times,)46 b(and)41 b(it)i(also)g(allo)m(ws)g(to)g(p)s (ort)f(problem)f(functions,)k(in)d(the)191 2406 y(form)32 b(of)g(the)h(corresp)s(onding)e(tap)s(e)i(\014les,)g(in)m(to)g(a)g (computing)f(en)m(vironmen)m(t)h(that)g(do)s(es)f(not)g(supp)s(ort)191 2519 y(C++)c(but)g(do)s(es)h(supp)s(ort)e(C)h(or)h(F)-8 b(ortran.)41 b(Therefore,)30 b(the)f(routines)f(pro)m(vided)h(b)m(y)g (ADOL-C)g(for)g(the)191 2632 y(ev)-5 b(aluation)33 b(of)f(deriv)-5 b(ativ)m(es)33 b(can)f(b)s(e)f(used)g(to)h(at)h(argumen)m(ts)e Fs(x)h FA(other)g(than)f(the)h(p)s(oin)m(t)g(at)g(whic)m(h)g(the)191 2744 y(tap)s(e)38 b(w)m(as)h(generated,)j(pro)m(vided)c(there)g(are)h (no)f(user)g(de\014ned)f(quadratures)h(and)f(all)j(comparisons)191 2857 y(in)m(v)m(olving)31 b Fq(adouble)p FA(s)e(yield)g(the)g(same)h (result.)40 b(The)29 b(last)h(condition)g(implies)f(that)h(the)f(con)m (trol)i(\015o)m(w)e(is)191 2970 y(unaltered)j(b)m(y)g(the)h(c)m(hange)g (of)f(the)h(indep)s(enden)m(t)e(v)-5 b(ariable)33 b(v)-5 b(alues.)47 b(Therefore,)32 b(this)g(su\016cien)m(t)h(con-)191 3083 y(dition)f(is)h(tested)g(b)m(y)f(ADOL-C)g(and)g(if)g(it)h(is)f (not)g(met)h(the)f(ADOL-C)h(routine)f(called)h(for)f(deriv)-5 b(ativ)m(e)191 3196 y(calculations)40 b(indicates)f(this)f(con)m (tingency)i(through)e(its)g(return)f(v)-5 b(alue.)65 b(Curren)m(tly)-8 b(,)40 b(there)e(are)h(six)191 3309 y(return)29 b(v)-5 b(alues,)31 b(see)912 3309 y SDict begin H.S end 912 3309 a Black FA(T)-8 b(able)31 b(1)p Black 1208 3246 a SDict begin H.R end 1208 3246 a 1208 3309 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.1) cvn H.B /ANN pdfmark end 1208 3309 a FA(.)p Black Black Black 362 3445 3259 4 v 360 3590 4 146 v 412 3538 a Fy(+3)p 566 3590 V 98 w(The)d(function)g(is)g(lo)r(cally)f(analytic.)p 3618 3590 V 362 3593 3259 4 v 360 3947 4 354 v 412 3791 a(+2)p 566 3947 V 617 3691 a(The)33 b(function)h(is)e(lo)r(cally)g (analytic)g(but)i(the)f(sparsit)n(y)e(structure)i(\(compared)f(to)g (the)h(sit-)617 3791 y(uation)j(at)f(the)h(taping)f(p)r(oin)n(t\))h(ma) n(y)f(ha)n(v)n(e)f(c)n(hanged,)j(e.g.)60 b(while)36 b(at)f(taping)h (argumen)n(ts)617 3891 y Fj(fmax\(a,b\))29 b Fy(returned)e Fj(a)h Fy(w)n(e)f(get)g Fj(b)h Fy(at)f(the)h(argumen)n(t)f(curren)n (tly)f(used.)p 3618 3947 V 362 3950 3259 4 v 360 4295 4 345 v 412 4144 a(+1)p 566 4295 V 617 4044 a(A)n(t)41 b(least)e(one)h(of)g(the)g(functions)h Fj(fmin)p Fy(,)i Fj(fmax)d Fy(or)g Fj(fabs)g Fy(is)g(ev)-5 b(aluated)39 b(at)h(a)g(tie)g(or)f(zero,)617 4144 y(resp)r(ectiv)n(ely)-7 b(.)46 b(Hence,)32 b(the)f(function)h(to)e(b)r(e)i(di\013eren)n(tiated) f(is)f(Lipsc)n(hitz-con)n(tin)n(uous)g(but)617 4243 y(p)r(ossibly)e (non-di\013eren)n(tiable.)p 3618 4295 V 362 4298 3259 4 v 360 4543 4 245 v 476 4442 a(0)p 566 4543 V 617 4392 a(Some)j(arithmetic)g(comparison)f(in)n(v)n(olving)f Fj(adouble)p Fy(s)h(yields)h(a)g(tie.)48 b(Hence,)32 b(the)g(function)617 4491 y(to)c(b)r(e)g(di\013eren)n(tiated)f(ma)n(y)g (b)r(e)h(discon)n(tin)n(uous.)p 3618 4543 V 362 4547 3259 4 v 360 4792 4 245 v 449 4690 a(-1)p 566 4792 V 617 4640 a(An)g Fj(adouble)d Fy(comparison)h(yields)g(di\013eren)n(t)h (results)f(from)h(the)g(ev)-5 b(aluation)26 b(p)r(oin)n(t)i(at)e(whic)n (h)617 4740 y(the)i(tap)r(e)g(w)n(as)f(generated.)p 3618 4792 V 362 4795 3259 4 v 360 5040 4 245 v 449 4938 a(-2)p 566 5040 V 617 4888 a(The)e(argumen)n(t)e(of)h(a)f(user-de\014ned)h (quadrature)f(has)g(c)n(hanged)g(from)h(the)g(ev)-5 b(aluation)24 b(p)r(oin)n(t)617 4988 y(at)k(whic)n(h)f(the)h(tap)r(e)g(w)n(as)f (generated.)p 3618 5040 V 362 5043 3259 4 v Black 1257 5198 a FA(T)-8 b(able)31 b(1:)1618 5198 y SDict begin H.S end 1618 5198 a 1618 5198 a SDict begin H.R end 1618 5198 a 1618 5198 a SDict begin [/View [/XYZ H.V]/Dest (table.1) cvn /DEST pdfmark end 1618 5198 a FA(Description)g(of)g (return)e(v)-5 b(alues)p Black Black Black Black eop end %%Page: 11 11 TeXDict begin 11 10 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.11) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(1.8)92 b(Conditional)31 b(Assignmen)m(ts)2311 b FA(11)p Black Black 810 2113 a @beginspecial 0 @llx 0 @lly 594 @urx 402 @ury 2834 @rwi @setspecial %%BeginDocument: tap_point.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: tap_point.eps %%Creator: fig2dev Version 3.2 Patchlevel 0-beta3 %%CreationDate: Mon Sep 7 11:26:42 1998 %%For: eckstein@NBTF01 (Sigrid Eckstein) %%Orientation: Portrait %%BoundingBox: 0 0 594 402 %%Pages: 0 %%BeginSetup %%EndSetup %%Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -2.0 403.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /reencdict 12 dict def /ReEncode { reencdict begin /newcodesandnames exch def /newfontname exch def /basefontname exch def /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def basefontdict { exch dup /FID ne { dup /Encoding eq { exch dup length array copy newfont 3 1 roll put } { exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall newfont /FontName newfontname put newcodesandnames aload pop 128 1 255 { newfont /Encoding get exch /.notdef put } for newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat newfontname newfont definefont pop end } def /isovec [ 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde 8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis 8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron 8#220 /dotlessi 8#230 /oe 8#231 /OE 8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling 8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis 8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot 8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus 8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph 8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine 8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf 8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute 8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring 8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute 8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute 8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve 8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply 8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex 8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave 8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring 8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute 8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute 8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve 8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide 8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex 8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def /Times-Roman /Times-Roman-iso isovec ReEncode /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n -1000 7391 m -1000 -1000 l 10454 -1000 l 10454 7391 l cp clip 0.06299 0.06299 sc 7.500 slw % Ellipse n 2700 1622 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 3433 2580 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 3004 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 3004 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 8505 4804 45 45 0 360 DrawEllipse gs col-1 s gr % Ellipse n 5130 2779 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Ellipse n 7025 4544 45 45 0 360 DrawEllipse gs col-1 s gr % Ellipse n 7020 2612 16 16 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Polyline n 1125 2072 m 1125 677 l gs col-1 s gr % Polyline n 2700 1622 m 2700 497 l gs col-1 s gr % Polyline [60] 0 sd n 7020 2621 m 7020 4548 l gs col-1 s gr [] 0 sd % Polyline n 7020 2612 m 7020 857 l gs col-1 s gr % Polyline [15 45] 45 sd n 2400 3620 m 4605 1909 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2710 3615 m 5040 1759 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3055 3590 m 5145 1894 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3340 3590 m 5145 2134 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5265 2074 m 5965 1510 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3660 3575 m 5145 2404 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5295 2314 m 6290 1480 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4045 3575 m 6645 1450 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4425 3570 m 6920 1445 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 4700 3595 m 6990 1654 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5330 3680 m 6960 2284 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5645 3735 m 6960 2524 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 5940 3785 m 6825 2914 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 6270 3814 m 6630 3439 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7080 1624 m 7275 1444 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7080 1909 m 7620 1459 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7065 2254 m 7260 2089 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1875 3529 m 3390 2314 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1695 3394 m 3375 2014 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1495 3290 m 3375 1744 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1290 3154 m 3390 1474 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1060 3010 m 3270 1264 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 885 2884 m 2670 1459 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2760 1399 m 3075 1159 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 735 2749 m 2670 1189 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 2760 1159 m 2895 1069 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 585 2599 m 2655 964 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1162 1866 m 2475 869 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 270 2309 m 1102 1664 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1155 1641 m 2295 779 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Ellipse n 1125 2072 45 45 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col-1 s gr % Polyline [15 45] 45 sd n 155 2185 m 1080 1414 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd /Times-Roman-iso ff 210.00 scf sf 5095 1062 m gs 1 -1 sc (2) col-1 sh gr % Polyline [15 45] 45 sd n 1155 1364 m 2040 694 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8160 4039 m 7140 6079 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8375 4215 m 7380 6184 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8580 4335 m 7650 6259 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 8845 4435 m 7935 6319 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 9075 4534 m 8205 6364 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 9315 4579 m 8500 6365 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 180 1904 m 1065 1189 l 1095 1174 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 1155 1131 m 1365 979 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline n 8505 1744 m 8505 3004 l 8505 3049 l gs col-1 s gr % Polyline [15 45] 45 sd n 4995 3634 m 6975 1969 l gs col-1 s gr [] 0 sd % Polyline n 5130 2734 m 5130 1204 l gs col-1 s gr % Polyline n 3435 2542 m 3435 832 l gs col-1 s gr % Polyline [15 45] 45 sd n 5203 1846 m 5530 1610 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7790 3594 m 6650 5874 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 7966 3815 m 6886 5990 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 435 2449 m 1095 1924 l 1095 1909 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3460 1695 m 3655 1585 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3465 1965 m 3830 1730 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3465 2265 m 3995 1900 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline [15 45] 45 sd n 3440 1455 m 3485 1440 l gs col7 0.75 shd ef gr gs col-1 s gr [] 0 sd % Polyline n 2070 677 m 2068 678 l 2064 679 l 2057 682 l 2045 687 l 2029 693 l 2007 702 l 1980 713 l 1948 726 l 1911 741 l 1870 758 l 1825 776 l 1777 796 l 1726 817 l 1675 838 l 1622 860 l 1570 883 l 1518 905 l 1467 927 l 1418 948 l 1371 970 l 1325 990 l 1281 1010 l 1240 1030 l 1200 1049 l 1163 1067 l 1127 1086 l 1093 1103 l 1060 1121 l 1029 1138 l 999 1155 l 970 1172 l 942 1190 l 915 1207 l 888 1225 l 863 1243 l 835 1262 l 809 1281 l 782 1302 l 756 1322 l 730 1344 l 704 1366 l 677 1390 l 650 1415 l 623 1440 l 595 1468 l 566 1497 l 537 1527 l 506 1559 l 475 1593 l 442 1628 l 409 1664 l 376 1702 l 342 1741 l 307 1780 l 274 1819 l 241 1857 l 209 1894 l 179 1929 l 152 1962 l 127 1991 l 106 2017 l 87 2039 l 73 2056 l 62 2070 l 54 2079 l 49 2085 l 46 2089 l 45 2090 l gs col-1 s gr % Polyline n 2070 677 m 2072 678 l 2076 680 l 2084 683 l 2096 688 l 2114 696 l 2136 706 l 2164 718 l 2198 733 l 2236 750 l 2278 769 l 2323 789 l 2372 811 l 2421 834 l 2472 857 l 2523 880 l 2573 903 l 2623 926 l 2671 949 l 2717 971 l 2762 993 l 2805 1013 l 2845 1033 l 2884 1053 l 2921 1072 l 2957 1091 l 2991 1109 l 3024 1127 l 3055 1145 l 3086 1162 l 3116 1180 l 3145 1198 l 3174 1216 l 3203 1234 l 3231 1253 l 3259 1271 l 3288 1291 l 3316 1311 l 3345 1331 l 3374 1353 l 3404 1375 l 3435 1399 l 3467 1424 l 3500 1450 l 3534 1477 l 3569 1506 l 3606 1536 l 3645 1568 l 3684 1602 l 3725 1636 l 3767 1672 l 3809 1708 l 3852 1745 l 3894 1782 l 3936 1818 l 3976 1854 l 4014 1887 l 4049 1918 l 4080 1945 l 4107 1970 l 4131 1990 l 4149 2007 l 4163 2020 l 4174 2029 l 4180 2035 l 4183 2038 l 4185 2039 l gs col-1 s gr % Polyline [60] 0 sd n 1395 4322 m 1396 4321 l 1399 4318 l 1404 4314 l 1411 4306 l 1422 4296 l 1437 4282 l 1455 4265 l 1476 4244 l 1501 4221 l 1529 4195 l 1559 4166 l 1591 4136 l 1625 4104 l 1660 4071 l 1695 4038 l 1731 4005 l 1766 3972 l 1801 3940 l 1836 3908 l 1871 3876 l 1905 3846 l 1938 3816 l 1971 3786 l 2004 3758 l 2036 3729 l 2069 3701 l 2101 3673 l 2134 3644 l 2168 3616 l 2202 3587 l 2237 3558 l 2273 3528 l 2310 3498 l 2339 3473 l 2370 3449 l 2400 3424 l 2432 3398 l 2464 3372 l 2498 3345 l 2532 3317 l 2567 3289 l 2603 3261 l 2639 3232 l 2677 3202 l 2715 3172 l 2754 3141 l 2793 3109 l 2834 3078 l 2874 3046 l 2916 3013 l 2957 2981 l 2999 2948 l 3042 2915 l 3084 2882 l 3126 2849 l 3169 2816 l 3211 2783 l 3254 2751 l 3295 2718 l 3337 2686 l 3378 2655 l 3419 2624 l 3459 2593 l 3498 2563 l 3537 2533 l 3575 2504 l 3612 2476 l 3648 2449 l 3684 2422 l 3718 2396 l 3752 2370 l 3785 2345 l 3817 2321 l 3848 2298 l 3879 2275 l 3909 2253 l 3938 2232 l 3976 2203 l 4014 2175 l 4050 2149 l 4085 2123 l 4120 2098 l 4154 2073 l 4187 2049 l 4221 2025 l 4254 2002 l 4288 1978 l 4322 1955 l 4356 1931 l 4391 1907 l 4426 1883 l 4462 1858 l 4498 1834 l 4534 1809 l 4569 1785 l 4604 1762 l 4638 1740 l 4670 1718 l 4699 1699 l 4726 1681 l 4749 1666 l 4769 1653 l 4785 1642 l 4797 1634 l 4805 1628 l 4811 1625 l 4814 1623 l 4815 1622 l gs col-1 s gr [] 0 sd % Polyline n 4185 2035 m 4187 2034 l 4190 2033 l 4196 2031 l 4207 2027 l 4222 2022 l 4241 2015 l 4266 2007 l 4296 1996 l 4332 1984 l 4373 1970 l 4419 1954 l 4469 1937 l 4522 1919 l 4579 1899 l 4639 1879 l 4700 1859 l 4762 1838 l 4825 1817 l 4888 1796 l 4950 1776 l 5012 1756 l 5072 1737 l 5131 1718 l 5188 1700 l 5243 1683 l 5297 1667 l 5349 1651 l 5399 1637 l 5447 1623 l 5494 1610 l 5539 1597 l 5583 1586 l 5626 1575 l 5667 1564 l 5708 1555 l 5748 1546 l 5788 1537 l 5827 1529 l 5865 1521 l 5904 1514 l 5943 1507 l 5981 1501 l 6020 1494 l 6058 1489 l 6097 1483 l 6137 1478 l 6177 1473 l 6218 1468 l 6260 1464 l 6303 1460 l 6347 1456 l 6392 1453 l 6439 1450 l 6488 1446 l 6538 1444 l 6590 1441 l 6644 1439 l 6700 1436 l 6757 1434 l 6817 1432 l 6877 1431 l 6939 1429 l 7002 1428 l 7065 1426 l 7128 1425 l 7191 1424 l 7253 1423 l 7313 1423 l 7370 1422 l 7424 1421 l 7475 1421 l 7521 1421 l 7562 1420 l 7598 1420 l 7628 1420 l 7653 1420 l 7673 1420 l 7688 1420 l 7698 1420 l 7705 1420 l 7708 1420 l 7710 1420 l gs col-1 s gr % Polyline [60] 0 sd n 6525 3917 m 6480 5852 l gs col-1 s gr [] 0 sd % Polyline n 7715 1415 m 7714 1417 l 7712 1420 l 7708 1427 l 7702 1437 l 7693 1452 l 7681 1471 l 7666 1496 l 7648 1525 l 7628 1560 l 7604 1598 l 7579 1641 l 7551 1687 l 7522 1736 l 7492 1786 l 7461 1838 l 7429 1891 l 7398 1943 l 7368 1995 l 7337 2046 l 7308 2096 l 7280 2145 l 7253 2192 l 7227 2237 l 7202 2281 l 7178 2322 l 7156 2362 l 7134 2401 l 7114 2438 l 7095 2474 l 7076 2508 l 7059 2542 l 7042 2574 l 7025 2606 l 7010 2637 l 6994 2668 l 6979 2699 l 6965 2729 l 6948 2765 l 6932 2801 l 6915 2837 l 6900 2873 l 6884 2909 l 6868 2946 l 6853 2983 l 6838 3019 l 6823 3056 l 6808 3093 l 6794 3130 l 6780 3167 l 6766 3204 l 6752 3240 l 6739 3276 l 6726 3311 l 6714 3345 l 6702 3379 l 6690 3412 l 6680 3443 l 6669 3474 l 6659 3503 l 6650 3531 l 6641 3558 l 6633 3584 l 6625 3608 l 6617 3630 l 6610 3652 l 6604 3672 l 6598 3691 l 6592 3709 l 6587 3726 l 6574 3765 l 6564 3796 l 6555 3822 l 6548 3841 l 6542 3857 l 6537 3868 l 6533 3875 l 6530 3880 l 6528 3882 l 6527 3883 l gs col-1 s gr % Polyline n 2070 3659 m 2071 3659 l 2075 3659 l 2081 3658 l 2090 3658 l 2104 3657 l 2123 3656 l 2147 3655 l 2177 3653 l 2212 3652 l 2253 3650 l 2299 3647 l 2351 3645 l 2407 3642 l 2468 3639 l 2533 3636 l 2601 3633 l 2672 3630 l 2744 3626 l 2818 3623 l 2893 3620 l 2968 3617 l 3043 3614 l 3117 3611 l 3191 3608 l 3262 3605 l 3333 3603 l 3401 3601 l 3468 3599 l 3533 3597 l 3595 3595 l 3656 3594 l 3715 3593 l 3772 3592 l 3827 3591 l 3880 3591 l 3932 3591 l 3982 3591 l 4031 3591 l 4079 3592 l 4126 3592 l 4171 3593 l 4216 3594 l 4260 3596 l 4304 3598 l 4347 3600 l 4390 3602 l 4433 3604 l 4479 3607 l 4525 3610 l 4571 3613 l 4618 3617 l 4664 3621 l 4711 3625 l 4759 3630 l 4807 3635 l 4856 3641 l 4907 3647 l 4958 3653 l 5011 3660 l 5065 3668 l 5121 3676 l 5179 3684 l 5238 3693 l 5300 3702 l 5363 3712 l 5428 3723 l 5494 3733 l 5562 3745 l 5631 3756 l 5701 3768 l 5771 3780 l 5841 3793 l 5911 3805 l 5980 3817 l 6047 3829 l 6111 3841 l 6172 3852 l 6230 3862 l 6283 3872 l 6331 3881 l 6374 3889 l 6411 3896 l 6442 3901 l 6468 3906 l 6488 3910 l 6503 3913 l 6513 3915 l 6520 3916 l 6523 3917 l 6525 3917 l gs col-1 s gr % Polyline n 6479 5884 m 6481 5885 l 6486 5887 l 6494 5890 l 6507 5895 l 6526 5902 l 6550 5911 l 6580 5923 l 6615 5936 l 6656 5951 l 6701 5968 l 6750 5987 l 6801 6006 l 6854 6026 l 6908 6046 l 6962 6066 l 7015 6086 l 7067 6105 l 7118 6123 l 7167 6141 l 7214 6157 l 7259 6173 l 7301 6188 l 7342 6201 l 7380 6214 l 7417 6226 l 7452 6237 l 7485 6248 l 7517 6257 l 7548 6266 l 7578 6275 l 7607 6282 l 7636 6290 l 7664 6297 l 7698 6304 l 7731 6312 l 7764 6318 l 7797 6324 l 7831 6330 l 7865 6335 l 7900 6340 l 7936 6345 l 7973 6349 l 8012 6352 l 8053 6356 l 8095 6359 l 8138 6362 l 8183 6365 l 8229 6367 l 8274 6370 l 8319 6372 l 8362 6373 l 8402 6375 l 8438 6376 l 8470 6377 l 8496 6378 l 8517 6378 l 8532 6379 l 8541 6379 l 8547 6379 l 8549 6379 l gs col-1 s gr % Polyline n 7695 3434 m 7696 3436 l 7700 3440 l 7706 3447 l 7715 3459 l 7729 3475 l 7746 3495 l 7767 3521 l 7792 3551 l 7821 3585 l 7852 3621 l 7886 3661 l 7921 3701 l 7956 3743 l 7993 3784 l 8029 3825 l 8064 3865 l 8099 3903 l 8132 3939 l 8165 3974 l 8196 4007 l 8226 4037 l 8255 4066 l 8282 4092 l 8309 4117 l 8335 4140 l 8361 4162 l 8386 4183 l 8411 4202 l 8435 4220 l 8460 4237 l 8485 4254 l 8512 4271 l 8539 4287 l 8566 4302 l 8595 4317 l 8624 4331 l 8655 4345 l 8687 4359 l 8720 4372 l 8756 4385 l 8793 4398 l 8833 4410 l 8874 4423 l 8918 4436 l 8963 4449 l 9010 4462 l 9059 4474 l 9107 4486 l 9155 4498 l 9202 4510 l 9247 4520 l 9288 4530 l 9325 4538 l 9357 4545 l 9383 4551 l 9404 4555 l 9418 4558 l 9428 4560 l 9433 4562 l 9435 4562 l gs col-1 s gr % Polyline n 45 2089 m 46 2090 l 50 2094 l 55 2100 l 65 2109 l 78 2122 l 95 2140 l 116 2161 l 141 2187 l 169 2216 l 201 2248 l 236 2283 l 273 2320 l 311 2358 l 349 2397 l 389 2436 l 428 2475 l 466 2513 l 504 2549 l 540 2585 l 575 2619 l 610 2651 l 643 2682 l 674 2712 l 705 2740 l 735 2767 l 764 2793 l 793 2817 l 820 2841 l 848 2864 l 875 2887 l 903 2909 l 930 2930 l 958 2952 l 984 2972 l 1010 2992 l 1037 3011 l 1065 3031 l 1094 3051 l 1123 3072 l 1153 3092 l 1185 3113 l 1217 3135 l 1252 3157 l 1288 3180 l 1325 3204 l 1365 3229 l 1406 3254 l 1449 3280 l 1493 3308 l 1540 3335 l 1587 3364 l 1635 3393 l 1684 3422 l 1733 3451 l 1781 3479 l 1828 3507 l 1873 3533 l 1915 3557 l 1953 3580 l 1987 3600 l 2017 3617 l 2042 3632 l 2062 3643 l 2077 3652 l 2088 3658 l 2095 3662 l 2098 3664 l 2100 3665 l gs col-1 s gr % Polyline [60] 0 sd n 8505 3004 m 8505 4804 l gs col-1 s gr [] 0 sd % Polyline [105] 0 sd n 5130 2759 m 5131 2759 l 5134 2758 l 5139 2758 l 5147 2757 l 5159 2755 l 5174 2753 l 5194 2751 l 5219 2748 l 5248 2744 l 5283 2740 l 5322 2735 l 5365 2729 l 5414 2723 l 5466 2717 l 5522 2710 l 5582 2703 l 5644 2695 l 5709 2688 l 5775 2680 l 5843 2672 l 5912 2664 l 5981 2657 l 6050 2649 l 6118 2642 l 6185 2635 l 6251 2629 l 6316 2622 l 6378 2617 l 6439 2612 l 6498 2607 l 6555 2603 l 6609 2600 l 6662 2597 l 6712 2595 l 6761 2594 l 6808 2593 l 6853 2593 l 6896 2593 l 6938 2594 l 6980 2596 l 7020 2599 l 7064 2603 l 7108 2607 l 7152 2613 l 7196 2619 l 7241 2626 l 7287 2635 l 7334 2644 l 7382 2655 l 7431 2666 l 7481 2679 l 7533 2693 l 7586 2707 l 7641 2723 l 7696 2739 l 7753 2756 l 7810 2773 l 7867 2791 l 7924 2809 l 7981 2827 l 8037 2845 l 8091 2863 l 8143 2881 l 8193 2897 l 8240 2913 l 8284 2928 l 8324 2942 l 8361 2954 l 8392 2965 l 8420 2974 l 8443 2983 l 8462 2989 l 8477 2994 l 8488 2998 l 8496 3001 l 8501 3003 l 8504 3004 l 8505 3004 l gs col-1 s gr [] 0 sd % Polyline [60] 0 sd n 7705 3447 m 7705 1422 l gs col-1 s gr [] 0 sd % Polyline n 9442 4556 m 9441 4558 l 9440 4563 l 9437 4571 l 9433 4584 l 9427 4602 l 9419 4626 l 9409 4655 l 9397 4689 l 9384 4727 l 9370 4770 l 9355 4815 l 9339 4862 l 9322 4910 l 9305 4958 l 9288 5006 l 9272 5053 l 9256 5098 l 9240 5141 l 9225 5183 l 9210 5223 l 9196 5260 l 9182 5296 l 9169 5330 l 9156 5363 l 9144 5394 l 9131 5423 l 9119 5452 l 9107 5480 l 9094 5507 l 9082 5533 l 9070 5559 l 9056 5587 l 9042 5614 l 9028 5642 l 9013 5669 l 8998 5697 l 8982 5726 l 8965 5755 l 8948 5785 l 8929 5816 l 8909 5848 l 8888 5882 l 8866 5917 l 8842 5954 l 8818 5992 l 8793 6030 l 8767 6070 l 8740 6109 l 8714 6148 l 8689 6186 l 8665 6222 l 8642 6255 l 8622 6285 l 8605 6310 l 8591 6331 l 8580 6347 l 8572 6359 l 8567 6366 l 8564 6370 l 8563 6372 l gs col-1 s gr % Polyline n 7705 3448 m 7704 3450 l 7701 3453 l 7697 3460 l 7690 3471 l 7680 3486 l 7667 3505 l 7651 3530 l 7631 3559 l 7609 3592 l 7585 3629 l 7559 3670 l 7531 3712 l 7502 3756 l 7473 3802 l 7443 3847 l 7414 3892 l 7386 3937 l 7358 3981 l 7331 4023 l 7305 4065 l 7281 4105 l 7257 4143 l 7235 4180 l 7213 4216 l 7193 4251 l 7173 4285 l 7154 4319 l 7136 4352 l 7118 4384 l 7100 4416 l 7083 4448 l 7067 4481 l 7050 4513 l 7035 4543 l 7020 4573 l 7006 4603 l 6991 4634 l 6976 4666 l 6961 4698 l 6945 4732 l 6930 4767 l 6913 4804 l 6897 4842 l 6880 4881 l 6862 4923 l 6844 4966 l 6825 5011 l 6805 5058 l 6785 5107 l 6764 5158 l 6742 5211 l 6720 5265 l 6698 5319 l 6676 5375 l 6653 5430 l 6631 5485 l 6610 5539 l 6589 5591 l 6570 5639 l 6552 5685 l 6536 5726 l 6521 5762 l 6509 5794 l 6499 5820 l 6490 5841 l 6484 5856 l 6480 5868 l 6477 5875 l 6476 5878 l 6475 5880 l gs col-1 s gr /Times-Roman-iso ff 210.00 scf sf 675 722 m gs 1 -1 sc 30.0 rot (Taping point) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 2670 407 m gs 1 -1 sc (3) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 6975 767 m gs 1 -1 sc (0) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 8385 1652 m gs 1 -1 sc (-1) col-1 sh gr /Times-Roman-iso ff 210.00 scf sf 3400 742 m gs 1 -1 sc (1) col-1 sh gr $F2psEnd rs %%EndDocument @endspecial Black 1024 2309 a(Figure)31 b(3:)1422 2309 y SDict begin H.S end 1422 2309 a 1422 2309 a SDict begin H.R end 1422 2309 a 1422 2309 a SDict begin [/View [/XYZ H.V]/Dest (figure.3) cvn /DEST pdfmark end 1422 2309 a FA(Return)f(v)-5 b(alues)31 b(around)e(the)i(taping)f(p)s(oin)m (t)p Black Black 332 2610 a(In)449 2628 y SDict begin H.S end 449 2628 a Black -18 x FA(Figure)h(3)p Black 781 2548 a SDict begin H.R end 781 2548 a 781 2610 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.3) cvn H.B /ANN pdfmark end 781 2610 a 33 w FA(these)j(return)f(v)-5 b(alues)33 b(are)h(illustrated.)51 b(If)33 b(the)g(user)g(\014nds)f (the)h(return)f(v)-5 b(alue)34 b(of)g(an)191 2723 y(ADOL-C)29 b(routine)g(to)h(b)s(e)f(negativ)m(e)i(the)f(taping)f(pro)s(cess)g (simply)g(has)g(to)h(b)s(e)e(rep)s(eated)h(b)m(y)h(executing)191 2836 y(the)e(activ)m(e)h(section)g(again.)41 b(The)27 b(crux)g(of)h(the)f(problem)g(lies)h(in)g(the)f(fact)i(that)f(the)g (tap)s(e)f(records)h(only)191 2949 y(the)35 b(op)s(erations)f(that)i (are)f(executed)g(during)e(one)i(particular)g(ev)-5 b(aluation)36 b(of)f(the)f(function.)53 b(It)35 b(also)191 3062 y(has)j(no)g(w)m(a)m (y)h(to)g(ev)-5 b(aluate)39 b(in)m(tegrals)h(since)e(the)h(corresp)s (onding)e(quadratures)g(are)i(nev)m(er)f(recorded)191 3175 y(on)32 b(the)h(tap)s(e.)47 b(Therefore,)33 b(when)e(there)i(are)g (user-de\014ned)e(quadratures)g(the)i(retaping)g(is)f(necessary)191 3288 y(at)43 b(eac)m(h)h(new)e(p)s(oin)m(t.)77 b(If)42 b(there)g(are)h(only)g(branc)m(hes)f(conditioned)h(on)f Fq(adouble)h FA(comparisons)f(one)191 3400 y(ma)m(y)34 b(hop)s(e)f(that)h(re-taping)g(b)s(ecomes)g(unnecessary)f(when)f(the)i (p)s(oin)m(ts)f(settle)i(do)m(wn)e(in)g(some)h(small)191 3513 y(neigh)m(b)s(orho)s(o)s(d,)29 b(as)i(one)f(w)m(ould)h(exp)s(ect)f (for)h(example)g(in)f(an)g(iterativ)m(e)j(equation)e(solv)m(er.)191 3719 y SDict begin H.S end 191 3719 a 191 3719 a SDict begin 13.6 H.A end 191 3719 a 191 3719 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.8) cvn /DEST pdfmark end 191 3719 a 148 x FB(1.8)112 b(Conditional)39 b(Assignmen)m(ts)191 4101 y FA(It)25 b(app)s(ears)f(unsatisfactory)h(that,)i(for)d(example,) j(a)e(simple)g(table)h(lo)s(okup)e(of)h(some)g(ph)m(ysical)g(prop)s (ert)m(y)191 4214 y(forces)i(the)g(re-recording)f(of)h(a)g(p)s(ossibly) f(m)m(uc)m(h)g(larger)h(calculation.)42 b(Ho)m(w)m(ev)m(er,)29 b(the)e(basic)g(philosoph)m(y)191 4327 y(of)33 b(ADOL-C)h(is)f(to)h(o)m (v)m(erload)h(arithmetic,)h(rather)d(than)g(to)h(generate)h(a)f(new)e (program)h(with)g(jumps)191 4440 y(b)s(et)m(w)m(een)c(\\instructions",) g(whic)m(h)f(w)m(ould)f(destro)m(y)i(the)f(strictly)h(sequen)m(tial)g (tap)s(e)f(access)i(and)d(require)191 4553 y(the)h(infusion)f(of)h (substan)m(tial)h(compiler)f(tec)m(hnology)-8 b(.)43 b(Therefore,)28 b(w)m(e)g(in)m(tro)s(duce)g(the)g(t)m(w)m(o)h (constructs)191 4665 y(of)c(conditional)g(assignmen)m(ts)g(and)f(activ) m(e)j(in)m(tegers)f(as)e(partial)i(remedies)e(to)h(the)g(branc)m(hing)f (problem.)332 4828 y(In)43 b(man)m(y)g(cases,)48 b(the)c(functionalit)m (y)h(of)e(branc)m(hes)h(can)f(b)s(e)g(replaced)h(b)m(y)f(conditional)i (assign-)191 4941 y(men)m(ts.)40 b(F)-8 b(or)27 b(this)f(purp)s(ose,)g (w)m(e)h(pro)m(vide)g(a)g(sp)s(ecial)g(function)f(called)i Fq(condassign\(a,b,c,d\))p FA(.)41 b(Its)26 b(calling)191 5054 y(sequence)31 b(corresp)s(onds)e(to)i(the)f(syn)m(tax)h(of)g(the)f (conditional)i(assignmen)m(t)p Black Black 1590 5330 a Fq(a)e(=)g(\(b)g Fn(>)h Fq(0\))g(?)40 b(c)31 b(:)41 b(d;)p Black Black eop end %%Page: 12 12 TeXDict begin 12 11 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.12) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(12)186 b Fu(1)91 b(PREP)-8 b(ARING)31 b(A)f(SECTION)f(OF)i(C)e(OR) h(C++)g(CODE)g(F)m(OR)h(DIFFERENTIA)-8 b(TION)p Black 191 606 a FA(whic)m(h)34 b(C++)g(inherited)g(from)g(C.)g(Ho)m(w)m(ev)m (er,)k(here)c(the)h(argumen)m(ts)g(are)g(restricted)g(to)g(b)s(e)f (activ)m(e)j(or)191 719 y(passiv)m(e)32 b(scalar)h(argumen)m(ts,)f(and) g(all)g(expression)f(argumen)m(ts)h(are)g(ev)-5 b(aluated)33 b(b)s(efore)f(the)f(test)i(on)f Fq(b)p FA(,)191 832 y(whic)m(h)e(is)g (di\013eren)m(t)h(from)f(the)h(usual)f(conditional)h(assignmen)m(t)h (or)e(the)g(co)s(de)h(segmen)m(t.)332 995 y(Supp)s(ose)e(the)h (original)i(program)e(con)m(tains)h(the)g(co)s(de)g(segmen)m(t)p Black Black 1440 1237 a Fq(if)f(\(b)h Fn(>)f Fq(0\))i(a)e(=)g(c;)g (else)h(a)f(=)g(d;)191 1479 y FA(Here,)45 b(only)d(one)g(of)g(the)g (expressions)g(\(or,)j(more)d(generally)-8 b(,)46 b(program)c(blo)s(c)m (ks\))h Fq(c)f FA(and)f Fq(d)h FA(is)f(ev)-5 b(al-)191 1592 y(uated,)45 b(whic)m(h)d(exactly)h(constitutes)g(the)f(problem)g (for)f(ADOL-C.)i(T)-8 b(o)42 b(obtain)g(the)g(correct)h(v)-5 b(alue)191 1705 y Fq(a)38 b FA(with)h(ADOL-C,)g(one)g(ma)m(y)g(\014rst) f(execute)i(b)s(oth)e(branc)m(hes)g(and)g(then)h(pic)m(k)g(either)g Fq(c)g FA(or)g Fq(d)f FA(using)191 1818 y Fq(condassign\(a,b,c,d\))p FA(.)51 b(T)-8 b(o)34 b(main)m(tain)g(consistency)h(with)e(the)g (original)i(co)s(de,)f(one)g(has)f(to)h(mak)m(e)g(sure)191 1931 y(that)k(the)g(t)m(w)m(o)h(branc)m(hes)f(do)f(not)h(ha)m(v)m(e)h (an)m(y)f(side)g(e\013ects)h(that)f(can)g(in)m(terfere)g(with)g(eac)m (h)h(other)f(or)191 2044 y(ma)m(y)g(b)s(e)f(imp)s(ortan)m(t)g(for)g (subsequen)m(t)g(calculations.)64 b(F)-8 b(urthermore)37 b(the)h(test)g(parameter)g Fq(b)f FA(has)g(to)191 2157 y(b)s(e)32 b(an)h Fq(adouble)g FA(or)f(an)h Fq(adouble)g FA(expression.)47 b(Otherwise)33 b(the)g(test)g(condition)h Fq(b)f FA(is)f(recorded)h(on)g(the)191 2270 y(tap)s(e)k(as)g(a)h Fr(c)-5 b(onstant)39 b FA(with)d(its)i(run)d(time)j(v)-5 b(alue.)61 b(Th)m(us)36 b(the)i(original)g(dep)s(endency)d(of)j Fq(b)f FA(on)f(activ)m(e)191 2383 y(v)-5 b(ariables)33 b(gets)h(lost,)h(for)d(instance)h(if)g Fq(b)g FA(is)g(a)g(comparison)g (expression,)g(see)2894 2383 y SDict begin H.S end 2894 2383 a Black FA(Section)f(1.6)p Black 3329 2320 a SDict begin H.R end 3329 2320 a 3329 2383 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.6) cvn H.B /ANN pdfmark end 3329 2383 a FA(.)47 b(If)33 b(there)g(is)191 2495 y(no)g Fq(else)h FA(part)f(in)f(a)i(conditional)g(assignmen)m(t,)h(one)f(ma)m(y)g(call)g (the)f(three)h(argumen)m(t)g(v)m(ersion)f Fq(condas-)191 2608 y(sign\(a,b,c\))p FA(,)27 b(whic)m(h)c(is)i(logically)h(equiv)-5 b(alen)m(t)26 b(to)f Fq(condassign\(a,b,c,a\))g FA(in)f(that)g(nothing) g(happ)s(ens)f(if)h Fq(b)g FA(is)191 2721 y(non-p)s(ositiv)m(e.)39 b(The)24 b(header)g(\014le)g Ft()19 b FA(con)m(tains)25 b(also)g(corresp)s(onding)e(de\014nitions)h(of)191 2834 y Fq(condassign\(a,b,c,d\))32 b FA(and)d Fq(condassign\(a,b,c\))i FA(for)f(passiv)m(e)h Fq(double)f FA(argumen)m(ts)g(so)g(that)h(the)f (mo)s(di\014ed)191 2947 y(co)s(de)h(without)f(an)m(y)h(di\013eren)m (tiation)h(can)e(b)s(e)g(tested)h(for)f(correctness.)332 3110 y(A)23 b(generalization)j(of)d(this)h(concept)g(for)f(more)g(than) g(t)m(w)m(o)h(branc)m(hes,)h(e.g.,)h(akin)d(to)h(a)g Ft(switch)d FA(state-)191 3223 y(men)m(t)g(or)f(a)h(cascade)g(of)28 b Ft(if...else)45 b(if)p FA(,)22 b(ma)m(y)f(b)s(e)e(done)i(b)m(y)f (enabling)h Fq(ADOLC)p 2901 3223 28 4 v 33 w(AD)m(V)-8 b(ANCED)p 3414 3223 V 32 w(BRANCHING)191 3336 y FA(and)30 b(p)s(erforming)f(selection)j(on)e(elemen)m(ts)i(of)f(an)f Ft(advector)e FA(with)i(activ)m(e)j(indices.)191 3488 y SDict begin H.S end 191 3488 a 191 3488 a SDict begin 13.6 H.A end 191 3488 a 191 3488 a SDict begin [/View [/XYZ H.V]/Dest (subsection.1.9) cvn /DEST pdfmark end 191 3488 a 149 x FB(1.9)112 b(Step-b)m(y-Step)39 b(Mo)s(di\014cation)g(Pro)s (cedure)191 3860 y FA(T)-8 b(o)40 b(prepare)e(a)i(section)g(of)g(giv)m (en)g(C)f(or)g(C++)g(co)s(de)g(for)g(automatic)i(di\013eren)m(tiation)g (as)f(describ)s(ed)191 3972 y(ab)s(o)m(v)m(e,)32 b(one)e(applies)h(the) g(follo)m(wing)g(step-b)m(y-step)g(pro)s(cedure.)191 4079 y SDict begin H.S end 191 4079 a 191 4079 a SDict begin 13.6 H.A end 191 4079 a 191 4079 a SDict begin [/View [/XYZ H.V]/Dest (Item.1) cvn /DEST pdfmark end 191 4079 a Black 302 4215 a FA(1.)p Black 46 w(Use)f(the)g(statemen)m(ts)i Fq(trace)p 1399 4215 28 4 v 33 w(on\(tag\))e FA(or)g Fq(trace)p 2045 4215 V 33 w(on\(tag,k)m(eep\))j FA(and)c Fq(trace)p 2952 4215 V 33 w(o\013\(\))i FA(or)f Fq(trace)p 3483 4215 V 33 w(o\013\(\014le\))418 4328 y FA(to)h(mark)f(the)h(b)s (eginning)f(and)f(end)h(of)h(the)f(activ)m(e)j(section.)191 4386 y SDict begin H.S end 191 4386 a 191 4386 a SDict begin 13.6 H.A end 191 4386 a 191 4386 a SDict begin [/View [/XYZ H.V]/Dest (Item.2) cvn /DEST pdfmark end 191 4386 a Black 302 4522 a FA(2.)p Black 46 w(Select)26 b(the)e(set)h(of)f(activ)m(e)j(v)-5 b(ariables,)26 b(and)e(c)m(hange)h (their)f(t)m(yp)s(e)h(from)f Fq(double)g FA(or)h Fq(\015oat)e FA(to)i Fq(adouble)p FA(.)191 4580 y SDict begin H.S end 191 4580 a 191 4580 a SDict begin 13.6 H.A end 191 4580 a 191 4580 a SDict begin [/View [/XYZ H.V]/Dest (Item.3) cvn /DEST pdfmark end 191 4580 a Black 302 4716 a FA(3.)p Black 46 w(Select)j(a)g(sequence)f(of)g(indep)s(enden)m(t)e(v)-5 b(ariables,)29 b(and)d(initialize)j(them)e(with)f Fp(\034)p Fx(=)h FA(assignmen)m(ts)418 4829 y(from)j(passiv)m(e)h(v)-5 b(ariables)31 b(or)g(v)m(ectors.)191 4887 y SDict begin H.S end 191 4887 a 191 4887 a SDict begin 13.6 H.A end 191 4887 a 191 4887 a SDict begin [/View [/XYZ H.V]/Dest (Item.4) cvn /DEST pdfmark end 191 4887 a Black 302 5023 a FA(4.)p Black 46 w(Select)37 b(a)f(sequence)f(of)h(dep)s(enden)m (t)e(v)-5 b(ariables)36 b(among)g(the)g(activ)m(e)h(v)-5 b(ariables,)38 b(and)d(pass)g(their)418 5136 y(\014nal)30 b(v)-5 b(alues)31 b(to)g(passiv)m(e)g(v)-5 b(ariable)31 b(or)g(v)m(ectors)h(thereof)e(b)m(y)h Fp(\035)p Fx(=)f FA(assignmen)m(ts.)191 5194 y SDict begin H.S end 191 5194 a 191 5194 a SDict begin 13.6 H.A end 191 5194 a 191 5194 a SDict begin [/View [/XYZ H.V]/Dest (Item.5) cvn /DEST pdfmark end 191 5194 a Black 302 5330 a FA(5.)p Black 46 w(Compile)h(the)f(co)s(des)h(after)g(including)f(the)g(header) g(\014le)h Ft()p FA(.)p Black Black eop end %%Page: 13 13 TeXDict begin 13 12 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.13) cvn /DEST pdfmark end 183 199 a Black 3700 307 a FA(13)p Black 191 606 a(T)m(ypically)-8 b(,)32 b(the)d(\014rst)g(compilation)j(will)e(detect)h(sev)m(eral)g(t)m(yp)s (e)e(con\015icts)i({)f(usually)f(attempts)i(to)f(con-)191 719 y(v)m(ert)j(from)e(activ)m(e)k(to)d(passiv)m(e)h(v)-5 b(ariables)33 b(or)f(to)h(p)s(erform)d(standard)i(I/O)g(of)g(activ)m(e) i(v)-5 b(ariables.)47 b(Since)191 832 y(all)41 b(standard)e(C)h (programs)f(can)i(b)s(e)e(activ)-5 b(ated)42 b(b)m(y)e(a)g(mec)m (hanical)i(application)f(of)g(the)f(pro)s(cedure)191 945 y(ab)s(o)m(v)m(e,)32 b(the)e(follo)m(wing)i(section)g(is)e(of)h (imp)s(ortance)f(only)h(to)g(adv)-5 b(anced)30 b(users.)191 1095 y SDict begin H.S end 191 1095 a 191 1095 a SDict begin 13.6 H.A end 191 1095 a 191 1095 a SDict begin [/View [/XYZ H.V]/Dest (section.2) cvn /DEST pdfmark end 191 1095 a 181 x FE(2)135 b(Num)l(b)t(ering)45 b(the)g(T)-11 b(ap)t(es)44 b(and)h(Con)l(trolling)i(the)e(Bu\013er)191 1529 y FA(The)d(trace)i(generated)g(b)m(y)f(the)g(execution)h(of)f(an)f (activ)m(e)j(section)f(ma)m(y)g(sta)m(y)g(within)e(a)h(triplet)h(of)191 1642 y(in)m(ternal)30 b(arra)m(ys)g(or)g(it)g(ma)m(y)h(b)s(e)e(written) g(out)h(to)h(three)e(corresp)s(onding)g(\014les.)41 b(W)-8 b(e)30 b(will)g(refer)g(to)g(these)191 1755 y(triplets)j(as)f(the)h (tap)s(e)f(arra)m(y)h(or)f(tap)s(e)g(\014le,)h(in)f(general)h(tap)s(e,) g(whic)m(h)f(ma)m(y)h(subsequen)m(tly)f(b)s(e)g(used)f(to)191 1868 y(ev)-5 b(aluate)35 b(the)f(underlying)f(function)g(and)g(its)h (deriv)-5 b(ativ)m(es)35 b(at)f(the)g(original)h(p)s(oin)m(t)e(or)h(at) g(alternativ)m(e)191 1981 y(argumen)m(ts.)41 b(If)29 b(the)h(activ)m(e)j(section)e(in)m(v)m(olv)m(es)h(user-de\014ned)c (quadratures)h(it)h(m)m(ust)g(b)s(e)g(executed)g(and)191 2094 y(re-tap)s(ed)c(at)h(eac)m(h)g(new)f(argumen)m(t.)40 b(Similarly)-8 b(,)28 b(if)e(conditions)g(on)g Fq(adouble)h FA(v)-5 b(alues)26 b(lead)h(to)g(a)f(di\013eren)m(t)191 2207 y(program)j(branc)m(h)f(b)s(eing)h(tak)m(en)h(at)g(a)f(new)g (argumen)m(t)g(the)g(ev)-5 b(aluation)31 b(pro)s(cess)e(also)h(needs)e (to)i(b)s(e)e(re-)191 2320 y(tap)s(ed)h(at)h(the)g(new)e(p)s(oin)m(t.) 41 b(Otherwise,)29 b(direct)h(ev)-5 b(aluation)31 b(from)e(the)g(tap)s (e)h(b)m(y)f(the)g(routine)h Fq(function)191 2433 y FA(\()226 2433 y SDict begin H.S end 226 2433 a Black FA(Section)h(3.1)p Black 661 2370 a SDict begin H.R end 661 2370 a 661 2433 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end 661 2433 a FA(\))25 b(is)g(lik)m(ely)h(to) g(b)s(e)f(faster.)39 b(The)24 b(use)h(of)g(quadratures)f(and)h(the)g (results)g(of)g(all)h(comparisons)191 2545 y(on)31 b Fq(adouble)p FA(s)h(are)g(recorded)f(on)h(the)f(tap)s(e)h(so)g(that)g Fq(function)g FA(and)e(other)i(forw)m(ard)f(routines)h(stop)f(and)191 2658 y(return)39 b(appropriate)h(\015ags)g(if)h(their)f(use)g(without)g (prior)f(re-taping)i(is)f(unsafe.)70 b(T)-8 b(o)40 b(a)m(v)m(oid)i(an)m (y)e(re-)191 2771 y(taping)27 b(certain)h(t)m(yp)s(es)f(of)f(branc)m (hes)h(can)g(b)s(e)f(recorded)h(on)f(the)h(tap)s(e)g(through)f(the)h (use)f(of)h(conditional)191 2884 y(assignmen)m(ts)k(describ)s(ed)e(b)s (efore)h(in)1476 2884 y SDict begin H.S end 1476 2884 a Black FA(Section)h(1.8)p Black 1911 2822 a SDict begin H.R end 1911 2822 a 1911 2884 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.8) cvn H.B /ANN pdfmark end 1911 2884 a FA(.)332 3047 y(Sev)m(eral)22 b(tap)s(es)g(ma)m(y)g(b)s(e)f(generated)h (and)f(k)m(ept)h(sim)m(ultaneously)-8 b(.)39 b(A)21 b(tap)s(e)h(arra)m (y)g(is)f(used)g(as)g(a)h(triplet)191 3160 y(of)30 b(bu\013ers)e(or)h (a)h(tap)s(e)g(\014le)f(is)h(generated)g(if)g(the)f(length)h(of)g(an)m (y)f(of)h(the)g(bu\013ers)e(exceeds)i(the)g(maximal)191 3273 y(arra)m(y)h(lengths)g(of)g Fq(OBUFSIZE)p FA(,)e Fq(VBUFSIZE)f FA(or)j Fq(LBUFSIZE)p FA(.)f(These)g(parameters)h(are)g (de\014ned)e(in)i(the)191 3386 y(header)e(\014le)h Ft ()24 b FA(and)29 b(ma)m(y)h(b)s(e)f(adjusted)f(b)m(y) i(the)f(user)g(in)g(the)g(header)h(\014le)f(b)s(efore)191 3499 y(compiling)34 b(the)g(ADOL-C)g(library)-8 b(,)34 b(or)g(on)g(run)m(time)f(using)g(a)h(\014le)g(named)f Ft(.adolcrc)p FA(.)48 b(Lines)34 b(in)f(this)191 3611 y(\014le)d(m)m(ust)h(ha)m(v)m(e)g(the)g(form)p Black Black 191 3825 a Ft("VARIABLE")45 b(=)i("VALUE")191 4038 y FA(where)41 b(the)h(quotation)g(marks)g(are)g(mandatory)-8 b(.)74 b(The)41 b(\014lesystem)h(folder,)i(where)d(the)h(tap)s(es)g (\014les)191 4151 y(ma)m(y)f(b)s(e)e(written)h(to)h(disk,)i(can)d(b)s (e)g(c)m(hanged)g(b)m(y)g(c)m(hanging)i(the)e(de\014nition)g(of)g Fq(T)-8 b(APE)p 3331 4151 28 4 v 33 w(DIR)40 b FA(in)g(the)191 4264 y(header)34 b(\014le)h Ft()30 b FA(b)s(efore)k(compiling)h(the)g(ADOL-C)g(library)-8 b(,)35 b(or)g(on)f(run)m(time)h(b)m(y)191 4377 y(de\014ning)23 b Fq(T)-8 b(APE)p 760 4377 V 33 w(DIR)24 b FA(in)f(the)h Ft(.adolcrc)e FA(\014le.)39 b(By)24 b(default)g(this)g(is)g(de\014ned)f (to)i(b)s(e)e(the)h(presen)m(t)g(w)m(orking)191 4490 y(directory)31 b(\()p Ft(.)p FA(\).)332 4653 y(F)-8 b(or)45 b(simple)g(usage,)k Fq(trace)p 1291 4653 V 33 w(on)c FA(ma)m(y)g(b)s(e)f(called)i(with)f(only)f(the)h(tap)s(e)g Fq(tag)g FA(as)f(argumen)m(t,)49 b(and)191 4765 y Fq(trace)p 384 4765 V 33 w(o\013)33 b FA(ma)m(y)g(b)s(e)e(called)j(without)e (argumen)m(t.)47 b(The)31 b(optional)j(in)m(teger)f(argumen)m(t)g Fq(k)m(eep)h FA(of)e Fq(trace)p 3670 4765 V 33 w(on)191 4878 y FA(determines)i(whether)g(the)h(n)m(umerical)g(v)-5 b(alues)35 b(of)f(all)i(activ)m(e)h(v)-5 b(ariables)35 b(are)f(recorded)h(in)f(a)h(bu\013ered)191 4991 y(temp)s(orary)j(arra)m (y)h(or)f(\014le)h(called)g(the)g(ta)m(ylor)h(stac)m(k.)66 b(This)38 b(option)g(tak)m(es)i(e\013ect)g(if)f Fq(k)m(eep)h FA(=)e(1)g(and)191 5104 y(prepares)33 b(the)g(scene)h(for)f(an)g (immediately)i(follo)m(wing)g(gradien)m(t)f(ev)-5 b(aluation)35 b(b)m(y)e(a)h(call)h(to)f(a)g(routine)191 5217 y(implemen)m(ting)f(the) g(rev)m(erse)g(mo)s(de)g(as)g(describ)s(ed)e(in)h(the)2259 5217 y SDict begin H.S end 2259 5217 a Black FA(Section)f(4)p Black 2623 5155 a SDict begin H.R end 2623 5155 a 2623 5217 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 2623 5217 a 32 w FA(and)2834 5217 y SDict begin H.S end 2834 5217 a Black FA(Section)h(5)p Black 3198 5155 a SDict begin H.R end 3198 5155 a 3198 5217 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 3198 5217 a FA(.)47 b(A)33 b(\014le)g(is)g(used)191 5330 y(instead)k(of)f(an)h(arra)m(y)g(if)f (the)h(size)g(exceeds)h(the)e(maximal)i(arra)m(y)f(length)f(of)h Fq(TBUFSIZE)e FA(de\014ned)g(in)p Black Black eop end %%Page: 14 14 TeXDict begin 14 13 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.14) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(14)637 b Fu(2)92 b(NUMBERING)31 b(THE)f(T)-8 b(APES)30 b(AND)h(CONTR)m(OLLING)f(THE)g(BUFFER)p Black 191 606 a Ft()39 b FA(and)k(ma)m(y)h(b)s(e)f(adjusted)g(in)g (the)h(same)g(w)m(a)m(y)h(lik)m(e)g(the)e(other)h(bu\013er)f(sizes)191 719 y(men)m(tioned)38 b(ab)s(o)m(v)m(e.)63 b(Alternativ)m(ely)-8 b(,)42 b(gradien)m(ts)d(ma)m(y)f(b)s(e)f(ev)-5 b(aluated)38 b(b)m(y)g(a)g(call)g(to)g Fq(gradient)p FA(,)i(whic)m(h)191 832 y(includes)28 b(a)g(preparatory)g(forw)m(ard)g(sw)m(eep)g(for)g (the)g(creation)i(of)e(the)g(temp)s(orary)g(\014le.)40 b(If)28 b(omitted,)i(the)191 945 y(argumen)m(t)h Fq(k)m(eep)h FA(defaults)e(to)h(0,)g(so)g(that)g(no)f(temp)s(orary)g(ta)m(ylor)i (stac)m(k)g(\014le)e(is)h(generated.)332 1108 y(By)43 b(setting)g(the)g(optional)g(in)m(teger)h(argumen)m(t)e Fq(\014le)g FA(of)h Fq(trace)p 2524 1108 28 4 v 33 w(o\013)g FA(to)g(1,)j(the)c(user)g(ma)m(y)g(force)h(a)191 1220 y(n)m(um)m(b)s(ered)33 b(tap)s(e)i(\014le)g(to)h(b)s(e)e(written)h(ev)m (en)g(if)g(the)g(tap)s(e)g(arra)m(y)h(\(bu\013er\))e(do)s(es)h(not)g(o) m(v)m(er\015o)m(w.)55 b(If)35 b(the)191 1333 y(argumen)m(t)e Fq(\014le)f FA(is)g(omitted,)i(it)f(defaults)f(to)h(0,)g(so)f(that)h (the)g(tap)s(e)f(arra)m(y)h(is)f(written)g(on)m(to)i(a)e(tap)s(e)h (\014le)191 1446 y(only)d(if)h(the)f(length)h(of)g(an)m(y)f(of)h(the)f (bu\013ers)g(exceeds)h Fq([OL)-10 b(VT]BUFSIZE)29 b FA(elemen)m(ts.)332 1609 y(After)f(the)f(execution)i(of)e(an)g(activ)m(e)j(section,)f(if)e (a)h(tap)s(e)g(\014le)f(w)m(as)h(generated,)h(i.e.,)g(if)e(the)h (length)g(of)191 1722 y(some)e(bu\013er)f(exceeded)i Fq([OL)-10 b(VT]BUFSIZE)24 b FA(elemen)m(ts)j(or)f(if)g(the)g(argumen)m (t)g Fq(\014le)g FA(of)g Fq(trace)p 3250 1722 V 33 w(o\013)g FA(w)m(as)h(set)f(to)191 1835 y(1,)e(the)d(\014les)g(will)g(b)s(e)g(sa) m(v)m(ed)h(in)e(the)i(directory)f(de\014ned)f(as)h Fq(ADOLC)p 2451 1835 V 33 w(T)-8 b(APE)p 2711 1835 V 33 w(DIR)20 b FA(\(b)m(y)h(default)h(the)f(curren)m(t)191 1948 y(w)m(orking)42 b(directory\))g(under)e(\014lenames)i(formed)e(b)m(y)i(the)f(strings)h Fq(ADOLC)p 2887 1948 V 32 w(OPERA)-8 b(TIONS)p 3479 1948 V 33 w(NAME)p FA(,)191 2061 y Fq(ADOLC)p 497 2061 V 32 w(LOCA)g(TIONS)p 1025 2061 V 33 w(NAME)p FA(,)20 b Fq(ADOLC)p 1663 2061 V 33 w(V)-8 b(ALUES)p 2027 2061 V 32 w(NAME)20 b FA(and)f Fq(ADOLC)p 2805 2061 V 32 w(T)-8 b(A)g(YLORS)p 3231 2061 V 33 w(NAME)20 b FA(de\014ned)191 2174 y(in)33 b(the)g(header)g(\014le)h Ft()28 b FA(app)s(ended)j(with)i(the)g(n)m(um)m(b)s(er)f(giv)m(en)j(as)e(the)g Fq(tag)g FA(argu-)191 2286 y(men)m(t)e(to)g Fq(trace)p 725 2286 V 33 w(on)g FA(and)e(ha)m(v)m(e)j(the)f(extension)g Fq(.tap)p FA(.)332 2449 y(Later,)49 b(all)d(problem-indep)s(enden)m(t)d (routines)i(lik)m(e)h Fq(gradient)p FA(,)i Fq(jacobian)p FA(,)h Fq(fo)m(rw)m(a)m(rd)p FA(,)h Fq(reverse)p FA(,)f(and)191 2562 y(others)d(exp)s(ect)g(as)f(\014rst)g(argumen)m(t)h(a)g Fq(tag)f FA(to)h(determine)g(the)g(tap)s(e)f(on)h(whic)m(h)f(their)h (resp)s(ectiv)m(e)191 2675 y(computational)28 b(task)f(is)f(to)h(b)s(e) f(p)s(erformed.)38 b(By)26 b(calling)i Fq(trace)p 2377 2675 V 33 w(on)f FA(with)f(di\013eren)m(t)g(tap)s(e)h Fq(tag)p FA(s,)g(one)f(can)191 2788 y(create)h(sev)m(eral)h(tap)s(es)e (for)f(v)-5 b(arious)26 b(function)g(ev)-5 b(aluations)27 b(and)f(subsequen)m(tly)f(p)s(erform)g(function)g(and)191 2901 y(deriv)-5 b(ativ)m(e)32 b(ev)-5 b(aluations)32 b(on)e(one)h(or)f(more)g(of)h(them.)332 3064 y(F)-8 b(or)30 b(example,)h(supp)s(ose)d(one)h(wishes)g(to)h(calculate)i(for)d(t)m(w)m (o)i(smo)s(oth)e(functions)g Fs(f)3217 3078 y FD(1)3256 3064 y FA(\()p Fs(x)p FA(\))h(and)f Fs(f)3629 3078 y FD(2)3668 3064 y FA(\()p Fs(x)p FA(\))1235 3379 y Fs(f)10 b FA(\()p Fs(x)p FA(\))25 b(=)g(max)p Fo(f)p Fs(f)1792 3393 y FD(1)1832 3379 y FA(\()p Fs(x)p FA(\))p Fs(;)15 b(f)2039 3393 y FD(2)2079 3379 y FA(\()p Fs(x)p FA(\))p Fo(g)p Fs(;)198 b Fo(r)p Fs(f)10 b FA(\()p Fs(x)p FA(\))p Fs(;)191 3694 y FA(and)29 b(p)s(ossibly)g(higher)h(deriv)-5 b(ativ)m(es)31 b(where)e(the)i(t)m(w)m(o)g(functions)e(do)h(not)g(tie.) 42 b(Pro)m(vided)30 b Fs(f)3311 3708 y FD(1)3379 3694 y FA(and)g Fs(f)3601 3708 y FD(2)3669 3694 y FA(are)191 3806 y(ev)-5 b(aluated)37 b(in)f(t)m(w)m(o)i(separate)f(activ)m(e)h (sections,)h(one)e(can)f(generate)i(t)m(w)m(o)f(di\013eren)m(t)g(tap)s (es)f(b)m(y)g(calling)191 3919 y Fq(trace)p 384 3919 V 33 w(on)28 b FA(with)f Fq(tag)g FA(=)g(1)h(and)f Fq(tag)g FA(=)g(2)h(at)g(the)g(b)s(eginning)f(of)g(the)h(resp)s(ectiv)m(e)g (activ)m(e)i(sections.)41 b(Subse-)191 4032 y(quen)m(tly)-8 b(,)30 b(one)f(can)f(decide)h(whether)f Fs(f)10 b FA(\()p Fs(x)p FA(\))25 b(=)g Fs(f)1828 4046 y FD(1)1867 4032 y FA(\()p Fs(x)p FA(\))k(or)g Fs(f)10 b FA(\()p Fs(x)p FA(\))25 b(=)g Fs(f)2471 4046 y FD(2)2510 4032 y FA(\()p Fs(x)p FA(\))k(at)g(the)g(curren)m(t)f(argumen)m(t)h(and)191 4145 y(then)j(ev)-5 b(aluate)34 b(the)e(gradien)m(t)h Fo(r)p Fs(f)10 b FA(\()p Fs(x)p FA(\))32 b(b)m(y)g(calling)i Fq(gradient)e FA(with)g(the)g(appropriate)h(argumen)m(t)f(v)-5 b(alue)191 4258 y Fq(tag)30 b FA(=)g(1)h(or)f Fq(tag)h FA(=)f(2.)191 4577 y SDict begin H.S end 191 4577 a 191 4577 a SDict begin 13.6 H.A end 191 4577 a 191 4577 a SDict begin [/View [/XYZ H.V]/Dest (subsection.2.1) cvn /DEST pdfmark end 191 4577 a 149 x FB(2.1)112 b(Examining)39 b(the)e(T)-9 b(ap)s(e)38 b(and)h(Predicting)e(Storage)h(Requiremen)m (ts)191 4982 y FA(A)m(t)31 b(an)m(y)g(p)s(oin)m(t)f(in)g(the)h (program,)f(one)h(ma)m(y)g(call)h(the)e(routine)p Black Black 1048 5330 a Fq(void)h(tap)s(estats\(unsigned)e(sho)m(rt)i(tag,)g (size)p 2515 5330 28 4 v 32 w(t*)f(counts\))p Black Black eop end %%Page: 15 15 TeXDict begin 15 14 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.15) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(2.2)92 b(Customizing)31 b(ADOL-C)2415 b FA(15)p Black 191 606 a(with)29 b Fq(counts)g FA(b)s(eeing)g(an)g(arra)m(y)h (of)f(at)h(least)g(elev)m(en)h(in)m(tegers.)41 b(The)29 b(\014rst)f(argumen)m(t)i Fq(tag)f FA(sp)s(eci\014es)g(the)191 719 y(particular)i(tap)s(e)f(of)h(in)m(terest.)42 b(The)29 b(comp)s(onen)m(ts)i(of)g Fq(counts)f FA(represen)m(t)821 881 y Fq(counts[0])p FA(:)102 b(the)30 b(n)m(um)m(b)s(er)f(of)i(indep)s (enden)m(ts,)e(i.e.)i(calls)h(to)f Fp(\034)p Fx(=)f FA(,)821 994 y Fq(counts[1])p FA(:)102 b(the)30 b(n)m(um)m(b)s(er)f(of)i(dep)s (enden)m(ts,)e(i.e.)j(calls)f(to)g Fp(\035)p Fx(=)f FA(,)821 1107 y Fq(counts[2])p FA(:)102 b(the)30 b(maximal)h(n)m(um)m(b)s(er)e (of)i(liv)m(e)h(activ)m(e)g(v)-5 b(ariables,)821 1219 y Fq(counts[3])p FA(:)102 b(the)30 b(size)h(of)g(ta)m(ylor)h(stac)m(k)g (\(n)m(um)m(b)s(er)d(of)i(o)m(v)m(erwrites\),)821 1332 y Fq(counts[4])p FA(:)102 b(the)30 b(bu\013er)f(size)j(\(a)f(m)m (ultiple)g(of)f(eigh)m(t\),)854 1510 y Fq(counts[5])p FA(:)222 b(the)31 b(total)h(n)m(um)m(b)s(er)d(of)i(op)s(erations)f (recorded,)854 1623 y Fq(counts[6-13])p FA(:)102 b(other)31 b(in)m(ternal)g(information)g(ab)s(out)f(the)g(tap)s(e.)191 1770 y(The)43 b(v)-5 b(alues)43 b Fq(maxlive)g FA(=)g Fq(counts[2])h FA(and)f Fq(tssize)f FA(=)h Fq(counts[3])i FA(determine)e(the)g(temp)s(orary)g(storage)191 1883 y(requiremen)m(ts)32 b(during)e(calls)j(to)f(the)g(routines)f(implemen) m(ting)i(the)f(forw)m(ard)f(and)g(the)h(rev)m(erse)g(mo)s(de.)191 1996 y(F)-8 b(or)26 b(a)h(certain)f(degree)h Fq(deg)f Fo(\025)f FA(0,)j(the)d(scalar)i(v)m(ersion)f(of)g(the)g(forw)m(ard)f (mo)s(de)h(in)m(v)m(olv)m(es)h(apart)f(from)g(the)191 2109 y(tap)s(e)i(bu\013ers)f(an)h(arra)m(y)h(of)f(\()p Fq(deg)p FA(+1\))p Fo(\003)p Fq(maxlive)i(double)p FA(s)f(in)f(core)h (and,)f(in)g(addition,)h(a)f(sequen)m(tial)i(data)191 2222 y(set)f(called)g(the)g(v)-5 b(alue)29 b(stac)m(k)g(of)g Fq(tssize)p Fo(\003)p Fq(k)m(eep)g(revreal)p FA(s)g(if)f(called)h(with) f(the)h(option)f Fq(k)m(eep)i Fs(>)e FA(0.)41 b(Here)29 b(the)191 2335 y(t)m(yp)s(e)34 b Fq(revreal)f FA(is)h(de\014ned)e(as)h Fq(double)h FA(or)g Fq(\015oat)p FA(.)49 b(The)33 b(latter)i(c)m(hoice) g(halv)m(es)f(the)g(storage)h(requiremen)m(t)191 2448 y(for)25 b(the)h(sequen)m(tial)i(data)e(set,)h(whic)m(h)f(sta)m(ys)h (in)e(core)i(if)e(its)i(length)f(is)f(less)i(than)e Fq(TBUFSIZE)f FA(b)m(ytes)i(and)191 2561 y(is)37 b(otherwise)g(written)f(out)h(to)g (a)g(temp)s(orary)f(\014le.)60 b(The)36 b(parameter)h Fq(TBUFSIZE)d FA(is)j(de\014ned)e(in)i(the)191 2674 y(header)g(\014le)h Ft()p FA(.)58 b(The)37 b(dra)m(wbac)m(k)h(of)g(the)g (economical)h Fq(revreal)f FA(=)g Fq(\015oat)f FA(c)m(hoice)191 2786 y(is)30 b(that)g(subsequen)m(t)g(calls)h(to)f(rev)m(erse)h(mo)s (de)e(implemen)m(tations)j(yield)e(gradien)m(ts)h(and)e(other)h(adjoin) m(t)191 2899 y(v)m(ectors)42 b(only)g(in)e(single-precision)j(accuracy) -8 b(.)74 b(This)40 b(ma)m(y)i(b)s(e)e(acceptable)j(if)e(the)h(adjoin)m (t)f(v)m(ectors)191 3012 y(represen)m(t)31 b(ro)m(ws)g(of)h(a)f (Jacobian)h(that)g(is)f(used)g(for)g(the)g(calculation)i(of)f(Newton)g (steps.)43 b(In)30 b(its)i(scalar)191 3125 y(v)m(ersion,)37 b(the)e(rev)m(erse)g(mo)s(de)g(implemen)m(tation)h(in)m(v)m(olv)m(es)h (the)e(same)g(n)m(um)m(b)s(er)f(of)h Fq(double)p FA(s)g(and)f(t)m(wice) 191 3238 y(as)39 b(man)m(y)g Fq(revreal)p FA(s)g(as)h(the)f(forw)m(ard) f(mo)s(de)h(implemen)m(tation.)68 b(The)39 b(storage)h(requiremen)m(ts) f(of)h(the)191 3351 y(v)m(ector)32 b(v)m(ersions)e(of)g(the)g(forw)m (ard)g(mo)s(de)g(and)f(rev)m(erse)i(mo)s(de)e(implemen)m(tation)j(are)f (equal)f(to)h(that)g(of)191 3464 y(the)g(scalar)g(v)m(ersions)g(m)m (ultiplied)f(b)m(y)h(the)f(v)m(ector)i(length.)191 3603 y SDict begin H.S end 191 3603 a 191 3603 a SDict begin 13.6 H.A end 191 3603 a 191 3603 a SDict begin [/View [/XYZ H.V]/Dest (subsection.2.2) cvn /DEST pdfmark end 191 3603 a 149 x FB(2.2)112 b(Customizing)38 b(ADOL-C)191 3973 y FA(Based)25 b(on)f(the)h(information)f(pro)m(vided)g(b)m(y)h(the)f (routine)h Fq(tap)s(estats)p FA(,)f(the)h(user)e(ma)m(y)i(alter)h(the)e (follo)m(wing)191 4086 y(t)m(yp)s(es)31 b(and)f(constan)m(t)i (dimensions)e(in)h(the)g(header)f(\014le)h Ft()26 b FA(to)31 b(suit)g(his)f(problem)191 4199 y(and)g(en)m(vironmen)m(t.)p Black 191 4427 a Fq(OBUFSIZE)p Fx(,)j Fq(LBUFSIZE)p Fx(,)h Fq(VBUFSIZE)p FA(:)p Black 44 w(These)26 b(in)m(teger)i(determines)f (the)g(length)g(of)f(internal)h(buffers)418 4540 y(\(default:)42 b(524)15 b(288\).)46 b(If)30 b(the)h(bu\013ers)f(are)h(large)h(enough)f (to)g(accommo)s(date)i(all)f(required)e(data,)418 4653 y(an)m(y)41 b(\014le)g(access)i(is)d(a)m(v)m(oided)j(unless)d Fq(trace)p 1952 4653 28 4 v 33 w(o\013)h FA(is)g(called)h(with)f(a)g(p) s(ositiv)m(e)h(argumen)m(t.)73 b(This)418 4765 y(desirable)41 b(situation)h(can)f(b)s(e)f(ac)m(hiev)m(ed)j(for)e(man)m(y)g(problem)f (functions)g(with)h(an)g(execution)418 4878 y(trace)g(of)e(mo)s(derate) h(size.)68 b(Primarily)39 b(these)g(v)-5 b(alues)40 b(o)s(ccur)f(as)g (an)h(argumen)m(t)f(to)h Fq(mallo)s(c)p FA(,)h(so)418 4991 y(that)29 b(setting)f(it)h(unnecessarily)e(large)i(ma)m(y)g(ha)m (v)m(e)f(no)g(ill)h(e\013ects,)g(unless)e(the)h(op)s(erating)h(system) 418 5104 y(prohibits)e(or)g(p)s(enalizes)h(large)g(arra)m(y)g(allo)s (cations.)42 b(It)27 b(is)g(ho)m(w)m(ev)m(er)i(recommended)e(to)h(lea)m (v)m(e)i(the)418 5217 y(v)-5 b(alues)38 b(in)f Ft()32 b FA(unc)m(hanged)37 b(and)f(set)i(them)f(using)g(the)g Ft(.adolcrc)e FA(\014le)i(in)418 5330 y(the)31 b(curren)m(t)f(w)m (orking)h(directory)g(at)g(run)m(time.)p Black Black eop end %%Page: 16 16 TeXDict begin 16 15 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.16) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(16)637 b Fu(2)92 b(NUMBERING)31 b(THE)f(T)-8 b(APES)30 b(AND)h(CONTR)m(OLLING)f(THE)g(BUFFER)p Black Black 191 606 a Fq(TBUFSIZE)p FA(:)p Black 44 w(This)43 b(in)m(teger)i (determines)f(the)g(length)g(of)g(the)h(internal)f(buffer)e(for)i(a)g (ta)m(ylor)h(stac)m(k)418 719 y(\(default:)c(524)15 b(288\).)p Black 191 912 a Fq(TBUFNUM)p FA(:)p Black 44 w(This)29 b(in)m(teger)j(determines)f(the)f(maximal)h(n)m(um)m(b)s(er)e(of)i(ta)m (ylor)h(stac)m(ks)f(\(default:)42 b(32\).)p Black 191 1105 a Fq(\014nt)p FA(:)p Black 45 w(The)30 b(in)m(teger)i(data)f(t)m (yp)s(e)f(used)g(b)m(y)g(F)-8 b(ortran)31 b(callable)i(v)m(ersions)d (of)h(functions.)p Black 191 1298 a Fq(fdouble)p FA(:)p Black 46 w(The)f(\015oating)h(p)s(oin)m(t)f(data)i(t)m(yp)s(e)e(used)g (b)m(y)g(F)-8 b(ortran)31 b(callable)h(v)m(ersions)f(of)f(functions.)p Black 191 1491 a Fq(inf)p 293 1491 28 4 v 32 w(num)p FA(:)p Black 46 w(This)41 b(together)i(with)f Fq(inf)p 1467 1491 V 32 w(den)g FA(sets)g(the)g(\\v)m(ertical")i(slop)s(e)e Fq(InfV)m(al)f FA(=)h Fq(inf)p 3174 1491 V 32 w(num/inf)p 3514 1491 V 33 w(den)g FA(of)418 1604 y(sp)s(ecial)e(functions)f(at)h (the)f(b)s(oundaries)f(of)h(their)h(domains)f(\(default:)58 b Fq(inf)p 3083 1604 V 33 w(num)39 b FA(=)g(1.0\).)69 b(On)418 1717 y(IEEE)25 b(mac)m(hines)h(the)g(default)f(setting)i(pro)s (duces)d(the)h(standard)g Fq(Inf)p FA(.)39 b(On)25 b(non-IEEE)f(mac)m (hines)418 1830 y(c)m(hange)37 b(these)g(v)-5 b(alues)36 b(to)h(pro)s(duce)d(a)j(small)f Fq(InfV)m(al)f FA(v)-5 b(alue)37 b(and)e(compare)h(the)h(results)e(of)h(t)m(w)m(o)418 1943 y(forw)m(ard)30 b(sw)m(eeps)h(with)f(di\013eren)m(t)g Fq(InfV)m(al)g FA(settings)i(to)f(detect)g(a)g(\\v)m(ertical")j(slop)s (e.)p Black 191 2136 a Fq(inf)p 293 2136 V 32 w(den)p FA(:)p Black 46 w(See)d Fq(inf)p 789 2136 V 32 w(num)f FA(\(default:)42 b(0.0\).)p Black 191 2329 a Fq(non)p 335 2329 V 33 w(num)p FA(:)p Black 46 w(This)37 b(together)i(with)f Fq(non)p 1540 2329 V 33 w(den)g FA(sets)g(the)g(mathematically)i (unde\014ned)c(deriv)-5 b(ativ)m(e)39 b(v)-5 b(alue)418 2442 y Fq(NoNum)37 b FA(=)e Fq(non)p 997 2442 V 33 w(num/non)p 1380 2442 V 34 w(den)h FA(of)f(sp)s(ecial)h(functions)f(at)h(the)g(b)s (oundaries)e(of)i(their)f(domains)418 2555 y(\(default:)44 b Fq(non)p 941 2555 V 33 w(num)32 b FA(=)g(0.0\).)46 b(On)31 b(IEEE)g(mac)m(hines)h(the)g(default)g(setting)h(pro)s(duces)d (the)i(stan-)418 2667 y(dard)37 b Fq(NaN)p FA(.)i(On)f(non-IEEE)f(mac)m (hines)i(c)m(hange)g(these)g(v)-5 b(alues)39 b(to)g(pro)s(duce)e(a)i (small)f Fq(NoNum)418 2780 y FA(v)-5 b(alue)35 b(and)g(compare)g(the)g (results)f(of)h(t)m(w)m(o)h(forw)m(ard)e(sw)m(eeps)h(with)f(di\013eren) m(t)i Fq(NoNum)g FA(settings)418 2893 y(to)31 b(detect)h(the)f(o)s (ccurrence)f(of)h(unde\014ned)d(deriv)-5 b(ativ)m(e)32 b(v)-5 b(alues.)p Black 191 3086 a Fq(non)p 335 3086 V 33 w(den)p FA(:)p Black 46 w(See)31 b Fq(non)p 874 3086 V 33 w(num)f FA(\(default:)42 b(0.0\).)p Black 191 3279 a Fq(ADOLC)p 497 3279 V 32 w(EPS)p FA(:)p Black 46 w(F)-8 b(or)31 b(testing)g(on)g(small)g(n)m(um)m(b)s(ers)d(to)k(a)m (v)m(oid)f(o)m(v)m(er\015o)m(ws)h(\(default:)41 b(10E-20\).)p Black 191 3472 a Fq(DIA)m(G)p 406 3472 V 32 w(OUT)p FA(:)p Black 45 w(File)33 b(iden)m(ti\014er)f(used)e(as)i(standard)f(output)g (for)g(ADOL-C)h(diagnostics)g(\(default:)44 b(std-)418 3585 y(out\).)332 3853 y(The)e(follo)m(wing)j(t)m(yp)s(es)d(and)g (options)h(ma)m(y)h(b)s(e)e(set)h(using)f(the)h(command-line)h(options) f(of)g(the)191 3966 y Ft(./configure)27 b FA(script.)p Black 191 4234 a Fq(lo)s(cint)p FA(:)p Black 45 w(The)k(range)g(of)g (the)h(in)m(teger)g(t)m(yp)s(e)f Fq(lo)s(cint)g FA(determines)g(ho)m(w) g(man)m(y)g Fq(adouble)p FA(s)g(can)g(b)s(e)g(sim)m(ulta-)418 4347 y(neously)h(aliv)m(e)i(\(default:)44 b Fq(unsigned)32 b(int)p FA(\).)46 b(In)31 b(extreme)i(cases)f(when)f(there)h(are)h (more)f(than)g(2)3716 4314 y FD(32)418 4460 y Fq(adouble)p FA(s)27 b(aliv)m(e)h(at)f(an)m(y)f(one)h(time,)h(the)f(t)m(yp)s(e)f Fq(lo)s(cint)g FA(m)m(ust)g(b)s(e)g(c)m(hanged)h(to)g Fq(unsigned)g(long)p FA(.)40 b(This)418 4572 y(can)31 b(b)s(e)f(done)g(b)m(y)g(passing)i Ft(--enable-ulong)26 b FA(to)31 b Ft(./configure)p FA(.)p Black 191 4765 a Fq(revreal)p FA(:)p Black 46 w(The)21 b(c)m(hoice)i(of)e(this)g (\015oating-p)s(oin)m(t)i(t)m(yp)s(e)e(trades)h(accuracy)g(with)f (storage)i(for)e(rev)m(erse)h(sw)m(eeps)418 4878 y(\(default:)38 b Fq(double)p FA(\).)h(While)23 b(functions)f(and)h(their)f(deriv)-5 b(ativ)m(es)24 b(are)g(alw)m(a)m(ys)g(ev)-5 b(aluated)24 b(in)e(double)418 4991 y(precision)i(during)e(forw)m(ard)h(sw)m(eeps,)i (gradien)m(ts)f(and)e(other)i(adjoin)m(t)g(v)m(ectors)h(are)e(obtained) h(with)418 5104 y(the)32 b(precision)g(determined)f(b)m(y)g(the)h(t)m (yp)s(e)g Fq(revreal)p FA(.)44 b(The)31 b(less)h(accurate)h(c)m(hoice)g Fq(revreal)f FA(=)f Fq(\015oat)418 5217 y FA(nearly)39 b(halv)m(es)g(the)g(storage)h(requiremen)m(t)e(during)f(rev)m(erse)i (sw)m(eeps.)65 b(This)38 b(can)h(b)s(e)f(done)g(b)m(y)418 5330 y(passing)32 b Ft(--disable-double)26 b FA(to)31 b Ft(./configure)p FA(.)p Black Black eop end %%Page: 17 17 TeXDict begin 17 16 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.17) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(2.3)92 b(W)-8 b(arnings)31 b(and)f(Suggestions)g(for)h(Impro)m(v)m (ed)f(E\016ciency)1304 b FA(17)p Black Black 191 606 a Fq(A)-8 b(TRIG)p 456 606 28 4 v 32 w(ERF)p FA(:)p Black 46 w(The)24 b(o)m(v)m(erloaded)i(v)m(ersions)f(of)f(the)h(in)m(v)m (erse)g(h)m(yp)s(erb)s(olic)f(functions)g(and)g(the)g(error)g(func-)418 719 y(tion)d(are)g(enabled)f(\(default:)36 b(unde\014ned\))18 b(b)m(y)j(passing)g Ft(--enable-atrig-erf)15 b FA(to)21 b Ft(./configure)p Black 191 924 a Fq(ADOLC)p 497 924 V 32 w(USE)p 697 924 V 32 w(CALLOC)p FA(:)p Black 46 w(Selects)k(the)f(memory)f(allo)s(cation)j(routine)e(used)f(b)m(y)h (ADOL-C.)g Fq(Mallo)s(c)e FA(will)418 1037 y(b)s(e)35 b(used)g(if)h(this)g(v)-5 b(ariable)36 b(is)g(unde\014ned.)55 b Fq(ADOLC)p 2247 1037 V 32 w(USE)p 2447 1037 V 32 w(CALLOC)36 b FA(is)g(de\014ned)e(b)m(y)i(default)g(to)418 1149 y(a)m(v)m(oid)42 b(incorrect)f(result)g(caused)f(b)m(y)g(uninitialized)i(memory)-8 b(.)71 b(It)40 b(can)h(b)s(e)f(set)h(unde\014ned)d(b)m(y)418 1262 y(passing)32 b Ft(--disable-use-calloc)25 b FA(to)31 b Ft(./configure)p FA(.)p Black 191 1467 a Fq(ADOLC)p 497 1467 V 32 w(AD)m(V)-8 b(ANCED)p 1009 1467 V 33 w(BRANCHING)p FA(:)p Black 45 w(Enables)37 b(routines)g(required)f(for)g(automatic)j (branc)m(h)d(selec-)418 1580 y(tion)29 b(\(default:)40 b(disabled\).)g(The)27 b(b)s(o)s(olean)h(v)-5 b(alued)28 b(comparison)g(op)s(erators)g(with)f(t)m(w)m(o)j Ft(adouble)418 1693 y FA(t)m(yp)s(e)46 b(argumen)m(ts)f(will)h(not)f(return)f(b)s(o)s (olean)i(v)-5 b(alues)45 b(an)m(ymore)h(and)f(ma)m(y)g(not)h(b)s(e)f (used)f(in)418 1806 y(branc)m(h)f(con)m(trol)h(statemen)m(ts)h(\()p Ft(if)p FA(,)h Ft(while)p FA(,)g Ft(for)c FA(etc.\).)81 b(Instead)43 b(conditional)h(assignmen)m(ts)418 1919 y(using)c Ft(condassign)c FA(or)j(selection)i(op)s(erations)f(on)f (elemen)m(ts)h(of)46 b Ft(advector)37 b FA(t)m(yp)s(e)i(should)f(b)s(e) 418 2032 y(used.)53 b(Enabling)35 b(this)f(option)i(and)e(rewriting)g (the)h(function)g(ev)-5 b(aluation)36 b(using)g Ft(condassign)418 2144 y FA(or)29 b(selections)h(of)36 b Ft(advector)27 b FA(elemen)m(ts)j(will)f(prev)m(en)m(t)g(the)g(need)g(for)f(retracing) i(the)f(function)f(at)418 2257 y(branc)m(h)i(switc)m(hes.)42 b(This)30 b(can)h(b)s(e)e(enabled)i(b)m(y)f(passing)i Ft(--enable-advanced-branch)o(ing)24 b FA(to)418 2370 y Ft(./configure)p FA(.)191 2538 y SDict begin H.S end 191 2538 a 191 2538 a SDict begin 13.6 H.A end 191 2538 a 191 2538 a SDict begin [/View [/XYZ H.V]/Dest (subsection.2.3) cvn /DEST pdfmark end 191 2538 a 146 x FB(2.3)112 b(W)-9 b(arnings)38 b(and)h(Suggestions)f(for)g(Impro)m(v)m(ed)f(E\016ciency) 191 2909 y FA(Since)d(the)h(t)m(yp)s(e)g Fq(adouble)f FA(has)g(a)h(non)m(trivial)g(constructor,)h(the)f(mere)g(declaration)h (of)e(large)i Fq(adouble)191 3022 y FA(arra)m(ys)g(ma)m(y)h(tak)m(e)h (up)c(considerable)j(run)e(time.)58 b(The)35 b(user)h(should)f(b)s(e)g (w)m(arned)h(against)h(the)f(usual)191 3135 y(F)-8 b(ortran)37 b(practice)h(of)f(declaring)g(\014xed-size)h(arra)m(ys)f(that)g(can)g (accommo)s(date)h(the)f(largest)h(p)s(ossible)191 3248 y(case)30 b(of)g(an)f(ev)-5 b(aluation)31 b(program)e(with)g(v)-5 b(ariable)30 b(dimensions.)40 b(If)29 b(suc)m(h)g(programs)f(are)i(con) m(v)m(erted)h(to)191 3361 y(or)j(written)f(in)g(C,)h(the)g(o)m(v)m (erloading)h(in)f(com)m(bination)g(with)g(ADOL-C)f(will)h(lead)g(to)h (v)m(ery)f(large)g(run)191 3474 y(time)29 b(increases)f(for)g (comparativ)m(ely)i(small)f(v)-5 b(alues)28 b(of)g(the)h(problem)e (dimension,)h(b)s(ecause)g(the)g(actual)191 3587 y(computation)j(is)f (completely)i(dominated)e(b)m(y)g(the)h(construction)f(of)g(the)h (large)g Fq(adouble)f FA(arra)m(ys.)41 b(The)191 3699 y(user)33 b(is)i(advised)f(to)h(create)h(dynamic)e(arra)m(ys)g(of)h Fq(adouble)p FA(s)f(b)m(y)g(using)g(the)g(C++)f(op)s(erator)i Fq(new)f FA(and)191 3812 y(to)c(destro)m(y)g(them)f(using)g Fq(delete)p FA(.)41 b(F)-8 b(or)30 b(storage)h(e\016ciency)f(it)g(is)f (desirable)g(that)h(dynamic)f(ob)5 b(jects)30 b(are)191 3925 y(created)h(and)f(destro)m(y)m(ed)h(in)g(a)f(last-in-\014rst-out)i (fashion.)332 4088 y(Whenev)m(er)d(an)g Fq(adouble)f FA(is)h(declared,)g(the)g(constructor)g(for)f(the)h(t)m(yp)s(e)g Fq(adouble)f FA(assigns)h(it)g(a)g(nom-)191 4201 y(inal)g(address,)e (whic)m(h)h(w)m(e)h(will)g(refer)e(to)i(as)g(its)f Fr(lo)-5 b(c)g(ation)p FA(.)43 b(The)27 b(lo)s(cation)j(is)e(of)h(the)f(t)m(yp)s (e)g Fq(lo)s(cint)g FA(de\014ned)191 4314 y(in)i(the)h(header)g(\014le) f Ft()p FA(.)37 b(Activ)m(e)c(v)m(ectors)f(o)s(ccup)m (y)f(a)g(range)g(of)g(con)m(tiguous)g(lo)s(ca-)191 4427 y(tions.)49 b(As)33 b(long)h(as)f(the)g(program)g(execution)i(nev)m(er) e(in)m(v)m(olv)m(es)i(more)e(than)g(65)15 b(536)35 b(activ)m(e)h(v)-5 b(ariables,)191 4540 y(the)29 b(t)m(yp)s(e)f Fq(lo)s(cint)g FA(ma)m(y)i(b)s(e)d(de\014ned)h(as)g Fq(unsigned)h(sho)m(rt)p FA(.)41 b(Otherwise,)29 b(the)f(range)h(ma)m(y)g(b)s(e)f(extended)h(b)m (y)191 4653 y(de\014ning)23 b Fq(lo)s(cint)h FA(as)h Fq(\(unsigned\))g(int)f FA(or)g Fq(\(unsigned\))h(long)p FA(,)i(whic)m(h)d(ma)m(y)g(nearly)h(double)f(the)g(o)m(v)m(erall)j (mass)191 4765 y(storage)36 b(requiremen)m(t.)54 b(Sometimes)36 b(one)f(can)g(a)m(v)m(oid)h(exceeding)g(the)f(accessible)h(range)g(of)e Fq(unsigned)191 4878 y(sho)m(rt)p FA(s)29 b(b)m(y)g(using)f(more)h(lo)s (cal)h(v)-5 b(ariables)30 b(and)e(deleting)i Fq(adouble)p FA(s)f(created)h(b)m(y)e(the)h(new)g(op)s(erator)g(in)f(a)191 4991 y(last-in-\014rst-out)j(fashion.)41 b(When)30 b(memory)g(for)g Fq(adouble)p FA(s)g(is)g(requested)g(through)f(a)i(call)g(to)g Fq(mallo)s(c\(\))191 5104 y FA(or)f(other)g(related)g(C)g(memory-allo)s (cating)i(functions,)e(the)g(storage)h(for)f(these)g Fq(adouble)p FA(s)g(is)f(allo)s(cated;)191 5217 y(ho)m(w)m(ev)m(er,)e (the)c(C++)g Fq(adouble)h FA(constructor)g(is)g(nev)m(er)g(called.)40 b(The)23 b(newly)g(de\014ned)g Fq(adouble)p FA(s)g(are)h(nev)m(er)191 5330 y(assigned)38 b(a)g(lo)s(cation)h(and)e(are)h(not)f(coun)m(ted)h (in)g(the)f(stac)m(k)i(of)f(liv)m(e)h(v)-5 b(ariables.)63 b(Th)m(us,)38 b(an)m(y)g(results)p Black Black eop end %%Page: 18 18 TeXDict begin 18 17 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.18) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(18)637 b Fu(2)92 b(NUMBERING)31 b(THE)f(T)-8 b(APES)30 b(AND)h(CONTR)m(OLLING)f(THE)g(BUFFER)p Black 191 606 a FA(dep)s(ending)f(up)s(on)g(these)i(pseudo-)p Fq(adouble)p FA(s)g(will)g(b)s(e)f(incorrect.)42 b(F)-8 b(or)32 b(these)f(reasons)f Fx(DO)35 b(NOT)g(use)191 719 y(mallo)s(c\(\))43 b(and)g(related)g(C)g (memory-allo)s(cating)h(functions)g(when)f(declaring)h(adoubles)191 832 y(\(see)35 b(the)f(follo)m(wing)h(paragraph\).)332 995 y FA(When)e(an)g Fq(adouble)g FA(go)s(es)g(out)h(of)f(scop)s(e)g (or)g(is)g(explicitly)h(deleted,)h(the)e(destructor)g(notices)h(that) 191 1108 y(its)h(lo)s(cation\(s\))i(ma)m(y)f(b)s(e)e(freed)h(for)g (subsequen)m(t)f(\(nominal\))i(reallo)s(cation.)57 b(In)34 b(general,)k(this)c(is)h(not)191 1220 y(done)26 b(immediately)h(but)f (is)g(dela)m(y)m(ed)i(un)m(til)e(the)h(lo)s(cations)g(to)g(b)s(e)f (deallo)s(cated)i(form)e(a)g(con)m(tiguous)h(tail)191 1333 y(of)j(all)i(lo)s(cations)g(curren)m(tly)e(b)s(eing)g(used.)332 1496 y(As)f(a)g(consequence)g(of)g(this)f(allo)s(cation)j(sc)m(heme,)f (the)f(curren)m(tly)f(aliv)m(e)j Fq(adouble)d FA(lo)s(cations)i(alw)m (a)m(ys)191 1609 y(form)37 b(a)g(con)m(tiguous)i(range)e(of)h(in)m (tegers)g(that)g(gro)m(ws)g(and)f(shrinks)e(lik)m(e)k(a)f(stac)m(k.)63 b(Newly)37 b(declared)191 1722 y Fq(adouble)p FA(s)j(are)h(placed)g(on) f(the)h(top)g(so)f(that)h(v)m(ectors)h(of)f Fq(adouble)p FA(s)f(obtain)h(a)g(con)m(tiguous)h(range)f(of)191 1835 y(lo)s(cations.)52 b(While)34 b(the)g(C++)e(compiler)i(can)g(b)s(e)f (exp)s(ected)h(to)g(construct)g(and)f(destruct)h(automatic)191 1948 y(v)-5 b(ariables)28 b(in)g(a)g(last-in-\014rst-out)h(fashion,)g (the)f(user)f(ma)m(y)i(upset)e(this)h(desirable)g(pattern)g(b)m(y)g (deleting)191 2061 y(free-store)36 b Fq(adouble)p FA(s)f(to)s(o)h (early)f(or)g(to)s(o)h(late.)56 b(Then)34 b(the)h Fq(adouble)g FA(stac)m(k)i(ma)m(y)f(gro)m(w)f(unnecessarily)-8 b(,)191 2174 y(but)28 b(the)h(n)m(umerical)g(results)f(will)h(still)h(b)s(e)e (correct,)i(unless)e(an)h(exception)h(o)s(ccurs)e(b)s(ecause)h(the)f (range)191 2286 y(of)41 b Fq(lo)s(cint)g FA(is)g(exceeded.)74 b(In)41 b(general,)k(free-store)d Fq(adouble)p FA(s)g(should)e(b)s(e)g (deleted)i(in)f(a)h(last-in-\014rst-)191 2399 y(out)36 b(fashion)f(to)m(w)m(ard)h(the)g(end)e(of)i(the)f(program)g(blo)s(c)m (k)h(in)f(whic)m(h)h(they)f(w)m(ere)h(created.)57 b(When)35 b(this)191 2512 y(pattern)f(is)g(main)m(tained,)i(the)e(maxim)m(um)f(n) m(um)m(b)s(er)g(of)h Fq(adouble)p FA(s)g(aliv)m(e)h(and,)g(as)f(a)g (consequence,)i(the)191 2625 y(randomly)25 b(accessed)i(storage)h (space)e(of)g(the)g(deriv)-5 b(ativ)m(e)28 b(ev)-5 b(aluation)27 b(routines)f(is)g(b)s(ounded)d(b)m(y)j(a)g(small)191 2738 y(m)m(ultiple)40 b(of)f(the)h(memory)f(used)f(in)h(the)g(relev)-5 b(an)m(t)41 b(section)f(of)g(the)f(original)i(program.)67 b(F)-8 b(ailure)40 b(to)191 2851 y(delete)27 b(dynamically)f(allo)s (cated)i Fq(adouble)p FA(s)d(ma)m(y)i(cause)f(that)g(the)g(maximal)g(n) m(um)m(b)s(er)f(of)g Fq(adouble)p FA(s)h(aliv)m(e)191 2964 y(at)i(one)g(time)h(will)f(b)s(e)f(exceeded)h(if)g(the)g(same)g (activ)m(e)i(section)f(is)e(called)i(rep)s(eatedly)-8 b(.)41 b(The)27 b(same)h(e\013ect)191 3077 y(o)s(ccurs)i(if)g(static)i Fq(adouble)p FA(s)f(are)f(used.)332 3240 y(T)-8 b(o)46 b(a)m(v)m(oid)g(the)g(storage)g(and)f(manipulation)g(of)g(structurally) g(trivial)h(deriv)-5 b(ativ)m(e)47 b(v)-5 b(alues,)49 b(one)191 3352 y(should)37 b(pa)m(y)h(careful)g(atten)m(tion)i(to)e (the)g(naming)g(of)g(v)-5 b(ariables.)63 b(Ideally)-8 b(,)41 b(the)d(in)m(termediate)h(v)-5 b(alues)191 3465 y(generated)37 b(during)d(the)i(ev)-5 b(aluation)37 b(of)f(a)g(v)m (ector)h(function)f(should)e(b)s(e)h(assigned)h(to)h(program)e(v)-5 b(ari-)191 3578 y(ables)41 b(that)g(are)g(consisten)m(tly)h(either)e (activ)m(e)j(or)e(passiv)m(e,)i(in)e(that)g(all)g(their)f(v)-5 b(alues)41 b(either)g(are)g(or)191 3691 y(are)h(not)g(dep)s(enden)m(t)f (on)g(the)h(indep)s(enden)m(t)f(v)-5 b(ariables)42 b(in)f(a)h(non)m (trivial)h(w)m(a)m(y)-8 b(.)76 b(F)-8 b(or)42 b(example,)k(this)191 3804 y(rule)36 b(is)g(violated)i(if)e(a)g(temp)s(orary)g(v)-5 b(ariable)37 b(is)f(successiv)m(ely)i(used)d(to)i(accum)m(ulate)h (inner)d(pro)s(ducts)191 3917 y(in)m(v)m(olving)d(\014rst)d(only)i (passiv)m(e)g(and)e(later)j(activ)m(e)g(arra)m(ys.)41 b(Then)30 b(the)g(\014rst)g(inner)f(pro)s(duct)g(and)h(all)h(its)191 4030 y(successors)f(in)g(the)g(data)h(dep)s(endency)d(graph)i(b)s (ecome)g(arti\014cially)i(activ)m(e)g(and)e(the)g(deriv)-5 b(ativ)m(e)31 b(ev)-5 b(al-)191 4143 y(uation)29 b(routines)g(describ)s (ed)e(later)j(will)f(w)m(aste)g(time)h(allo)s(cating)h(and)d (propagating)h(trivial)h(or)f(useless)191 4256 y(deriv)-5 b(ativ)m(es.)58 b(Sometimes)36 b(ev)m(en)h(v)-5 b(alues)36 b(that)g(do)g(dep)s(end)e(on)h(the)h(indep)s(enden)m(t)f(v)-5 b(ariables)36 b(ma)m(y)g(b)s(e)191 4369 y(of)h(only)g(transitory)h(imp) s(ortance)f(and)f(ma)m(y)i(not)f(a\013ect)i(the)e(dep)s(enden)m(t)f(v) -5 b(ariables.)62 b(F)-8 b(or)38 b(example,)191 4482 y(this)31 b(is)g(true)g(for)g(m)m(ultipliers)h(that)g(are)f(used)g(to)h (scale)g(linear)g(equations,)g(but)f(whose)g(v)-5 b(alues)31 b(do)g(not)191 4594 y(in\015uence)38 b(the)g(dep)s(enden)m(t)g(v)-5 b(ariables)39 b(in)f(a)h(mathematical)i(sense.)65 b(Suc)m(h)37 b(dead-end)h(v)-5 b(ariables)39 b(can)191 4707 y(b)s(e)d(deactiv)-5 b(ated)38 b(b)m(y)e(the)g(use)g(of)g(the)h Fq(value)f FA(function,)h(whic)m(h)f(con)m(v)m(erts)i Fq(adouble)p FA(s)e(to)h Fq(double)p FA(s.)58 b(The)191 4820 y(deleterious)30 b(e\013ects)g(of)f(unnecessary)g(activit)m(y)i(are)f(partly)f (alleviated)i(b)m(y)e(run)f(time)h(activit)m(y)j(\015ags)d(in)191 4933 y(the)i(deriv)-5 b(ativ)m(e)31 b(routine)g Fq(hov)p 1217 4933 28 4 v 33 w(reverse)g FA(presen)m(ted)g(in)2049 4933 y SDict begin H.S end 2049 4933 a Black FA(Section)g(4)p Black 2412 4871 a SDict begin H.R end 2412 4871 a 2412 4933 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 2412 4933 a FA(.)332 5096 y(The)c Fq(adouble)g FA(default)g(constructor)g(sets)g(to)h(zero)g(the) f(asso)s(ciated)h(v)-5 b(alue.)40 b(This)26 b(implies)h(a)h(certain)191 5209 y(o)m(v)m(erhead)34 b(that)g(ma)m(y)g(seem)f(unnecessary)f(when)h (no)g(initial)h(v)-5 b(alue)33 b(is)g(actually)i(giv)m(en,)g(ho)m(w)m (ev)m(er,)h(the)191 5322 y(implicit)43 b(initialization)h(of)e(arra)m (ys)g(from)f(a)h(partial)h(v)-5 b(alue)42 b(list)g(is)g(the)g(only)g (legitimate)i(construct)p Black Black eop end %%Page: 19 19 TeXDict begin 19 18 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.19) cvn /DEST pdfmark end 183 199 a Black 3700 307 a FA(19)p Black 191 606 a(\(kno)m(wn)30 b(to)h(us\))f(that)h (requires)f(this)g(b)s(eha)m(vior.)41 b(An)30 b(arra)m(y)h(instan)m (tiation)h(suc)m(h)f(as)p Black Black 1630 837 a Fq(double)g(x[3]=)p Fo(f)p Fq(2.0)p Fo(g)p Fq(;)191 1067 y FA(will)26 b(initialize)i Fq(x[0])e FA(to)g Fq(2.0)h FA(and)d(initialize)k(\(implicitly\))g(the)d (remaining)h(arra)m(y)g(elemen)m(ts)h Fq(x[1])f FA(and)f Fq(x[2])191 1180 y FA(to)j Fq(0.0)p FA(.)40 b(According)28 b(to)f(the)h(C++)d(standard)i(the)g(arra)m(y)g(elemen)m(t)h (construction)g(of)f(the)g(t)m(yp)s(e)g(c)m(hanged)191 1293 y(instan)m(tiation)p Black Black 1608 1524 a Fq(adouble)k(x[3]=)p Fo(f)p Fq(2.0)p Fo(g)p Fq(;)191 1755 y FA(will)41 b(use)g(the)g (constructor)h Fq(adouble\(const)g(double&\);)47 b FA(for)41 b Fq(x[0])h FA(passing)f(in)f Fq(2.0)i FA(but)f(will)g(call)i(the)191 1867 y Fq(adouble)23 b FA(default)g(constructor)g Fq(x[1])g FA(and)f Fq(x[2])i FA(lea)m(ving)g(these)f(arra)m(y)g(elemen)m(ts)h (uninitialized)g Fr(unless)f FA(the)191 1980 y(default)28 b(constructor)g(do)s(es)f(implemen)m(t)h(the)g(initialization)i(to)e (zero.)41 b(The)27 b(C++)f(constructor)i(syn)m(tax)191 2093 y(do)s(es)k(not)h(pro)m(vide)g(a)g(means)f(to)h(distinguish)f (this)h(implicit)g(initialization)j(from)c(the)g(declaration)j(of)191 2206 y(an)m(y)21 b(simple)h(uninitialized)f(v)-5 b(ariable.)39 b(If)21 b(the)g(user)f(can)i(ascertain)g(the)f(absence)h(of)f(arra)m(y) h(instan)m(tiations)191 2319 y(suc)m(h)29 b(as)h(the)f(ab)s(o)m(v)m(e)i (then)e(one)g(can)h(con\014gure)f(ADOL-C)h(with)f(the)g Ft(--disable-stdczero)c FA(option)30 b(,)191 2432 y(see)338 2432 y SDict begin H.S end 338 2432 a Black FA(Section)h(9.1)p Black 772 2370 a SDict begin H.R end 772 2370 a 772 2432 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.1) cvn H.B /ANN pdfmark end 772 2432 a FA(,)g(to)g(a)m(v)m(oid)h(the)e (o)m(v)m(erhead)i(of)e(these)h(initializations.)191 2585 y SDict begin H.S end 191 2585 a 191 2585 a SDict begin 13.6 H.A end 191 2585 a 191 2585 a SDict begin [/View [/XYZ H.V]/Dest (section.3) cvn /DEST pdfmark end 191 2585 a 182 x FE(3)135 b(Easy-T)-11 b(o-Use)45 b(Driv)l(ers)191 3020 y FA(F)-8 b(or)27 b(the)g(con)m(v)m(enience)h(of)f(the)f(user,)h (ADOL-C)f(pro)m(vides)h(sev)m(eral)g(easy-to-use)h(driv)m(ers)e(that)h (compute)191 3133 y(the)42 b(most)h(frequen)m(tly)f(required)f(deriv)-5 b(ativ)m(e)44 b(ob)5 b(jects.)76 b(Throughout,)44 b(w)m(e)f(assume)e (that)i(after)g(the)191 3246 y(execution)e(of)f(an)g(activ)m(e)i (section,)i(the)c(corresp)s(onding)f(tap)s(e)h(with)g(the)g(iden)m (ti\014er)g Fq(tag)g FA(con)m(tains)h(a)191 3358 y(detailed)34 b(record)f(of)g(the)g(computational)i(pro)s(cess)e(b)m(y)g(whic)m(h)f (the)h(\014nal)g(v)-5 b(alues)34 b Fs(y)h FA(of)e(the)h(dep)s(enden)m (t)191 3471 y(v)-5 b(ariables)28 b(w)m(ere)g(obtained)f(from)g(the)h(v) -5 b(alues)27 b Fs(x)g FA(of)h(the)f(indep)s(enden)m(t)f(v)-5 b(ariables.)41 b(W)-8 b(e)28 b(will)g(denote)g(this)191 3584 y(functional)j(relation)g(b)s(et)m(w)m(een)g(the)g(input)e(v)-5 b(ariables)31 b Fs(x)g FA(and)e(the)i(output)f(v)-5 b(ariables)31 b Fs(y)i FA(b)m(y)1309 3780 y Fs(F)38 b FA(:)26 b(I)-20 b(R)1535 3743 y Fi(n)1607 3780 y Fo(7!)25 b FA(I)-20 b(R)1803 3743 y Fi(m)1869 3780 y Fs(;)197 b(x)26 b Fo(!)f Fs(F)13 b FA(\()p Fs(x)p FA(\))26 b Fo(\021)f Fs(y)s(:)191 3976 y FA(The)30 b(return)g(v)-5 b(alue)31 b(of)g(all)g(driv)m(ers)g (presen)m(ted)f(in)h(this)f(section)i(indicate)g(the)f(v)-5 b(alidit)m(y)32 b(of)f(the)g(tap)s(e)f(as)191 4089 y(explained)38 b(in)718 4089 y SDict begin H.S end 718 4089 a Black FA(Section)31 b(1.7)p Black 1153 4027 a SDict begin H.R end 1153 4027 a 1153 4089 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.7) cvn H.B /ANN pdfmark end 1153 4089 a FA(.)62 b(The)37 b(presen)m(ted)h(driv)m(ers)f(are)h(all)h(C)e (functions)g(and)g(therefore)h(can)g(b)s(e)191 4202 y(used)29 b(within)g(C)g(and)g(C++)f(programs.)40 b(Some)30 b(F)-8 b(ortran-callable)33 b(companions)c(can)h(b)s(e)f(found)f(in)i(the)191 4315 y(appropriate)g(header)h(\014les.)191 4459 y SDict begin H.S end 191 4459 a 191 4459 a SDict begin 13.6 H.A end 191 4459 a 191 4459 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.1) cvn /DEST pdfmark end 191 4459 a 148 x FB(3.1)112 b(Driv)m(ers)38 b(for)f(Optimization)h(and)h(Nonlinear)f (Equations)191 4829 y FA(The)30 b(driv)m(ers)f(pro)m(vided)h(for)g (solving)h(optimization)h(problems)d(and)h(nonlinear)g(equations)h(are) f(proto-)191 4941 y(t)m(yp)s(ed)h(in)g(the)g(header)g(\014le)h Ft()p FA(,)26 b(whic)m(h)31 b(is)g(included)g(automatically)j(b)m(y)191 5054 y(the)d(global)g (header)f(\014le)h Ft()26 b FA(\(see)1983 5054 y SDict begin H.S end 1983 5054 a Black FA(Section)32 b(9.3)p Black 2418 4992 a SDict begin H.R end 2418 4992 a 2418 5054 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.3) cvn H.B /ANN pdfmark end 2418 5054 a FA(\).)332 5217 y(The)37 b(routine)h Fq(function)g FA(allo)m(ws)h(to)g(ev)-5 b(aluate)39 b(the)f(desired)g(function)f(from)g(the)h(tap)s(e)g (instead)h(of)191 5330 y(executing)32 b(the)e(corresp)s(onding)f (source)i(co)s(de:)p Black Black eop end %%Page: 20 20 TeXDict begin 20 19 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.20) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(20)2300 b Fu(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black Black Black 491 606 a Fq(int)h(function\(tag,m,n,x,y\))491 719 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 832 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 945 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 1058 y Fq(double)g(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 1171 y Fq(double)f(y[m];)718 b FA(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fs(y)c FA(=)d Fs(F)13 b FA(\()p Fs(x)p FA(\))191 1403 y(If)23 b(the)h(original)i(ev)-5 b(aluation)25 b(program)f(is)g(a)m(v) -5 b(ailable)26 b(this)e(double)f(v)m(ersion)h(should)f(b)s(e)h(used)f (to)h(compute)191 1515 y(the)31 b(function)f(v)-5 b(alue)30 b(in)g(order)g(to)h(a)m(v)m(oid)h(the)f(in)m(terpretativ)m(e)i(o)m(v)m (erhead.)332 1678 y(F)-8 b(or)30 b(the)g(calculation)h(of)f(whole)f (deriv)-5 b(ativ)m(e)31 b(v)m(ectors)g(and)e(matrices)h(up)f(to)h (order)e(2)i(there)g(are)g(the)191 1791 y(follo)m(wing)i(pro)s (cedures:)p Black Black 491 2023 a Fq(int)e(gradient\(tag,n,x,g\))491 2136 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 2249 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)f FA(and)g Fs(m)25 b FA(=)g(1)491 2362 y Fq(double)31 b(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 2475 y Fq(double)f(g[n];)740 b FA(//)31 b(resulting)g(gradien)m(t)g Fo(r)p Fs(F)13 b FA(\()p Fs(x)p FA(\))p Black Black 491 2730 a Fq(int)30 b(jacobian\(tag,m,n,x,J\))491 2843 y(sho)m(rt)h(int)f (tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 2956 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden) m(t)f(v)-5 b(ariables)31 b Fs(m)491 3069 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3182 y Fq(double)g(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 3295 y Fq(double)f(J[m][n];)618 b FA(//)31 b(resulting)g(Jacobian)g Fs(F)2626 3262 y Fm(0)2649 3295 y FA(\()p Fs(x)p FA(\))p Black Black 491 3551 a Fq(int)f(hessian\(tag,n,x,H\))491 3663 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 3776 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)f FA(and)g Fs(m)25 b FA(=)g(1)491 3889 y Fq(double)31 b(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 4002 y Fq(double)f(H[n][n];)622 b FA(//)31 b(resulting)g(Hessian)g (matrix)f Fo(r)2878 3969 y FD(2)2918 4002 y Fs(F)13 b FA(\()p Fs(x)p FA(\))191 4258 y(The)28 b(driv)m(er)g(routine)h Fq(hessian)f FA(computes)h(only)f(the)h(lo)m(w)m(er)h(half)e(of)h Fo(r)2593 4225 y FD(2)2632 4258 y Fs(f)10 b FA(\()p Fs(x)2774 4272 y FD(0)2813 4258 y FA(\))29 b(so)g(that)g(all)g(v)-5 b(alues)29 b Fq(H[i][j])191 4371 y FA(with)37 b Fs(j)k(>)36 b(i)h FA(of)g Fq(H)g FA(allo)s(cated)i(as)e(a)h(square)e(arra)m(y)i (remain)e(un)m(touc)m(hed)h(during)f(the)h(call)h(of)f Fq(hessian)p FA(.)191 4484 y(Hence)31 b(only)g Fs(i)20 b FA(+)g(1)31 b Fq(double)p FA(s)f(need)h(to)g(b)s(e)e(allo)s(cated)k (starting)e(at)g(the)g(p)s(osition)f Fq(H[i])p FA(.)332 4646 y(T)-8 b(o)35 b(use)g(the)g(full)f(capabilit)m(y)j(of)e(automatic) i(di\013eren)m(tiation)f(when)e(the)h(pro)s(duct)e(of)i(deriv)-5 b(ativ)m(es)191 4759 y(with)43 b(certain)h(w)m(eigh)m(t)g(v)m(ectors)h (or)e(directions)g(are)g(needed,)j(ADOL-C)e(o\013ers)f(the)g(follo)m (wing)h(four)191 4872 y(driv)m(ers:)p Black Black 491 5104 a Fq(int)30 b(vec)p 750 5104 28 4 v 33 w(jac\(tag,m,n,rep)s (eat,x,u,z\))491 5217 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 5330 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)p Black Black eop end %%Page: 21 21 TeXDict begin 21 20 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.21) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(3.1)92 b(Driv)m(ers)31 b(for)f(Optimization)i(and)d(Nonlinear)i (Equations)1298 b FA(21)p Black 491 606 a Fq(int)30 b(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 719 y Fq(int)f(rep)s(eat;)793 b FA(//)31 b(indicate)h(rep)s(eated)e(call)i(at)f(same)g(argumen)m(t) 491 832 y Fq(double)g(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fs(x)491 945 y Fq(double)f(u[m];)713 b FA(//)31 b(range)g(w)m(eigh)m(t)h(v)m(ector)g Fs(u)491 1058 y Fq(double)f(z[n];)745 b FA(//)31 b(result)g Fs(z)e FA(=)c Fs(u)2273 1025 y Fi(T)2328 1058 y Fs(F)2399 1025 y Fm(0)2423 1058 y FA(\()p Fs(x)p FA(\))191 1288 y(If)i(a)g(nonzero)h(v)-5 b(alue)27 b(of)h(the)f(parameter)h Fq(rep)s(eat)f FA(indicates)h(that)g (the)f(routine)g Fq(vec)p 3029 1288 28 4 v 34 w(jac)g FA(has)g(b)s(een)g(called)191 1401 y(at)40 b(the)f(same)h(argumen)m(t)g (immediately)g(b)s(efore,)h(the)f(in)m(ternal)g(forw)m(ard)e(mo)s(de)h (ev)-5 b(aluation)41 b(will)e(b)s(e)191 1514 y(skipp)s(ed)d(and)g(only) i(rev)m(erse)g(mo)s(de)f(ev)-5 b(aluation)38 b(with)f(the)h(corresp)s (onding)e(argumen)m(ts)i(is)f(executed)191 1627 y(resulting)30 b(in)h(a)f(reduced)g(computational)i(complexit)m(y)g(of)f(the)f (function)g Fq(vec)p 2892 1627 V 34 w(jac)p FA(.)p Black Black 491 1858 a Fq(int)g(jac)p 736 1858 V 33 w(vec\(tag,m,n,x,v,z\)) 491 1971 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 2083 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 2196 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 2309 y Fq(double)g(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 2422 y Fq(double)f(v[n];)743 b FA(//)31 b(tangen)m(t)h(v)m(ector)g Fs(v)491 2535 y Fq(double)f(z[m];)720 b FA(//)31 b(result)g Fs(z)e FA(=)c Fs(F)2292 2502 y Fm(0)2316 2535 y FA(\()p Fs(x)p FA(\))p Fs(v)p Black Black 491 2789 a Fq(int)30 b(hess)p 785 2789 V 33 w(vec\(tag,n,x,v,z\))491 2902 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation) 491 3015 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3128 y Fq(double)g(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 3241 y Fq(double)f(v[n];)743 b FA(//)31 b(tangen)m(t)h(v)m(ector)g Fs(v)491 3354 y Fq(double)f(z[n];)745 b FA(//)31 b(result)g Fs(z)e FA(=)c Fo(r)2297 3321 y FD(2)2336 3354 y Fs(F)13 b FA(\()p Fs(x)p FA(\))p Fs(v)p Black Black 491 3608 a Fq(int)30 b(hess)p 785 3608 V 33 w(mat\(tag,n,p,x,V,Z\))491 3721 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 3834 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3947 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(columns)g (in)g Fs(V)491 4060 y Fq(double)h(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 4173 y Fq(double)f(V[n][p];) 625 b FA(//)31 b(tangen)m(t)h(matrix)f Fs(V)491 4285 y Fq(double)g(Z[n][p];)630 b FA(//)31 b(result)g Fs(Z)h FA(=)25 b Fo(r)2320 4252 y FD(2)2359 4285 y Fs(F)13 b FA(\()p Fs(x)p FA(\))p Fs(V)p Black Black 491 4540 a Fq(int)30 b(lagra)p 814 4540 V 32 w(hess)p 1003 4540 V 33 w(vec\(tag,m,n,x,v,u,h\))491 4653 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 4765 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fs(m)491 4878 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 4991 y Fq(double)g(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 5104 y Fq(double)f(v[n];)743 b FA(//)31 b(tangen)m(t)h(v)m(ector)g Fs(v)491 5217 y Fq(double)f(u[m];)713 b FA(//)31 b(range)g(w)m(eigh)m (t)h(v)m(ector)g Fs(u)491 5330 y Fq(double)f(h[n];)738 b FA(//)31 b(result)g Fs(h)25 b FA(=)g Fs(u)2279 5297 y Fi(T)2334 5330 y Fo(r)2410 5297 y FD(2)2450 5330 y Fs(F)13 b FA(\()p Fs(x)p FA(\))p Fs(v)p Black Black eop end %%Page: 22 22 TeXDict begin 22 21 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.22) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(22)2300 b Fu(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 606 a FA(The)d(next)g(pro)s(cedure)f(allo)m(ws)i(the)f(user)g(to)h (p)s(erform)d(Newton)j(steps)f(only)g(ha)m(ving)g(the)h(corresp)s (onding)191 719 y(tap)s(e)j(at)i(hand:)p Black Black 491 958 a Fq(int)e(jac)p 736 958 28 4 v 33 w(solv\(tag,n,x,b,mo)s(de\)) 491 1071 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 1184 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 1297 y Fq(double)g(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fs(x)e FA(as)491 1410 y Fq(double)h(b[n];)738 b FA(//)31 b(in:)41 b(righ)m(t-hand)30 b(side)g(b,)g(out:)41 b(result)31 b Fs(w)i FA(of)d Fs(F)13 b FA(\()p Fs(x)p FA(\))p Fs(w)29 b FA(=)c Fs(b)491 1523 y Fq(int)30 b(mo)s(de;)824 b FA(//)31 b(option)g(to)g(c)m(ho)s(ose)h(di\013eren)m(t)f(solv)m(ers) 191 1762 y(On)i(en)m(try)-8 b(,)35 b(parameter)g Fq(b)e FA(of)h(the)g(routine)g Fq(jac)p 1821 1762 V 33 w(solv)g FA(con)m(tains)h(the)f(righ)m(t-hand)f(side)h(of)g(the)g(equation)191 1875 y Fs(F)13 b FA(\()p Fs(x)p FA(\))p Fs(w)28 b FA(=)d Fs(b)i FA(to)g(b)s(e)f(solv)m(ed.)40 b(On)26 b(exit,)i Fq(b)e FA(equals)h(the)g(solution)g Fs(w)i FA(of)d(this)h(equation.)40 b(If)26 b Fq(mo)s(de)h FA(=)f(0)h(only)191 1988 y(the)j(Jacobian)h(of)f (the)g(function)f(giv)m(en)i(b)m(y)f(the)g(tap)s(e)g(lab)s(eled)g(with) g Fq(tag)g FA(is)g(pro)m(vided)f(in)m(ternally)-8 b(.)42 b(The)191 2101 y(LU-factorization)35 b(of)d(this)g(Jacobian)g(is)g (computed)g(for)f Fq(mo)s(de)i FA(=)e(1.)46 b(The)31 b(solution)i(of)f(the)g(equation)191 2214 y(is)f(calculated)h(if)f Fq(mo)s(de)g FA(=)f(2.)42 b(Hence,)32 b(it)f(is)g(p)s(ossible)f(to)i (compute)f(the)f(LU-factorization)k(only)d(once.)191 2327 y(Then)43 b(the)h(equation)g(can)g(b)s(e)g(solv)m(ed)g(for)g(sev)m (eral)h(righ)m(t-hand)e(sides)h Fs(b)g FA(without)g(calculating)i(the) 191 2440 y(Jacobian)31 b(and)f(its)h(factorization)i(again.)332 2603 y(If)d(the)g(original)i(ev)-5 b(aluation)31 b(co)s(de)g(of)f(a)h (function)f(con)m(tains)h(neither)g(quadratures)e(nor)h(branc)m(hes,) 191 2715 y(all)46 b(driv)m(ers)e(describ)s(ed)g(ab)s(o)m(v)m(e)j(can)e (b)s(e)f(used)g(to)i(ev)-5 b(aluate)47 b(deriv)-5 b(ativ)m(es)46 b(at)g(an)m(y)f(argumen)m(t)h(in)e(its)191 2828 y(domain.)39 b(The)27 b(same)g(still)h(applies)f(if)g(there)g(are)g(no)g(user)f (de\014ned)g(quadratures)g(and)g(all)i(comparisons)191 2941 y(in)m(v)m(olving)h Fq(adouble)p FA(s)e(ha)m(v)m(e)h(the)f(same)h (result)f(as)g(during)f(taping.)40 b(If)27 b(this)g(assumption)f(is)i (falsely)g(made)191 3054 y(all)34 b(driv)m(ers)f(while)g(in)m(ternally) h(calling)h(the)e(forw)m(ard)g(mo)s(de)g(ev)-5 b(aluation)34 b(will)g(return)e(the)h(v)-5 b(alue)34 b(-1)g(or)191 3167 y(-2)d(as)g(already)g(sp)s(eci\014ed)e(in)1202 3167 y SDict begin H.S end 1202 3167 a Black FA(Section)i(1.7)p Black 1637 3105 a SDict begin H.R end 1637 3105 a 1637 3167 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.7) cvn H.B /ANN pdfmark end 1637 3167 a FA(.)191 3315 y SDict begin H.S end 191 3315 a 191 3315 a SDict begin 13.6 H.A end 191 3315 a 191 3315 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.2) cvn /DEST pdfmark end 191 3315 a 149 x FB(3.2)112 b(Driv)m(ers)38 b(for)f(Ordinary)h(Di\013eren)m (tial)h(Equations)191 3686 y FA(When)30 b Fs(F)43 b FA(is)31 b(the)f(righ)m(t-hand)h(side)f(of)h(an)f(\(autonomous\))h(ordinary)f (di\013eren)m(tial)i(equation)1654 3892 y Fs(x)1706 3854 y Fm(0)1730 3892 y FA(\()p Fs(t)p FA(\))51 b(=)f Fs(F)13 b FA(\()p Fs(x)p FA(\()p Fs(t)p FA(\)\))p Fs(;)191 4098 y FA(w)m(e)31 b(m)m(ust)f(ha)m(v)m(e)h Fs(m)26 b FA(=)e Fs(n)p FA(.)41 b(Along)31 b(an)m(y)f(solution)h(path)f Fs(x)p FA(\()p Fs(t)p FA(\))h(its)g(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(ts)h Fs(x)3183 4112 y Fi(j)3250 4098 y FA(at)f(some)g(time,)191 4211 y(e.g.,)h Fs(t)25 b FA(=)g(0,)31 b(m)m(ust)f(satisfy)h(the)g(relation)1692 4450 y Fs(x)1744 4464 y Fi(i)p FD(+1)1888 4450 y FA(=)2065 4389 y(1)p 1994 4429 188 4 v 1994 4513 a(1)20 b(+)g Fs(i)2192 4450 y(y)2237 4464 y Fi(i)2264 4450 y Fs(:)191 4692 y FA(with)30 b(the)h Fs(y)600 4706 y Fi(j)666 4692 y FA(the)g(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(ts)h(of)f(its)g(deriv)-5 b(ativ)m(e)31 b Fs(y)s FA(\()p Fs(t)p FA(\))26 b(=)f Fs(x)2540 4659 y Fm(0)2563 4692 y FA(\()p Fs(t)p FA(\),)31 b(namely)-8 b(,)1402 4898 y Fs(y)s FA(\()p Fs(t)p FA(\))51 b Fo(\021)f Fs(F)13 b FA(\()p Fs(x)p FA(\()p Fs(t)p FA(\)\))52 b(:)e Fs(I)-23 b(R)51 b Fo(7!)g Fs(I)-23 b(R)2514 4860 y Fi(m)191 5104 y FA(de\014ned)27 b(b)m(y)h(an)g(autonomous)h(righ)m (t-hand)f(side)g Fs(F)42 b FA(recorded)28 b(on)g(the)g(tap)s(e.)41 b(Using)28 b(this)g(relation,)i(one)191 5217 y(can)e(generate)i(the)f (T)-8 b(a)m(ylor)29 b(co)s(e\016cien)m(ts)h Fs(x)1665 5231 y Fi(i)1693 5217 y FA(,)f Fs(i)d Fo(\024)f Fs(deg)s FA(,)30 b(recursiv)m(ely)f(from)e(the)i(curren)m(t)f(p)s(oin)m(t)g Fs(x)3509 5231 y FD(0)3549 5217 y FA(.)40 b(This)191 5330 y(task)31 b(is)f(ac)m(hiev)m(ed)i(b)m(y)f(the)f(driv)m(er)g (routine)h Fq(fo)m(ro)s(de)g FA(de\014ned)e(as)i(follo)m(ws:)p Black Black eop end %%Page: 23 23 TeXDict begin 23 22 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.23) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(3.2)92 b(Driv)m(ers)31 b(for)f(Ordinary)f(Di\013eren)m(tial)k (Equations)1581 b FA(23)p Black Black Black 491 606 a Fq(int)30 b(fo)m(ro)s(de\(tag,n,tau,dol,deg,X\))491 719 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation) 491 832 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(state)i (v)-5 b(ariables)31 b Fs(n)491 945 y Fq(double)g(tau;)760 b FA(//)31 b(scaling)h(parameter)491 1058 y Fq(int)e(dol;)917 b FA(//)31 b(degree)h(on)e(previous)g(call)491 1171 y Fq(int)g(deg;)899 b FA(//)31 b(degree)h(on)e(curren)m(t)g(call)491 1284 y Fq(double)h(X[n][deg+1];)424 b FA(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(t)g(v)m(ector)g Fs(X)191 1529 y FA(If)d Fq(dol)g FA(is)h(p)s(ositiv)m(e,)g(it)g(is)g(assumed)e (that)i Fq(fo)m(ro)s(de)h FA(has)e(b)s(een)f(called)j(b)s(efore)e(at)h (the)f(same)h(p)s(oin)m(t)g(so)f(that)191 1642 y(all)i(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(t)g(v)m(ectors)g(up)d(to)i(the)g Fq(dol)p FA(-th)f(are)h(already)g(correct.)332 1805 y(Subsequen)m(tly)c (one)h(ma)m(y)g(call)g(the)g(driv)m(er)f(routine)h Fq(reverse)g FA(or)g(corresp)s(onding)e(lo)m(w)j(lev)m(el)g(routines)191 1918 y(as)34 b(explained)f(in)h(the)984 1918 y SDict begin H.S end 984 1918 a Black FA(Section)d(5)p Black 1348 1856 a SDict begin H.R end 1348 1856 a 1348 1918 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 1348 1918 a 33 w FA(and)1561 1918 y SDict begin H.S end 1561 1918 a Black FA(Section)g(4)p Black 1925 1856 a SDict begin H.R end 1925 1856 a 1925 1918 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 1925 1918 a FA(,)j(resp)s(ectiv)m(ely)-8 b(,)37 b(to)d(compute)g(the)f(family)h(of)g(square)191 2031 y(matrices)d Fq(Z[n][n][deg])i FA(de\014ned)c(b)m(y)1583 2286 y Fs(Z)1645 2300 y Fi(j)1707 2286 y Fo(\021)c Fs(U)1890 2224 y(@)5 b(y)1988 2238 y Fi(j)p 1885 2265 145 4 v 1885 2349 a Fs(@)g(x)1990 2363 y FD(0)2065 2286 y Fo(2)25 b Fs(I)-23 b(R)2237 2249 y Fi(q)r Fm(\002)p Fi(n)2373 2286 y Fs(;)191 2538 y FA(with)30 b Fq(double**)i(U)p FA(=)24 b Fs(I)966 2552 y Fi(n)1043 2538 y FA(the)31 b(iden)m(tit)m(y)h(matrix)f(of)f(order)g Fq(n)p FA(.)332 2701 y(F)-8 b(or)44 b(the)e(n)m(umerical)i(solutions)f(of)g(ordinary)e (di\013eren)m(tial)k(equations,)h(one)d(ma)m(y)g(also)h(wish)e(to)191 2814 y(calculate)33 b(the)d(Jacobians)1142 2814 y SDict begin H.S end 1142 2814 a 1142 2814 a SDict begin 13.6 H.A end 1142 2814 a 1142 2814 a SDict begin [/View [/XYZ H.V]/Dest (equation.3.1) cvn /DEST pdfmark end 1142 2814 a 1511 2956 a Fs(B)1580 2970 y Fi(j)1667 2956 y Fo(\021)1798 2894 y FA(d)p Fs(x)1901 2908 y Fi(j)t FD(+1)p 1798 2935 230 4 v 1842 3018 a FA(d)o Fs(x)1944 3032 y FD(0)2088 2956 y Fo(2)50 b Fs(I)-23 b(R)2286 2918 y Fi(n)p Fm(\002)p Fi(n)2445 2956 y Fs(;)1205 b FA(\(1\))191 3158 y(whic)m(h)38 b(exist)g(pro)m(vided)g Fs(F)51 b FA(is)38 b(su\016cien)m(tly)g(smo)s (oth.)64 b(These)37 b(matrices)i(can)f(b)s(e)g(obtained)g(from)g(the) 191 3271 y(partial)g(deriv)-5 b(ativ)m(es)39 b Fs(@)5 b(y)1049 3285 y Fi(i)1078 3271 y Fs(=@)g(x)1228 3285 y FD(0)1305 3271 y FA(b)m(y)38 b(an)f(appropriate)h(v)m(ersion)g(of)g (the)g(c)m(hain)g(rule.)62 b(T)-8 b(o)39 b(compute)f(the)191 3384 y(total)29 b(deriv)-5 b(ativ)m(es)29 b Fs(B)h FA(=)25 b(\()p Fs(B)1154 3398 y Fi(j)1190 3384 y FA(\))1225 3399 y FD(0)p Fm(\024)p Fi(j)t()o FA(.)55 b(The)37 b(global)i(header)e(\014le)g Ft()c FA(includes)k(this)191 1220 y(\014le)30 b(automatically)-8 b(,)34 b(see)1075 1220 y SDict begin H.S end 1075 1220 a Black FA(Section)d(9.3)p Black 1510 1158 a SDict begin H.R end 1510 1158 a 1510 1220 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.3) cvn H.B /ANN pdfmark end 1510 1220 a FA(.)332 1383 y(An)21 b(example)i(program)e(using)h(the)f(pro)s (cedures)g Fq(fo)m(ro)s(de)i FA(and)e Fq(acco)s(de)h FA(together)h(with)f(more)g(detailed)191 1496 y(information)28 b(ab)s(out)g(the)g(co)s(ding)h(can)f(b)s(e)f(found)g(in)2024 1496 y SDict begin H.S end 2024 1496 a Black FA(Section)k(10.4)p Black 2504 1434 a SDict begin H.R end 2504 1434 a 2504 1496 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.10.4) cvn H.B /ANN pdfmark end 2504 1496 a FA(.)40 b(The)27 b(corresp)s(onding)g(source)h(co)s(de)191 1609 y Ft(odexam.cpp)g FA(is)i(con)m(tained)i(in)e(the)g(sub)s(directory)f Ft(examples)p FA(.)191 1752 y SDict begin H.S end 191 1752 a 191 1752 a SDict begin 13.6 H.A end 191 1752 a 191 1752 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.3) cvn /DEST pdfmark end 191 1752 a 146 x FB(3.3)112 b(Driv)m(ers)38 b(for)f(Sparse)i (Jacobians)f(and)h(Sparse)f(Hessians)191 2119 y FA(Quite)49 b(often,)k(the)c(Jacobians)g(and)f(Hessians)h(that)g(ha)m(v)m(e)h(to)g (b)s(e)d(computed)i(are)g(sparse)f(matri-)191 2232 y(ces.)h(Therefore,) 34 b(ADOL-C)f(pro)m(vides)g(additionally)h(driv)m(ers)f(that)h(allo)m (w)g(the)g(exploitation)h(of)e(spar-)191 2345 y(sit)m(y)-8 b(.)93 b(The)47 b(exploitation)j(of)e(sparsit)m(y)g(is)f(frequen)m(tly) h(based)f(on)g Fr(gr)-5 b(aph)51 b(c)-5 b(oloring)49 b FA(metho)s(ds,)i(dis-)191 2458 y(cussed)39 b(for)g(example)i(in)e([) 1138 2458 y SDict begin H.S end 1138 2458 a Black FA(3)p Black 1184 2399 a SDict begin H.R end 1184 2399 a 1184 2458 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeMaPo05) cvn H.B /ANN pdfmark end 1184 2458 a FA(])h(and)f([)1460 2458 y SDict begin H.S end 1460 2458 a Black FA(6)p Black 1505 2399 a SDict begin H.R end 1505 2399 a 1505 2458 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeTaMaPo07) cvn H.B /ANN pdfmark end 1505 2458 a FA(].)69 b(The)39 b(sparse)h(driv)m(ers) f(of)h(ADOL-C)f(presen)m(ted)h(in)f(this)h(sec-)191 2571 y(tion)k(rely)f(on)g(the)h(the)f(coloring)i(pac)m(k)-5 b(age)45 b(ColP)m(ac)m(k)g(dev)m(elop)s(ed)f(b)m(y)f(the)g(authors)g (of)h([)3366 2571 y SDict begin H.S end 3366 2571 a Black FA(3)p Black 3411 2512 a SDict begin H.R end 3411 2512 a 3411 2571 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeMaPo05) cvn H.B /ANN pdfmark end 3411 2571 a FA(])g(and)f([)3695 2571 y SDict begin H.S end 3695 2571 a Black FA(6)p Black 3740 2512 a SDict begin H.R end 3740 2512 a 3740 2571 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeTaMaPo07) cvn H.B /ANN pdfmark end 3740 2571 a FA(].)191 2684 y(ColP)m(ac)m(k)35 b(is)f(not)f(directly)i(incorp)s(orated)e(in)g(ADOL-C,)h(and)f (therefore)h(needs)f(to)h(b)s(e)f(installed)h(sep-)191 2797 y(arately)46 b(to)f(use)f(the)h(sparse)f(driv)m(ers)g(describ)s (ed)g(here.)83 b(ColP)m(ac)m(k)46 b(is)f(a)m(v)-5 b(ailable)47 b(for)d(do)m(wnload)h(at)191 2909 y Ft(http://cscapes.cs.purdue)o(.edu) o(/co)o(lori)o(ngpa)o(ge/)o(soft)o(ware)o(.ht)o(m)p FA(.)35 b(More)c(information)f(ab)s(out)191 3022 y(the)h(required)e (installation)j(of)f(ColP)m(ac)m(k)h(is)f(giv)m(en)g(in)2075 3022 y SDict begin H.S end 2075 3022 a Black FA(Section)g(9)p Black 2439 2960 a SDict begin H.R end 2439 2960 a 2439 3022 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.9) cvn H.B /ANN pdfmark end 2439 3022 a FA(.)191 3308 y SDict begin H.S end 191 3308 a 191 3308 a SDict begin 13.6 H.A end 191 3308 a 191 3308 a SDict begin [/View [/XYZ H.V]/Dest (section*.2) cvn /DEST pdfmark end 191 3308 a Fx(Sparse)k(Jacobians)h(and)f(Sparse)g(Hessians)191 3529 y FA(T)-8 b(o)29 b(compute)f(the)h(en)m(tries)g(of)f(sparse)g (Jacobians)h(and)f(sparse)g(Hessians,)h(resp)s(ectiv)m(ely)-8 b(,)31 b(in)d(co)s(ordinate)191 3642 y(format)j(one)f(ma)m(y)h(use)f (the)h(driv)m(ers:)p Black Black 491 3855 a Fq(int)f(spa)m(rse)p 857 3855 28 4 v 33 w(jac\(tag,m,n,rep)s (eat,x,&nnz,&rind,&cind,&values,&options\))491 3968 y(sho)m(rt)h(int)f (tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 4081 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden) m(t)f(v)-5 b(ariables)31 b Fs(m)491 4194 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 4307 y Fq(int)f(rep)s(eat;)793 b FA(//)31 b(indicate)h(rep)s(eated)e(call)i(at)f(same)g(argumen)m(t) 491 4420 y Fq(double)g(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fs(x)491 4532 y Fq(int)e(nnz;)897 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(nonzeros)491 4645 y Fq(unsigned)h(int)e (rind[nnz];)338 b FA(//)31 b(ro)m(w)g(index)491 4758 y Fq(unsigned)g(int)e(cind[nnz];)329 b FA(//)31 b(column)g(index)491 4871 y Fq(double)g(values[nnz];)468 b FA(//)31 b(non-zero)g(v)-5 b(alues)491 4984 y Fq(int)30 b(options[4];)660 b FA(//)31 b(arra)m(y)g(of)g(con)m(trol)h(parameters)p Black Black 491 5330 a Fq(int)e(spa)m(rse)p 857 5330 V 33 w(hess\(tag,n,rep)s (eat,x,&nnz,&rind,&cind,&values,&options\))p Black Black eop end %%Page: 25 25 TeXDict begin 25 24 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.25) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(3.3)92 b(Driv)m(ers)31 b(for)f(Sparse)g(Jacobians)h(and)e(Sparse)h (Hessians)1338 b FA(25)p Black 491 606 a Fq(sho)m(rt)31 b(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 719 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)f FA(and)g Fs(m)25 b FA(=)g(1)491 832 y Fq(int)30 b(rep)s(eat;)793 b FA(//)31 b(indicate)h(rep)s(eated)e(call)i(at)f(same)g(argumen)m(t)491 945 y Fq(double)g(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector) i Fs(x)491 1058 y Fq(int)e(nnz;)897 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g (nonzeros)491 1171 y Fq(unsigned)h(int)e(rind[nnz];)338 b FA(//)31 b(ro)m(w)g(indices)491 1284 y Fq(unsigned)g(int)e (cind[nnz];)329 b FA(//)31 b(column)g(indices)491 1396 y Fq(double)g(values[nnz];)468 b FA(//)31 b(non-zero)g(v)-5 b(alues)491 1509 y Fq(int)30 b(options[2];)660 b FA(//)31 b(arra)m(y)g(of)g(con)m(trol)h(parameters)191 1843 y(Once)44 b(more,)49 b(the)c(input)e(v)-5 b(ariables)46 b(are)f(the)g(iden)m (ti\014er)f(for)h(the)f(in)m(ternal)i(represen)m(tation)f Fq(tag)p FA(,)k(if)191 1956 y(required)29 b(the)h(n)m(um)m(b)s(er)e(of) i(dep)s(enden)m(ts)e Fq(m)p FA(,)i(and)g(the)f(n)m(um)m(b)s(er)g(of)h (indep)s(enden)m(ts)e Fq(n)h FA(for)h(a)g(consistency)191 2069 y(c)m(hec)m(k.)40 b(F)-8 b(urthermore,)26 b(the)e(\015ag)h Fq(rep)s(eat=0)f FA(indicates)h(that)g(the)f(functions)g(are)h(called)g (at)g(a)g(p)s(oin)m(t)f(with)191 2182 y(a)35 b(new)f(sparsit)m(y)h (structure,)g(whereas)f Fq(rep)s(eat=1)h FA(results)f(in)g(the)h (re-usage)g(of)g(the)g(sparsit)m(y)g(pattern)191 2295 y(from)h(the)g(previous)g(call.)61 b(The)35 b(curren)m(t)i(v)-5 b(alues)36 b(of)h(the)g(indep)s(enden)m(ts)e(are)h(giv)m(en)i(b)m(y)e (the)h(arra)m(y)g Fq(x)p FA(.)191 2408 y(The)h(input/output)f(v)-5 b(ariable)39 b Fq(nnz)e FA(stores)i(the)f(n)m(um)m(b)s(er)f(of)h(the)g (nonzero)h(en)m(tries.)64 b(Therefore,)40 b Fq(nnz)191 2521 y FA(denotes)30 b(also)g(the)g(length)f(of)h(the)f(arra)m(ys)h Fq(r)p 1699 2521 28 4 v 33 w(ind)f FA(storing)h(the)f(ro)m(w)h (indices,)g Fq(c)p 2872 2521 V 33 w(ind)f FA(storing)g(the)h(column)191 2633 y(indices,)39 b(and)d Fq(values)g FA(storing)h(the)g(v)-5 b(alues)37 b(of)f(the)h(nonzero)g(en)m(tries.)61 b(If)36 b Fq(spa)m(rse)p 3016 2633 V 33 w(jac)h FA(and)f Fq(spa)m(rse)p 3606 2633 V 33 w(hess)191 2746 y FA(are)d(called)h(with)e Fq(rep)s(eat=0)p FA(,)i(the)e(functions)h(determine)f(the)h(n)m(um)m(b) s(er)f(of)g(nonzeros)h(for)g(the)f(sparsit)m(y)191 2859 y(pattern)k(de\014ned)f(b)m(y)h(the)g(v)-5 b(alue)36 b(of)g Fq(x)p FA(,)i(allo)s(cate)g(appropriate)e(arra)m(ys)g Fq(r)p 2739 2859 V 33 w(ind)p FA(,)h Fq(c)p 2990 2859 V 33 w(ind)p FA(,)h(and)d Fq(values)g FA(and)191 2972 y(store)d(the)g(desired)f(information)h(in)f(these)h(arra)m(ys.)45 b(During)32 b(the)f(next)h(function)g(call)g(with)g Fq(rep)s(eat=1)191 3085 y FA(the)d(allo)s(cated)i(memory)d(is)h(reused)f(suc)m(h)g(that)h (only)g(the)g(v)-5 b(alues)29 b(of)g(the)g(arra)m(ys)g(are)g(c)m (hanged.)41 b(Before)191 3198 y(calling)i Fq(spa)m(rse)p 724 3198 V 33 w(jac)g FA(or)e Fq(spa)m(rse)p 1259 3198 V 33 w(hess)h FA(once)h(more)f(with)g Fq(rep)s(eat=0)g FA(the)g(user)f(is)h(resp)s(onsible)f(for)h(the)191 3311 y(deallo)s(cation)33 b(of)d(the)h(arra)m(y)g Fq(r)p 1233 3311 V 32 w(ind)p FA(,)g Fq(c)p 1477 3311 V 33 w(ind)p FA(,)f(and)g Fq(values)f FA(using)h(the)h(function)f Fq(free\(\))p FA(!)332 3474 y(F)-8 b(or)30 b(eac)m(h)g(driv)m(er)f(the) g(arra)m(y)h Fq(options)f FA(can)h(b)s(e)e(used)g(to)i(adapted)f(the)h (computation)g(of)f(the)g(sparse)191 3587 y(deriv)-5 b(ativ)m(e)26 b(matrices)f(to)g(the)g(sp)s(ecial)f(needs)g(of)h (application)g(under)e(consideration.)40 b(Most)25 b(frequen)m(tly)-8 b(,)191 3699 y(the)34 b(default)g(options)g(will)h(giv)m(e)g(a)f (reasonable)h(p)s(erformance.)50 b(The)34 b(elemen)m(ts)h(of)f(the)g (arra)m(y)h Fq(options)191 3812 y FA(con)m(trol)d(the)e(action)i(of)f Fq(spa)m(rse)p 1264 3812 V 33 w(jac)f FA(according)i(to)1951 3812 y SDict begin H.S end 1951 3812 a Black FA(T)-8 b(able)31 b(2)p Black 2246 3749 a SDict begin H.R end 2246 3749 a 2246 3812 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.2) cvn H.B /ANN pdfmark end 2246 3812 a FA(.)332 3975 y(The)38 b(comp)s(onen)m(t)i Fq(options[1])g FA(determines)f(the)g (usage)g(of)g(the)g(safe)h(or)f(tigh)m(t)h(mo)s(de)e(of)h(sparsit)m(y) 191 4088 y(computation.)70 b(The)40 b(\014rst,)i(more)e(conserv)-5 b(ativ)m(e)42 b(option)e(is)g(the)g(default.)70 b(It)40 b(accoun)m(ts)h(for)f(all)h(de-)191 4201 y(p)s(endences)33 b(that)i(migh)m(t)g(o)s(ccur)g(for)f(an)m(y)g(v)-5 b(alue)35 b(of)g(the)f(indep)s(enden)m(t)g(v)-5 b(ariables.)53 b(F)-8 b(or)35 b(example,)i(the)191 4314 y(in)m(termediate)e Fq(c)f FA(=)f Fq(max)p FA(\()p Fq(a)p Fs(;)p Fq(b)p FA(\))h(is)f(alw)m (a)m(ys)i(assumed)e(to)h(dep)s(end)e(on)h(all)i(indep)s(enden)m(t)d(v) -5 b(ariables)34 b(that)191 4427 y Fq(a)d FA(or)g Fq(b)g FA(dep)s(enden)m(t)f(on,)i(i.e.)g(the)g(bit)f(pattern)h(asso)s(ciated)g (with)f Fq(c)h FA(is)f(set)h(to)g(the)f(logical)j Fq(OR)d FA(of)g(those)191 4540 y(asso)s(ciated)j(with)f Fq(a)g FA(and)f Fq(b)p FA(.)48 b(In)32 b(con)m(trast)j(the)e(tigh)m(t)h (option)f(giv)m(es)i(this)e(result)f(only)h(in)g(the)g(unlik)m(ely)191 4653 y(ev)m(en)m(t)k(of)f(an)f(exact)i(tie)f Fq(a)f FA(=)h Fq(b)p FA(.)55 b(Otherwise)36 b(it)g(sets)f(the)h(bit)g(pattern)f(asso) s(ciated)i(with)e Fq(c)h FA(either)g(to)191 4765 y(that)k(of)f Fq(a)f FA(or)h(to)h(that)g(of)f Fq(b)p FA(,)i(dep)s(ending)d(on)h (whether)f Fq(c)i FA(=)e Fq(a)h FA(or)g Fq(c)g FA(=)g Fq(b)g FA(lo)s(cally)-8 b(.)69 b(Ob)m(viously)-8 b(,)42 b(the)191 4878 y(sparsit)m(y)28 b(pattern)h(obtained)f(with)g(the)g (tigh)m(t)i(option)e(ma)m(y)h(con)m(tain)h(more)e(zeros)h(than)f(that)g (obtained)191 4991 y(with)e(the)h(safe)g(option.)40 b(On)25 b(the)i(other)g(hand,)f(it)h(will)g(only)g(b)s(e)f(v)-5 b(alid)27 b(at)g(p)s(oin)m(ts)f(b)s(elonging)h(to)g(an)g(area)191 5104 y(where)32 b(the)i(function)e Fs(F)46 b FA(is)34 b(lo)s(cally)g(analytic)h(and)d(that)i(con)m(tains)g(the)f(p)s(oin)m(t) g(at)h(whic)m(h)f(the)g(in)m(ternal)191 5217 y(represen)m(tation)28 b(w)m(as)e(generated.)41 b(Since)26 b(generating)i(the)f(sparsit)m(y)g (structure)f(using)g(the)g(safe)h(v)m(ersion)191 5330 y(do)s(es)d(not)h(require)g(an)m(y)g(reev)-5 b(aluation,)27 b(it)f(ma)m(y)f(th)m(us)f(reduce)h(the)f(o)m(v)m(erall)j(computational) g(cost)f(despite)p Black Black eop end %%Page: 26 26 TeXDict begin 26 25 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.26) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(26)2300 b Fu(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black Black Black Black 693 518 2596 4 v 692 631 4 113 v 743 597 a FA(comp)s(onen)m(t)p 1226 631 V 100 w(v)-5 b(alue)p 1530 631 V 3287 631 V 693 634 2596 4 v 692 747 4 113 v 774 713 a Fq(options[0])p 1226 747 V 1530 747 V 436 w FA(w)m(a)m(y)31 b(of)g(sparsit)m(y)g(pattern)f(computation)p 3287 747 V 692 860 V 1226 860 V 1357 826 a(0)p 1530 860 V 179 w(propagation)h(of)g(index)f(domains)g(\(default\))p 3287 860 V 692 973 V 1226 973 V 1357 939 a(1)p 1530 973 V 179 w(propagation)h(of)g(bit)f(pattern)p 3287 973 V 693 976 2596 4 v 692 1089 4 113 v 774 1055 a Fq(options[1])p 1226 1089 V 1530 1089 V 436 w FA(test)h(the)g(computational)h(graph)e (con)m(trol)i(\015o)m(w)p 3287 1089 V 692 1202 V 1226 1202 V 1357 1168 a(0)p 1530 1202 V 179 w(safe)f(mo)s(de)f(\(default\))p 3287 1202 V 692 1315 V 1226 1315 V 1357 1281 a(1)p 1530 1315 V 179 w(tigh)m(t)i(mo)s(de)p 3287 1315 V 693 1318 2596 4 v 692 1431 4 113 v 774 1397 a Fq(options[2])p 1226 1431 V 1530 1431 V 436 w FA(w)m(a)m(y)f(of)g(bit)f(pattern)h (propagation)p 3287 1431 V 692 1544 V 1226 1544 V 1357 1510 a(0)p 1530 1544 V 179 w(automatic)h(detection)g(\(default\))p 3287 1544 V 692 1657 V 1226 1657 V 1357 1623 a(1)p 1530 1657 V 179 w(forw)m(ard)e(mo)s(de)p 3287 1657 V 692 1770 V 1226 1770 V 1357 1736 a(2)p 1530 1770 V 179 w(rev)m(erse)h(mo)s(de)p 3287 1770 V 693 1773 2596 4 v 692 1886 4 113 v 774 1852 a Fq(options[3])p 1226 1886 V 1530 1886 V 436 w FA(w)m(a)m(y)g(of)g (compression)p 3287 1886 V 692 1999 V 1226 1999 V 1357 1965 a(0)p 1530 1999 V 179 w(column)f(compression)h(\(default\))p 3287 1999 V 692 2112 V 1226 2112 V 1357 2078 a(1)p 1530 2112 V 179 w(ro)m(w)g(compression)p 3287 2112 V 693 2115 2596 4 v Black 1235 2270 a(T)-8 b(able)31 b(2:)1596 2270 y SDict begin H.S end 1596 2270 a 1596 2270 a SDict begin H.R end 1596 2270 a 1596 2270 a SDict begin [/View [/XYZ H.V]/Dest (table.2) cvn /DEST pdfmark end 1596 2270 a 41 w Fq(spa)m(rse)p 1871 2270 28 4 v 33 w(jac)f FA(parameter)h Fq(options)p Black Black 191 2672 a FA(the)e(fact)h (that)g(it)g(pro)s(duces)e(more)h(nonzero)h(en)m(tries.)41 b(The)29 b(v)-5 b(alue)29 b(of)h Fq(options[2])g FA(selects)h(the)e (direction)191 2785 y(of)j(bit)h(pattern)f(propagation.)47 b(Dep)s(ending)32 b(on)g(the)h(n)m(um)m(b)s(er)d(of)j(indep)s(enden)m (t)e Fs(n)h FA(and)f(of)i(dep)s(enden)m(t)191 2898 y(v)-5 b(ariables)28 b Fs(m)e FA(one)h(w)m(ould)g(prefer)f(the)i(forw)m(ard)e (mo)s(de)g(if)h Fs(n)g FA(is)g(signi\014can)m(t)h(smaller)f(than)g Fs(m)g FA(and)f(w)m(ould)191 3011 y(otherwise)31 b(use)f(the)g(rev)m (erse)h(mo)s(de.)332 3173 y(The)d(elemen)m(ts)h(of)f(the)g(arra)m(y)g Fq(options)h FA(con)m(trol)g(the)f(action)h(of)g Fq(spa)m(rse)p 2742 3173 V 33 w(hess)e FA(according)i(to)3470 3173 y SDict begin H.S end 3470 3173 a Black FA(T)-8 b(able)31 b(3)p Black 3766 3110 a SDict begin H.R end 3766 3110 a 3766 3173 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.3) cvn H.B /ANN pdfmark end 3766 3173 a FA(.)p Black Black Black 693 3516 2596 4 v 692 3629 4 113 v 743 3595 a(comp)s(onen)m(t)p 1226 3629 V 100 w(v)-5 b(alue)p 1530 3629 V 3287 3629 V 693 3633 2596 4 v 692 3746 4 113 v 774 3712 a Fq(options[0])p 1226 3746 V 1530 3746 V 436 w FA(test)31 b(the)g(computational)h(graph)e(con)m(trol)i(\015o)m(w)p 3287 3746 V 692 3858 V 1226 3858 V 1357 3825 a(0)p 1530 3858 V 179 w(safe)f(mo)s(de)f(\(default\))p 3287 3858 V 692 3971 V 1226 3971 V 1357 3938 a(1)p 1530 3971 V 179 w(tigh)m(t)i(mo)s(de)p 3287 3971 V 693 3975 2596 4 v 692 4088 4 113 v 774 4054 a Fq(options[1])p 1226 4088 V 1530 4088 V 436 w FA(w)m(a)m(y)f(of)g(reco)m(v)m(ery)p 3287 4088 V 692 4201 V 1226 4201 V 1357 4167 a(0)p 1530 4201 V 179 w(indirect)g(reco)m(v)m(ery)h(\(default\))p 3287 4201 V 692 4313 V 1226 4313 V 1357 4280 a(1)p 1530 4313 V 179 w(direct)f(reco)m(v)m(ery)p 3287 4313 V 693 4317 2596 4 v Black 1211 4471 a(T)-8 b(able)31 b(3:)1572 4471 y SDict begin H.S end 1572 4471 a 1572 4471 a SDict begin H.R end 1572 4471 a 1572 4471 a SDict begin [/View [/XYZ H.V]/Dest (table.3) cvn /DEST pdfmark end 1572 4471 a 40 w Fq(spa)m(rse)p 1846 4471 28 4 v 33 w(hess)g FA(parameter)g Fq(options)p Black Black 332 4878 a FA(The)44 b(describ)s(ed)f(driv)m(er)h(routines)f(for)h(the)h (computation)g(of)f(sparse)g(deriv)-5 b(ativ)m(e)45 b(matrices)g(are) 191 4991 y(protot)m(yp)s(ed)33 b(in)f(the)h(header)f(\014le)h Ft()p FA(,)27 b(whic)m(h)32 b(is)h(included)f(auto-)191 5104 y(matically)26 b(b)m(y)e(the)g(global) h(header)f(\014le)g Ft()c FA(\(see)2455 5104 y SDict begin H.S end 2455 5104 a Black FA(Section)31 b(9.3)p Black 2889 5042 a SDict begin H.R end 2889 5042 a 2889 5104 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.3) cvn H.B /ANN pdfmark end 2889 5104 a FA(\).)39 b(Example)24 b(co)s(des)g(illus-)191 5217 y(trating)g(the)e(usage)i(of) f Fq(spa)m(rse)p 1206 5217 28 4 v 33 w(jac)g FA(and)f Fq(spa)m(rse)p 1768 5217 V 33 w(hess)g FA(can)h(b)s(e)g(found)e(in)h (the)h(\014le)g Ft(sparse_jacobian.cpp)191 5330 y FA(and)30 b Ft(sparse_hessian.cpp)25 b FA(con)m(tained)32 b(in)e Ft(examples/additional_exa)o(mple)o(s/sp)o(ars)o(e)p FA(.)p Black Black eop end %%Page: 27 27 TeXDict begin 27 26 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.27) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(3.3)92 b(Driv)m(ers)31 b(for)f(Sparse)g(Jacobians)h(and)e(Sparse)h (Hessians)1338 b FA(27)p Black 191 606 a SDict begin H.S end 191 606 a 191 606 a SDict begin 13.6 H.A end 191 606 a 191 606 a SDict begin [/View [/XYZ H.V]/Dest (section*.3) cvn /DEST pdfmark end 191 606 a Fx(Computation)34 b(of)h(Sparsit)m(y)h(P)m(attern)191 827 y FA(ADOL-C)26 b(o\013ers)g(a)g(con)m(v)m(enien)m(t)h(w)m(a)m(y)g(of)f(determining)f (the)h(sparsit)m(y)g(structure)f(of)h(a)g(Jacobian)g(matrix)191 940 y(using)k(the)g(function:)p Black Black 491 1170 a Fq(int)g(jac)p 736 1170 28 4 v 33 w(pat\(tag,)g(m,)h(n,)f(x,)h(JP)-8 b(,)31 b(options\))491 1282 y(sho)m(rt)g(int)f(tag;)810 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 1395 y Fq(int)f(m;)1079 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fs(m)491 1508 y Fq(int)f(n;)1104 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 1621 y Fq(double)g(x[n];)863 b FA(//)31 b(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(x)2865 1635 y FD(0)491 1734 y Fq(unsigned)g(int)e(JP[][];)586 b FA(//)31 b(ro)m(w)g(compressed)f(sparsit)m(y)h(structure)491 1847 y Fq(int)f(options[2];)780 b FA(//)31 b(arra)m(y)g(of)g(con)m (trol)h(parameters)191 2076 y(The)37 b(sparsit)m(y)i(pattern)f(of)g (the)g(Jacobian)g(is)g(computed)g(in)g(a)g(compressed)f(ro)m(w)h (format.)64 b(F)-8 b(or)39 b(this)191 2189 y(purp)s(ose,)g Fq(JP)g FA(has)g(to)g(b)s(e)g(an)f Fs(m)h FA(dimensional)g(arra)m(y)g (of)g(p)s(oin)m(ters)g(to)h Fq(unsigned)f(int)p FA(s,)h(i.e.,)j(one)c (has)191 2302 y Fq(unsigned)29 b(int*)f(JP[m])p FA(.)40 b(During)29 b(the)f(call)i(of)e Fq(jac)p 1854 2302 V 33 w(pat)p FA(,)h(the)f(n)m(um)m(b)s(er)k(^)-50 b Fs(n)2598 2316 y Fi(i)2654 2302 y FA(of)29 b(nonzero)f(en)m(tries)h(in)g(ro)m(w)f Fs(i)h FA(of)191 2415 y(the)e(Jacobian)h(is)f(determined)g(for)f(all)i (1)e Fo(\024)f Fs(i)h Fo(\024)f Fs(m)p FA(.)39 b(Then,)27 b(a)g(memory)g(allo)s(cation)i(is)f(p)s(erformed)d(suc)m(h)191 2528 y(that)30 b Fq(JP[i-1])h FA(p)s(oin)m(ts)f(to)h(a)f(blo)s(c)m(k)h (of)j(^)-49 b Fs(n)1525 2542 y Fi(i)1572 2528 y FA(+)19 b(1)30 b Fq(unsigned)g(int)g FA(for)g(all)g(1)c Fo(\024)f Fs(i)h Fo(\024)f Fs(m)k FA(and)h Fq(JP[i-1][0])h FA(is)f(set)h(to)196 2641 y(^)-50 b Fs(n)246 2655 y Fi(i)274 2641 y FA(.)50 b(Subsequen)m(tly)-8 b(,)34 b(the)g(column)f(indices)h(of)g(the)g Fs(j)39 b FA(nonzero)34 b(en)m(tries)g(in)f(the)h Fs(i)p FA(th)g(ro)m(w)f(are)h(stored)g(in)191 2754 y(the)d(comp)s(onen)m(ts)f Fq(JP[i-1][1])p FA(,)j(.)15 b(.)g(.)h(,)30 b Fq(JP[i-1][j])p FA(.)332 2916 y(The)39 b(elemen)m(ts)j(of)e(the)g(arra)m(y)g Fq(options)g FA(con)m(trol)h(the)f(action)h(of)f Fq(jac)p 2739 2916 V 33 w(pat)g FA(according)h(to)3470 2916 y SDict begin H.S end 3470 2916 a Black FA(T)-8 b(able)31 b(4)p Black 3766 2853 a SDict begin H.R end 3766 2853 a 3766 2916 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.4) cvn H.B /ANN pdfmark end 3766 2916 a FA(.)191 3029 y(The)36 b(v)-5 b(alue)37 b(of)f Fq(options[0])i FA(selects)g(the)f(w)m (a)m(y)g(to)g(compute)g(the)g(sparsit)m(y)f(pattern.)59 b(The)36 b(comp)s(onen)m(t)p Black Black Black 693 3152 2596 4 v 692 3264 4 113 v 743 3231 a(comp)s(onen)m(t)p 1226 3264 V 100 w(v)-5 b(alue)p 1530 3264 V 3287 3264 V 693 3268 2596 4 v 692 3381 4 113 v 774 3347 a Fq(options[0])p 1226 3381 V 1530 3381 V 436 w FA(w)m(a)m(y)31 b(of)g(sparsit)m(y)g (pattern)f(computation)p 3287 3381 V 692 3494 V 1226 3494 V 1357 3460 a(0)p 1530 3494 V 179 w(propagation)h(of)g(index)f (domains)g(\(default\))p 3287 3494 V 692 3607 V 1226 3607 V 1357 3573 a(1)p 1530 3607 V 179 w(propagation)h(of)g(bit)f (pattern)p 3287 3607 V 693 3610 2596 4 v 692 3723 4 113 v 774 3689 a Fq(options[1])p 1226 3723 V 1530 3723 V 436 w FA(test)h(the)g(computational)h(graph)e(con)m(trol)i(\015o)m(w)p 3287 3723 V 692 3836 V 1226 3836 V 1357 3802 a(0)p 1530 3836 V 179 w(safe)f(mo)s(de)f(\(default\))p 3287 3836 V 692 3949 V 1226 3949 V 1357 3915 a(1)p 1530 3949 V 179 w(tigh)m(t)i(mo)s(de)p 3287 3949 V 693 3952 2596 4 v 692 4065 4 113 v 774 4031 a Fq(options[2])p 1226 4065 V 1530 4065 V 436 w FA(w)m(a)m(y)f(of)g(bit)f(pattern)h (propagation)p 3287 4065 V 692 4178 V 1226 4178 V 1357 4144 a(0)p 1530 4178 V 179 w(automatic)h(detection)g(\(default\))p 3287 4178 V 692 4291 V 1226 4291 V 1357 4257 a(1)p 1530 4291 V 179 w(forw)m(ard)e(mo)s(de)p 3287 4291 V 692 4404 V 1226 4404 V 1357 4370 a(2)p 1530 4404 V 179 w(rev)m(erse)h(mo)s(de)p 3287 4404 V 693 4407 2596 4 v Black 1288 4561 a(T)-8 b(able)31 b(4:)1649 4561 y SDict begin H.S end 1649 4561 a 1649 4561 a SDict begin H.R end 1649 4561 a 1649 4561 a SDict begin [/View [/XYZ H.V]/Dest (table.4) cvn /DEST pdfmark end 1649 4561 a 41 w Fq(jac)p 1803 4561 28 4 v 33 w(pat)f FA(parameter)g Fq(options)p Black Black 191 4765 a(options[1])35 b FA(determines)e(the)h(usage)g(of)g(the)g (safe)g(or)f(tigh)m(t)i(mo)s(de)e(of)h(bit)f(pattern)h(propagation.)51 b(The)191 4878 y(\014rst,)37 b(more)f(conserv)-5 b(ativ)m(e)39 b(option)d(is)h(the)f(default.)58 b(It)37 b(accoun)m(ts)g(for)f(all)h (dep)s(endences)e(that)i(migh)m(t)191 4991 y(o)s(ccur)21 b(for)f(an)m(y)i(v)-5 b(alue)21 b(of)g(the)g(indep)s(enden)m(t)f(v)-5 b(ariables.)38 b(F)-8 b(or)22 b(example,)i(the)d(in)m(termediate)h Fq(c)g FA(=)e Fq(max)p FA(\()p Fq(a)p Fs(;)p Fq(b)p FA(\))191 5104 y(is)38 b(alw)m(a)m(ys)h(assumed)e(to)i(dep)s(end)d(on)i(all)h (indep)s(enden)m(t)e(v)-5 b(ariables)38 b(that)h Fq(a)e FA(or)h Fq(b)g FA(dep)s(enden)m(t)f(on,)j(i.e.)191 5217 y(the)e(bit)g(pattern)g(asso)s(ciated)h(with)e Fq(c)i FA(is)e(set)i(to)f(the)g(logical)j Fq(OR)c FA(of)h(those)g(asso)s (ciated)h(with)f Fq(a)f FA(and)191 5330 y Fq(b)p FA(.)56 b(In)34 b(con)m(trast)j(the)f(tigh)m(t)h(option)e(giv)m(es)i(this)e (result)h(only)f(in)g(the)h(unlik)m(ely)g(ev)m(en)m(t)h(of)f(an)f (exact)i(tie)p Black Black eop end %%Page: 28 28 TeXDict begin 28 27 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.28) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(28)2300 b Fu(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 606 a Fq(a)j FA(=)g Fq(b)p FA(.)47 b(Otherwise)32 b(it)h(sets)g(the)f(bit)h(pattern)f(asso)s(ciated)i(with)e Fq(c)h FA(either)g(to)g(that)g(of)g Fq(a)f FA(or)g(to)i(that)f(of)191 719 y Fq(b)p FA(,)h(dep)s(ending)e(on)h(whether)g Fq(c)h FA(=)f Fq(a)g FA(or)g Fq(c)h FA(=)f Fq(b)g FA(lo)s(cally)-8 b(.)52 b(Ob)m(viously)-8 b(,)35 b(the)e(sparsit)m(y)h(pattern)f (obtained)191 832 y(with)d(the)g(tigh)m(t)h(option)g(ma)m(y)f(con)m (tain)i(more)e(zeros)g(than)g(that)h(obtained)f(with)g(the)g(safe)h (option.)41 b(On)191 945 y(the)g(other)g(hand,)i(it)f(will)f(only)g(b)s (e)f(v)-5 b(alid)41 b(at)h(p)s(oin)m(ts)f(b)s(elonging)g(to)h(an)f (area)g(where)g(the)g(function)191 1058 y Fs(F)47 b FA(is)33 b(lo)s(cally)j(analytic)f(and)e(that)h(con)m(tains)h(the)f(p)s(oin)m(t) g(at)g(whic)m(h)f(the)h(in)m(ternal)h(represen)m(tation)f(w)m(as)191 1171 y(generated.)54 b(Since)34 b(generating)i(the)f(sparsit)m(y)f (structure)g(using)g(the)h(safe)f(v)m(ersion)h(do)s(es)f(not)h(require) 191 1284 y(an)m(y)29 b(reev)-5 b(aluation,)31 b(it)e(ma)m(y)g(th)m(us)f (reduce)h(the)g(o)m(v)m(erall)i(computational)f(cost)g(despite)e(the)h (fact)h(that)f(it)191 1396 y(pro)s(duces)j(more)h(nonzero)g(en)m (tries.)50 b(The)32 b(v)-5 b(alue)34 b(of)f Fq(options[2])h FA(selects)g(the)g(direction)f(of)h(bit)f(pattern)191 1509 y(propagation.)40 b(Dep)s(ending)25 b(on)h(the)g(n)m(um)m(b)s(er)e (of)i(indep)s(enden)m(t)f Fs(n)g FA(and)g(of)h(dep)s(enden)m(t)f(v)-5 b(ariables)26 b Fs(m)f FA(one)191 1622 y(w)m(ould)33 b(prefer)f(the)h(forw)m(ard)f(mo)s(de)g(if)h Fs(n)g FA(is)f (signi\014can)m(t)i(smaller)g(than)e Fs(m)h FA(and)f(w)m(ould)h (otherwise)g(use)191 1735 y(the)e(rev)m(erse)g(mo)s(de.)332 1898 y(The)39 b(routine)g Fq(jac)p 963 1898 28 4 v 33 w(pat)g FA(ma)m(y)h(use)f(the)h(propagation)g(of)g(bitpattern)f(to)h (determine)g(the)f(sparsit)m(y)191 2011 y(pattern.)j(Therefore,)31 b(a)g(kind)g(of)g(\\strip-mining")g(is)g(used)f(to)h(cop)s(e)g(with)g (large)h(matrix)f(dimensions.)191 2124 y(If)39 b(the)g(system)g(happ)s (ens)f(to)h(run)f(out)i(of)f(memory)-8 b(,)42 b(one)d(ma)m(y)h(reduce)f (the)g(v)-5 b(alue)40 b(of)f(the)g(constan)m(t)191 2237 y Fq(PQ)p 321 2237 V 33 w(STRIPMINE)p 832 2237 V 32 w(MAX)29 b FA(follo)m(wing)j(the)f(instructions)f(in)g Ft ()p FA(.)332 2399 y(The)d(driv)m(er)h(routine)g(is)g(protot)m(yp)s(ed)g(in)f(the)h (header)g(\014le)g Ft()p FA(,)191 2512 y(whic)m(h)21 b(is)g(included)f(automatically)k(b)m(y)d (the)g(global)i(header)e(\014le)g Ft()c FA(\(see)3296 2512 y SDict begin H.S end 3296 2512 a Black FA(Section)31 b(9.3)p Black 3730 2450 a SDict begin H.R end 3730 2450 a 3730 2512 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.3) cvn H.B /ANN pdfmark end 3730 2512 a FA(\).)191 2625 y(The)21 b(determination)i(of)f(sparsit)m(y)h (patterns)f(is)g(illustrated)g(b)m(y)g(the)g(examples)h Ft(sparse_jacobian.cpp)191 2738 y FA(and)30 b Ft(jacpatexam.cpp)c FA(con)m(tained)32 b(in)e Ft(examples/additional_exam)o(ple)o(s/sp)o (arse)o FA(.)332 2901 y(T)-8 b(o)45 b(compute)g(the)f(sparsit)m(y)h (pattern)g(of)f(a)h(Hessian)g(in)f(a)h(ro)m(w)g(compressed)f(form,)k (ADOL-C)191 3014 y(pro)m(vides)30 b(the)h(driv)m(er)p Black Black 491 3300 a Fq(int)f(hess)p 785 3300 28 4 v 33 w(pat\(tag,)g(n,)g(x,)h(HP)-8 b(,)31 b(options\))491 3413 y(sho)m(rt)g(int)f(tag;)810 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 3526 y Fq(int)f(n;)1104 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3639 y Fq(double)g(x[n];)863 b FA(//)31 b(indep)s(enden)m(t) f(v)-5 b(ariables)31 b Fs(x)2865 3653 y FD(0)491 3752 y Fq(unsigned)g(int)e(HP[][];)565 b FA(//)31 b(ro)m(w)g(compressed)f (sparsit)m(y)h(structure)491 3865 y Fq(int)f(option;)912 b FA(//)31 b(con)m(trol)h(parameter)191 4151 y(where)j(the)i(user)e (has)h(to)g(pro)m(vide)h Fq(HP)f FA(as)g(an)g Fs(n)g FA(dimensional)g(arra)m(y)g(of)g(p)s(oin)m(ters)g(to)h Fq(unsigned)f(int)p FA(s.)191 4264 y(After)25 b(the)f(function)g(call)i Fq(HP)f FA(con)m(tains)h(the)e(sparsit)m(y)h(pattern,)h(where)e Fq(HP[j][0])j FA(con)m(tains)e(the)g(n)m(um)m(b)s(er)191 4377 y(of)35 b(nonzero)h(elemen)m(ts)h(in)e(the)g Fs(j)5 b FA(th)36 b(ro)m(w)f(for)g(1)f Fo(\024)f Fs(j)39 b Fo(\024)34 b Fs(n)p FA(.)54 b(The)35 b(comp)s(onen)m(ts)h Fq(P[j][i])p FA(,)h(0)d Fs(<)p Fq(i)h Fo(\024)g Fq(P[j][0])191 4490 y FA(store)e(the)g(indices)g(of)g(these)g(en)m(tries.)48 b(F)-8 b(or)34 b(determining)e(the)h(sparsit)m(y)g(pattern,)h(ADOL-C)e (uses)h(the)191 4603 y(algorithm)g(describ)s(ed)f(in)g([)1145 4603 y SDict begin H.S end 1145 4603 a Black FA(15)p Black 1236 4544 a SDict begin H.R end 1236 4544 a 1236 4603 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Wa05a) cvn H.B /ANN pdfmark end 1236 4603 a FA(].)47 b(The)32 b(parameter)p Fq(option)i FA(determines)e(the)h(usage)g(of)f(the)h(safe)g(\()p Fq(option)191 4716 y(=)40 b(0)p FA(,)k(default\))e(or)e(tigh)m(t)i(mo)s (de)f(\()p Fq(option)g(=)g(1)p FA(\))g(of)g(the)g(computation)h(of)f (the)g(sparsit)m(y)g(pattern)f(as)191 4829 y(describ)s(ed)29 b(ab)s(o)m(v)m(e.)332 4991 y(This)c(driv)m(er)g(routine)h(is)f(protot)m (yp)s(ed)h(in)f(the)h(header)f(\014le)h Ft()p FA(,)191 5104 y(whic)m(h)21 b(is)g(included)f (automatically)k(b)m(y)d(the)g(global)i(header)e(\014le)g Ft()c FA(\(see)3296 5104 y SDict begin H.S end 3296 5104 a Black FA(Section)31 b(9.3)p Black 3730 5042 a SDict begin H.R end 3730 5042 a 3730 5104 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.3) cvn H.B /ANN pdfmark end 3730 5104 a FA(\).)191 5217 y(An)24 b(example)g(emplo)m (ying)h(the)g(pro)s(cedure)e Fq(hess)p 1840 5217 28 4 v 32 w(pat)h FA(can)g(b)s(e)g(found)f(in)g(the)i(\014le)f Ft(sparse_hessian.cpp)191 5330 y FA(con)m(tained)32 b(in)e Ft(examples/additional_exa)o(mple)o(s/s)o(pars)o(e)p FA(.)p Black Black eop end %%Page: 29 29 TeXDict begin 29 28 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.29) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(3.3)92 b(Driv)m(ers)31 b(for)f(Sparse)g(Jacobians)h(and)e(Sparse)h (Hessians)1338 b FA(29)p Black 191 606 a SDict begin H.S end 191 606 a 191 606 a SDict begin 13.6 H.A end 191 606 a 191 606 a SDict begin [/View [/XYZ H.V]/Dest (section*.4) cvn /DEST pdfmark end 191 606 a Fx(Calculation)35 b(of)g(Seed)g(Matrices)191 827 y FA(T)-8 b(o)33 b(compute)g(a)g (compressed)f(deriv)-5 b(ativ)m(e)34 b(matrix)f(from)f(a)g(giv)m(en)i (sparsit)m(y)f(pattern,)g(one)g(has)f(to)h(cal-)191 940 y(culate)f(an)f(appropriate)g(seed)g(matrix)g(that)g(can)g(b)s(e)f (used)g(as)h(input)f(for)h(the)g(deriv)-5 b(ativ)m(e)32 b(calculation.)191 1053 y(T)-8 b(o)29 b(facilitate)j(the)d(generation)h (of)e(seed)h(matrices)h(for)e(a)h(sparsit)m(y)g(pattern)g(giv)m(en)h (in)e(ro)m(w)h(compressed)191 1166 y(form,)g(ADOL-C)f(pro)m(vides)h (the)f(follo)m(wing)i(t)m(w)m(o)g(driv)m(ers,)f(whic)m(h)f(are)h(based) f(on)h(the)f(ColP)m(ac)m(k)j(library:)p Black Black 491 1393 a Fq(int)f(generate)p 948 1393 28 4 v 34 w(seed)p 1144 1393 V 33 w(jac\(m,)i(n,)e(JP)-8 b(,)31 b(S,)f(p\))491 1506 y(int)g(m;)1079 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m (t)f(v)-5 b(ariables)31 b Fs(m)491 1619 y Fq(int)f(n;)1104 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 1732 y Fq(unsigned)g(int)e(JP[][];)586 b FA(//)31 b(ro)m(w)g(compressed)f(sparsit)m(y)h(structure)f(of)g (Jacobian)491 1845 y Fq(double)h(S[n][p];)755 b FA(//)31 b(seed)g(matrix)491 1958 y Fq(int)f(p;)1104 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(columns)g(in)g Fs(S)191 2184 y FA(The)44 b(input)g(v)-5 b(ariables)45 b(to)g Fq(generate)p 1490 2184 V 34 w(seed)p 1686 2184 V 33 w(jac)g FA(are)g(the)g(n)m(um)m (b)s(er)e(of)i(dep)s(enden)m(t)e(v)-5 b(ariables)45 b Fs(m)p FA(,)k(the)191 2297 y(n)m(um)m(b)s(er)22 b(of)h(indep)s(enden)m (t)f(v)-5 b(ariables)24 b Fq(n)f FA(and)g(the)g(sparsit)m(y)h(pattern)f Fq(JP)g FA(of)h(the)f(Jacobian)h(computed)f(for)191 2410 y(example)32 b(b)m(y)g Fq(jac)p 789 2410 V 33 w(pat)p FA(.)45 b(First,)33 b Fq(generate)p 1585 2410 V 34 w(seed)p 1781 2410 V 33 w(jac)f FA(p)s(erforms)e(a)j(distance-2)g(coloring)g(of) f(the)g(bipartite)191 2523 y(graph)f(de\014ned)f(b)m(y)h(the)h(sparsit) m(y)g(pattern)f Fq(JP)g FA(as)h(describ)s(ed)e(in)h([)2494 2523 y SDict begin H.S end 2494 2523 a Black FA(3)p Black 2540 2464 a SDict begin H.R end 2540 2464 a 2540 2523 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GeMaPo05) cvn H.B /ANN pdfmark end 2540 2523 a FA(].)44 b(The)31 b(n)m(um)m(b)s(er)f (of)i(colors)g(needed)191 2636 y(for)40 b(the)g(coloring)h(determines)g (the)f(n)m(um)m(b)s(er)f(of)h(columns)g Fq(p)f FA(in)h(the)h(seed)f (matrix.)70 b(Subsequen)m(tly)-8 b(,)191 2749 y Fq(generate)p 516 2749 28 4 v 34 w(seed)p 712 2749 V 33 w(jac)27 b FA(allo)s(cates)j(the)d(memory)g(needed)f(b)m(y)h Fq(S)g FA(and)f(initializes)j Fq(S)d FA(according)i(to)g(the)f(graph)191 2862 y(coloring.)70 b(The)40 b(coloring)h(algorithm)g(that)f(is)g (applied)f(in)h Fq(generate)p 2647 2862 V 34 w(seed)p 2843 2862 V 33 w(jac)g FA(is)g(used)f(also)i(b)m(y)f(the)191 2975 y(driv)m(er)30 b Fq(spa)m(rse)p 688 2975 V 33 w(jac)h FA(describ)s(ed)e(earlier.)p Black Black 491 3224 a Fq(int)h(generate)p 948 3224 V 34 w(seed)p 1144 3224 V 33 w(hess\(n,)h(HP)-8 b(,)31 b(S,)g(p\))491 3337 y(int)f(n;)1104 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3450 y Fq(unsigned)g(int)e(HP[][];)565 b FA(//)31 b(ro)m(w)g(compressed)f(sparsit)m(y)h(structure)f(of)g(Jacobian)491 3563 y Fq(double)h(S[n][p];)755 b FA(//)31 b(seed)g(matrix)491 3676 y Fq(int)f(p;)1104 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(columns)g (in)g Fs(S)191 3925 y FA(The)24 b(input)g(v)-5 b(ariables)25 b(to)g Fq(generate)p 1410 3925 V 34 w(seed)p 1606 3925 V 33 w(hess)g FA(are)g(the)g(n)m(um)m(b)s(er)e(of)i(indep)s(enden)m(ts) e Fs(n)h FA(and)g(the)g(sparsit)m(y)191 4038 y(pattern)k Fq(HP)g FA(of)f(the)h(Hessian)g(computed)g(for)f(example)h(b)m(y)g Fq(hess)p 2437 4038 V 33 w(pat)p FA(.)39 b(First,)29 b Fq(generate)p 3223 4038 V 33 w(seed)p 3418 4038 V 34 w(hess)e FA(p)s(er-)191 4151 y(forms)33 b(an)h(appropriate)g(coloring)h (of)f(the)g(adjacency)g(graph)g(de\014ned)e(b)m(y)i(the)g(sparsit)m(y)g (pattern)g Fq(HP)p FA(:)191 4264 y(An)f(acyclic)j(coloring)f(in)e(the)h (case)h(of)f(an)g(indirect)f(reco)m(v)m(ery)j(of)e(the)g(Hessian)g (from)f(its)h(compressed)191 4377 y(represen)m(tation)41 b(and)e(a)h(star)g(coloring)h(in)e(the)h(case)h(of)e(a)h(direct)h(reco) m(v)m(ery)-8 b(.)70 b(Subsequen)m(tly)-8 b(,)42 b Fq(gener-)191 4490 y(ate)p 313 4490 V 33 w(seed)p 508 4490 V 33 w(hess)d FA(allo)s(cates)i(the)e(memory)g(needed)g(b)m(y)f Fq(S)h FA(and)f(initializes)j Fq(S)e FA(according)g(to)h(the)f(graph)191 4603 y(coloring.)67 b(The)39 b(coloring)h(algorithm)f(applied)g(in)g Fq(generate)p 2332 4603 V 34 w(seed)p 2528 4603 V 33 w(hess)g FA(is)g(used)f(also)h(b)m(y)g(the)g(driv)m(er)191 4716 y Fq(spa)m(rse)p 425 4716 V 33 w(hess)30 b FA(describ)s(ed)g (earlier.)332 4878 y(The)25 b(sp)s(eci\014c)h(set)h(of)f(criteria)h (used)e(to)i(de\014ne)e(a)h(seed)g(matrix)g Fs(S)31 b FA(dep)s(ends)24 b(on)i(whether)f(the)h(sparse)191 4991 y(deriv)-5 b(ativ)m(e)32 b(matrix)e(to)h(b)s(e)f(computed)g(is)g(a)h (Jacobian)g(\(nonsymmetric\))g(or)f(a)h(Hessian)f(\(symmetric\).)191 5104 y(It)d(also)h(dep)s(ends)c(on)j(whether)f(the)h(en)m(tries)h(of)f (the)g(deriv)-5 b(ativ)m(e)28 b(matrix)f(are)g(to)h(b)s(e)e(reco)m(v)m (ered)i(from)f(the)191 5217 y(compressed)k(represen)m(tation)i Fr(dir)-5 b(e)g(ctly)42 b FA(\(without)32 b(requiring)f(an)m(y)h (further)f(arithmetic\))i(or)f Fr(indir)-5 b(e)g(ctly)191 5330 y FA(\(for)32 b(example,)i(b)m(y)e(solving)h(for)f(unkno)m(wns)f (via)i(successiv)m(e)h(substitutions\).)46 b(Appropriate)32 b(reco)m(v)m(ery)p Black Black eop end %%Page: 30 30 TeXDict begin 30 29 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.30) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(30)2300 b Fu(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 606 a FA(routines)22 b(are)h(pro)m(vided)f(b)m(y)g(ColP)m(ac)m(k)j (and)d(used)f(in)h(the)h(driv)m(ers)f Fq(spa)m(rse)p 2650 606 28 4 v 33 w(jac)h FA(and)e Fq(spa)m(rse)p 3211 606 V 33 w(hess)i FA(describ)s(ed)191 719 y(in)33 b(the)h(previous)f (subsection.)51 b(Examples)33 b(with)h(a)g(detailed)g(analysis)g(of)g (the)g(emplo)m(y)m(ed)h(driv)m(ers)e(for)191 832 y(the)e(exploitation)h (of)f(sparsit)m(y)f(can)h(b)s(e)f(found)f(in)h(the)g(pap)s(ers)f([)2417 832 y SDict begin H.S end 2417 832 a Black FA(4)p Black 2463 773 a SDict begin H.R end 2463 773 a 2463 832 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GePoTaWa06) cvn H.B /ANN pdfmark end 2463 832 a FA(])i(and)e([)2720 832 y SDict begin H.S end 2720 832 a Black FA(5)p Black 2766 773 a SDict begin H.R end 2766 773 a 2766 832 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.GePoWa08) cvn H.B /ANN pdfmark end 2766 832 a FA(].)332 995 y(These)20 b(driv)m(er)h(routines)f(are)h (protot)m(yp)s(ed)f(in)h Ft()o FA(,)c(whic)m(h)j(is)h(in-)191 1108 y(cluded)f(automatically)j(b)m(y)d (the)h(global)g(header)f(\014le)h Ft()16 b FA(\(see)2880 1108 y SDict begin H.S end 2880 1108 a Black FA(Section)31 b(9.3)p Black 3314 1045 a SDict begin H.R end 3314 1045 a 3314 1108 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.3) cvn H.B /ANN pdfmark end 3314 1108 a FA(\).)38 b(An)20 b(exam-)191 1220 y(ple)i(co)s(de)g (illustrating)h(the)f(usage)h(of)f Fq(generate)p 1795 1220 28 4 v 34 w(seed)p 1991 1220 V 34 w(jac)g FA(and)f Fq(generate)p 2643 1220 V 34 w(seed)p 2839 1220 V 34 w(hess)h FA(can)g(b)s(e)f(found)g(in)h(the)191 1333 y(\014le)30 b Ft(sparse_jac_hess_exam.cpp)24 b FA(con)m(tained)32 b(in)e Ft(examples/additional_exam)o(ple)o(s/sp)o(arse)o FA(.)191 1480 y SDict begin H.S end 191 1480 a 191 1480 a SDict begin 13.6 H.A end 191 1480 a 191 1480 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.4) cvn /DEST pdfmark end 191 1480 a 146 x FB(3.4)112 b(Higher)38 b(Deriv)-6 b(ativ)m(e)37 b(T)-9 b(ensors)191 1848 y FA(Man)m(y)25 b(applications)h(in)e(scien)m(ti\014c)i(computing)f(need)f(second-)h (and)f(higher-order)g(deriv)-5 b(ativ)m(es.)40 b(Often,)191 1961 y(one)f(do)s(es)f(not)h(require)f(full)g(deriv)-5 b(ativ)m(e)40 b(tensors)f(but)e(only)i(the)g(deriv)-5 b(ativ)m(es)40 b(in)e(certain)h(directions)191 2073 y Fs(s)234 2087 y Fi(i)287 2073 y Fo(2)25 b FA(I)-20 b(R)452 2038 y Fi(n)499 2073 y FA(.)41 b(Supp)s(ose)28 b(a)j(collection)i(of)e Fs(p)f FA(directions)h Fs(s)2039 2087 y Fi(i)2092 2073 y Fo(2)25 b FA(I)-20 b(R)2257 2038 y Fi(n)2334 2073 y FA(is)30 b(giv)m(en,)i(whic)m(h)e(form)g(a)h(matrix)1403 2275 y Fs(S)56 b FA(=)50 b([)p Fs(s)1704 2289 y FD(1)1743 2275 y Fs(;)15 b(s)1826 2289 y FD(2)1866 2275 y Fs(;)g(:)g(:)g(:)h(;)f (s)2110 2289 y Fi(p)2150 2275 y FA(])51 b Fo(2)f FA(I)-20 b(R)2416 2238 y Fi(n)p Fm(\002)p Fi(p)2553 2275 y Fs(:)191 2477 y FA(One)40 b(p)s(ossible)h(c)m(hoice)h(is)f Fs(S)48 b FA(=)42 b Fs(I)1385 2491 y Fi(n)1472 2477 y FA(with)f Fs(p)h FA(=)g Fs(n)p FA(,)i(whic)m(h)c(leads)h(to)h(full)e(tensors)h(b) s(eing)f(ev)-5 b(aluated.)191 2590 y(ADOL-C)30 b(pro)m(vides)h(the)f (function)g Fq(tenso)m(r)p 1687 2590 28 4 v 34 w(eval)g FA(to)h(calculate)i(the)e(deriv)-5 b(ativ)m(e)32 b(tensors)742 2846 y SDict begin H.S end 742 2846 a 742 2846 a SDict begin 13.6 H.A end 742 2846 a 742 2846 a SDict begin [/View [/XYZ H.V]/Dest (equation.3.2) cvn /DEST pdfmark end 742 2846 a 10 w Fo(r)828 2808 y Fi(k)804 2868 y(S)870 2846 y Fs(F)13 b FA(\()p Fs(x)1028 2860 y FD(0)1068 2846 y FA(\))51 b(=)1308 2784 y Fs(@)1361 2751 y Fi(k)p 1285 2825 143 4 v 1285 2908 a Fs(@)5 b(z)1384 2882 y Fi(k)1437 2846 y Fs(F)13 b FA(\()p Fs(x)1595 2860 y FD(0)1655 2846 y FA(+)20 b Fs(S)5 b(z)t FA(\))1888 2714 y Fl(\014)1888 2768 y(\014)1888 2823 y(\014)1888 2877 y(\014)1919 2936 y Fi(z)s FD(=0)2074 2846 y Fo(2)25 b FA(I)-20 b(R)2239 2808 y Fi(p)2275 2785 y Fh(k)2408 2846 y FA(for)91 b Fs(k)28 b FA(=)d(0)p Fs(;)15 b(:)g(:)g(:)i(;)e(d)p Black 602 w FA(\(2\))p Black 191 3088 a(sim)m(ultaneously)-8 b(.)41 b(The)25 b(function)h Fq(tenso)m(r)p 1602 3088 28 4 v 34 w(eval)g FA(has)g(the)h(follo)m(wing)h(calling)g(sequence)e (and)g(parameters:)p Black Black 491 3324 a Fq(void)k(tenso)m(r)p 910 3324 V 34 w(eval\(tag,m,n,d,p,x,tenso)m(r,S\))491 3437 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 3550 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 3662 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3775 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 3888 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g (directions)h Fs(p)491 4001 y Fq(double)g(x[n];)743 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fs(x)3119 4015 y FD(0)491 4114 y Fq(double)g(tenso)m (r[m][size];)343 b FA(//)31 b(result)g(as)f(de\014ned)f(in)i(\()2620 4114 y SDict begin H.S end 2620 4114 a Black FA(2)p Black 2665 4056 a SDict begin H.R end 2665 4056 a 2665 4114 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.2) cvn H.B /ANN pdfmark end 2665 4114 a FA(\))g(in)f(compressed)g(form)491 4227 y Fq(double)h(S[n][p];)635 b FA(//)31 b(seed)g(matrix)g Fs(S)191 4462 y FA(Using)d(the)h(symmetry)e(of)i(the)f(tensors)g (de\014ned)f(b)m(y)i(\()2055 4462 y SDict begin H.S end 2055 4462 a Black FA(2)p Black 2101 4404 a SDict begin H.R end 2101 4404 a 2101 4462 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.2) cvn H.B /ANN pdfmark end 2101 4462 a FA(\),)g(the)f(memory)g(requiremen)m(t)h(can)f(b)s(e)f(reduced) 191 4575 y(enormously)-8 b(.)79 b(The)42 b(collection)k(of)d(tensors)g (up)f(to)h(order)g Fs(d)g FA(comprises)2830 4502 y Fl(\000)2871 4535 y Fi(p)p FD(+)p Fi(d)2917 4607 y(d)2998 4502 y Fl(\001)3083 4575 y FA(distinct)g(elemen)m(ts.)191 4702 y(Hence,)34 b(the)f(second)f(dimension)g(of)h Fq(tenso)m(r)h FA(m)m(ust)e(b)s(e)g (greater)i(or)e(equal)h(to)2875 4628 y Fl(\000)2917 4662 y Fi(p)p FD(+)p Fi(d)2962 4733 y(d)3044 4628 y Fl(\001)3086 4702 y FA(.)47 b(T)-8 b(o)33 b(compute)g(the)191 4829 y(deriv)-5 b(ativ)m(es,)39 b Fq(tenso)m(r)p 909 4829 28 4 v 34 w(eval)d FA(propagates)h(in)m(ternally)g(univ)-5 b(ariate)37 b(T)-8 b(a)m(ylor)37 b(series)g(along)3225 4755 y Fl(\000)3266 4788 y Fi(n)p FD(+)p Fi(d)p Fm(\000)p FD(1)3360 4860 y Fi(d)3491 4755 y Fl(\001)3568 4829 y FA(direc-)191 4941 y(tions.)k(Then)29 b(the)i(desired)f(v)-5 b(alues)31 b(are)f(in)m(terp)s(olated.)42 b(This)30 b(approac)m(h)g(is) h(describ)s(ed)e(in)h([)3344 4941 y SDict begin H.S end 3344 4941 a Black FA(9)p Black 3390 4883 a SDict begin H.R end 3390 4883 a 3390 4941 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Griewank97) cvn H.B /ANN pdfmark end 3390 4941 a FA(].)332 5104 y(The)35 b(access)i(of)f(individual)f(en)m(tries) h(in)f(symmetric)h(tensors)f(of)h(higher)f(order)g(is)h(a)g(little)h (tric)m(ky)-8 b(.)191 5217 y(W)g(e)32 b(alw)m(a)m(ys)h(store)f(the)f (deriv)-5 b(ativ)m(e)33 b(v)-5 b(alues)32 b(in)e(the)i(t)m(w)m(o)g (dimensional)g(arra)m(y)f Fq(tenso)m(r)h FA(and)f(pro)m(vide)g(t)m(w)m (o)191 5330 y(di\013eren)m(t)c(w)m(a)m(ys)h(of)f(accessing)i(them.)39 b(The)27 b(leading)g(dimension)g(of)g(the)g(tensor)g(arra)m(y)g(ranges) g(o)m(v)m(er)i(the)p Black Black eop end %%Page: 31 31 TeXDict begin 31 30 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.31) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(3.4)92 b(Higher)31 b(Deriv)-5 b(ativ)m(e)33 b(T)-8 b(ensors)2268 b FA(31)p Black 191 606 a(comp)s(onen)m(t)27 b(index)f Fs(i)h FA(of)g(the)f(function)h Fs(F)13 b FA(,)27 b(i.e.,)i Fs(F)1906 620 y Fi(i)p FD(+1)2051 606 y FA(for)e Fs(i)e FA(=)g(0)p Fs(;)15 b(:)g(:)g(:)i(;)e(m)e Fo(\000)g FA(1.)40 b(The)26 b(sub-arra)m(ys)g(p)s(oin)m(ted)191 719 y(to)40 b(b)m(y)f Fq(tenso)m(r[i])h FA(ha)m(v)m(e)h(iden)m(tical)g (structure)e(for)g(all)h Fs(i)p FA(.)67 b(Eac)m(h)40 b(of)g(them)f(represen)m(ts)g(the)g(symmetric)191 832 y(tensors)d(up)e(to)j(order)e Fs(d)h FA(of)g(the)g(scalar)g(function)g Fs(F)2039 846 y Fi(i)p FD(+1)2193 832 y FA(in)g Fs(p)f FA(v)-5 b(ariables.)57 b(The)3007 758 y Fl(\000)3048 792 y Fi(p)p FD(+)p Fi(d)3094 863 y(d)3175 758 y Fl(\001)3252 832 y FA(mixed)36 b(partial)191 945 y(deriv)-5 b(ativ)m(es)26 b(in)f(eac)m(h)h(of)f(the)g Fs(m)f FA(tensors)h(are)g(linearly)h (ordered)e(according)i(to)f(the)g(tetrahedral)h(sc)m(heme)191 1058 y(describ)s(ed)33 b(b)m(y)h(Kn)m(uth)f([)1041 1058 y SDict begin H.S end 1041 1058 a Black FA(12)p Black 1132 999 a SDict begin H.R end 1132 999 a 1132 1058 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Knuth73) cvn H.B /ANN pdfmark end 1132 1058 a FA(].)52 b(In)33 b(the)i(familiar)f (quadratic)h(case)g Fs(d)d FA(=)f(2)j(the)g(deriv)-5 b(ativ)m(e)36 b(with)e(resp)s(ect)191 1171 y(to)h Fs(z)348 1185 y Fi(j)418 1171 y FA(and)f Fs(z)641 1186 y Fi(k)717 1171 y FA(with)g Fs(z)k FA(as)c(in)g(\()1268 1171 y SDict begin H.S end 1268 1171 a Black FA(2)p Black 1314 1112 a SDict begin H.R end 1314 1112 a 1314 1171 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.2) cvn H.B /ANN pdfmark end 1314 1171 a FA(\))g(and)f Fs(j)k Fo(\024)31 b Fs(k)37 b FA(is)d(stored)g(at)g Fq(tenso)m(r[i][l])i FA(with)d Fs(l)g FA(=)e Fs(k)26 b Fo(\003)d FA(\()p Fs(k)j FA(+)c(1\))p Fs(=)p FA(2)j(+)d Fs(j)5 b FA(.)191 1284 y(A)m(t)42 b Fs(j)48 b FA(=)43 b(0)g(=)f Fs(k)i FA(and)d(hence)g Fs(l)k FA(=)d(0)f(w)m(e)h(\014nd)d(the)i(function)g(v)-5 b(alue)41 b Fs(F)2720 1298 y Fi(i)p FD(+1)2880 1284 y FA(itself)g(and)g(the)g(gradien)m(t)191 1396 y Fo(r)p Fs(F)325 1410 y Fi(i)p FD(+1)469 1396 y FA(=)25 b Fs(@)5 b(F)676 1410 y Fi(i)p FD(+1)795 1396 y Fs(=@)g(x)945 1411 y Fi(k)1019 1396 y FA(is)30 b(stored)g(at)i Fs(l)27 b FA(=)e Fs(k)s FA(\()p Fs(k)f FA(+)c(1\))p Fs(=)p FA(2)32 b(with)e Fs(j)h FA(=)24 b(0)31 b(for)f Fs(k)f FA(=)c(1)p Fs(;)15 b(:)g(:)g(:)i(;)e(p)p FA(.)332 1559 y(F)-8 b(or)27 b(general)g Fs(d)g FA(w)m(e)f(com)m(bine)h(the)f(v)-5 b(ariable)27 b(indices)f(to)h(a)g(m)m(ulti-index)f Fs(j)31 b FA(=)25 b(\()p Fs(j)3033 1573 y FD(1)3073 1559 y Fs(;)15 b(j)3150 1573 y FD(2)3191 1559 y Fs(;)g(:)g(:)g(:)h(;)f(j)3429 1574 y Fi(d)3471 1559 y FA(\),)27 b(where)191 1672 y Fs(j)228 1687 y Fi(k)306 1672 y FA(indicates)36 b(di\013eren)m(tiation) h(with)d(resp)s(ect)h(to)h(v)-5 b(ariable)36 b Fs(x)2322 1686 y Fi(j)2351 1698 y Fh(k)2427 1672 y FA(with)f Fs(j)2676 1687 y Fi(k)2752 1672 y Fo(2)d(f)p FA(0)p Fs(;)15 b FA(1)p Fs(;)g(:)g(:)g(:)k(;)c(p)p Fo(g)p FA(.)55 b(The)34 b(v)-5 b(alue)191 1785 y Fs(j)228 1800 y Fi(k)309 1785 y FA(=)38 b(0)h(indicates)g(no)f(di\013eren)m(tiation)i(so)f(that)f(all)h(lo)m(w) m(er)h(deriv)-5 b(ativ)m(es)39 b(are)g(also)g(con)m(tained)h(in)e(the) 191 1898 y(same)32 b(data)g(structure)f(as)h(describ)s(ed)e(ab)s(o)m(v) m(e)j(for)e(the)h(quadratic)g(case.)45 b(The)31 b(lo)s(cation)i(of)e (the)h(partial)191 2011 y(deriv)-5 b(ativ)m(e)32 b(sp)s(eci\014ed)e(b)m (y)g Fs(j)36 b FA(is)30 b(computed)g(b)m(y)h(the)f(function)p Black Black 491 2260 a Fq(int)g(tenso)m(r)p 856 2260 28 4 v 34 w(address\(d,)15 b(j\))491 2373 y(int)30 b(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 2485 y Fq(int)f(j[d];)908 b FA(//)31 b(m)m(ulti-index)g Fs(j)191 2734 y FA(and)c(it)h(ma)m(y)g(th)m(us)f(b)s(e)g(referenced)h (as)f Fq(tenso)m(r[i][tenso)m(r)p 2064 2734 V 36 w(address\(d,)15 b(j\)])p FA(.)41 b(Notice)29 b(that)f(the)g(address)f(com-)191 2847 y(putation)33 b(do)s(es)f(dep)s(end)e(on)j(the)f(degree)h Fs(d)g FA(but)f(not)g(on)h(the)f(n)m(um)m(b)s(er)f(of)i(directions)g Fs(p)p FA(,)g(whic)m(h)f(could)191 2960 y(theoretically)g(b)s(e)c (enlarged)i(without)f(the)h(need)f(to)h(reallo)s(cate)i(the)d(original) i(tensor.)40 b(Also,)30 b(the)g(com-)191 3073 y(p)s(onen)m(ts)22 b(of)h Fs(j)28 b FA(need)22 b(to)h(b)s(e)f(non-increasing.)38 b(T)-8 b(o)23 b(some)g(C)f(programmers)g(it)h(ma)m(y)g(app)s(ear)f (more)h(natural)191 3186 y(to)30 b(access)h(tensor)e(en)m(tries)i(b)m (y)e(successiv)m(e)i(dereferencing)e(in)g(the)h(form)f Fq(tenso)m(rentry[i][)15 b(j1)g(][)g(j2)g(])p Fs(:)g(:)g(:)5 b Fq([)15 b(jd)g(])p FA(.)191 3299 y(W)-8 b(e)35 b(ha)m(v)m(e)h(also)f (pro)m(vided)e(this)h(mo)s(de,)h(alb)s(eit)g(with)f(the)g(restriction)h (that)g(the)f(indices)h Fs(j)3354 3313 y FD(1)3394 3299 y Fs(;)15 b(j)3471 3313 y FD(2)3511 3299 y Fs(;)g(:)g(:)g(:)h(;)f(j) 3749 3314 y Fi(d)191 3412 y FA(are)35 b(non-increasing.)53 b(In)34 b(the)h(second)f(order)g(case)i(this)e(means)h(that)g(the)g (Hessian)g(en)m(tries)g(m)m(ust)f(b)s(e)191 3525 y(sp)s(eci\014ed)e(in) h(or)g(b)s(elo)m(w)g(the)g(diagonal.)49 b(If)33 b(this)f(restriction)i (is)f(violated)i(the)e(v)-5 b(alues)33 b(are)g(almost)h(cer-)191 3638 y(tain)27 b(to)h(b)s(e)e(wrong)h(and)f(arra)m(y)h(b)s(ounds)e(ma)m (y)i(b)s(e)g(violated.)41 b(W)-8 b(e)28 b(emphasize)f(that)h (subscripting)e(is)g(not)191 3751 y(o)m(v)m(erloaded)38 b(but)e(that)h Fq(tenso)m(rentry)g FA(is)g(a)g(con)m(v)m(en)m(tional)i (and)d(th)m(us)g(mo)s(derately)h(e\016cien)m(t)h(C)e(p)s(oin)m(ter)191 3863 y(structure.)k(Suc)m(h)28 b(a)i(p)s(oin)m(ter)f(structure)g(can)g (b)s(e)f(allo)s(cated)k(and)c(set)i(up)e(completely)j(b)m(y)e(the)g (function)p Black Black 491 4112 a Fq(void**)i(tenso)m (rsetup\(m,p,d,tenso)m(r\))491 4225 y(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 4338 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(directions)h Fs(p)491 4451 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 4564 y Fq(double)g(tenso)m(r[m][size];)343 b FA(//)31 b(p)s(oin)m(ter)g(to)g(t)m(w)m(o)h(dimensional)e(arra)m(y) 191 4829 y(Here,)35 b Fq(tenso)m(r)g FA(is)f(the)g(arra)m(y)h(of)f Fs(m)f FA(p)s(oin)m(ters)h(p)s(oin)m(ting)g(to)h(arra)m(ys)f(of)g Fq(size)f Fo(\025)2901 4755 y Fl(\000)2943 4788 y Fi(p)p FD(+)p Fi(d)2988 4860 y(d)3069 4755 y Fl(\001)3145 4829 y FA(allo)s(cated)j(b)m(y)e(the)191 4941 y(user)29 b(b)s(efore.)40 b(During)30 b(the)g(execution)h(of)f Fq(tenso)m(rsetup)p FA(,)i Fs(d)19 b Fo(\000)h FA(1)30 b(la)m(y)m(ers)h(of)f(p)s(oin)m (ters)g(are)h(set)f(up)f(so)h(that)191 5054 y(the)h(return)e(v)-5 b(alue)31 b(allo)m(ws)g(the)g(direct)g(dereferencing)f(of)h(individual) f(tensor)g(elemen)m(ts.)332 5217 y(F)-8 b(or)45 b(example,)k(supp)s (ose)43 b(some)i(activ)m(e)i(section)f(in)m(v)m(olving)g Fs(m)j Fo(\025)f FA(5)d(dep)s(enden)m(ts)e(and)h Fs(n)49 b Fo(\025)f FA(2)191 5330 y(indep)s(enden)m(ts)31 b(has)h(b)s(een)g (executed)h(and)f(tap)s(ed.)46 b(W)-8 b(e)33 b(ma)m(y)g(select)h Fs(p)29 b FA(=)f(2,)33 b Fs(d)c FA(=)f(3)33 b(and)f(initialize)j(the)p Black Black eop end %%Page: 32 32 TeXDict begin 32 31 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.32) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(32)2300 b Fu(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 606 a Fs(n)24 b Fo(\002)f FA(2)37 b(seed)f(matrix)g Fs(S)41 b FA(with)36 b(t)m(w)m(o)i(columns)d Fs(s)1840 620 y FD(1)1916 606 y FA(and)g Fs(s)2141 620 y FD(2)2180 606 y FA(.)58 b(Then)35 b(w)m(e)i(are)f(able)h(to)g(execute)g(the)f(co) s(de)191 719 y(segmen)m(t)p Black Black 491 974 a Fq(double****)d (tenso)m(rentry)e(=)f(\(double****\))j(tenso)m(rsetup\(m,p,d,tenso)m (r\);)491 1086 y(tenso)m(r)p 724 1086 28 4 v 34 w (eval\(tag,m,n,d,p,x,tenso)m(r,S\);)191 1341 y FA(This)g(w)m(a)m(y)-8 b(,)35 b(w)m(e)f(ev)-5 b(aluated)35 b(all)f(tensors)g(de\014ned)e(in)h (\()2056 1341 y SDict begin H.S end 2056 1341 a Black FA(2)p Black 2102 1282 a SDict begin H.R end 2102 1282 a 2102 1341 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.2) cvn H.B /ANN pdfmark end 2102 1341 a FA(\))h(up)e(to)i(degree)g(3)g (in)f(b)s(oth)g(directions)h Fs(s)3572 1355 y FD(1)3644 1341 y FA(and)191 1454 y Fs(s)234 1468 y FD(2)306 1454 y FA(at)f(some)h(argumen)m(t)f Fs(x)p FA(.)48 b(T)-8 b(o)34 b(allo)m(w)g(the)f(access)h(of)f(tensor)g(en)m(tries)h(b)m(y)f (dereferencing)g(the)g(p)s(oin)m(ter)191 1567 y(structure)d Fq(tenso)m(rentry)h FA(has)f(b)s(een)g(created.)42 b(No)m(w,)31 b(the)g(v)-5 b(alue)31 b(of)f(the)h(mixed)f(partial)1407 1777 y Fs(@)1460 1744 y FD(3)1500 1777 y Fs(F)1558 1791 y FD(5)1598 1777 y FA(\()p Fs(x)20 b FA(+)g Fs(s)1839 1791 y FD(1)1878 1777 y Fs(z)1920 1791 y FD(1)1980 1777 y FA(+)g Fs(s)2114 1791 y FD(2)2153 1777 y Fs(z)2195 1791 y FD(2)2235 1777 y FA(\))p 1407 1818 864 4 v 1702 1903 a Fs(@)5 b(z)1801 1871 y FD(2)1797 1929 y(1)1841 1903 y Fs(@)g(z)1936 1917 y FD(2)2280 1707 y Fl(\014)2280 1761 y(\014)2280 1816 y(\014)2280 1870 y(\014)2310 1933 y Fi(z)2343 1942 y Fw(1)2378 1933 y FD(=0=)p Fi(z)2556 1942 y Fw(2)191 2122 y FA(can)31 b(b)s(e)e(reco)m(v)m(ered)j(as)p Black Black 799 2377 a Fq(tenso)m(rentry[4][2][1][1])186 b FA(or)180 b Fq(tenso)m(r[4][tenso)m(r)p 2639 2377 28 4 v 36 w(address\(d,)15 b(j\)])p FA(,)191 2631 y(where)30 b(the)g(in)m(teger)i(arra)m(y)f Fq(j)g FA(ma)m(y)g(equal)f(\(1,1,2\),)k (\(1,2,1\))e(or)f(\(2,1,1\).)43 b(Analogously)-8 b(,)32 b(the)f(en)m(try)p Black Black 811 2886 a Fq(tenso)m (rentry[2][1][0][0])186 b FA(or)181 b Fq(tenso)m(r[2][tenso)m(r)p 2652 2886 V 36 w(address\(d,)15 b(j\)])191 3140 y FA(with)26 b Fq(j)i FA(=)e(\(1,0,0\))j(con)m(tains)f(the)f(\014rst)g(deriv)-5 b(ativ)m(e)28 b(of)f(the)g(third)f(dep)s(enden)m(t)g(v)-5 b(ariable)28 b Fs(F)3240 3154 y FD(3)3306 3140 y FA(with)f(resp)s(ect) 191 3253 y(to)k(the)g(\014rst)e(di\013eren)m(tiation)j(parameter)f Fs(z)1709 3267 y FD(1)1749 3253 y FA(.)332 3416 y(Note,)36 b(that)f(the)f(p)s(oin)m(ter)g(structure)f Fq(tenso)m(rentry)i FA(has)f(to)h(b)s(e)e(set)h(up)f(only)h(once.)52 b(Changing)34 b(the)191 3529 y(v)-5 b(alues)30 b(of)f(the)h(arra)m(y)g Fq(tenso)m(r)p FA(,)h(e.g.)g(b)m(y)e(a)h(further)e(call)j(of)f Fq(tenso)m(r)p 2413 3529 V 33 w(eval)p FA(,)g(directly)g(e\013ects)h (the)f(v)-5 b(alues)30 b(ac-)191 3642 y(cessed)23 b(b)m(y)g Fq(tenso)m(rentry)p FA(.)39 b(When)22 b(no)h(more)g(deriv)-5 b(ativ)m(e)24 b(ev)-5 b(aluations)24 b(are)f(desired)g(the)f(p)s(oin)m (ter)h(structure)191 3755 y Fq(tenso)m(rentry)31 b FA(can)g(b)s(e)f (deallo)s(cated)i(b)m(y)e(a)h(call)h(to)f(the)g(function)p Black Black 491 4009 a Fq(int)f(freetenso)m(r\(m,p,d,)j(\(double)e (****\))i(tenso)m(rentry\))491 4122 y(int)d(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 4235 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(p)491 4348 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 4461 y Fq(double***)h(tenso)m (rentry[m];)203 b FA(//)31 b(return)f(v)-5 b(alue)31 b(of)f Fq(tenso)m(rsetup)191 4716 y FA(that)h(do)s(es)f(not)h(deallo)s (cate)h(the)f(arra)m(y)g Fq(tenso)m(r)p FA(.)332 4878 y(The)f(driv)m(ers)h(pro)m(vided)f(for)g(e\016cien)m(t)i(calculation)h (of)e(higher)f(order)h(deriv)-5 b(ativ)m(es)32 b(are)f(protot)m(yp)s (ed)191 4991 y(in)h(the)g(header)g(\014le)g Ft ()p FA(,)26 b(whic)m(h)32 b(is)g(included)g(b)m (y)g(the)g(global)i(header)e(\014le)191 5104 y Ft()e FA(automatically)37 b(\(see)1704 5104 y SDict begin H.S end 1704 5104 a Black FA(Section)31 b(9.3)p Black 2139 5042 a SDict begin H.R end 2139 5042 a 2139 5104 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.3) cvn H.B /ANN pdfmark end 2139 5104 a FA(\).)52 b(Example)35 b(co)s(des)f(using)g(the)g (ab)s(o)m(v)m(e)i(pro)s(ce-)191 5217 y(dures)e(can)i(b)s(e)e(found)g (in)h(the)h(\014les)f Ft(taylorexam.C)d FA(and)i Ft(accessexam.C)e FA(con)m(tained)37 b(in)e(the)g(sub)s(di-)191 5330 y(rectory)c Ft(examples/additional_examp)o(les)o(/tay)o(lor)o FA(.)p Black Black eop end %%Page: 33 33 TeXDict begin 33 32 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.33) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(3.5)92 b(Deriv)-5 b(ativ)m(es)33 b(of)d(Implicit)h(and)f(In)m(v)m (erse)h(F)-8 b(unctions)1515 b FA(33)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.5) cvn /DEST pdfmark end 191 515 a 91 x FB(3.5)112 b(Deriv)-6 b(ativ)m(es)38 b(of)g(Implicit)f(and)i(In)m(v)m (erse)e(F)-9 b(unctions)191 827 y FA(F)h(requen)m(tly)g(,)26 b(one)c(needs)g(deriv)-5 b(ativ)m(es)24 b(of)e(v)-5 b(ariables)23 b Fs(y)28 b Fo(2)d FA(I)-20 b(R)2201 792 y Fi(m)2290 827 y FA(that)23 b(are)f(implicitly)i(de\014ned)d(as)h(functions)191 940 y(of)30 b(some)h(v)-5 b(ariables)31 b Fs(x)25 b Fo(2)g FA(I)-20 b(R)1142 905 y Fi(n)p Fm(\000)p Fi(m)1336 940 y FA(b)m(y)30 b(an)h(algebraic)h(system)e(of)h(equations)1160 1144 y Fs(G)p FA(\()p Fs(z)t FA(\))52 b(=)e(0)26 b Fo(2)f FA(I)-20 b(R)1756 1106 y Fi(m)1913 1144 y FA(with)91 b Fs(z)29 b FA(=)c(\()p Fs(y)s(;)15 b(x)p FA(\))27 b Fo(2)d FA(I)-20 b(R)2750 1106 y Fi(n)2797 1144 y Fs(:)191 1347 y FA(Naturally)-8 b(,)28 b(the)e Fs(n)f FA(argumen)m(ts)h(of)g Fs(G)g FA(need)f(not)h(b)s(e)f(partitioned)h(in)g(this)f(regular)h (fashion)f(and)g(w)m(e)i(wish)191 1460 y(to)38 b(pro)m(vide)f (\015exibilit)m(y)i(for)e(a)h(con)m(v)m(enien)m(t)h(selection)g(of)e (the)h Fs(n)24 b Fo(\000)h Fs(m)37 b Fr(truly)h FA(indep)s(enden)m(t)e (v)-5 b(ariables.)191 1573 y(Let)33 b Fs(P)43 b Fo(2)28 b FA(I)-20 b(R)626 1537 y FD(\()p Fi(n)p Fm(\000)p Fi(m)p FD(\))p Fm(\002)p Fi(n)975 1573 y FA(b)s(e)32 b(a)i(0)22 b Fo(\000)f FA(1)34 b(matrix)f(that)g(pic)m(ks)g(out)g(these)h(v)-5 b(ariables)33 b(so)g(that)h(it)f(is)g(a)g(column)191 1686 y(p)s(erm)m(utation)d(of)h(the)g(matrix)f([0)p Fs(;)15 b(I)1417 1700 y Fi(n)p Fm(\000)p Fi(m)1583 1686 y FA(])25 b Fo(2)g FA(I)-20 b(R)1798 1650 y FD(\()p Fi(n)p Fm(\000)p Fi(m)p FD(\))p Fm(\002)p Fi(n)2115 1686 y FA(.)41 b(Then)29 b(the)i(nonlinear)f(system)1565 1889 y Fs(G)p FA(\()p Fs(z)t FA(\))52 b(=)e(0)p Fs(;)106 b(P)13 b(z)30 b FA(=)25 b Fs(x;)191 2092 y FA(has)30 b(a)i(regular)f(Jacobian,)g(wherev)m(er)g (the)g(implicit)h(function)e(theorem)i(yields)e Fs(y)k FA(as)d(a)g(function)g(of)g Fs(x)p FA(.)191 2205 y(Hence,)g(w)m(e)g(ma) m(y)g(also)h(write)1232 2205 y SDict begin H.S end 1232 2205 a 1232 2205 a SDict begin 13.6 H.A end 1232 2205 a 1232 2205 a SDict begin [/View [/XYZ H.V]/Dest (equation.3.3) cvn /DEST pdfmark end 1232 2205 a 1218 2457 a Fs(F)13 b FA(\()p Fs(z)t FA(\))26 b(=)1527 2329 y Fl(\022)1636 2401 y Fs(G)p FA(\()p Fs(z)t FA(\))1671 2514 y Fs(P)13 b(z)1866 2329 y Fl(\023)1983 2457 y Fo(\021)2104 2329 y Fl(\022)2249 2401 y FA(0)2213 2514 y Fs(P)g(z)2372 2329 y Fl(\023)2489 2457 y Fo(\021)50 b Fs(S)20 b(x;)912 b FA(\(3\))191 2725 y(where)33 b Fs(S)j FA(=)31 b([0)p Fs(;)15 b(I)801 2739 y Fi(p)842 2725 y FA(])867 2692 y Fi(T)953 2725 y Fo(2)31 b FA(I)-20 b(R)1124 2689 y Fi(n)p Fm(\002)p Fi(p)1295 2725 y FA(with)34 b Fs(p)d FA(=)f Fs(n)23 b Fo(\000)f Fs(m)p FA(.)51 b(No)m(w,)35 b(w)m(e)g(ha)m(v)m(e)g(rewritten)f(the)g(original)h(implicit)191 2838 y(functional)c(relation)h(b)s(et)m(w)m(een)f Fs(x)g FA(and)f Fs(y)k FA(as)d(an)f(in)m(v)m(erse)i(relation)g Fs(F)13 b FA(\()p Fs(z)t FA(\))27 b(=)f Fs(S)5 b(x)p FA(.)41 b(In)30 b(practice,)j(w)m(e)e(ma)m(y)191 2950 y(implemen)m(t)f(the)g(pro)5 b(jection)30 b Fs(P)42 b FA(simply)29 b(b)m(y)h(marking)f Fs(n)18 b Fo(\000)g Fs(m)30 b FA(of)f(the)h(indep)s(enden)m(ts)e(also)i(dep)s(enden)m(t.) 332 3113 y(Giv)m(en)23 b(an)m(y)g Fs(F)38 b FA(:)26 b(I)-20 b(R)977 3077 y Fi(n)1049 3113 y Fo(7!)25 b FA(I)-20 b(R)1245 3077 y Fi(n)1314 3113 y FA(that)23 b(is)f(lo)s(cally)i(in)m(v)m (ertible)f(and)f(an)g(arbitrary)g(seed)g(matrix)h Fs(S)30 b Fo(2)25 b FA(I)-20 b(R)3653 3077 y Fi(n)p Fm(\002)p Fi(p)191 3226 y FA(w)m(e)33 b(ma)m(y)h(ev)-5 b(aluate)34 b(all)g(deriv)-5 b(ativ)m(es)34 b(of)f Fs(z)h Fo(2)29 b FA(I)-20 b(R)1820 3190 y Fi(n)1900 3226 y FA(with)32 b(resp)s(ect)h(to)g Fs(x)d Fo(2)f FA(I)-20 b(R)2787 3190 y Fi(p)2859 3226 y FA(b)m(y)33 b(calling)h(the)f(follo)m(wing)191 3339 y(routine:)p Black Black 491 3576 a Fq(void)d(inverse)p 939 3576 28 4 v 33 w(tenso)m(r)p 1200 3576 V 34 w (eval\(tag,n,d,p,z,tenso)m(r,S\))491 3689 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 3802 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(v)-5 b(ariables)31 b Fs(n)491 3914 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 4027 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(directions)h Fs(p)491 4140 y Fq(double)g(z[n];)745 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fs(z)491 4253 y Fq(double)g(tenso)m(r[n][size];)368 b FA(//)31 b(partials)g(of)g Fs(z)k FA(with)30 b(resp)s(ect)g(to)h Fs(x)491 4366 y Fq(double)g(S[n][p];)635 b FA(//)31 b(seed)g(matrix)g Fs(S)191 4603 y FA(The)f(results)g(obtained)h(in)g Fq(tenso)m(r)g FA(are)g(exactly)i(the)d(same)h(as)g(if)g(w)m(e)g(had)f(called)i Fq(tenso)m(r)p 3255 4603 V 33 w(eval)f FA(with)f Fq(tag)191 4716 y FA(p)s(oin)m(ting)e(to)g(a)f(tap)s(e)h(for)f(the)g(ev)-5 b(aluation)29 b(of)f(the)f(in)m(v)m(erse)i(function)e Fs(z)i FA(=)c Fs(F)2796 4683 y Fm(\000)p FD(1)2890 4716 y FA(\()p Fs(y)s FA(\))j(for)f(whic)m(h)g(naturally)191 4829 y Fs(n)39 b FA(=)g Fs(m)p FA(.)65 b(Note)41 b(that)e(the)g (columns)f(of)h Fs(S)44 b FA(b)s(elong)39 b(to)g(the)g(domain)g(of)g (that)g(function.)66 b(Individual)191 4941 y(deriv)-5 b(ativ)m(e)38 b(comp)s(onen)m(ts)f(can)g(b)s(e)f(accessed)h(in)g (tensor)f(exactly)j(as)d(in)h(the)f(explicit)i(case)g(describ)s(ed)191 5054 y(ab)s(o)m(v)m(e.)332 5217 y(It)i(m)m(ust)f(b)s(e)g(understo)s(o)s (d)e(that)j Fq(inverse)p 1759 5217 V 33 w(tenso)m(r)p 2020 5217 V 34 w(eval)f FA(actually)i(computes)f(the)f(deriv)-5 b(ativ)m(es)41 b(of)f Fs(z)191 5330 y FA(with)33 b(resp)s(ect)g(to)h Fs(x)f FA(that)g(is)h(de\014ned)d(b)m(y)i(the)h(equation)g Fs(F)13 b FA(\()p Fs(z)t FA(\))30 b(=)g Fs(F)13 b FA(\()p Fs(z)2652 5344 y FD(0)2692 5330 y FA(\))23 b(+)e Fs(S)f(x)p FA(.)49 b(In)33 b(other)g(w)m(ords)g(the)p Black Black eop end %%Page: 34 34 TeXDict begin 34 33 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.34) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(34)2300 b Fu(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 606 a FA(base)e(p)s(oin)m(t)g(at)h(whic)m(h)e(the)i(in)m(v)m(erse)g (function)e(is)h(di\013eren)m(tiated)i(is)e(giv)m(en)h(b)m(y)e Fs(F)13 b FA(\()p Fs(z)3025 620 y FD(0)3066 606 y FA(\).)40 b(The)26 b(routine)h(has)191 719 y(no)36 b(capabilit)m(y)h(for)e(in)m (v)m(erting)i Fs(F)49 b FA(itself)36 b(as)g(solving)h(systems)e(of)h (nonlinear)g(equations)g Fs(F)13 b FA(\()p Fs(z)t FA(\))35 b(=)f(0)i(in)191 832 y(the)d(\014rst)f(place)i(is)g(not)f(just)f(a)i (di\013eren)m(tiation)h(task.)49 b(Ho)m(w)m(ev)m(er,)36 b(the)d(routine)g Fq(jac)p 3105 832 28 4 v 33 w(solv)g FA(describ)s(ed)f(in)191 945 y SDict begin H.S end 191 945 a Black FA(Section)f(3.1)p Black 625 883 a SDict begin H.R end 625 883 a 625 945 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end 625 945 a 31 w FA(ma)m(y)g (certainly)g(b)s(e)f(v)m(ery)h(useful)e(for)h(that)h(purp)s(ose.)332 1108 y(As)f(an)h(example)g(consider)f(the)h(follo)m(wing)g(t)m(w)m(o)h (nonlinear)e(expressions)1225 1357 y Fs(G)1296 1371 y FD(1)1336 1357 y FA(\()p Fs(z)1413 1371 y FD(1)1453 1357 y Fs(;)15 b(z)1535 1371 y FD(2)1575 1357 y Fs(;)g(z)1657 1371 y FD(3)1697 1357 y Fs(;)g(z)1779 1371 y FD(4)1820 1357 y FA(\))83 b(=)g Fs(z)2138 1319 y FD(2)2134 1379 y(1)2198 1357 y FA(+)19 b Fs(z)2334 1319 y FD(2)2330 1379 y(2)2394 1357 y Fo(\000)h Fs(z)2531 1319 y FD(2)2527 1379 y(3)1225 1494 y Fs(G)1296 1508 y FD(2)1336 1494 y FA(\()p Fs(z)1413 1508 y FD(1)1453 1494 y Fs(;)15 b(z)1535 1508 y FD(2)1575 1494 y Fs(;)g(z)1657 1508 y FD(3)1697 1494 y Fs(;)g(z)1779 1508 y FD(4)1820 1494 y FA(\))83 b(=)g(cos\()p Fs(z)2290 1508 y FD(4)2330 1494 y FA(\))21 b Fo(\000)f Fs(z)2519 1508 y FD(1)2559 1494 y Fs(=z)2646 1508 y FD(3)2731 1494 y Fs(:)191 1744 y FA(The)j(equations)i Fs(G)p FA(\()p Fs(z)t FA(\))h(=)f(0)f(describ)s(e)f(the)h(relation)h(b) s(et)m(w)m(een)g(the)f(Cartesian)g(co)s(ordinates)g(\()p Fs(z)3423 1758 y FD(1)3463 1744 y Fs(;)15 b(z)3545 1758 y FD(2)3585 1744 y FA(\))24 b(and)191 1857 y(the)g(p)s(olar)g(co)s (ordinates)h(\()p Fs(z)1124 1871 y FD(3)1164 1857 y Fs(;)15 b(z)1246 1871 y FD(4)1286 1857 y FA(\))24 b(in)g(the)g(plane.)39 b(No)m(w,)26 b(supp)s(ose)d(w)m(e)i(are)f(in)m(terested)h(in)f(the)g (deriv)-5 b(ativ)m(es)191 1969 y(of)37 b(the)g(second)f(Cartesian)h Fs(y)1224 1983 y FD(1)1299 1969 y FA(=)e Fs(z)1447 1983 y FD(2)1524 1969 y FA(and)h(the)h(second)f(\(angular\))i(p)s(olar)e(co) s(ordinate)i Fs(y)3315 1983 y FD(2)3389 1969 y FA(=)e Fs(z)3538 1983 y FD(4)3614 1969 y FA(with)191 2082 y(resp)s(ect)30 b(to)i(the)f(other)f(t)m(w)m(o)i(v)-5 b(ariables)31 b Fs(x)1609 2096 y FD(1)1674 2082 y FA(=)26 b Fs(z)1813 2096 y FD(1)1883 2082 y FA(and)k Fs(x)2112 2096 y FD(2)2177 2082 y FA(=)25 b Fs(z)2315 2096 y FD(3)2355 2082 y FA(.)41 b(Then)29 b(the)i(activ)m(e)i(section)f(could)e(lo)s(ok)191 2195 y(simply)g(lik)m(e)p Black Black 1091 2478 a Fq(fo)m(r)h(\(j=1;)g (j)g Fs(<)f Fq(5;)15 b(j++\))121 b(z[j])31 b Fp(\034)p Fx(=)f Fq(zp[j];)1091 2591 y(g[1])i(=)e(z[1]*z[1]+z[2]*z[2]-z[3]*z[3];) 1091 2703 y(g[2])i(=)e(cos\(z[4]\))i(-)f(z[1]/z[3];)1091 2816 y(g[1])h Fp(\035)p Fx(=)e Fq(gp[1];)322 b(g[2])32 b Fp(\035)p Fx(=)e Fq(gp[2];)1091 2929 y(z[1])h Fp(\035)p Fx(=)f Fq(zd[1];)333 b(z[3])31 b Fp(\035)p Fx(=)f Fq(zd[2];)191 3212 y FA(where)d Fq(zd[1])i FA(and)e Fq(zd[2])i FA(are)f(dumm)m(y)f (argumen)m(ts.)40 b(In)27 b(the)i(last)f(line)h(the)f(t)m(w)m(o)h (indep)s(enden)m(t)e(v)-5 b(ariables)191 3325 y Fq(z[1])30 b FA(and)g Fq(z[3])g FA(are)h(made)f(sim)m(ultaneously)h(dep)s(enden)m (t)e(th)m(us)g(generating)j(a)e(square)g(system)g(that)g(can)191 3437 y(b)s(e)g(in)m(v)m(erted)h(\(at)g(most)g(argumen)m(ts\).)42 b(The)29 b(corresp)s(onding)h(pro)5 b(jection)31 b(and)f(seed)g(matrix) h(are)780 3740 y Fs(P)64 b FA(=)1023 3612 y Fl(\022)1131 3684 y FA(1)84 b(0)f(0)h(0)1131 3797 y(0)g(0)f(1)h(0)1604 3612 y Fl(\023)1777 3740 y FA(and)90 b Fs(S)2075 3703 y Fi(T)2181 3740 y FA(=)2302 3612 y Fl(\022)2410 3684 y FA(0)84 b(0)f(1)h(0)2410 3797 y(0)g(0)f(0)h(1)2883 3612 y Fl(\023)3010 3740 y Fs(:)191 4038 y FA(Pro)m(vided)25 b(the)g(v)m(ector)i Fq(zp)d FA(is)h(consisten)m(t)h(in)f(that)g(its)h (Cartesian)f(and)f(p)s(olar)h(comp)s(onen)m(ts)g(describ)s(e)g(the)191 4151 y(same)33 b(p)s(oin)m(t)g(in)f(the)h(plane)g(the)g(resulting)g (tuple)f Fq(gp)i FA(m)m(ust)e(v)-5 b(anish.)47 b(The)33 b(call)h(to)f Fq(inverse)p 3353 4151 28 4 v 33 w(tenso)m(r)p 3614 4151 V 34 w(eval)191 4264 y FA(with)h Fs(n)c FA(=)h(4,)k Fs(p)c FA(=)g(2)j(and)f Fs(d)i FA(as)f(desired)f(will)h(yield)g(the)g (implicit)h(deriv)-5 b(ativ)m(es,)37 b(pro)m(vided)c Fq(tenso)m(r)i FA(has)191 4377 y(b)s(een)h(allo)s(cated)i (appropriately)f(of)f(course)h(and)f Fs(S)41 b FA(has)36 b(the)h(v)-5 b(alue)37 b(giv)m(en)g(ab)s(o)m(v)m(e.)61 b(The)36 b(example)h(is)191 4490 y(un)m(t)m(ypical)32 b(in)f(that)g(the)g(implicit)h(function)f(could)g(also)h(b)s(e)e (obtained)i(explicitly)g(b)m(y)f(sym)m(b)s(olic)h(mani-)191 4603 y(pulations.)39 b(It)26 b(is)g(t)m(ypical)i(in)e(that)g(the)g (subset)g(of)g Fs(z)k FA(comp)s(onen)m(ts)c(that)h(are)f(to)h(b)s(e)e (considered)h(as)g(truly)191 4716 y(indep)s(enden)m(t)j(can)i(b)s(e)f (selected)h(and)f(altered)h(with)g(next)f(to)h(no)f(e\013ort)i(at)f (all.)332 4878 y(The)38 b(presen)m(ted)h(driv)m(ers)f(are)h(protot)m (yp)s(ed)f(in)g(the)h(header)f(\014le)h Ft()p FA(.)191 4991 y(As)31 b(indicated)h(b)s(efore)f(this)g(header)g(is)g (included)f(b)m(y)h(the)h(global)g(header)f(\014le)h Ft()27 b FA(au-)191 5104 y(tomatically)36 b(\(see)855 5104 y SDict begin H.S end 855 5104 a Black FA(Section)c(9.3)p Black 1290 5042 a SDict begin H.R end 1290 5042 a 1290 5104 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.3) cvn H.B /ANN pdfmark end 1290 5104 a FA(\).)48 b(The)32 b(example)i(programs)e Ft(inversexam.cpp)p FA(,)e Ft(coordinates.cpp)191 5217 y FA(and)h Ft(trigger.cpp)d FA(in)k(the)f(directory)h Ft(examples/additional_exampl)o(es/)o(tayl)o (or)25 b FA(sho)m(w)32 b(the)g(ap-)191 5330 y(plication)g(of)e(the)h (pro)s(cedures)e(describ)s(ed)g(here.)p Black Black eop end %%Page: 35 35 TeXDict begin 35 34 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.35) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(3.6)92 b(Driv)m(ers)31 b(of)f(the)h(T)-8 b(o)s(olb)s(o)m(x)31 b(for)f(Lie)h(Deriv)-5 b(ativ)m(es)1642 b FA(35)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.3.6) cvn /DEST pdfmark end 191 515 a 91 x FB(3.6)112 b(Driv)m(ers)38 b(of)f(the)h(T)-9 b(o)s(olb)s(o)m(x)37 b(for)h(Lie)g(Deriv)-6 b(ativ)m(es)191 827 y FA(Nonlinear)22 b(con)m(troller)i(and)d(observ)m(er)i(design)e (often)i(require)e(certain)i(t)m(yp)s(es)f(of)g(Lie)h(deriv)-5 b(ativ)m(es.)39 b(These)191 940 y(deriv)-5 b(ativ)m(es)24 b(also)g(arise)f(in)f(other)h(areas)h(suc)m(h)e(as)h(classical)i(mec)m (hanics)e(and)f(relativit)m(y)-8 b(.)41 b(Lie)23 b(deriv)-5 b(ativ)m(es)191 1053 y(are)39 b(total)i(deriv)-5 b(ativ)m(es)40 b(of)g(tensor)f(\014elds)f(along)i(a)g(v)m(ector)g(\014eld.)66 b(The)39 b(driv)m(ers)f(for)h(calculating)i(Lie)191 1166 y(deriv)-5 b(ativ)m(es)38 b(in)f(ADOL-C)g(presen)m(ted)g(in)g(this)g (section)h(w)m(ere)g(dev)m(elop)s(ed)f(b)m(y)g(Klaus)g(R\177)-45 b(ob)s(enac)m(k)37 b([)3674 1166 y SDict begin H.S end 3674 1166 a Black FA(13)p Black 3766 1108 a SDict begin H.R end 3766 1108 a 3766 1166 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Roeb05) cvn H.B /ANN pdfmark end 3766 1166 a FA(])191 1279 y(and)20 b(his)g(co-w)m(ork)m(ers)i(Jan)e (Winkler,)j(Siqian)d(W)-8 b(ang)22 b(and)e(Mirk)m(o)h(F)-8 b(rank)m(e)22 b([)2707 1279 y SDict begin H.S end 2707 1279 a Black FA(14)p Black 2798 1221 a SDict begin H.R end 2798 1221 a 2798 1279 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Roeb11) cvn H.B /ANN pdfmark end 2798 1279 a FA(].)37 b(They)20 b(are)h(protot)m(yp)s(ed)f(as)191 1392 y(C)26 b(functions)h(in)f(the)h(header)f(\014le)h Ft()c FA(and)j(allo)m(w)j(the)d(calculation)j(of)e(Lie)g (deriv)-5 b(ativ)m(es)29 b(of)191 1505 y(scalar,)f(v)m(ector)h(and)c (co)m(v)m(ector)30 b(\014elds.)39 b(In)26 b(addition,)h(the)g (calculation)i(of)d(gradien)m(ts)i(of)e(Lie)h(deriv)-5 b(ativ)m(es)191 1618 y(of)30 b(scalar)i(\014elds)e(is)g(supp)s(orted.) 332 1781 y(W)-8 b(e)44 b(consider)e(computational)i(problems)d(o)s (ccurring)h(in)g(con)m(troller)i(and)d(observ)m(er)i(design)f(for)191 1893 y(nonlinear)30 b(con)m(trol)i(systems)1068 2077 y(_)1053 2078 y Fx(x)26 b FA(=)f Fx(f)10 b FA(\()p Fx(x)p FA(\))21 b(+)e Fx(g)q FA(\()p Fx(x)p FA(\))p Fs(u;)108 b Fx(y)27 b FA(=)e Fx(h)p FA(\()p Fx(x)p FA(\))p Fs(;)108 b Fx(x)p FA(\(0\))26 b(=)f Fx(x)2712 2092 y FD(0)2777 2078 y Fo(2)g FA(\012)191 2262 y(with)30 b(the)g(scalar)h(input)e(u,)h (the)g(state)h Fx(x)p FA(,)g(and)e(the)h(output)g Fx(y)q FA(,)h(where)e(the)i(v)m(ector)g(\014elds)f Fx(f)35 b FA(:)25 b(\012)g Fo(!)g FA(I)-20 b(R)3719 2226 y Fi(n)3766 2262 y FA(,)191 2375 y Fx(g)27 b FA(:)e(\012)g Fo(!)h FA(I)-20 b(R)607 2339 y Fi(n)682 2375 y FA(and)28 b(the)g(map)g Fx(h)d FA(:)h(\012)f Fo(!)g FA(I)-20 b(R)1631 2339 y Fi(m)1726 2375 y FA(\(for)28 b Fs(m)d FA(=)g(1)k(this)f(map)g(is)g(the) g(scalar)i(\014eld)d Fs(h)p FA(\))i(are)g(de\014ned)191 2488 y(on)h(an)g(op)s(en)g(subset)g(\012)25 b Fo(\022)g FA(I)-20 b(R)1208 2452 y Fi(n)1255 2488 y FA(.)191 2774 y SDict begin H.S end 191 2774 a 191 2774 a SDict begin 13.6 H.A end 191 2774 a 191 2774 a SDict begin [/View [/XYZ H.V]/Dest (section*.5) cvn /DEST pdfmark end 191 2774 a Fx(Lie)35 b(Deriv)-6 b(ativ)m(es)35 b(of)g(Scalar)g(Fields)191 2996 y FA(Consider)29 b(the)i(initial)h(v)-5 b(alue)31 b(problem)1247 3179 y(_)1232 3180 y Fx(x)25 b FA(=)g Fx(f)10 b FA(\()p Fx(x)p FA(\))p Fs(;)107 b(y)28 b FA(=)d Fs(h)p FA(\()p Fx(x)p FA(\))p Fs(;)108 b Fx(x)p FA(\(0\))27 b(=)d Fx(x)2533 3194 y FD(0)2598 3180 y Fo(2)h FA(\012)191 3364 y(with)i(the)h(v)m(ector)i(\014eld)d Fx(f)35 b FA(:)25 b(\012)g Fo(!)g FA(I)-20 b(R)1418 3328 y Fi(n)1465 3364 y FA(.)39 b(The)28 b(Lie)g(deriv)-5 b(ativ)m(e)29 b(of)f(the)g(scalar)g (\014eld)g Fs(h)d FA(:)h(\012)f Fo(!)g FA(I)-20 b(R)27 b(along)i(the)191 3477 y(v)m(ector)j(\014eld)e Fx(f)40 b FA(are)31 b(time)g(deriv)-5 b(ativ)m(es)32 b(of)e(the)h(curv)m(e)f Fs(y)s FA(,)h(i.e.,)882 3661 y(_)-41 b Fs(y)s FA(\(0\))26 b(=)f Fs(L)1213 3676 y Fg(f)1250 3661 y Fs(h)p FA(\()p Fx(x)1392 3675 y FD(0)1432 3661 y FA(\))p Fs(;)47 b FA(\177)-51 b Fs(y)s FA(\(0\))26 b(=)f Fs(L)1880 3624 y FD(2)1880 3684 y Fg(f)1920 3661 y Fs(h)p FA(\()p Fx(x)2062 3675 y FD(0)2102 3661 y FA(\))p Fs(;)41 b(:)15 b(:)g(:)h(;)41 b(y)2438 3624 y FD(\()p Fi(d)p FD(\))2533 3661 y FA(\(0\))27 b(=)e Fs(L)2833 3624 y Fi(d)2833 3684 y Fg(f)2873 3661 y Fs(h)p FA(\()p Fx(x)3015 3675 y FD(0)3055 3661 y FA(\))p Fs(:)191 3845 y FA(F)-8 b(ormally)g(,)32 b(the)f(Lie)g(deriv)-5 b(ativ)m(e)32 b(of)e(the)h(scalar)g(\014eld)f Fs(h)h FA(along)g(the)g(v)m(ector)h(\014eld)e Fx(f)40 b FA(is)30 b(de\014ned)f(b)m(y)1562 4072 y Fs(L)1624 4087 y Fg(f)1661 4072 y Fs(h)p FA(\()p Fx(x)p FA(\))d(=)1970 4011 y Fs(@)5 b(h)p FA(\()p Fx(x)p FA(\))p 1970 4051 232 4 v 2032 4134 a Fs(@)g Fx(x)2227 4072 y(f)10 b FA(\()p Fx(x)p FA(\))p Fs(:)191 4277 y FA(Higher)31 b(order)f(Lie)g(deriv)-5 b(ativ)m(es)32 b(are)f(giv)m(en)g(b)m(y)f(the)h(recursion)993 4517 y Fs(L)1055 4478 y Fi(k)r FD(+1)1055 4546 y Fg(f)1188 4517 y Fs(h)p FA(\()p Fx(x)p FA(\))26 b(=)1497 4453 y Fs(@)5 b(L)1612 4420 y Fi(k)1612 4481 y Fg(f)1655 4453 y Fs(h)p FA(\()p Fx(x)p FA(\))p 1497 4496 337 4 v 1611 4579 a Fs(@)g Fx(x)1858 4517 y(f)10 b FA(\()p Fx(x)p FA(\))92 b(with)f Fs(L)2447 4479 y FD(0)2447 4540 y Fg(f)2486 4517 y Fs(h)p FA(\()p Fx(x)p FA(\))26 b(=)f Fs(h)p FA(\()p Fx(x)p FA(\))p Fs(:)191 4722 y FA(T)-8 b(o)31 b(compute)f(Lie)h(deriv) -5 b(ativ)m(es)1535 4834 y(\()p Fs(L)1632 4797 y FD(0)1632 4858 y Fg(f)1672 4834 y Fs(h)p FA(\()p Fx(x)1814 4848 y FD(0)1854 4834 y FA(\))p Fs(;)15 b(:)g(:)g(:)i(;)e(L)2153 4797 y Fi(d)2153 4858 y Fg(f)2194 4834 y Fs(h)p FA(\()p Fx(x)2336 4848 y FD(0)2376 4834 y FA(\)\))191 4991 y(w)m(e)29 b(need)g(the)g(trace)h(n)m(um)m(b)s(ers)d(of)i(the)g(activ)m(e)i (sections)f(of)f(the)g(v)m(ector)i(\014eld)d Fx(f)39 b FA(and)28 b(the)h(scalar)h(\014eld)e Fs(h)p FA(,)191 5104 y(the)k(n)m(um)m(b)s(er)e(of)h(indep)s(enden)m(t)f(v)-5 b(ariables)32 b Fs(n)p FA(,)g(the)f(initial)i(v)-5 b(alue)32 b Fx(x)2503 5118 y FD(0)2570 5104 y Fo(2)26 b FA(\012)31 b(and)g(the)h(highest)f(deriv)-5 b(ativ)m(e)191 5217 y(degree)38 b Fs(d)p FA(.)60 b(The)36 b(v)-5 b(alues)38 b(of)f(the)g(Lie)g(deriv)-5 b(ativ)m(es)38 b(are)g(then)e(stored)h(in)g (the)g(one)g(dimensional)g(arra)m(y)191 5330 y Ft(result)29 b FA(of)h(length)h Fs(d)20 b FA(+)g(1:)p Black Black eop end %%Page: 36 36 TeXDict begin 36 35 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.36) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(36)2300 b Fu(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black Black Black 491 606 a Fq(int)h(lie)p 712 606 28 4 v 32 w(scala)m(rc\(T)-8 b(ap)s(e)p 1220 606 V 34 w(F,)30 b(T)-8 b(ap)s(e)p 1549 606 V 33 w(H,)30 b(n,)h(x0,)g(d,)f(result\))491 719 y(sho)m(rt)h(T)-8 b(ap)s(e)p 903 719 V 32 w(F;)672 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(v)m(ector)i(\014eld)e Fx(f)491 832 y Fq(sho)m(rt)h(T)-8 b(ap)s(e)p 903 832 V 32 w(H;)660 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(scalar)i (\014eld)e Fs(h)491 945 y Fq(sho)m(rt)h(n;)897 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)f FA(and)g Fs(m)25 b FA(=)g(1)491 1058 y Fq(double)31 b(x0[n];)698 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v) -5 b(ariables)31 b Fx(x)3122 1072 y FD(0)491 1171 y Fq(sho)m(rt)g(d;) 897 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 1284 y Fq(double)g(result[d+1];)461 b FA(//)31 b(resulting)g(Lie)g(deriv)-5 b(ativ)m(es)32 b(of)e(a)h(scalar)g (\014eld)332 1662 y(F)-8 b(or)41 b(a)h(smo)s(oth)e(v)m(ector-v)-5 b(alued)43 b(map)d Fx(h)i FA(:)h(\012)f Fo(!)g FA(I)-20 b(R)2193 1627 y Fi(m)2300 1662 y FA(with)40 b Fx(h)p FA(\()p Fx(x)p FA(\))j(=)f(\()p Fs(h)2943 1676 y FD(1)2984 1662 y FA(\()p Fx(x)p FA(\))p Fs(;)15 b(:)g(:)g(:)i(;)e(h)3363 1676 y Fi(m)3430 1662 y FA(\()p Fx(x)p FA(\)\))3590 1629 y Fi(T)3687 1662 y FA(w)m(e)191 1775 y(de\014ne)30 b(the)g(Lie)h(deriv) -5 b(ativ)m(e)1180 1775 y SDict begin H.S end 1180 1775 a 1180 1775 a SDict begin 13.6 H.A end 1180 1775 a 1180 1775 a SDict begin [/View [/XYZ H.V]/Dest (equation.3.4) cvn /DEST pdfmark end 1180 1775 a 700 1982 a Fs(L)762 1945 y Fi(k)762 2005 y Fg(f)805 1982 y Fx(h)p FA(\()p Fx(x)953 1996 y FD(0)993 1982 y FA(\))25 b(=)g(\()p Fs(L)1246 1945 y Fi(k)1246 2005 y Fg(f)1289 1982 y Fs(h)1341 1996 y FD(1)1381 1982 y FA(\()p Fx(x)1471 1996 y FD(0)1511 1982 y FA(\))p Fs(;)15 b(:)g(:)g(:)i(;)e(L)1810 1945 y Fi(k)1810 2005 y Fg(f)1853 1982 y Fs(h)1905 1996 y Fi(m)1972 1982 y FA(\()p Fx(x)2062 1996 y FD(0)2102 1982 y FA(\)\))2172 1945 y Fi(T)2253 1982 y Fo(2)25 b FA(I)-20 b(R)2418 1945 y Fi(m)2575 1982 y FA(for)91 b Fs(k)29 b FA(=)24 b(0)p Fs(;)15 b Fo(\001)g(\001)g(\001)33 b Fs(;)15 b(d;)394 b FA(\(4\))191 2189 y(comp)s(onen)m(t-wise)55 b(b)m(y)e(the)i(Lie)f(deriv)-5 b(ativ)m(es)55 b Fs(L)1921 2156 y Fi(k)1921 2217 y Fg(f)1964 2189 y Fs(h)2016 2203 y FD(1)2056 2189 y FA(\()p Fx(x)2146 2203 y FD(0)2185 2189 y FA(\))p Fs(;)15 b(:)g(:)g(:)i(;)e(L)2484 2156 y Fi(k)2484 2217 y Fg(f)2527 2189 y Fs(h)2579 2203 y Fi(m)2646 2189 y FA(\()p Fx(x)2736 2203 y FD(0)2776 2189 y FA(\))55 b(of)f(the)g Fs(m)f FA(scalar)i(\014elds)191 2302 y Fs(h)243 2316 y FD(1)283 2302 y Fs(;)15 b(:)g(:)g(:)h(;)f(h)536 2316 y Fi(m)642 2302 y FA(:)38 b(\012)g Fo(!)g FA(I)-20 b(R.)64 b(Note)39 b(that)g(\()1574 2302 y SDict begin H.S end 1574 2302 a Black FA(4)p Black 1620 2244 a SDict begin H.R end 1620 2244 a 1620 2302 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.4) cvn H.B /ANN pdfmark end 1620 2302 a FA(\))f(should)f(not)i(b)s(e)e(confused)h(with)f(the)i (Lie)f(deriv)-5 b(ativ)m(e)40 b(of)e(a)191 2415 y(v)m(ector)i(\014eld.) 66 b(T)-8 b(o)39 b(compute)g(Lie)g(deriv)-5 b(ativ)m(es)40 b(\()1906 2415 y SDict begin H.S end 1906 2415 a Black FA(4)p Black 1952 2356 a SDict begin H.R end 1952 2356 a 1952 2415 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.4) cvn H.B /ANN pdfmark end 1952 2415 a FA(\))f(of)g(the)g(v)m (ector-v)-5 b(alued)40 b(map)f Fx(h)f FA(w)m(e)i(additionally)191 2528 y(need)30 b(the)h(n)m(um)m(b)s(er)e(of)h(dep)s(enden)m(t)g(v)-5 b(ariables)31 b Fs(m)p FA(:)p Black Black 491 2794 a Fq(int)f(lie)p 712 2794 28 4 v 32 w(scala)m(rcv\(T)-8 b(ap)s(e)p 1262 2794 V 33 w(F,)31 b(T)-8 b(ap)s(e)p 1591 2794 V 32 w(H,)31 b(n,)g(m,)g(x0,)g(d,)f(result\))491 2907 y(sho)m(rt)h(T)-8 b(ap)s(e)p 903 2907 V 32 w(F;)672 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(v)m(ector)i(\014eld)e Fx(f)491 3020 y Fq(sho)m(rt)h(T)-8 b(ap)s(e)p 903 3020 V 32 w(H;)660 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(v)m (ector-v)-5 b(alued)33 b(map)d Fx(h)491 3133 y Fq(sho)m(rt)h(n;)897 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3246 y Fq(sho)m(rt)g(m;)872 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 3359 y Fq(double)g(x0[n];)698 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fx(x)3122 3373 y FD(0)491 3471 y Fq(sho)m(rt)g(d;)897 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 3584 y Fq(double)g(result[m][d+1];)337 b FA(//)31 b(resulting)g(Lie)g(deriv)-5 b(ativ)m(es)32 b(of)e(v)m(ectorial)j (scalar)e(\014elds)191 3991 y SDict begin H.S end 191 3991 a 191 3991 a SDict begin 13.6 H.A end 191 3991 a 191 3991 a SDict begin [/View [/XYZ H.V]/Dest (section*.6) cvn /DEST pdfmark end 191 3991 a Fx(Gradien)m(ts)k(of)g(Lie)g(Deriv)-6 b(ativ)m(es)35 b(of)g(Scalar)g(Fields)191 4214 y FA(T)-8 b(o)31 b(compute)f(the)h(gradien)m(ts)1484 4329 y(\(d)p Fs(L)1632 4292 y FD(0)1632 4353 y Fg(f)1672 4329 y Fs(h)p FA(\()p Fx(x)1814 4343 y FD(0)1854 4329 y FA(\))p Fs(;)15 b(:)g(:)g(:)i(;)e FA(d)p Fs(L)2204 4292 y Fi(d)2204 4353 y Fg(f)2244 4329 y Fs(h)p FA(\()p Fx(x)2386 4343 y FD(0)2427 4329 y FA(\)\))191 4499 y(of)34 b(the)g(Lie)g(deriv)-5 b(ativ)m(es)35 b Fs(L)1132 4466 y FD(0)1132 4527 y Fg(f)1171 4499 y Fs(h)p FA(\()p Fx(x)1313 4513 y FD(0)1353 4499 y FA(\))p Fs(;)15 b(:)g(:)g(:)i(;)e(L)1652 4466 y Fi(d)1652 4527 y Fg(f)1693 4499 y Fs(h)p FA(\()p Fx(x)1835 4513 y FD(0)1875 4499 y FA(\))34 b(of)g(the)g(scalar)h(\014eld)e Fs(h)e FA(:)g(\012)f Fo(!)h FA(I)-20 b(R)33 b(along)h(the)g(v)m(ector) 191 4612 y(\014eld)c Fx(f)35 b FA(:)26 b(\012)e Fo(!)i FA(I)-20 b(R)792 4577 y Fi(n)839 4612 y FA(,)30 b(the)h(follo)m(wing)h (C)e(function)g(can)h(b)s(e)e(used:)p Black Black 491 4878 a Fq(int)h(lie)p 712 4878 28 4 v 32 w(gradientc\(T)-8 b(ap)s(e)p 1316 4878 V 34 w(F,)30 b(T)-8 b(ap)s(e)p 1645 4878 V 33 w(H,)31 b(n,)f(x0,)h(d,)g(result\))491 4991 y(sho)m(rt)g(T)-8 b(ap)s(e)p 903 4991 V 32 w(F;)672 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(v)m(ector)i(\014eld)e Fx(f)491 5104 y Fq(sho)m(rt)h(T)-8 b(ap)s(e)p 903 5104 V 32 w(H;)660 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(scalar)i (\014eld)e Fs(h)491 5217 y Fq(sho)m(rt)h(n;)897 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)f FA(and)g Fs(m)25 b FA(=)g(1)491 5330 y Fq(double)31 b(x0[n];)698 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v) -5 b(ariables)31 b Fx(x)3122 5344 y FD(0)p Black Black eop end %%Page: 37 37 TeXDict begin 37 36 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.37) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(3.6)92 b(Driv)m(ers)31 b(of)f(the)h(T)-8 b(o)s(olb)s(o)m(x)31 b(for)f(Lie)h(Deriv)-5 b(ativ)m(es)1642 b FA(37)p Black 491 606 a Fq(sho)m(rt)31 b(d;)897 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 719 y Fq(double)g(result[n][d+1];)362 b FA(//)31 b(resulting)g(gradien)m(ts)g(of)g(Lie)f(deriv)-5 b(ativ)m(es)1679 832 y(//)31 b(of)g(a)g(scalar)g(\014eld)332 1175 y(F)-8 b(or)40 b(calculating)i(the)e(jacobians)g(d)p Fs(L)1658 1142 y Fi(k)1658 1203 y Fg(f)1700 1175 y Fx(h)p FA(\()p Fx(x)1848 1189 y FD(0)1888 1175 y FA(\))h Fo(2)f FA(I)-20 b(R)2144 1140 y Fi(m)p Fm(\002)p Fi(n)2348 1175 y FA(of)39 b(Lie)h(deriv)-5 b(ativ)m(es)41 b(\()3119 1175 y SDict begin H.S end 3119 1175 a Black FA(4)p Black 3165 1117 a SDict begin H.R end 3165 1117 a 3165 1175 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.3.4) cvn H.B /ANN pdfmark end 3165 1175 a FA(\))f(of)f(the)h(v)m(ector-)191 1288 y(v)-5 b(alued)26 b(map)f Fx(h)h FA(:)f(\012)g Fo(!)g FA(I)-20 b(R)1090 1253 y Fi(m)1182 1288 y FA(for)26 b Fs(k)i FA(=)d(0)p Fs(;)15 b(:)g(:)g(:)i(;)e(d)27 b FA(one)f(can)g(use)f (the)h(follo)m(wing)i(function,)e(where)g(the)g Fs(d)11 b FA(+)g(1)191 1401 y(matrices)31 b(are)g(stored)g(in)f(the)g(three)h (dimensional)f(arra)m(y)h Ft(result)p FA(:)p Black Black 491 1624 a Fq(int)f(lie)p 712 1624 28 4 v 32 w(gradientcv\(T)-8 b(ap)s(e)p 1358 1624 V 34 w(F,)30 b(T)-8 b(ap)s(e)p 1687 1624 V 33 w(H,)31 b(n,)f(m,)h(x0,)g(d,)f(result\))491 1736 y(sho)m(rt)h(T)-8 b(ap)s(e)p 903 1736 V 32 w(F;)672 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(v)m(ector)i(\014eld)e Fx(f)491 1849 y Fq(sho)m(rt)h(T)-8 b(ap)s(e)p 903 1849 V 32 w(H;)660 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(v)m (ector-v)-5 b(alued)33 b(map)d Fx(h)491 1962 y Fq(sho)m(rt)h(n;)897 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 2075 y Fq(sho)m(rt)g(m;)872 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 2188 y Fq(double)g(x0[n];)698 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fx(x)3122 2202 y FD(0)491 2301 y Fq(sho)m(rt)g(d;)897 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 2414 y Fq(double)g(result[m][n][d+1];)238 b FA(//)31 b(resulting)g(jacobians)g(of)f(Lie)h(deriv)-5 b(ativ)m(es)1679 2527 y(//)31 b(of)g(v)m(ectorial)i(scalar)e(\014elds) 191 2923 y SDict begin H.S end 191 2923 a 191 2923 a SDict begin 13.6 H.A end 191 2923 a 191 2923 a SDict begin [/View [/XYZ H.V]/Dest (section*.7) cvn /DEST pdfmark end 191 2923 a Fx(Lie)k(Deriv)-6 b(ativ)m(es)35 b(of)g(Co)m(v)m(ector)g (Fields)191 3145 y FA(If)c(w)m(e)h(consider)f(the)h(elemen)m(ts)h(of)e (the)h(real)g(v)m(ector)h(space)f(I)-20 b(R)2341 3109 y Fi(n)2420 3145 y FA(as)31 b(column)h(v)m(ectors,)h(the)f(elemen)m(ts) h(of)191 3258 y(the)e(asso)s(ciated)i(dual)e(space)g(\(I)-20 b(R)1343 3222 y Fi(n)1390 3258 y FA(\))1425 3225 y Fm(\003)1496 3258 y FA(can)31 b(b)s(e)g(represen)m(ted)g(b)m(y)g(ro)m(w)g(v)m (ectors.)45 b(These)30 b(ro)m(w)i(v)m(ectors)g(are)191 3371 y(called)f(adjoin)m(t)g(v)m(ectors)g(in)e(ADOL-C)h(and)g(co)m(v)m (ectors)i(in)e(di\013eren)m(tial)h(geometry)-8 b(.)43 b(In)29 b(a)h(program)g(the)191 3484 y(user)35 b(do)s(es)g(not)h(ha)m (v)m(e)g(to)h(distinguish)d(b)s(et)m(w)m(een)i(a)g(v)m(ector)h(\014eld) e Fx(f)44 b FA(:)34 b(\012)g Fo(!)f FA(I)-20 b(R)2918 3448 y Fi(n)3000 3484 y FA(and)35 b(a)h(co)m(v)m(ector)i(\014eld)191 3596 y Fn(!)29 b FA(:)d(\012)g Fo(!)f FA(\(I)-20 b(R)659 3561 y Fi(n)706 3596 y FA(\))741 3563 y Fm(\003)781 3596 y FA(,)31 b(since)g(for)f(b)s(oth)g(\014elds)g(the)h(dep)s(enden)m(t)f (v)-5 b(ariables)31 b(are)g(stored)g(in)g(one)g(dimensional)191 3709 y(arra)m(ys.)41 b(The)30 b(Lie)h(deriv)-5 b(ativ)m(e)32 b(of)e(a)h(co)m(v)m(ector)i(\014eld)d Fn(!)k FA(is)d(de\014ned)e(b)m(y) 1133 3946 y Fs(L)1195 3961 y Fg(f)1231 3946 y Fn(!)t FA(\()p Fx(x)p FA(\))d(=)f Fn(!)t FA(\()p Fx(x)p FA(\))15 b Fx(f)1798 3908 y Fm(0)1822 3946 y FA(\()p Fx(x)p FA(\))21 b(+)f Fx(f)2101 3908 y Fi(T)2156 3946 y FA(\()p Fx(x)p FA(\))2296 3817 y Fl(\022)2374 3884 y Fs(@)5 b Fn(!)2496 3851 y Fi(T)2551 3884 y FA(\()p Fx(x)p FA(\))p 2374 3925 303 4 v 2471 4008 a Fs(@)g Fx(x)2687 3817 y Fl(\023)2754 3832 y Fi(T)2824 3946 y Fs(:)191 4171 y FA(The)26 b Fs(d)12 b FA(+)g(1)26 b(Lie)h(deriv)-5 b(ativ)m(es)27 b Fs(L)1246 4138 y FD(0)1246 4198 y Fg(f)1286 4171 y Fn(!)s FA(\()p Fx(x)p FA(\))p Fs(;)15 b(:)g(:)g(:)j(;)d(L)1744 4138 y Fi(d)1744 4198 y Fg(f)1784 4171 y Fn(!)t FA(\()p Fx(x)p FA(\))27 b(of)f(the)h(co)m(v)m(ector)i(\014eld)d Fn(!)k FA(along)d(the)f(v)m(ector)i(\014eld)e Fx(f)191 4283 y FA(can)31 b(b)s(e)e(computed)i(b)m(y)p Black Black 491 4506 a Fq(int)f(lie)p 712 4506 28 4 v 32 w(covecto)m(r\(T)-8 b(ap)s(e)p 1280 4506 V 36 w(F,)30 b(T)-8 b(ap)s(e)p 1611 4506 V 33 w(W,)30 b(n,)h(x0,)f(d,)h(result\))491 4619 y(sho)m(rt)g(T)-8 b(ap)s(e)p 903 4619 V 32 w(F;)672 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(v)m(ector)i(\014eld)e Fx(f)491 4732 y Fq(sho)m(rt)h(T)-8 b(ap)s(e)p 903 4732 V 32 w(W;)638 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(co)m(v)m (ector)k(\014eld)c Fn(!)491 4844 y Fq(sho)m(rt)h(n;)897 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 4957 y Fq(double)g(x0[n];)698 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fx(x)3122 4971 y FD(0)491 5070 y Fq(sho)m(rt)g(d;)897 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 5183 y Fq(double)g(result[n][d+1];)362 b FA(//)31 b(resulting)g(Lie)g(deriv)-5 b(ativ)m(es)32 b(of)e(a)h(co)m(v)m(ector)i (\014eld)p Black Black eop end %%Page: 38 38 TeXDict begin 38 37 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.38) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(38)2300 b Fu(3)92 b(EASY-TO-USE)29 b(DRIVERS)p Black 191 606 a SDict begin H.S end 191 606 a 191 606 a SDict begin 13.6 H.A end 191 606 a 191 606 a SDict begin [/View [/XYZ H.V]/Dest (section*.8) cvn /DEST pdfmark end 191 606 a Fx(Lie)35 b(Deriv)-6 b(ativ)m(es)35 b(of)g(a)g(V)-9 b(ector)35 b(Field)g(\(Lie)f(Brac)m(k)m(ets\))191 835 y FA(Lie)e(deriv)-5 b(ativ)m(es)33 b(\(Lie)f(brac)m(k)m(ets\))i(of)e(a) g(v)m(ector)h(\014eld)e Fx(g)e FA(:)f(\012)f Fo(!)g FA(I)-20 b(R)2460 799 y Fi(n)2539 835 y FA(along)32 b(a)g(v)m(ector)h(\014eld)f Fx(f)37 b FA(:)27 b(\012)g Fo(!)h FA(I)-20 b(R)3744 799 y Fi(n)191 948 y FA(are)31 b(de\014ned)e(b)m(y)1118 1084 y(ad)1214 1099 y Fg(f)1251 1084 y Fx(g)q FA(\()p Fx(x)p FA(\))e(=)e([)p Fx(f)10 b Fs(;)15 b Fx(g)q FA(]\()p Fx(x)p FA(\))28 b(=)d Fx(g)2039 1046 y Fm(0)2063 1084 y FA(\()p Fx(x)p FA(\))p Fx(f)10 b FA(\()p Fx(x)p FA(\))22 b Fo(\000)d Fx(f)2509 1046 y Fm(0)2533 1084 y FA(\()p Fx(x)p FA(\))p Fx(g)q FA(\()p Fx(x)p FA(\))p Fs(:)191 1277 y FA(W)-8 b(e)33 b(can)e(calculate)j(iterated)f(Lie)e(brac)m(k)m(ets)i(ad)1843 1241 y FD(0)1843 1301 y Fg(f)1883 1277 y Fx(g)q FA(\()p Fx(x)p FA(\))p Fs(;)15 b(:)g(:)g(:)j(;)d FA(ad)2360 1241 y Fi(d)2360 1301 y Fg(f)2401 1277 y Fx(g)q FA(\()p Fx(x)p FA(\))33 b(at)f(the)f(p)s(oin)m(t)h Fx(x)3175 1291 y FD(0)3241 1277 y Fo(2)27 b FA(\012)k(using)g(the)191 1390 y(C)f(function)g(listed)h(b)s(elo)m(w:)p Black Black 491 1683 a Fq(int)f(lie)p 712 1683 28 4 v 32 w(b)m(rack)m(et\(T)-8 b(ap)s(e)p 1240 1683 V 35 w(F,)30 b(T)-8 b(ap)s(e)p 1570 1683 V 33 w(G,)30 b(n,)h(x0,)g(d,)f(result\))491 1796 y(sho)m(rt)h(T)-8 b(ap)s(e)p 903 1796 V 32 w(F;)672 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(v)m(ector)i(\014eld)e Fx(f)491 1909 y Fq(sho)m(rt)h(T)-8 b(ap)s(e)p 903 1909 V 32 w(G;)663 b FA(//)31 b(trace)h(iden)m(ti\014cation)g(of)e(v)m (ector)i(\014eld)e Fx(g)491 2022 y Fq(sho)m(rt)h(n;)897 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 2135 y Fq(double)g(x0[n];)698 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fx(x)3122 2149 y FD(0)491 2248 y Fq(sho)m(rt)g(d;)897 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 2361 y Fq(double)g(result[n][d+1];)362 b FA(//)31 b(resulting)g(Lie)g(deriv)-5 b(ativ)m(es)32 b(of)e(a)h(v)m(ector)h (\014eld)191 2800 y SDict begin H.S end 191 2800 a 191 2800 a SDict begin 13.6 H.A end 191 2800 a 191 2800 a SDict begin [/View [/XYZ H.V]/Dest (section*.9) cvn /DEST pdfmark end 191 2800 a Fx(Additional)j(C++)g(Driv)m(ers)h(for)f(Lie)f (Deriv)-6 b(ativ)m(es)191 3029 y FA(F)e(or)47 b(Lie)f(deriv)-5 b(ativ)m(es)47 b(of)f(scalar)h(\014elds,)i(the)d(C)g(in)m(terface)h (o\013ers)f(t)m(w)m(o)i(di\013eren)m(t)e(driv)m(ers,)j(namely)191 3141 y Ft(lie_scalarc)40 b FA(for)k Fs(m)i FA(=)h(1)d(scalar)g(\014eld) f Fs(h)48 b FA(:)f(\012)g Fo(!)g FA(I)-20 b(R)42 b(and)h Ft(lie_scalarcv)d FA(for)j Fs(m)k Fo(\025)g FA(1)d(scalar)191 3254 y(\014elds)30 b Fs(h)476 3268 y FD(1)515 3254 y Fs(;)15 b(:)g(:)g(:)i(;)e(h)769 3268 y Fi(m)862 3254 y FA(:)25 b(\012)g Fo(!)g FA(I)-20 b(R)o(,)31 b(whic)m(h)f(are)g(com)m (bined)h(in)f(a)g(v)m(ector-v)-5 b(alued)32 b(map)e Fx(h)25 b FA(:)h(\012)f Fo(!)g FA(I)-20 b(R)3433 3219 y Fi(m)3500 3254 y FA(.)41 b(Using)191 3367 y(the)32 b(p)s(olymorphism)e(in)h(C++,) h(b)s(oth)e(C)i(driv)m(ers)f(are)h(uni\014ed)e(b)m(y)i(the)g(C++)f (driv)m(er)g Ft(lie_scalar)e FA(for)191 3480 y(the)i(computation)g(of)f (Lie)h(deriv)-5 b(ativ)m(es)32 b(of)e(scalar)i(\014elds:)p Black Black 491 3773 a Fq(int)e(lie)p 712 3773 28 4 v 32 w(scala)m(r\(T)-8 b(ap)s(e)p 1180 3773 V 33 w(F,)30 b(T)-8 b(ap)s(e)p 1508 3773 V 33 w(H,)31 b(n,)g(x0,)g(d,)f(result\))301 b FA(//)31 b(case)g Fs(m)25 b FA(=)g(1)491 3886 y Fq(int)30 b(lie)p 712 3886 V 32 w(scala)m(r\(T)-8 b(ap)s(e)p 1180 3886 V 33 w(F,)30 b(T)-8 b(ap)s(e)p 1508 3886 V 33 w(H,)31 b(n,)g(m,)f(x0,)h(d,)g(result\))173 b FA(//)31 b(case)g Fs(m)25 b Fo(\025)g FA(1)332 4179 y(The)36 b(same)h(situation)g(o)s (ccurs)f(with)h(the)f(gradien)m(ts)h(or)g(jacobians)g(of)f(Lie)h(deriv) -5 b(ativ)m(es)38 b(of)f(scalar)191 4292 y(\014elds.)56 b(Here,)37 b(the)f(C)f(driv)m(ers)h Ft(lie_gradientc)c FA(and)j Ft(lie_gradientcv)c FA(are)36 b(uni\014ed)e(b)m(y)i(the)g(C++) 191 4405 y(driv)m(er)30 b Ft(lie_gradient)p FA(:)p Black Black 491 4698 a Fq(int)g(lie)p 712 4698 V 32 w(gradient\(T)-8 b(ap)s(e)p 1276 4698 V 33 w(F,)31 b(T)-8 b(ap)s(e)p 1605 4698 V 32 w(H,)31 b(n,)g(x0,)g(d,)f(result\))241 b FA(//)31 b(case)g Fs(m)25 b FA(=)g(1)491 4811 y Fq(int)30 b(lie)p 712 4811 V 32 w(gradient\(T)-8 b(ap)s(e)p 1276 4811 V 33 w(F,)31 b(T)-8 b(ap)s(e)p 1605 4811 V 32 w(H,)31 b(n,)g(m,)g(x0,)f (d,)h(result\))113 b FA(//)31 b(case)g Fs(m)25 b Fo(\025)g FA(1)332 5104 y(The)42 b(C++)f(driv)m(ers)g(are)i(also)g(protot)m(yp)s (ed)f(in)f(the)i(header)e(\014le)h Fs(<)p Fq(adolc)p 2949 5104 V 33 w(lie.h)p Fs(>)p FA(.)75 b(An)42 b(example)191 5217 y(ho)m(w)i(to)h(use)f(these)h(driv)m(ers)f(for)g(the)g (calculation)j(of)d(Lie)h(deriv)-5 b(ativ)m(es)45 b(can)g(b)s(e)e (found)g(in)h(the)h(\014le)191 5330 y Fq(GantryCrane.cpp)30 b FA(in)g(the)h(directory)g Ft(additional_examples/lie)o FA(.)p Black Black eop end %%Page: 39 39 TeXDict begin 39 38 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.39) cvn /DEST pdfmark end 183 199 a Black 3700 307 a FA(39)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (section.4) cvn /DEST pdfmark end 191 515 a 91 x FE(4)135 b(Basic)45 b(Driv)l(ers)h(for)f (the)g(F)-11 b(orw)l(ard)45 b(and)f(Rev)l(erse)j(Mo)t(de)191 859 y FA(In)24 b(this)g(section,)j(w)m(e)e(presen)m(t)g(tailored)g (driv)m(ers)g(for)f(di\013eren)m(t)h(v)-5 b(arian)m(ts)25 b(of)g(the)g(forw)m(ard)f(mo)s(de)g(and)g(the)191 972 y(rev)m(erse)k(mo)s(de,)g(resp)s(ectiv)m(ely)-8 b(.)41 b(F)-8 b(or)28 b(a)g(b)s(etter)g(understanding,)e(w)m(e)i(start)g(with) f(a)h(short)f(description)h(of)191 1085 y(the)j(mathematical)h(bac)m (kground.)332 1247 y(Pro)m(vided)c(no)f(arithmetic)i(exception)g(o)s (ccurs,)f(no)f(comparison)h(including)f Fq(fmax)g FA(or)g Fq(fmin)h FA(yields)f(a)191 1360 y(tie,)j Fq(fabs)e FA(do)s(es)g(not)h (yield)g(zero,)i(and)d(all)h(sp)s(ecial)h(functions)e(w)m(ere)h(ev)-5 b(aluated)30 b(in)e(the)h(in)m(terior)h(of)f(their)191 1473 y(domains,)42 b(the)d(functional)h(relation)h(b)s(et)m(w)m(een)f (the)g(input)e(v)-5 b(ariables)40 b Fs(x)g FA(and)e(the)i(output)f(v)-5 b(ariables)191 1586 y Fs(y)43 b FA(denoted)d(b)m(y)f Fs(y)44 b FA(=)d Fs(F)13 b FA(\()p Fs(x)p FA(\))41 b(is)f(in)f(fact)i (analytic.)71 b(In)39 b(other)i(w)m(ords,)h(w)m(e)e(can)g(compute)g (arbitrarily)191 1699 y(high)c(deriv)-5 b(ativ)m(es)38 b(of)f(the)f(v)m(ector)j(function)d Fs(F)48 b FA(:)36 b Fs(I)-23 b(R)2026 1666 y Fi(n)2108 1699 y Fo(7!)35 b Fs(I)-23 b(R)2321 1666 y Fi(m)2424 1699 y FA(de\014ned)35 b(b)m(y)i(the)f(activ)m(e)j(section.)61 b(W)-8 b(e)191 1812 y(\014nd)33 b(it)h(most)h(con)m(v)m(enien)m(t)h(to)f(describ)s(e)e (and)h(compute)g(deriv)-5 b(ativ)m(es)36 b(in)d(terms)h(of)h(univ)-5 b(ariate)34 b(T)-8 b(a)m(ylor)191 1925 y(expansions,)29 b(whic)m(h)f(are)i(truncated)e(after)i(the)f(highest)g(deriv)-5 b(ativ)m(e)30 b(degree)f Fs(d)g FA(that)h(is)f(desired)f(b)m(y)h(the) 191 2038 y(user.)40 b(Let)582 2038 y SDict begin H.S end 582 2038 a 582 2038 a SDict begin 13.6 H.A end 582 2038 a 582 2038 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.5) cvn /DEST pdfmark end 582 2038 a 1406 2215 a Fs(x)p FA(\()p Fs(t)p FA(\))51 b Fo(\021)1781 2101 y Fi(d)1733 2129 y Fl(X)1738 2324 y Fi(j)t FD(=0)1880 2215 y Fs(x)1932 2229 y Fi(j)1968 2215 y Fs(t)2001 2177 y Fi(j)2088 2215 y FA(:)g Fs(I)-23 b(R)51 b Fo(7!)f Fs(I)-23 b(R)2529 2177 y Fi(n)3675 2215 y FA(\(5\))191 2472 y(denote)29 b(an)m(y)g(v)m(ector)i(p)s(olynomial)e(in)f(the)h(scalar)h(v)-5 b(ariable)29 b Fs(t)c Fo(2)g Fs(I)-23 b(R)q FA(.)40 b(In)28 b(other)g(w)m(ords,)h Fs(x)p FA(\()p Fs(t)p FA(\))g(describ)s(es)f(a) 191 2585 y(path)i(in)g Fs(I)-23 b(R)596 2552 y Fi(n)673 2585 y FA(parameterized)31 b(b)m(y)g Fs(t)p FA(.)40 b(The)30 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(t)g(v)m(ectors)1580 2833 y Fs(x)1632 2847 y Fi(j)1719 2833 y FA(=)1862 2772 y(1)p 1850 2812 68 4 v 1850 2896 a Fs(j)5 b FA(!)1980 2772 y Fs(@)2033 2739 y Fi(j)p 1963 2812 123 4 v 1963 2896 a Fs(@)g(t)2049 2869 y Fi(j)2096 2833 y Fs(x)p FA(\()p Fs(t)p FA(\))2251 2701 y Fl(\014)2251 2756 y(\014)2251 2811 y(\014)2251 2865 y(\014)2282 2924 y Fi(t)p FD(=0)191 3084 y FA(are)27 b(simply)e(the)i(scaled)g(deriv)-5 b(ativ)m(es)27 b(of)g Fs(x)p FA(\()p Fs(t)p FA(\))f(at)h(the)g(parameter)f(origin)h Fs(t)e FA(=)g(0.)40 b(The)25 b(\014rst)h(t)m(w)m(o)h(v)m(ectors)191 3197 y Fs(x)243 3211 y FD(1)282 3197 y Fs(;)15 b(x)374 3211 y FD(2)442 3197 y Fo(2)28 b Fs(I)-23 b(R)618 3164 y Fi(n)697 3197 y FA(can)32 b(b)s(e)g(visualized)h(as)f(tangen)m(t)i (and)e(curv)-5 b(ature)32 b(at)h(the)f(base)g(p)s(oin)m(t)g Fs(x)3210 3211 y FD(0)3250 3197 y FA(,)h(resp)s(ectiv)m(ely)-8 b(.)191 3310 y(Pro)m(vided)34 b(that)h Fs(F)47 b FA(is)35 b Fs(d)f FA(times)h(con)m(tin)m(uously)g(di\013eren)m(tiable,)i(it)e (follo)m(ws)g(from)f(the)g(c)m(hain)h(rule)f(that)191 3422 y(the)d(image)g(path)822 3422 y SDict begin H.S end 822 3422 a 822 3422 a SDict begin 13.6 H.A end 822 3422 a 822 3422 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.6) cvn /DEST pdfmark end 822 3422 a 1402 3535 a Fs(y)s FA(\()p Fs(t)p FA(\))51 b Fo(\021)f Fs(F)13 b FA(\()p Fs(x)p FA(\()p Fs(t)p FA(\)\))52 b(:)e Fs(I)-23 b(R)51 b Fo(7!)g Fs(I)-23 b(R)2514 3498 y Fi(m)3675 3535 y FA(\(6\))191 3698 y(is)30 b(also)i(smo)s(oth)e(and)g(has)g(\()p Fs(d)21 b FA(+)f(1\))31 b(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(t)i(v)m(ectors) e Fs(y)2493 3712 y Fi(j)2555 3698 y Fo(2)25 b Fs(I)-23 b(R)2728 3665 y Fi(m)2824 3698 y FA(at)31 b Fs(t)25 b FA(=)g(0,)31 b(so)g(that)3499 3698 y SDict begin H.S end 3499 3698 a 3499 3698 a SDict begin 13.6 H.A end 3499 3698 a 3499 3698 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.7) cvn /DEST pdfmark end 3499 3698 a 1460 3986 a Fs(y)s FA(\()p Fs(t)p FA(\))51 b(=)1830 3872 y Fi(d)1783 3899 y Fl(X)1787 4095 y Fi(j)t FD(=0)1929 3986 y Fs(y)1974 4000 y Fi(j)2010 3986 y Fs(t)2043 3948 y Fi(j)2100 3986 y FA(+)20 b Fs(O)s FA(\()p Fs(t)2331 3948 y Fi(d)p FD(+1)2461 3986 y FA(\))p Fs(:)1154 b FA(\(7\))191 4272 y(Also)44 b(as)f(a)h(consequence)g(of)g(the)f(c)m(hain)h(rule,)j(one)c(can)h (observ)m(e)g(that)g(eac)m(h)g Fs(y)3079 4286 y Fi(j)3158 4272 y FA(is)g(uniquely)e(and)191 4384 y(smo)s(othly)30 b(determined)g(b)m(y)h(the)f(co)s(e\016cien)m(t)i(v)m(ectors)g Fs(x)2128 4398 y Fi(i)2187 4384 y FA(with)e Fs(i)25 b Fo(\024)g Fs(j)5 b FA(.)42 b(In)29 b(particular)i(w)m(e)g(ha)m(v)m(e) 1057 4581 y Fs(y)1102 4595 y FD(0)1166 4581 y FA(=)25 b Fs(F)13 b FA(\()p Fs(x)1420 4595 y FD(0)1460 4581 y FA(\))1057 4719 y Fs(y)1102 4733 y FD(1)1166 4719 y FA(=)25 b Fs(F)1333 4681 y Fm(0)1356 4719 y FA(\()p Fs(x)1443 4733 y FD(0)1483 4719 y FA(\))p Fs(x)1570 4733 y FD(1)1057 4906 y Fs(y)1102 4920 y FD(2)1166 4906 y FA(=)g Fs(F)1333 4868 y Fm(0)1356 4906 y FA(\()p Fs(x)1443 4920 y FD(0)1483 4906 y FA(\))p Fs(x)1570 4920 y FD(2)1630 4906 y FA(+)1731 4844 y(1)p 1731 4885 46 4 v 1731 4968 a(2)1786 4906 y Fs(F)1857 4868 y Fm(00)1900 4906 y FA(\()p Fs(x)1987 4920 y FD(0)2027 4906 y FA(\))p Fs(x)2114 4920 y FD(1)2153 4906 y Fs(x)2205 4920 y FD(1)3675 4906 y SDict begin H.S end 3675 4906 a 3675 4906 a SDict begin 16.6 H.A end 3675 4906 a 3675 4906 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.8) cvn /DEST pdfmark end 3675 4906 a FA(\(8\))1057 5122 y Fs(y)1102 5136 y FD(3)1166 5122 y FA(=)g Fs(F)1333 5084 y Fm(0)1356 5122 y FA(\()p Fs(x)1443 5136 y FD(0)1483 5122 y FA(\))p Fs(x)1570 5136 y FD(3)1630 5122 y FA(+)20 b Fs(F)1792 5084 y Fm(00)1835 5122 y FA(\()p Fs(x)1922 5136 y FD(0)1961 5122 y FA(\))p Fs(x)2048 5136 y FD(1)2088 5122 y Fs(x)2140 5136 y FD(2)2200 5122 y FA(+)2301 5060 y(1)p 2301 5101 46 4 v 2301 5184 a(6)2356 5122 y Fs(F)2427 5084 y Fm(000)2489 5122 y FA(\()p Fs(x)2576 5136 y FD(0)2615 5122 y FA(\))p Fs(x)2702 5136 y FD(1)2742 5122 y Fs(x)2794 5136 y FD(1)2833 5122 y Fs(x)2885 5136 y FD(1)1156 5296 y Fs(:)15 b(:)g(:)p Black Black eop end %%Page: 40 40 TeXDict begin 40 39 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.40) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(40)671 b Fu(4)92 b(BASIC)30 b(DRIVERS)g(F)m(OR)g(THE)g(F)m(OR)-10 b(W)g(ARD)32 b(AND)f(REVERSE)e(MODE)p Black 191 606 a FA(In)h(writing)h(do)m(wn)f(the)h(last)h(equations)f(w)m(e)h(ha)m(v)m (e)g(already)f(departed)g(from)f(the)h(usual)f(matrix-v)m(ector)191 719 y(notation.)41 b(It)28 b(is)h(w)m(ell)g(kno)m(wn)e(that)i(the)f(n)m (um)m(b)s(er)f(of)h(terms)g(that)h(o)s(ccur)f(in)g(these)g(\\sym)m(b)s (olic")i(expres-)191 832 y(sions)k(for)g(the)g Fs(y)766 846 y Fi(j)836 832 y FA(in)g(terms)f(of)i(the)f(\014rst)f Fs(j)40 b FA(deriv)-5 b(ativ)m(e)35 b(tensors)f(of)g Fs(F)47 b FA(and)34 b(the)g(\\input")g(co)s(e\016cien)m(ts)191 945 y Fs(x)243 959 y Fi(i)310 945 y FA(with)k Fs(i)i Fo(\024)f Fs(j)44 b FA(gro)m(ws)c(v)m(ery)f(rapidly)f(with)h Fs(j)5 b FA(.)66 b(F)-8 b(ortunately)g(,)43 b(this)c(exp)s(onen)m(tial) h(gro)m(wth)f(do)s(es)f(not)191 1058 y(o)s(ccur)27 b(in)g(automatic)i (di\013eren)m(tiation,)h(where)d(the)g(man)m(y)h(terms)f(are)g(someho)m (w)h(implicitly)h(com)m(bined)191 1171 y(so)i(that)g(storage)g(and)f (op)s(erations)h(coun)m(t)g(gro)m(w)g(only)f(quadratically)i(in)e(the)h (b)s(ound)d Fs(d)j FA(on)f Fs(j)5 b FA(.)332 1333 y(Pro)m(vided)30 b Fs(F)44 b FA(is)30 b(analytic,)i(this)f(prop)s(ert)m(y)e(is)i (inherited)f(b)m(y)g(the)h(functions)1412 1505 y Fs(y)1457 1519 y Fi(j)1519 1505 y FA(=)25 b Fs(y)1660 1519 y Fi(j)1696 1505 y FA(\()p Fs(x)1783 1519 y FD(0)1822 1505 y Fs(;)15 b(x)1914 1519 y FD(1)1954 1505 y Fs(;)g(:)g(:)g(:)i(;)e(x)2208 1519 y Fi(j)2245 1505 y FA(\))25 b Fo(2)g Fs(I)-23 b(R)2478 1468 y Fi(m)2544 1505 y Fs(;)191 1677 y FA(and)30 b(their)g(deriv)-5 b(ativ)m(es)32 b(satisfy)f(the)f(iden)m(tities)1870 1677 y SDict begin H.S end 1870 1677 a 1870 1677 a SDict begin 13.6 H.A end 1870 1677 a 1870 1677 a SDict begin [/View [/XYZ H.V]/Dest (equation.4.9) cvn /DEST pdfmark end 1870 1677 a 1262 1826 a Fs(@)5 b(y)1360 1840 y Fi(j)p 1262 1867 135 4 v 1262 1950 a Fs(@)g(x)1367 1964 y Fi(i)1432 1888 y FA(=)1538 1826 y Fs(@)g(y)1636 1840 y Fi(j)t Fm(\000)p Fi(i)p 1538 1867 214 4 v 1572 1950 a Fs(@)g(x)1677 1964 y FD(0)1786 1888 y FA(=)25 b Fs(A)1950 1902 y Fi(j)t Fm(\000)p Fi(i)2066 1888 y FA(\()p Fs(x)2153 1902 y FD(0)2193 1888 y Fs(;)15 b(x)2285 1902 y FD(1)2325 1888 y Fs(;)g(:)g(:)g(:)h(;)f (x)2578 1902 y Fi(j)t Fm(\000)p Fi(i)2694 1888 y FA(\))946 b(\(9\))191 2099 y(as)31 b(established)f(in)g([)899 2099 y SDict begin H.S end 899 2099 a Black FA(2)p Black 945 2041 a SDict begin H.R end 945 2041 a 945 2099 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Chri91a) cvn H.B /ANN pdfmark end 945 2099 a FA(].)41 b(This)29 b(yields)i(in)f(particular)451 2253 y Fs(@)5 b(y)549 2267 y FD(0)p 448 2293 145 4 v 448 2376 a Fs(@)g(x)553 2390 y FD(0)628 2314 y FA(=)737 2253 y Fs(@)g(y)835 2267 y FD(1)p 734 2293 V 734 2376 a Fs(@)g(x)839 2390 y FD(1)914 2314 y FA(=)1023 2253 y Fs(@)g(y)1121 2267 y FD(2)p 1019 2293 V 1019 2376 a Fs(@)g(x)1124 2390 y FD(2)1199 2314 y FA(=)1309 2253 y Fs(@)g(y)1407 2267 y FD(3)p 1305 2293 V 1305 2376 a Fs(@)g(x)1410 2390 y FD(3)1485 2314 y FA(=)25 b Fs(A)1649 2328 y FD(0)1714 2314 y FA(=)g Fs(F)1881 2277 y Fm(0)1904 2314 y FA(\()p Fs(x)1991 2328 y FD(0)2031 2314 y FA(\))737 2486 y Fs(@)5 b(y)835 2500 y FD(1)p 734 2527 V 734 2610 a Fs(@)g(x)839 2624 y FD(0)914 2548 y FA(=)1023 2486 y Fs(@)g(y)1121 2500 y FD(2)p 1019 2527 V 1019 2610 a Fs(@)g(x)1124 2624 y FD(1)1199 2548 y FA(=)1309 2486 y Fs(@)g(y)1407 2500 y FD(3)p 1305 2527 V 1305 2610 a Fs(@)g(x)1410 2624 y FD(2)1485 2548 y FA(=)25 b Fs(A)1649 2562 y FD(1)1714 2548 y FA(=)g Fs(F)1881 2510 y Fm(00)1924 2548 y FA(\()p Fs(x)2011 2562 y FD(0)2050 2548 y FA(\))p Fs(x)2137 2562 y FD(1)1023 2720 y Fs(@)5 b(y)1121 2734 y FD(2)p 1019 2761 V 1019 2844 a Fs(@)g(x)1124 2858 y FD(0)1199 2782 y FA(=)1309 2720 y Fs(@)g(y)1407 2734 y FD(3)p 1305 2761 V 1305 2844 a Fs(@)g(x)1410 2858 y FD(1)1485 2782 y FA(=)25 b Fs(A)1649 2796 y FD(2)1714 2782 y FA(=)g Fs(F)1881 2744 y Fm(00)1924 2782 y FA(\()p Fs(x)2011 2796 y FD(0)2050 2782 y FA(\))p Fs(x)2137 2796 y FD(2)2197 2782 y FA(+)2298 2720 y(1)p 2298 2761 46 4 v 2298 2844 a(2)2354 2782 y Fs(F)2425 2744 y Fm(000)2486 2782 y FA(\()p Fs(x)2573 2796 y FD(0)2613 2782 y FA(\))p Fs(x)2700 2796 y FD(1)2740 2782 y Fs(x)2792 2796 y FD(1)1309 2954 y Fs(@)5 b(y)1407 2968 y FD(3)p 1305 2995 145 4 v 1305 3078 a Fs(@)g(x)1410 3092 y FD(0)1485 3016 y FA(=)25 b Fs(A)1649 3030 y FD(3)1714 3016 y FA(=)g Fs(F)1881 2978 y Fm(00)1924 3016 y FA(\()p Fs(x)2011 3030 y FD(0)2050 3016 y FA(\))p Fs(x)2137 3030 y FD(3)2197 3016 y FA(+)20 b Fs(F)2359 2978 y Fm(000)2421 3016 y FA(\()p Fs(x)2508 3030 y FD(0)2548 3016 y FA(\))p Fs(x)2635 3030 y FD(1)2674 3016 y Fs(x)2726 3030 y FD(2)2786 3016 y FA(+)2887 2954 y(1)p 2887 2995 46 4 v 2887 3078 a(6)2942 3016 y Fs(F)3013 2978 y FD(\(4\))3108 3016 y FA(\()p Fs(x)3195 3030 y FD(0)3234 3016 y FA(\))p Fs(x)3321 3030 y FD(1)3361 3016 y Fs(x)3413 3030 y FD(1)3453 3016 y Fs(x)3505 3030 y FD(1)1704 3204 y Fs(:)15 b(:)g(:)191 3376 y FA(The)35 b Fs(m)24 b Fo(\002)g Fs(n)35 b FA(matrices)i Fs(A)1110 3391 y Fi(k)1153 3376 y Fs(;)15 b(k)39 b FA(=)34 b(0)p Fs(;)15 b(:)g(:)g(:)i(;)e(d)p FA(,)38 b(are)f(actually)g(the)g(T)-8 b(a)m(ylor)37 b(co)s(e\016cien)m(ts)h(of)e(the)g(Jacobian)191 3489 y(path)41 b Fs(F)485 3456 y Fm(0)509 3489 y FA(\()p Fs(x)p FA(\()p Fs(t)p FA(\)\),)46 b(a)c(fact)g(that)g(is)g(of)g(in)m (terest)h(primarily)e(in)g(the)h(con)m(text)i(of)d(ordinary)g (di\013eren)m(tial)191 3602 y(equations)31 b(and)f(di\013eren)m(tial)i (algebraic)g(equations.)332 3764 y(Giv)m(en)38 b(the)e(tap)s(e)h(of)g (an)f(activ)m(e)j(section)f(and)e(the)h(co)s(e\016cien)m(ts)h Fs(x)2660 3778 y Fi(j)2696 3764 y FA(,)h(the)d(resulting)h Fs(y)3348 3778 y Fi(j)3421 3764 y FA(and)f(their)191 3877 y(deriv)-5 b(ativ)m(es)33 b Fs(A)713 3891 y Fi(j)780 3877 y FA(can)f(b)s(e)e(ev)-5 b(aluated)33 b(b)m(y)e(appropriate)g (calls)h(to)g(the)g(ADOL-C)f(forw)m(ard)g(mo)s(de)f(imple-)191 3990 y(men)m(tations)41 b(and)e(the)g(ADOL-C)h(rev)m(erse)g(mo)s(de)f (implemen)m(tations.)70 b(The)39 b(scalar)h(v)m(ersions)g(of)g(the)191 4103 y(forw)m(ard)33 b(mo)s(de)h(propagate)h(just)e(one)h(truncated)g (T)-8 b(a)m(ylor)35 b(series)f(from)g(the)g(\()p Fs(x)2978 4117 y Fi(j)3015 4103 y FA(\))3050 4118 y Fi(j)t Fm(\024)p Fi(d)3211 4103 y FA(to)h(the)f(\()p Fs(y)3566 4117 y Fi(j)3602 4103 y FA(\))3637 4118 y Fi(j)t Fm(\024)p Fi(d)3766 4103 y FA(.)191 4216 y(The)28 b(v)m(ector)j(v)m(ersions)e(of)g(the)g (forw)m(ard)f(mo)s(de)g(propagate)i(families)g(of)f Fs(p)c Fo(\025)g FA(1)k(suc)m(h)g(truncated)f(T)-8 b(a)m(ylor)191 4329 y(series)24 b(in)g(order)f(to)i(reduce)f(the)g(relativ)m(e)i(cost) f(of)f(the)g(o)m(v)m(erhead)h(incurred)e(in)h(the)g(tap)s(e)g(in)m (terpretation.)191 4442 y(In)30 b(detail,)h(ADOL-C)g(pro)m(vides)p Black Black 491 4653 a Fq(int)f(zos)p 748 4653 28 4 v 32 w(fo)m(rw)m(a)m(rd\(tag,m,n,k)m(eep,x,y\))491 4765 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation) 491 4878 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 4991 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 5104 y Fq(int)f(k)m(eep;)863 b FA(//)31 b(\015ag)g(for)f(rev)m(erse)h(mo)s(de)f(preparation)491 5217 y Fq(double)h(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fs(x)25 b FA(=)g Fs(x)2814 5231 y FD(0)491 5330 y Fq(double)31 b(y[m];)718 b FA(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fs(y)c FA(=)d Fs(F)13 b FA(\()p Fs(x)2840 5344 y FD(0)2880 5330 y FA(\))p Black Black eop end %%Page: 41 41 TeXDict begin 41 40 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.41) cvn /DEST pdfmark end 183 199 a Black 3700 307 a FA(41)p Black 191 606 a(for)28 b(the)h Fx(z)p FA(ero-)p Fx(o)p FA(rder)g Fx(s)p FA(calar)g(forw)m(ard)f(mo)s(de.)40 b(This)28 b(driv)m(er)g(computes)g Fs(y)g FA(=)d Fs(F)13 b FA(\()p Fs(x)p FA(\))29 b(with)g(0)c Fo(\024)g Fq(k)m(eep)i Fo(\024)e FA(1.)191 719 y(The)c(in)m(teger)h(\015ag)g Fq(k)m(eep)h FA(pla)m(ys)f(a)f(similar)h(role)g(as)f(in)g(the)h(call)g (to)g Fq(trace)p 2561 719 28 4 v 33 w(on)p FA(:)37 b(It)21 b(determines)g(if)h Fq(zos)p 3483 719 V 32 w(fo)m(rw)m(a)m(rd)191 832 y FA(writes)34 b(the)f(\014rst)g(T)-8 b(a)m(ylor)35 b(co)s(e\016cien)m(ts)g(of)f(all)g(in)m(termediate)h(quan)m(tities)g (in)m(to)g(a)f(bu\013ered)e(temp)s(orary)191 945 y(\014le,)43 b(i.e.,)h(the)c(v)-5 b(alue)40 b(stac)m(k,)k(in)c(preparation)g(for)g (a)g(subsequen)m(t)g(rev)m(erse)g(mo)s(de)g(ev)-5 b(aluation.)71 b(The)191 1058 y(v)-5 b(alue)31 b Fq(k)m(eep)h FA(=)25 b(1)31 b(prepares)e(for)h Fq(fos)p 1414 1058 V 33 w(reverse)i FA(or)e Fq(fov)p 1964 1058 V 33 w(reverse)h FA(as)g(exlained)g(b)s(elo) m(w.)332 1220 y(T)-8 b(o)31 b(compute)g(\014rst-order)e(deriv)-5 b(ativ)m(es,)32 b(one)f(has)p Black Black 491 1450 a Fq(int)f(fos)p 736 1450 V 33 w(fo)m(rw)m(a)m(rd\(tag,m,n,k)m (eep,x0,x1,y0,y1)q(\))491 1563 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 1676 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fs(m)491 1789 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 1902 y Fq(int)f(k)m(eep;)863 b FA(//)31 b(\015ag)g(for)f(rev)m(erse)h(mo)s(de)f(preparation)491 2014 y Fq(double)h(x0[n];)698 b FA(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fs(x)2641 2028 y FD(0)491 2127 y Fq(double)f(x1[n];)698 b FA(//)31 b(tangen)m(t)h(v)m(ector)g Fs(x)2456 2141 y FD(1)491 2240 y Fq(double)f(y0[m];)673 b FA(//)31 b(dep)s(enden)m(t)f (v)m(ector)i Fs(y)2558 2254 y FD(0)2622 2240 y FA(=)25 b Fs(F)13 b FA(\()p Fs(x)2876 2254 y FD(0)2916 2240 y FA(\))491 2353 y Fq(double)31 b(y1[m];)673 b FA(//)31 b(\014rst)f(deriv)-5 b(ativ)m(e)32 b Fs(y)2450 2367 y FD(1)2514 2353 y FA(=)25 b Fs(F)2681 2320 y Fm(0)2705 2353 y FA(\()p Fs(x)2792 2367 y FD(0)2831 2353 y FA(\))p Fs(x)2918 2367 y FD(1)191 2583 y FA(for)30 b(the)h Fx(f)p FA(irst-)p Fx(o)p FA(rder)f Fx(s)p FA(calar)h(forw)m(ard)f(mo)s(de.)41 b(Here,)31 b(one)f(has)g(0)c Fo(\024)f Fq(k)m(eep)i Fo(\024)e FA(2,)31 b(where)954 2826 y Fq(k)m(eep)c FA(=)1245 2698 y Fl(\032)1355 2769 y FA(1)83 b(prepares)30 b(for)g Fq(fos)p 2100 2769 V 33 w(reverse)h FA(or)g Fq(fov)p 2650 2769 V 33 w(reverse)1355 2882 y FA(2)83 b(prepares)30 b(for)g Fq(hos)p 2119 2882 V 33 w(reverse)h FA(or)g Fq(hov)p 2688 2882 V 33 w(reverse)191 3061 y FA(as)g(exlained)g(b)s(elo)m(w.)41 b(F)-8 b(or)31 b(the)f Fx(f)p FA(irst-)p Fx(o)p FA(rder)g Fx(v)p FA(ector)i(forw)m(ard)e(mo)s(de,)g(ADOL-C)g(pro)m(vides)p Black Black 491 3290 a Fq(int)g(fov)p 743 3290 V 33 w(fo)m(rw)m(a)m (rd\(tag,m,n,p,x0,X,y0,Y\))491 3403 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 3516 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fs(m)491 3629 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3742 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(directions)491 3855 y Fq(double)h(x0[n];)698 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)2641 3869 y FD(0)491 3968 y Fq(double)f(X[n][p];)625 b FA(//)31 b(tangen)m(t)h(matrix)f Fs(X)491 4081 y Fq(double)g(y0[m];)673 b FA(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fs(y)2558 4095 y FD(0)2622 4081 y FA(=)25 b Fs(F)13 b FA(\()p Fs(x)2876 4095 y FD(0)2916 4081 y FA(\))491 4194 y Fq(double)31 b(Y[m][p];)600 b FA(//)31 b(\014rst)f(deriv)-5 b(ativ)m(e)32 b(matrix)f Fs(Y)45 b FA(=)25 b Fs(F)2966 4161 y Fm(0)2989 4194 y FA(\()p Fs(x)p FA(\))p Fs(X)191 4423 y FA(F)-8 b(or)31 b(the)g(computation)g(of)f(higher)h(deriv)-5 b(ativ)m(e,)32 b(the)e(driv)m(er)p Black Black 491 4653 a Fq(int)g(hos)p 755 4653 V 33 w(fo)m(rw)m(a)m(rd\(tag,m,n,d,k)m (eep,x0,X,y0,Y\))491 4765 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 4878 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fs(m)491 4991 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 5104 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 5217 y Fq(int)f(k)m(eep;)863 b FA(//)31 b(\015ag)g(for)f(rev)m(erse)h (mo)s(de)f(preparation)491 5330 y Fq(double)h(x0[n];)698 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)2641 5344 y FD(0)p Black Black eop end %%Page: 42 42 TeXDict begin 42 41 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.42) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(42)671 b Fu(4)92 b(BASIC)30 b(DRIVERS)g(F)m(OR)g(THE)g(F)m(OR)-10 b(W)g(ARD)32 b(AND)f(REVERSE)e(MODE)p Black 491 606 a Fq(double)i(X[n][d];)625 b FA(//)31 b(tangen)m(t)h(matrix)f Fs(X)491 719 y Fq(double)g(y0[m];)673 b FA(//)31 b(dep)s(enden)m(t)f(v) m(ector)i Fs(y)2558 733 y FD(0)2622 719 y FA(=)25 b Fs(F)13 b FA(\()p Fs(x)2876 733 y FD(0)2916 719 y FA(\))491 832 y Fq(double)31 b(Y[m][d];)600 b FA(//)31 b(deriv)-5 b(ativ)m(e)32 b(matrix)f Fs(Y)191 1057 y FA(implemen)m(ting)46 b(the)f Fx(h)p FA(igher-)p Fx(o)p FA(rder)g Fx(s)p FA(calar)i(forw)m(ard)d(mo)s (de.)85 b(The)44 b(ro)m(ws)h(of)h(the)f(matrix)g Fs(X)53 b FA(m)m(ust)191 1170 y(corresp)s(ond)41 b(to)i(the)g(indep)s(enden)m (t)e(v)-5 b(ariables)43 b(in)f(the)h(order)f(of)g(their)h (initialization)i(b)m(y)d(the)h Fp(\034)p Fx(=)191 1283 y FA(op)s(erator.)68 b(The)39 b(columns)g(of)h Fs(X)48 b FA(=)40 b Fo(f)p Fs(x)1623 1297 y Fi(j)1660 1283 y Fo(g)1705 1298 y Fi(j)t FD(=1)p Fi(:::)n(d)1966 1283 y FA(represen)m(t)g(T)-8 b(a)m(ylor)40 b(co)s(e\016cien)m(t)i(v)m (ectors)f(as)e(in)g(\()3684 1283 y SDict begin H.S end 3684 1283 a Black FA(5)p Black 3730 1224 a SDict begin H.R end 3730 1224 a 3730 1283 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.5) cvn H.B /ANN pdfmark end 3730 1283 a FA(\))q(.)191 1396 y(The)29 b(ro)m(ws)g(of)g(the)g(matrix)h Fs(Y)49 b FA(m)m(ust)29 b(corresp)s(ond)f(to)h(the)h(dep)s(enden)m(t)e (v)-5 b(ariables)30 b(in)e(the)i(order)e(of)i(their)191 1509 y(selection)i(b)m(y)d(the)h Fp(\035)p Fx(=)g FA(op)s(erator.)41 b(The)29 b(columns)h(of)g Fs(Y)45 b FA(=)25 b Fo(f)p Fs(y)2386 1523 y Fi(j)2423 1509 y Fo(g)2468 1524 y Fi(j)t FD(=1)p Fi(:::)o(d)2720 1509 y FA(represen)m(t)30 b(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(t)191 1621 y(v)m(ectors)41 b(as)f(in)g(\()781 1621 y SDict begin H.S end 781 1621 a Black FA(7)p Black 827 1563 a SDict begin H.R end 827 1563 a 827 1621 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.7) cvn H.B /ANN pdfmark end 827 1621 a FA(\),)j(i.e.,)g Fq(hos)p 1245 1621 28 4 v 33 w(fo)m(rw)m(a)m(rd)f FA(computes)e(the)g (v)-5 b(alues)40 b Fs(y)2499 1635 y FD(0)2579 1621 y FA(=)h Fs(F)13 b FA(\()p Fs(x)2849 1635 y FD(0)2889 1621 y FA(\),)43 b Fs(y)3037 1635 y FD(1)3117 1621 y FA(=)e Fs(F)3300 1588 y Fm(0)3323 1621 y FA(\()p Fs(x)3410 1635 y FD(0)3450 1621 y FA(\))p Fs(x)3537 1635 y FD(1)3577 1621 y FA(,)h(.)16 b(.)f(.)h(,)191 1734 y(where)28 b Fs(X)33 b FA(=)25 b([)p Fs(x)733 1748 y FD(1)773 1734 y Fs(;)15 b(x)865 1748 y FD(2)904 1734 y Fs(;)g(:)g(:)g(:)i(;)e(x)1158 1749 y Fi(d)1199 1734 y FA(])29 b(and)f Fs(Y)45 b FA(=)25 b([)p Fs(y)1692 1748 y FD(1)1731 1734 y Fs(;)15 b(y)1816 1748 y FD(2)1856 1734 y Fs(;)g(:)g(:)g(:)i(;)e(y)2103 1749 y Fi(d)2143 1734 y FA(].)40 b(F)-8 b(urthermore,)30 b(one)f(has)f(0)e Fo(\024)f Fq(k)m(eep)i Fo(\024)e Fs(d)17 b FA(+)g(1,)191 1847 y(with)959 2068 y Fq(k)m(eep)1144 1939 y Fl(\032)1254 2011 y FA(=)25 b(1)83 b(prepares)30 b(for)g Fq(fos)p 2095 2011 V 33 w(reverse)h FA(or)g Fq(fov)p 2645 2011 V 32 w(reverse)1254 2124 y Fs(>)25 b FA(1)83 b(prepares)30 b(for)g Fq(hos)p 2114 2124 V 33 w(reverse)h FA(or)g Fq(hov)p 2683 2124 V 33 w(reverse)191 2297 y FA(Once)f(more,)h(there)g(is)f(also)h(a)g(v)m(ector)h(v)m(ersion)f(giv) m(en)g(b)m(y)p Black Black 491 2522 a Fq(int)f(hov)p 762 2522 V 33 w(fo)m(rw)m(a)m(rd\(tag,m,n,d,p,x0,X,y0,Y\))491 2635 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 2748 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 2861 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 2974 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 3087 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g (directions)h Fs(p)491 3200 y Fq(double)g(x0[n];)698 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)2641 3214 y FD(0)491 3313 y Fq(double)f(X[n][p][d];)526 b FA(//)31 b(tangen)m(t)h(matrix)f Fs(X)491 3425 y Fq(double)g(y0[m];)673 b FA(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fs(y)2558 3439 y FD(0)2622 3425 y FA(=)25 b Fs(F)13 b FA(\()p Fs(x)2876 3439 y FD(0)2916 3425 y FA(\))491 3538 y Fq(double)31 b(Y[m][p][d];)501 b FA(//)31 b(deriv)-5 b(ativ)m(e)32 b(matrix)f Fs(Y)191 3763 y FA(for)h(the)g Fx(h)p FA(igher-)p Fx(o)p FA(rder)g Fx(v)p FA(ector)i(forw)m(ard)d(mo)s(de)h(that)h (computes)f Fs(y)2539 3777 y FD(0)2606 3763 y FA(=)c Fs(F)13 b FA(\()p Fs(x)2863 3777 y FD(0)2903 3763 y FA(\),)33 b Fs(Y)3049 3777 y FD(1)3116 3763 y FA(=)28 b Fs(F)3286 3730 y Fm(0)3310 3763 y FA(\()p Fs(x)3397 3777 y FD(0)3436 3763 y FA(\))p Fs(X)3546 3777 y FD(1)3587 3763 y FA(,)k(.)16 b(.)f(.)h(,)191 3876 y(where)30 b Fs(X)j FA(=)24 b([)p Fs(X)757 3890 y FD(1)797 3876 y Fs(;)15 b(X)912 3890 y FD(2)953 3876 y Fs(;)g(:)g(:)g(:)h(;)f(X)1229 3891 y Fi(d)1270 3876 y FA(])31 b(and)f Fs(Y)45 b FA(=)25 b([)p Fs(Y)1775 3890 y FD(1)1814 3876 y Fs(;)15 b(Y)1907 3890 y FD(2)1947 3876 y Fs(;)g(:)g(:)g(:)i(;)e(Y)2202 3891 y Fi(d)2242 3876 y FA(].)332 4039 y(There)35 b(are)g(also)h(o)m(v) m(erloaded)h(v)m(ersions)e(pro)m(viding)g(a)g(general)h Fq(fo)m(rw)m(a)m(rd)p FA(-call.)58 b(Details)37 b(of)e(the)h(ap-)191 4152 y(propriate)30 b(calling)i(sequences)f(are)g(giv)m(en)g(in)1781 4152 y SDict begin H.S end 1781 4152 a Black FA(Section)g(5)p Black 2145 4090 a SDict begin H.R end 2145 4090 a 2145 4152 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 2145 4152 a FA(.)332 4315 y(Once,)h(the)f(required)g(information)g(is)h(generated)g(due)f(to)h(a) f(forw)m(ard)g(mo)s(de)g(ev)-5 b(aluation)33 b(with)e(an)191 4428 y(approriate)e(v)-5 b(alue)29 b(of)g(the)g(parameter)h Fq(k)m(eep)p FA(,)h(one)e(ma)m(y)g(use)f(the)h(follo)m(wing)i(implemen) m(tation)f(v)-5 b(arian)m(ts)191 4540 y(of)30 b(the)h(rev)m(erse)g(mo)s (de.)40 b(T)-8 b(o)31 b(compute)g(\014rst-order)e(deriv)-5 b(ativ)m(es)32 b(one)f(can)g(use)p Black Black 491 4765 a Fq(int)f(fos)p 736 4765 28 4 v 33 w(reverse\(tag,m,n,u,z\))491 4878 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 4991 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 5104 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 5217 y Fq(double)g(u[m];)713 b FA(//)31 b(w)m(eigh)m(t)h(v)m(ector)g Fs(u)491 5330 y Fq(double)f(z[n];)745 b FA(//)31 b(resulting)g(adjoin)m(t)g(v)-5 b(alue)31 b Fs(z)2764 5297 y Fi(T)2844 5330 y FA(=)25 b Fs(u)2992 5297 y Fi(T)3047 5330 y Fs(F)3118 5297 y Fm(0)3142 5330 y FA(\()p Fs(x)p FA(\))p Black Black eop end %%Page: 43 43 TeXDict begin 43 42 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.43) cvn /DEST pdfmark end 183 199 a Black 3700 307 a FA(43)p Black 191 606 a(as)25 b Fx(f)p FA(irst-)p Fx(o)p FA(rder)f Fx(s)p FA(calar)i(rev)m(erse)f(mo)s(de)f(implemen)m (tation)i(that)f(computes)g(the)g(pro)s(duct)e Fs(z)3290 573 y Fi(T)3371 606 y FA(=)i Fs(u)3519 573 y Fi(T)3574 606 y Fs(F)3645 573 y Fm(0)3668 606 y FA(\()p Fs(x)p FA(\))191 719 y(after)33 b(calling)h Fq(zos)p 823 719 28 4 v 32 w(fo)m(rw)m(a)m(rd)p FA(,)h Fq(fos)p 1302 719 V 33 w(fo)m(rw)m(a)m(rd)p FA(,)f(or)f Fq(hos)p 1914 719 V 33 w(fo)m(rw)m(a)m(rd)h FA(with)e Fq(k)m(eep)p FA(=1.)48 b(The)32 b(corresp)s(onding)f Fx(f)p FA(irst-)191 832 y Fx(o)p FA(rder)f Fx(v)p FA(ector)h(rev)m(erse)g(mo)s(de)f(driv)m(er)g (is)h(giv)m(en)g(b)m(y)p Black Black 491 1073 a Fq(int)f(fov)p 743 1073 V 33 w(reverse\(tag,m,n,q,U,Z\))491 1186 y(sho)m(rt)h(int)f (tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 1299 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden) m(t)f(v)-5 b(ariables)31 b Fs(m)491 1412 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 1525 y Fq(int)f(q;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(w)m(eigh)m(t)i(v)m(ectors)g Fs(q)491 1638 y Fq(double)f(U[q][m];)598 b FA(//)31 b(w)m(eigh)m(t)h (matrix)f Fs(U)491 1751 y Fq(double)g(Z[q][n];)630 b FA(//)31 b(resulting)g(adjoin)m(t)g Fs(Z)h FA(=)25 b Fs(U)10 b(F)2816 1718 y Fm(0)2839 1751 y FA(\()p Fs(x)p FA(\))191 1993 y(that)44 b(can)g(b)s(e)f(used)g(after)h(calling)h Fq(zos)p 1593 1993 V 33 w(fo)m(rw)m(a)m(rd)p FA(,)j Fq(fos)p 2086 1993 V 33 w(fo)m(rw)m(a)m(rd)p FA(,)h(or)44 b Fq(hos)p 2724 1993 V 33 w(fo)m(rw)m(a)m(rd)h FA(with)e Fq(k)m(eep)p FA(=1.)82 b(T)-8 b(o)191 2105 y(compute)31 b(higher-order)f(deriv)-5 b(ativ)m(es,)32 b(ADOL-C)e(pro)m(vides)p Black Black 491 2347 a Fq(int)g(hos)p 755 2347 V 33 w(reverse\(tag,m,n,d,u,Z\))491 2460 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 2573 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 2686 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 2799 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 2912 y Fq(double)g(u[m];)713 b FA(//)31 b(w)m(eigh)m(t)h(v)m (ector)g Fs(u)491 3024 y Fq(double)f(Z[n][d+1];)514 b FA(//)31 b(resulting)g(adjoin)m(ts)191 3266 y(as)d Fx(h)p FA(igher-)p Fx(o)p FA(rder)f Fx(s)p FA(calar)i(rev)m(erse)f(mo)s(de)e (implemen)m(tation)j(yielding)f(the)g(adjoin)m(ts)g Fs(z)3155 3233 y Fi(T)3151 3290 y FD(0)3235 3266 y FA(=)d Fs(u)3383 3233 y Fi(T)3438 3266 y Fs(F)3509 3233 y Fm(0)3533 3266 y FA(\()p Fs(x)3620 3280 y FD(0)3659 3266 y FA(\))h(=)191 3379 y Fs(u)243 3346 y Fi(T)298 3379 y Fs(A)366 3393 y FD(0)406 3379 y FA(,)31 b Fs(z)508 3346 y Fi(T)504 3403 y FD(1)589 3379 y FA(=)25 b Fs(u)737 3346 y Fi(T)793 3379 y Fs(F)864 3346 y Fm(00)906 3379 y FA(\()p Fs(x)993 3393 y FD(0)1033 3379 y FA(\))p Fs(x)1120 3393 y FD(1)1185 3379 y FA(=)h Fs(u)1334 3346 y Fi(T)1389 3379 y Fs(A)1457 3393 y FD(1)1497 3379 y FA(,)31 b(.)15 b(.)h(.)f(,)31 b(where)f Fs(Z)j FA(=)25 b([)p Fs(z)2251 3393 y FD(0)2291 3379 y Fs(;)15 b(z)2373 3393 y FD(1)2413 3379 y Fs(;)g(:)g(:)g(:)i(;)e (z)2657 3394 y Fi(d)2698 3379 y FA(])31 b(after)g(calling)i Fq(fos)p 3371 3379 V 32 w(fo)m(rw)m(a)m(rd)g FA(or)191 3492 y Fq(hos)p 323 3492 V 33 w(fo)m(rw)m(a)m(rd)f FA(with)e Fq(k)m(eep)i FA(=)25 b Fs(d)20 b FA(+)g(1)26 b Fs(>)f FA(1.)41 b(The)30 b(v)m(ector)i(v)m(ersion)f(is)f(giv)m(en)i(b)m(y)p Black Black 491 3733 a Fq(int)e(hov)p 762 3733 V 33 w (reverse\(tag,m,n,d,q,U,Z,nz\))491 3846 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 3959 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fs(m)491 4072 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 4185 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 4298 y Fq(double)g(U[q][m];)598 b FA(//)31 b(w)m(eigh)m(t)h(v)m(ector)g Fs(u)491 4411 y Fq(double)f(Z[q][n][d+1];)415 b FA(//)31 b(resulting)g(adjoin)m(ts)491 4524 y Fq(sho)m(rt)g(int)f(nz[q][n];)527 b FA(//)31 b(nonzero)g(pattern)g(of)f Fq(Z)191 4765 y FA(as)h Fx(h)p FA(igher-)p Fx(o)p FA(rder)g Fx(v)p FA(ector)h(rev)m (erse)f(mo)s(de)f(driv)m(er)h(to)g(compute)g(the)g(adjoin)m(ts)g Fs(Z)2973 4779 y FD(0)3039 4765 y FA(=)25 b Fs(U)10 b(F)3278 4732 y Fm(0)3302 4765 y FA(\()p Fs(x)3389 4779 y FD(0)3428 4765 y FA(\))26 b(=)g Fs(U)10 b(A)3726 4779 y FD(0)3766 4765 y FA(,)191 4878 y Fs(Z)253 4892 y FD(1)345 4878 y FA(=)53 b Fs(U)10 b(F)612 4845 y Fm(00)654 4878 y FA(\()p Fs(x)741 4892 y FD(0)781 4878 y FA(\))p Fs(x)868 4892 y FD(1)960 4878 y FA(=)53 b Fs(U)10 b(A)1224 4892 y FD(1)1263 4878 y FA(,)51 b(.)16 b(.)f(.)h(,)51 b(where)46 b Fs(Z)59 b FA(=)53 b([)p Fs(Z)2148 4892 y FD(0)2187 4878 y Fs(;)15 b(Z)2289 4892 y FD(1)2329 4878 y Fs(;)g(:)g(:)g(:)i(;)e(Z)2593 4893 y Fi(d)2634 4878 y FA(])47 b(after)g(calling)i Fq(fos)p 3355 4878 V 32 w(fo)m(rw)m(a)m(rd)g FA(or)191 4991 y Fq(hos)p 323 4991 V 33 w(fo)m(rw)m(a)m(rd)31 b FA(with)d Fq(k)m(eep)j FA(=)25 b Fs(d)18 b FA(+)g(1)25 b Fs(>)g FA(1.)41 b(After)29 b(the)h(function)e(call,)j(the)f(last)g(argumen)m (t)f(of)h Fq(hov)p 3503 4991 V 33 w(reverse)191 5104 y FA(con)m(tains)d(information)g(ab)s(out)f(the)g(sparsit)m(y)h (pattern,)g(i.e.)41 b(eac)m(h)27 b Fq(nz[i][j])g FA(has)f(a)g(v)-5 b(alue)27 b(that)g(c)m(haracter-)191 5217 y(izes)f(the)f(functional)g (relation)i(b)s(et)m(w)m(een)e(the)h Fs(i)p FA(-th)f(comp)s(onen)m(t)g (of)h Fs(U)10 b(F)2629 5184 y Fm(0)2652 5217 y FA(\()p Fs(x)p FA(\))26 b(and)e(the)h Fs(j)5 b FA(-th)26 b(indep)s(enden)m(t) 191 5330 y(v)-5 b(alue)31 b Fs(x)478 5344 y Fi(j)545 5330 y FA(as:)p Black Black eop end %%Page: 44 44 TeXDict begin 44 43 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.44) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(44)671 b Fu(4)92 b(BASIC)30 b(DRIVERS)g(F)m(OR)g(THE)g(F)m(OR)-10 b(W)g(ARD)32 b(AND)f(REVERSE)e(MODE)p Black Black Black 827 594 a FA(0)100 b(trivial)827 707 y(1)g(linear)1529 594 y(2)g(p)s(olynomial)1529 707 y(3)g(rational)2430 594 y(4)h(transcenden)m(tal)2430 707 y(5)g(non-smo)s(oth)191 942 y(Here,)27 b(\\trivial")h(means)e(that)g(there)h(is)e(no)h(dep)s (endence)f(at)i(all)f(and)g(\\linear")h(means)e(that)i(the)f(partial) 191 1055 y(deriv)-5 b(ativ)m(e)34 b(is)f(a)h(constan)m(t)g(that)f(do)s (es)g(not)g(dep)s(enden)m(t)f(on)h(other)g(v)-5 b(ariables)34 b(either.)49 b(\\Non-smo)s(oth")191 1168 y(means)35 b(that)h(one)g(of)g (the)f(functions)g(on)h(the)f(path)g(b)s(et)m(w)m(een)h Fs(x)2433 1182 y Fi(i)2497 1168 y FA(and)f Fs(y)2724 1182 y Fi(j)2795 1168 y FA(w)m(as)h(ev)-5 b(aluated)37 b(at)f(a)g(p)s(oin)m(t)191 1281 y(where)25 b(it)i(is)f(not)g (di\013eren)m(tiable.)40 b(All)27 b(p)s(ositiv)m(e)f(lab)s(els)g(1)p Fs(;)15 b FA(2)p Fs(;)g FA(3)p Fs(;)g FA(4)p Fs(;)g FA(5)30 b(are)c(p)s(essimistic)g(in)g(that)g(the)g(actual)191 1393 y(functional)31 b(relation)g(ma)m(y)g(in)f(fact)i(b)s(e)d (simpler,)i(for)f(example)h(due)e(to)j(exact)f(cancellations.)332 1556 y(There)36 b(are)h(also)g(o)m(v)m(erloaded)i(v)m(ersions)d(pro)m (viding)h(a)g(general)g Fq(reverse)p FA(-call.)62 b(Details)38 b(of)f(the)g(ap-)191 1669 y(propriate)30 b(calling)i(sequences)f(are)g (giv)m(en)g(in)f(the)h(follo)m(wing)2322 1669 y SDict begin H.S end 2322 1669 a Black FA(Section)g(5)p Black 2685 1607 a SDict begin H.R end 2685 1607 a 2685 1669 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 2685 1669 a FA(.)191 1822 y SDict begin H.S end 191 1822 a 191 1822 a SDict begin 13.6 H.A end 191 1822 a 191 1822 a SDict begin [/View [/XYZ H.V]/Dest (subsection.4.1) cvn /DEST pdfmark end 191 1822 a 149 x FB(4.1)112 b(Driv)m(ers)38 b(for)f(Abs-Normal)h(F)-9 b(orm)191 2194 y FA(In)25 b(this)h(subsection)f(w)m(e)h(consider)g(functions)f Fs(y)j FA(=)d Fs(F)13 b FA(\()p Fs(x)p FA(\))26 b(:)g(I)-20 b(R)2292 2158 y Fi(n)2364 2194 y Fo(!)26 b FA(I)-20 b(R)2560 2158 y Fi(m)2652 2194 y FA(that)26 b(are)g(non-smo)s(oth)g(b)s(ecause) 191 2307 y(of)g(the)h(o)s(ccurrence)f(of)g(the)h(absolute)f(v)-5 b(alue)27 b(function.)39 b(The)26 b(driv)m(ers)f(pro)m(vided)h (generate)i(a)e(piecewise-)191 2420 y(linear)d(appro)m(ximation)h(of)g (the)f(function)g Fs(F)36 b FA(in)23 b(a)g(p)s(oin)m(t)g Fs(x)2173 2434 y FD(0)2236 2420 y FA(and)f(\014rst)g(order)h(deriv)-5 b(ativ)m(es)24 b(of)g(this)f(second)191 2532 y(order)36 b(appro)m(ximation.)60 b(The)35 b(piecewise-linear)k(mo)s(del)d(will)h (b)s(e)e(called)j(piecewise)g(linearization)g(in)191 2645 y(the)31 b(follo)m(wing.)42 b(F)-8 b(urther)30 b(information)g(ab) s(out)h(the)f(piecewise)i(linearization)g(y)m(ou)f(can)f(\014nd)f(in)h ([)3572 2645 y SDict begin H.S end 3572 2645 a Black FA(7)p Black 3618 2587 a SDict begin H.R end 3618 2587 a 3618 2645 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Griewank13) cvn H.B /ANN pdfmark end 3618 2645 a FA(].)332 2808 y(The)g(piecewise)h(linearization)i(is)d(giv)m(en)i(in)e Fr(abs-normal)41 b FA(form)30 b(b)m(y)1285 2938 y Fl(\024)1375 3010 y Fs(z)1374 3123 y(y)1464 2938 y Fl(\025)1537 3066 y FA(=)1633 2938 y Fl(\024)1722 3010 y Fs(c)1722 3123 y(b)1803 2938 y Fl(\025)1871 3066 y FA(+)1962 2938 y Fl(\024)2052 3010 y Fs(Z)95 b(L)2056 3123 y(J)i(Y)2318 2938 y Fl(\025)15 b(\024)2493 3010 y Fs(x)2470 3123 y Fo(j)p Fs(z)t Fo(j)2609 2938 y Fl(\025)2672 3066 y Fs(:)191 3326 y FA(Here)35 b Fs(z)h Fo(2)31 b FA(I)-20 b(R)659 3290 y Fi(s)731 3326 y FA(is)34 b(a)h(v)m(ector)g(of)g Fs(s)c Fo(\025)h FA(0)i Fr(switching)j(variables)43 b FA(and)34 b(corresp)s(ondingly)f(the)i(t)m(w)m(o)g(v)m(ectors)191 3439 y(and)30 b(four)f(matrices)j(sp)s(ecifying)e(the)h(function)f Fs(F)43 b FA(ha)m(v)m(e)32 b(the)e(format)613 3648 y Fs(c)c Fo(2)f FA(I)-20 b(R)843 3611 y Fi(s)880 3648 y Fs(;)106 b(Z)32 b Fo(2)25 b FA(I)-20 b(R)1270 3611 y Fi(s)p Fm(\002)p Fi(n)1405 3648 y Fs(;)106 b(L)25 b Fo(2)g FA(I)-20 b(R)1788 3611 y Fi(s)p Fm(\002)p Fi(s)1913 3648 y Fs(;)106 b(b)25 b Fo(2)g FA(I)-20 b(R)2273 3611 y Fi(m)2340 3648 y Fs(;)106 b(J)35 b Fo(2)25 b FA(I)-20 b(R)2721 3611 y Fi(m)p Fm(\002)p Fi(n)2885 3648 y Fs(;)15 b(Y)46 b Fo(2)25 b FA(I)-20 b(R)3189 3611 y Fi(m)p Fm(\002)p Fi(s)3343 3648 y Fs(:)191 3858 y FA(The)30 b(matrix)h Fs(L)f FA(is)g(strictly)h(lo)m(w)m(er)h(triangular.)332 4020 y(T)-8 b(o)21 b(compute)g(the)f(piecewise)i(linearization)h(\001)p Fs(F)13 b FA(\()p Fs(x)2091 4034 y FD(0)2130 4020 y FA(;)i Fs(x)p FA(\))21 b(the)g(abs-normal)f(mo)s(de)h(has)f(to)h(b)s(e)f (enabled)191 4133 y(b)m(y)30 b(using)p Black Black 491 4376 a Fq(enableMinMaxUsingAbs\(\))191 4619 y FA(b)s(efore)42 b(the)g Fr(tr)-5 b(ac)g(e)p 844 4619 28 4 v 41 w(on)7 b FA(\(\))43 b(command.)75 b(If)42 b(one)g(is)g(in)m(terested)h(in)f (the)g(n)m(um)m(b)s(er)f Fs(s)g FA(of)i(absolute)f(v)-5 b(alue)191 4732 y(functions)30 b(o)s(ccurring)g(in)g(the)h(function)f (ev)-5 b(aluation,)32 b(one)e(can)h(get)h(it)e(b)m(y)p Black Black 491 4974 a Fq(int)g(get)p 746 4974 V 33 w(num)p 945 4974 V 33 w(switches\(tag\))491 5087 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)191 5330 y(after)g(tracing)g (the)g(function)f Fs(F)13 b FA(.)p Black Black eop end %%Page: 45 45 TeXDict begin 45 44 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.45) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(4.1)92 b(Driv)m(ers)31 b(for)f(Abs-Normal)h(F)-8 b(orm)2126 b FA(45)p Black 332 606 a(In)24 b(abs-normal)g(mo)s(de)g (sev)m(eral)i(driv)m(ers)e(are)h(a)m(v)-5 b(ailable.)41 b(F)-8 b(or)25 b(a)g(start)g(there)f(is)h(a)g(driv)m(er)f(to)h(ev)-5 b(aluate)191 719 y Fs(y)28 b FA(=)d Fs(F)13 b FA(\()p Fs(x)p FA(\).)40 b(The)26 b(driv)m(er)g(also)h(returns)e(the)h(v)-5 b(alues)26 b(of)h Fs(z)j FA(whic)m(h)c(are)h(the)f(argumen)m(ts)g(of)h (the)f(in)m(termedi-)191 832 y(ate)34 b(absolute)f(v)-5 b(alue)33 b(functions.)46 b(The)32 b(ev)-5 b(aluations)34 b(of)e(the)h(absolute)g(v)-5 b(alue)33 b(function)f(is)g(in)m (terpreted)191 945 y(as)j Fo(j)p Fs(z)374 959 y Fi(i)403 945 y Fo(j)d FA(=)g Fs(\033)615 959 y Fi(i)666 945 y Fo(\003)24 b Fs(z)777 959 y Fi(i)840 945 y FA(with)34 b Fs(\033)1103 959 y Fi(i)1164 945 y FA(=)e Fs(sig)s(n)p FA(\()p Fs(z)1519 959 y Fi(i)1548 945 y FA(\))j(in)f(the)h(zero)g (order)f(mo)s(de.)54 b(The)34 b(v)m(ector)i Fs(\033)f Fo(\021)e(f\000)p FA(1)p Fs(;)15 b FA(0)p Fs(;)g FA(1)p Fo(g)3656 912 y Fi(s)3730 945 y FA(is)191 1058 y(called)32 b(signature)e(v)m(ector.)p Black Black 491 1327 a Fq(int)g(zos)p 748 1327 28 4 v 32 w(pl)p 849 1327 V 33 w(fo)m(rw)m(a)m(rd\(tag,m,n,k)m (eep,x,y)-8 b(,z\))491 1440 y(sho)m(rt)31 b(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 1553 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f (v)-5 b(ariables)31 b Fs(n)f FA(and)g Fs(m)25 b FA(=)g(1)491 1666 y Fq(int)30 b(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 1779 y Fq(int)f(k)m(eep;)863 b FA(//)31 b(\015ag)g(for)f(rev)m(erse)h(mo)s(de)f(preparation)491 1892 y Fq(double)h(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m (ector)i Fs(x)491 2004 y Fq(double)f(y[m];)718 b FA(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fs(y)c FA(=)d Fs(F)13 b FA(\()p Fs(x)p FA(\))491 2117 y Fq(double)31 b(z[s];)757 b FA(//)31 b(argumen)m(t)g(of)g Fx(abs)p FA(\()p Fs(z)t FA(\))191 2387 y(Additionally)-8 b(,)39 b(there)e(are)g(driv)m(ers)f (for)g(the)h(forw)m(ard)f(mo)s(de)g(to)h(ev)-5 b(aluate)38 b(\014rst)e(order)g(deriv)-5 b(ativ)m(es)38 b(of)191 2500 y(the)e(piecewise)h(linearization.)59 b(F)-8 b(or)37 b(\014rst)e(order)h(deriv)-5 b(ativ)m(es)37 b(another)f(signature)g(v)m (ector)i(generated)191 2612 y(b)m(y)p Black Black 491 2855 a Fq(int)30 b(\014rstsign\()p Fs(z)997 2869 y Fi(i)1025 2855 y Fq(,)h Fs(Z)7 b FA([)p Fs(i)p FA(])p Fq(\))491 2968 y(double)31 b(z[s];)757 b FA(//)31 b(i-th)g(comp)s(onen)m(t)g(of)f (argumen)m(t)h(of)g Fx(abs)p FA(\()p Fs(z)t FA(\))491 3081 y Fq(double)g(Z[s][p];)642 b FA(//)31 b(i-th)g(ro)m(w)g(of)f (\014rst)g(deriv)-5 b(ativ)m(e)32 b Fs(Z)g FA(=)25 b Fs(z)t Fo(0)p FA(\()p Fs(x)p FA(\))p Fs(X)191 3324 y FA(has)31 b(to)h(b)s(e)f(used.)43 b Fr(\014rstsign\(u\))35 b FA(of)d(a)g(v)m(ector)h Fs(u)e FA(is)g(de\014ned)f(as)i(the)g Fr(sign\(\))j FA(of)c(the)h(\014rst)e(non-v)-5 b(anishing)191 3437 y(comp)s(onen)m(t)35 b(of)g Fs(u)f FA(if)h(that)g(exists;)j (otherwise)d(the)f(v)-5 b(alue)36 b(is)e(zero.)54 b(More)36 b(detailed)g(information)e(can)191 3549 y(b)s(e)c(found)f(in)h([)701 3549 y SDict begin H.S end 701 3549 a Black FA(7)p Black 747 3491 a SDict begin H.R end 747 3491 a 747 3549 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.Griewank13) cvn H.B /ANN pdfmark end 747 3549 a FA(].)p Black Black 491 3819 a Fq(int)g(fos)p 736 3819 28 4 v 33 w(pl)p 838 3819 V 32 w(fo)m(rw)m(a)m(rd\(tag,m,n,x0,x1,y0,y1,z0,z2\))491 3932 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 4045 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 4157 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 4270 y Fq(double)g(x0[n];) 698 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 4383 y Fq(double)f(x1[n];)698 b FA(//)31 b(tangen)m(t)h(v)m(ector)g Fs(x)p FA(1)491 4496 y Fq(double)f(y0[m];)673 b FA(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fs(y)2558 4510 y FD(0)2622 4496 y FA(=)25 b Fs(F)13 b FA(\()p Fs(x)2876 4510 y FD(0)2916 4496 y FA(\))491 4609 y Fq(double)31 b(y1[m];)673 b FA(//)31 b(\014rst)f(deriv)-5 b(ativ)m(e)32 b Fs(y)2450 4623 y FD(1)2514 4609 y FA(=)25 b Fs(F)2681 4576 y Fm(0)2705 4609 y FA(\()p Fs(x)2792 4623 y FD(0)2831 4609 y FA(\))p Fs(x)2918 4623 y FD(1)491 4722 y Fq(double)31 b(z0[s];)712 b FA(//)31 b(argumen)m(t)g(of)g Fx(abs)p FA(\()p Fs(z)2538 4736 y FD(0)2578 4722 y FA(\))491 4835 y Fq(double)g(z1[s];)712 b FA(//)31 b(\014rst)f(deriv)-5 b(ativ)m(e)32 b Fs(z)2447 4849 y FD(1)2512 4835 y FA(=)25 b Fs(z)2654 4802 y Fm(0)2650 4859 y FD(0)2690 4835 y FA(\()p Fs(x)2777 4849 y FD(0)2816 4835 y FA(\))p Fs(x)2903 4849 y FD(1)p Black Black 491 5104 a Fq(int)30 b(fov)p 743 5104 V 33 w(pl)p 845 5104 V 32 w(fo)m(rw)m(a)m(rd\(tag,m,n,p,x,X,y)-8 b(,Y,z,Z\))491 5217 y(sho)m(rt)31 b(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 5330 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)p Black Black eop end %%Page: 46 46 TeXDict begin 46 45 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.46) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(46)1179 b Fu(5)91 b(O)m(VERLO)m(ADED)32 b(F)m(OR)-10 b(W)g(ARD)31 b(AND)g(REVERSE)f(CALLS)p Black 491 606 a Fq(int)g(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m (t)f(v)-5 b(ariables)31 b Fs(n)491 719 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(directions)491 832 y Fq(double)h(x[n];)743 b FA(//)31 b(indep)s(enden)m(t)f(v)m(ector)i Fs(x)491 945 y Fq(double)f(X[n][p];)625 b FA(//)31 b(tangen)m(t)h (matrix)f Fs(X)491 1058 y Fq(double)g(y[m];)718 b FA(//)31 b(dep)s(enden)m(t)f(v)m(ector)i Fs(y)c FA(=)d Fs(F)13 b FA(\()p Fs(x)p FA(\))491 1171 y Fq(double)31 b(Y[m][p];)600 b FA(//)31 b(\014rst)f(deriv)-5 b(ativ)m(e)32 b(matrix)f Fs(Y)45 b FA(=)25 b Fs(F)2966 1138 y Fm(0)2989 1171 y FA(\()p Fs(x)p FA(\))p Fs(X)491 1284 y Fq(double)31 b(z[s];)757 b FA(//)31 b(argumen)m(t)g(of)g Fx(abs)p FA(\()p Fs(z)t FA(\))491 1396 y Fq(double)g(Z[s][p];)642 b FA(//)31 b(\014rst)f(deriv)-5 b(ativ)m(e)32 b(matrix)f Fs(Z)h FA(=)24 b Fs(z)2936 1363 y Fm(0)2960 1396 y FA(\()p Fs(x)p FA(\))p Fs(X)332 1641 y FA(In)36 b(con)m(trast)i(to)f(the)g(driv)m(ers) g(ab)s(o)m(v)m(e)g(the)g(rev)m(erse)h(mo)s(de)e(do)s(es)g(not)h (require)f(an)m(y)h(directions.)61 b(It)191 1753 y(alw)m(a)m(ys)32 b(returns)d(one)i(ro)m(w)f(of)h(the)f(Jacobian)h(matrix.)p Black Black 491 1998 a Fq(int)f(fov)p 743 1998 28 4 v 33 w(pl)p 845 1998 V 32 w(reverse\(tag,m,n,s,ro)m(wnum,z\))491 2110 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 2223 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 2336 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 2449 y Fq(int)f(s;)996 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(sign)g(switc)m(hes)491 2562 y Fq(int)g(ro)m(wnum;)730 b FA(//)31 b(required)f(ro)m(w)h(no.)40 b(of)31 b(abs-normal)f(form)491 2675 y Fq(double)h(z[n];)745 b FA(//)31 b(resulting)g(adjoin)m(t)g(v)-5 b(alue)31 b Fs(z)2764 2642 y Fi(T)2844 2675 y FA(=)25 b Fs(u)2992 2642 y Fi(T)3047 2675 y Fs(F)3118 2642 y Fm(0)3142 2675 y FA(\()p Fs(x)p FA(\))332 3032 y(One)30 b(ma)m(y)h(also)g(compute)g (the)g(sparsit)m(y)f(pattern)h(of)f(the)h(extended)f(Jacobian)h(matrix) p Black Black 491 3276 a Fq(#include)f Fs(<)p Fq(adolc/spa)m(rse/spa)m (rsedrivers.h)p Fs(>)491 3389 y Fq(int)g(absno)m(rmal)p 1012 3389 V 33 w(jac)p 1153 3389 V 33 w(pat\(tag,m,n,s,x,JP\))491 3502 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 3615 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 3728 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3841 y Fq(int)f(s;)996 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(sign)g(switc)m(hes)491 3954 y Fq(const)h(double*)g(x;)566 b FA(//)31 b(p)s(oin)m(t)g(of)f(ev) -5 b(aluation)491 4066 y Fq(unsigned)31 b(int**)f(JP;)479 b FA(//)31 b(sparsit)m(y)g(pattern)g(of)f(abs-normal)h(form)191 4347 y SDict begin H.S end 191 4347 a 191 4347 a SDict begin 13.6 H.A end 191 4347 a 191 4347 a SDict begin [/View [/XYZ H.V]/Dest (section.5) cvn /DEST pdfmark end 191 4347 a 166 x FE(5)135 b(Ov)l(erloaded)46 b(F)-11 b(orw)l(ard)45 b(and)f(Rev)l(erse)j(Calls)191 4765 y FA(In)37 b(this)h(section,)j(the) d(sev)m(eral)h(v)m(ersions)f(of)g(the)g Fq(fo)m(rw)m(a)m(rd)i FA(and)d Fq(reverse)i FA(routines,)h(whic)m(h)d(utilize)j(the)191 4878 y(o)m(v)m(erloading)32 b(capabilities)f(of)f(C++,)f(are)h(describ) s(ed)f(in)g(detail.)42 b(With)30 b(exception)h(of)f(the)g(bit)g (pattern)191 4991 y(v)m(ersions)f(all)g(in)m(terfaces)g(are)g(protot)m (yp)s(ed)g(in)f(the)g(header)g(\014le)h Ft()p FA(,)23 b(where)28 b(also)191 5104 y(some)35 b(more)h(sp)s(ecialized)g Fq(fo)m(rw)m(a)m(rd)g FA(and)f Fq(reverse)h FA(routines)f(are)g (explained.)55 b(F)-8 b(urthermore,)37 b(ADOL-C)191 5217 y(pro)m(vides)c(C)g(and)f(F)-8 b(ortran-callable)37 b(v)m(ersions)c (protot)m(yp)s(ed)g(in)g(the)h(same)f(header)g(\014le.)49 b(The)33 b(bit)g(pat-)191 5330 y(tern)41 b(v)m(ersions)i(of)e Fq(fo)m(rw)m(a)m(rd)j FA(and)d Fq(reverse)i FA(in)m(tro)s(duced)e(in)g (the)2429 5330 y SDict begin H.S end 2429 5330 a Black FA(Section)31 b(5.3)p Black 2863 5268 a SDict begin H.R end 2863 5268 a 2863 5330 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.5.3) cvn H.B /ANN pdfmark end 2863 5330 a 42 w FA(are)42 b(protot)m(yp)s(ed)g(in)g(the)p Black Black eop end %%Page: 47 47 TeXDict begin 47 46 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.47) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(5.1)92 b(The)30 b(Scalar)h(Case)2655 b FA(47)p Black 191 606 a(header)36 b(\014le)h Ft() o FA(,)32 b(whic)m(h)37 b(will)f(b)s(e)g(included)g(b)m(y)g(the)g (header)h(\014le)191 719 y Ft()25 b FA(automatically)-8 b(.)191 919 y SDict begin H.S end 191 919 a 191 919 a SDict begin 13.6 H.A end 191 919 a 191 919 a SDict begin [/View [/XYZ H.V]/Dest (subsection.5.1) cvn /DEST pdfmark end 191 919 a 149 x FB(5.1)112 b(The)38 b(Scalar)g(Case)191 1300 y FA(Giv)m(en)31 b(an)m(y)f(correct)h(tap)s (e,)f(one)g(ma)m(y)h(call)g(from)e(within)g(the)h(generating)h (program,)f(or)g(subsequen)m(tly)191 1413 y(during)f(another)i(run,)e (the)h(follo)m(wing)i(pro)s(cedure:)p Black Black 491 1686 a Fq(int)e(fo)m(rw)m(a)m(rd\(tag,m,n,d,k)m(eep,X,Y\))491 1799 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 1912 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 2025 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 2138 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 2251 y Fq(int)f(k)m(eep;)863 b FA(//)31 b(\015ag)g(for)f(rev)m (erse)h(sw)m(eep)491 2363 y Fq(double)g(X[n][d+1];)509 b FA(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts)g Fs(X)38 b FA(of)30 b(indep)s(enden)m(t)g(v)-5 b(ariables)491 2476 y Fq(double)31 b(Y[m][d+1];)484 b FA(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts)g Fs(Y)50 b FA(as)31 b(in)f(\()2902 2476 y SDict begin H.S end 2902 2476 a Black FA(7)p Black 2948 2418 a SDict begin H.R end 2948 2418 a 2948 2476 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.7) cvn H.B /ANN pdfmark end 2948 2476 a FA(\))191 2749 y(The)37 b(ro)m(ws)h(of)g(the)g(matrix)g Fs(X)46 b FA(m)m(ust)37 b(corresp)s(ond)g(to)h(the)h(indep)s(enden)m(t)d(v)-5 b(ariables)39 b(in)e(the)h(order)g(of)191 2862 y(their)32 b(initialization)j(b)m(y)c(the)h Fp(\034)p Fx(=)g FA(op)s(erator.)45 b(The)32 b(columns)f(of)h Fs(X)j FA(=)28 b Fo(f)p Fs(x)2806 2876 y Fi(j)2843 2862 y Fo(g)2888 2877 y Fi(j)t FD(=0)p Fi(:::)n(d)3142 2862 y FA(represen)m(t)j(T)-8 b(a)m(ylor)191 2975 y(co)s(e\016cien)m(t)35 b(v)m(ectors)f(as)g(in)e(\()1187 2975 y SDict begin H.S end 1187 2975 a Black FA(5)p Black 1233 2916 a SDict begin H.R end 1233 2916 a 1233 2975 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.5) cvn H.B /ANN pdfmark end 1233 2975 a FA(\))q(.)48 b(The)33 b(ro)m(ws)g(of)g(the)g(matrix)h Fs(Y)53 b FA(m)m(ust)33 b(corresp)s(ond)f(to)h(the)h(dep)s(enden)m(t)191 3088 y(v)-5 b(ariables)23 b(in)g(the)g(order)f(of)h(their)g(selection)h(b)m (y)f(the)g Fp(\035)p Fx(=)g FA(op)s(erator.)38 b(The)22 b(columns)h(of)g Fs(Y)45 b FA(=)25 b Fo(f)p Fs(y)3487 3102 y Fi(j)3524 3088 y Fo(g)3569 3103 y Fi(j)t FD(=0)p Fi(:::)n(d)191 3201 y FA(represen)m(t)43 b(T)-8 b(a)m(ylor)45 b(co)s(e\016cien)m(t)g(v)m(ectors)g(as)e(in)g(\()1932 3201 y SDict begin H.S end 1932 3201 a Black FA(7)p Black 1978 3142 a SDict begin H.R end 1978 3142 a 1978 3201 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.4.7) cvn H.B /ANN pdfmark end 1978 3201 a FA(\).)80 b(Th)m(us)42 b(the)i(\014rst)e(column)h(of)h Fs(Y)63 b FA(con)m(tains)45 b(the)191 3314 y(function)32 b(v)-5 b(alue)34 b Fs(F)13 b FA(\()p Fs(x)p FA(\))33 b(itself,)h(the)f(next)g(column)g(represen)m (ts)g(the)g(\014rst)f(T)-8 b(a)m(ylor)34 b(co)s(e\016cien)m(t)g(v)m (ector)h(of)191 3427 y Fs(F)13 b FA(,)30 b(and)f(the)h(last)h(column)e (the)h Fs(d)p FA(-th)g(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(t)h(v)m (ector.)42 b(The)29 b(in)m(teger)i(\015ag)f Fq(k)m(eep)i FA(determines)191 3540 y(ho)m(w)e(man)m(y)f(T)-8 b(a)m(ylor)31 b(co)s(e\016cien)m(ts)h(of)e(all)g(in)m(termediate)i(quan)m(tities)f (are)f(written)g(in)m(to)g(the)g(v)-5 b(alue)30 b(stac)m(k)191 3652 y(as)h(explained)f(in)815 3652 y SDict begin H.S end 815 3652 a Black FA(Section)h(4)p Black 1179 3590 a SDict begin H.R end 1179 3590 a 1179 3652 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 1179 3652 a FA(.)40 b(If)30 b Fq(k)m(eep)i FA(is)f(omitted,)g(it)g (defaults)g(to)g(0.)332 3815 y(The)i(giv)m(en)i Fq(tag)f FA(v)-5 b(alue)34 b(is)g(used)f(b)m(y)g Fq(fo)m(rw)m(a)m(rd)j FA(to)e(determine)g(the)g(name)g(of)g(the)g(\014le)f(on)h(whic)m(h)g (the)191 3928 y(tap)s(e)k(w)m(as)g(written.)63 b(If)38 b(the)g(tap)s(e)g(\014le)g(do)s(es)f(not)h(exist,)j Fq(fo)m(rw)m(a)m (rd)e FA(assumes)f(that)g(the)g(relev)-5 b(an)m(t)40 b(tap)s(e)191 4041 y(is)e(still)h(in)f(core)h(and)f(reads)g(from)g(the) g(bu\013ers.)63 b(After)39 b(the)f(execution)i(of)e(an)g(activ)m(e)j (section)e(with)191 4154 y Fq(k)m(eep)32 b FA(=)e(1)h(or)f(a)h(call)g (to)g Fq(fo)m(rw)m(a)m(rd)h FA(with)e(an)m(y)g Fq(k)m(eep)i Fo(\024)e Fs(d)21 b FA(+)e(1,)31 b(one)g(ma)m(y)g(call)g(the)g (function)f Fq(reverse)h FA(with)191 4267 y Fq(d)f FA(=)g Fq(k)m(eep)i Fo(\000)e FA(1)35 b(and)f(the)h(same)f(tap)s(e)h(iden)m (ti\014er)g Fq(tag)p FA(.)53 b(When)34 b Fs(u)g FA(is)h(a)f(v)m(ector)j (and)c Fs(Z)41 b FA(an)35 b Fs(n)22 b Fo(\002)h FA(\()p Fs(d)g FA(+)g(1\))191 4380 y(matrix)31 b Fq(reverse)g FA(is)f(executed)i(in)e(the)g(scalar)i(mo)s(de)e(b)m(y)g(the)g(calling) i(sequence)p Black Black 491 4653 a Fq(int)e(reverse\(tag,m,n,d,u,Z\)) 491 4765 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 4878 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 4991 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 5104 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 5217 y Fq(double)g(u[m];)713 b FA(//)31 b(w)m(eigh)m(ting)i(v) m(ector)f Fs(u)491 5330 y Fq(double)f(Z[n][d+1];)514 b FA(//)31 b(resulting)g(adjoin)m(ts)g Fs(Z)p Black Black eop end %%Page: 48 48 TeXDict begin 48 47 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.48) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(48)1179 b Fu(5)91 b(O)m(VERLO)m(ADED)32 b(F)m(OR)-10 b(W)g(ARD)31 b(AND)g(REVERSE)f(CALLS)p Black 191 606 a FA(to)38 b(compute)f(the)h(adjoin)m(ts)g Fs(z)1245 573 y Fi(T)1241 630 y FD(0)1337 606 y FA(=)e Fs(u)1496 573 y Fi(T)1551 606 y Fs(F)1622 573 y Fm(0)1646 606 y FA(\()p Fs(x)1733 620 y FD(0)1772 606 y FA(\))h(=)g Fs(u)2004 573 y Fi(T)2059 606 y Fs(A)2127 620 y FD(0)2166 606 y FA(,)j Fs(z)2277 573 y Fi(T)2273 630 y FD(1)2369 606 y FA(=)c Fs(u)2528 573 y Fi(T)2583 606 y Fs(F)2654 573 y Fm(00)2696 606 y FA(\()p Fs(x)2783 620 y FD(0)2823 606 y FA(\))p Fs(x)2910 620 y FD(1)2987 606 y FA(=)g Fs(u)3146 573 y Fi(T)3201 606 y Fs(A)3269 620 y FD(1)3309 606 y FA(,)j(.)15 b(.)h(.)f(,)39 b(where)191 719 y Fs(Z)32 b FA(=)25 b([)p Fs(z)448 733 y FD(0)488 719 y Fs(;)15 b(z)570 733 y FD(1)610 719 y Fs(;)g(:)g(:)g(:)h(;)f(z)853 734 y Fi(d)895 719 y FA(].)191 876 y SDict begin H.S end 191 876 a 191 876 a SDict begin 13.6 H.A end 191 876 a 191 876 a SDict begin [/View [/XYZ H.V]/Dest (subsection.5.2) cvn /DEST pdfmark end 191 876 a 144 x FB(5.2)112 b(The)38 b(V)-9 b(ector)36 b(Case)191 1243 y FA(When)26 b Fs(U)36 b FA(is)26 b(a)g(matrix)g Fq(reverse)h FA(is)f(executed)h(in)f(the)g(v) m(ector)i(mo)s(de)d(b)m(y)h(the)g(follo)m(wing)i(calling)f(sequence)p Black Black 491 1485 a Fq(int)j(reverse\(tag,m,n,d,q,U,Z,nz\))491 1598 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 1711 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 1824 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 1936 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 2049 y Fq(int)f(q;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(w)m (eigh)m(t)i(v)m(ectors)g Fs(q)491 2162 y Fq(double)f(U[q][m];)598 b FA(//)31 b(w)m(eigh)m(t)h(matrix)f Fs(U)491 2275 y Fq(double)g(Z[q][n][d+1];)415 b FA(//)31 b(resulting)g(adjoin)m(ts)491 2388 y Fq(sho)m(rt)g(nz[q][n];)659 b FA(//)31 b(nonzero)g(pattern)g(of) f Fq(Z)191 2630 y FA(to)45 b(compute)f(the)g(adjoin)m(ts)g Fs(Z)1287 2644 y FD(0)1374 2630 y FA(=)k Fs(U)10 b(F)1636 2597 y Fm(0)1659 2630 y FA(\()p Fs(x)1746 2644 y FD(0)1786 2630 y FA(\))48 b(=)g Fs(U)10 b(A)2128 2644 y FD(0)2167 2630 y FA(,)48 b Fs(Z)2302 2644 y FD(1)2389 2630 y FA(=)f Fs(U)10 b(F)2650 2597 y Fm(00)2693 2630 y FA(\()p Fs(x)2780 2644 y FD(0)2820 2630 y FA(\))p Fs(x)2907 2644 y FD(1)2994 2630 y FA(=)48 b Fs(U)10 b(A)3253 2644 y FD(1)3292 2630 y FA(,)48 b(.)15 b(.)g(.)h(,)47 b(where)191 2743 y Fs(Z)32 b FA(=)25 b([)p Fs(Z)468 2757 y FD(0)507 2743 y Fs(;)15 b(Z)609 2757 y FD(1)649 2743 y Fs(;)g(:)g(:)g(:)i(;)e(Z)913 2758 y Fi(d)954 2743 y FA(].)40 b(When)29 b(the)h(argumen)m(ts)f Fq(p)h FA(and)e Fq(U)h FA(are)g(omitted,)i(they)f(default)f(to)h Fs(m)f FA(and)g(the)191 2856 y(iden)m(tit)m(y)j(matrix)f(of)f(order)g Fs(m)p FA(,)g(resp)s(ectiv)m(ely)-8 b(.)332 3019 y(Through)35 b(the)i(optional)h(argumen)m(t)f Fq(nz)f FA(of)h Fq(reverse)h FA(one)f(can)g(compute)g(information)g(ab)s(out)g(the)191 3132 y(sparsit)m(y)31 b(pattern)f(of)h Fs(Z)36 b FA(as)31 b(describ)s(ed)e(in)h(detail)i(in)e(the)h(previous)2553 3132 y SDict begin H.S end 2553 3132 a Black FA(Section)h(4)p Black 2917 3070 a SDict begin H.R end 2917 3070 a 2917 3132 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.4) cvn H.B /ANN pdfmark end 2917 3132 a FA(.)332 3295 y(The)e(return)g(v)-5 b(alues)30 b(of)h Fq(reverse)h FA(calls)f(can)g(b)s(e)f(in)m(terpreted)h(according)g(to)2945 3295 y SDict begin H.S end 2945 3295 a Black FA(T)-8 b(able)31 b(1)p Black 3240 3231 a SDict begin H.R end 3240 3231 a 3240 3295 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.1) cvn H.B /ANN pdfmark end 3240 3295 a FA(,)g(but)f(negativ)m (e)191 3407 y(return)41 b(v)-5 b(alues)43 b(are)g(not)g(v)-5 b(alid,)46 b(since)d(the)f(corresp)s(onding)g(forw)m(ard)g(sw)m(eep)h (w)m(ould)f(ha)m(v)m(e)i(stopp)s(ed)191 3520 y(without)39 b(completing)h(the)g(necessary)f(ta)m(ylor)i(\014le.)67 b(The)38 b(return)g(v)-5 b(alue)40 b(of)f Fq(reverse)h FA(ma)m(y)g(b)s(e)e(higher)191 3633 y(than)d(that)h(of)f(the)g (preceding)g Fq(fo)m(rw)m(a)m(rd)i FA(call)g(b)s(ecause)e(some)g(op)s (erations)h(that)f(w)m(ere)h(ev)-5 b(aluated)36 b(at)g(a)191 3746 y(critical)26 b(argumen)m(t)f(during)e(the)h(forw)m(ard)g(sw)m (eep)g(w)m(ere)h(found)e(not)i(to)g(impact)f(the)h(dep)s(enden)m(ts)e (during)191 3859 y(the)31 b(rev)m(erse)g(sw)m(eep.)332 4022 y(In)36 b(b)s(oth)f(scalar)i(and)f(v)m(ector)h(mo)s(de,)h(the)e (degree)h Fs(d)g FA(m)m(ust)f(agree)h(with)f Fq(k)m(eep)i Fo(\000)e FA(1)g(for)g(the)g(most)191 4135 y(recen)m(t)i(call)f(to)g Fq(fo)m(rw)m(a)m(rd)p FA(,)j(or)d(it)g(m)m(ust)f(b)s(e)g(equal)h(to)g (zero)g(if)g Fq(reverse)g FA(directly)g(follo)m(ws)h(the)f(taping)g(of) 191 4248 y(an)d(activ)m(e)i(section.)51 b(Otherwise,)35 b Fq(reverse)g FA(will)f(return)e(con)m(trol)k(with)d(a)h(suitable)g (error)g(message.)51 b(In)191 4361 y(order)35 b(to)i(a)m(v)m(oid)g(p)s (ossible)e(confusion,)i(the)f(\014rst)f(four)g(argumen)m(ts)h(m)m(ust)g (alw)m(a)m(ys)h(b)s(e)e(presen)m(t)h(in)g(the)191 4473 y(calling)f(sequence.)51 b(Ho)m(w)m(ev)m(er,)36 b(if)e Fs(m)f FA(or)g Fs(d)h FA(attain)h(their)f(trivial)g(v)-5 b(alues)34 b(1)g(and)f(0,)i(resp)s(ectiv)m(ely)-8 b(,)36 b(then)191 4586 y(corresp)s(onding)e(dimensions)g(of)h(the)f(arra)m(ys) i Fq(X)p FA(,)e Fq(Y)p FA(,)h Fq(u)p FA(,)h Fq(U)p FA(,)e(or)h Fq(Z)f FA(can)h(b)s(e)f(omitted,)j(th)m(us)d(eliminating)191 4699 y(one)39 b(lev)m(el)h(of)f(indirection.)65 b(F)-8 b(or)40 b(example,)h(w)m(e)e(ma)m(y)g(call)h Fq (reverse\(tag,1,n,0,1.0,g\))k FA(after)39 b(declaring)191 4812 y Fq(double)31 b(g[n])g FA(to)g(calculate)i(a)e(gradien)m(t)g(of)f (a)h(scalar-v)-5 b(alued)32 b(function.)332 4975 y(Sometimes)26 b(it)g(ma)m(y)g(b)s(e)f(useful)g(to)h(p)s(erform)e(a)i(forw)m(ard)f(sw) m(eep)g(for)h(families)g(of)g(T)-8 b(a)m(ylor)26 b(series)g(with)191 5088 y(the)31 b(same)f(leading)h(term.)41 b(This)30 b(v)m(ector)i(v)m (ersion)f(of)f Fq(fo)m(rw)m(a)m(rd)i FA(can)f(b)s(e)e(called)j(in)e (the)h(form)p Black Black 491 5330 a Fq(int)f(fo)m(rw)m(a)m (rd\(tag,m,n,d,p,x0,X,y0,Y\))p Black Black eop end %%Page: 49 49 TeXDict begin 49 48 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.49) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(5.2)92 b(The)30 b(V)-8 b(ector)32 b(Case)2640 b FA(49)p Black 491 606 a Fq(sho)m(rt)31 b(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 719 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fs(m)491 832 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 945 y Fq(int)f(d;)984 b FA(//)31 b(highest)g(deriv)-5 b(ativ)m(e)32 b(degree)f Fs(d)491 1058 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(T)-8 b(a)m(ylor)32 b(series)e Fs(p)491 1171 y Fq(double)h(x0[n];)698 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fs(x)3119 1185 y FD(0)491 1284 y Fq(double)g (X[n][p][d];)526 b FA(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts) g Fs(X)38 b FA(of)30 b(indep)s(enden)m(t)g(v)-5 b(ariables)491 1396 y Fq(double)31 b(y0[m];)673 b FA(//)31 b(v)-5 b(alues)31 b(of)g(dep)s(enden)m(t)e(v)-5 b(ariables)31 b Fs(y)3036 1410 y FD(0)491 1509 y Fq(double)g(Y[m][p][d];)501 b FA(//)31 b(T)-8 b(a)m(ylor)32 b(co)s(e\016cien)m(ts)g Fs(Y)50 b FA(of)31 b(dep)s(enden)m(t)e(v)-5 b(ariables)191 1901 y(where)25 b Fq(X)g FA(and)g Fq(Y)g FA(hold)g(the)h(T)-8 b(a)m(ylor)26 b(co)s(e\016cien)m(ts)i(of)d(\014rst)g(and)g(higher)g (degree)h(and)f Fq(x0)p FA(,)i Fq(y0)f FA(the)f(common)191 2014 y(T)-8 b(a)m(ylor)39 b(co)s(e\016cien)m(ts)i(of)d(degree)h(0.)65 b(There)38 b(is)g(no)g(option)h(to)g(k)m(eep)g(the)f(v)-5 b(alues)39 b(of)g(activ)m(e)h(v)-5 b(ariables)191 2126 y(that)29 b(are)g(going)h(out)f(of)g(scop)s(e)g(or)f(that)i(are)f(o)m (v)m(erwritten.)42 b(Therefore)28 b(this)h(function)f(cannot)h(prepare) 191 2239 y(a)k(subsequen)m(t)e(rev)m(erse)i(sw)m(eep.)47 b(The)32 b(return)f(in)m(teger)i(serv)m(es)g(as)g(a)f(\015ag)h(to)g (indicate)g(quadratures)f(or)191 2352 y(altered)f(comparisons)g(as)f (describ)s(ed)g(ab)s(o)m(v)m(e)h(in)1888 2352 y SDict begin H.S end 1888 2352 a Black FA(Section)g(1.7)p Black 2323 2290 a SDict begin H.R end 2323 2290 a 2323 2352 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.7) cvn H.B /ANN pdfmark end 2323 2352 a FA(.)332 2515 y(Since)25 b(the)h(calculation)i(of)d(Jacobians)h(is)g(probably)e(the)i(most)f (imp)s(ortan)m(t)h(automatic)h(di\013eren)m(tia-)191 2628 y(tion)i(task,)g(w)m(e)g(ha)m(v)m(e)g(pro)m(vided)f(a)g(sp)s (ecialization)j(of)d(v)m(ector)i Fq(fo)m(rw)m(a)m(rd)f FA(to)g(the)g(case)g(where)f Fs(d)d FA(=)g(1.)41 b(This)191 2741 y(v)m(ersion)31 b(can)f(b)s(e)g(called)i(in)e(the)g(form)p Black Black 491 3132 a Fq(int)g(fo)m(rw)m(a)m(rd\(tag,m,n,p,x,X,y)-8 b(,Y\))491 3245 y(sho)m(rt)31 b(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 3358 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 3471 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 3584 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g (partial)h(deriv)-5 b(ativ)m(es)32 b Fs(p)491 3697 y Fq(double)f(x[n];)743 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s (enden)m(t)e(v)-5 b(ariables)31 b Fs(x)3119 3711 y FD(0)491 3810 y Fq(double)g(X[n][p];)625 b FA(//)31 b(seed)g(deriv)-5 b(ativ)m(es)32 b(of)e(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(X)491 3923 y Fq(double)g(y[m];)718 b FA(//)31 b(v)-5 b(alues)31 b(of)g(dep)s(enden)m(t)e(v)-5 b(ariables)31 b Fs(y)3036 3937 y FD(0)491 4035 y Fq(double)g(Y[m][p];)600 b FA(//)31 b(\014rst)f(deriv)-5 b(ativ)m(es)32 b(of)e(dep)s(enden)m(t)g (v)-5 b(ariables)31 b Fs(Y)191 4427 y FA(When)e(this)g(routine)g(is)g (called)h(with)f Fq(p)g FA(=)g Fq(n)g FA(and)f Fq(X)h FA(the)g(iden)m(tit)m(y)i(matrix,)f(the)f(resulting)g Fq(Y)g FA(is)g(simply)191 4540 y(the)e(Jacobian)h Fs(F)792 4507 y Fm(0)816 4540 y FA(\()p Fs(x)903 4554 y FD(0)942 4540 y FA(\).)40 b(In)27 b(general,)i(one)f(obtains)f(the)g Fs(m)14 b Fo(\002)g Fs(p)27 b FA(matrix)g Fs(Y)46 b FA(=)25 b Fs(F)2931 4507 y Fm(0)2954 4540 y FA(\()p Fs(x)3041 4554 y FD(0)3081 4540 y FA(\))15 b Fs(X)35 b FA(for)27 b(the)g(c)m(hosen)191 4653 y(initialization)36 b(of)d Fs(X)7 b FA(.)49 b(In)32 b(a)h(w)m(orkstation)h(en)m(vironmen)m(t)g(a)f (v)-5 b(alue)33 b(of)h Fs(p)e FA(somewhere)h(b)s(et)m(w)m(een)h(10)f (and)191 4765 y(50)26 b(app)s(ears)f(to)h(b)s(e)f(fairly)h(optimal.)40 b(F)-8 b(or)26 b(smaller)g Fs(p)g FA(the)f(in)m(terpretiv)m(e)i(o)m(v)m (erhead)g(is)f(not)f(appropriately)191 4878 y(amortized,)48 b(and)42 b(for)h(larger)h Fs(p)e FA(the)i Fs(p)p FA(-fold)f(increase)h (in)e(storage)j(causes)f(to)s(o)f(man)m(y)h(page)f(faults.)191 4991 y(Therefore,)27 b(large)h(Jacobians)f(that)f(cannot)h(b)s(e)f (compressed)g(via)h(column)f(coloring)i(as)f(could)f(b)s(e)g(done)191 5104 y(for)j(example)g(using)g(the)g(driv)m(er)g Fq(spa)m(rse)p 1571 5104 28 4 v 33 w(jac)g FA(should)f(b)s(e)h(\\strip-mined")g(in)g (the)g(sense)g(that)g(the)h(ab)s(o)m(v)m(e)191 5217 y(\014rst-order-v)m (ector)k(v)m(ersion)f(of)f Fq(fo)m(rw)m(a)m(rd)i FA(is)f(called)h(rep)s (eatedly)f(with)f(the)h(successiv)m(e)h Fs(n)20 b Fo(\002)f Fs(p)33 b FA(matrices)191 5330 y Fs(X)38 b FA(forming)30 b(a)h(partition)g(of)f(the)h(iden)m(tit)m(y)h(matrix)e(of)h(order)f Fs(n)p FA(.)p Black Black eop end %%Page: 50 50 TeXDict begin 50 49 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.50) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(50)1179 b Fu(5)91 b(O)m(VERLO)m(ADED)32 b(F)m(OR)-10 b(W)g(ARD)31 b(AND)g(REVERSE)f(CALLS)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.5.3) cvn /DEST pdfmark end 191 515 a 91 x FB(5.3)112 b(Dep)s(endence)39 b(Analysis)191 827 y FA(The)26 b(sparsit)m(y)i(pattern)f(of)g(Jacobians)g(is)g(often)h (needed)e(to)i(set)g(up)d(data)j(structures)e(for)h(their)g(storage)191 940 y(and)j(factorization)j(or)d(to)h(allo)m(w)h(their)e(economical)j (ev)-5 b(aluation)31 b(b)m(y)g(compression)f([)3134 940 y SDict begin H.S end 3134 940 a Black FA(1)p Black 3180 882 a SDict begin H.R end 3180 882 a 3180 940 a SDict begin [/Color [0 1 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (cite.BeKh96) cvn H.B /ANN pdfmark end 3180 940 a FA(].)40 b(Compared)30 b(to)191 1053 y(the)f(ev)-5 b(aluation)30 b(of)e(the)h(full)g(Jacobian)g Fs(F)1644 1020 y Fm(0)1667 1053 y FA(\()p Fs(x)1754 1067 y FD(0)1794 1053 y FA(\))g(in)f(real)h(arithmetic)h(computing)f(the)f (Bo)s(olean)i(matrix)211 1143 y(~)191 1166 y Fs(P)54 b Fo(2)42 b(f)p FA(0)p Fs(;)15 b FA(1)p Fo(g)628 1124 y Fi(m)p Fm(\002)p Fi(n)832 1166 y FA(represen)m(ting)40 b(its)h(sparsit)m(y)f(pattern)h(in)e(the)i(ob)m(vious)f(w)m(a)m(y)h (requires)f(a)g(little)i(less)191 1279 y(run-time)30 b(and)g(certainly)h(a)g(lot)g(less)g(memory)-8 b(.)332 1442 y(The)34 b(en)m(try)785 1419 y(~)765 1442 y Fs(P)823 1456 y Fi(j)t(i)918 1442 y FA(in)h(the)f Fs(j)5 b FA(-th)36 b(ro)m(w)e(and)g Fs(i)p FA(-th)h(column)g(of)2375 1419 y(~)2354 1442 y Fs(P)48 b FA(should)34 b(b)s(e)f(1)g(=)f Fs(tr)s(ue)i FA(exactly)j(when)191 1555 y(there)25 b(is)g(a)g(data)g (dep)s(endence)f(b)s(et)m(w)m(een)i(the)f Fs(i)p FA(-th)g(indep)s (enden)m(t)f(v)-5 b(ariable)25 b Fs(x)2823 1569 y Fi(i)2876 1555 y FA(and)f(the)h Fs(j)5 b FA(-th)26 b(dep)s(enden)m(t)191 1668 y(v)-5 b(ariable)41 b Fs(y)587 1682 y Fi(j)623 1668 y FA(.)72 b(Just)40 b(lik)m(e)i(for)e(real)h(argumen)m(ts)g(one)g(w)m (ould)f(wish)g(to)h(compute)g(matrix-v)m(ector)i(and)191 1781 y(v)m(ector-matrix)32 b(pro)s(ducts)d(of)i(the)f(form)1631 1758 y(~)1611 1781 y Fs(P)16 b FA(~)-48 b Fs(v)33 b FA(or)j(~)-51 b Fs(u)1922 1748 y Fi(T)1998 1758 y FA(~)1977 1781 y Fs(P)43 b FA(b)m(y)30 b(appropriate)g Fq(fo)m(rw)m(a)m(rd)i FA(and)e Fq(reverse)h FA(routines)191 1893 y(where)39 b(~)-49 b Fs(v)38 b Fo(2)33 b(f)p FA(0)p Fs(;)15 b FA(1)p Fo(g)855 1861 y Fi(n)940 1893 y FA(and)41 b(~)-51 b Fs(u)34 b Fo(2)g(f)p FA(0)p Fs(;)15 b FA(1)p Fo(g)1523 1861 y Fi(m)1592 1893 y FA(.)57 b(Here,)37 b(m)m(ultiplication)h(corresp)s (onds)c(to)j(logical)h Fq(AND)d FA(and)191 2006 y(addition)c(to)g (logical)h Fq(OR)p FA(,)f(so)f(that)h(algebra)h(is)e(p)s(erformed)f(in) h(a)h(semi-ring.)332 2169 y(F)-8 b(or)39 b(practical)h(reasons)f(it)g (is)g(assumed)e(that)i Fs(s)g FA(=)f(8)p Fo(\003)p Fq(sizeof)p FA(\()p Fq(unsigned)i(long)f(int)p FA(\))f(suc)m(h)g(Bo)s(olean)191 2282 y(v)m(ectors)i(~)-48 b Fs(v)39 b FA(and)i(~)-51 b Fs(u)36 b FA(are)g(com)m(bined)f(to)i(in)m(teger)g(v)m(ectors)g Fs(v)g Fo(2)d FA(I)-20 b(N)2419 2246 y Fi(n)2502 2282 y FA(and)35 b Fs(u)f Fo(2)f FA(I)-20 b(N)2945 2246 y Fi(m)3047 2282 y FA(whose)36 b(comp)s(onen)m(ts)191 2395 y(can)c(b)s(e)f(in)m(terpreted)h(as)g(bit)f(patterns.)45 b(Moreo)m(v)m(er)34 b Fs(p)d FA(or)g Fs(q)k FA(suc)m(h)c(in)m(teger)i (v)m(ectors)g(ma)m(y)g(b)s(e)e(com)m(bined)191 2508 y(column-wise)37 b(or)g(ro)m(w-wise)g(to)h(in)m(teger)g(matrices)g Fs(X)44 b Fo(2)35 b FA(I)-20 b(N)2301 2472 y Fi(n)p Fm(\002)p Fi(p)2475 2508 y FA(and)36 b Fs(U)47 b Fo(2)35 b FA(I)-20 b(N)2944 2472 y Fi(q)r Fm(\002)p Fi(m)3099 2508 y FA(,)39 b(whic)m(h)d(naturally)191 2621 y(corresp)s(ond)d(to)j(Bo)s(olean)g (matrices)1523 2598 y(~)1497 2621 y Fs(X)k Fo(2)32 b(f)p FA(0)p Fs(;)15 b FA(1)p Fo(g)1925 2588 y Fi(n)p Fm(\002)p FD(\()s Fi(sp)p FD(\))2187 2621 y FA(and)2384 2598 y(~)2368 2621 y Fs(U)43 b Fo(2)32 b(f)p FA(0)p Fs(;)15 b FA(1)p Fo(g)2786 2588 y FD(\()s Fi(sq)r FD(\))p Fm(\002)p Fi(m)3031 2621 y FA(.)54 b(The)34 b(pro)m(vided)h(bit)191 2734 y(pattern)g(v)m(ersions)h(of)f Fq(fo)m(rw)m(a)m(rd)h FA(and)f Fq(reverse)h FA(allo)m(w)g(to)g(compute)g(in)m(teger)g (matrices)g Fs(Y)53 b Fo(2)33 b FA(I)-20 b(N)3452 2698 y Fi(m)p Fm(\002)p Fi(p)3644 2734 y FA(and)191 2847 y Fs(Z)32 b Fo(2)25 b FA(I)-20 b(N)451 2811 y Fi(q)r Fm(\002)p Fi(m)637 2847 y FA(corresp)s(onding)29 b(to)1332 2847 y SDict begin H.S end 1332 2847 a 1332 2847 a SDict begin 13.6 H.A end 1332 2847 a 1332 2847 a SDict begin [/View [/XYZ H.V]/Dest (equation.5.10) cvn /DEST pdfmark end 1332 2847 a 1389 3020 a FA(~)1375 3043 y Fs(Y)46 b FA(=)1590 3020 y(~)1570 3043 y Fs(P)1667 3020 y FA(~)1641 3043 y Fs(X)189 b FA(and)2252 3020 y(~)2233 3043 y Fs(Z)32 b FA(=)2439 3020 y(~)2423 3043 y Fs(U)2515 3020 y FA(~)2495 3043 y Fs(P)c(;)1023 b FA(\(10\))191 3238 y(resp)s(ectiv)m(ely)-8 b(,)34 b(with)927 3215 y(~)914 3238 y Fs(Y)47 b Fo(2)26 b(f)p FA(0)p Fs(;)15 b FA(1)p Fo(g)1321 3205 y Fi(m)p Fm(\002)p FD(\()s Fi(sp)p FD(\))1599 3238 y FA(and)1793 3215 y(~)1777 3238 y Fs(U)37 b Fo(2)26 b(f)p FA(0)p Fs(;)15 b FA(1)p Fo(g)2183 3205 y FD(\()s Fi(sq)r FD(\))p Fm(\002)p Fi(n)2409 3238 y FA(.)43 b(In)31 b(general,)i(the)e(application)i(of)f (the)191 3351 y(bit)39 b(pattern)h(v)m(ersions)f(of)g Fq(fo)m(rw)m(a)m(rd)i FA(or)e Fq(reverse)i FA(can)e(b)s(e)g(in)m (terpreted)g(as)h(propagating)g(dep)s(endences)191 3464 y(b)s(et)m(w)m(een)27 b(v)-5 b(ariables)27 b(forw)m(ard)e(or)h(bac)m (kw)m(ard,)i(therefore)f(b)s(oth)e(the)i(propagated)g(in)m(teger)g (matrices)g(and)191 3577 y(the)k(corresp)s(onding)e(Bo)s(olean)j (matrices)f(are)g(called)g Fr(dep)-5 b(endenc)g(e)34 b(structur)-5 b(es)p FA(.)332 3740 y(The)30 b(bit)g(pattern)h Fq(fo)m(rw)m(a)m(rd)h FA(routine)p Black Black 491 3970 a Fq(int)e(fo)m(rw)m(a)m(rd\(tag,m,n,p,x,X,y)-8 b(,Y,mo)s(de\))491 4083 y(sho)m(rt)31 b(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m (ti\014cation)491 4196 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f (of)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(m)491 4309 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s (enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 4422 y Fq(int)f(p;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(in)m(tegers)i(propagated)f Fs(p)491 4535 y Fq(double)g(x[n];)743 b FA(//)31 b(v)-5 b(alues)31 b(of)g(indep)s(enden)m(t)e(v)-5 b(ariables)31 b Fs(x)3119 4549 y FD(0)491 4648 y Fq(unsigned)g(long)f(int)g(X[n][p];) 222 b FA(//)31 b(dep)s(endence)f(structure)g Fs(X)491 4761 y Fq(double)h(y[m];)718 b FA(//)31 b(v)-5 b(alues)31 b(of)g(dep)s(enden)m(t)e(v)-5 b(ariables)31 b Fs(y)3036 4775 y FD(0)491 4874 y Fq(unsigned)g(long)f(int)g(Y[m][p];)197 b FA(//)31 b(dep)s(endence)f(structure)g Fs(Y)50 b FA(according)31 b(to)g(\()3336 4874 y SDict begin H.S end 3336 4874 a Black FA(10)p Black 3428 4815 a SDict begin H.R end 3428 4815 a 3428 4874 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.5.10) cvn H.B /ANN pdfmark end 3428 4874 a FA(\))491 4987 y Fq(cha)m(r)g(mo)s(de;)766 b FA(//)31 b(0)g(:)41 b(safe)31 b(mo)s(de)f(\(default\),)h(1)g(:)41 b(tigh)m(t)31 b(mo)s(de)191 5217 y(can)26 b(b)s(e)g(used)f(to)h(obtain)h(the)f(dep)s (endence)f(structure)g Fs(Y)46 b FA(for)26 b(a)g(giv)m(en)h(dep)s (endence)e(structure)h Fs(X)7 b FA(.)39 b(The)191 5330 y(dep)s(endence)26 b(structures)g(are)h(represen)m(ted)f(as)h(arra)m (ys)g(of)g Fq(unsigned)g(long)g(int)f FA(the)h(en)m(tries)g(of)g(whic)m (h)f(are)p Black Black eop end %%Page: 51 51 TeXDict begin 51 50 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.51) cvn /DEST pdfmark end 183 199 a Black 3700 307 a FA(51)p Black 191 606 a(in)m(terpreted)32 b(as)f(bit)h(patterns)f (as)h(describ)s(ed)e(ab)s(o)m(v)m(e.)46 b(F)-8 b(or)32 b(example,)g(for)g Fs(n)26 b FA(=)h(3)32 b(the)f(iden)m(tit)m(y)i (matrix)191 719 y Fs(I)231 733 y FD(3)301 719 y FA(should)c(b)s(e)h (passed)g(with)g Fs(p)25 b FA(=)g(1)30 b(as)h(the)g(3)20 b Fo(\002)g FA(1)31 b(arra)m(y)893 1032 y Fq(X)50 b FA(=)1126 849 y Fl(0)1126 1013 y(@)1247 919 y Fq(1)p FA(0000000)24 b(00000000)f(00000000)h(00000000)2758 933 y FD(2)1247 1032 y FA(0)p Fq(1)p FA(000000)g(00000000)f(00000000)h(00000000)2758 1046 y FD(2)1247 1144 y FA(00)p Fq(1)p FA(00000)g(00000000)f(00000000)h (00000000)2758 1158 y FD(2)2843 849 y Fl(1)2843 1013 y(A)191 1344 y FA(in)i(the)g(4-b)m(yte)i(long)f(in)m(teger)g(format.)40 b(The)26 b(parameter)g Fq(mo)s(de)h FA(determines)f(the)h(mo)s(de)e(of) i(dep)s(endence)191 1457 y(analysis)k(as)f(explained)h(already)g(in) 1478 1457 y SDict begin H.S end 1478 1457 a Black FA(Section)g(3.3)p Black 1912 1395 a SDict begin H.R end 1912 1395 a 1912 1457 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.3) cvn H.B /ANN pdfmark end 1912 1457 a FA(.)332 1620 y(A)g(call)g(to)g(the)g(corresp)s(onding)e(bit)i(pattern)f Fq(reverse)i FA(routine)p Black Black 491 1861 a Fq(int)e (reverse\(tag,m,n,q,U,Z,mo)s(de\))491 1974 y(sho)m(rt)h(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 2086 y Fq(int)f(m;)959 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(dep)s(enden)m(t)f (v)-5 b(ariables)31 b Fs(m)491 2199 y Fq(int)f(n;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(indep)s(enden)m(t)f(v)-5 b(ariables)31 b Fs(n)491 2312 y Fq(int)f(q;)984 b FA(//)31 b(n)m(um)m(b)s(er)f(of)g(in)m(tegers)i(propagated)f(q)491 2425 y Fq(unsigned)g(long)f(int)g(U[q][m];)195 b FA(//)31 b(dep)s(endence)f(structure)g Fs(U)491 2538 y Fq(unsigned)h(long)f(int) g(Z[q][n];)227 b FA(//)31 b(dep)s(endence)f(structure)g Fs(Z)37 b FA(according)31 b(to)g(\()3332 2538 y SDict begin H.S end 3332 2538 a Black FA(10)p Black 3423 2480 a SDict begin H.R end 3423 2480 a 3423 2538 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.5.10) cvn H.B /ANN pdfmark end 3423 2538 a FA(\))491 2651 y Fq(cha)m(r)g(mo)s(de;)766 b FA(//)31 b(0)g(:)41 b(safe)31 b(mo)s(de)f(\(default\),)h(1)g(:)41 b(tigh)m(t)31 b(mo)s(de)191 2892 y(yields)g(the)f(dep)s(endence)f (structure)h Fs(Z)37 b FA(for)30 b(a)h(giv)m(en)g(dep)s(endence)f (structure)g Fs(U)10 b FA(.)332 3054 y(T)-8 b(o)33 b(determine)g(the)f (whole)h(sparsit)m(y)g(pattern)2001 3032 y(~)1981 3054 y Fs(P)45 b FA(of)33 b(the)g(Jacobian)g Fs(F)2802 3022 y Fm(0)2825 3054 y FA(\()p Fs(x)p FA(\))g(as)g(an)f(in)m(teger)i (matrix)191 3167 y Fs(P)45 b FA(one)32 b(ma)m(y)g(call)h Fq(fo)m(rw)m(a)m(rd)h FA(or)e Fq(reverse)g FA(with)g Fs(p)27 b Fo(\025)h Fs(n=s)j FA(or)h Fs(q)f Fo(\025)c Fs(m=s)p FA(,)32 b(resp)s(ectiv)m(ely)-8 b(.)47 b(F)-8 b(or)33 b(this)e(purp)s(ose)191 3280 y(the)i(corresp)s(onding)e(dep)s (endence)h(structure)g Fs(X)39 b FA(or)33 b Fs(U)42 b FA(m)m(ust)33 b(b)s(e)f(de\014ned)f(to)i(represen)m(t)g(the)f(iden)m (tit)m(y)191 3393 y(matrix)37 b(of)f(the)h(resp)s(ectiv)m(e)h (dimension.)58 b(Due)37 b(to)g(the)f(fact)i(that)f(alw)m(a)m(ys)h(a)f (m)m(ultiple)g(of)f Fs(s)g FA(Bo)s(olean)191 3506 y(v)m(ectors)c(are)f (propagated)g(there)f(ma)m(y)h(b)s(e)f(sup)s(er\015uous)d(v)m(ectors,) 32 b(whic)m(h)f(can)f(b)s(e)g(set)h(to)g(zero.)332 3669 y(The)37 b(return)f(v)-5 b(alues)37 b(of)h(the)f(bit)g(pattern)h Fq(fo)m(rw)m(a)m(rd)g FA(and)f Fq(reverse)h FA(routines)f(corresp)s (ond)f(to)i(those)191 3782 y(describ)s(ed)29 b(in)699 3782 y SDict begin H.S end 699 3782 a Black FA(T)-8 b(able)31 b(1)p Black 995 3719 a SDict begin H.R end 995 3719 a 995 3782 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.1) cvn H.B /ANN pdfmark end 995 3782 a FA(.)332 3944 y(One)36 b(can)h(con)m(trol)h(the)f(storage)h(gro)m(wth)f(b)m(y)f (the)h(factor)g Fs(p)g FA(using)f(\\strip-mining")h(for)f(the)h(calls) 191 4057 y(of)45 b Fq(fo)m(rw)m(a)m(rd)h FA(or)e Fq(reverse)i FA(with)e(successiv)m(e)i(groups)e(of)g(columns)h(or)f(resp)s(ectiv)m (ely)i(ro)m(ws)f(at)g(a)g(time,)191 4170 y(i.e.)c(partitioning)g Fs(X)48 b FA(or)40 b Fs(U)50 b FA(appropriately)41 b(as)f(describ)s(ed) f(for)h(the)h(computation)g(of)f(Jacobians)h(in)191 4283 y SDict begin H.S end 191 4283 a Black FA(Section)31 b(5.2)p Black 625 4221 a SDict begin H.R end 625 4221 a 625 4283 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.5.2) cvn H.B /ANN pdfmark end 625 4283 a FA(.)191 4425 y SDict begin H.S end 191 4425 a 191 4425 a SDict begin 13.6 H.A end 191 4425 a 191 4425 a SDict begin [/View [/XYZ H.V]/Dest (section.6) cvn /DEST pdfmark end 191 4425 a 200 x FE(6)135 b(Adv)-7 b(anced)43 b(algorithmic)k(di\013eren)l(tiation)h (in)c(ADOL-C)191 4739 y SDict begin H.S end 191 4739 a 191 4739 a SDict begin 13.6 H.A end 191 4739 a 191 4739 a SDict begin [/View [/XYZ H.V]/Dest (subsection.6.1) cvn /DEST pdfmark end 191 4739 a 143 x FB(6.1)112 b(Di\013eren)m(tiating)38 b(parameter)h(dep)s(enden)m(t)g(functions)191 5104 y FA(Normally)32 b(the)g(functions)f(to)i(b)s(e)e(di\013eren)m(tiated)i (using)e(AD)h(are)g(de\014ned)e(as)i(mappings)f(from)g(I)-20 b(R)3631 5068 y Fi(n)3710 5104 y FA(to)191 5217 y(I)g(R)270 5181 y Fi(m)337 5217 y FA(.)39 b(The)27 b(deriv)-5 b(ativ)m(es)29 b(of)e(the)g Fs(m)g FA(dep)s(enden)m(ts)f(are)h(then)g(computed)g (w.r.t.)40 b(all)28 b(the)f Fs(n)g FA(indep)s(enden)m(ts.)191 5330 y(Ho)m(w)m(ev)m(er)d(sometimes)f(the)f(application)h(requires)e (only)h(deriv)-5 b(ativ)m(es)23 b(w.r.t.)38 b(some)22 b(of)g(the)g(indep)s(enden)m(ts)p Black Black eop end %%Page: 52 52 TeXDict begin 52 51 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.52) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(52)705 b Fu(6)91 b(AD)m(V)-10 b(ANCED)32 b(ALGORITHMIC)e (DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black 191 606 a FA(and)g(the)g(others)g(only)h(o)s(ccur)f(in)g(the)g(ev)-5 b(aluation)33 b(pro)s(cedure)d(as)h(parameters.)44 b(One)31 b(imp)s(ortan)m(t)g(suc)m(h)191 719 y(use)g(case)h(is)e(Lagrange)i (Multipliers)g(in)e(a)i(nonlinear)e(optimization)j(problem.)42 b(Declaring)33 b(suc)m(h)d(v)-5 b(ari-)191 832 y(ables)28 b(as)g Ft(adouble)d FA(and)i(marking)h(them)f(as)h(indep)s(enden)m(t)e (results)i(in)f(the)h(ev)-5 b(aluation)29 b(of)f(sup)s(er\015uous)191 945 y(deriv)-5 b(ativ)m(e)27 b(information)f(and)f(increases)h(run)m (time.)39 b(Ho)m(w)m(ev)m(er,)29 b(if)d(the)f(parameters)h(are)g(not)g (de\014ned)e(as)191 1058 y Ft(adouble)g FA(t)m(yp)s(e)h(v)-5 b(ariables)27 b(they)f(get)g(hard)f(co)s(ded)g(as)h(constan)m(ts)h(on)m (to)g(the)f(ADOL-C)g(trace.)40 b(One)25 b(ma)m(y)191 1171 y(w)m(an)m(t)36 b(to)f(c)m(hange)h(these)f(parameters)g(for)f (some)i(ev)-5 b(aluations,)37 b(ho)m(w)m(ev)m(er)f(the)f(o)m(v)m (erhead)h(of)f(retracing)191 1284 y(the)f(function)f(ma)m(y)h(b)s(e)f (v)m(ery)g(high.)50 b(In)33 b(suc)m(h)g(cases)h(these)g(constan)m(ts)h (ma)m(y)f(b)s(e)f(sp)s(ecially)h(mark)m(ed)f(as)191 1396 y(parameters)e(during)e(tracing)i(using)f(the)h(function)p Black Black 491 1634 a Fq(mkpa)m(ram\(d\))491 1747 y(double)g(d;)837 b FA(//)31 b(constan)m(t)h(v)-5 b(alue)31 b(to)g(b)s(e)f(mark)m(ed)g (as)h(parameter)191 2098 y(This)38 b(stores)i(the)f(constan)m(t)h(in)f (a)g(di\013eren)m(t)h(place)g(on)e(the)i(trace)g(than)f(the)g(other)g (unmark)m(ed)f(con-)191 2211 y(stan)m(ts)32 b(and)e(enables)h(the)h (user)e(to)i(replace)g(a)f(whole)g(v)m(ector)i(of)e(parameters)g(with)g (a)g(new)g(one)g(b)s(efore)191 2324 y(computing)k(deriv)-5 b(ativ)m(es)36 b(later)f(on.)54 b(All)35 b(suc)m(h)f(mark)m(ed)h (parameter)g(constan)m(ts)g(can)g(b)s(e)f(used)g(in)g(an)m(y)191 2436 y(ev)-5 b(aluation)32 b(expression)e(where)g(the)g(original)i (unmark)m(ed)d(constan)m(ts)j(w)m(ere)f(used.)332 2599 y(Sometimes)g(the)f(same)h(parameter)g(ma)m(y)f(b)s(e)g(needed)g(in)g (v)-5 b(arious)30 b(di\013eren)m(t)h(expressions.)40 b(During)191 2712 y(trace)33 b(creation)g(the)f(mark)m(ed)f(parameters) h(are)g(giv)m(en)h(a)f(running)e(index)h(as)h(they)g(are)g(mark)m(ed.) 45 b(This)191 2825 y(index)d(ma)m(y)i(me)f(sa)m(v)m(ed)h(b)m(y)e(the)h (user)f(and)h(used)f(to)h(access)h(the)f(same)h(stored)e(v)-5 b(alue)44 b(in)e(di\013eren)m(t)191 2938 y(expressions.)332 3101 y(T)-8 b(o)31 b(sa)m(v)m(e)h(the)e(index)g(while)h(marking)f(a)h (parameter)g(use)p Black Black 491 3338 a Fq(lo)s(cint)f(mkpa)m(ram)p 1089 3338 28 4 v 33 w(idx\(d\))491 3451 y(double)h(d;)837 b FA(//)31 b(constan)m(t)h(v)-5 b(alue)31 b(to)g(b)s(e)f(mark)m(ed)191 3689 y(The)35 b(resulting)g Ft(locint)f FA(can)i(b)s(e)e(sa)m(v)m(ed)j (in)e(a)h(v)-5 b(ariable)36 b(b)m(y)f(the)g(user)g(and)g(later)h(used)f (to)h(access)h(the)191 3802 y(sa)m(v)m(ed)31 b(parameter)g(from)f(in)g (the)h(trace)g(in)f(an)m(y)h(expression)332 3965 y(T)-8 b(o)31 b(access)h(a)e(sa)m(v)m(ed)i(parameter)f(inside)f(an)m(y)g(ev)-5 b(aluation)32 b(expression)e(use)p Black Black 491 4202 a Fq(getpa)m(ram\(idx\))491 4315 y(lo)s(cint)g(idx;)810 b FA(//)31 b(index)f(of)h(the)g(parameter)f(as)h(returned)e(b)m(y)h (mkparam)p 3729 4315 V 33 w(idx\(\))332 4666 y(The)h(ab)s(o)m(v)m(e)h (three)g(functions)e(w)m(ork)i(only)f(during)f(the)i(creation)g(of)g (the)f(trace,)i(i.e.,)g(b)s(et)m(w)m(een)f(the)191 4779 y(in)m(v)m(ok)-5 b(ation)32 b(of)f Ft(trace_on\(\))c FA(and)j Ft(trace_off\(\))p FA(.)332 4941 y(F)-8 b(or)37 b(all)g(follo)m(wing)h(deriv)-5 b(ativ)m(e)38 b(computations)f(using)f (the)g(driv)m(ers)g(describ)s(ed)f(in)h(the)h(preceding)191 5054 y(sections,)29 b(the)f(sa)m(v)m(ed)g(parameter)g(v)-5 b(alues)28 b(will)g(b)s(e)f(used,)g(unless)g(the)h(user)e(asks)i(to)g (replace)h(them)e(with)191 5167 y(a)k(di\013eren)m(t)g(v)m(ector)h(of)e (v)-5 b(alues.)332 5330 y(T)d(o)31 b(replace)g(the)g(whole)f(parameter) h(v)m(ector)h(one)f(uses)f(the)g(routine)p Black Black eop end %%Page: 53 53 TeXDict begin 53 52 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.53) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(6.2)92 b(Di\013eren)m(tiating)33 b(external)e(functions)1984 b FA(53)p Black Black Black 491 606 a Fq(set)p 604 606 28 4 v 33 w(pa)m(ram)p 872 606 V 33 w(vec\(tag,)31 b(numb)s(er,)g(pa)m (rameters\))491 719 y(sho)m(rt)g(int)f(tag;)690 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)491 832 y Fq(size)p 633 832 V 32 w(t)f(numb)s(er;)644 b FA(//)31 b(total)i(n)m(um)m(b)s(er)c (of)h(constan)m(ts)i(mark)m(ed)e(as)h(parameters)491 945 y Fq(double*)g(pa)m(rameters;)425 b FA(//)31 b(arra)m(y)g(of)g (constan)m(ts)g(to)h(b)s(e)d(used)h(as)g(replacemen)m(t)191 1298 y(All)i(follo)m(wing)g(deriv)-5 b(ativ)m(e)33 b(computations)e (using)g(the)g(driv)m(ers)g(describ)s(ed)f(in)g(the)i(preceding)f (sections)191 1410 y(will)g(no)m(w)f(use)g(the)h(new)f(parameters.)332 1573 y(After)i(replacing)h(the)f(parameters,)h(ho)m(w)m(ev)m(er,)i(one) d(cannot)h(directly)f(call)i(a)e(basic)g(rev)m(erse)h(mo)s(de)191 1686 y(driv)m(er.)40 b(A)30 b(basic)g(forw)m(ard)f(mo)s(de)h(driv)m(er) f(m)m(ust)h(b)s(e)f(called.)42 b(Ho)m(w)m(ev)m(er,)32 b(the)e(easy)g(to)g(use)g(driv)m(ers)f(from)191 1799 y(Section)509 1799 y SDict begin H.S end 509 1799 a Black FA(3)p Black 555 1740 a SDict begin H.R end 555 1740 a 555 1799 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.3) cvn H.B /ANN pdfmark end 555 1799 a 30 w FA(do)h(this)g (automatically)-8 b(.)191 1948 y SDict begin H.S end 191 1948 a 191 1948 a SDict begin 13.6 H.A end 191 1948 a 191 1948 a SDict begin [/View [/XYZ H.V]/Dest (subsection.6.2) cvn /DEST pdfmark end 191 1948 a 148 x FB(6.2)112 b(Di\013eren)m (tiating)38 b(external)g(functions)191 2318 y FA(Ideally)-8 b(,)47 b(AD)c(is)f(applied)h(to)g(a)g(giv)m(en)g(computation)g(as)g(a)g (whole.)77 b(This)42 b(is)g(not)h(alw)m(a)m(ys)h(p)s(ossible)191 2431 y(b)s(ecause)38 b(parts)f(of)h(the)h(computation)f(ma)m(y)h(b)s(e) e(co)s(ded)h(in)f(a)h(di\013eren)m(t)h(programming)e(language)j(or)191 2544 y(ma)m(y)g(a)g(call)h(to)f(an)g(external)g(library)-8 b(.)69 b(In)39 b(the)g(former)g(case)i(one)f(ma)m(y)g(w)m(an)m(t)h(to)f (di\013eren)m(tiate)i(the)191 2657 y(parts)26 b(in)h(question)g(with)f (a)h(di\013eren)m(t)g(AD)h(to)s(ol)f(or)g(pro)m(vide)g(hand)f(written)g (deriv)-5 b(ativ)m(es.)41 b(T)-8 b(o)28 b(in)m(tegrate)191 2770 y(these)h(In)f(practice,)i(ho)m(w)m(ev)m(er,)h(sophisticated)f (pro)5 b(jects)28 b(usually)h(ev)m(olv)m(e)i(o)m(v)m(er)f(a)f(long)g(p) s(erio)s(d)e(of)i(time.)191 2883 y(Within)e(this)g(pro)s(cess,)h(a)g (heterogeneous)g(co)s(de)f(base)h(for)f(the)g(pro)5 b(ject)28 b(dev)m(elops,)g(whic)m(h)f(ma)m(y)h(include)191 2996 y(the)i(incorp)s(oration)g(of)g(external)g(solutions,)h(c)m(hanges)g (in)e(programming)g(paradigms)h(or)g(ev)m(en)g(of)g(pro-)191 3109 y(gramming)c(languages.)41 b(Equally)26 b(heterogeneous,)i(the)e (computation)h(of)f(deriv)-5 b(ativ)m(e)28 b(v)-5 b(alues)26 b(app)s(ears.)191 3222 y(Hence,)41 b(di\013eren)m(t)e(AD-to)s(ols)i(ma) m(y)e(b)s(e)e(com)m(bined)i(with)f(hand-deriv)m(ed)g(co)s(des)g(based)g (on)h(the)f(same)191 3334 y(or)i(di\013eren)m(t)h(programming)e (languages.)71 b(ADOL-C)40 b(supp)s(orts)f(suc)m(h)g(settings)i(b)m(y)f (the)h(concept)g(of)191 3447 y(externally)32 b(di\013eren)m(tiated)g (functions,)f(that)h(is,)f(a)h(function)e(not)h(di\013eren)m(tiated)i (b)m(y)e(ADOL-C)g(itself.)191 3560 y(The)f(required)f(deriv)-5 b(ativ)m(es)32 b(ha)m(v)m(e)g(to)f(b)s(e)f(pro)m(vided)g(b)m(y)g(the)g (user.)332 3723 y(F)-8 b(or)33 b(this)f(purp)s(ose,)f(it)i(is)f (required)g(that)g(the)h(externally)g(di\013eren)m(tiated)h(function)e (\(for)g(example)191 3836 y(named)e Ff(euler)p 669 3836 28 4 v 33 w(step)h FA(\))f(has)g(the)h(follo)m(wing)h(signature.)663 4024 y Fq(int)e(euler)p 980 4024 V 33 w(step\(int)h(n,)f(double)h(*x,)g (int)f(m,)h(double)f(*y\);)191 4238 y FA(Note)38 b(that)f(the)g(formal) g(paraem)m(ters)g(in)f(the)h(signature)g(ha)m(v)m(e)h Fq(double)f FA(t)m(yp)s(e,)h(that)f(is,)i(they)e(are)f(not)191 4351 y(activ)m(e)30 b(as)f(in)e(the)i(original)g(program)f(b)s(efore)f (the)i(ADOL-C)f(t)m(yp)s(e)g(c)m(hange.)41 b(The)28 b(externally)h (di\013eren-)191 4464 y(tiated)j(function)e(has)g(to)h(b)s(e)f Fr(r)-5 b(e)g(gister)g(e)g(d)1572 4464 y SDict begin H.S end 1572 4464 a -33 x FD(4)1613 4464 y SDict begin 13.6 H.L end 1613 4464 a 1613 4464 a SDict begin [/Subtype /Link/Dest (Hfootnote.4) cvn/H /I/Border [0 0 1]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end 1613 4464 a 30 w FA(using)30 b(an)h(ADOL-C)f(metho)s(d)g(as)g(follo)m(ws.)663 4653 y Fq(ext)p 783 4653 28 4 v 33 w(di\013)p 938 4653 V 33 w(fct)g(*edf)h(=)f(reg)p 1510 4653 V 34 w(ext)p 1659 4653 V 32 w(fct\(euler)p 2007 4653 V 34 w(step\);)p FA(.)191 4841 y(This)i(returns)g(a)i(p)s(oin)m(ter)f(to)h(an)f Fq(ext)p 1476 4841 V 33 w(di\013)p 1631 4841 V 32 w(fct)g FA(instance)h(sp)s(eci\014c)f(to)h(the)f(registered)h(function.)48 b(Then,)191 4954 y(the)36 b(user)g(has)g(to)g(supply)f(the)h(function)g (p)s(oin)m(ters)g(for)g(the)g(call)i(bac)m(k)e(metho)s(ds)g(\(for)g (example)h(here)191 5067 y Fq(zos)p 316 5067 V 33 w(fo)m(r)p 450 5067 V 33 w(euler)p 663 5067 V 33 w(step)27 b FA(and)e Fq(fos)p 1158 5067 V 33 w(rev)p 1304 5067 V 33 w(euler)p 1517 5067 V 33 w(step)p FA(\))i(the)f(user)g(implemen)m(ted)h(to)g (compute)f(the)h(deriv)-5 b(ativ)m(es)27 b(as)191 5180 y(follo)m(ws.)p Black 191 5244 1440 4 v 295 5298 a Fw(4)329 5330 y SDict begin H.S end 329 5330 a 329 5330 a SDict begin H.R end 329 5330 a 329 5330 a SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.4) cvn /DEST pdfmark end 329 5330 a Fv(w)n(e)f(record)g(the)g(function)f(p)r(oin)n(ter)p Black Black Black eop end %%Page: 54 54 TeXDict begin 54 53 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.54) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(54)705 b Fu(6)91 b(AD)m(V)-10 b(ANCED)32 b(ALGORITHMIC)e (DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black Black Black 663 606 a Fq(edf-)p Fs(>)p Fq(zos)p 1004 606 28 4 v 33 w(fo)m(rw)m(a)m(rd)h(=)e Ff(zos)p 1569 606 V 33 w(fo)m(r)p 1703 606 V 33 w(euler)p 1916 606 V 33 w(step)p Fq(;)663 719 y(//)i(function)e(p)s(ointer)g(fo)m(r)h(computing)h (Zero-Order-Scala)m(r)f(\(=zos\))663 832 y(//)h(fo)m(rw)m(a)m(rd)f (info)m(rmation)663 945 y(edf-)p Fs(>)p Fq(fos)p 992 945 V 33 w(reverse)h(=)e(fos)p 1525 945 V 33 w(rev)p 1671 945 V 33 w(euler)p 1884 945 V 33 w(step;)663 1058 y(//)i(function)e(p)s(ointer)g(fo)m(r)h(computing)h(First-Order-Scala)m (r)e(\(=fos\))663 1171 y(reverse)i(info)m(rmation)191 1413 y FA(T)-8 b(o)44 b(facilitate)j(the)d(switc)m(h)g(b)s(et)m(w)m (een)g(activ)m(e)i(and)d(passiv)m(e)h(v)m(ersions)g(of)g(the)g (parameters)g Fq(x)g FA(and)f Fq(y)191 1526 y FA(one)f(has)g(to)h(pro)m (vide)f(\(allo)s(cate\))j(b)s(oth)c(v)-5 b(arian)m(ts.)77 b(I.e.)f(if)42 b(the)g(call)h(to)g Fq(euler)p 3008 1526 V 33 w(step)f FA(w)m(as)g(originally)663 1639 y Fq(rc=euler)p 990 1639 V 34 w(step\(n,)36 b(sOld,)g(m,)g(sNew\);)i FA(then)d(the)g(ADOL-C)g(t)m(yp)s(ec)m(hange)h(for)e(the)h(calling)191 1805 y(con)m(text)f(will)e(turn)f Fq(sOld)g FA(and)g Fq(sNew)i FA(in)e Fq(adouble)h FA(p)s(oin)m(ters.)45 b(T)-8 b(o)33 b(trigger)g(the)f(appropriate)g(action)h(for)191 1918 y(the)c(deriv)-5 b(ativ)m(e)30 b(computation)g(\(i.e.)41 b(creating)31 b(an)d(external)i(di\013eren)m(tiation)g(en)m(try)g(on)e (the)h(trace\))i(the)191 2031 y(original)g(call)h(to)f(the)g (externally)g(di\013eren)m(tiated)h(function)e(m)m(ust)g(b)s(e)g (substituted)g(b)m(y)663 2247 y Fq(rc=call)p 938 2247 V 33 w(ext)p 1086 2247 V 33 w(fct\(edf,)h(n,)f(sOldP)m(assive,)g(sOld,) g(m,)h(sNewP)m(assive,)g(sNew\);)191 2463 y FA(Here,)36 b Fq(sOldP)m(assive)d FA(and)h Fq(sNewP)m(assive)h FA(are)f(the)g (passiv)m(e)h(coun)m(terparts)g(\()p Fq(double)g FA(p)s(oin)m(ters)f (allo)s(cated)191 2576 y(to)k(length)g Fq(n)f FA(and)g Fq(m)p FA(,)i(resp)s(ectiv)m(ely\))h(to)e(the)f(activ)m(e)j(argumen)m (ts)e Fq(sNew)g FA(in)f Fq(adouble)p FA(.)62 b(The)37 b(usage)h(of)191 2689 y(the)43 b(external)g(function)f(facilit)m(y)i (is)f(illustrated)g(b)m(y)f(the)h(example)g Ft(ext_diff_func)38 b FA(con)m(tained)44 b(in)191 2802 y Ft(examples/additional_exam)o (ples)o(/ex)o(t_di)o(ff_f)o(unc)o FA(.)39 b(There,the)32 b(external)h(di\013eren)m(tiated)g(func-)191 2915 y(tion)g(is)g(also)h (a)f(C)g(co)s(de,)h(but)e(the)h(handling)f(as)h(external)h(di\013eren)m (tiated)g(functions)f(also)g(a)h(decrease)191 3028 y(of)c(the)h(o)m(v)m (erall)i(required)c(tap)s(e)i(size.)191 3181 y SDict begin H.S end 191 3181 a 191 3181 a SDict begin 13.6 H.A end 191 3181 a 191 3181 a SDict begin [/View [/XYZ H.V]/Dest (subsection.6.3) cvn /DEST pdfmark end 191 3181 a 149 x FB(6.3)112 b(Adv)-6 b(anced)38 b(algorithmic)h(di\013eren)m(tiation)f(of)g(time)f (in)m(tegration)h(pro)s(cesses)191 3553 y FA(F)-8 b(or)23 b(man)m(y)g(time-dep)s(enden)m(t)g(applications,)j(the)d(corresp)s (onding)f(sim)m(ulations)h(are)g(based)g(on)f(ordinary)191 3666 y(or)27 b(partial)g(di\013eren)m(tial)h(equations.)40 b(F)-8 b(urthermore,)28 b(frequen)m(tly)f(there)g(are)g(quan)m(tities)h (that)f(in\015uence)191 3778 y(the)40 b(result)g(of)g(the)h(sim)m (ulation)g(and)e(can)h(b)s(e)g(seen)g(as)g(con)m(trol)i(of)e(the)g (systems.)70 b(T)-8 b(o)40 b(compute)h(an)191 3891 y(appro)m(ximation) 31 b(of)g(the)g(sim)m(ulated)g(pro)s(cess)g(for)f(a)h(time)g(in)m(terv) -5 b(al)32 b([0)p Fs(;)15 b(T)e FA(])32 b(and)e(ev)-5 b(aluated)31 b(the)g(desired)191 4004 y(target)h(function,)e(one)h (applies)f(an)h(appropriate)f(in)m(tegration)i(sc)m(heme)g(giv)m(en)f (b)m(y)p Black Black 339 4247 a(some)g(initializations)i(yielding)e Fs(x)1526 4261 y FD(0)339 4360 y FA(for)g Fs(i)25 b FA(=)g(0)p Fs(;)15 b(:)g(:)g(:)i(;)e(N)31 b Fo(\000)20 b FA(1)427 4473 y Fs(x)479 4487 y Fi(i)p FD(+1)623 4473 y FA(=)25 b Fs(F)13 b FA(\()p Fs(x)877 4487 y Fi(i)905 4473 y Fs(;)i(u)997 4487 y Fi(i)1026 4473 y Fs(;)g(t)1099 4487 y Fi(i)1127 4473 y FA(\))339 4586 y(ev)-5 b(aluation)32 b(of)f(the)f(target)i (function)191 4829 y(where)g Fs(x)508 4843 y Fi(i)565 4829 y Fo(2)d Fx(R)733 4796 y Fi(n)813 4829 y FA(denotes)k(the)f(state) i(and)e Fs(u)1758 4843 y Fi(i)1816 4829 y Fo(2)c Fx(R)1983 4796 y Fi(m)2083 4829 y FA(the)k(con)m(trol)j(at)e(time)g Fs(t)2905 4843 y Fi(i)2966 4829 y FA(for)f(a)h(giv)m(en)h(time)f(grid) 191 4941 y Fs(t)224 4955 y FD(0)263 4941 y Fs(;)15 b(:)g(:)g(:)i(;)e(t) 498 4955 y Fi(N)595 4941 y FA(with)29 b Fs(t)834 4955 y FD(0)899 4941 y FA(=)c(0)30 b(and)f Fs(t)1279 4955 y Fi(N)1371 4941 y FA(=)c Fs(T)13 b FA(.)41 b(The)29 b(op)s(erator)h Fs(F)38 b FA(:)26 b Fx(R)2376 4908 y Fi(n)2442 4941 y Fo(\002)19 b Fx(R)2610 4908 y Fi(m)2696 4941 y Fo(\002)f Fx(R)26 b Fo(7!)f Fx(R)3083 4908 y Fi(n)3160 4941 y FA(de\014nes)k(the)h(time)191 5054 y(step)g(to)h(compute)g(the)g (state)g(at)h(time)f Fs(t)1594 5068 y Fi(i)1622 5054 y FA(.)40 b(Note)32 b(that)f(w)m(e)g(do)f(not)h(assume)f(a)h(uniform)e (grid.)332 5217 y(When)44 b(computing)f(deriv)-5 b(ativ)m(es)46 b(of)e(the)f(target)j(function)d(with)h(resp)s(ect)f(to)i(the)f(con)m (trol,)49 b(the)191 5330 y(consequences)30 b(for)g(the)g(tap)s(e)g (generation)h(using)e(the)h(\\basic")h(taping)g(approac)m(h)f(as)g (implemen)m(ted)g(in)p Black Black eop end %%Page: 55 55 TeXDict begin 55 54 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.55) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(6.3)92 b(Adv)-5 b(anced)30 b(algorithmic)i(di\013eren)m(tiation)g (of)f(time)g(in)m(tegration)h(pro)s(cesses)681 b FA(55)p Black Black Black Black 309 1195 a @beginspecial 0 @llx 0 @lly 314 @urx 156 @ury 1644 @rwi @setspecial %%BeginDocument: tapebasic.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: tapebasic.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:02:12 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 314 156 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 156 moveto 0 0 lineto 314 0 lineto 314 156 lineto closepath clip newpath -27.6 185.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 % Ellipse 7.500 slw n 2937 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 3150 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Ellipse n 3375 1440 33 33 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr % Polyline 0 slj 0 slc n 2025 2475 m 3375 2475 l 3375 2925 l 2025 2925 l cp gs col7 s gr % Polyline gs clippath 5230 930 m 5415 930 l 5415 870 l 5230 870 l 5230 870 l 5380 900 l 5230 930 l cp eoclip n 450 900 m 5400 900 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 5230 930 m 5380 900 l 5230 870 l 5260 900 l 5230 930 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 5400 1125 l 5400 1800 l 450 1800 l cp gs col0 s gr % Polyline n 1800 1125 m 2250 1125 l 2250 1800 l 1800 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 2250 1125 m 2700 1125 l 2700 1800 l 2250 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 3600 1125 m 4050 1125 l 4050 1800 l 3600 1800 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline n 450 1125 m 1800 1125 l 1800 1800 l 450 1800 l cp gs 0.60 setgray ef gr gs col0 s gr % Polyline n 4050 1125 m 5400 1125 l 5400 1800 l 4050 1800 l cp gs 0.40 setgray ef gr gs col0 s gr /Times-Roman ff 317.50 scf sf 1935 720 m gs 1 -1 sc (tape generation) col0 sh gr /Times-Roman ff 317.50 scf sf 2340 2205 m gs 1 -1 sc (time loop) col0 sh gr /Times-Roman ff 317.50 scf sf 4365 2205 m gs 1 -1 sc (target) col0 sh gr /Times-Roman ff 317.50 scf sf 4230 2520 m gs 1 -1 sc (function) col0 sh gr /Times-Roman ff 317.50 scf sf 855 2205 m gs 1 -1 sc (init) col0 sh gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF %%EndDocument @endspecial 1963 w @beginspecial 0 @llx 0 @lly 314 @urx 156 @ury 1644 @rwi @setspecial %%BeginDocument: tapeadv.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: tapeadv.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:02:55 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 314 156 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 156 moveto 0 0 lineto 314 0 lineto 314 156 lineto closepath clip newpath -27.6 185.0 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06299 0.06299 sc % % Fig objects follow % % % here starts figure with depth 50 /Times-Roman ff 317.50 scf sf 1935 720 m gs 1 -1 sc (tape generation) col0 sh gr % Polyline 0 slj 0 slc 7.500 slw n 2025 2250 m 3375 2250 l 3375 2700 l 2025 2700 l cp gs col7 s gr % Polyline gs clippath 5230 930 m 5415 930 l 5415 870 l 5230 870 l 5230 870 l 5380 900 l 5230 930 l cp eoclip n 450 900 m 5400 900 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 5230 930 m 5380 900 l 5230 870 l 5260 900 l 5230 930 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 5400 1125 l 5400 1800 l 450 1800 l cp gs col0 s gr % Polyline n 2700 2250 m 3150 2250 l 3150 2925 l 2700 2925 l cp gs 0.80 setgray ef gr gs col0 s gr % Polyline gs clippath 2534 2200 m 2700 2283 l 2726 2229 l 2561 2147 l 2561 2147 l 2682 2241 l 2534 2200 l cp eoclip n 1800 1800 m 2700 2250 l gs 0.80 setgray ef gr gs col0 s gr gr % arrowhead n 2534 2200 m 2682 2241 l 2561 2147 l 2574 2187 l 2534 2200 l cp gs 0.00 setgray ef gr col0 s % Polyline n 450 1125 m 1800 1125 l 1800 1800 l 450 1800 l cp gs 0.60 setgray ef gr gs col0 s gr % Polyline gs clippath 3911 1902 m 4076 1820 l 4050 1766 l 3884 1849 l 3884 1849 l 4032 1809 l 3911 1902 l cp eoclip n 4050 1800 m 3150 2250 l gs 0.60 setgray ef gr gs col0 s gr gr % arrowhead n 3911 1902 m 4032 1809 l 3884 1849 l 3924 1862 l 3911 1902 l cp gs 0.00 setgray ef gr col0 s % Polyline n 4050 1125 m 5400 1125 l 5400 1800 l 4050 1800 l cp gs 0.40 setgray ef gr gs col0 s gr % here ends figure; $F2psEnd rs showpage %%Trailer %EOF %%EndDocument @endspecial 410 1408 a(Basic)32 b(taping)f(pro)s(cess)1076 b(Adv)-5 b(anced)30 b(taping)h(pro)s(cess)p Black 1243 1604 a(Figure)g(4:)1641 1604 y SDict begin H.S end 1641 1604 a 1641 1604 a SDict begin H.R end 1641 1604 a 1641 1604 a SDict begin [/View [/XYZ H.V]/Dest (figure.4) cvn /DEST pdfmark end 1641 1604 a FA(Di\013eren)m(t)h(taping)e (approac)m(hes)p Black Black 191 1899 a(ADOL-C)e(so)g(far)g(are)g(sho)m (wn)f(in)h(the)g(left)h(part)e(of)1958 1917 y SDict begin H.S end 1958 1917 a Black -18 x FA(Figure)k(4)p Black 2291 1837 a SDict begin H.R end 2291 1837 a 2291 1899 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.4) cvn H.B /ANN pdfmark end 2291 1899 a FA(.)40 b(As)27 b(can)i(b)s(e)e(seen,)i (the)f(iterativ)m(e)i(pro)s(cess)191 2012 y(is)38 b(completely)i (unrolled)e(due)g(to)h(the)f(taping)h(pro)s(cess.)64 b(That)39 b(is,)h(the)f(tap)s(e)f(con)m(tains)i(an)e(in)m(ternal)191 2125 y(represen)m(tation)h(of)g(eac)m(h)g(time)g(step.)65 b(Hence,)41 b(the)e(o)m(v)m(erall)h(tap)s(e)f(comprises)f(a)h(serious)f (amoun)m(t)h(of)191 2238 y(redundan)m(t)29 b(information)i(as)f (illustrated)h(b)m(y)g(the)f(ligh)m(t)i(grey)f(rectangles)h(in)2891 2256 y SDict begin H.S end 2891 2256 a Black -18 x FA(Figure)f(4)p Black 3223 2176 a SDict begin H.R end 3223 2176 a 3223 2238 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.4) cvn H.B /ANN pdfmark end 3223 2238 a FA(.)332 2401 y(T)-8 b(o)35 b(o)m(v)m(ercome)i(the)d(rep)s(eated)h(storage)h(of) e(essen)m(tially)j(the)d(same)h(information,)h(a)f Fr(neste)-5 b(d)37 b(taping)191 2514 y FA(mec)m(hanism)j(has)g(b)s(een)f(incorp)s (orated)h(in)m(to)h(ADOL-C)e(as)i(illustrated)f(on)g(the)g(righ)m (t-hand)g(side)g(of)191 2644 y SDict begin H.S end 191 2644 a Black -18 x FA(Figure)31 b(4)p Black 523 2564 a SDict begin H.R end 523 2564 a 523 2626 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.4) cvn H.B /ANN pdfmark end 523 2626 a FA(.)40 b(This)26 b(new)g(capabilit)m(y)i(allo)m(ws)g(the) f(encapsulation)g(of)g(the)g(time-stepping)h(pro)s(cedure)d(suc)m(h)191 2739 y(that)j(only)f(the)h(last)g(time)g(step)f Fs(x)1349 2753 y Fi(N)1442 2739 y FA(=)e Fs(F)13 b FA(\()p Fs(x)1696 2753 y Fi(N)7 b Fm(\000)p FD(1)1854 2739 y Fs(;)15 b(u)1946 2753 y Fi(N)7 b Fm(\000)p FD(1)2104 2739 y FA(\))27 b(is)g(tap)s(ed)h (as)f(one)h(represen)m(tativ)m(e)h(of)e(the)h(time)191 2852 y(steps)e(in)g(addition)g(to)h(a)g(function)e(p)s(oin)m(ter)i(to)f (the)h(ev)-5 b(aluation)27 b(pro)s(cedure)e Fs(F)40 b FA(of)26 b(the)g(time)h(steps.)39 b(The)191 2965 y(function)f(p)s(oin)m (ter)g(has)g(to)h(b)s(e)f(stored)g(for)g(a)h(p)s(ossibly)e(necessary)i (retaping)g(during)e(the)h(deriv)-5 b(ativ)m(e)191 3078 y(calculation)33 b(as)d(explained)h(b)s(elo)m(w.)332 3241 y(Instead)e(of)h(storing)f(the)h(complete)h(tap)s(e,)e(only)h(a)g (v)m(ery)f(limited)h(n)m(um)m(b)s(er)e(of)i(in)m(termediate)h(states) 191 3354 y(are)41 b(k)m(ept)g(in)g(memory)-8 b(.)71 b(They)41 b(serv)m(e)g(as)g(c)m(hec)m(kp)s(oin)m(ts,)k(suc)m(h)40 b(that)h(the)g(required)f(information)h(for)191 3467 y(the)e(bac)m(kw)m(ard)h(in)m(tegration)h(is)f(generated)g(piecewise)g (during)f(the)g(adjoin)m(t)h(calculation.)70 b(F)-8 b(or)40 b(this)191 3580 y(mo)s(di\014ed)h(adjoin)m(t)h(computation)h(the)g (optimal)g(c)m(hec)m(kp)s(oin)m(ting)g(sc)m(hedules)g(pro)m(vided)e(b)m (y)h Fx(rev)m(olv)m(e)191 3692 y FA(are)i(emplo)m(y)m(ed.)83 b(An)43 b(adapted)h(v)m(ersion)h(of)f(the)g(soft)m(w)m(are)h(pac)m(k)-5 b(age)46 b Fq(revolve)f FA(is)f(part)g(of)g(ADOL-C)191 3805 y(and)33 b(automatically)k(in)m(tegrated)e(in)f(the)g(ADOL-C)g (library)-8 b(.)51 b(Based)34 b(on)g Fq(revolve)p FA(,)i Fs(c)e FA(c)m(hec)m(kp)s(oin)m(ts)h(are)191 3918 y(distributed)24 b(suc)m(h)h(that)g(computational)i(e\013ort)f(is)f(minimized)g(for)f (the)h(giv)m(en)h(n)m(um)m(b)s(er)e(of)h(c)m(hec)m(kp)s(oin)m(ts)191 4031 y(and)32 b(time)i(steps)e Fs(N)10 b FA(.)48 b(It)33 b(is)g(imp)s(ortan)m(t)g(to)g(note)h(that)f(the)g(o)m(v)m(erall)i(tap)s (e)e(size)h(is)e(drastically)i(reduced)191 4144 y(due)42 b(to)h(the)g(adv)-5 b(anced)42 b(taping)h(strategy)-8 b(.)79 b(F)-8 b(or)44 b(the)e(implemen)m(tation)j(of)d(this)h(nested)f (taping)h(w)m(e)191 4257 y(in)m(tro)s(duced)36 b(a)h(so-called)h (\\di\013eren)m(tiating)g(con)m(text")h(that)e(enables)g(ADOL-C)f(to)h (handle)f(di\013eren)m(t)191 4370 y(in)m(ternal)23 b(function)g (represen)m(tations)g(during)f(the)h(taping)g(pro)s(cedure)e(and)h(the) h(deriv)-5 b(ativ)m(e)24 b(calculation.)191 4483 y(This)d(approac)m(h)h (allo)m(ws)h(the)e(generation)i(of)f(a)g(new)f(tap)s(e)h(inside)f(the)h (o)m(v)m(erall)i(tap)s(e,)g(where)d(the)g(coupling)191 4596 y(of)30 b(the)h(di\013eren)m(t)g(tap)s(es)f(is)h(based)f(on)g(the) h Fr(external)i(di\013er)-5 b(entiate)g(d)35 b(function)30 b FA(describ)s(ed)g(ab)s(o)m(v)m(e.)332 4758 y(W)-8 b(ritten)54 b(under)d(the)i(ob)5 b(jectiv)m(e)55 b(of)e(minimal)g(user)f(e\013ort,) 59 b(the)53 b(c)m(hec)m(kp)s(oin)m(ting)i(routines)e(of)191 4871 y(ADOL-C)35 b(need)g(only)g(v)m(ery)g(limited)h(information.)55 b(The)34 b(user)g(m)m(ust)h(pro)m(vide)g(t)m(w)m(o)h(routines)f(as)g (im-)191 4984 y(plemen)m(tation)d(of)e(the)h(time-stepping)g(function)f Fs(F)44 b FA(with)30 b(the)g(signatures)663 5217 y Fq(int)g(time)p 967 5217 28 4 v 33 w(step)p 1155 5217 V 33 w(function\(int)g(n,)h (adouble)f(*u\);)663 5330 y(int)g(time)p 967 5330 V 33 w(step)p 1155 5330 V 33 w(function\(int)g(n,)h(double)f(*u\);)p Black Black eop end %%Page: 56 56 TeXDict begin 56 55 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.56) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(56)705 b Fu(6)91 b(AD)m(V)-10 b(ANCED)32 b(ALGORITHMIC)e (DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black 191 606 a FA(where)h(the)g(function)g(names)g(can)h(b)s(e)f(c)m(hosen)g(b)m(y)h (the)f(user)g(as)g(long)h(as)g(the)f(names)g(are)h(unique.It)f(is)191 719 y(p)s(ossible)e(that)g(the)h(result)f(v)m(ector)i(of)e(one)g(time)h (step)f(iteration)i(o)m(v)m(erwrites)g(the)e(argumen)m(t)h(v)m(ector)h (of)191 832 y(the)f(same)f(time)h(step.)41 b(Then,)30 b(no)g(cop)m(y)h(op)s(erations)g(are)g(required)e(to)i(prepare)f(the)h (next)f(time)h(step.)332 995 y(A)m(t)41 b(\014rst,)i(the)d Fq(adouble)h FA(v)m(ersion)g(of)f(the)h(time)g(step)f(function)g(has)g (to)i(b)s(e)d Fr(r)-5 b(e)g(gister)g(e)g(d)43 b FA(using)d(the)191 1108 y(ADOL-C)30 b(function)663 1372 y Fq(CP)p 784 1372 28 4 v 33 w(Context)h(cp)s(c\(time)p 1478 1372 V 34 w(step)p 1667 1372 V 32 w(function\);)p FA(.)191 1636 y(This)38 b(function)h(initializes)i(the)e(structure)f Fq(cp)s(c)p FA(.)67 b(Then,)40 b(the)f(user)f(has)h(to)h(pro)m(vide)f(the)g (remaining)191 1749 y(c)m(hec)m(kp)s(oin)m(ting)32 b(information)f(b)m (y)f(the)h(follo)m(wing)h(commands:)p Black Black 663 2065 a Fq(cp)s(c.setDoubleFct\(time)p 1525 2065 V 34 w(step)p 1714 2065 V 33 w(function\);)663 2178 y(//)g(double)e(va)m (riante)g(of)h(the)f(time)h(step)f(function)663 2291 y(cp)s(c.setNumb)s(erOfSteps\(N\);)663 2403 y(//)i(numb)s(er)e(of)h (time)f(steps)g(to)h(p)s(erfo)m(rm)663 2516 y(cp)s(c.setNumb)s (erOfCheckp)s(oints\(10\);)663 2629 y(//)h(numb)s(er)e(of)h(checkp)s (oint)663 2742 y(cp)s(c.setDimensionXY\(n\);)663 2855 y(//)h(dimension)e(of)h(input/output)663 2968 y(cp)s(c.setInput\(y\);) 663 3081 y(//)h(input)d(vecto)m(r)663 3194 y(cp)s(c.setOutput\(y\);)663 3307 y(//)j(output)e(vecto)m(r)663 3420 y(cp)s(c.setT)-8 b(ap)s(eNumb)s(er\(tag)p 1580 3420 V 35 w(check\);)663 3533 y(//)32 b(subtap)s(e)d(numb)s(er)i(fo)m(r)g(checkp)s(ointing)663 3645 y(cp)s(c.setAlw)m(a)m(ysRetaping\(false\);)663 3758 y(//)h(alw)m(a)m(ys)e(retap)s(e)g(o)m(r)h(not)g(?)191 4074 y FA(Subsequen)m(tly)-8 b(,)34 b(the)f(time)h(lo)s(op)g(in)f(the)g (function)h(ev)-5 b(aluation)34 b(can)g(b)s(e)f(substituted)f(b)m(y)i (a)f(call)i(of)f(the)191 4187 y(function)663 4451 y Fq(int)c(cp)s (c.checkp)s(ointing\(\);)191 4716 y FA(Then,)h(ADOL-C)g(computes)h (deriv)-5 b(ativ)m(e)33 b(information)e(using)g(the)h(optimal)g(c)m (hec)m(kp)s(oin)m(ting)h(strategy)191 4829 y(pro)m(vided)d(b)m(y)g Fq(revolve)h FA(in)m(ternally)-8 b(,)32 b(i.e.,)g(completely)g(hidden)d (from)h(the)h(user.)332 4991 y(The)f(presen)m(ted)g(driv)m(er)g(is)h (protot)m(yp)s(ed)f(in)g(the)h(header)f(\014le)g Ft ()p FA(.)35 b(This)191 5104 y(header)e(is)h (included)e(b)m(y)i(the)f(global)i(header)e(\014le)h Ft()29 b FA(automatically)-8 b(.)53 b(An)33 b(example)191 5217 y(program)28 b Ft(checkpointing.cpp)23 b FA(illustrates)29 b(the)f(c)m(hec)m(kp)s(oin)m(ting)i(facilities.)42 b(It)28 b(can)h(b)s(e)e(found)g(in)h(the)191 5330 y(directory)j Ft(examples/additional_exam)o(ple)o(s/ch)o(eckp)o(oin)o(ting)o FA(.)p Black Black eop end %%Page: 57 57 TeXDict begin 57 56 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.57) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(6.4)92 b(Adv)-5 b(anced)30 b(algorithmic)i(di\013eren)m(tiation)g (of)f(\014xed)f(p)s(oin)m(t)g(iterations)883 b FA(57)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.6.4) cvn /DEST pdfmark end 191 515 a 91 x FB(6.4)112 b(Adv)-6 b(anced)38 b(algorithmic)h (di\013eren)m(tiation)f(of)g(\014xed)g(p)s(oin)m(t)g(iterations)191 827 y FA(Quite)28 b(often,)h(the)f(state)h(of)f(the)f(considered)h (system)g(denoted)g(b)m(y)f Fs(x)e Fo(2)g FA(I)-20 b(R)2771 792 y Fi(n)2845 827 y FA(dep)s(ends)26 b(on)i(some)g(design)191 940 y(parameters)c(denoted)g(b)m(y)g Fs(u)h Fo(2)g FA(I)-20 b(R)1354 905 y Fi(m)1421 940 y FA(.)38 b(One)24 b(example)g(for)g(this) g(setting)h(forms)e(the)h(\015o)m(w)g(o)m(v)m(er)h(an)f(aircraft)191 1053 y(wing.)59 b(Here,)39 b(the)e(shap)s(e)f(of)g(the)h(wing)f(that)i (is)e(de\014ned)g(b)m(y)g(the)h(design)f(v)m(ector)i Fs(u)f FA(determines)g(the)191 1166 y(\015o)m(w)30 b(\014eld)g Fs(x)p FA(.)41 b(The)30 b(desired)g(quasi-steady)h(state)h Fs(x)1987 1180 y Fm(\003)2056 1166 y FA(ful\014lls)e(the)h(\014xed)e(p) s(oin)m(t)i(equation)1722 1362 y Fs(x)1774 1376 y Fm(\003)1838 1362 y FA(=)25 b Fs(F)13 b FA(\()p Fs(x)2092 1376 y Fm(\003)2132 1362 y Fs(;)i(u)p FA(\))3629 1362 y SDict begin H.S end 3629 1362 a 3629 1362 a SDict begin 16.6 H.A end 3629 1362 a 3629 1362 a SDict begin [/View [/XYZ H.V]/Dest (equation.6.11) cvn /DEST pdfmark end 3629 1362 a FA(\(11\))191 1559 y(for)27 b(a)g(giv)m(en)i(con)m(tin)m(uously)f(di\013eren)m (tiable)g(function)f Fs(F)38 b FA(:)26 b(I)-20 b(R)2280 1523 y Fi(n)2341 1559 y Fo(\002)14 b FA(I)-20 b(R)2505 1523 y Fi(m)2596 1559 y Fo(!)26 b FA(I)-20 b(R)2792 1523 y Fi(n)2839 1559 y FA(.)39 b(A)28 b(\014xed)e(p)s(oin)m(t)h(prop)s(ert) m(y)191 1672 y(of)j(this)h(kind)e(is)i(also)g(exploited)g(b)m(y)g(man)m (y)f(other)h(applications.)332 1834 y(Assume)f(that)h(one)g(can)f (apply)g(the)h(iteration)1673 2030 y Fs(x)1725 2045 y Fi(k)r FD(+1)1883 2030 y FA(=)25 b Fs(F)13 b FA(\()p Fs(x)2137 2045 y Fi(k)2181 2030 y Fs(;)i(u)p FA(\))3629 2030 y SDict begin H.S end 3629 2030 a 3629 2030 a SDict begin 16.6 H.A end 3629 2030 a 3629 2030 a SDict begin [/View [/XYZ H.V]/Dest (equation.6.12) cvn /DEST pdfmark end 3629 2030 a FA(\(12\))191 2227 y(to)31 b(obtain)g(a)g(linear)g(con)m (v)m(erging)h(sequence)f Fo(f)p Fs(x)1840 2242 y Fi(k)1883 2227 y Fo(g)g FA(generated)h(for)e(an)m(y)h(giv)m(en)g(con)m(trol)h Fs(u)25 b Fo(2)g FA(I)-20 b(R)3471 2191 y Fi(n)3518 2227 y FA(.)41 b(Then)191 2340 y(the)j(limit)h(p)s(oin)m(t)f Fs(x)895 2354 y Fm(\003)982 2340 y Fo(2)k FA(I)-20 b(R)1170 2304 y Fi(n)1261 2340 y FA(ful\014ls)43 b(the)h(\014xed)f(p)s(oin)m(t)h (equation)h(\()2594 2340 y SDict begin H.S end 2594 2340 a Black FA(11)p Black 2685 2281 a SDict begin H.R end 2685 2281 a 2685 2340 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.6.11) cvn H.B /ANN pdfmark end 2685 2340 a FA(\))q(.)81 b(Moreo)m(v)m(er,)50 b(supp)s(ose)42 b(that)191 2453 y Fo(k)246 2417 y Fi(dF)p 246 2432 91 4 v 253 2484 a(dx)347 2453 y FA(\()p Fs(x)434 2467 y Fm(\003)474 2453 y Fs(;)15 b(u)p FA(\))p Fo(k)36 b Fs(<)e FA(1)i(holds)g(for)f(an)m(y)i (pair)e(\()p Fs(x)1713 2467 y Fm(\003)1753 2453 y Fs(;)15 b(u)p FA(\))37 b(satisfying)f(equation)h(\()2739 2453 y SDict begin H.S end 2739 2453 a Black FA(11)p Black 2830 2394 a SDict begin H.R end 2830 2394 a 2830 2453 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (equation.6.11) cvn H.B /ANN pdfmark end 2830 2453 a FA(\))q(.)57 b(Hence,)39 b(there)d(exists)g (a)191 2565 y(di\013eren)m(tiable)d(function)e Fs(\036)c FA(:)g(I)-20 b(R)1308 2530 y Fi(m)1401 2565 y Fo(!)27 b FA(I)-20 b(R)1598 2530 y Fi(n)1645 2565 y FA(,)32 b(suc)m(h)f(that)h Fs(\036)p FA(\()p Fs(u)p FA(\))c(=)f Fs(F)13 b FA(\()p Fs(\036)p FA(\()p Fs(u)p FA(\))p Fs(;)i(u)p FA(\),)34 b(where)d(the)h(state)g Fs(\036)p FA(\()p Fs(u)p FA(\))h(is)191 2678 y(a)e(\014xed)f(p)s(oin)m(t)g(of)h Fs(F)44 b FA(according)31 b(to)h(a)f(con)m(trol)h Fs(u)p FA(.)41 b(T)-8 b(o)31 b(optimize)h(the)f(system)g(describ)s(ed)e(b)m(y)i(the)f(state)191 2791 y(v)m(ector)j Fs(x)28 b FA(=)f Fs(\036)p FA(\()p Fs(u)p FA(\))33 b(with)e(resp)s(ect)h(to)h(the)e(design)h(v)m(ector)i Fs(u)p FA(,)e(deriv)-5 b(ativ)m(es)33 b(of)f Fs(\036)g FA(with)f(resp)s(ect)h(to)h Fs(u)e FA(are)191 2904 y(of)f(particular)h (in)m(terest.)332 3067 y(T)-8 b(o)25 b(exploit)h(the)f(adv)-5 b(anced)25 b(algorithmic)i(di\013eren)m(tiation)f(of)g(suc)m(h)e (\014xed)g(p)s(oin)m(t)h(iterations)h(ADOL-)191 3180 y(C)k(pro)m(vides)g(the)h(sp)s(ecial)g(functions)f Ft(fp)p 1593 3180 29 4 v 34 w(iteration\(...\))p FA(.)36 b(It)31 b(has)f(the)h(follo)m(wing)g(in)m(terface:)p Black Black 491 3411 a Fq(int)f(fp)p 703 3411 28 4 v 32 w(iteration\(sub)p 1216 3411 V 33 w(tap)s(e)p 1416 3411 V 32 w(num,double)p 1887 3411 V 34 w(F,adouble)p 2290 3411 V 32 w(F,no)m(rm,no)m(rm)p 2808 3411 V 36 w(deriv,eps,eps)p 3320 3411 V 34 w(deriv,)1082 3523 y(N)p 1151 3523 V 33 w(max,N)p 1431 3523 V 34 w(max)p 1623 3523 V 32 w(deriv,x)p 1904 3523 V 33 w(0,u,x)p 2121 3523 V 34 w(\014x,dim)p 2412 3523 V 32 w(x,dim)p 2652 3523 V 33 w(u\))491 3636 y(sho)m(rt)h(int)f(sub)p 976 3636 V 32 w(tap)s(e)p 1175 3636 V 32 w(num;)166 b FA(//)31 b(tap)s(e)g(iden)m(ti\014cation)h(for)e(sub)p 2715 3636 V 32 w(tap)s(e)491 3749 y Fq(int)g(*double)p 921 3749 V 33 w(F;)533 b FA(//)31 b(p)s(oin)m(ter)g(to)g(a)g(function)f(that)h (compute)f(for)h Fs(x)f FA(and)g Fs(u)1559 3862 y FA(//)h(the)g(v)-5 b(alue)31 b Fs(y)d FA(=)d Fs(F)13 b FA(\()p Fs(x;)i(u)p FA(\))31 b(for)g Fq(double)f FA(argumen)m(ts)491 3975 y Fq(int)g(*adouble)p 965 3975 V 33 w(F;)489 b FA(//)31 b(p)s(oin)m(ter)g(to)g(a)g(function)f(that)h(compute)f(for)h Fs(x)f FA(and)g Fs(u)1559 4088 y FA(//)h(the)g(v)-5 b(alue)31 b Fs(y)d FA(=)d Fs(F)13 b FA(\()p Fs(x;)i(u)p FA(\))31 b(for)g Fq(double)f FA(argumen)m(ts)491 4201 y Fq(int)g(*no)m(rm;)674 b FA(//)31 b(p)s(oin)m(ter)g(to)g(a)g(function)f(that)h(computes)1559 4314 y(//)g(the)g(norm)f(of)g(a)h(v)m(ector)491 4427 y Fq(int)f(*no)m(rm)p 865 4427 V 34 w(deriv;)458 b FA(//)31 b(p)s(oin)m(ter)g(to)g(a)g(function)f(that)h(computes)1559 4540 y(//)g(the)g(norm)f(of)g(a)h(v)m(ector)491 4653 y Fq(double)g(eps;)642 b FA(//)31 b(termination)h(criterion)f(for)f (\014xed)g(p)s(oin)m(t)g(iteration)491 4765 y Fq(double)h(eps)p 897 4765 V 33 w(deriv;)427 b FA(//)31 b(termination)h(criterion)f(for)f (adjoin)m(t)h(\014xed)f(p)s(oin)m(t)g(iteration)491 4878 y Fq(N)p 560 4878 V 33 w(max;)788 b FA(//)31 b(maximal)h(n)m(um)m(b)s (er)d(of)h(itertions)i(for)e(state)h(computation)491 4991 y Fq(N)p 560 4991 V 33 w(max)p 751 4991 V 33 w(deriv;)573 b FA(//)31 b(maximal)h(n)m(um)m(b)s(er)d(of)h(itertions)i(for)e(adjoin) m(t)h(computation)491 5104 y Fq(adouble)f(*x)p 905 5104 V 34 w(0;)555 b FA(//)31 b(inital)h(state)g(of)e(\014xed)g(p)s(oin)m(t) g(iteration)491 5217 y Fq(adouble)g(*u;)629 b FA(//)31 b(v)-5 b(alue)31 b(of)g Fs(u)491 5330 y Fq(adouble)f(*x)p 905 5330 V 34 w(\014c;)511 b FA(//)31 b(\014nal)f(state)i(of)f(\014xed) e(p)s(oin)m(t)i(iteration)p Black Black eop end %%Page: 58 58 TeXDict begin 58 57 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.58) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(58)705 b Fu(6)91 b(AD)m(V)-10 b(ANCED)32 b(ALGORITHMIC)e (DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black 491 606 a Fq(int)f(dim)p 769 606 28 4 v 32 w(x;)696 b FA(//)31 b(dimension)f(of)h Fs(x)491 719 y Fq(int)f(dim)p 769 719 V 32 w(u;)691 b FA(//)31 b(dimension)f(of)h Fs(u)191 1075 y FA(Here)38 b Ft(sub)p 563 1075 29 4 v 33 w(tape)p 788 1075 V 34 w(num)e FA(is)i(an)f(ADOL-C)h(iden)m(ti\014er)f(for)g (the)h(subtap)s(e)e(that)i(should)f(b)s(e)g(used)f(for)i(the)191 1187 y(\014xed)31 b(p)s(oin)m(t)g(iteration.)45 b Ft(double)p 1351 1187 V 32 w(F)31 b FA(and)g Ft(adouble)p 1976 1187 V 33 w(F)f FA(are)i(p)s(oin)m(ters)f(to)h(functions,)g(that)f(compute)h (for)191 1300 y Fs(x)d FA(and)h Fs(u)f FA(a)h(single)g(iteration)i (step)d Fs(y)g FA(=)24 b Fs(F)13 b FA(\()p Fs(x;)i(u)p FA(\).)42 b(Thereb)m(y)29 b Ft(double)p 2590 1300 V 33 w(F)g FA(uses)g Ft(double)f FA(argumen)m(ts)i(and)191 1413 y Ft(adouble)p 533 1413 V 32 w(F)35 b FA(uses)g(ADOL-C)g Ft(adouble)e FA(argumen)m(ts.)54 b(The)35 b(parameters)g Ft(norm)f FA(and)g Ft(norm)p 3368 1413 V 34 w(deriv)f FA(are)191 1526 y(p)s(oin)m(ters)h(to)h(functions)e(computing)h(the)g (norm)g(of)g(a)g(v)m(ector.)53 b(The)34 b(latter)h(functions)f (together)h(with)191 1639 y Ft(eps)p FA(,)h Ft(eps)p 546 1639 V 33 w(deriv)p FA(,)f Ft(N)p 927 1639 V 34 w(max)p FA(,)h(and)e Ft(N)p 1395 1639 V 35 w(max)p 1574 1639 V 33 w(deriv)g FA(con)m(trol)i(the)g(iterations.)56 b(Th)m(us)34 b(the)h(follo)m(wing)i(lo)s(ops)191 1752 y(are)31 b(p)s(erformed:)p Black Black 498 1987 a(do)1450 b(do)619 2100 y Fs(k)29 b FA(=)c Fs(k)e FA(+)d(1)1168 b Fs(k)29 b FA(=)c Fs(k)e FA(+)d(1)619 2213 y Fs(x)25 b FA(=)g Fs(y)1328 b(\020)32 b FA(=)25 b Fs(\030)619 2326 y(y)j FA(=)d Fs(F)13 b FA(\()p Fs(x;)i(u)p FA(\))1092 b(\()p Fs(\030)2244 2293 y Fi(T)2300 2326 y Fs(;)21 b FA(\026)-51 b Fs(u)2392 2293 y Fi(T)2447 2326 y FA(\))26 b(=)f Fs(\020)2651 2293 y Fi(T)2705 2326 y Fs(F)2776 2293 y Fm(0)2800 2326 y FA(\()p Fs(x)2887 2340 y Fm(\003)2926 2326 y Fs(;)15 b(u)p FA(\))21 b(+)f(\()6 b(\026)-51 b Fs(x)3252 2293 y Fi(T)3308 2326 y Fs(;)15 b FA(0)3393 2293 y Fi(T)3448 2326 y FA(\))498 2438 y(while)30 b Fo(k)p Fs(y)24 b Fo(\000)c Fs(x)p Fo(k)25 b(\025)g Fs(")31 b FA(and)f Fs(k)e Fo(\024)d Fs(N)1652 2452 y Fi(max)2044 2438 y FA(while)30 b Fo(k)p Fs(\030)25 b Fo(\000)20 b Fs(\020)7 b Fo(k)2574 2453 y Fi(der)r(iv)2767 2438 y Fo(\025)25 b Fs(")2905 2453 y Fi(der)r(iv)2044 2551 y FA(and)30 b Fs(k)e Fo(\024)d Fs(N)2465 2566 y Fi(max;der)r(iv)191 2786 y FA(The)35 b(v)m(ector)i(for)e(the)g(initial) i(iterate)g(and)d(the)i(con)m(trol)h(is)e(stored)g(in)g Ft(x)p 2720 2786 V 34 w(0)g FA(and)g Ft(u)g FA(resp)s(ectiv)m(ely)-8 b(.)57 b(The)191 2899 y(v)m(ector)37 b(in)e(whic)m(h)g(the)g(\014xed)g (p)s(oin)m(t)g(is)h(stored)f(is)g Ft(x)p 1998 2899 V 35 w(fix)p FA(.)54 b(Finally)36 b Ft(dim)p 2714 2899 V 34 w(x)f FA(and)g Ft(dim)p 3157 2899 V 33 w(u)g FA(represen)m(t)h (the)191 3012 y(dimensions)30 b Fs(n)f FA(and)h Fs(m)g FA(of)h(the)f(corresp)s(onding)g(v)m(ectors.)332 3175 y(The)25 b(presen)m(ted)g(driv)m(er)f(is)i(protot)m(yp)s(ed)f(in)f(the) i(header)f(\014le)g Ft()p FA(.)34 b(This)24 b(header)191 3288 y(is)40 b(included)f(b)m(y)h(the)g(global)h(header)e (\014le)h Ft()c FA(automatically)-8 b(.)73 b(An)39 b(example)h(co)s(de)191 3401 y(that)27 b(sho)m(ws)f(also)h(the) f(exp)s(ected)h(signature)f(of)h(the)f(function)g(p)s(oin)m(ters)g(is)g (con)m(tained)i(in)e(the)g(directory)191 3514 y Ft (examples/additional_exam)o(ples)o(/fi)o(xpoi)o(nt_e)o(xam)o FA(.)191 3669 y SDict begin H.S end 191 3669 a 191 3669 a SDict begin 13.6 H.A end 191 3669 a 191 3669 a SDict begin [/View [/XYZ H.V]/Dest (subsection.6.5) cvn /DEST pdfmark end 191 3669 a 146 x FB(6.5)112 b(Adv)-6 b(anced)38 b(algorithmic)h(di\013eren)m(tiation)f(of)g(Op)s(enMP)g(parallel)h (programs)191 4038 y FA(ADOL-C)c(allo)m(ws)h(to)g(compute)f(deriv)-5 b(ativ)m(es)37 b(in)d(parallel)i(for)f(functions)g(con)m(taining)h(Op)s (enMP)e(par-)191 4151 y(allel)44 b(lo)s(ops.)79 b(This)42 b(implies)h(that)h(an)f(explicit)h(lo)s(op-handling)f(approac)m(h)g(is) g(applied.)78 b(A)43 b(t)m(ypical)191 4264 y(situation)f(is)g(sho)m(wn) f(in)1088 4282 y SDict begin H.S end 1088 4282 a Black -18 x FA(Figure)31 b(5)p Black 1420 4202 a SDict begin H.R end 1420 4202 a 1420 4264 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.5) cvn H.B /ANN pdfmark end 1420 4264 a FA(,)44 b(where)d(the)h(Op)s(enMP-parallel)g(lo)s(op)f(is)h (preceded)f(b)m(y)g(a)h(serial)191 4377 y(startup)30 b(calculation)i(and)e(follo)m(w)m(ed)i(b)m(y)f(a)f(serial)h (\014nalization)h(phase.)332 4540 y(Initialization)39 b(of)d(the)h(Op)s(enMP-parallel)g(regions)f(for)g(ADOL-C)h(is)f(only)h (a)f(matter)i(of)e(adding)191 4653 y(a)f(macro)g(to)h(the)f(outermost)g (Op)s(enMP)f(statemen)m(t.)55 b(Tw)m(o)35 b(macros)h(are)f(a)m(v)-5 b(ailable)37 b(that)e(only)g(di\013er)191 4765 y(in)d(the)g(w)m(a)m(y)h (the)g(global)g(tap)s(e)g(information)f(is)h(handled.)45 b(Using)32 b Ft(ADOLC)p 2753 4765 29 4 v 33 w(OPENMP)p FA(,)f(this)h(information,)191 4878 y(including)27 b(the)h(v)-5 b(alues)28 b(of)g(the)f(augmen)m(ted)i(v)-5 b(ariables,)29 b(is)e(alw)m(a)m(ys)i(transferred)e(from)g(the)h(serial)g(to)h(the)191 4991 y(parallel)f(region)f(using)f Fr(\014rstprivate)i FA(directiv)m(es)g(for)e(initialization.)42 b(F)-8 b(or)27 b(the)g(sp)s(ecial)g(case)h(of)e(iterativ)m(e)191 5104 y(co)s(des)38 b(where)g(parallel)h(regions,)i(w)m(orking)e(on)f(the)g (same)h(data)g(structures,)g(are)g(called)g(rep)s(eatedly)191 5217 y(the)28 b Ft(ADOLC)p 591 5217 V 33 w(OPENMP)p 912 5217 V 33 w(NC)f FA(macro)i(can)f(b)s(e)f(used.)40 b(Then,)27 b(the)h(information)h(transfer)e(is)h(p)s(erformed)f(only)191 5330 y(once)40 b(within)f(the)g(iterativ)m(e)j(pro)s(cess)d(up)s(on)f (encoun)m(ter)h(of)h(the)f(\014rst)g(parallel)h(region)g(through)f(use) p Black Black eop end %%Page: 59 59 TeXDict begin 59 58 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.59) cvn /DEST pdfmark end 183 199 a Black 3700 307 a FA(59)p Black Black Black Black 1174 1577 a @beginspecial 0 @llx 0 @lly 524 @urx 303 @ury 1133 @rhi @setspecial %%BeginDocument: multiplexed.eps %!PS-Adobe-2.0 EPSF-2.0 %%Title: multiplexed1.fig %%Creator: fig2dev Version 3.2 Patchlevel 5 %%CreationDate: Thu Dec 18 13:46:12 2008 %%For: awalther@localhost.localdomain (Andrea Walther) %%BoundingBox: 0 0 524 303 %Magnification: 1.0000 %%EndComments /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save newpath 0 303 moveto 0 0 lineto 524 0 lineto 524 303 lineto closepath clip newpath -71.3 320.2 translate 1 -1 scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 10 setmiterlimit 0 slj 0 slc 0.06000 0.06000 sc % % Fig objects follow % % % here starts figure with depth 50 % Polyline 0 slj 0 slc 7.500 slw n 5550 2625 m 5550 3525 l gs col0 s gr % Polyline 15.000 slw gs clippath 5216 427 m 5490 427 l 5490 322 l 5216 322 l 5216 322 l 5441 375 l 5216 427 l cp eoclip n 1275 375 m 5475 375 l gs col0 s gr gr % arrowhead n 5216 427 m 5441 375 l 5216 322 l 5261 375 l 5216 427 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9566 427 m 9840 427 l 9840 322 l 9566 322 l 9566 322 l 9791 375 l 9566 427 l cp eoclip n 5625 375 m 9825 375 l gs col0 s gr gr % arrowhead n 9566 427 m 9791 375 l 9566 322 l 9611 375 l 9566 427 l cp gs 0.00 setgray ef gr col0 s % Polyline 7.500 slw n 1200 2625 m 1500 2625 l 1500 3525 l 1200 3525 l cp gs 0.15 setgray ef gr gs col0 s gr % Polyline n 9600 2625 m 9600 3525 l 9900 3525 l 9900 2625 l cp gs 0.15 setgray ef gr gs col0 s gr % Polyline n 2100 4425 m 4725 4425 l 4725 5325 l 2100 5325 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 2100 2625 m 4725 2625 l 4725 3525 l 2100 3525 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 2100 825 m 4725 825 l 4725 1725 l 2100 1725 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 825 m 9000 825 l 9000 1725 l 6375 1725 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 2625 m 9000 2625 l 9000 3525 l 6375 3525 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 6375 4425 m 9000 4425 l 9000 5325 l 6375 5325 l cp gs 0.75 setgray ef gr gs col0 s gr % Polyline n 5325 2625 m 5550 2625 l 5550 3525 l 5325 3525 l cp gs 0.90 setgray ef gr gs col0 s gr % Polyline n 5550 2625 m 5775 2625 l 5775 3525 l 5550 3525 l cp gs 0.90 setgray ef gr gs col0 s gr % Polyline 15.000 slw gs clippath 2067 1538 m 2154 1277 l 2054 1244 l 1968 1504 l 1968 1504 l 2089 1308 l 2067 1538 l cp eoclip n 1500 3075 m 2100 1275 l gs col0 s gr gr % arrowhead n 2067 1538 m 2089 1308 l 1968 1504 l 2032 1478 l 2067 1538 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1841 3127 m 2115 3127 l 2115 3022 l 1841 3022 l 1841 3022 l 2066 3075 l 1841 3127 l cp eoclip n 1500 3075 m 2100 3075 l gs col0 s gr gr % arrowhead n 1841 3127 m 2066 3075 l 1841 3022 l 1886 3075 l 1841 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 1968 4645 m 2054 4905 l 2154 4872 l 2067 4611 l 2067 4611 l 2089 4842 l 1968 4645 l cp eoclip n 1500 3075 m 2100 4875 l gs col0 s gr gr % arrowhead n 1968 4645 m 2089 4842 l 2067 4611 l 2032 4671 l 1968 4645 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6342 1538 m 6429 1277 l 6329 1244 l 6243 1504 l 6243 1504 l 6364 1308 l 6342 1538 l cp eoclip n 5775 3075 m 6375 1275 l gs col0 s gr gr % arrowhead n 6342 1538 m 6364 1308 l 6243 1504 l 6307 1478 l 6342 1538 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6116 3127 m 6390 3127 l 6390 3022 l 6116 3022 l 6116 3022 l 6341 3075 l 6116 3127 l cp eoclip n 5775 3075 m 6375 3075 l gs col0 s gr gr % arrowhead n 6116 3127 m 6341 3075 l 6116 3022 l 6161 3075 l 6116 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 6243 4645 m 6329 4905 l 6429 4872 l 6342 4611 l 6342 4611 l 6364 4842 l 6243 4645 l cp eoclip n 5775 3075 m 6375 4875 l gs col0 s gr gr % arrowhead n 6243 4645 m 6364 4842 l 6342 4611 l 6307 4671 l 6243 4645 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9468 2845 m 9554 3105 l 9654 3072 l 9567 2811 l 9567 2811 l 9589 3042 l 9468 2845 l cp eoclip n 9000 1275 m 9600 3075 l gs col0 s gr gr % arrowhead n 9468 2845 m 9589 3042 l 9567 2811 l 9532 2871 l 9468 2845 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9341 3127 m 9615 3127 l 9615 3022 l 9341 3022 l 9341 3022 l 9566 3075 l 9341 3127 l cp eoclip n 9000 3075 m 9600 3075 l gs col0 s gr gr % arrowhead n 9341 3127 m 9566 3075 l 9341 3022 l 9386 3075 l 9341 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 9567 3338 m 9654 3077 l 9554 3044 l 9468 3304 l 9468 3304 l 9589 3108 l 9567 3338 l cp eoclip n 9000 4875 m 9600 3075 l gs col0 s gr gr % arrowhead n 9567 3338 m 9589 3108 l 9468 3304 l 9532 3278 l 9567 3338 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5193 2845 m 5279 3105 l 5379 3072 l 5292 2811 l 5292 2811 l 5314 3042 l 5193 2845 l cp eoclip n 5325 3075 m 4725 1275 l gs col0 s gr gr % arrowhead n 5193 2845 m 5314 3042 l 5292 2811 l 5257 2871 l 5193 2845 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5066 3127 m 5340 3127 l 5340 3022 l 5066 3022 l 5066 3022 l 5291 3075 l 5066 3127 l cp eoclip n 5325 3075 m 4725 3075 l gs col0 s gr gr % arrowhead n 5066 3127 m 5291 3075 l 5066 3022 l 5111 3075 l 5066 3127 l cp gs 0.00 setgray ef gr col0 s % Polyline gs clippath 5292 3338 m 5379 3077 l 5279 3044 l 5193 3304 l 5193 3304 l 5314 3108 l 5292 3338 l cp eoclip n 5325 3075 m 4725 4875 l gs col0 s gr gr % arrowhead n 5292 3338 m 5314 3108 l 5193 3304 l 5257 3278 l 5292 3338 l cp gs 0.00 setgray ef gr col0 s % here ends figure; $F2psEnd rs showpage %%Trailer %EOF %%EndDocument @endspecial 1592 1291 a(.)1592 1325 y(.)1592 1358 y(.)2389 1291 y(.)2389 1325 y(.)2389 1358 y(.)1592 959 y(.)1592 993 y(.)1592 1026 y(.)2389 959 y(.)2389 993 y(.)2389 1026 y(.)1302 594 y(function)30 b(ev)-5 b(al.)196 b(deriv)-5 b(ativ)m(e)32 b(calcul.)p Black 353 1790 a(Figure)f(5:)751 1790 y SDict begin H.S end 751 1790 a 751 1790 a SDict begin H.R end 751 1790 a 751 1790 a SDict begin [/View [/XYZ H.V]/Dest (figure.5) cvn /DEST pdfmark end 751 1790 a FA(Basic)h(la)m(y)m(out)g(of)e(mixed)g(function)h(and)e(the)i (corresp)s(onding)e(deriv)-5 b(ation)31 b(pro)s(cess)p Black Black 191 2053 a(of)h(the)f Fr(thr)-5 b(e)g(adprivate)35 b FA(feature)d(of)g(Op)s(enMP)e(that)i(mak)m(es)g(use)f(of)h(thread-lo) s(cal)h(storage,)g(i.e.,)g(global)191 2166 y(memory)40 b(lo)s(cal)i(to)g(a)e(thread.)72 b(Due)40 b(to)i(the)e(inserted)h (macro,)j(the)c(Op)s(enMP)g(statemen)m(t)i(has)f(the)191 2279 y(follo)m(wing)32 b(structure:)p Black Black 457 2502 a Fq(#p)m(ragma)f(omp)g(...)41 b(ADOLC)p 1461 2502 28 4 v 32 w(OPENMP)395 b FA(or)457 2615 y Fq(#p)m(ragma)31 b(omp)g(...)41 b(ADOLC)p 1461 2615 V 32 w(OPENMP)p 1874 2615 V 33 w(NC)191 2838 y FA(Inside)35 b(the)h(parallel)g(region,)i (separate)f(tap)s(es)e(ma)m(y)h(then)g(b)s(e)f(created.)57 b(Eac)m(h)36 b(single)g(thread)g(w)m(orks)191 2950 y(in)30 b(its)g(o)m(wn)h(dedicated)f(AD-en)m(vironmen)m(t,)i(and)e(all)h (serial)g(facilities)h(of)f(ADOL-C)f(are)g(applicable)h(as)191 3063 y(usual.)61 b(The)36 b(global)j(deriv)-5 b(ativ)m(es)38 b(can)g(b)s(e)e(computed)i(using)e(the)i(tap)s(es)f(created)h(in)f(the) g(serial)h(and)191 3176 y(parallel)c(parts)f(of)g(the)g(function)g(ev) -5 b(aluation,)35 b(where)e(user)f(in)m(teraction)j(is)e(required)g (for)f(the)i(correct)191 3289 y(deriv)-5 b(ativ)m(e)32 b(concatenation)h(of)d(the)h(v)-5 b(arious)30 b(tap)s(es.)332 3452 y(F)-8 b(or)28 b(the)g(usage)f(of)h(the)f(parallel)i(facilities,)h (the)e Ft(configure)p FA(-command)c(has)j(to)h(b)s(e)f(used)g(with)g (the)191 3565 y(option)k Ft(--with-openmp-flag=FLAG)o FA(,)25 b(where)30 b Ft(FLAG)f FA(stands)h(for)g(the)g(system)h(dep)s (enden)m(t)e(Op)s(enMP)191 3678 y(\015ag.)39 b(The)24 b(parallel)i(di\013eren)m(tiation)h(of)d(a)i(parallel)f(program)g(is)g (illustrated)g(b)m(y)g(the)g(example)g(program)191 3791 y Ft(openmp_exam.cpp)h FA(con)m(tained)32 b(in)e Ft (examples/additional_exam)o(ple)o(s/op)o(enmp)o(_ex)o(am)p FA(.)191 3945 y SDict begin H.S end 191 3945 a 191 3945 a SDict begin 13.6 H.A end 191 3945 a 191 3945 a SDict begin [/View [/XYZ H.V]/Dest (section.7) cvn /DEST pdfmark end 191 3945 a 179 x FE(7)135 b(T)-11 b(raceless)45 b(forw)l(ard)h(di\013eren)l(tiation)h(in)e(ADOL-C)191 4377 y FA(Up)35 b(to)i(v)m(ersion)f(1.9.0,)j(the)d(dev)m(elopmen)m(t)h (of)f(the)g(ADOL-C)g(soft)m(w)m(are)h(pac)m(k)-5 b(age)38 b(w)m(as)e(based)g(on)g(the)191 4490 y(decision)42 b(to)h(store)f(all)h (data)g(necessary)f(for)g(deriv)-5 b(ativ)m(e)43 b(computation)g(on)f (traces)g(\(tap)s(es\),)k(where)191 4603 y(large)32 b(applications)h (require)e(the)g(traces)i(to)f(b)s(e)e(written)i(out)f(to)h(corresp)s (onding)e(\014les.)44 b(In)30 b(almost)j(all)191 4716 y(cases)27 b(this)f(means)g(a)h(considerable)g(dra)m(wbac)m(k)f(in)g (terms)h(of)f(run)f(time)i(due)e(to)i(the)g(excessiv)m(e)h(memory)191 4829 y(accesses.)41 b(Using)26 b(these)h(traces)g(enables)g(ADOL-C)f (to)h(o\013er)g(m)m(ultiple)g(functions.)39 b(Ho)m(w)m(ev)m(er,)29 b(it)e(is)f(not)191 4941 y(necessary)31 b(for)f(all)h(tasks)g(of)f (deriv)-5 b(ativ)m(e)32 b(computation)g(to)f(do)f(that.)332 5104 y(Starting)j(with)g(v)m(ersion)g(1.10.0,)i(ADOL-C)e(no)m(w)g (features)g(a)g(traceless)h(forw)m(ard)e(mo)s(de)g(for)h(com-)191 5217 y(puting)39 b(\014rst)h(order)f(deriv)-5 b(ativ)m(es)41 b(in)f(scalar)h(mo)s(de,)h(i.e.,)60 b(_)-41 b Fs(y)44 b FA(=)d Fs(F)2517 5184 y Fm(0)2540 5217 y FA(\()p Fs(x)p FA(\))17 b(_)-42 b Fs(x)q FA(,)43 b(and)c(in)h(v)m(ector)h(mo)s(de,)h (i.e.,)215 5307 y(_)191 5330 y Fs(Y)49 b FA(=)29 b Fs(F)464 5297 y Fm(0)488 5330 y FA(\()p Fs(x)p FA(\))647 5307 y(_)610 5330 y Fs(X)8 b FA(.)48 b(This)32 b(traceless)j(v)-5 b(arian)m(t)33 b(co)s(exists)h(with)f(the)g(more)g(univ)m(ersal)g (trace)h(based)f(mo)s(de)f(in)p Black Black eop end %%Page: 60 60 TeXDict begin 60 59 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.60) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(60)896 b Fu(7)92 b(TRA)m(CELESS)28 b(F)m(OR)-10 b(W)g(ARD)32 b(DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black 191 606 a FA(the)i(pac)m(k)-5 b(age.)50 b(The)32 b(follo)m(wing)i(subsections)e(describ)s(e)h(the)f(source)h(co)s(de)g (mo)s(di\014cations)g(required)f(to)191 719 y(use)e(the)h(traceless)g (forw)m(ard)f(mo)s(de)g(of)h(ADOL-C.)191 845 y SDict begin H.S end 191 845 a 191 845 a SDict begin 13.6 H.A end 191 845 a 191 845 a SDict begin [/View [/XYZ H.V]/Dest (subsection.7.1) cvn /DEST pdfmark end 191 845 a 166 x FB(7.1)112 b(Mo)s(difying)39 b(the)f(Source)f(Co)s(de)191 1232 y FA(Let)25 b(us)f(consider)h(the)g(co)s(ordinate)h(transformation)f (from)f(Cartesian)i(to)f(spherical)g(p)s(olar)g(co)s(ordinates)191 1345 y(giv)m(en)31 b(b)m(y)g(the)f(function)g Fs(F)39 b FA(:)25 b Fe(R)1280 1312 y FD(3)1344 1345 y Fo(!)h Fe(R)1527 1312 y FD(3)1566 1345 y FA(,)k Fs(y)e FA(=)d Fs(F)13 b FA(\()p Fs(x)p FA(\),)32 b(with)326 1589 y Fs(y)371 1603 y FD(1)436 1589 y FA(=)532 1479 y Fl(q)p 622 1479 497 4 v 622 1589 a Fs(x)674 1558 y FD(2)674 1615 y(1)734 1589 y FA(+)20 b Fs(x)877 1558 y FD(2)877 1615 y(2)937 1589 y FA(+)f Fs(x)1079 1558 y FD(2)1079 1615 y(3)1119 1589 y Fs(;)197 b(y)1386 1603 y FD(2)1450 1589 y FA(=)25 b(arctan)1814 1461 y Fl(\022)1881 1479 y(q)p 1972 1479 294 4 v 110 x Fs(x)2024 1558 y FD(2)2024 1615 y(1)2084 1589 y FA(+)20 b Fs(x)2227 1558 y FD(2)2227 1615 y(2)2266 1589 y Fs(=x)2363 1603 y FD(3)2403 1461 y Fl(\023)2485 1589 y Fs(;)197 b(y)2752 1603 y FD(3)2816 1589 y FA(=)25 b(arctan)q(\()p Fs(x)3252 1603 y FD(2)3292 1589 y Fs(=x)3389 1603 y FD(1)3429 1589 y FA(\))p Fs(;)191 1829 y FA(as)i(an)h(example.)40 b(The)27 b(corresp)s(onding)f(source)h (co)s(de)h(is)f(sho)m(wn)f(in)2523 1846 y SDict begin H.S end 2523 1846 a Black -17 x FA(Figure)31 b(6)p Black 2856 1766 a SDict begin H.R end 2856 1766 a 2856 1829 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.6) cvn H.B /ANN pdfmark end 2856 1829 a FA(.)39 b(Changes)27 b(to)h(the)g (source)p Black 191 1946 3600 4 v 191 4114 4 2169 v Black Black 382 2149 a Fq(#include)i Fs(<)p Fq(iostream)p Fs(>)382 2262 y Fq(using)g(namespace)h(std;)382 2488 y(int)f(main\(\))g Fo(f)500 2601 y Fq(double)h(x[3],)g(y[3];)500 2827 y(fo)m(r)g(\(int)f (i=0;)h(i)p Fs(<)p Fq(3;)f(++i\))708 b(//)32 b(Initialize)c Fs(x)2612 2841 y Fi(i)618 2940 y Fq(...)500 3166 y(y[0])j(=)f (sqrt\(x[0]*x[0]+x[1]*x[1]+x[2]*x[2])q(\);)500 3279 y(y[1])h(=)f (atan\(sqrt\(x[0]*x[0]+x[1]*x[1]\)/x[2]\);)500 3391 y(y[2])h(=)f (atan\(x[1]/x[0]\);)500 3617 y(cout)h Fs(<<)f Fq("y1=")h Fs(<<)f Fq(y[0])h Fs(<<)f Fq(")h(,)f(y2=")h Fs(<<)f Fq(y[1])h Fs(<<)f Fq(")g(,)h(y3=")g Fs(<<)e Fq(y[2])j Fs(<<)d Fq(endl;)500 3843 y(return)i(0;)382 3956 y Fo(g)p 3787 4114 V 191 4117 3600 4 v Black 1077 4272 a FA(Figure)g(6:)1475 4272 y SDict begin H.S end 1475 4272 a 1475 4272 a SDict begin H.R end 1475 4272 a 1475 4272 a SDict begin [/View [/XYZ H.V]/Dest (figure.6) cvn /DEST pdfmark end 1475 4272 a FA(Example)f(for)g(traceless)i(forw)m(ard)e(mo)s(de)p Black Black 191 4481 a(co)s(de)h(that)h(are)f(necessary)h(for)f (applying)g(the)g(traceless)i(forw)m(ard)d(mo)s(de)h(of)g(ADOL-C)g(are) h(describ)s(ed)191 4594 y(in)i(the)h(follo)m(wing)h(t)m(w)m(o)g (subsections,)g(where)e(the)h(v)m(ector)i(mo)s(de)d(v)m(ersion)h(is)g (describ)s(ed)e(as)i(extension)191 4707 y(of)30 b(the)h(scalar)g(mo)s (de.)191 4996 y SDict begin H.S end 191 4996 a 191 4996 a SDict begin 13.6 H.A end 191 4996 a 191 4996 a SDict begin [/View [/XYZ H.V]/Dest (section*.10) cvn /DEST pdfmark end 191 4996 a Fx(The)k(scalar)g(mo)s(de)191 5217 y FA(T)-8 b(o)33 b(use)f(the)h(traceless)h(forw)m(ard)e(mo)s(de,)h(one) g(has)f(to)h(include)f(only)h(the)g(header)f(\014le)h Ft(adtl.h)d FA(since)j(it)191 5330 y(do)s(es)d(not)h(include)f(the)g (trace)i(based)e(functions)g(de\014ned)f(in)h(other)h(header)f (\014les.)p Black Black eop end %%Page: 61 61 TeXDict begin 61 60 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.61) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(7.1)92 b(Mo)s(difying)30 b(the)h(Source)f(Co)s(de)2213 b FA(61)p Black 332 606 a(As)42 b(in)f(the)h(trace)h(based)e(forw)m (ard)g(v)m(ersion)h(of)g(ADOL-C)g(all)h(deriv)-5 b(ativ)m(e)43 b(calculations)h(are)e(in-)191 719 y(tro)s(duced)d(b)m(y)h(calls)h(to)f (o)m(v)m(erloaded)i(op)s(erators.)69 b(Therefore,)42 b(similar)f(to)f(the)g(trace-based)h(v)m(ersion)191 832 y(all)d(indep)s(enden)m(t,)g(in)m(termediate)i(and)c(dep)s(enden)m(t)h (v)-5 b(ariables)38 b(m)m(ust)f(b)s(e)g(declared)h(with)f(t)m(yp)s(e)g Fq(adou-)191 945 y(ble)p FA(.)54 b(The)34 b(whole)h(traceless)h (functionalit)m(y)g(pro)m(vided)e(b)m(y)h Ft(adtl.h)e FA(w)m(as)i(written)g(as)f(complete)j(inline)191 1058 y(in)m(tended)f(co)s(de)g(due)g(to)h(run)e(time)i(asp)s(ects,)h(where)e (the)g(real)h(p)s(ortion)f(of)g(inlined)g(co)s(de)h(can)f(b)s(e)g(in-) 191 1171 y(\015uenced)h(b)m(y)i(switc)m(hes)g(for)f(man)m(y)g (compilers.)65 b(Lik)m(ely)-8 b(,)42 b(the)d(whole)f(deriv)-5 b(ativ)m(e)40 b(co)s(de)f(is)f(inlined)g(b)m(y)191 1284 y(default.)j(Our)29 b(exp)s(erimen)m(ts)h(with)f(the)i(traceless)g(mo)s (de)f(ha)m(v)m(e)h(pro)s(duced)d(complete)k(inlined)e(co)s(de)g(b)m(y) 191 1396 y(using)g(standard)f(switc)m(hes)i(\(optimization\))i(for)e (GNU)g(and)e(In)m(tel)i(C++)f(compiler.)332 1559 y(T)-8 b(o)41 b(a)m(v)m(oid)i(name)e(con\015icts)g(resulting)g(from)f(the)h (inlining)g(the)g(traceless)i(v)m(ersion)e(has)f(its)i(o)m(wn)191 1672 y(namespace)36 b Ft(adtl)p FA(.)56 b(As)36 b(a)g(result)g(four)f (p)s(ossibilities)h(of)g(using)g(the)g Fq(adouble)g FA(t)m(yp)s(e)g (are)g(a)m(v)-5 b(ailable)38 b(for)191 1785 y(the)31 b(traceless)g(v)m(ersion:)p Black 327 2020 a Fo(\017)p Black 46 w FA(De\014ning)g(a)f(new)g(t)m(yp)s(e)p Black Black 1533 2234 a Fq(t)m(yp)s(edef)g(adtl::adouble)h(adouble;)1533 2347 y FA(...)1533 2460 y Fq(adouble)f(tmp;)418 2679 y FA(This)k(is)h(the)f(preferred)f(w)m(a)m(y)-8 b(.)55 b(Remem)m(b)s(er,)36 b(y)m(ou)e(can)h(not)g(write)g(an)f(o)m(wn)h Fq(adouble)f FA(t)m(yp)s(e/class)418 2792 y(with)c(di\013eren)m(t)h (meaning)g(after)g(doing)f(the)h(t)m(yp)s(edef.)p Black 327 2979 a Fo(\017)p Black 46 w FA(Declaring)h(with)e(namespace)h (pre\014x)p Black Black 1757 3201 a Fq(adtl::adouble)f(tmp;)418 3423 y FA(Not)22 b(the)f(most)f(handsome)g(and)g(e\016cien)m(t)j(w)m(a) m(y)e(with)f(resp)s(ect)h(to)g(co)s(ding)g(but)f(without)h(an)m(y)f (doubt)418 3535 y(one)31 b(of)f(the)h(safest)g(w)m(a)m(ys.)42 b(The)29 b(iden)m(ti\014er)i Fq(adouble)f FA(is)h(still)g(a)m(v)-5 b(ailable)33 b(for)d(user)g(t)m(yp)s(es/classes.)p Black 327 3722 a Fo(\017)p Black 46 w FA(T)-8 b(rusting)30 b(macros)p Black Black 1535 3936 a Fq(#de\014ne)g(adouble)h (adtl::adouble)1535 4049 y FA(...)1535 4162 y Fq(adouble)f(tmp;)418 4376 y FA(This)25 b(approac)m(h)i(should)e(b)s(e)g(used)g(with)h(care,) i(since)e(standard)g(de\014nes)f(are)h(text)h(replacemen)m(ts.)p Black 327 4563 a Fo(\017)p Black 46 w FA(Using)k(the)f(complete)i (namespace)p Black Black 1686 4777 a Fq(using)e(namespace)h(adtl;)1686 4890 y FA(...)1686 5003 y Fq(adouble)g(tmp;)418 5217 y FA(A)42 b(v)m(ery)f(clear)h(approac)m(h)g(with)f(the)g(disadv)-5 b(an)m(tage)43 b(of)e(unco)m(v)m(ering)h(all)g(the)g(hidden)e(secrets.) 418 5330 y(Name)31 b(con\015icts)g(ma)m(y)g(arise!)p Black Black eop end %%Page: 62 62 TeXDict begin 62 61 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.62) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(62)896 b Fu(7)92 b(TRA)m(CELESS)28 b(F)m(OR)-10 b(W)g(ARD)32 b(DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black 191 606 a FA(After)41 b(de\014ning)e(the)i(v)-5 b(ariables)41 b(only)f(t)m(w)m(o)i(things)f(are)f(left)i(to)f(do.)71 b(First)40 b(one)h(needs)f(to)h(initialize)191 719 y(the)36 b(v)-5 b(alues)36 b(of)g(the)g(indep)s(enden)m(t)e(v)-5 b(ariables)36 b(for)g(the)g(function)f(ev)-5 b(aluation.)58 b(This)35 b(can)h(b)s(e)f(done)h(b)m(y)191 832 y(assigning)27 b(the)g(v)-5 b(ariables)27 b(a)g Fq(double)g FA(v)-5 b(alue.)40 b(The)26 b Fq(ad)p FA(-v)-5 b(alue)27 b(is)g(set)g(to)g (zero)h(in)e(this)h(case.)40 b(Additionally)-8 b(,)191 945 y(the)29 b(traceless)g(forw)m(ard)f(mo)s(de)g(v)-5 b(arian)m(t)30 b(of)e(ADOL-C)h(o\013ers)f(a)h(function)f(named)g Fq(setV)m(alue)g FA(for)h(setting)191 1058 y(the)h(v)-5 b(alue)31 b(without)f(c)m(hanging)g(the)h Fq(ad)p FA(-v)-5 b(alue.)41 b(T)-8 b(o)30 b(set)h(the)f Fq(ad)p FA(-v)-5 b(alues)30 b(of)g(the)g(indep)s(enden)m(t)f(v)-5 b(ariables)191 1171 y(ADOL-C)30 b(o\013ers)h(t)m(w)m(o)h(p)s(ossibilities:)p Black 327 1438 a Fo(\017)p Black 46 w FA(Using)f(the)f(constructor)p Black Black 1230 1706 a Fq(double)h(seedOne)g(=)f(1.,)i(seedZero)f(=)f (0.;)1230 1818 y(adouble)h(x1\(2,&seedOne\),)i(x2\(4,&seedZero\),)g(y;) 418 2086 y FA(This)23 b(w)m(ould)g(create)h(three)g(adoubles)f Fs(x)1782 2100 y FD(1)1821 2086 y FA(,)i Fs(x)1923 2100 y FD(2)1985 2086 y FA(and)e Fs(y)s FA(.)38 b(Ob)m(viously)-8 b(,)25 b(the)f(latter)g(remains)f(uninitial-)418 2199 y(ized.)41 b(In)28 b(terms)h(of)h(function)f(ev)-5 b(aluation)30 b Fs(x)1949 2213 y FD(1)2018 2199 y FA(holds)e(the)h(v)-5 b(alue)30 b(2)g(and)e Fs(x)2945 2213 y FD(2)3014 2199 y FA(the)h(v)-5 b(alue)29 b(4)h(whereas)418 2312 y(the)h(deriv)-5 b(ativ)m(e)32 b(v)-5 b(alues)30 b(are)h(initialized)h(to)47 b(_)-41 b Fs(x)1996 2326 y FD(1)2061 2312 y FA(=)25 b(1)31 b(and)45 b(_)-40 b Fs(x)2462 2326 y FD(2)2526 2312 y FA(=)25 b(0.)p Black 327 2540 a Fo(\017)p Black 46 w FA(Setting)31 b(p)s(oin)m(t)g(v)-5 b(alues)30 b(directly)p Black Black 1397 2807 a Fq(double)g(seedOne)i(=)e(1.,)h(seedZero)g(=)f (0.;)1397 2920 y(adouble)g(x1=2,)h(x2=4,)g(y;)1397 3033 y FA(...)1397 3146 y Fq(x1.setAD)m(V)m(alue\(&seedOne\);)1397 3259 y(x2.setAD)m(V)m(alue\(&seedZero\);)418 3526 y FA(The)41 b(same)h(example)g(as)f(ab)s(o)m(v)m(e)i(but)d(no)m(w)i(using)e Fq(setAD)m(V)m(alue)p FA(-metho)s(d)h(for)g(initializing)j(the)418 3639 y(deriv)-5 b(ativ)m(e)28 b(v)-5 b(alues.)40 b(It)27 b(is)f(imp)s(ortan)m(t)h(to)g(note)g(that)g(in)f(b)s(oth)g(cases)h(the) g(deriv)-5 b(ativ)m(e)28 b(v)-5 b(alues)26 b(ha)m(v)m(e)418 3752 y(to)32 b(b)s(e)f(set)h(b)m(y)f(passing)g(an)h(address)e(of)i(a)f (v)-5 b(ariable)32 b(or)g(a)f(p)s(oin)m(ter)h(of)f(the)h Fq(double)g FA(t)m(yp)s(e)f(\(instead)418 3865 y(of)e(passing)f(the)g (v)-5 b(alue)29 b(directly\).)41 b(The)28 b(reason)h(for)f(doing)g (this)g(will)h(b)s(ecome)g(clear)g(in)f(the)h(next)418 3978 y(subsection.)191 4246 y(The)35 b(deriv)-5 b(ativ)m(es)36 b(can)g(b)s(e)e(obtained)i(at)g(an)m(y)f(time)h(during)e(the)h(ev)-5 b(aluation)37 b(pro)s(cess)e(b)m(y)g(calling)i(the)191 4359 y Fq(getAD)m(V)m(alue)p FA(-metho)s(d)e(whic)m(h)g(returns)f(a)h (p)s(oin)m(ter)g(\(instead)h(of)f(a)h(v)-5 b(alue\),)37 b(and)d(therefore,)j(it)f(can)f(b)s(e)191 4472 y(assigned)24 b(to)h(another)f(p)s(oin)m(ter)g(or)g(it)h(can)f(b)s(e)g(dereferenced)f (immediately)j(in)e(order)f(to)i(read)f(the)g(v)-5 b(alue:)p Black Black 1445 4731 a Fq(adouble)30 b(y;)1445 4844 y FA(...)1445 4957 y Fq(cout)g Fs(<<)g Fq(*\(y)-8 b(.getAD)m(V)m (alue\(\)\);)191 5235 y SDict begin H.S end 191 5235 a Black -18 x FA(Figure)31 b(7)p Black 523 5155 a SDict begin H.R end 523 5155 a 523 5217 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.7) cvn H.B /ANN pdfmark end 523 5217 a 27 w FA(sho)m(ws)26 b(the)g(resulting)h(source)g(co)s(de)f(incorp)s (orating)h(all)g(required)f(c)m(hanges)h(for)f(the)h(example)191 5330 y(giv)m(en)k(ab)s(o)m(v)m(e.)p Black Black eop end %%Page: 63 63 TeXDict begin 63 62 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.63) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(7.1)92 b(Mo)s(difying)30 b(the)h(Source)f(Co)s(de)2213 b FA(63)p Black Black 191 518 3600 4 v 191 3251 4 2734 v Black Black 322 722 a Fq(#include)30 b Fs(<)p Fq(iostream)p Fs(>)322 835 y Fq(using)g(namespace)h(std;)322 1060 y(#include)f Fs(<)p Fq(adolc/adtl.h)p Fs(>)322 1173 y Fq(t)m(yp)s(edef)h (adtl::adouble)f(adouble;)322 1399 y(int)g(main\(\))h Fo(f)440 1512 y Fq(adouble)g(x[3],)g(y[3];)440 1738 y(fo)m(r)g(\(int)f (i=0;)h(i)p Fs(<)p Fq(3;)f(++i\))709 b(//)31 b(Initialize)e Fs(x)2553 1752 y Fi(i)558 1851 y Fq(...)440 2077 y(double)i(seed)g(=)f (1.;)440 2189 y(x[0].setAD)m(V)m(alue\(&seed\);)711 b(//)31 b(derivative)f(of)h(f)f(with)g(resp)s(ect)h(to)f Fs(x)3414 2203 y FD(1)440 2302 y Fq(y[0])h(=)f (sqrt\(x[0]*x[0]+x[1]*x[1]+x[2]*x[2])q(\);)440 2415 y(y[1])h(=)f (atan\(sqrt\(x[0]*x[0]+x[1]*x[1]\)/x[2]\);)440 2528 y(y[2])h(=)f (atan\(x[1]/x[0]\);)440 2754 y(cout)h Fs(<<)f Fq("y1=")h Fs(<<)f Fq(y[0].getV)m(alue\(\))j Fs(<<)c Fq(")i(,)g(y2=")g Fs(<<)e Fq(y[1].getV)m(alue)j(...)41 b(;)440 2867 y(cout)31 b Fs(<<)f Fq("dy2/dx1)i(=)e(")h Fs(<<)e Fq(*\(y[1].getAD)m(V)m (alue\(\)\))34 b Fs(<<)c Fq(endl;)440 2980 y(return)h(0;)322 3093 y Fo(g)p 3787 3251 V 191 3254 3600 4 v Black 948 3409 a FA(Figure)g(7:)1346 3409 y SDict begin H.S end 1346 3409 a 1346 3409 a SDict begin H.R end 1346 3409 a 1346 3409 a SDict begin [/View [/XYZ H.V]/Dest (figure.7) cvn /DEST pdfmark end 1346 3409 a FA(Example)f(for)g(traceless)i (scalar)g(forw)m(ard)d(mo)s(de)p Black Black 191 3817 a SDict begin H.S end 191 3817 a 191 3817 a SDict begin 13.6 H.A end 191 3817 a 191 3817 a SDict begin [/View [/XYZ H.V]/Dest (section*.11) cvn /DEST pdfmark end 191 3817 a Fx(The)35 b(v)m(ector)g(mo)s(de)191 4101 y FA(In)29 b(scalar)h(mo)s(de)f(only)g(one)h(direction)g(elemen)m(t)h(has)e(to)h (b)s(e)f(stored)h(p)s(er)e Fq(adouble)i FA(whereas)f(a)g(\014eld)g(of)h Fs(p)191 4214 y FA(elemen)m(ts)f(is)f(needed)g(in)g(the)g(v)m(ector)i (mo)s(de)d(to)i(co)m(v)m(er)h(the)e(computations)h(for)f(the)g(giv)m (en)h Fs(p)f FA(directions.)191 4327 y(The)i(resulting)g(c)m(hanges)i (to)f(the)f(source)h(co)s(de)f(are)h(describ)s(ed)f(in)g(this)g (section.)332 4490 y(In)21 b(order)g(to)h(use)g(the)f(v)m(ector)j(mo)s (de)d(one)h(has)f(to)h(call)h Ft(adtl::setNumDir\(N\))p FA(.)17 b(This)k(function)g(tak)m(es)191 4603 y(the)33 b(maximal)g(n)m(um)m(b)s(er)f(of)g(directions)i(to)f(b)s(e)f(used)g (within)g(the)h(resulting)g(v)m(ector)h(mo)s(de.)47 b(Changing)191 4716 y(the)d(n)m(um)m(b)s(er)e(of)i(directions)g(in)f(the)g(middle)h (of)f(executing)i(co)s(de)f(con)m(taining)h(activ)m(e)h(v)-5 b(ariables)44 b(is)191 4829 y(undesirable)20 b(and)g(can)g(lead)i(to)f (segmen)m(tation)h(violations,)j(hence)c(suc)m(h)f(an)g(op)s(eration)h (will)g(result)g(in)f(an)191 4941 y(error.)43 b Ft (adtl::setNumDir\(N\))26 b FA(m)m(ust)31 b(therefore)h(b)s(e)e(called)j (b)s(efore)e(declaring)h(an)m(y)f Ft(adtl::adouble)191 5054 y FA(ob)5 b(jects.)332 5217 y(Setting)37 b(and)f(getting)h(the)g (deriv)-5 b(ativ)m(e)37 b(v)-5 b(alues)37 b(is)f(done)g(in)g(the)g (same)h(manner)e(as)i(in)e(the)i(scalar)191 5330 y(case,)32 b(b)m(y)e(passing)g(and)g(retrieving)h(the)g(p)s(oin)m(ters,)f(as)h (illustrated)g(in)f(the)g(follo)m(wing)i(example:)p Black Black eop end %%Page: 64 64 TeXDict begin 64 63 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.64) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(64)896 b Fu(7)92 b(TRA)m(CELESS)28 b(F)m(OR)-10 b(W)g(ARD)32 b(DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black Black Black 1386 594 a Fq(adtl::setNumDir\(10\);)1386 707 y(adouble)g(x,)f(y;)1386 820 y(double)h(*ptr1)g(=)f(new)h (double[10];)1386 933 y(double)g(*ptr2;)1386 1045 y FA(...)1386 1158 y Fq(x1=2;)1386 1271 y(x1.setAD)m(V)m(alue\(ptr1\);)1386 1384 y FA(...)1386 1497 y Fq(ptr2=y)-8 b(.getAD)m(V)m(alue\(\);)191 1745 y FA(No)m(w)28 b(using)f(the)g(p)s(oin)m(ters)g(in)g(the)h(metho)s (ds)e Fq(setAD)m(V)m(alue)h FA(and)g Fq(getAD)m(V)m(alue)h FA(mak)m(es)g(more)f(sense)g(since)191 1857 y(the)42 b(v)m(ector)h(mo)s(de)e(requires)g(the)h(\014eld)f(of)g Fs(p)g FA(elemen)m(ts)i(p)s(er)e Fq(adouble)g FA(whic)m(h)g(holds)g (the)h(deriv)-5 b(ativ)m(e)191 1970 y(v)g(alues.)39 b(Additionally)-8 b(,)29 b(the)c(traceless)j(v)m(ector)f(forw)m(ard)e(mo)s(de)g(of)h (ADOL-C)f(o\013ers)h(t)m(w)m(o)h(new)e(metho)s(ds)191 2083 y(for)38 b(setting/getting)j(the)d(deriv)-5 b(ativ)m(e)40 b(v)-5 b(alues.)64 b(Setting)39 b(a)f(deriv)-5 b(ativ)m(e)40 b(v)-5 b(alue)38 b(of)g(the)h(desired)e(v)m(ector)191 2196 y(elemen)m(t)26 b(is)e(p)s(ossible)g(b)m(y)g(passing)g(a)g Fq(double)h FA(v)-5 b(alue)24 b(and)g(its)h(p)s(osition)f(in)g(the)g(v) m(ector)i(\()p Fq(integer)p FA(\).)40 b(Getting)191 2309 y(a)d(deriv)-5 b(ativ)m(e)38 b(v)-5 b(alue)37 b(of)f(the)h(desired)f(v) m(ector)i(elemen)m(t)g(requires)e(as)h(argumen)m(t)g(only)g(its)f(p)s (osition)h(in)191 2422 y(the)29 b(v)m(ector.)42 b(One)29 b(can)g(note)h(that)g(the)f(p)s(oin)m(ters)g(are)g(not)h(used)e(in)h (these)g(cases,)i(as)e(illustrated)h(in)f(the)191 2535 y(follo)m(wing)j(example:)p Black Black 461 2782 a Fq (adtl::setNumDir\(10\);)461 2895 y FA(...)461 3008 y Fq(adouble)f(x,)f(y;)461 3121 y FA(...)461 3234 y Fq(x1=2;)461 3347 y(x1.setAD)m(V)m(alue\(5,1\);)877 b(//)31 b(set)f(the)h(6th)f(p)s (oint)g(value)g(of)h(x)f(to)g(1.0)461 3460 y FA(...)461 3573 y Fq(cout)h Fs(<<)f Fq(y)-8 b(.getAD)m(V)m(alue\(3\))32 b Fs(<<)e Fq(endl;)236 b(//)32 b(p)m(rint)e(the)g(4th)h(derivative)f (value)g(of)h(y)191 3820 y FA(The)f(resulting)g(source)h(co)s(de)f(con) m(taining)i(all)g(c)m(hanges)f(that)g(are)g(required)e(is)i(sho)m(wn)e (in)3324 3838 y SDict begin H.S end 3324 3838 a Black -18 x FA(Figure)h(8)p Black 3656 3758 a SDict begin H.R end 3656 3758 a 3656 3820 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.8) cvn H.B /ANN pdfmark end 3656 3820 a 191 3993 a SDict begin H.S end 191 3993 a 191 3993 a SDict begin 13.6 H.A end 191 3993 a 191 3993 a SDict begin [/View [/XYZ H.V]/Dest (subsection.7.2) cvn /DEST pdfmark end 191 3993 a 148 x FB(7.2)112 b(Compiling)39 b(and)f(Linking)h(the)e (Source)h(Co)s(de)191 4368 y FA(After)32 b(incorp)s(orating)h(the)f (required)f(c)m(hanges,)j(one)e(has)g(to)h(compile)f(the)h(source)f(co) s(de)g(and)g(link)g(the)191 4481 y(ob)5 b(ject)32 b(\014les)g(to)g(get) h(the)f(executable.)46 b(As)31 b(long)h(as)g(the)g(ADOL-C)g(header)f (\014les)g(are)h(not)g(included)f(in)191 4594 y(the)g(absolute)g(path)f (the)g(compile)i(sequence)e(should)g(b)s(e)g(similar)g(to)h(the)g (follo)m(wing)h(example:)p Black Black 723 4849 a Fq(g++)f (-I/home/username/adolc)p 1894 4849 28 4 v 36 w(base/include)g(-c)g (traceless)p 2858 4849 V 33 w(scala)m(r.cpp)191 5104 y FA(The)d Ft(-I)h FA(option)g(tells)h(the)f(compiler)g(where)g(to)g (searc)m(h)h(for)e(the)h(ADOL-C)g(header)g(\014les.)40 b(This)28 b(option)191 5217 y(can)f(b)s(e)f(omitted)h(when)f(the)h (headers)f(are)h(included)f(with)g(absolute)h(path)g(or)f(if)h(ADOL-C)f (is)h(installed)191 5330 y(in)j(a)h(\\global")h(directory)-8 b(.)p Black Black eop end %%Page: 65 65 TeXDict begin 65 64 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.65) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(7.2)92 b(Compiling)30 b(and)g(Linking)g(the)h(Source)f(Co)s(de) 1699 b FA(65)p Black Black 191 518 3600 4 v 191 3929 4 3411 v Black Black 434 722 a Fq(#include)30 b Fs(<)p Fq(iostream)p Fs(>)434 835 y Fq(using)g(namespace)h(std;)434 1060 y(#include)f Fs(<)p Fq(adolc/adtl.h)p Fs(>)434 1173 y Fq(t)m(yp)s(edef)h(adtl::adouble)f(adouble;)434 1399 y(int)g(main\(\))h Fo(f)552 1512 y Fq(adtl::setNumDir\(3\);)552 1625 y(adouble)g(x[3],)g(y[3];)552 1851 y(fo)m(r)g(\(int)g(i=0;)f(i)p Fs(<)p Fq(3;)g(++i\))g Fo(f)670 1964 y Fq(...)710 b(//)31 b(Initialize)e Fs(x)1974 1978 y Fi(i)670 2077 y Fq(fo)m(r)i(\(int)g (j=0;)g(j)p Fs(<)p Fq(3;)g(++j\))f(if)g(\(i==j\))g(x[i].setAD)m(V)m (alue\(j,1\);)552 2189 y Fo(g)552 2415 y Fq(y[0])h(=)f (sqrt\(x[0]*x[0]+x[1]*x[1]+x[2]*x[2])q(\);)552 2528 y(y[1])h(=)f (atan\(sqrt\(x[0]*x[0]+x[1]*x[1]\)/x[2]\);)552 2641 y(y[2])h(=)f (atan\(x[1]/x[0]\);)552 2867 y(cout)h Fs(<<)f Fq("y1=")h Fs(<<)f Fq(y[0].getV)m(alue\(\))j Fs(<<)c Fq(")i(,)g(y2=")g Fs(<<)e Fq(y[1].getV)m(alue)j(...)41 b(;)552 2980 y(cout)31 b Fs(<<)f Fq("jacobian)h(:)40 b(")31 b Fs(<<)f Fq(endl;)552 3093 y(fo)m(r)h(\(int)g(i=0;)f(i)p Fs(<)p Fq(3;)g(++i\))g Fo(f)670 3206 y Fq(fo)m(r)h(\(int)g(j=0;)g(j)p Fs(<)p Fq(3;)g(++j\))788 3319 y(cout)g Fs(<<)f Fq(y[i].getAD)m(V)m(alue\(j\))i Fs(<<)e Fq(")h(";)670 3431 y(cout)g Fs(<<)f Fq(endl;)552 3544 y Fo(g)552 3657 y Fq(return)h(0;)434 3770 y Fo(g)p 3787 3929 V 191 3932 3600 4 v Black 940 4086 a FA(Figure)g(8:)1338 4086 y SDict begin H.S end 1338 4086 a 1338 4086 a SDict begin H.R end 1338 4086 a 1338 4086 a SDict begin [/View [/XYZ H.V]/Dest (figure.8) cvn /DEST pdfmark end 1338 4086 a FA(Example)g(for)f(traceless)i(v)m(ector)g(forw)m(ard)e (mo)s(de)p Black Black 332 4346 a(Although)38 b(originally)h(designed)e (to)h(b)s(e)f(completely)j(inline,)f(certain)g(global)f(v)-5 b(ariables)39 b(need)e(to)191 4459 y(b)s(e)d(initialised)j(in)d(the)h (compiled)h(part)f(of)g(the)g(library)f(and)h(therefore)g(the)g(ADOL-C) g(library)g(m)m(ust)191 4571 y(b)s(e)f(link)m(ed)i(with)e(the)h (compiled)h(co)s(de.)54 b(The)35 b(example)h(started)f(ab)s(o)m(v)m(e)h (could)f(b)s(e)f(\014nished)g(with)h(the)191 4684 y(follo)m(wing)d (command:)p Black Black 256 4894 a Fq(g++)e(-o)h(traceless)p 904 4894 28 4 v 33 w(scala)m(r)f(traceless)p 1500 4894 V 33 w(scala)m(r.o)256 5007 y(-Wl,--rpath)g(-Wl,/home/username/adolc)p 1772 5007 V 36 w(base/lib)g(-L/home/username/adolc)p 3112 5007 V 37 w(base/lib)g(-ladolc)191 5217 y FA(The)38 b(men)m(tioned)g(source)h(co)s(des)f Fq(traceless)p 1700 5217 V 33 w(scala)m(r.c)g FA(and)g Fq(traceless)p 2554 5217 V 33 w(vecto)m(r.c)i FA(illustrating)f(the)g(use)f(of)191 5330 y(the)31 b(for)f(traceless)i(scalar)f(and)f(v)m(ector)i(mo)s(de)e (can)g(b)s(e)g(found)f(in)h(the)h(directory)g Fq(examples)p FA(.)p Black Black eop end %%Page: 66 66 TeXDict begin 66 65 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.66) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(66)896 b Fu(7)92 b(TRA)m(CELESS)28 b(F)m(OR)-10 b(W)g(ARD)32 b(DIFFERENTIA)-8 b(TION)30 b(IN)h(ADOL-C)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.7.3) cvn /DEST pdfmark end 191 515 a 91 x FB(7.3)112 b(Concluding)39 b(Remarks)f(for)f(the)h(T) -9 b(raceless)38 b(F)-9 b(orw)m(ard)37 b(Mo)s(de)h(V)-9 b(arian)m(t)191 827 y FA(As)29 b(man)m(y)h(other)g(AD)g(metho)s(ds)f (the)h(traceless)h(forw)m(ard)e(mo)s(de)g(pro)m(vided)g(b)m(y)g(the)h (ADOL-C)g(pac)m(k)-5 b(age)191 940 y(has)28 b(its)g(o)m(wn)g(strengths) g(and)f(dra)m(wbac)m(ks.)40 b(Please)30 b(read)d(the)i(follo)m(wing)g (section)g(carefully)g(to)f(b)s(ecome)191 1053 y(familiar)j(with)f(the) h(things)f(that)h(can)g(o)s(ccur:)p Black 327 1265 a Fo(\017)p Black 46 w FA(Adv)-5 b(an)m(tages:)p Black 520 1443 a Fx({)p Black 46 w FA(Co)s(de)30 b(sp)s(eed)618 1556 y(Increasing)23 b(computation)g(sp)s(eed)e(w)m(as)i(one)g(of)f (the)h(main)f(asp)s(ects)g(in)g(writing)h(the)f(traceless)618 1669 y(co)s(de.)40 b(In)27 b(man)m(y)g(cases)h(higher)f(p)s(erformance) g(can)h(b)s(e)e(exp)s(ected)i(this)f(w)m(a)m(y)-8 b(.)41 b(Ho)m(w)m(ev)m(er)30 b(this)618 1782 y(is)h(not)f(guaren)m(teed)i(for) e(rep)s(eated)g(ev)-5 b(aluations.)p Black 520 1918 a Fx({)p Black 46 w FA(Smaller)31 b(o)m(v)m(erall)h(memory)f(requiremen)m (ts)618 2031 y(T)-8 b(raceless)38 b(ADOL-C)f(do)s(es)f(not)h(write)f (traces)i(an)m(ymore,)h(as)d(the)h(name)g(implies.)59 b(Lo)s(op)618 2144 y("unrolling")35 b(can)f(b)s(e)f(a)m(v)m(oided)i (this)e(w)m(a)m(y)-8 b(.)52 b(Considered)33 b(main)h(memory)f(plus)g (disk)g(space)618 2256 y(as)e(o)m(v)m(erall)i(memory)d(requiremen)m(ts) h(the)f(traceless)i(v)m(ersion)f(can)g(b)s(e)f(executed)h(in)g(a)g (more)618 2369 y(e\016cien)m(t)h(w)m(a)m(y)-8 b(.)p Black 327 2547 a Fo(\017)p Black 46 w FA(Dra)m(wbac)m(ks:)p Black 520 2724 a Fx({)p Black 46 w FA(Main)31 b(memory)f(limitations) 618 2837 y(The)k(abilit)m(y)h(to)g(compute)f(deriv)-5 b(ativ)m(es)36 b(to)f(a)f(giv)m(en)h(function)f(is)g(b)s(ounded)e(b)m (y)i(the)g(main)618 2950 y(memory)d(plus)g(sw)m(ap)g(size)h(when)e (using)h(traceless)i(ADOL-C.)f(Computation)f(from)g(sw)m(ap)618 3063 y(should)h(b)s(e)h(a)m(v)m(oided)h(an)m(yw)m(a)m(y)h(as)e(far)g (as)g(p)s(ossible)f(since)i(it)f(slo)m(ws)h(do)m(wn)e(the)i(computing) 618 3176 y(time)27 b(drastically)-8 b(.)41 b(Therefore,)27 b(if)f(the)g(program)g(execution)h(is)f(terminated)g(without)g(error) 618 3289 y(message)41 b(insu\016cien)m(t)e(memory)g(size)h(can)g(b)s(e) f(the)g(reason)h(among)f(other)h(things.)67 b(The)618 3402 y(memory)30 b(requiremen)m(ts)h Fs(M)40 b FA(can)31 b(b)s(e)f(determined)g(roughly)g(as)g(follo)m(w)m(ed:)p Black 697 3538 a Fo(\003)p Black 46 w FA(Scalar)h(mo)s(de:)41 b Fs(M)35 b FA(=\(n)m(um)m(b)s(er)29 b(of)i Fq(adouble)p FA(s\))p Fo(\003)p FA(2)21 b(+)f Fs(M)2659 3552 y Fi(p)p Black 697 3662 a Fo(\003)p Black 46 w FA(V)-8 b(ector)31 b(mo)s(de:)40 b Fs(M)35 b FA(=\(n)m(um)m(b)s(er)28 b(of)i Fq(adouble)p FA(s\)*\()p Fq(NUMBER)p 2846 3662 28 4 v 33 w(DIRECTIONS)p FA(+1\))18 b(+)g Fs(M)3751 3676 y Fi(p)618 3798 y FA(where)30 b(the)h(storage)h(size)f(of)f(all)i(non)d Fq(adouble)i FA(based)f(v)-5 b(ariables)31 b(is)f(describ)s(ed)g(b)m(y) g Fs(M)3591 3812 y Fi(p)3631 3798 y FA(.)p Black 520 3934 a Fx({)p Black 46 w FA(Compile)h(time)618 4047 y(As)25 b(discussed)f(in)g(the)h(previous)f(sections,)j(the)e(traceless)h(forw) m(ard)e(mo)s(de)g(of)h(the)g(ADOL-C)618 4160 y(pac)m(k)-5 b(age)37 b(is)d(implemen)m(ted)h(as)f(inline)h(in)m(tended)f(v)m (ersion.)53 b(Using)34 b(this)g(approac)m(h)h(results)618 4273 y(in)29 b(a)h(higher)f(source)g(co)s(de)h(size,)g(since)g(ev)m (ery)g(op)s(eration)g(in)m(v)m(olving)h(at)f(least)g(one)g Fq(adouble)618 4386 y FA(stands)c(for)g(the)h(op)s(eration)g(itself)g (as)g(w)m(ell)g(as)g(for)f(the)g(corresp)s(onding)g(deriv)-5 b(ativ)m(e)28 b(co)s(de)e(af-)618 4499 y(ter)h(the)g(inlining)g(pro)s (cess.)39 b(Therefore,)28 b(the)f(compilation)h(time)g(needed)e(for)h (the)g(traceless)618 4612 y(v)m(ersion)k(ma)m(y)g(b)s(e)f(higher)g (than)g(that)h(of)f(the)h(trace)h(based)e(co)s(de.)p Black 520 4748 a Fx({)p Black 46 w FA(Co)s(de)g(Size)618 4861 y(A)35 b(second)g(dra)m(wbac)m(k)g(and)g(result)f(of)h(the)g(co)s (de)h(inlining)e(is)h(the)g(increase)h(of)f(co)s(de)g(sizes)618 4974 y(for)30 b(the)g(binaries.)40 b(The)29 b(increase)i(factor)g (compared)f(to)g(the)g(corresp)s(onding)f(trace)i(based)618 5087 y(program)37 b(is)h(di\016cult)f(to)h(quan)m(tify)f(as)h(it)g(is)f (task)h(dep)s(enden)m(t.)60 b(Practical)39 b(results)e(ha)m(v)m(e)618 5199 y(sho)m(wn)28 b(that)h(v)-5 b(alues)29 b(b)s(et)m(w)m(een)g(1.0)h (and)e(2.0)i(can)e(b)s(e)g(exp)s(ected.)41 b(F)-8 b(actors)30 b(higher)e(than)h(2.0)618 5312 y(are)i(p)s(ossible)f(to)s(o)h(and)f(ev) m(en)h(v)-5 b(alues)31 b(b)s(elo)m(w)f(1.0)i(ha)m(v)m(e)f(b)s(een)f (observ)m(ed.)p Black Black eop end %%Page: 67 67 TeXDict begin 67 66 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.67) cvn /DEST pdfmark end 183 199 a Black 3700 307 a FA(67)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (section.8) cvn /DEST pdfmark end 191 515 a 91 x FE(8)135 b(T)-11 b(raceless)45 b(forw)l(ard)h(di\013eren)l(tiation)h(in)e(ADOL-C)g(using)f(Cuda)191 861 y FA(One)24 b(ma)5 b(jor)25 b(dra)m(wbac)m(k)h(using)e(the)h (traceless)i(v)m(ersion)e(of)g(ADOL-C)g(is)g(the)g(fact)h(that)g(sev)m (eral)g(function)191 974 y(ev)-5 b(aluations)33 b(are)e(needed)g(to)h (compute)g(deriv)-5 b(ativ)m(es)33 b(in)e(man)m(y)g(di\013eren)m(t)h(p) s(oin)m(ts.)43 b(More)32 b(precisely)-8 b(,)33 b(to)191 1087 y(calculate)38 b(the)d(Jacobian)h(for)f(a)g(function)g Fs(F)46 b FA(:)34 b Fe(R)1935 1054 y Fi(n)2014 1087 y Fo(!)g Fe(R)2205 1054 y Fi(m)2306 1087 y FA(in)h Fs(M)45 b FA(p)s(oin)m(ts,)36 b Fs(M)46 b FA(function)34 b(ev)-5 b(aluations)191 1200 y(are)41 b(needed)f(for)g(the)h(traceless)h(v)m (ector)g(mo)s(de)e(and)g(ev)m(en)h Fs(M)c Fo(\003)28 b Fs(n)40 b FA(for)g(the)g(traceless)i(scalar)g(mo)s(de.)191 1313 y(Dep)s(ending)27 b(on)g(the)h(size)h(of)f(the)f(function)h(this)f (can)h(result)g(in)f(a)h(long)g(run)m(time.)40 b(T)-8 b(o)28 b(ac)m(hiev)m(e)i(a)e(b)s(etter)191 1426 y(p)s(erformance)35 b(one)i(can)f(use)g(parallelisation)i(tec)m(hniques)f(as)f(the)g(same)g (op)s(erations)h(are)f(p)s(erformed)191 1538 y(during)c(a)i(function)f (ev)-5 b(aluation.)51 b(One)33 b(p)s(ossibilit)m(y)h(is)g(to)g(use)f (GPUs)h(since)f(they)h(are)g(optimized)g(for)191 1651 y(data)j(parallel)h(computation.)61 b(Starting)38 b(with)e(v)m(ersion)i (2.3.0)g(ADOL-C)f(no)m(w)g(features)g(a)g(traceless)191 1764 y(forw)m(ard)21 b(mo)s(de)g(for)g(computing)g(\014rst)g(order)g (deriv)-5 b(ativ)m(es)22 b(in)f(scalar)i(mo)s(de)e(on)g(GPUs)g(using)g (the)h(general)191 1877 y(purp)s(ose)29 b(parallel)i(computing)g(arc)m (hitecture)h(Cuda.)332 2040 y(The)22 b(idea)h(is)f(to)h(include)f (parallel)h(co)s(de)g(that)g(executes)g(in)f(man)m(y)h(GPU)f(threads)g (across)h(pro)s(cessing)191 2153 y(elemen)m(ts.)42 b(This)29 b(can)h(b)s(e)f(done)g(b)m(y)g(using)h(k)m(ernel)g(functions,)f(that)i (is)e(functions)g(whic)m(h)h(are)g(executed)191 2266 y(on)35 b(GPU)g(as)g(an)g(arra)m(y)g(of)g(threads)g(in)g(parallel.)55 b(In)34 b(general)i(all)g(threads)f(execute)h(the)f(same)g(co)s(de.)191 2379 y(They)30 b(are)g(group)s(ed)f(in)m(to)j(blo)s(c)m(ks)e(whic)m(h)g (are)h(then)f(group)s(ed)f(in)m(to)i(grids.)40 b(A)31 b(k)m(ernel)f(is)h(executed)g(as)f(a)191 2492 y(grid)k(of)g(blo)s(c)m (ks)h(of)f(threads.)52 b(F)-8 b(or)35 b(more)g(details)g(see,)h(e.g.,)h (the)d(NVIDIA)h(CUD)m(A)g(C)f(Programming)191 2604 y(Guide)c(whic)m(h)g (can)g(b)s(e)f(do)m(wnloaded)h(from)g(the)g(w)m(eb)g(page)h Fq(www.nvidia.com)p FA(.)41 b(T)-8 b(o)31 b(solv)m(e)g(the)f(problem) 191 2717 y(of)38 b(calculating)j(the)d(Jacobian)h(of)g Fs(F)51 b FA(at)39 b Fs(M)48 b FA(p)s(oin)m(ts)38 b(it)h(is)f(p)s (ossible)g(to)h(let)g(eac)m(h)h(thread)e(p)s(erform)e(a)191 2830 y(function)29 b(ev)-5 b(aluation)32 b(and)d(th)m(us)g(the)h (computation)h(of)f(deriv)-5 b(ativ)m(es)31 b(for)e(one)h(direction)h (at)f(one)g(p)s(oin)m(t.)191 2943 y(The)38 b(adv)-5 b(an)m(tage)41 b(is)e(that)h(the)f(function)g(is)g(ev)-5 b(aluated)40 b(in)f(di\013eren)m(t)g(p)s(oin)m(ts)g(in)g(parallel)h(whic)m(h)e(can) 191 3056 y(result)30 b(in)g(a)h(faster)g(w)m(allclo)s(c)m(k)i(run)m (time.)332 3219 y(The)40 b(follo)m(wing)h(subsection)f(describ)s(es)f (the)h(source)h(co)s(de)f(mo)s(di\014cations)g(required)f(to)i(use)f (the)191 3332 y(traceless)32 b(forw)m(ard)e(mo)s(de)g(of)g(ADOL-C)h (with)f(Cuda.)191 3470 y SDict begin H.S end 191 3470 a 191 3470 a SDict begin 13.6 H.A end 191 3470 a 191 3470 a SDict begin [/View [/XYZ H.V]/Dest (subsection.8.1) cvn /DEST pdfmark end 191 3470 a 166 x FB(8.1)112 b(Mo)s(difying)39 b(the)f(source)f(co)s(de)191 3860 y FA(Let)d(us)e(again)i(consider)f (the)h(co)s(ordinate)g(transformation)f(from)g(Cartesian)h(to)f (spherical)h(p)s(olar)f(co-)191 3973 y(ordinates)e(giv)m(en)g(b)m(y)f (the)h(function)f Fs(F)38 b FA(:)26 b Fe(R)1675 3940 y FD(3)1739 3973 y Fo(!)f Fe(R)1921 3940 y FD(3)1960 3973 y FA(,)31 b Fs(y)d FA(=)d Fs(F)13 b FA(\()p Fs(x)p FA(\),)31 b(with)326 4234 y Fs(y)371 4248 y FD(1)436 4234 y FA(=)532 4123 y Fl(q)p 622 4123 497 4 v 622 4234 a Fs(x)674 4202 y FD(2)674 4260 y(1)734 4234 y FA(+)20 b Fs(x)877 4202 y FD(2)877 4260 y(2)937 4234 y FA(+)f Fs(x)1079 4202 y FD(2)1079 4260 y(3)1119 4234 y Fs(;)197 b(y)1386 4248 y FD(2)1450 4234 y FA(=)25 b(arctan)1814 4106 y Fl(\022)1881 4123 y(q)p 1972 4123 294 4 v 111 x Fs(x)2024 4202 y FD(2)2024 4260 y(1)2084 4234 y FA(+)20 b Fs(x)2227 4202 y FD(2)2227 4260 y(2)2266 4234 y Fs(=x)2363 4248 y FD(3)2403 4106 y Fl(\023)2485 4234 y Fs(;)197 b(y)2752 4248 y FD(3)2816 4234 y FA(=)25 b(arctan)q(\()p Fs(x)3252 4248 y FD(2)3292 4234 y Fs(=x)3389 4248 y FD(1)3429 4234 y FA(\))p Fs(;)191 4490 y FA(as)34 b(an)f(example.)51 b(W)-8 b(e)35 b(no)m(w)e(calculate)j(the)e(Jacobian)g(at)g Fs(M)41 b FA(=)30 b(1024)35 b(di\013eren)m(t)f(p)s(oin)m(ts.)51 b(The)33 b(source)191 4603 y(co)s(de)d(for)g(one)h(p)s(oin)m(t)f(is)g (sho)m(wn)g(in)1416 4620 y SDict begin H.S end 1416 4620 a Black -17 x FA(Figure)g(6)p Black 1748 4541 a SDict begin H.R end 1748 4541 a 1748 4603 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.6) cvn H.B /ANN pdfmark end 1748 4603 a FA(.)40 b(This)30 b(example)h(has)f(no)g(real)g(application)i(but)d (can)i(still)191 4716 y(b)s(e)f(used)f(to)i(sho)m(w)g(the)f(com)m (bination)i(of)e(the)h(traceless)h(v)m(ersion)f(of)f(ADOL-C)h(and)e (Cuda.)332 4878 y(F)-8 b(or)32 b(the)g(use)f(of)h(this)f(mo)s(de)g(a)h (Cuda)f(to)s(olkit,)i(whic)m(h)e(is)h(suitable)g(for)f(the)h(gra\014c)f (card)h(used,)f(has)191 4991 y(to)h(b)s(e)f(installed.)44 b(F)-8 b(urthermore,)32 b(it)g(is)f(imp)s(ortan)m(t)h(to)g(c)m(hec)m(k) h(that)f(the)f(graphic)h(card)f(used)g(supp)s(orts)191 5104 y(double)j(precision)h(\(for)g(details)g(see)h(e.g.)54 b(NVIDIA)36 b(CUD)m(A)f(C)f(Programming)h(Guide\).)54 b(Otherwise)191 5217 y(the)43 b(data)g(t)m(yp)s(e)g(emplo)m(y)m(ed)h (inside)f(of)g(the)f Fq(adouble)h FA(class)h(has)e(to)i(b)s(e)e (adapted)h(to)g Fq(\015oat)p FA(.)78 b(T)-8 b(o)43 b(use)191 5330 y(the)32 b(traceless)h(forw)m(ard)f(mo)s(de)f(with)h(Cuda,)f(one)h (has)g(to)g(include)g(the)g(header)g(\014les)f Ft(adoublecuda.h)p Black Black eop end %%Page: 68 68 TeXDict begin 68 67 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.68) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(68)276 b Fu(8)91 b(TRA)m(CELESS)29 b(F)m(OR)-10 b(W)g(ARD)31 b(DIFFERENTIA)-8 b(TION)31 b(IN)f(ADOL-C)h(USING)f(CUD)m (A)p Black 191 606 a FA(and)k Ft(cuda.h)p FA(.)50 b(The)34 b(\014rst)f(one)i(con)m(tains)g(the)g(de\014nition)f(of)g(the)g(class)h Fq(adouble)g FA(and)e(the)i(o)m(v)m(erloaded)191 719 y(op)s(erators)g(for)g(this)h(v)m(ersion)f(of)h(ADOL-C.)g(As)f(in)g (the)g(other)h(v)m(ersions)g(all)g(deriv)-5 b(ativ)m(e)37 b(calculations)191 832 y(are)f(in)m(tro)s(duced)f(b)m(y)g(calls)i(to)f (o)m(v)m(erloaded)i(op)s(erators.)56 b(The)36 b(second)f(header)h (\014le)f(is)h(needed)f(for)h(the)191 945 y(use)30 b(of)h(Cuda.)332 1108 y(One)38 b(p)s(ossibilit)m(y)h(to)h(solv)m(e)g(the)f(problem)f(ab) s(o)m(v)m(e)i(is)e(the)h(follo)m(wing.)67 b(First)39 b(of)g(all)g(three)g Fq(double)191 1220 y FA(arra)m(ys)31 b(are)g(needed:)42 b Fq(x)30 b FA(for)h(the)g(indep)s(enden)m(t)f(v)-5 b(ariables,)32 b Fq(y)e FA(for)h(the)g(dep)s(enden)m(t)f(v)-5 b(ariables)31 b(and)g Fq(deriv)191 1333 y FA(for)j(the)h(v)-5 b(alues)34 b(of)h(the)g(Jacobian)g(matrices.)54 b(The)33 b(indep)s(enden)m(t)h(v)-5 b(ariables)35 b(ha)m(v)m(e)g(to)g(b)s(e)f (initialised,)191 1446 y(therefore)j(the)g(p)s(oin)m(ts)f(at)i(whic)m (h)e(the)h(function)f(should)g(b)s(e)g(ev)-5 b(aluated)37 b(are)g(sa)m(v)m(ed)h(in)e(a)h(ro)m(w)g(in)g(the)191 1559 y(same)27 b(arra)m(y)h(of)e(length)i(3)13 b Fo(\003)g Fs(M)d FA(.)40 b(F)-8 b(or)28 b(the)f(computation)h(on)e(GPUs)h(one)h (also)f(has)g(to)h(allo)s(cate)h(memory)191 1672 y(on)d(this)h(device.) 40 b(Using)26 b(the)h(syn)m(tax)g(in)f(Cuda)g(one)g(can)h(allo)s(cate)i (an)d(arra)m(y)h(of)g(length)g(3)12 b Fo(\003)g Fs(M)38 b FA(\(n)m(um)m(b)s(er)191 1785 y(of)30 b(indep)s(enden)m(t)g(v)-5 b(ariables)31 b(times)g(n)m(um)m(b)s(er)e(of)h(p)s(oin)m(ts\))h(for)f (the)g(indep)s(enden)m(t)g(v)-5 b(ariables)31 b(as)f(follo)m(ws:)p Black Black 1047 2013 a Fq(double)h(*)g(devx;)1047 2126 y(cudaMallo)s(c\(\(void**\)&devx,)h(3*M*sizeof\(double\)\);)191 2348 y FA(The)23 b(arra)m(ys)i(for)f(the)g(dep)s(enden)m(t)f(v)-5 b(ariables)24 b(and)g(the)g(v)-5 b(alues)24 b(of)g(the)h(Jacobian)f (matrices)h(are)g(allo)s(cated)191 2461 y(in)36 b(the)h(same)h(w)m(a)m (y)-8 b(.)61 b(Then)36 b(the)h(v)-5 b(alues)37 b(of)g(the)g(indep)s (enden)m(t)f(v)-5 b(ariables)37 b(ha)m(v)m(e)h(to)g(b)s(e)e(copied)h (to)h(the)191 2574 y(GPU)31 b(using)f(the)g(follo)m(wing)i(command)p Black Black 620 2805 a Fq(cudaMemcp)m(y\(devx,)g(x,)e (sizeof\(double\)*3*M,)j(cudaMemcp)m(yHostT)-8 b(oDevice\);)191 3035 y FA(The)27 b(argumen)m(t)i Fq(cudaMemcp)m(yHostT)-8 b(oDevice)31 b FA(indicates)e(that)f(the)h(v)-5 b(alues)28 b(are)g(copied)h(from)e(the)i(host)191 3148 y(to)i(the)g(GPU.)g(In)e (this)h(case)i(the)e(v)-5 b(alues)31 b(stored)g(in)f Fq(x)g FA(are)h(copied)g(to)g Fq(devx)p FA(.)332 3311 y(No)m(w)43 b(all)g(required)f(information)h(has)f(b)s(een)f (transferred)h(to)h(the)f(GPU.)h(The)f(c)m(hanges)h(in)g(the)191 3424 y(source)30 b(co)s(de)h(made)g(so)f(far)g(are)h(summarized)f(in) 1936 3442 y SDict begin H.S end 1936 3442 a Black -18 x FA(Figure)h(9)p Black 2268 3362 a SDict begin H.R end 2268 3362 a 2268 3424 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.9) cvn H.B /ANN pdfmark end 2268 3424 a FA(.)332 3587 y(In)37 b(the)h(next)f(step)h(the)f(user)g(has)g(to)i(sp)s(ecify)e (ho)m(w)g(man)m(y)h(blo)s(c)m(ks)g(and)f(threads)g(p)s(er)f(blo)s(c)m (k)i(will)191 3699 y(b)s(e)33 b(needed)h(for)f(the)h(function)g(ev)-5 b(aluations.)52 b(In)33 b(the)h(presen)m(t)g(example)h(this)e(is)h (done)g(b)m(y)f(the)h(call)i(of)191 3812 y(the)f(function)f Fq(k)m(ernellaunch)p FA(,)j(see)1394 3830 y SDict begin H.S end 1394 3830 a Black -18 x FA(Figure)31 b(10)p Black 1772 3750 a SDict begin H.R end 1772 3750 a 1772 3812 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.10) cvn H.B /ANN pdfmark end 1772 3812 a FA(.)53 b(In)34 b(this)h(case)h(the)f (blo)s(c)m(ks)g(are)g(t)m(w)m(o)h(dimensional:)50 b(the)191 3925 y(x-dimension)27 b(is)h(determined)f(b)m(y)h(the)g(n)m(um)m(b)s (er)e(of)i(p)s(oin)m(ts)g Fs(M)37 b FA(at)29 b(whic)m(h)e(the)h (Jacobian)h(matrix)f(has)f(to)191 4038 y(b)s(e)33 b(calculated)i(while) e(the)h(y-dimension)f(is)g(giv)m(en)i(b)m(y)e(the)h(n)m(um)m(b)s(er)e (of)h(indep)s(enden)m(t)f(v)-5 b(ariables,)35 b(i.e.,)191 4151 y(3.)53 b(Since)34 b(a)h(blo)s(c)m(k)f(cannot)h(con)m(tain)h(more) e(than)g(1024)i(threads,)f(the)g(x-dimension)f(in)g(the)g(example)191 4264 y(is)40 b(64)h(instead)f(of)g Fs(M)51 b FA(=)41 b(1024.)71 b(Therefore)39 b(1024)p Fs(=)p FA(64)45 b(=)40 b(16)h(blo)s(c)m(ks)f(are)h(needed.)68 b(The)40 b(describ)s(ed)191 4377 y(division)35 b(in)m(to)h(blo)s(c)m(ks)g(is)f(reasonable)h(as)g (eac)m(h)g(thread)f(has)g(to)h(p)s(erform)e(a)h(function)g(ev)-5 b(aluation)37 b(for)191 4490 y(one)27 b(p)s(oin)m(t)f(and)g(one)h (direction,)i(hence)d Fs(M)d Fo(\003)13 b FA(3)27 b(threads)f(are)h (needed)f(where)h(3)g(denotes)g(the)f(n)m(um)m(b)s(er)g(of)191 4603 y(indep)s(enden)m(t)21 b(v)-5 b(ariables)22 b(corresp)s(onding)f (to)i(the)f(n)m(um)m(b)s(er)f(of)h(directions)g(needed)g(for)g(the)g (computation)191 4716 y(of)30 b(the)h(Jacobian)g(in)f(one)h(p)s(oin)m (t.)332 4878 y(W)-8 b(e)36 b(can)e(no)m(w)h(p)s(erform)e(the)h (function)g(ev)-5 b(aluations)36 b(together)g(with)e(the)h(calculation) h(of)f(the)f(Ja-)191 4991 y(cobians.)41 b(The)29 b(corresp)s(onding)f (co)s(de)i(is)f(illustrated)i(in)2158 5009 y SDict begin H.S end 2158 5009 a Black -18 x FA(Figure)g(11)p Black 2536 4929 a SDict begin H.R end 2536 4929 a 2536 4991 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.11) cvn H.B /ANN pdfmark end 2536 4991 a FA(.)40 b(Since)29 b(the)h(function)f (ev)-5 b(aluations)191 5104 y(should)34 b(b)s(e)g(p)s(erformed)f(on)i (a)g(GPU)g(a)g(k)m(ernel)g(function)g(is)f(needed)h(whic)m(h)f(is)h (de\014ned)f(b)m(y)g(using)h(the)p 196 5217 28 4 v 229 5217 V 287 5217 a Fq(global)p 517 5217 V 550 5217 V 99 w FA(declaration)g(sp)s(eci\014er)e(\(see)1625 5235 y SDict begin H.S end 1625 5235 a Black -18 x FA(Figure)e(11)p Black 2003 5155 a SDict begin H.R end 2003 5155 a 2003 5217 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.11) cvn H.B /ANN pdfmark end 2003 5217 a FA(\).)51 b(Then)32 b(eac)m(h)j(thread)f(executes)h(the)e(op)s(erations)191 5330 y(that)e(are)g(de\014ned)e(in)h(the)g(k)m(ernel.)p Black Black eop end %%Page: 69 69 TeXDict begin 69 68 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.69) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(8.1)92 b(Mo)s(difying)30 b(the)h(source)f(co)s(de)2254 b FA(69)p Black Black 191 518 3600 4 v 191 4719 4 4201 v Black Black 272 722 a Fq(#include)30 b Fs(<)p Fq(iostream)p Fs(>)272 835 y Fq(#include)g Fs(<)p Fq(cuda.h)p Fs(>)272 947 y Fq(#include)g Fs(<)p Fq(adoublecuda.h)p Fs(>)272 1060 y Fq(using)g(namespace)h(std;)272 1286 y(int)f(main\(\))h Fo(f)390 1399 y Fq(int)f(M=1024;)390 1512 y(double*)h(deriv)g(=)f(new)h (double[9*M];)390 1625 y(double*)g(y)g(=)f(new)g(double[3*M];)390 1738 y(double*)h(x)g(=)f(new)g(double[3*M];)390 1964 y(//)h(Initialize)e Fs(x)909 1978 y Fi(i)390 2077 y Fq(fo)m(r)i(\(int)f (k=0;)i(k)p Fs(<)p Fq(M;)e(++k\))p Fo(f)508 2189 y Fq(fo)m(r)h(\(int)g (i=0;)f(i)p Fs(<)p Fq(3;)g(++i\))626 2302 y(x[k*3+i])i(=i)e(+)g (1/\(k+1\);)p Fo(g)390 2528 y Fq(//)h(Allo)s(cate)f(a)m(rra)m(y)h(fo)m (r)g(indep)s(endent)f(and)g(dep)s(endent)h(va)m(riables)390 2641 y(//)g(and)f(Jacobian)g(matrices)h(on)g(GPU)390 2754 y(double)g(*)g(devx;)390 2867 y(cudaMallo)s(c\(\(void**\)&devx,)h (3*M*sizeof\(double\)\);)390 2980 y(double)f(*)g(devy;)390 3093 y(cudaMallo)s(c\(\(void**\)&devy)-8 b(,)32 b (3*M*sizeof\(double\)\);)390 3206 y(double)f(*)g(devderiv;)390 3319 y(cudaMallo)s(c\(\(void**\)&devderiv,)h(3*3*M*sizeof\(double\)\);) 390 3544 y(//)f(Cop)m(y)h(values)d(of)i(indep)s(endent)f(va)m(riables)g (from)h(host)f(to)h(GPU)390 3657 y(cudaMemcp)m(y\(devx,)h(x,)f (sizeof\(double\)*3*M,)h(cudaMemcp)m(yHostT)-8 b(oDevice\);)390 3883 y(//)31 b(Call)f(function)g(to)h(sp)s(ecify)f(amount)g(of)h(blo)s (cks)f(and)g(threads)g(to)h(b)s(e)f(used)390 3996 y(k)m (ernellaunch\(devx,)j(devy)-8 b(,)31 b(devderiv,M\);)390 4222 y(//)g(Cop)m(y)h(values)d(of)i(dep)s(endent)g(va)m(riables)f(and)f (Jacobian)i(matrices)f(from)h(GPU)e(to)i(host)390 4335 y(cudaMemcp)m(y\(y)-8 b(,)32 b(devy)-8 b(,)32 b (sizeof\(double\)*3*M,cudaMemcp)m(yDeviceT)-8 b(oHost\);)390 4448 y(cudaMemcp)m(y\(deriv,)32 b(devderiv,)f(sizeof\(double\)*3*3*M,)i (cudaMemcp)m(yDeviceT)-8 b(oHost\);)272 4561 y Fo(g)p 3787 4719 V 191 4722 3600 4 v Black 723 4877 a FA(Figure)31 b(9:)1121 4877 y SDict begin H.S end 1121 4877 a 1121 4877 a SDict begin H.R end 1121 4877 a 1121 4877 a SDict begin [/View [/XYZ H.V]/Dest (figure.9) cvn /DEST pdfmark end 1121 4877 a FA(Example)f(for)h(traceless)g(scalar)h(forw)m (ard)e(mo)s(de)g(with)g(Cuda)p Black Black 332 5217 a(In)37 b(this)h(example)g(eac)m(h)h(thread)e(is)h(assigned)g(the)f(task)i(of)e (calculating)j(the)e(deriv)-5 b(ativ)m(es)39 b(in)e(one)191 5330 y(p)s(oin)m(t)31 b(with)h(resp)s(ect)f(to)h(one)g(indep)s(enden)m (t)e(v)-5 b(ariable.)45 b(Therefore)31 b(some)h(indices)f(are)h(needed) f(for)h(the)p Black Black eop end %%Page: 70 70 TeXDict begin 70 69 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.70) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(70)276 b Fu(8)91 b(TRA)m(CELESS)29 b(F)m(OR)-10 b(W)g(ARD)31 b(DIFFERENTIA)-8 b(TION)31 b(IN)f(ADOL-C)h(USING)f(CUD)m (A)p Black Black 191 518 3600 4 v 191 2122 4 1604 v Black Black 371 722 a Fq(cudaErro)m(r)p 743 722 28 4 v 34 w(t)g(k)m (ernellaunch\(double*)j(inx,)d(double*)h(out)m(y)-8 b(,)32 b(double*)f(outderiv,)g(int)f(M\))g Fo(f)489 835 y Fq(//)h(Create)g(16) g(blo)s(cks)489 947 y(int)e(Blo)s(cks=16;)489 1060 y(//)i(Tw)m(o)g (dimensional)f(\(M/Blo)s(cks\))p Fo(\002)p Fq(3)h(blo)s(cks)489 1173 y(dim3)f(threadsP)m(erBlo)s(ck\(M/Blo)s(cks,3\);)489 1399 y(//)h(Call)e(k)m(ernel)j(function)f(with)e(16)j(blo)s(cks)e(with) g(\(M/Blo)s(cks\))p Fo(\002)p Fq(3)h(threads)g(p)s(er)f(blo)s(ck)489 1512 y(k)m(ernel)h Fs(<<<)f Fq(Blo)s(cks,)g(threadsP)m(erBlo)s(ck)i Fs(>>>)p Fq(\(inx,)d(out)m(y)-8 b(,)32 b(outderiv\);)489 1625 y(cudaErro)m(r)p 861 1625 V 34 w(t)e(cudaErr)h(=)f (cudaGetLastErro)m(r\(\);)489 1851 y(return)g(cudaErr;)371 1964 y Fo(g)p 3787 2122 4 1604 v 191 2125 3600 4 v Black 700 2280 a FA(Figure)h(10:)1144 2280 y SDict begin H.S end 1144 2280 a 1144 2280 a SDict begin H.R end 1144 2280 a 1144 2280 a SDict begin [/View [/XYZ H.V]/Dest (figure.10) cvn /DEST pdfmark end 1144 2280 a FA(Example)f(for)g (traceless)i(scalar)g(forw)m(ard)d(mo)s(de)h(with)g(Cuda)p Black Black 191 2564 a(implemen)m(tation.)46 b(Eac)m(h)33 b(thread)e(has)h(a)g(unique)f(thread)g(ID)h(in)g(a)g(blo)s(c)m(k)g (consisting)h(of)e(an)h(x)g(and)f(an)191 2677 y(y-dimension.)40 b(The)28 b(blo)s(c)m(ks)h(ha)m(v)m(e)g(an)g(ID)g(as)f(w)m(ell.)41 b(In)28 b(the)h(example)g(the)g(follo)m(wing)h(indices)e(are)h(used.)p Black 327 2958 a Fo(\017)p Black 46 w Fq(index)34 b(=)g(threadIdx.x)g FA(denotes)g(the)h(x-dimension)e(of)i(a)f(thread)g(\(ranges)g(from)g(0) g(to)h(63)g(in)f(the)418 3071 y(example\))p Black 327 3277 a Fo(\017)p Black 46 w Fq(index1)h(=)e(threadIdx.y)h FA(denotes)h(the)f(y-dimension)g(of)g(a)g(thread)g(\(ranges)h(from)e(0) i(to)f(2)h(in)f(the)418 3390 y(example\))p Black 327 3596 a Fo(\017)p Black 46 w Fq(index2)d(=)f(blo)s(ckIdx.x)h FA(denotes)g(the)f(blo)s(c)m(k)h(index)f(\(ranges)h(from)f(0)h(to)g(15) g(in)f(the)h(example\))p Black 327 3802 a Fo(\017)p Black 46 w Fq(index3)g(=)f(blo)s(ckDim.x)h FA(denotes)f(the)h(x-dimension)f (of)h(a)f(blo)s(c)m(k)h(\(alw)m(a)m(ys)h(64)g(in)e(the)g(example\))p Black 327 4008 a Fo(\017)p Black 46 w Fq(index4)36 b(=)f(blo)s (ckDim.x*blo)s(ckDim.y)h FA(denotes)g(the)f(size)h(of)g(a)f(blo)s(c)m (k)h(\(alw)m(a)m(ys)h(64)25 b Fo(\003)f FA(3)33 b(=)g(192)k(in)418 4121 y(the)31 b(example\))332 4401 y(F)-8 b(or)45 b(the)f(calculation)j (of)d(deriv)-5 b(ativ)m(es)45 b(the)g(function)f(ev)-5 b(aluation)45 b(has)f(to)h(b)s(e)e(p)s(erformed)g(with)191 4514 y Fq(adouble)p FA(s.)59 b(Therefore)37 b(the)g(dep)s(enden)m(t)e (and)h(the)h(indep)s(enden)m(t)f(v)-5 b(ariables)37 b(ha)m(v)m(e)h(to)f (b)s(e)f(declared)h(as)191 4627 y Fq(adouble)p FA(s)31 b(as)g(in)g(the)g(other)g(v)m(ersions)h(of)f(ADOL-C)g(\(see,)h(e.g.,) 2407 4627 y SDict begin H.S end 2407 4627 a Black FA(Section)f(7)p Black 2770 4565 a SDict begin H.R end 2770 4565 a 2770 4627 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.7) cvn H.B /ANN pdfmark end 2770 4627 a FA(\).)43 b(Similar)31 b(to)h(the)f(traceless)191 4740 y(v)m(ersion)43 b(without)f(Cuda)f(the)h(namespace)h Ft(adtlc)e FA(is)h(used.)75 b(No)m(w)43 b(eac)m(h)h(thread)e(has)f(to)i(read)f(out)191 4853 y(the)36 b(p)s(oin)m(t)g(at)h(whic)m(h)f(the)g(function)f(ev)-5 b(aluation)38 b(is)e(then)g(p)s(erformed.)56 b(This)35 b(is)h(determined)g(b)m(y)g(the)191 4966 y(blo)s(c)m(kindex)43 b(and)e(the)i(x-dimension)f(of)h(the)g(thread,)i(therefore)e(the)g (indep)s(enden)m(t)e(v)-5 b(ariables)43 b(in)f(a)191 5079 y(thread)30 b(ha)m(v)m(e)i(the)e(v)-5 b(alues)p Black Black 1370 5330 a Fq(x[i]=inx[index2*index4+index*3+i];)p Black Black eop end %%Page: 71 71 TeXDict begin 71 70 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.71) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(8.1)92 b(Mo)s(difying)30 b(the)h(source)f(co)s(de)2254 b FA(71)p Black Black 191 518 3600 4 v 191 3590 4 3072 v Black Black 485 722 28 4 v 517 722 V 545 722 a Fq(global)p 775 722 V 808 722 V 95 w(void)31 b(k)m(ernel\(double*)i(inx,)d(double*) h(out)m(y)-8 b(,)32 b(double*)f(outderiv\))g Fo(f)597 835 y Fq(const)g(int)f(index)g(=)g(threadIdx.x)h(;)597 947 y(const)g(int)f(index1)h(=)f(threadIdx.y;)597 1060 y(const)h(int)f(index2)h(=)f(blo)s(ckIdx.x;)597 1173 y(const)h(int)f(index3)h(=)f(blo)s(ckDim.x;)597 1286 y(const)h(int)f(index4)h(=)f(blo)s(ckDim.x*blo)s(ckDim.y;)597 1512 y(//)h(Decla)m(re)h(dep)s(endent)e(and)g(indep)s(endent)h(va)m (riables)e(as)h(adoubles)597 1625 y(adtlc::adouble)h(y[3],)g(x[3];)597 1738 y(//)g(Read)g(out)f(p)s(oint)g(fo)m(r)h(function)f(evaluation)597 1851 y(fo)m(r\(int)h(i=0;)g(i)f Fs(<)g Fq(3;)h(i++\))715 1964 y(x[i]=inx[index2*index4+index*3+i];)597 2077 y(//)g(Set)g (direction)f(fo)m(r)h(calculation)f(of)h(derivatives)597 2189 y(x[index1].setAD)m(V)m(alue\(1\);)597 2415 y(//)g(F)m(unction)g (evaluation)597 2528 y(y[0])g(=)f(sqrt\(x[0]*x[0]+x[1]*x[1]+x[2]*x[2])q (\);)597 2641 y(y[1])h(=)f(atan\(sqrt\(x[0]*x[0]+x[1]*x[1]\)/x[2]\);) 597 2754 y(y[2])h(=)f(atan\(x[1]/x[0]\);)597 2980 y(fo)m(r\(int)h(i=0;) g(i)f Fs(<)g Fq(3;)h(i++\))715 3093 y(out)m (y[\(index2*index3+index\)*3+i]=y[i].getV)m(alue\(\);)597 3206 y(fo)m(r\(int)g(i=0;)g(i)f Fs(<)g Fq(3;)h(i++\))715 3319 y(outderiv[\(index2*index4+index*3+index1\)*3+i]=y[i].getAD)m(V)m (alue\(\);)479 3431 y Fo(g)p 3787 3590 4 3072 v 191 3593 3600 4 v Black 700 3748 a FA(Figure)g(11:)1144 3748 y SDict begin H.S end 1144 3748 a 1144 3748 a SDict begin H.R end 1144 3748 a 1144 3748 a SDict begin [/View [/XYZ H.V]/Dest (figure.11) cvn /DEST pdfmark end 1144 3748 a FA(Example)f(for)g(traceless)i(scalar)g(forw)m(ard)d(mo)s(de)h (with)g(Cuda)p Black Black 191 4028 a(for)36 b Fq(i=0,1,2)i FA(where)d Fq(inx)h FA(corresp)s(onds)f(to)i(the)g(v)m(ector)h Fq(devx)p FA(.)59 b(The)35 b(direction)i(for)f(the)h(deriv)-5 b(ativ)m(es)38 b(is)191 4141 y(giv)m(en)31 b(b)m(y)g Fq(index1)p FA(.)p Black Black 1576 4387 a Fq(x[index1].setAD)m(V)m (alue\(1\);)191 4633 y FA(The)i(functions)g(for)h(setting)g(and)f (getting)j(the)d(v)-5 b(alue)34 b(and)f(the)h(deriv)-5 b(ativ)m(e)35 b(v)-5 b(alue)34 b(of)g(an)g Fq(adouble)f FA(are)191 4746 y(the)h(same)g(as)g(in)g(the)g(traceless)h(v)m(ersion)g (of)f(ADOL-C)f(for)h(\014rst)f(order)h(deriv)-5 b(ativ)m(es)35 b(\(see)3367 4746 y SDict begin H.S end 3367 4746 a Black FA(Section)c(7)p Black 3730 4683 a SDict begin H.R end 3730 4683 a 3730 4746 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.7) cvn H.B /ANN pdfmark end 3730 4746 a FA(\).)191 4858 y(The)26 b(function)g(ev)-5 b(aluation)27 b(is)g(then)e(p)s(erformed)g(with)h Fq(adouble)g(x)g FA(on)h(GPU)f(and)g(the)g(results)g(are)h(sa)m(v)m(ed)191 4971 y(in)34 b Fq(adouble)h(y)p FA(.)54 b(The)34 b(function)h(ev)-5 b(aluation)36 b(itself)g(remains)e(unc)m(hanged)h(\(see)2953 4989 y SDict begin H.S end 2953 4989 a Black -18 x FA(Figure)c(11)p Black 3331 4909 a SDict begin H.R end 3331 4909 a 3331 4971 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.11) cvn H.B /ANN pdfmark end 3331 4971 a FA(\).)54 b(Then)34 b(w)m(e)191 5084 y(store)d(the)f(v)-5 b(alues)31 b(of)g(the)f(function)g(ev)-5 b(aluations)32 b(in)e(eac)m(h)i(p)s(oin)m (t)e(in)g(a)h(ro)m(w)f(in)g(one)h(arra)m(y:)p Black Black 1095 5330 a Fq(out)m(y[\(index2*index3+index\)*3+i]=y[i].getV)m (alue\(\);)p Black Black eop end %%Page: 72 72 TeXDict begin 72 71 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.72) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(72)1861 b Fu(9)91 b(INST)-8 b(ALLING)30 b(AND)h(USING)g(ADOL-C)p Black 191 606 a FA(for)f Fq(i=0,1,2)p FA(.)42 b(The)30 b(v)-5 b(alues)31 b(of)f(a)h(Jacobian)g(are)g(stored)f(column)g(b)m(y)h (column)f(in)g(a)h(ro)m(w:)p Black Black 759 847 a Fq (outderiv[\(index2*index4+index*3+index1\)*3+i]=y[i].getAD)m(V)m (alue\(\);)191 1088 y FA(for)f Fq(i=0,1,2)p FA(.)332 1251 y(No)m(w)h(there)f(is)g(one)g(thing)g(left)h(to)g(do.)40 b(The)30 b(v)-5 b(alues)30 b(calculated)i(on)e(the)g(GPU)g(ha)m(v)m(e)h (to)g(b)s(e)e(copied)191 1363 y(bac)m(k)g(to)g(host.)40 b(F)-8 b(or)29 b(the)g(dep)s(enden)m(t)e(v)-5 b(ariables)29 b(in)f(the)g(example)h(this)f(can)h(b)s(e)f(done)g(b)m(y)g(the)g(follo) m(wing)191 1476 y(call:)p Black Black 701 1717 a Fq(cudaMemcp)m(y\(y)-8 b(,)33 b(devy)-8 b(,)31 b(sizeof\(double\)*3*M,cudaMemcp)m(yDeviceT)-8 b(oHost\);)191 1958 y FA(see)329 1976 y SDict begin H.S end 329 1976 a Black -18 x FA(Figure)31 b(9)p Black 661 1896 a SDict begin H.R end 661 1896 a 661 1958 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (figure.9) cvn H.B /ANN pdfmark end 661 1958 a FA(.)38 b(The)21 b(argumen)m(t)h Fq(cudaMemcp)m(yDeviceT)-8 b(oHost)24 b FA(determines)e(that)g(the)g(v) -5 b(alues)21 b(are)h(copied)191 2071 y(from)30 b(GPU)h(to)g(host.)191 2204 y SDict begin H.S end 191 2204 a 191 2204 a SDict begin 13.6 H.A end 191 2204 a 191 2204 a SDict begin [/View [/XYZ H.V]/Dest (subsection.8.2) cvn /DEST pdfmark end 191 2204 a 166 x FB(8.2)112 b(Compiling)39 b(and)f(Linking)h(the)e(Source)h (Co)s(de)191 2592 y FA(After)32 b(incorp)s(orating)h(the)f(required)f (c)m(hanges,)j(one)e(has)g(to)h(compile)f(the)h(source)f(co)s(de)g(and) g(link)g(the)191 2705 y(ob)5 b(ject)35 b(\014les)f(to)i(get)f(the)g (executable.)54 b(F)-8 b(or)35 b(the)f(compilation)i(of)f(a)f(Cuda)g (\014le)g(the)h Fq(nvcc)g FA(compiler)g(is)191 2818 y(needed.)40 b(The)30 b(compile)i(sequence)e(should)g(b)s(e)f(similar)i(to)g(the)g (follo)m(wing)h(example:)p Black Black 975 3059 a Fq(nvcc)f(-a)m (rch=sm)p 1547 3059 28 4 v 33 w(20)g(-o)g(traceless)p 2127 3059 V 33 w(cuda)g(traceless)p 2689 3059 V 32 w(cuda.cu)191 3300 y FA(The)d(compiler)h(option)g Ft(-arch=sm_20)c FA(sp)s(eci\014es)k(the)f(compute)h(capabilit)m(y)i(that)e(is)f (assumed,)h(in)f(this)191 3413 y(case)j(one)g(that)g(supp)s(orts)d (double)i(precision.)332 3575 y(The)c(men)m(tioned)i(source)f(co)s(de)g Fq(traceless)p 1760 3575 V 33 w(cuda.cu)g FA(illustrating)h(the)f(use)f (of)h(the)g(forw)m(ard)f(traceless)191 3688 y(scalar)40 b(mo)s(de)e(with)h(Cuda)f(and)g(a)h(further)f(example)h Fq(lib)s(o)m(rgpu.cu)h FA(can)f(b)s(e)f(found)g(in)g(the)h(directory) 191 3801 y(examples.)67 b(The)39 b(second)g(example)h(is)f(an)g (adaption)h(of)f(the)g(Op)s(enMP)f(example)i(to)g(the)f(traceless)191 3914 y(v)m(ersion)31 b(with)f(Cuda.)191 4056 y SDict begin H.S end 191 4056 a 191 4056 a SDict begin 13.6 H.A end 191 4056 a 191 4056 a SDict begin [/View [/XYZ H.V]/Dest (section.9) cvn /DEST pdfmark end 191 4056 a 200 x FE(9)135 b(Installing)46 b(and)f(Using)g(ADOL-C)191 4370 y SDict begin H.S end 191 4370 a 191 4370 a SDict begin 13.6 H.A end 191 4370 a 191 4370 a SDict begin [/View [/XYZ H.V]/Dest (subsection.9.1) cvn /DEST pdfmark end 191 4370 a 143 x FB(9.1)112 b(Generating)39 b(the)e(ADOL-C)h(Library)191 4735 y FA(The)30 b(curren)m(tly)g(built)g(system)h(is)f(b)s(est)g (summarized)g(b)m(y)g(the)h(ubiquitous)e(gn)m(u)i(install)g(triplet)p Black Black 1223 4976 a Ft(configure)46 b(-)h(make)g(-)g(make)g (install)28 b FA(.)191 5217 y(Executing)f(this)g(three)g(steps)g(from)g (the)g(pac)m(k)-5 b(age)28 b(base)f(directory)h Ft ()20 b FA(will)191 5330 y(compile)36 b(the)g(static)h(and)e(the)h(dynamic)f(ADOL-C)h(library)f(with)h (default)f(options)h(and)f(install)i(the)p Black Black eop end %%Page: 73 73 TeXDict begin 73 72 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.73) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(9.1)92 b(Generating)32 b(the)e(ADOL-C)h(Library)1985 b FA(73)p Black 191 606 a(pac)m(k)-5 b(age)27 b(\(libraries)f(and)f (headers\))h(in)m(to)g(the)g(default)f(installation)j(directory)e Ft(<$HOME/adolc)p 3502 606 29 4 v 31 w(base>)p FA(.)191 719 y(Inside)35 b(the)i(install)f(directory)h(the)f(sub)s(directory)f Ft(include)f FA(will)j(con)m(tain)g(all)g(the)f(installed)h(header)191 832 y(\014les)c(that)h(ma)m(y)g(b)s(e)f(included)f(b)m(y)h(the)h(user)f (program,)h(the)f(sub)s(directory)f Ft(lib)h FA(will)g(con)m(tain)i (the)f(32-)191 945 y(bit)i(compiled)h(library)f(and)g(the)g(sub)s (directory)f Ft(lib64)g FA(will)i(con)m(tain)h(the)e(64-bit)i(compiled) e(library)-8 b(.)191 1058 y(Dep)s(ending)30 b(on)g(the)h(compiler)g (only)f(one)h(of)f Ft(lib)g FA(or)g Ft(lib64)f FA(ma)m(y)i(b)s(e)f (created.)332 1220 y(Before)45 b(doing)f(so)h(the)f(user)f(ma)m(y)i(mo) s(dify)e(the)i(header)f(\014le)g Ft(usrparms.h)d FA(in)j(order)g(to)g (tailor)191 1333 y(the)39 b(ADOL-C)g(pac)m(k)-5 b(age)40 b(to)g(the)f(needs)f(in)g(the)h(particular)g(system)g(en)m(vironmen)m (t)g(as)g(discussed)f(in)191 1446 y SDict begin H.S end 191 1446 a Black FA(Section)31 b(2.2)p Black 625 1384 a SDict begin H.R end 625 1384 a 625 1446 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.2) cvn H.B /ANN pdfmark end 625 1446 a FA(.)60 b(The)36 b(con\014gure)h(pro)s(cedure)e(whic) m(h)i(creates)h(the)f(necessary)g Ft(Makefile)p FA(s)e(can)i(b)s(e)f (cus-)191 1559 y(tomized)c(b)m(y)f(use)g(of)h(some)f(switc)m(hes.)44 b(Av)-5 b(ailable)33 b(options)f(and)e(their)i(meaning)f(can)h(b)s(e)e (obtained)i(b)m(y)191 1672 y(executing)g Ft(./configure)44 b(--help)29 b FA(from)h(the)g(pac)m(k)-5 b(age)33 b(base)d(directory)-8 b(.)332 1835 y(All)44 b(ob)5 b(ject)44 b(\014les)g(and)e(other)i(in)m (termediately)h(generated)g(\014les)e(can)h(b)s(e)e(remo)m(v)m(ed)j(b)m (y)e(the)g(call)191 1948 y Ft(make)k(clean)p FA(.)39 b(Uninstalling)31 b(ADOL-C)g(b)m(y)f(executing)h Ft(make)47 b(uninstall)28 b FA(is)i(only)h(reasonable)g(after)191 2061 y(a)c(previous)e(called)j Ft(make)46 b(install)25 b FA(and)g(will)i(remo)m(v)m(e)g(all)h(installed)e(pac)m(k)-5 b(age)29 b(\014les)d(but)f(will)i(lea)m(v)m(e)i(the)191 2174 y(created)i(directories)h(b)s(ehind.)332 2336 y(The)46 b(sparse)g(driv)m(ers)g(are)h(included)f(in)g(the)g(ADOL-C)h(libraries) f(if)h(the)g Ft(./configure)c FA(com-)191 2449 y(mand)52 b(is)h(executed)g(with)g(the)f(option)i Ft(--enable-sparse)p FA(.)103 b(The)52 b(ColP)m(ac)m(k)j(library)d(a)m(v)-5 b(ailable)191 2562 y(at)28 b Ft(http://cscapes.cs.purdue)o(.ed)o(u/co)o (lori)o(ngp)o(age/)o(soft)o(war)o(e.ht)o(m)21 b FA(is)27 b(required)g(to)g(compute)191 2675 y(the)47 b(sparse)g(structures,)k (and)46 b(is)i(searc)m(hed)f(for)g(in)g(all)h(the)f(default)h(lo)s (cations.)92 b(In)46 b(case)j(the)e(li-)191 2788 y(brary)35 b(and)h(its)h(headers)e(are)i(installed)g(in)f(a)h(nonstandard)d(path)i (this)h(ma)m(y)f(b)s(e)g(sp)s(eci\014ed)g(with)g(the)191 2901 y Ft(--with-colpack=PATH)i FA(option.)80 b(It)44 b(is)f(assumed)g(that)h(the)f(library)g(and)g(its)h(header)f(\014les)g (ha)m(v)m(e)191 3014 y(the)e(follo)m(wing)i(directory)f(structure:)62 b Ft(PATH/include)38 b FA(con)m(tains)k(all)g(the)g(header)f(\014les,)j Ft(PATH/lib)191 3127 y FA(con)m(tains)33 b(the)f(32-bit)h(compiled)g (library)e(and)h Ft(PATH/lib64)d FA(con)m(tains)k(the)f(64-bit)h (compiled)f(library)-8 b(.)191 3240 y(Dep)s(ending)31 b(on)g(the)h(compiler)f(used)g(to)h(compile)g Fq(ADOL-C)g FA(one)f(of)h(these)f(libraries)h(will)g(b)s(e)e(used)h(for)191 3352 y(linking.)332 3515 y(The)e(option)h Ft(--disable-stdczero)24 b FA(turns)k(o\013)i(the)f(initialization)k(in)c(the)g Fq(adouble)h FA(default)f(con-)191 3628 y(structor.)40 b(This)27 b(will)h(impro)m(v)m(e)h(e\016ciency)g(but)e(requires)h(that) g(there)h(b)s(e)e(no)h(implicit)h(arra)m(y)f(initializa-)191 3741 y(tion)j(in)f(the)g(co)s(de,)h(see)1022 3741 y SDict begin H.S end 1022 3741 a Black FA(Section)g(2.3)p Black 1457 3679 a SDict begin H.R end 1457 3679 a 1457 3741 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.3) cvn H.B /ANN pdfmark end 1457 3741 a FA(.)332 3904 y(Supp)s(ort)d(for)i(MPI)h (and)f(the)g(AdjoinableMPI)h(API)f(\(see)191 4017 y Ft (http://www.mcs.anl.gov/~)o(utke)o(/Ad)o(join)o(able)o(MPI)o(/Adj)o (oina)o(ble)o(MPID)o(ox/i)o(nde)o(x.ht)o(ml)22 b FA(\))29 b(ma)m(y)191 4130 y(b)s(e)34 b(enabled)g(using)g(the)h(option)g Ft(--enable-ampi)p FA(.)50 b(This)34 b(requires)g(the)g(presence)h(of)g (MPI)f(compiler)191 4242 y(wrapp)s(ers)39 b Ft(mpicc)g FA(and)h Ft(mpicxx)f FA(in)h(the)h Ft($PATH)e FA(and)h(the)h (AdjoinableMPI)g(libraries)f(in)h(the)f(stan-)191 4355 y(dard)35 b(lo)s(cations.)58 b(If)35 b(MPI)g(is)h(installed)g(in)g(a)g (nonstandard)e(path)h(one)h(ma)m(y)h(sp)s(ecify)e(this)g(using)h(the) 191 4468 y Ft(--with-mpi=PATH)30 b FA(option.)51 b(Similarly)34 b(if)g(the)g(AdjoinableMPI)g(libraries)g(are)h(in)e(an)h(nonstandard) 191 4581 y(path)h(this)g(ma)m(y)h(b)s(e)f(sp)s(eci\014ed)f(using)h(the) g Ft(--with-ampi=PATH)c FA(option.)56 b(When)35 b(MPI)g(and)g(Adjoin-) 191 4694 y(ableMPI)44 b(supp)s(ort)e(is)i(compiled)h(in)m(to)f Fq(ADOL-C)g FA(the)g(generated)h(library)e(will)h(b)s(e)g(unsuitable)f (for)191 4807 y(linking)h(with)f(non-MPI)g(programs)h(and)f(is)g (called)i Ft(libadolc_ampi)p FA(.)77 b(Therefore)43 b(the)h(user)f (pro-)191 4920 y(grams)d(should)f(use)h(the)h(\015ag)f Ft(-ladolc_ampi)d FA(instead)j(of)h Ft(-ladolc)d FA(in)i(this)g(case.) 71 b(An)40 b(adv)-5 b(anced)191 5033 y(user)27 b(ma)m(y)i(infact)g(sp)s (ecify)f(whatev)m(er)h(name)f(the)h(resulting)f Fq(ADOL-C)g FA(library)g(should)f(ha)m(v)m(e)j(using)e(the)191 5146 y Ft(--with-soname=SONAME)d FA(option.)p Black Black eop end %%Page: 74 74 TeXDict begin 74 73 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.74) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(74)1861 b Fu(9)91 b(INST)-8 b(ALLING)30 b(AND)h(USING)g(ADOL-C)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.9.2) cvn /DEST pdfmark end 191 515 a 91 x FB(9.2)112 b(Compiling)39 b(and)f(Linking)h(the)e (Example)i(Programs)191 827 y FA(The)28 b(installation)j(pro)s(cedure)c (describ)s(ed)h(in)1776 827 y SDict begin H.S end 1776 827 a Black FA(Section)j(9.1)p Black 2210 765 a SDict begin H.R end 2210 765 a 2210 827 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.1) cvn H.B /ANN pdfmark end 2210 827 a 29 w FA(also)e(pro)m(vides)g(the)g Ft(Makefile)p FA(s)d(to)k(compile)191 940 y(the)43 b(example)g(programs)f(in)h(the)f(directories)i Ft(/ADOL-C/exam)o(ple)o(s)37 b FA(and)42 b(the)h(ad-)191 1053 y(ditional)32 b(examples)f(in)g Ft(/ADOL-C/ex)o(ampl)o(es/a)o(ddi)o(tion)o(al_e)o(xam)o (ples)o FA(.)36 b(Ho)m(w)m(ev)m(er,)191 1166 y(one)42 b(has)f(to)h(execute)g(the)g Ft(configure)c FA(command)j(with)g (appropriate)h(options)f(for)g(the)h(ADOL-C)191 1279 y(pac)m(k)-5 b(age)32 b(to)f(enable)g(the)g(compilation)h(of)e (examples.)42 b(Av)-5 b(ailable)32 b(options)e(are:)p Black Black 674 1496 a Ft(--enable-docexa)95 b FA(build)29 b(all)j(examples)f(discussed)e(in)h(this)g(man)m(ual)1489 1609 y(\(compare)1888 1609 y SDict begin H.S end 1888 1609 a Black FA(Section)i(10)p Black 2297 1547 a SDict begin H.R end 2297 1547 a 2297 1609 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.10) cvn H.B /ANN pdfmark end 2297 1609 a FA(\))674 1722 y Ft(--enable-addexa)95 b FA(build)29 b(all)j(additional)f(examples)1489 1835 y(\(See)g(\014le)g Ft(README)d FA(in)i(the)h(v)-5 b(arious)30 b(sub)s(directories\))332 2044 y(Just)38 b(calling)i Ft(make)d FA(from)h(the)h(pac)m(k)-5 b(ages)40 b(base)e(directory)h(generates)h(all)f(con\014gured)f (examples)191 2157 y(and)26 b(the)h(library)g(if)g(necessary)-8 b(.)40 b(Compiling)27 b(from)g(sub)s(directory)f Ft(examples)e FA(or)j(one)h(of)f(its)g(subfolders)191 2270 y(is)i(p)s(ossible)f(to)s (o.)40 b(A)m(t)30 b(least)g(one)e(kind)g(of)h(the)g(ADOL-C)f(library)g (\(static)j(or)d(shared\))g(m)m(ust)h(ha)m(v)m(e)g(b)s(een)191 2383 y(built)h(previously)g(in)g(that)h(case.)42 b(Hence,)31 b(building)f(the)h(library)f(is)g(alw)m(a)m(ys)i(the)e(\014rst)g(step.) 332 2546 y(F)-8 b(or)75 b(Compiling)g(the)f(library)g(and)g(the)g(do)s (cumen)m(ted)h(examples)f(on)h(Windo)m(ws)f(using)191 2659 y(Visual)80 b(Studio)g(please)h(refer)e(to)i(the)f Ft()75 b FA(\014les)80 b(in)g(the)g Ft()p FA(,)191 2772 y Ft()25 b FA(and)k Ft()d FA(sub)s(directories.)191 2915 y SDict begin H.S end 191 2915 a 191 2915 a SDict begin 13.6 H.A end 191 2915 a 191 2915 a SDict begin [/View [/XYZ H.V]/Dest (subsection.9.3) cvn /DEST pdfmark end 191 2915 a 146 x FB(9.3)112 b(Description)38 b(of)g(Imp)s(ortan)m(t)f (Header)h(Files)191 3282 y FA(The)43 b(application)i(of)f(the)f (facilities)j(of)e(ADOL-C)g(requires)f(the)h(user)e(source)i(co)s(de)g (\(program)g(or)191 3395 y(mo)s(dule\))32 b(to)i(include)e(appropriate) h(header)g(\014les)f(where)g(the)h(desired)f(data)i(t)m(yp)s(es)f(and)f (routines)g(are)191 3508 y(protot)m(yp)s(ed.)44 b(The)31 b(new)g(hierarc)m(h)m(y)h(of)f(header)h(\014les)f(enables)h(the)f(user) g(to)h(tak)m(e)h(one)f(of)f(t)m(w)m(o)i(p)s(ossible)191 3621 y(w)m(a)m(ys)26 b(to)f(access)h(the)f(righ)m(t)g(in)m(terfaces.)41 b(The)24 b(\014rst)g(and)g(easy)h(w)m(a)m(y)h(is)f(recommended)f(to)i (b)s(eginners:)37 b(As)191 3734 y(indicated)22 b(in)674 3734 y SDict begin H.S end 674 3734 a Black FA(T)-8 b(able)31 b(5)p Black 969 3671 a SDict begin H.R end 969 3671 a 969 3734 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.5) cvn H.B /ANN pdfmark end 969 3734 a 22 w FA(the)22 b(pro)m(vided)f Fr(glob)-5 b(al)23 b FA(header)e(\014le)h Ft()c FA(can)k(b)s(e)f(included)g(b)m(y)g(an)m(y)191 3847 y(user)28 b(co)s(de)h(to)h(supp)s(ort)d(all)j(capabilities)h(of)e (ADOL-C)g(dep)s(ending)f(on)h(the)g(particular)g(programming)191 3960 y(language)j(of)e(the)h(source.)p Black Black Black 226 4072 3530 4 v 224 4371 4 299 v 276 4243 a Fd()p 1174 4371 V 1276 4142 a Fc(!)100 b Fy(global)26 b(header)h(\014le)h(a)n (v)-5 b(ailable)26 b(for)h(easy)g(use)g(of)h(ADOL-C;)1303 4242 y Fb(\017)126 b Fy(includes)36 b(all)g(ADOL-C)g(header)g(\014les)g (dep)r(ending)h(on)f(whether)g(the)1471 4341 y(users)26 b(source)h(is)g(C++)g(or)g(C)g(co)r(de.)p 3754 4371 V 226 4375 3530 4 v 224 4873 4 499 v 276 4644 a Fd() p 1174 4873 V 1276 4444 a Fc(!)100 b Fy(user)27 b(customization)f(of)i (ADOL-C)f(pac)n(k)-5 b(age)27 b(\(see)3105 4444 y SDict begin H.S end 3105 4444 a Black Fy(Section)h(2.2)p Black 3502 4388 a SDict begin H.R end 3502 4388 a 3502 4444 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.2) cvn H.B /ANN pdfmark end 3502 4444 a Fy(\);)1303 4544 y Fb(\017)126 b Fy(after)20 b(a)g(c)n(hange)f(of)i(user)f(options)f(the)i(ADOL-C)g (library)e Fd(libadolc.*)1471 4643 y Fy(has)27 b(to)g(b)r(e)h(rebuilt)g (\(see)2267 4643 y SDict begin H.S end 2267 4643 a Black Fy(Section)g(9.1)p Black 2664 4587 a SDict begin H.R end 2664 4587 a 2664 4643 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.1) cvn H.B /ANN pdfmark end 2664 4643 a Fy(\);)1303 4743 y Fb(\017)126 b Fy(is)35 b(included)g(b)n(y)g(all)g (ADOL-C)g(header)f(\014les)h(and)g(th)n(us)h(b)n(y)f(all)f(user)1471 4843 y(programs.)p 3754 4873 4 499 v 226 4876 3530 4 v Black 1441 5030 a FA(T)-8 b(able)31 b(5:)1802 5030 y SDict begin H.S end 1802 5030 a 1802 5030 a SDict begin H.R end 1802 5030 a 1802 5030 a SDict begin [/View [/XYZ H.V]/Dest (table.5) cvn /DEST pdfmark end 1802 5030 a FA(Global)h(header)e(\014les)p Black Black 332 5217 a(The)j(second)h(w)m(a)m(y)h(is)f(mean)m(t)h(for)e(the)h(more)g (adv)-5 b(anced)34 b(ADOL-C)g(user:)47 b(Some)34 b(source)g(co)s(de)g (in-)191 5330 y(cludes)39 b(only)g(those)h(in)m(terfaces)g(used)f(b)m (y)g(the)g(particular)h(application.)68 b(The)39 b(resp)s(ectiv)m(ely)h (needed)p Black Black eop end %%Page: 75 75 TeXDict begin 75 74 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.75) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(9.4)92 b(Compiling)30 b(and)g(Linking)g(C/C++)g(Programs)1624 b FA(75)p Black 191 606 a(header)32 b(\014les)g(are)h(indicated)g (throughout)f(the)g(man)m(ual.)47 b(Existing)33 b(application)h (determined)e(dep)s(en-)191 719 y(dences)22 b(b)s(et)m(w)m(een)g(the)g (pro)m(vided)g(ADOL-C)f(routines)h(are)g(realized)h(b)m(y)f(automatic)i (includes)d(of)h(headers)191 832 y(in)32 b(order)f(to)i(main)m(tain)h (easy)e(use.)46 b(The)32 b(header)g(\014les)g(imp)s(ortan)m(t)g(to)h (the)g(user)e(are)i(describ)s(ed)e(in)h(the)191 945 y SDict begin H.S end 191 945 a Black FA(T)-8 b(able)31 b(6)p Black 486 882 a SDict begin H.R end 486 882 a 486 945 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.6) cvn H.B /ANN pdfmark end 486 945 a 31 w FA(and)693 945 y SDict begin H.S end 693 945 a Black FA(T)-8 b(able)31 b(7)p Black 989 882 a SDict begin H.R end 989 882 a 989 945 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (table.7) cvn H.B /ANN pdfmark end 989 945 a FA(.)p Black Black Black 202 1043 3578 4 v 201 1242 4 200 v 252 1164 a Fd()p 1198 1242 V 1299 1113 a Fc(!)100 b Fy(pro)n(vides)33 b(the)h(in)n(terface)g(to)g(the)g(basic)g(activ)n(e)f(scalar)g(data)g (t)n(yp)r(e)h(of)1494 1213 y(ADOL-C:)28 b Fj(class)f(adouble)f Fy(\(see)2524 1213 y SDict begin H.S end 2524 1213 a Black Fy(Section)h(1)p Black 2856 1156 a SDict begin H.R end 2856 1156 a 2856 1213 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.1) cvn H.B /ANN pdfmark end 2856 1213 a Fy(\);)p 3778 1242 4 200 v 202 1246 3578 4 v 201 1644 4 399 v 252 1466 a Fd()p 1198 1644 V 1299 1315 a Fc(!)100 b Fy(pro)n(vides)29 b(functions)i(to)f (start/stop)f(the)i(tracing)e(of)h(activ)n(e)g(sections)1494 1415 y(\(see)1670 1415 y SDict begin H.S end 1670 1415 a Black Fy(Section)d(1.3)p Black 2067 1358 a SDict begin H.R end 2067 1358 a 2067 1415 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.1.3) cvn H.B /ANN pdfmark end 2067 1415 a Fy(\))37 b(as)f(w)n(ell)g(as)g(utilities)i(to)e(obtain)h(tap)r(e)g (statistics)1494 1515 y(\(see)1661 1515 y SDict begin H.S end 1661 1515 a Black Fy(Section)27 b(2.1)p Black 2057 1458 a SDict begin H.R end 2057 1458 a 2057 1515 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.2.1) cvn H.B /ANN pdfmark end 2057 1515 a Fy(\);)1326 1614 y Fb(\017)126 b Fy(is)28 b(included)g(b)n(y)f(the)h(header)f Fd() p Fy(.)p 3778 1644 4 399 v 202 1648 3578 4 v Black 1048 1807 a FA(T)-8 b(able)31 b(6:)1409 1807 y SDict begin H.S end 1409 1807 a 1409 1807 a SDict begin H.R end 1409 1807 a 1409 1807 a SDict begin [/View [/XYZ H.V]/Dest (table.6) cvn /DEST pdfmark end 1409 1807 a FA(Imp)s(ortan)m(t)g (header)f(\014les:)40 b(tracing/taping)p Black Black Black Black Black 202 1973 3578 4 v 201 2471 4 499 v 252 2243 a Fd()p 1198 2471 V 1299 2043 a Fc(!)100 b Fy(pro)n(vides)25 b(in)n(terfaces)h(to)g(the)h Fj(fo)n(rw)n(a)n(rd)f Fy(and)g Fj(reverse)h Fy(routines)f(as)g(basic) 1494 2143 y(v)n(ersions)g(of)i(deriv)-5 b(ativ)n(e)26 b(ev)-5 b(aluation)27 b(\(see)2850 2143 y SDict begin H.S end 2850 2143 a Black Fy(Section)g(5)p Black 3182 2086 a SDict begin H.R end 3182 2086 a 3182 2143 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (section.5) cvn H.B /ANN pdfmark end 3182 2143 a Fy(\);)1326 2242 y Fb(\017)126 b Fy(comprises)27 b(C++,)f(C,)i(and)g(F)-7 b(ortran-callable)25 b(v)n(ersions;)1326 2342 y Fb(\017)126 b Fy(includes)28 b(the)g(header)f Fd()o Fy(;)1326 2442 y Fb(\017)126 b Fy(is)28 b(included)g(b)n(y)f(the)h (header)f Fd()o Fy(.)p 3778 2471 4 499 v 202 2475 3578 4 v 201 2774 4 299 v 252 2645 a Fd()p 1198 2774 V 1299 2545 a Fc(!)100 b Fy(pro)n(vides)32 b(\\easy)g(to)i(use")f(driv) n(ers)f(for)h(solving)f(optimization)h(prob-)1494 2644 y(lems)28 b(and)f(nonlinear)g(equations)g(\(see)2748 2644 y SDict begin H.S end 2748 2644 a Black Fy(Section)h(3.1)p Black 3145 2587 a SDict begin H.R end 3145 2587 a 3145 2644 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end 3145 2644 a Fy(\);)1326 2744 y Fb(\017)126 b Fy(comprises)27 b(C)g(and)h(F)-7 b(ortran-callable)25 b(v)n(ersions.)p 3778 2774 4 299 v 202 2777 3578 4 v 201 3275 4 499 v 252 2996 a Fd()p 1198 3275 V 1299 2847 a Fc(!)100 b Fy(pro)n(vides)20 b(the)i(\\easy)e(to)h(use")g(sparse)f (driv)n(ers)g(to)h(exploit)g(the)h(sparsit)n(y)1494 2946 y(structure)27 b(of)h(Jacobians)e(\(see)2491 2946 y SDict begin H.S end 2491 2946 a Black Fy(Section)i(3.3)p Black 2888 2890 a SDict begin H.R end 2888 2890 a 2888 2946 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.3) cvn H.B /ANN pdfmark end 2888 2946 a Fy(\);)1299 3046 y Fc(!)100 b Fy(pro)n(vides)24 b(in)n(terfaces)g(to)h(C++)o(-callable)f(v)n (ersions)g(of)h Fj(fo)n(rw)n(a)n(rd)f Fy(and)h Fj(re-)1494 3146 y(verse)j Fy(routines)f(propagating)f(bit)i(patterns)f(\(see)3098 3146 y SDict begin H.S end 3098 3146 a Black Fy(Section)h(5.3)p Black 3495 3089 a SDict begin H.R end 3495 3089 a 3495 3146 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.5.3) cvn H.B /ANN pdfmark end 3495 3146 a Fy(\);)1326 3245 y Fb(\017)126 b Fy(is)28 b(included)g(b)n(y)f(the)h(header)f Fd()p Fy(.)p 3778 3275 4 499 v 202 3278 3578 4 v 201 3478 4 200 v 252 3348 a Fd()p 1198 3478 V 1299 3348 a Fc(!)100 b Fy(pro)n(vides)23 b(in)n(terfaces)g(to)h(the)g(underlying)g (C-callable)f(v)n(ersions)f(of)i Fj(fo)n(r-)1494 3448 y(w)n(a)n(rd)j Fy(and)h Fj(reverse)g Fy(routines)f(propagating)e(bit)j (patterns.)p 3778 3478 V 202 3481 3578 4 v 201 3880 4 399 v 252 3659 a Fd()p 1198 3880 V 1299 3551 a Fc(!)100 b Fy(pro)n(vides)31 b(\\easy)h(to)g(use")g(driv)n(ers)f(for)h(n)n(umerical)g(solution)g(of) g(ordi-)1494 3650 y(nary)27 b(di\013eren)n(tial)g(equations)g(\(see) 2640 3650 y SDict begin H.S end 2640 3650 a Black Fy(Section)g(3.2)p Black 3036 3594 a SDict begin H.R end 3036 3594 a 3036 3650 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.2) cvn H.B /ANN pdfmark end 3036 3650 a Fy(\);)1326 3750 y Fb(\017)126 b Fy(comprises)27 b(C++,)f(C,)i(and)g(F)-7 b(ortran-callable)25 b(v)n(ersions;)1326 3850 y Fb(\017)126 b Fy(includes)28 b(the)g(header)f Fd()o Fy(.)p 3778 3880 4 399 v 202 3883 3578 4 v 201 4281 4 399 v 252 4052 a Fd()p 1198 4281 V 1299 3953 a Fc(!)100 b Fy(pro)n(vides)34 b(\\easy)g(to)h(use")f(driv)n(ers)g(for)h(ev)-5 b(aluation)34 b(of)h(higher)g(order)1494 4052 y(deriv)-5 b(ativ)n(e)30 b(tensors)g(\(see)2334 4052 y SDict begin H.S end 2334 4052 a Black Fy(Section)e(3.4)p Black 2731 3995 a SDict begin H.R end 2731 3995 a 2731 4052 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.4) cvn H.B /ANN pdfmark end 2731 4052 a Fy(\))j(and)g(in)n(v)n(erse/implicit)f(func-)1494 4152 y(tion)e(di\013eren)n(tiation)f(\(see)2367 4152 y SDict begin H.S end 2367 4152 a Black Fy(Section)g(3.5)p Black 2763 4095 a SDict begin H.R end 2763 4095 a 2763 4152 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.3.5) cvn H.B /ANN pdfmark end 2763 4152 a Fy(\);)1326 4251 y Fb(\017)126 b Fy(comprises)27 b(C++)f(and)i(C-callable)e(v)n(ersions.)p 3778 4281 4 399 v 202 4285 3578 4 v 201 4484 4 200 v 252 4405 a Fd()p 1198 4484 V 1299 4354 a Fc(!)100 b Fy(pro)n(vides)31 b(C++)h(and)h(C)f(functions)h(for)f (allo)r(cation)g(of)h(v)n(ectors,)f(ma-)1494 4454 y(trices)27 b(and)h(three)f(dimensional)g(arra)n(ys)e(of)j Fj(double)p Fy(s.)p 3778 4484 V 202 4487 3578 4 v Black 855 4642 a FA(T)-8 b(able)31 b(7:)1216 4642 y SDict begin H.S end 1216 4642 a 1216 4642 a SDict begin H.R end 1216 4642 a 1216 4642 a SDict begin [/View [/XYZ H.V]/Dest (table.7) cvn /DEST pdfmark end 1216 4642 a FA(Imp)s(ortan)m(t)f(header) g(\014les:)41 b(ev)-5 b(aluation)32 b(of)e(deriv)-5 b(ativ)m(es)p Black Black 191 4830 a SDict begin H.S end 191 4830 a 191 4830 a SDict begin 13.6 H.A end 191 4830 a 191 4830 a SDict begin [/View [/XYZ H.V]/Dest (subsection.9.4) cvn /DEST pdfmark end 191 4830 a 166 x FB(9.4)112 b(Compiling)39 b(and)f(Linking)h(C/C++)f(Programs)191 5217 y FA(T)-8 b(o)37 b(compile)h(a)g(C/C++)e(program)h(or)g(single)h(mo)s(dule)e (using)h(ADOL-C)g(data)g(t)m(yp)s(es)g(and)g(routines)191 5330 y(one)32 b(has)f(to)i(ensure)e(that)h(all)g(necessary)g(header)g (\014les)f(according)i(to)2650 5330 y SDict begin H.S end 2650 5330 a Black FA(Section)f(9.3)p Black 3085 5268 a SDict begin H.R end 3085 5268 a 3085 5330 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.3) cvn H.B /ANN pdfmark end 3085 5330 a 31 w FA(are)g(included.)44 b(All)p Black Black eop end %%Page: 76 76 TeXDict begin 76 75 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.76) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(76)1861 b Fu(9)91 b(INST)-8 b(ALLING)30 b(AND)h(USING)g(ADOL-C)p Black 191 606 a FA(mo)s(dules)c(in)m(v)m(olving)j Fr(active)e FA(data)h(t)m(yp)s(es)f(as)g Fq(adouble)g FA(ha)m(v)m(e)h(to)g(b)s(e)f (compiled)g(as)g(C++.)39 b(Mo)s(dules)28 b(that)191 719 y(mak)m(e)k(use)e(of)h(a)g(previously)f(generated)i(tap)s(e)f(to)g(ev) -5 b(aluate)32 b(deriv)-5 b(ativ)m(es)32 b(can)f(either)g(b)s(e)f (programmed)191 832 y(in)45 b(ANSI-C)f(\(while)i(a)m(v)m(oiding)h(all)f (C++)e(in)m(terfaces\))j(or)e(in)f(C++.)84 b(Dep)s(ending)45 b(on)g(the)g(c)m(hosen)191 945 y(programming)31 b(language)i(the)f (header)f(\014les)h(pro)m(vide)f(the)h(righ)m(t)g(ADOL-C)g(protot)m(yp) s(es.)44 b(F)-8 b(or)33 b(linking)191 1058 y(the)e(resulting)f(ob)5 b(ject)31 b(co)s(des)g(the)f(library)g Ft(libadolc.*)e FA(m)m(ust)i(b)s(e)g(used)f(\(see)2942 1058 y SDict begin H.S end 2942 1058 a Black FA(Section)i(9.1)p Black 3376 996 a SDict begin H.R end 3376 996 a 3376 1058 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.1) cvn H.B /ANN pdfmark end 3376 1058 a FA(\).)191 1214 y SDict begin H.S end 191 1214 a 191 1214 a SDict begin 13.6 H.A end 191 1214 a 191 1214 a SDict begin [/View [/XYZ H.V]/Dest (subsection.9.5) cvn /DEST pdfmark end 191 1214 a 143 x FB(9.5)112 b(Adding)38 b(Quadratures)h(as)f(Sp)s(ecial)h(F)-9 b(unctions)191 1580 y FA(Supp)s(ose)29 b(an)h(in)m(tegral)1674 1789 y Fs(f)10 b FA(\()p Fs(x)p FA(\))25 b(=)2018 1647 y Fi(x)1972 1665 y Fl(Z)1979 1925 y FD(0)2078 1789 y Fs(g)s FA(\()p Fs(t)p FA(\))p Fs(dt)191 2064 y FA(is)30 b(ev)-5 b(aluated)32 b(n)m(umerically)f(b)m(y)f(a)h(user-supplied)e(function)p Black Black 1410 2305 a Fq(double)h(myintegral\(double&)i(x\);)191 2546 y FA(Similarly)-8 b(,)29 b(let)g(us)e(supp)s(ose)g(that)i(the)f (in)m(tegrand)g(itself)h(is)f(ev)-5 b(aluated)29 b(b)m(y)f(a)g (user-supplied)f(blo)s(c)m(k)h(of)g(C)191 2659 y(co)s(de)g Fq(integrand)p FA(,)h(whic)m(h)f(computes)h(a)f(v)-5 b(ariable)29 b(with)f(the)h(\014xed)e(name)i Fq(val)e FA(from)h(a)h(v)-5 b(ariable)29 b(with)f(the)191 2772 y(\014xed)i(name)g Fq(a)m(rg)p FA(.)41 b(In)30 b(man)m(y)h(cases)g(of)f (in)m(terest,)i Fq(integrand)e FA(will)h(simply)f(b)s(e)g(of)g(the)h (form)p Black Black 1475 3013 a Fo(f)g Fq(val)f(=)g(exp)m(ression\(a)m (rg\))i Fo(g)46 b FA(.)191 3255 y(In)24 b(general,)j(the)e(\014nal)g (assignmen)m(t)g(to)h Fq(val)e FA(ma)m(y)h(b)s(e)g(preceded)f(b)m(y)h (sev)m(eral)h(in)m(termediate)g(calculations,)191 3368 y(p)s(ossibly)k(in)m(v)m(olving)i(lo)s(cal)f(activ)m(e)i(v)-5 b(ariables)31 b(of)g(t)m(yp)s(e)f Fq(adouble)p FA(,)h(but)f(no)g (external)i(or)e(static)i(v)-5 b(ariables)191 3480 y(of)29 b(that)h(t)m(yp)s(e.)41 b(Ho)m(w)m(ev)m(er,)31 b Fq(integrand)e FA(ma)m(y)h(in)m(v)m(olv)m(e)i(lo)s(cal)e(or)f(global)i(v)-5 b(ariables)30 b(of)f(t)m(yp)s(e)g Fq(double)h FA(or)f Fq(int)p FA(,)191 3593 y(pro)m(vided)36 b(they)g(do)h(not)f(dep)s(end)f (on)h(the)g(v)-5 b(alue)37 b(of)g Fq(a)m(rg)p FA(.)59 b(The)35 b(v)-5 b(ariables)37 b Fq(a)m(rg)g FA(and)f Fq(val)g FA(are)g(declared)191 3706 y(automatically;)d(and)d(as)g Fq(integrand)g FA(is)g(a)h(blo)s(c)m(k)g(rather)f(than)g(a)g(function,) g Fq(integrand)g FA(should)f(ha)m(v)m(e)j(no)191 3819 y(header)e(line.)332 3982 y(No)m(w)d(the)g(function)f Fq(myintegral)h FA(can)f(b)s(e)g(o)m(v)m(erloaded)j(for)d Fq(adouble)h FA(argumen)m(ts)f(and)g(th)m(us)g(included)191 4095 y(in)k(the)h(library)f(of)g(elemen)m(tary)i(functions)e(b)m(y)g (the)h(follo)m(wing)h(mo)s(di\014cations:)191 4201 y SDict begin H.S end 191 4201 a 191 4201 a SDict begin 13.6 H.A end 191 4201 a 191 4201 a SDict begin [/View [/XYZ H.V]/Dest (Item.6) cvn /DEST pdfmark end 191 4201 a Black 302 4336 a FA(1.)p Black 46 w(A)m(t)g(the)e(end)g(of)g(the)h (\014le)f Ft()p FA(,)d(include)k(the)f(full)g(co)s(de)h (de\014ning)418 4449 y Fq(double)g(myintegral\(double&)g(x\))p FA(,)g(and)f(add)f(the)i(line)p Black Black 1418 4680 a Fq(extend)p 1672 4680 28 4 v 34 w(quad\(myintegral,)f(integrand\);) 418 4912 y FA(This)35 b(macro)h(is)f(extended)h(to)g(the)g (de\014nition)f(of)g Fq(adouble)h(myintegral\(adouble&)g(a)m(rg\))p FA(.)57 b(Then)418 5024 y(remak)m(e)32 b(the)e(library)g Ft(libadolc.*)e FA(\(see)1874 5024 y SDict begin H.S end 1874 5024 a Black FA(Section)j(9.1)p Black 2308 4962 a SDict begin H.R end 2308 4962 a 2308 5024 a SDict begin [/Color [1 0 0]/H /I/Border [0 0 1]BorderArrayPatch/Subtype /Link/Dest (subsection.9.1) cvn H.B /ANN pdfmark end 2308 5024 a FA(\).)191 5087 y SDict begin H.S end 191 5087 a 191 5087 a SDict begin 13.6 H.A end 191 5087 a 191 5087 a SDict begin [/View [/XYZ H.V]/Dest (Item.7) cvn /DEST pdfmark end 191 5087 a Black 302 5217 a FA(2.)p Black 46 w(In)j(the)h(de\014nition)f(of)h(the)g(class)h Fq(ADOLC)p 1898 5217 28 4 v 32 w(DLL)p 2094 5217 V 33 w(EXPORT)e(adouble)h FA(in)f Ft()p FA(,)418 5330 y(add)c(the)h(statemen)m(t)p Black Black eop end %%Page: 77 77 TeXDict begin 77 76 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.77) cvn /DEST pdfmark end 183 199 a Black 3700 307 a FA(77)p Black Black Black 1393 606 a Fq(friend)30 b(adouble)h(myintegral\(adouble&\))p FA(.)191 841 y(In)38 b(the)h(\014rst)f(mo)s(di\014cation,)j Fq(myintegral)e FA(represen)m(ts)g(the)f(name)h(of)g(the)g Fq(double)g FA(function,)i(whereas)191 954 y Fq(integrand)30 b FA(represen)m(ts)h (the)f(actual)i(blo)s(c)m(k)f(of)f(C)g(co)s(de.)332 1117 y(F)-8 b(or)28 b(example,)h(in)e(case)h(of)g(the)f(in)m(v)m(erse)h(h)m (yp)s(erb)s(olic)f(cosine,)i(w)m(e)e(ha)m(v)m(e)i Fq(myintegral)e FA(=)g Fq(acosh)p FA(.)40 b(Then)191 1229 y Fq(integrand)30 b FA(can)h(b)s(e)f(written)g(as)h Fo(f)g Fq(val)e(=)h(sqrt\(a)m(rg*a)m (rg-1\);)k Fo(g)c FA(so)h(that)g(the)g(line)p Black Black 1185 1464 a Fq(extend)p 1439 1464 28 4 v 34 w(quad\(acosh,val)f(=)g (sqrt\(a)m(rg*a)m(rg-1\)\);)191 1699 y FA(can)e(b)s(e)f(added)g(to)h (the)g(\014le)f Ft()p FA(.)36 b(A)28 b(mathematically)i (equiv)-5 b(alen)m(t)29 b(but)e(longer)h(represen-)191 1812 y(tation)k(of)e Fq(integrand)h FA(is)p Black Black Black Black 867 2047 a Fo(f)f Fq(adouble)h(temp)g(=)f(a)m(rg;)1265 2160 y(temp)h(=)f(temp*temp;)1265 2273 y(val)g(=)g(sqrt\(temp-1\);)i Fo(g)191 2507 y FA(The)24 b(co)s(de)h(blo)s(c)m(k)g Fq(integrand)f FA(ma)m(y)h(call)h(on)e(an)m(y)h(elemen)m(tary)h(function)e(that)h(has) f(already)h(b)s(een)f(de\014ned)191 2620 y(in)30 b(\014le)g Ft()p FA(,)d(so)k(that)g(one)g(ma)m(y)g(also)g(in)m(tro)s (duce)f(iterated)i(in)m(tegrals.)191 2777 y SDict begin H.S end 191 2777 a 191 2777 a SDict begin 13.6 H.A end 191 2777 a 191 2777 a SDict begin [/View [/XYZ H.V]/Dest (section.10) cvn /DEST pdfmark end 191 2777 a 179 x FE(10)135 b(Example)46 b(Co)t(des)191 3209 y FA(The)29 b(follo)m(wing)i(listings) g(are)f(all)g(simpli\014ed)f(v)m(ersions)h(of)g(co)s(des)g(that)g(are)g (con)m(tained)h(in)e(the)h(example)191 3322 y(sub)s(directory)23 b Ft(/ADOL-C/exam)o(ple)o(s)18 b FA(of)25 b(ADOL-C.)g(In)e(particular,)j(w)m(e)f(ha)m(v)m(e)g(left)g(out)191 3435 y(timings,)31 b(whic)m(h)f(are)h(included)e(in)i(the)f(complete)i (co)s(des.)191 3579 y SDict begin H.S end 191 3579 a 191 3579 a SDict begin 13.6 H.A end 191 3579 a 191 3579 a SDict begin [/View [/XYZ H.V]/Dest (subsection.10.1) cvn /DEST pdfmark end 191 3579 a 148 x FB(10.1)112 b(Sp)s(eelp)s(enning's)41 b(Example)d(\()p Fa(speelpenning.cpp)p FB(\))191 3949 y FA(The)30 b(\014rst)f(example)j(ev)-5 b(aluates)31 b(the)g(gradien)m(t)g(and)f(the)h(Hessian)f(of)h(the)g(function)1593 4229 y Fs(y)53 b FA(=)d Fs(f)10 b FA(\()p Fs(x)p FA(\))51 b(=)2161 4115 y Fi(n)p Fm(\000)p FD(1)2169 4142 y Fl(Y)2170 4338 y Fi(i)p FD(=0)2309 4229 y Fs(x)2361 4243 y Fi(i)191 4506 y FA(using)30 b(the)g(appropriate)h(driv)m(ers)f Fq(gradient)g FA(and)g Fq(hessian)p FA(.)p Black Black 191 4765 a Ft(#include)45 b()712 b(//)47 b(use)g(of)g(active)f(doubles)g(and)h(taping)191 4878 y(#include)e()328 b(//)47 b(use)g(of)g("Easy)f (to)i(Use")e(drivers)1861 4991 y(//)i(gradient\(.\))c(and)j (hessian\(.\))191 5104 y(#include)e()760 b(//)47 b(use)g(of)g(taping)191 5217 y(...)191 5330 y(void)g(main\(\))f ({)p Black Black eop end %%Page: 78 78 TeXDict begin 78 77 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.78) cvn /DEST pdfmark end 183 199 a Black 191 307 a FA(78)2517 b Fu(10)92 b(EXAMPLE)31 b(CODES)p Black 191 606 a Ft(int)47 b(n,i,j;)191 719 y(size_t)f(tape_stats[STAT_SIZE];) 191 832 y(cout)h(<<)g("SPEELPENNINGS)d(PRODUCT)h(\(ADOL-C)h(Documented) f(Example\))h(\\n";)191 945 y(cout)h(<<)g("number)f(of)h(independent)d (variables)i(=)h(?)95 b(\\n";)191 1058 y(cin)47 b(>>)g(n;)191 1171 y(double*)f(xp)h(=)g(new)g(double[n];)191 1284 y(double)94 b(yp)47 b(=)g(0.0;)191 1396 y(adouble*)e(x)j(=)f(new)g(adouble[n];)191 1509 y(adouble)93 b(y)48 b(=)f(1;)191 1622 y(for\(i=0;i>=)f(yp;)286 2300 y(delete[])f(x;)191 2413 y(trace_off\(\);)191 2526 y(tapestats\(1,tape_stats\);)518 b(//)48 b(reading)d(of)j(tape)e(statistics)191 2638 y(cout<<"maxlive)e ("<j\))1096 b(//)48 b(lower)e(half)h(of)g(hessian)477 4332 y(errh)g(+=)g (fabs\(H[i][j]-g[i]/xp[j]\);)41 b(})47 b(})191 4445 y(cout)g(<<)g (yp-1/\(1.0+n\))d(<<)j(")h(error)e(in)h(function)f(\\n";)191 4558 y(cout)h(<<)g(errg)f(<<")h(error)g(in)g(gradient)e(\\n";)191 4671 y(cout)i(<<)g(errh)f(<<")h(consistency)e(check)h(\\n";)191 4784 y(})1622 b(//)48 b(end)e(main)p Black Black eop end %%Page: 79 79 TeXDict begin 79 78 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.79) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(10.2)92 b(P)m(o)m(w)m(er)32 b(Example)f(\()p Ft(powexam.cpp)p Fu(\))2009 b FA(79)p Black 191 515 a SDict begin H.S end 191 515 a 191 515 a SDict begin 13.6 H.A end 191 515 a 191 515 a SDict begin [/View [/XYZ H.V]/Dest (subsection.10.2) cvn /DEST pdfmark end 191 515 a 91 x FB(10.2)112 b(P)m(o)m(w)m(er)37 b(Example)h(\()p Fa(powexam.cpp)p FB(\))191 827 y FA(The)24 b(second)g(example)h(function)f(ev)-5 b(aluates)26 b(the)e Fs(n)p FA(-th)g(p)s(o)m(w)m(er)h(of)f(a)h(real)g(v)-5 b(ariable)25 b Fs(x)f FA(in)g(log)3316 849 y FD(2)3371 827 y Fs(n)g FA(m)m(ultipli-)191 940 y(cations)31 b(b)m(y)g(recursiv)m (e)f(halving)h(of)f(the)h(exp)s(onen)m(t.)41 b(Since)30 b(there)g(is)h(only)f(one)h(indep)s(enden)m(t)e(v)-5 b(ariable,)191 1053 y(the)36 b(scalar)i(deriv)-5 b(ativ)m(e)37 b(can)g(b)s(e)f(computed)g(b)m(y)g(using)g(b)s(oth)f Fq(fo)m(rw)m(a)m(rd)j FA(and)e Fq(reverse)p FA(,)j(and)c(the)i(results) 191 1166 y(are)31 b(subsequen)m(tly)f(compared.)p Black Black 191 1387 a Ft(#include)45 b()808 b(//)47 b(use)g(of)g(ALL)g(ADOL-C)f(interfaces)191 1613 y(adouble)g(power\(adouble)e(x,)j(int)g(n\))g({)191 1726 y(adouble)f(z=1;)191 1839 y(if)h(\(n>0\))f({)1193 b(//)48 b(recursion)d(and)i(branches)286 1952 y(int)g(nh)g(=n/2;)1001 b(//)48 b(that)e(do)h(not)g(depend)f(on)286 2065 y(z)i(=)f (power\(x,nh\);)808 b(//)48 b(adoubles)d(are)i(fine)g(!!!!)286 2178 y(z)h(*=)f(z;)286 2291 y(if)h(\(2*nh)e(!=)h(n\))382 2404 y(z)g(*=)g(x;)286 2517 y(return)f(z;)i(})1049 b(//)48 b(end)e(if)191 2629 y(else)h({)286 2742 y(if)h(\(n==0\))1143 b(//)48 b(the)e(local)h(adouble)f(z)h(dies)382 2855 y(return)f(z;)1049 b(//)48 b(as)f(it)g(goes)g(out)f(of)i(scope.)286 2968 y(else)382 3081 y(return)e(1/power\(x,-n\);)e(})381 b(//)48 b(end)e(else)191 3194 y(})h(//)h(end)e(power)191 3415 y FA(The)25 b(function)h Fq(p)s(o)m(w)m(er)h FA(ab)s(o)m(v)m(e)g(w)m (as)f(obtained)g(from)f(the)h(original)h(undi\013eren)m(tiated)f(v)m (ersion)h(b)m(y)e(simply)191 3528 y(c)m(hanging)30 b(the)g(t)m(yp)s(e)f (of)h(all)g Fq(double)p FA(s)f(including)g(the)h(return)e(v)-5 b(ariable)30 b(to)g Fq(adouble)p FA(s.)41 b(The)28 b(new)h(v)m(ersion) 191 3641 y(can)i(no)m(w)f(b)s(e)g(called)h(from)f(within)g(an)m(y)h (activ)m(e)h(section,)g(as)f(in)f(the)g(follo)m(wing)i(main)f(program.) p Black Black 191 3862 a Ft(#include)45 b(...)1097 b(//)48 b(as)f(above)191 3975 y(int)g(main\(\))f({)191 4088 y(int)h(i,n,tag=1;) 191 4201 y(cout)g(<<"COMPUTATION)c(OF)48 b(N-TH)e(POWER)h(\(ADOL-C)e (Documented)g(Example\)\\n\\n";)191 4314 y(cout<<"monomial)f(degree=?)h (\\n";)285 b(//)48 b(input)e(the)h(desired)f(degree)191 4427 y(cin)h(>>)g(n;)1861 4540 y(//)h(allocations)c(and)j (initializations)191 4653 y(double*)f(Y[1];)191 4765 y(*Y)h(=)h(new)e(double[n+2];)191 4878 y(double*)g(X[1];)1048 b(//)48 b(allocate)d(passive)h(variables)f(with)191 4991 y(*X)i(=)h(new)e(double[n+4];)665 b(//)48 b(extra)e(dimension)f(for)i (derivatives)191 5104 y(X[0][0])f(=)h(0.5;)1001 b(//)48 b(function)d(value)h(=)i(0.)f(coefficient)191 5217 y(X[0][1])f(=)h (1.0;)1001 b(//)48 b(first)e(derivative)f(=)i(1.)h(coefficient)191 5330 y(for\(i=0;i>=)g(Y[0][0];)1000 b(//)48 b(only)e(one)h(dependent)e (adouble)191 1622 y(trace_off\(\);)1094 b(//)48 b(no)f(global)f (adouble)g(has)h(died)1861 1735 y(//)h(end)e(of)i(active)e(section)191 1848 y(double)g(u[1];)1096 b(//)48 b(weighting)d(vector)191 1961 y(u[0]=1;)1334 b(//)48 b(for)e(reverse)g(call)191 2074 y(for\(i=0;i)712 b(//)47 b(use)g(of)g(active)f(doubles)g(and)h(taping)p Black Black eop end %%Page: 81 81 TeXDict begin 81 80 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.81) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(10.3)92 b(Determinan)m(t)32 b(Example)f(\()p Ft(detexam.cpp)p Fu(\))1749 b FA(81)p Black 191 606 a Ft(#include)45 b ()568 b(//)47 b(use)g(of)g(basic)f(forward/reverse) 1861 719 y(//)i(interfaces)d(of)i(ADOL-C)191 832 y(adouble**)e(A;)1097 b(//)48 b(A)f(is)g(an)g(n)h(x)f(n)h(matrix)191 945 y(int)f(i,n;)1287 b(//)48 b(k)f(<=)g(n)h(is)f(the)g(order)191 1058 y(adouble)f(det\(int)g (k,)h(int)g(m\))g({)381 b(//)48 b(of)f(the)g(sub-matrix)191 1171 y(if)g(\(m)g(==)g(0\))h(return)e(1.0)h(;)524 b(//)48 b(its)e(column)h(indices)191 1284 y(else)g({)1383 b(//)48 b(are)e(encoded)g(in)h(m)286 1396 y(adouble*)f(pt)h(=)h(A[k-1];)286 1509 y(adouble)e(t)i(=)f(zero;)762 b(//)48 b(zero)e(is)h(predefined)286 1622 y(int)g(s,)g(p)h(=1;)286 1735 y(if)g(\(k\0452\))e(s)h(=)h(1;)f (else)g(s)g(=)h(-1;)286 1848 y(for\(i=0;i=)i(p\))f({)477 2187 y(if)g(\(m)h(==)f(p\))g({)573 2300 y(if)g(\(s>0\))f(t)i(+=)f(*pt;) g(else)f(t)i(-=)f(*pt;)f(})477 2413 y(else)h({)573 2526 y(if)g(\(s>0\))668 2638 y(t)h(+=)f(*pt*det\(k-1,m-p\);)138 b(//)48 b(recursive)d(call)h(to)i(det)573 2751 y(else)668 2864 y(t)g(-=)f(*pt*det\(k-1,m-p\);)c(})k(//)h(recursive)d(call)h(to)i (det)477 2977 y(s)g(=)f(-s;})382 3090 y(++pt;)382 3203 y(p)g(=)h(p1;})286 3316 y(return)e(t;)i(})191 3429 y(})1622 b(//)48 b(end)e(det)191 3702 y FA(As)28 b(one)f(can)h(see,)h(the)f(o)m (v)m(erloading)i(mec)m(hanism)e(has)f(no)h(problem)f(with)g(p)s(oin)m (ters)h(and)f(lo)s(oks)h(exactly)191 3815 y(the)f(same)h(as)f(the)g (original)h(undi\013eren)m(tiated)g(function)e(except)i(for)f(the)g(c)m (hange)h(of)g(t)m(yp)s(e)f(from)f Fq(double)191 3928 y FA(to)g Fq(adouble)p FA(.)39 b(If)25 b(the)g(t)m(yp)s(e)g(of)h(the)f (temp)s(orary)g Fq(t)g FA(or)g(the)g(p)s(oin)m(ter)h Fq(pt)f FA(had)f(not)i(b)s(een)e(c)m(hanged,)j(a)f(compile)191 4041 y(time)31 b(error)f(w)m(ould)g(ha)m(v)m(e)i(resulted.)40 b(No)m(w)31 b(consider)g(a)f(corresp)s(onding)g(calling)i(program.)p Black Black 191 4314 a Ft(#include)45 b(...)1097 b(//)48 b(as)f(above)191 4427 y(int)g(main\(\))f({)191 4540 y(int)h(i,j,)f (m=1,tag=1,keep=1;)191 4653 y(cout)h(<<)g("COMPUTATION)d(OF)j (DETERMINANTS)e(\(ADOL-C)h(Documented)f(Example\)\\n\\n";)191 4765 y(cout)i(<<)g("order)f(of)h(matrix)f(=)i(?)f(\\n";)94 b(//)48 b(select)e(matrix)g(size)191 4878 y(cin)h(>>)g(n;)191 4991 y(A)g(=)h(new)f(adouble*[n];)191 5104 y(trace_on\(tag,keep\);)758 b(//)48 b(tag=1=keep)286 5217 y(double)e(detout=0.0,)f(diag)i(=)g(1.0;) 142 b(//)48 b(here)e(keep)h(the)g(intermediates)d(for)286 5330 y(for\(i=0;i>=)i(detout;)523 b(//)48 b(actual)e(function)f(call)286 1509 y(printf\("\\n)g(\045f)j(-) f(\045f)g(=)h(\045f)95 b(\(should)45 b(be)j(0\)\\n",detout,diag,detou)o (t-d)o(iag\))o(;)191 1622 y(trace_off\(\);)191 1735 y(double)e(u[1];) 191 1848 y(u[0])h(=)g(1.0;)191 1961 y(double*)f(B)h(=)h(new)f (double[n*n];)191 2074 y(reverse\(tag,1,n*n,1,u,B\))o(;)191 2187 y(cout)g(<<")f(\\n)i(first)e(base?)g(:)i(";)191 2300 y(for)f(\(i=0;i)855 b(//)47 b(use)g(of)g(active)f(doubles)g(and)h(taping)191 4427 y(#include)e()328 b(//)47 b(use)g(of)g("Easy)g(To)g(use")f(ODE)h(drivers)191 4540 y(#include)e()855 b(//)47 b(use)g(of)g(ADOL-C)f (allocation)f(utilities)191 4765 y(void)i(tracerhs\(short)c(int)k(tag,) g(double*)f(py,)h(double*)f(pyprime\))f({)191 4878 y(adouble)h(y[3];) 1192 b(//)47 b(this)f(time)h(we)g(left)g(the)g(parameters)191 4991 y(adouble)f(yprime[3];)952 b(//)47 b(passive)f(and)g(use)h(the)g (vector)f(types)191 5104 y(trace_on\(tag\);)191 5217 y(for)h(\(int)f(i=0;)h(i<3;)g(i++\))430 5330 y(y[i])f(<<=)h(py[i];)858 b(//)47 b(initialize)e(and)i(mark)f(independents)p Black Black eop end %%Page: 83 83 TeXDict begin 83 82 bop 0 0 a SDict begin /product where{pop product(Distiller)search{pop pop pop version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show grestore}if}{pop}ifelse}{pop}ifelse}if end 0 0 a 183 199 a SDict begin H.S end 183 199 a 183 199 a SDict begin H.R end 183 199 a 183 199 a SDict begin [/View [/XYZ H.V]/Dest (page.83) cvn /DEST pdfmark end 183 199 a Black 191 307 a Fu(10.4)92 b(Ordinary)29 b(Di\013eren)m(tial)k(Equation)e(Example)f (\()p Ft(odexam.cpp)p Fu(\))1071 b FA(83)p Black 191 606 a Ft(yprime[0])45 b(=)j(-sin\(y[2]\))d(+)i(1e8*y[2]*\(1-1/y[0]\);) 191 719 y(yprime[1])e(=)j(-10*y[0])d(+)j(3e7*y[2]*\(1-y[1]\);)191 832 y(yprime[2])d(=)j(-yprime[0])d(-)i(yprime[1];)191 945 y(yprime)f(>>=)h(pyprime;)905 b(//)47 b(mark)f(and)h(pass)g (dependents)191 1058 y(trace_off\(tag\);)191 1171 y(})1766 b(//)47 b(end)g(tracerhs)191 1387 y FA(The)33 b(Jacobian)i(of)f(the)h (righ)m(t-hand)f(side)g(has)f(large)i(negativ)m(e)i(eigen)m(v)-5 b(alues,)37 b(whic)m(h)c(mak)m(e)j(the)e(ODE)191 1500 y(quite)f(sti\013.)48 b(W)-8 b(e)34 b(ha)m(v)m(e)g(added)d(some)i(n)m (umerically)h(b)s(enign)e(transcenden)m(tals)h(to)g(mak)m(e)h(the)f (di\013eren-)191 1613 y(tiation)k(more)f(in)m(teresting.)57 b(The)35 b(follo)m(wing)i(main)f(program)f(uses)g Fq(fo)m(ro)s(de)i FA(to)f(calculate)i(the)d(T)-8 b(a)m(ylor)191 1726 y(series)34 b(de\014ned)e(b)m(y)i(the)g(ODE)g(at)g(the)g(giv)m(en)h(p)s(oin)m(t)e Fs(y)2080 1740 y FD(0)2153 1726 y FA(and)g Fq(reverse)i FA(as)f(w)m(ell)h(as)e Fq(acco)s(de)i FA(to)f(compute)191 1839 y(the)d(Jacobians)f(of)h(the)g(co)s(e\016cien)m(t)h(v)m(ectors)g (with)e(resp)s(ect)g(to)h Fs(x)2438 1853 y FD(0)2478 1839 y FA(.)p Black Black 191 2056 a Ft(#include)45 b(.......)905 b(//)48 b(as)f(above)191 2169 y(int)g(main\(\))f({)191 2281 y(int)h(i,j,deg;)191 2394 y(int)g(n=3;)191 2507 y(double)f(py[3];)191 2620 y(double)g(pyp[3];)191 2733 y(cout)h(<<)g("MODIFIED)e(ROBERTSON)g(TEST)i(PROBLEM)f(\(ADOL-C)g (Documented)f(Example\)\\n";)191 2846 y(cout)i(<<)g("degree)f(of)h (Taylor)f(series)g(=?\\n";)191 2959 y(cin)h(>>)g(deg;)191 3072 y(double)f(**X;)191 3185 y(X=\(double**\)malloc\(n*siz)o(eof\()o (dou)o(ble*)o(\)\);)191 3298 y(for\(i=0;i #include pdouble::pdouble(double pval) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; _val = pval; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { _idx = ADOLC_GLOBAL_TAPE_VARS.paramStoreMgrPtr->next_loc(); ADOLC_GLOBAL_TAPE_VARS.pStore[_idx] = _val; } else { _idx = std::numeric_limits::max(); } } pdouble::pdouble(locint idx) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (idx < ADOLC_GLOBAL_TAPE_VARS.numparam) { _val = ADOLC_GLOBAL_TAPE_VARS.pStore[idx]; _idx = idx; } else { fprintf(DIAG_OUT, "ADOL-C error: Parameter index %d out of bounds, " "# existing parameters = %zu\n", idx, ADOLC_GLOBAL_TAPE_VARS.numparam); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } } pdouble mkparam(double pval) { locint _idx; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { _idx = ADOLC_GLOBAL_TAPE_VARS.paramStoreMgrPtr->next_loc(); ADOLC_GLOBAL_TAPE_VARS.pStore[_idx] = pval; } else { return pval; } return _idx; } pdouble getparam(locint index) { return index; } locint mkparam_idx(double pval) { locint _idx; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { _idx = ADOLC_GLOBAL_TAPE_VARS.paramStoreMgrPtr->next_loc(); ADOLC_GLOBAL_TAPE_VARS.pStore[_idx] = pval; } else { fprintf(DIAG_OUT, "ADOL-C error: cannot define indexed parameter " "while tracing is turned off!\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } return _idx; } pdouble::operator adub() const { locint location; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; location = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(assign_p); ADOLC_PUT_LOCINT(location); ADOLC_PUT_LOCINT(_idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = _val; return location; } badouble& badouble::operator = (const pdouble& p) { locint loc; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; loc = this->loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(assign_p); ADOLC_PUT_LOCINT(loc); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc]); } ADOLC_GLOBAL_TAPE_VARS.store[loc] = p._val; return *this; } adouble& adouble::operator = (const pdouble& p) { this->loc(); (*this).badouble::operator=(p); return (*this); } adubref& adubref::operator = (const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ref_assign_p); ADOLC_PUT_LOCINT(location); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] = p._val; return *this; } badouble& badouble::operator += (const pdouble& p) { locint loc; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; loc = this->loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(eq_plus_p); ADOLC_PUT_LOCINT(loc); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc]); } ADOLC_GLOBAL_TAPE_VARS.store[loc] += p._val; return *this; } adubref& adubref::operator += (const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ref_eq_plus_p); ADOLC_PUT_LOCINT(location); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] += p._val; return *this; } badouble& badouble::operator -= (const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_min_d,loc(),coval); put_op(eq_min_p); ADOLC_PUT_LOCINT(loc()); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] -= p._val; return *this; } adubref& adubref::operator -= (const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_min_d,location,coval); put_op(ref_eq_min_p); ADOLC_PUT_LOCINT(location); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] -= p._val; return *this; } badouble& badouble::operator *= (const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_mult_d,loc(),coval); put_op(eq_mult_p); ADOLC_PUT_LOCINT(loc()); // = res ADOLC_PUT_LOCINT(p._idx); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] *= p._val; return *this; } adubref& adubref::operator *= (const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_mult_d,location,coval); put_op(ref_eq_mult_p); ADOLC_PUT_LOCINT(location); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] *= p._val; return *this; } adub operator + (const badouble& a, const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(plus_d_a,locat,coval,y.loc()); put_op(plus_a_p); ADOLC_PUT_LOCINT(a.loc()); ADOLC_PUT_LOCINT(locat); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[a.loc()] + p._val; return locat; } adub operator - (const badouble& a, const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(plus_d_a,locat,coval,y.loc()); put_op(min_a_p); ADOLC_PUT_LOCINT(a.loc()); ADOLC_PUT_LOCINT(locat); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[a.loc()] - p._val; return locat; } adub operator * (const badouble& a, const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(plus_d_a,locat,coval,y.loc()); put_op(mult_a_p); ADOLC_PUT_LOCINT(a.loc()); ADOLC_PUT_LOCINT(locat); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[a.loc()] * p._val; return locat; } adub operator / (const pdouble& p, const badouble& a) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(plus_d_a,locat,coval,y.loc()); put_op(div_p_a); ADOLC_PUT_LOCINT(a.loc()); ADOLC_PUT_LOCINT(locat); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = p._val/ADOLC_GLOBAL_TAPE_VARS.store[a.loc()]; return locat; } adub pow( const badouble& x, const pdouble& p) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(pow_op,locat,cocval,x.loc()); put_op(pow_op_p); ADOLC_PUT_LOCINT(x.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_LOCINT(p._idx); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::pow(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()],p._val); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } adub recipr( const pdouble& p) { locint location; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; location = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(recipr_p); ADOLC_PUT_LOCINT(location); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = 1.0/p._val; return location; } adub operator - (const pdouble& p) { locint location; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; location = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(neg_sign_p); ADOLC_PUT_LOCINT(location); ADOLC_PUT_LOCINT(p._idx); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = -p._val; return location; } adouble pow( const pdouble& p, const badouble& y) { adouble a1, a2, ret; double vx = p._val; double vy = y.getValue(); if (!(vx > 0)) { if (vx < 0 || vy >= 0) fprintf(DIAG_OUT,"\nADOL-C message: exponent of zero/negative basis deactivated\n"); else fprintf(DIAG_OUT,"\nADOL-C message: negative exponent and zero basis deactivated\n"); } condassign(a1, -y, (adouble) ADOLC_MATH_NSP::pow(vx,vy), pow(p,vy)); condassign(a2, fabs(adub(p)), pow(p, vy), a1); condassign(ret, p, exp(y*log(adub(p))),a2); return ret; } #if defined(ADOLC_ADVANCED_BRANCHING) adub operator != (const badouble& x, const pdouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = y._val; double res = (double)(xval != yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(neq_a_p); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y._idx); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator == (const badouble& x, const pdouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = y._val; double res = (double)(xval == yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(eq_a_p); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y._idx); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator <= (const badouble& x, const pdouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = y._val; double res = (double)(xval <= yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(le_a_p); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y._idx); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator >= (const badouble& x, const pdouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = y._val; double res = (double)(xval >= yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ge_a_p); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y._idx); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator > (const badouble& x, const pdouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = y._val; double res = (double)(xval > yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(gt_a_p); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y._idx); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator < (const badouble& x, const pdouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = y._val; double res = (double)(xval < yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(lt_a_p); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y._idx); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } #endif ADOL-C-2.6.3/ADOL-C/src/nonl_ind_old_forward_s.c0000644000175200017520000000151012106465576017436 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: nonl_ind_forward_s.c Revision: $Id: nonl_ind_old_forward_s.c 408 2013-02-12 16:19:10Z kulshres $ Contents: nonl_ind_forward_s (propagation of nonlinear index domains) Copyright (c) Andrea Walther, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _NONLIND_OLD_ 1 #define _INDOPRO_ 1 #define _NTIGHT_ 1 #include #undef _INDO_ #undef _NONLIND_OLD_ #undef _INDOPRO_ #undef _NTIGHT_ ADOL-C-2.6.3/ADOL-C/src/ampisupportAdolc.h0000755000175200017520000001166212247105556016274 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ampisupportAdolc.cpp Revision: $Id$ Copyright (c) Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_AMPISUPPORTADOLC_H) #define ADOLC_AMPISUPPORTADOLC_H 1 #ifdef ADOLC_AMPI_SUPPORT #include "ampi/ampi.h" #include "ampi/libCommon/modified.h" #if defined(__cplusplus) extern "C" { #endif void ADOLC_TLM_init(); int ADOLC_TLM_AMPI_Send(void* buf, int count, MPI_Datatype datatype, int src, int tag, AMPI_PairedWith pairedWith, MPI_Comm comm); int ADOLC_TLM_AMPI_Recv(void* buf, int count, MPI_Datatype datatype, int src, int tag, AMPI_PairedWith pairedWith, MPI_Comm comm, MPI_Status* status); int ADOLC_TLM_AMPI_Isend (void* buf, int count, MPI_Datatype datatype, int dest, int tag, AMPI_PairedWith pairedWith, MPI_Comm comm, AMPI_Request* request); int ADOLC_TLM_AMPI_Irecv (void* buf, int count, MPI_Datatype datatype, int src, int tag, AMPI_PairedWith pairedWith, MPI_Comm comm, AMPI_Request* request); int ADOLC_TLM_AMPI_Wait(AMPI_Request *request, MPI_Status *status); int ADOLC_TLM_AMPI_Barrier(MPI_Comm comm); int ADOLC_TLM_AMPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm); int ADOLC_TLM_AMPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm); int ADOLC_TLM_AMPI_Allgather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, MPI_Comm comm); int ADOLC_TLM_AMPI_Gatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm); int ADOLC_TLM_AMPI_Scatterv(void *sendbuf, int *sendcnts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm); int ADOLC_TLM_AMPI_Allgatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, MPI_Datatype recvtype, MPI_Comm comm); int ADOLC_TLM_AMPI_Bcast(void* buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm); int ADOLC_TLM_AMPI_Reduce(void* sbuf, void* rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm); int ADOLC_TLM_AMPI_Allreduce(void* sbuf, void* rbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); #if defined(__cplusplus) } #endif #endif #endif ADOL-C-2.6.3/ADOL-C/src/nonl_ind_forward_s.c0000644000175200017520000000140011227420735016565 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: nonl_ind_forward_s.c Revision: $Id: nonl_ind_forward_s.c 42 2009-07-15 18:37:17Z awalther $ Contents: nonl_ind_forward_s (propagation of nonlinear index domains) Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _NONLIND_ 1 #define _NTIGHT_ 1 #include #undef _INDO_ #undef _NONLIND_ #undef _NTIGHT_ ADOL-C-2.6.3/ADOL-C/src/fos_pl_forward.c0000644000175200017520000000126412426143774015744 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fos_an_forward.c Revision: $Id$ Contents: fos_an_forward (first-order-scalar abs-normal forward mode) Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOS_ 1 #undef _KEEP_ #define _ABS_NORM_ 1 #include #undef _ABS_NORM_ #undef _FOS_ ADOL-C-2.6.3/ADOL-C/src/dvlparms.h0000644000175200017520000000360712375616224014574 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: dvlparms.h Revision: $Id: dvlparms.h 564 2014-08-22 10:33:56Z kulshres $ Contents: Developer parameters: These parameters are intended for use by the developers and maintainers of ADOL-C to specify library wide definitions. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_DVLPARMS_H) #define ADOLC_DVLPARMS_H 1 /*--------------------------------------------------------------------------*/ /* Directory where tapes are created */ #define TAPE_DIR "." /* File names for the tapes */ #define ADOLC_TAYLORS_NAME "ADOLC-Taylors_" #define ADOLC_VALUES_NAME "ADOLC-Values_" #define ADOLC_LOCATIONS_NAME "ADOLC-Locations_" #define ADOLC_OPERATIONS_NAME "ADOLC-Operations_" #ifdef _WINDOWS #define PATHSEPARATOR "\\" #define __func__ __FUNCTION__ #define snprintf _snprintf #else #define PATHSEPARATOR "/" #endif /*--------------------------------------------------------------------------*/ /* TAPE IDENTIFICATION (ADOLC & version check) */ #define statSpace 42 /* NOTE: ADOLC_ID and stats must fit in statSpace locints required! */ /*--------------------------------------------------------------------------*/ /* ADOL-C configuration (never change this) */ #define adolc_overwrite 1 #define adolc_compsize > /*--------------------------------------------------------------------------*/ #endif ADOL-C-2.6.3/ADOL-C/src/int_reverse_s.c0000644000175200017520000000135411227420735015576 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: int_reverse_s.c Revision: $Id: int_reverse_s.c 42 2009-07-15 18:37:17Z awalther $ Contents: int_reverse (integer reverse mode safe for bit pattern propagation) Copyright (c) Andrea Walther, Christo Mitev This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INT_REV_ 1 #define _NTIGHT_ 1 #include #undef _INT_REV_ #undef _NTIGHT_ ADOL-C-2.6.3/ADOL-C/src/drivers/0000755000175200017520000000000013037353015014233 5ustar coincoinADOL-C-2.6.3/ADOL-C/src/drivers/drivers.c0000644000175200017520000002345611412425466016074 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/drivers.c Revision: $Id: drivers.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Easy to use drivers for optimization and nonlinear equations (Implementation of the C/C++ callable interfaces). Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR OPTIMIZATION AND NONLINEAR EQUATIONS */ /*--------------------------------------------------------------------------*/ /* function */ /* function(tag, m, n, x[n], y[m]) */ int function(short tag, int m, int n, double* argument, double* result) { int rc= -1; rc= zos_forward(tag,m,n,0,argument,result); return rc; } /*--------------------------------------------------------------------------*/ /* gradient */ /* gradient(tag, n, x[n], g[n]) */ int gradient(short tag, int n, const double* argument, double* result) { int rc= -1; double one = 1.0; rc = zos_forward(tag,1,n,1,argument,result); if(rc < 0) return rc; MINDEC(rc, fos_reverse(tag,1,n,&one,result)); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* vec_jac(tag, m, n, repeat, x[n], u[m], v[n]) */ int vec_jac(short tag, int m, int n, int repeat, double* argument, double* lagrange, double* row) { int rc= -1; double *y = NULL; if(!repeat) { y = myalloc1(m); rc = zos_forward(tag,m,n,1, argument, y); if(rc < 0) return rc; } MINDEC(rc, fos_reverse(tag,m,n,lagrange,row)); if (!repeat) myfree1(y); return rc; } /*--------------------------------------------------------------------------*/ /* jacobian */ /* jacobian(tag, m, n, x[n], J[m][n]) */ int jacobian(short tag, int depen, int indep, const double *argument, double **jacobian) { int rc; double *result, **I; result = myalloc1(depen); if (indep/2 < depen) { I = myallocI2(indep); rc = fov_forward(tag,depen,indep,indep,argument,I,result,jacobian); myfreeI2(indep, I); } else { I = myallocI2(depen); rc = zos_forward(tag,depen,indep,1,argument,result); if (rc < 0) return rc; MINDEC(rc,fov_reverse(tag,depen,indep,depen,I,jacobian)); myfreeI2(depen, I); } myfree1(result); return rc; } /*--------------------------------------------------------------------------*/ /* large_jacobian */ /* large_jacobian(tag, m, n, k, x[n], y[m], J[m][n]) */ int large_jacobian(short tag, int depen, int indep, int runns, double *argument, double *result, double **jacobian) { int rc, dirs, i; double **I; I = myallocI2(indep); if (runns > indep) runns = indep; if (runns < 1) runns = 1; dirs = indep / runns; if (indep % runns) ++dirs; for (i=0; i&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/src/drivers DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libdrivers_la_LIBADD = am_libdrivers_la_OBJECTS = drivers.lo driversf.lo odedrivers.lo \ odedriversf.lo psdrivers.lo psdriversf.lo taylor.lo libdrivers_la_OBJECTS = $(am_libdrivers_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libdrivers_la_SOURCES) DIST_SOURCES = $(libdrivers_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_LDFLAGS = -no-undefined AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = libdrivers.la libdrivers_la_SOURCES = drivers.c driversf.c odedrivers.c odedriversf.c \ psdrivers.c psdriversf.c taylor.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/src/drivers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/src/drivers/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libdrivers.la: $(libdrivers_la_OBJECTS) $(libdrivers_la_DEPENDENCIES) $(EXTRA_libdrivers_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libdrivers_la_OBJECTS) $(libdrivers_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/drivers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/driversf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odedrivers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/odedriversf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psdrivers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psdriversf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taylor.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/src/drivers/psdrivers.c0000644000175200017520000001157413037350674016440 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/psdrivers.c Revision: $Id$ Contents: Easy to use drivers for piecewise smooth functions (with C and C++ callable interfaces including Fortran callable versions). Copyright (c) Andrea Walther, Sabrina Fiege This file is part of ADOL-C. This software is provided as open source. Any use, reproduct ion, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #include "taping_p.h" #include "dvlparms.h" #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR PS FUNCTIONS */ /*--------------------------------------------------------------------------*/ /* abs-normal form */ int abs_normal(short tag, /* tape identifier */ int m, /* number od dependents */ int n, /* number of independents */ int swchk, /* number of switches (check) */ double *x, /* base point */ short *sigma, /* sigma of x */ double *y, /* function value */ double *z, /* switching variables */ double *cz, /* first constant */ double *cy, /* second constant */ double **J, double **Y, double **Z, double **L) { int i,j,s; double *res, tmp; s=get_num_switches(tag); /* This check is required because the user is probably allocating his * arrays sigma, cz, Z, L, Y, J according to swchk */ if (s != swchk) { fprintf(DIAG_OUT, "ADOL-C error: Number of switches passed %d does not " "match the one recorded on tape %d (%zu)\n", swchk, tag, s); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } res=(double*)myalloc1(n+s); zos_pl_forward(tag,m,n,1,x,y,z); for(i=0;i #include #include #include #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR OPTIMIZATION AND NONLINEAR EQUATIONS */ /*--------------------------------------------------------------------------*/ /* function */ /* function(tag, m, n, x[n], y[m]) */ fint function_(fint* ftag, fint* fm, fint* fn, fdouble* fargument, fdouble* fresult) { int rc= -1; short tag= (short) *ftag; int m=*fm, n=*fn; double* argument = myalloc1(n); double* result = myalloc1(m); spread1(n,fargument,argument); rc= function(tag,m,n,argument,result); pack1(m,result,fresult); myfree1(argument); myfree1(result); return rc; } /*--------------------------------------------------------------------------*/ /* gradient */ /* gradient(tag, n, x[n], g[n]) */ fint gradient_(fint* ftag, fint* fn, fdouble* fargument, fdouble* fresult) { int rc= -1; short tag= (short) *ftag; int n=*fn; double* argument=myalloc1(n); double* result=myalloc1(n); spread1(n,fargument,argument); rc= gradient(tag,n,argument,result); pack1(n,result,fresult); myfree1(result); myfree1(argument); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* vec_jac(tag, m, n, repeat, x[n], u[m], v[n]) */ fint vec_jac_(fint* ftag, fint* fm, fint* fn, fint* frepeat, fdouble* fargument, fdouble* flagrange, fdouble* frow) { int rc= -1; short tag= (short) *ftag; int m=*fm, n=*fn, repeat=*frepeat; double* argument = myalloc1(n); double* lagrange = myalloc1(m); double* row = myalloc1(n); spread1(m,flagrange,lagrange); spread1(n,fargument,argument); rc= vec_jac(tag,m,n,repeat,argument,lagrange, row); pack1(n,row,frow); myfree1(argument); myfree1(lagrange); myfree1(row); return rc; } /*--------------------------------------------------------------------------*/ /* jacobian */ /* jacobian(tag, m, n, x[n], J[m][n]) */ fint jacobian_(fint* ftag, fint* fdepen, fint* findep, fdouble *fargument, fdouble *fjac) { int rc= -1; short tag= (short) *ftag; int depen=*fdepen, indep=*findep; double** Jac = myalloc2(depen,indep); double* argument = myalloc1(indep); spread1(indep,fargument,argument); rc= jacobian(tag,depen,indep,argument,Jac); pack2(depen,indep,Jac,fjac); myfree2(Jac); myfree1(argument); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* jac_vec(tag, m, n, x[n], v[n], u[m]); */ fint jac_vec_(fint* ftag, fint* fm, fint* fn, fdouble* fargument, fdouble* ftangent, fdouble* fcolumn) { int rc= -1; short tag= (short) *ftag; int m=*fm, n=*fn; double* argument = myalloc1(n); double* tangent = myalloc1(n); double* column = myalloc1(m); spread1(n,ftangent,tangent); spread1(n,fargument,argument); rc= jac_vec(tag,m,n,argument,tangent,column); pack1(m,column,fcolumn); myfree1(argument); myfree1(tangent); myfree1(column); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* hess_vec(tag, n, x[n], v[n], w[n]) */ fint hess_vec_(fint* ftag, fint* fn, fdouble *fargument, fdouble *ftangent, fdouble *fresult) { int rc= -1; short tag= (short) *ftag; int n=*fn; double *argument = myalloc1(n); double *tangent = myalloc1(n); double *result = myalloc1(n); spread1(n,fargument,argument); spread1(n,ftangent,tangent); rc= hess_vec(tag,n,argument,tangent,result); pack1(n,result,fresult); myfree1(argument); myfree1(tangent); myfree1(result); return rc; } /*--------------------------------------------------------------------------*/ /* hessian */ /* hessian(tag, n, x[n], lower triangle of H[n][n]) */ fint hessian_(fint* ftag, fint* fn, fdouble* fx, fdouble* fh) /* length of h should be n*n but the upper half of this matrix remains unchanged */ { int rc= -1; short tag= (short) *ftag; int n=*fn; double** H = myalloc2(n,n); double* x = myalloc1(n); spread1(n,fx,x); rc= hessian(tag,n,x,H); pack2(n,n,H,fh); myfree2(H); myfree1(x); return rc; } /*--------------------------------------------------------------------------*/ /* */ /* lagra_hess_vec(tag, m, n, x[n], v[n], u[m], w[n]) */ fint lagra_hess_vec_(fint* ftag, fint* fm, fint* fn, fdouble *fargument, fdouble *ftangent, fdouble *flagrange, fdouble *fresult) { int rc=-1; short tag= (short) *ftag; int m=*fm, n=*fn; double *argument = myalloc1(n); double *tangent = myalloc1(n); double *lagrange = myalloc1(m); double *result = myalloc1(n); spread1(n,fargument,argument); spread1(n,ftangent,tangent); spread1(m,flagrange,lagrange); rc= lagra_hess_vec(tag,m,n,argument,tangent,lagrange,result); pack1(n,result,fresult); myfree1(argument); myfree1(tangent); myfree1(lagrange); myfree1(result); return rc; } END_C_DECLS ADOL-C-2.6.3/ADOL-C/src/drivers/odedrivers.c0000644000175200017520000002561111412425466016557 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/odedrivers.c Revision: $Id: odedrivers.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Easy to use drivers for ordinary differential equations (ODE) (with C and C++ callable interfaces including Fortran callable versions). Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #include "taping_p.h" #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR ODEs */ /*--------------------------------------------------------------------------*/ /* forodec */ /* forodec(tag, n, tau, dold, dnew, X[n][d+1]) */ int forodec(short tag, /* tape identifier */ int n, /* space dimension */ double tau, /* scaling defaults to 1.0 */ int dol, /* previous degree defaults to zero */ int deg, /* New degree of consistency */ double** Y) /* Taylor series */ { /********************************************************************* This is assumed to be the autonomous case. Here we are just going around computing the vectors y[][j] for dol < j <= deg by successive calls to forward that works on the tape identified by tag. This tape (array of file) must obviously have been generated by a the execution of an active section between trace_on and trace_off with n independent and n dependent variables y must have been set up as pointer to an array of n pointers to double arrays containing at least deg+1 components. The scaling by tau is sometimes necessary to avoid overflow. **********************************************************************/ int rc= 3; int i, j, k; double taut; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if ( n > ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_nax || deg > ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_dax ) { if (ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_nax) { myfree1(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y); myfree1(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z); myfree2(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_Z); } ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_Z = myalloc2(n, deg); ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z = myalloc1(n); ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y = myalloc1(n); ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_nax = n; ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_dax = deg; } for (i = 0; i < n; ++i) { ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y[i] = Y[i][0]; /*printf("y[%i] = %f\n",i,y[i]);*/ for (k = 0; k < deg; ++k) { Y[i][k] = Y[i][k+1]; /*printf("Y[%i][%i] = %f\n",i,k,Y[i][k]);*/ } } /****** Here we get going ********/ if (dol == 0) { j = dol; /* j = 0 */ k = (deg) * (j == deg-1 ) ; /* keep death values in prepration */ MINDEC(rc, zos_forward(tag, n, n, k, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z)); /* for reverse called by jacode */ if(rc < 0) return rc; taut = tau / (1 + j); /* only the last time through. */ for (i = 0; i < n; ++i) Y[i][j] = taut * ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z[i]; dol++; /* !!! */ } for (j = dol; j < deg; ++j) { k = (deg)*(j == deg-1) ; /* keep death values in prepration */ MINDEC(rc, hos_forward(tag, n, n, j, k, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y, Y, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_z, ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_Z)); /* for reverse called by jacode */ if( rc < 0) return rc; taut = tau / (1 + j); /* only the last time through. */ for (i = 0; i < n; ++i) Y[i][j] = taut * ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_Z[i][j-1]; } /****** Done ********/ for (i = 0; i < n; ++i) { for (k = deg; k > 0; --k) { Y[i][k] = Y[i][k-1]; /*printf("Y[%i][%i] = %f\n",i,k,Y[i][k]);*/ } Y[i][0] = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.forodec_y[i]; /*printf("Y[%i][0] = %f\n",i,Y[i][0]);*/ } return rc; } /*--------------------------------------------------------------------------*/ /* accodec */ /* accodec(n, tau, d, Z[n][n][d+1], B[n][n][d+1], nz[n][n]) */ void accodec(int n, /* space dimension */ double tau, /* scaling defaults to 1.0 */ int deg, /* highest degree */ double*** A, /* input tensor of "partial" Jacobians */ double*** B, /* output tensor of "total" Jacobians */ short** nonzero ) /* optional sparsity characterization */ { /* The purpose of this subroutine is to compute the total derivatives B[i=0...n-1][j=0...n-1][k=0...deg]. The matrix obtained for fixed k represents the Jacobian of the (k+1)-st Taylor coefficient vector with respect to the base point of the ODE, i.e., the 0-th coefficient vector. The input array A[i=0...n-1][j=0...n-1][k=0...deg] has exactly the same format, except that it-s k-th matrix slice represents a partial derivative in that the indirect dependence of the k-th coefficient vector on the base point via the (k-1)-st and other lower Taylor coeffcients has not been taken into account. The B's are compute from the A's by the chainrule with the parameter tau thrown in for scaling. The calculation is performed so that A may directly be overwritten by B i.e. their pointers arguments may coincide to save storage. Sparsity is used so far only to reduce the operations count but not to save space. In general we expect that for each given pair (i,j) the entries A[i][j][k=0...] are nonzero either for all k, or for no k, or for k=0 only. On entry the optional short array nonzero may be used to identify all entries of the A[.][.][k] that are potentially nonzero, i.e. nonzero[i][j] <= 0 implies A[i][j][k] = 0 for all k nonzero[i][j] = 1 implies A[i][j][k] = 0 for all k > 0 . In other words we only allow the sparsity of the matrices A[.][.][k] to be increasing in that A[.][.][1] is possibly sparser than A[.][.][0] and all subseqent A[.][.][k] with k > 0 have the same sparsity pattern. That is the typical situation since A[.][.][k] is the k-th Taylor coefficient in the time expansion of the Jacobian of the right hand side. The entries of this square matrix tend to be either constant or trancendental functions of time. The matrices B_k = B[.][.][k] are obtained from the A_k = A[.][.][k] by the recurrence tau / k \ B_k = ----- | A_k + SUM A_{j-1} B_{k-j} | k+1 \ j=1 / Assuming that the diagonal entries A[i][i][0] are structurally nonzero we find that the matrices B[.][.][k=1..] can only lose sparsity as k increase. Therfore, we can redefine the nonpositive values nonzero[i][j] so that on exit k <= -nonzero[i][j] implies B[i][j][k] = 0 which is trivially satisfied for all positive values of nonzero[i][j]. Due to the increasing sparsity of the A_i and the decreasing sparsity of the B_i the first product in the sum of the RHS above determines the sparsity pattern of the resulting B_k. Hence the optimal values of the nonzero[i][j] depend only on the sparsity pattern of A_0. More specifically, all positive -nonzero[i][j] represent the length of the shortest directed path connecting nodes j and i in the incidence graph of A_0. */ int i,j,k,m,p,nzip,nzpj,isum; double *Aip, *Bpj, scale, sum; for (k=0;k<=deg;k++) /* Lets calculate B_k */ { scale = tau/(1.0+k); if(nonzero) { for (i=0;i 0); for (p=0;p 0) nzpj = 0; if(nzip > 0 && k > -nzpj ) /*otherwise all terms vanish*/ { Aip = A[i][p]; Bpj = B[p][j]+k-1; sum += *Aip*(*Bpj); isum =1; if(nzip > 1 ) /* the A[i][p][m>0] may be nonzero*/ for(m=k-1; m>-nzpj;m--) sum += (*(++Aip))*(*(--Bpj)); } } if(isum) /* we found something nonzero after all*/ B[i][j][k] = sum*scale; else { B[i][j][k]= 0; nonzero[i][j]--; } } } else { for (i=0;i0 ;m--) sum += (*(Aip++))*(*Bpj--); B[i][j][k] = sum*scale; } } } } } END_C_DECLS ADOL-C-2.6.3/ADOL-C/src/drivers/psdriversf.c0000644000175200017520000000630512627546141016602 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: drivers/psdrivers.c Revision: $Id$ Contents: Easy to use drivers for piecewise smooth functions (with C and C++ callable interfaces including Fortran callable versions). Copyright (c) Andrea Walther, Sabrina Fiege, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduct ion, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #if !defined(ADOLC_NO_MALLOC) # define ADOLC_CALLOC(n,m) calloc(n,m) #else # define ADOLC_CALLOC(n,m) rpl_calloc(n,m) #endif #if defined(ADOLC_USE_CALLOC) # if !defined(ADOLC_NO_MALLOC) # define ADOLC_MALLOC(n,m) calloc(n,m) # else # define ADOLC_MALLOC(n,m) rpl_calloc(n,m) # endif #else # if !defined(ADOLC_NO_MALLOC) # define ADOLC_MALLOC(n,m) malloc(n*m) # else # define ADOLC_MALLOC(n,m) rpl_malloc(n*m) # endif #endif BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR PS FUNCTIONS */ /*--------------------------------------------------------------------------*/ /* abs-normal form */ /* abs_normal(tag,m,n,s,x[n],sig[s],y[m],z[s],cz[s],cy[m], */ /* J[m][n],Y[m][s],Z[s][n],L[s][s]) */ fint abs_normal_(fint* ftag, fint* fdepen, fint* findep, fint* fswchk, fdouble* fx, fint* fsigma, fdouble* fy, fdouble* fz, fdouble* fcz, fdouble* fcy, fdouble* fJ, fdouble* fY, fdouble* fZ, fdouble* fL) { int rc = -1; short tag = (short)*ftag; int m = (int)*fdepen, n = (int)*findep, s=(int)*fswchk; double **J, **Y, **Z, **L; double *cy, *cz, *x, *y, *z; short *sig = (short*)ADOLC_MALLOC(s,sizeof(short)); int i; for (i=0;i #include #include #include "taping_p.h" #include BEGIN_C_DECLS /****************************************************************************/ /* STRUCT ITEM */ struct item { int a; /* address in array of derivatives */ int b; /* absolute value of the correspondig multiindex i */ double c; /* value of the coefficient c_{i,j} */ struct item *next; /* next item */ }; /****************************************************************************/ /* DEALLOCATE COEFFLIST */ void freecoefflist( int dim, struct item *coeff_list ) { int i; struct item *ptr1; struct item *ptr2; for (i=0; inext; while (ptr1 != NULL) { ptr2 = ptr1->next; free((char *) ptr1); ptr1 = ptr2; } } } /****************************************************************************/ /* ALLOCATE/DEALLOCATE COEFFLIST */ double* tensoriglob; /*--------------------------------------------------------------------------*/ /* Allcoate space for symmetric derivative tensors of up to order d in n variables, derivatives are */ void* tensorpoint( int n, int d ) { int i; void* t; if (d == 1) { t = (void*) tensoriglob; tensoriglob += n+1; } else { t = (void*) malloc((n+1)*sizeof(void*)); for (i=0; i<=n; i++) ((void**)t)[i] = (void*) tensorpoint(i,d-1); } return t; } /*--------------------------------------------------------------------------*/ void** tensorsetup( int m, int n, int d, double** tensorig ) { int i; void** t = (void**) malloc(m*sizeof(void*)); for (i=0; i 2) for(i=0;i<=n;i++) { t = tensor[i]; freetensorpoint(i,d-1,(double **) t); free((char *) t); } } /*--------------------------------------------------------------------------*/ void freetensor( int m, int n, int d, double** tensor ) { int i; double* t; for (i=0; i n) return 0; if (k > n/2) k = n-k; for (i = 1; i <= k; i++) accum = accum * (n-k+i) / i; return (long) accum + 0.5; } /*--------------------------------------------------------------------------*/ double dbinomi( double a, int b ) { int i; double result = 1.0; for (i=1; i<=b; i++) result = result*(a-i+1)/i; return result; } /*--------------------------------------------------------------------------*/ double summand(int p, int d, int* jm, int* km, int order_im, int order_km, long binomiZ) { /* calculates summation value for fixed j, i, k with terms used in the article.*/ int i; double result, order_k_by_d; order_k_by_d = order_km/(double)d; result = 1.0; for (i=0; i0)&&(im[i]==0)) break; if (i==p) while (1) { /* create all k where 0=0; i--) if (km[i] 0) { /* Store coefficient */ if (ptr==NULL) ptr = &coeff_list[index_coeff_list]; else { ptr->next = (struct item*) malloc(sizeof(struct item)); ptr = ptr->next; }; address = 0; /* calculate address for ptr->a */ j = d-order_im+1; for (u=0; ua = address; ptr->b = order_im; ptr->c = sum; }; if ((im[p-1]==order_im)||(p==1)) break; for (i=p-2; im[i]==0; i--); /* find first nonvanishing entry on the right. */ im[i]--; im[i+1] = im[p-1]+1; if (i!=p-2) im[p-1] = 0; }; }; ptr->next = NULL; /* mark end of queue. */ if ((jm[p-1]==d)||(p==1)) break; for (i=p-2; jm[i]==0; i--); /* find first nonvanishing entry on the right. */ jm[i]--; jm[i+1] = jm[p-1]+1; if (i!=p-2) jm[p-1] = 0; }; free((char*) jm); free((char*) im); free((char*) km); } /*--------------------------------------------------------------------------*/ void convert( int p, int d, int *im, int *multi ) { int i; for (i=0; i max) max = mymulti[i]; im[i] = 0; } for (i=0; i max) max = mymulti[j]; } } for (i=0; iv) { v=fabs(J[RI[i]][CI[j]]); rIdx=i; cIdx=j; } if (ZERO > v) { fprintf(DIAG_OUT, "Error:LUFactorisation(..): no Pivot in step %d (%E)\n",k+1,v); return -(k+1); } /* row and column change resp. */ if (rIdx > k) { h=RI[k]; RI[k]=RI[rIdx]; RI[rIdx]=h; } if (cIdx > k) { h=CI[k]; CI[k]=CI[cIdx]; CI[cIdx]=h; } /* Factorisation step */ for (i=k+1; i=0; i--) { b[CI[i]]=tmpZ[i]; for (j=i+1; j 1) dd[i+1] = (int)ceil(dd[i]*0.5); bd = i+1; } if (cgd == 0) for (i=0; i 0) { di = dd[ii-1]-1; Di = dd[ii-1]-dd[ii]-1; MINDEC(rc,hos_forward(tag,n,n,di,Di+1,xold,Xhelp,w,W)); MINDEC(rc,hov_reverse(tag,n,n,Di,n,I,A,nonzero)); da = dd[ii]; for (l=da; l1) { Aij = A[i][j]; indexA = l-1; Xj = X[j]+l; indexX = 1; if (da == l-1) { bi += (*(++Aij))*(*(--Xj)); } else { for (q=da; q 0) { if ((d != dold) || (p != pold)) { if (pold) { /* olvo 980728 */ dim = binomi(pold+dold-1,dold); freecoefflist(dim,coeff_list); free((char*) coeff_list); } dim = binomi(p+d-1,d); coeff_list = (struct item *) malloc(sizeof(struct item)*dim); coeff(p,d, coeff_list); dold = d; pold = p; } jm = (int *)malloc(sizeof(int)*p); X = myalloc2(n,d+1); Y = myalloc2(n,d+1); for (i=0; ia] += X[j][ptr->b]*ptr->c; ptr = ptr->next; } while (ptr != NULL); } } else { for (i=0; i=0; j--) it[j] = it[j] + it[j+1]/(p+1); for (j=1; j p) it[j] = it[j-1]; convert(p,d,it,jm); multma2vec1(n,p,d,Y,S,jm); /* Store S*jm in Y */ MINDEC(rc,inverse_Taylor_prop(tag,n,d,Y,X)); if (rc == -3) return -3; ptr = &coeff_list[i]; do { for(j=0;ja] += X[j][ptr->b]*ptr->c; } ptr = ptr->next; } while (ptr != NULL); } } free((char*) jm); free((char*) *X); free((char*) X); free((char*) *Y); free((char*) Y); } for(i=0;ia] += Y[0][j][k]*ptr[k]->c; } ptr[k] = ptr[k]->next; } while (ptr[k] != NULL); if (dim-i <= bd) bd = dim-i-1; ctr = 0; } } } else { X = myalloc3(n,bd,d); Y = myalloc3(m,bd,d); ctr = 0; for (i=0; i=0; j--) it[j] = it[j] + it[j+1]/(p+1); for (j=1; j p) it[j] = it[j-1]; convert(p,d,it,jm[ctr]); ptr[ctr] = &coeff_list[i]; if (ctr < bd-1) ctr += 1; else { multma3vec2(n,p,d,bd,X,S,jm); MINDEC(rc,hov_forward(tag,m,n,d,bd,x,X,y,Y)); for (k=0; ka] += Y[j][k][ptr[k]->b-1]*ptr[k]->c; ptr[k] = ptr[k]->next; } while (ptr[k] != NULL); if (dim-i <= bd) bd = dim-i-1; ctr = 0; } } } for (i=0; i max) max = multi[i]; im[i] = 0; } for (i=0; i max) max = multi[j]; } } add = tensor_address(d,im); for (i=0; i #include #include #include #include BEGIN_C_DECLS /****************************************************************************/ /* DRIVERS FOR ODEs */ /*--------------------------------------------------------------------------*/ /* forodec */ /* forodec(tag, n, tau, dold, dnew, X[n][d+1]) */ fint forodec_(fint* ftag, /* tape identifier */ fint* fn, /* space dimension */ fdouble* ftau, /* scaling defaults to 1.0 */ fint* fdol, /* previous degree defaults to zero */ fint* fdeg, /* New degree of consistency */ fdouble* fy) /* Taylor series */ { int rc= -1; short tag= (short) *ftag; int n=*fn, dol=*fdol, deg=*fdeg; int i; double tau=*ftau; double** Y = myalloc2(n,deg+1); for(i=0;i #include #include BEGIN_C_DECLS /****************************************************************************/ /* Now the C THINGS */ #define EDFCTS_BLOCK_SIZE 10 ext_diff_fct *get_ext_diff_fct(int index); ext_diff_fct_v2 *get_ext_diff_fct_v2(int index); END_C_DECLS /****************************************************************************/ #endif /* ADOLC_EXTERNFCTS_P_H */ ADOL-C-2.6.3/ADOL-C/src/zos_forward.c0000644000175200017520000000144611227420735015270 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: zos_forward.c Revision: $Id: zos_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: zos_forward (zero-order-scalar forward mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _ZOS_ 1 #define _KEEP_ 1 #include #undef _KEEP_ #undef _ZOS_ ADOL-C-2.6.3/ADOL-C/src/convolut.c0000644000175200017520000001416711412425466014610 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: convolute.c Revision: $Id: convolut.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Convolution routines (used by ho_rev.mc) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include BEGIN_C_DECLS /****************************************************************************/ /* CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Evaluates convolution of a and b to c */ void conv( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] = tmpVal; } } void conv0( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] = tmpVal; } } /****************************************************************************/ /* INCREMENTAL CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Increments truncated convolution of a and b to c */ void inconv( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] += tmpVal; } } /*--------------------------------------------------------------------------*/ /* olvo 980616 nf */ /* Increments truncated convolution of a and b to c and sets a to zero */ void inconv0( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; a[i] = 0; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] += tmpVal; } } /*--------------------------------------------------------------------------*/ /* olvo 980616 nf */ /* Increments truncated convolution of a and b to c */ void inconv1( int dim, revreal *a, revreal *b, revreal *c ) { revreal tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] += tmpVal; } } /****************************************************************************/ /* DECREMENTAL CONVOLUTION */ /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c */ void deconv( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] -= tmpVal; } } /*--------------------------------------------------------------------------*/ /* olvo 980616 nf */ /* Decrements truncated convolution of a and b to c and sets a to zero */ void deconv0( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; a[i] = 0; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] -= tmpVal; } } /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c */ void deconv1( int dim, revreal *a, revreal *b, revreal *c ) { revreal tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] -= tmpVal; } } /*--------------------------------------------------------------------------*/ /* Decrements truncated convolution of a and b to c and sets a to zero */ void deconvZeroR( int dim, revreal *a, revreal *b, revreal *c ) { double tmpVal; int i,j; for (i=dim-1; i>=0; i--) { tmpVal = a[i]*b[0]; a[i] = 0; for (j=1; j<=i; j++) tmpVal += a[i-j]*b[j]; c[i] -= tmpVal; } } /****************************************************************************/ /* OTHER USEFUL ROUTINES */ /*--------------------------------------------------------------------------*/ void divide( int dim, revreal *a, revreal *b, revreal *c ) { int i,j; double rec = 1/b[0]; for (i=0; i #include #include "oplate.h" #include "taping_p.h" #include "dvlparms.h" #include #include #ifdef ADOLC_AMPI_SUPPORT #include "ampi/ampi.h" #include "ampi/tape/support.h" #endif #include #if defined(_WINDOWS) && !__STDC__ #define stat _stat #define S_IFDIR _S_IFDIR #define S_IFMT _S_IFMT #endif #ifndef S_ISDIR #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif /*--------------------------------------------------------------------------*/ /* Tape identification (ADOLC & version check) */ ADOLC_ID adolc_id; /* first version with new tape structure * => to work with older tapes use older ADOL-C version */ #define ADOLC_NEW_TAPE_VERSION 2 #define ADOLC_NEW_TAPE_SUBVERSION 5 #define ADOLC_NEW_TAPE_PATCHLEVEL 3 /****************************************************************************/ /****************************************************************************/ /* HELP FUNCTIONS */ /****************************************************************************/ /****************************************************************************/ /*--------------------------------------------------------------------------*/ /* additional infos used by fail() */ int failAdditionalInfo1; int failAdditionalInfo2; locint failAdditionalInfo3; locint failAdditionalInfo4; void *failAdditionalInfo5; void *failAdditionalInfo6; /* outputs an appropriate error message using DIAG_OUT and exits the running * program */ void fail( int error ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; switch (error) { case ADOLC_MALLOC_FAILED: fprintf(DIAG_OUT, "ADOL-C error: Memory allocation failed!\n"); break; case ADOLC_INTEGER_TAPE_FOPEN_FAILED: case ADOLC_INTEGER_TAPE_FREAD_FAILED: fprintf(DIAG_OUT, "ADOL-C error: " "reading integer tape number %d!\n", failAdditionalInfo1); printError(); break; case ADOLC_VALUE_TAPE_FOPEN_FAILED: case ADOLC_VALUE_TAPE_FREAD_FAILED: fprintf(DIAG_OUT, "ADOL-C error: " "reading value tape number %d!\n", failAdditionalInfo1); printError(); break; case ADOLC_TAPE_TO_OLD: fprintf(DIAG_OUT, "ADOL-C error: " "Used tape (%d) was written with ADOL-C version " "older than %d.%d.%d\n", failAdditionalInfo1, ADOLC_NEW_TAPE_VERSION, ADOLC_NEW_TAPE_SUBVERSION, ADOLC_NEW_TAPE_PATCHLEVEL); fprintf(DIAG_OUT, " " "This is ADOL-C %d.%d.%d\n", ADOLC_VERSION, ADOLC_SUBVERSION, ADOLC_PATCHLEVEL); break; case ADOLC_WRONG_LOCINT_SIZE: fprintf(DIAG_OUT, "ADOL-C error: Used tape (%d) was written with " "locints of size %d, size %d required.\n", ADOLC_CURRENT_TAPE_INFOS.tapeID, failAdditionalInfo1, failAdditionalInfo2); break; case ADOLC_MORE_STAT_SPACE_REQUIRED: fprintf(DIAG_OUT, "ADOL-C error: Not enough space for stats!\n" " Please contact the ADOL-C team!\n"); break; case ADOLC_TAPING_BUFFER_ALLOCATION_FAILED: fprintf(DIAG_OUT, "ADOL-C error: Cannot allocate tape buffers!\n"); break; case ADOLC_TAPING_TBUFFER_ALLOCATION_FAILED: fprintf(DIAG_OUT, "ADOL-C error: Cannot allocate taylor buffer!\n"); break; case ADOLC_TAPING_READ_ERROR_IN_TAYLOR_CLOSE: fprintf(DIAG_OUT, "ADOL-C error: Read error in taylor_close n= %d\n", failAdditionalInfo1); break; case ADOLC_TAPING_TO_MANY_TAYLOR_BUFFERS: fprintf(DIAG_OUT, "ADOL-C error: To many taylor buffers!\n" " Increase ADOLC_GLOBAL_TAPE_VARS.maxNumberTaylorBuffers\n"); break; case ADOLC_TAPING_TO_MANY_LOCINTS: fprintf(DIAG_OUT, "ADOL-C error: Maximal number (%d) of live active " "variables exceeded!\n\n" "Possible remedies :\n\n" " 1. Use more automatic local variables and\n" " allocate/deallocate adoubles on free store\n" " in a strictly last in first out fashion\n\n" " 2. Extend the range by redefining the type of\n" " locint (currently %d byte) from unsigned short " "(%d byte) or int\n" " to int (%d byte) or long (%d byte).\n", failAdditionalInfo3, (int)sizeof(locint), (int)sizeof(unsigned short), (int)sizeof(int), (int)sizeof(long) ); break; case ADOLC_TAPING_STORE_REALLOC_FAILED: fprintf(DIAG_OUT, "ADOL-C error: Failure to reallocate storage for " "adouble values!\n\n" " oldStore = %p\n" " newStore = NULL\n" " oldStoreSize = %u\n" " newStoreSize = %u\n\n" "Possible remedies :\n" " 1. Use more automatic local variables and \n" " allocate/deallocate adoubles on free store\n" " in a strictly last in first out fashion\n" " 2. Enlarge your system stacksize limit\n" , failAdditionalInfo5, failAdditionalInfo3, failAdditionalInfo4 ); break; case ADOLC_TAPING_FATAL_IO_ERROR: fprintf(DIAG_OUT, "ADOL-C error: Fatal error-doing a read or " "write!\n"); printError(); break; case ADOLC_TAPING_TAPE_STILL_IN_USE: fprintf(DIAG_OUT, "ADOL-C error: Tape %d is still in use!\n", failAdditionalInfo1); break; case ADOLC_TAPING_TAYLOR_OPEN_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while opening taylor file!\n"); printError(); break; case ADOLC_EVAL_SEEK_VALUE_STACK: fprintf(DIAG_OUT, "ADOL-C error: in seeking value stack file!\n"); break; case ADOLC_EVAL_OP_TAPE_READ_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while reading operations tape!\n"); break; case ADOLC_EVAL_VAL_TAPE_READ_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while reading values tape!\n"); break; case ADOLC_EVAL_LOC_TAPE_READ_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while reading locations tape!\n"); break; case ADOLC_EVAL_TAY_TAPE_READ_FAILED: fprintf(DIAG_OUT, "ADOL-C error: while reading value stack tape!\n"); break; case ADOLC_REVERSE_NO_TAYLOR_STACK: fprintf(DIAG_OUT, "ADOL-C error: No taylor stack found for tape " "%d! => Check forward sweep!\n", failAdditionalInfo1); break; case ADOLC_REVERSE_COUNTS_MISMATCH: fprintf(DIAG_OUT, "ADOL-C error: Reverse sweep on tape %d aborted!\n" " Number of dependents(%u) and/or " "independents(%u)\n" " variables passed to reverse is " "inconsistent\n" " with number recorded on tape(%zu/%zu)!\n", ADOLC_CURRENT_TAPE_INFOS.tapeID, failAdditionalInfo3, failAdditionalInfo4, ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]); break; case ADOLC_REVERSE_TAYLOR_COUNTS_MISMATCH: fprintf(DIAG_OUT, "ADOL-C error: Reverse fails on tape %d because " "the number of independent\n" " and/or dependent variables given to" " reverse are inconsistent\n" " with that of the internal taylor " "array!\n", ADOLC_CURRENT_TAPE_INFOS.tapeID); break; case ADOLC_BUFFER_NULLPOINTER_FUNCTION: fprintf(DIAG_OUT, "ADOL-C error: NULL pointer supplied in buffer " "handling.\n"); break; case ADOLC_BUFFER_INDEX_TO_LARGE: fprintf(DIAG_OUT, "ADOL-C error: Index for buffer element too " "large.\n"); break; case ADOLC_EXT_DIFF_NULLPOINTER_STRUCT: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer as pointer to struct " " containing ext. diff. function information!\n"); break; case ADOLC_EXT_DIFF_WRONG_TAPESTATS: fprintf(DIAG_OUT, "ADOL-C error: Number of independents/dependents recorded on" " tape differ from number supplied by user!\n"); break; case ADOLC_EXT_DIFF_NULLPOINTER_FUNCTION: fprintf(DIAG_OUT, "ADOL-C error: Got NULL pointer as " "extern function pointer!\n"); break; case ADOLC_EXT_DIFF_NULLPOINTER_DIFFFUNC: fprintf(DIAG_OUT, "ADOL-C error: No function for external differentiation found" " to work with (null pointer)\n!"); break; case ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT: fprintf(DIAG_OUT, "ADOL-C error: Got at least one null pointer as argument to" " extern differnetiated function!\n"); break; case ADOLC_EXT_DIFF_WRONG_FUNCTION_INDEX: fprintf(DIAG_OUT, "ADOL-C error: Function with specified index not found!\n"); break; case ADOLC_EXT_DIFF_LOCATIONGAP: fprintf(DIAG_OUT, "ADOL-C error: active type arguments passed to call_ext_fct do not have contiguous ascending locations; use ensureContiguousLocations(size_t) to reserve contiguous blocks prior to allocation of the arguments.\n"); break; case ADOLC_CHECKPOINTING_CPINFOS_NULLPOINTER: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer as pointer to struct " " containing checkpointing information!\n"); break; case ADOLC_CHECKPOINTING_NULLPOINTER_ARGUMENT: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer instead of argument pointer " "within checkpointing infos!\n"); break; case ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer instead of function pointer " "within checkpointing infos!\n"); break; case ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION_DOUBLE: fprintf(DIAG_OUT, "ADOL-C error: Got null pointer instead of function (double " "version) pointer within checkpointing infos!\n"); break; case ADOLC_CHECKPOINTING_REVOLVE_IRREGULAR_TERMINATED: fprintf(DIAG_OUT, "ADOL-C error: Irregualar termination of REVOLVE!\n"); break; case ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION: fprintf(DIAG_OUT, "ADOL-C error: Unextpected REVOLVE action in forward mode!\n" ); break; case ADOLC_WRONG_PLATFORM_32: fprintf(DIAG_OUT, "ADOL-C error: Trace was created on a 64-bit platform, cannot be opened on 32-bit platform!\n" ); break; case ADOLC_WRONG_PLATFORM_64: fprintf(DIAG_OUT, "ADOL-C error: Trace was created on a 32-bit platform, cannot be opened on 64-bit platform!\n" ); break; case ADOLC_TAPING_NOT_ACTUALLY_TAPING: fprintf(DIAG_OUT, "ADOL-C error: Trace %d is not being currently created!\n", failAdditionalInfo1); break; case ADOLC_VEC_LOCATIONGAP: fprintf(DIAG_OUT, "ADOL-C error: arrays passed to vector operation do not have contiguous ascending locations;\nuse dynamic_cast(advector&) \nor call ensureContiguousLocations(size_t) to reserve contiguous blocks prior to allocation of the arrays.\n"); break; default: fprintf(DIAG_OUT, "ADOL-C error => unknown error type!\n"); adolc_exit(-1, "", __func__, __FILE__, __LINE__); break; } adolc_exit(error+1, "", __func__, __FILE__, __LINE__); // exit (error + 1); } /* print an error message describing the error number */ void printError() { fprintf(DIAG_OUT, " "); switch (errno) { case EACCES: fprintf(DIAG_OUT, ">>> Access denied! <<<\n"); break; case EFBIG: fprintf(DIAG_OUT, ">>> File too big! <<<\n"); break; case EMFILE: fprintf(DIAG_OUT, ">>> Too many open files for this process! <<<\n"); break; case ENAMETOOLONG: fprintf(DIAG_OUT, ">>> Path/file name too long! <<<\n"); break; case ENFILE: fprintf(DIAG_OUT, ">>> Too many open files for this system! <<<\n"); break; case ENOENT: fprintf(DIAG_OUT, ">>> File or directory not found! <<<\n"); break; case ENOSPC: fprintf(DIAG_OUT, ">>> No space left on device! <<<\n"); break; case EPERM: fprintf(DIAG_OUT, ">>> Operation not permitted! <<<\n"); break; case EROFS: fprintf(DIAG_OUT, ">>> File system is mounted read only! <<<\n"); break; default: fprintf(DIAG_OUT, ">>> "); fprintf(DIAG_OUT, "%s", strerror(errno)); fprintf(DIAG_OUT, " <<<\n"); break; } } /* the base names of every tape type */ char *tapeBaseNames[4]={0,0,0,0}; void clearTapeBaseNames() { int i; for(i=0;i<4;i++) { if (tapeBaseNames[i]) { free(tapeBaseNames[i]); tapeBaseNames[i]=0; } } } /****************************************************************************/ /* The subroutine get_fstr appends to the tape base name of type tapeType */ /* the number fnum and ".tap" and returns a pointer to the resulting string.*/ /* The result string must be freed be the caller! */ /****************************************************************************/ char *createFileName(short tapeID, int tapeType) { char *numberString, *fileName, *extension = ".tap", *currPos; #if defined(_OPENMP) char *threadName = "thread-", *threadNumberString = NULL; int threadNumber, threadNumberStringLength = 0, threadNameLength = 0; #endif /* _OPENMP */ int tapeBaseNameLength, numberStringLength, fileNameLength; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; failAdditionalInfo1 = tapeID; tapeBaseNameLength = strlen(tapeBaseNames[tapeType]); /* determine length of the number string */ if (tapeID != 0) numberStringLength = (int)log10((double)tapeID); else numberStringLength = 0; ++numberStringLength; numberString = malloc(sizeof(char) * (numberStringLength + 1)); if (numberString == NULL) fail(ADOLC_MALLOC_FAILED); sprintf(numberString, "%d", tapeID); #if defined(_OPENMP) /* determine length of the thread number string */ if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 1) { threadNameLength = strlen(threadName); threadNumber = omp_get_thread_num(); if (threadNumber != 0) threadNumberStringLength = (int)log10((double)threadNumber); else threadNumberStringLength = 0; ++threadNumberStringLength; threadNumberString = malloc(sizeof(char) * (threadNumberStringLength + 2)); if (threadNumberString == NULL) fail(ADOLC_MALLOC_FAILED); sprintf(threadNumberString, "%d", threadNumber); threadNumberString[threadNumberStringLength] = '_'; ++threadNumberStringLength; threadNumberString[threadNumberStringLength] = 0; } #endif /* _OPENMP */ /* malloc and create */ fileNameLength = tapeBaseNameLength + numberStringLength + 5; #if defined(_OPENMP) if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 1) fileNameLength += threadNameLength + threadNumberStringLength; #endif /* _OPENMP */ fileName = (char *)malloc(sizeof(char) * fileNameLength); if (fileName == NULL) fail(ADOLC_MALLOC_FAILED); currPos = fileName; strncpy(currPos, tapeBaseNames[tapeType], tapeBaseNameLength); currPos += tapeBaseNameLength; #if defined(_OPENMP) if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 1) { strncpy(currPos, threadName, threadNameLength); currPos += threadNameLength; strncpy(currPos, threadNumberString, threadNumberStringLength); currPos += threadNumberStringLength; } #endif /* _OPENMP */ strncpy(currPos, numberString, numberStringLength); currPos += numberStringLength; strncpy(currPos, extension, 4); currPos += 4; *currPos = 0; free(numberString); #if defined(_OPENMP) if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 1) free(threadNumberString); #endif /* _OPENMP */ return fileName; } /****************************************************************************/ /* Tries to read a local config file containing, e.g., buffer sizes */ /****************************************************************************/ static char* duplicatestr(const char* instr) { size_t len = strlen(instr); char *outstr = calloc(len+1,sizeof(char)); strncpy(outstr,instr,len); return outstr; } #define ADOLC_LINE_LENGTH 100 void readConfigFile() { FILE *configFile = NULL; char inputLine[ADOLC_LINE_LENGTH + 1]; char *pos1 = NULL, *pos2 = NULL, *pos3 = NULL, *pos4 = NULL, *start = NULL, *end = NULL; int base; unsigned long int number = 0; char *path = NULL; int defdirsize = strlen(TAPE_DIR PATHSEPARATOR); tapeBaseNames[0] = duplicatestr( TAPE_DIR PATHSEPARATOR ADOLC_LOCATIONS_NAME); tapeBaseNames[1] = duplicatestr( TAPE_DIR PATHSEPARATOR ADOLC_VALUES_NAME); tapeBaseNames[2] = duplicatestr( TAPE_DIR PATHSEPARATOR ADOLC_OPERATIONS_NAME); tapeBaseNames[3] = duplicatestr( TAPE_DIR PATHSEPARATOR ADOLC_TAYLORS_NAME); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.operationBufferSize = OBUFSIZE; ADOLC_GLOBAL_TAPE_VARS.locationBufferSize = LBUFSIZE; ADOLC_GLOBAL_TAPE_VARS.valueBufferSize = VBUFSIZE; ADOLC_GLOBAL_TAPE_VARS.taylorBufferSize = TBUFSIZE; ADOLC_GLOBAL_TAPE_VARS.maxNumberTaylorBuffers = TBUFNUM; if ((configFile = fopen(".adolcrc", "r")) != NULL) { fprintf(DIAG_OUT, "\nFile .adolcrc found! => Try to parse it!\n"); fprintf(DIAG_OUT, "****************************************\n"); while (fgets(inputLine, ADOLC_LINE_LENGTH + 1, configFile) == inputLine) { if (strlen(inputLine) == ADOLC_LINE_LENGTH && inputLine[ADOLC_LINE_LENGTH - 1] != 0xA) { fprintf(DIAG_OUT, "ADOL-C warning: Input line in .adolcrc exceeds" " %d characters!\n", ADOLC_LINE_LENGTH); fprintf(DIAG_OUT, " => Parsing aborted!!\n"); break; } pos1 = strchr(inputLine, '"'); pos2 = NULL; pos3 = NULL; pos4 = NULL; if (pos1 != NULL) { pos2 = strchr(pos1 + 1, '"'); if (pos2 != NULL) { pos3 = strchr(pos2 + 1, '"'); if (pos3 != NULL) pos4 = strchr(pos3 + 1, '"'); } } if (pos4 == NULL) { if (pos1 != NULL) fprintf(DIAG_OUT, "ADOL-C warning: Malformed input line " "in .adolcrc ignored!\n"); } else { if (*(pos3 + 1) == '0' && (*(pos3 + 2) == 'x' || *(pos3 + 2) == 'X')) { start = pos3 + 3; base = 16; } else if (*(pos3 + 1) == '0') { start = pos3 + 2; base = 8; } else { start = pos3 + 1; base = 10; } number = strtoul(start, &end, base); if (end == start) { *pos2 = 0; *pos4 = 0; if (strcmp(pos1 + 1, "TAPE_DIR") == 0) { struct stat st; int err; path = pos3 + 1; err = stat(path,&st); if (err == 0 && S_ISDIR(st.st_mode)) { int pathlen, pathseplen, namelen[4]; int i; pathlen=strlen(path); pathseplen=strlen(PATHSEPARATOR); for(i = 0; i < 4; i++) namelen[i] = strlen(tapeBaseNames[i]); clearTapeBaseNames(); for(i = 0; i < 4; i++) { char *currpos; int fnamelen; tapeBaseNames[i] = (char*)calloc(namelen[i] - defdirsize + pathlen + pathseplen + 1, sizeof(char)); currpos = tapeBaseNames[i]; strncpy(currpos,path,pathlen); currpos += pathlen; strncpy(currpos,PATHSEPARATOR,pathseplen); currpos += pathseplen; switch (i) { case 0: fnamelen = strlen(ADOLC_LOCATIONS_NAME); strncpy(currpos,ADOLC_LOCATIONS_NAME,fnamelen); break; case 1: fnamelen = strlen(ADOLC_VALUES_NAME); strncpy(currpos,ADOLC_VALUES_NAME,fnamelen); break; case 2: fnamelen = strlen(ADOLC_OPERATIONS_NAME); strncpy(currpos,ADOLC_OPERATIONS_NAME,fnamelen); break; case 3: fnamelen = strlen(ADOLC_TAYLORS_NAME); strncpy(currpos,ADOLC_TAYLORS_NAME,fnamelen); break; } currpos += fnamelen; *currpos = '\0'; } fprintf(DIAG_OUT, "ADOL-C info: using TAPE_DIR %s for all disk bound tapes\n",path); } else fprintf(DIAG_OUT, "ADOL-C warning: TAPE_DIR %s in .adolcrc is not an existing directory,\n will continue using %s for writing tapes\n", path, TAPE_DIR); } else fprintf(DIAG_OUT, "ADOL-C warning: Unable to parse number in " ".adolcrc!\n"); } else { *pos2 = 0; *pos4 = 0; if (strcmp(pos1 + 1, "OBUFSIZE") == 0) { ADOLC_GLOBAL_TAPE_VARS.operationBufferSize = (locint)number; fprintf(DIAG_OUT, "Found operation buffer size: %u\n", (locint)number); } else if (strcmp(pos1 + 1, "LBUFSIZE") == 0) { ADOLC_GLOBAL_TAPE_VARS.locationBufferSize = (locint)number; fprintf(DIAG_OUT, "Found location buffer size: %u\n", (locint)number); } else if (strcmp(pos1 + 1, "VBUFSIZE") == 0) { ADOLC_GLOBAL_TAPE_VARS.valueBufferSize = (locint)number; fprintf(DIAG_OUT, "Found value buffer size: %u\n", (locint)number); } else if (strcmp(pos1 + 1, "TBUFSIZE") == 0) { ADOLC_GLOBAL_TAPE_VARS.taylorBufferSize = (locint)number; fprintf(DIAG_OUT, "Found taylor buffer size: %u\n", (locint)number); } else if (strcmp(pos1 + 1, "TBUFNUM") == 0) { ADOLC_GLOBAL_TAPE_VARS.maxNumberTaylorBuffers = (int)number; fprintf(DIAG_OUT, "Found maximal number of taylor buffers: " "%d\n", (int)number); } else if (strcmp(pos1 + 1, "INITLIVE") == 0) { ADOLC_GLOBAL_TAPE_VARS.initialStoreSize = (locint)number; fprintf(DIAG_OUT, "Found initial live variable store size : %u\n", (locint)number); checkInitialStoreSize(&ADOLC_GLOBAL_TAPE_VARS); } else { fprintf(DIAG_OUT, "ADOL-C warning: Unable to parse " "parameter name in .adolcrc!\n"); } } } } fprintf(DIAG_OUT, "****************************************\n\n"); fclose(configFile); } ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /****************************************************************************/ /* VALUE STACK FUNCTIONS */ /****************************************************************************/ /****************************************************************************/ static unsigned int numTBuffersInUse = 0; /* record all existing adoubles on the tape * - intended to be used in start_trace only */ void take_stock() { locint space_left, loc = 0; double *vals; size_t vals_left; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; space_left = get_val_space(); /* remaining space in const. tape buffer */ vals_left = ADOLC_GLOBAL_TAPE_VARS.storeSize; vals = ADOLC_GLOBAL_TAPE_VARS.store; /* if we have adoubles in use */ if (ADOLC_GLOBAL_TAPE_VARS.numLives > 0) { /* fill the current values (real) tape buffer and write it to disk * - do this as long as buffer can be fully filled */ while (space_left < vals_left) { put_op(take_stock_op); ADOLC_PUT_LOCINT(space_left); ADOLC_PUT_LOCINT(loc); put_vals_writeBlock(vals, space_left); vals += space_left; vals_left -= space_left; loc += space_left; space_left = get_val_space(); } /* store the remaining adouble values to the values tape buffer * -> no write to disk necessary */ if (vals_left > 0) { put_op(take_stock_op); ADOLC_PUT_LOCINT(vals_left); ADOLC_PUT_LOCINT(loc); put_vals_notWriteBlock(vals, vals_left); } } ADOLC_CURRENT_TAPE_INFOS.traceFlag = 1; } /****************************************************************************/ /* record all remaining live variables on the value stack tape */ /* - turns off trace_flag */ /* - intended to be used in stop_trace only */ /****************************************************************************/ locint keep_stock() { locint loc2; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* save all the final adoubles when finishing tracing */ loc2 = ADOLC_GLOBAL_TAPE_VARS.storeSize - 1; /* special signal -> all alive adoubles recorded on the end of the * value stack -> special handling at the beginning of reverse */ put_op(death_not); ADOLC_PUT_LOCINT(0); /* lowest loc */ ADOLC_PUT_LOCINT(loc2); /* highest loc */ ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += ADOLC_GLOBAL_TAPE_VARS.storeSize; /* now really do it if keepTaylors ist set */ if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) { do { ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc2]); } while (loc2-- > 0); } ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; return ADOLC_GLOBAL_TAPE_VARS.storeSize; } /****************************************************************************/ /* Set up statics for writing taylor data */ /****************************************************************************/ void taylor_begin(uint bufferSize, int degreeSave) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.tayBuffer != NULL) { # if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "\nADOL-C warning: !!! Taylor information for tape %d" " found that will be overwritten !!!\n\n", ADOLC_CURRENT_TAPE_INFOS.tapeID); # endif taylor_close(0); } else { /* check if new buffer is allowed */ if (numTBuffersInUse == ADOLC_GLOBAL_TAPE_VARS.maxNumberTaylorBuffers) fail(ADOLC_TAPING_TO_MANY_TAYLOR_BUFFERS); ++numTBuffersInUse; if (ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.tay_fileName == NULL) ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.tay_fileName = createFileName(ADOLC_CURRENT_TAPE_INFOS.tapeID, TAYLORS_TAPE); } /* initial setups */ if (ADOLC_CURRENT_TAPE_INFOS.tayBuffer != NULL) free(ADOLC_CURRENT_TAPE_INFOS.tayBuffer); ADOLC_CURRENT_TAPE_INFOS.tayBuffer = (revreal *) malloc(sizeof(revreal) * bufferSize); if (ADOLC_CURRENT_TAPE_INFOS.tayBuffer == NULL) fail(ADOLC_TAPING_TBUFFER_ALLOCATION_FAILED); ADOLC_CURRENT_TAPE_INFOS.deg_save = degreeSave; if (degreeSave >= 0 ) ADOLC_CURRENT_TAPE_INFOS.keepTaylors = 1; ADOLC_CURRENT_TAPE_INFOS.currTay = ADOLC_CURRENT_TAPE_INFOS.tayBuffer; ADOLC_CURRENT_TAPE_INFOS.lastTayP1 = ADOLC_CURRENT_TAPE_INFOS.currTay + bufferSize; ADOLC_CURRENT_TAPE_INFOS.inUse = 1; ADOLC_CURRENT_TAPE_INFOS.numTays_Tape = 0; } /****************************************************************************/ /* Close the taylor file, reset data. */ /****************************************************************************/ void taylor_close(uint buffer) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (buffer == 0) { /* enforces failure of reverse => retaping */ ADOLC_CURRENT_TAPE_INFOS.deg_save = -1; if (ADOLC_CURRENT_TAPE_INFOS.tay_file != NULL) { fclose(ADOLC_CURRENT_TAPE_INFOS.tay_file); remove(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.tay_fileName); ADOLC_CURRENT_TAPE_INFOS.tay_file = NULL; } return; } if (ADOLC_CURRENT_TAPE_INFOS.tay_file != NULL) { if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) put_tay_block(ADOLC_CURRENT_TAPE_INFOS.currTay); } else { ADOLC_CURRENT_TAPE_INFOS.numTays_Tape = ADOLC_CURRENT_TAPE_INFOS.currTay - ADOLC_CURRENT_TAPE_INFOS.tayBuffer; } ADOLC_CURRENT_TAPE_INFOS.lastTayBlockInCore = 1; ADOLC_CURRENT_TAPE_INFOS.stats[TAY_STACK_SIZE] = ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; /* keep track of the Ind/Dep counts of the taylor stack */ ADOLC_CURRENT_TAPE_INFOS.tay_numInds = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]; ADOLC_CURRENT_TAPE_INFOS.tay_numDeps = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS]; #if defined(ADOLC_DEBUG) if (ADOLC_CURRENT_TAPE_INFOS.tay_file != NULL) fprintf(DIAG_OUT, "\n ADOL-C debug: Taylor file of length %d bytes " "completed\n", (int)(ADOLC_CURRENT_TAPE_INFOS.numTays_Tape*sizeof(revreal))); else fprintf(DIAG_OUT, "\n ADOL-C debug: Taylor array of length %d bytes " "completed\n", (int)(ADOLC_CURRENT_TAPE_INFOS.numTays_Tape*sizeof(revreal))); #endif } /****************************************************************************/ /* Initializes a reverse sweep. */ /****************************************************************************/ void taylor_back (short tag, int* dep, int* ind, int* degree) { int i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* this should be removed soon since values can be accessed via */ /* ADOLC_CURRENT_TAPE_INFOS directly */ *dep = ADOLC_CURRENT_TAPE_INFOS.tay_numDeps; *ind = ADOLC_CURRENT_TAPE_INFOS.tay_numInds; *degree = ADOLC_CURRENT_TAPE_INFOS.deg_save; if (ADOLC_CURRENT_TAPE_INFOS.tayBuffer == NULL) fail(ADOLC_REVERSE_NO_TAYLOR_STACK); ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber = ADOLC_CURRENT_TAPE_INFOS.numTays_Tape / ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; number = ADOLC_CURRENT_TAPE_INFOS.numTays_Tape % ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; ADOLC_CURRENT_TAPE_INFOS.currTay = ADOLC_CURRENT_TAPE_INFOS.tayBuffer + number; if (ADOLC_CURRENT_TAPE_INFOS.lastTayBlockInCore != 1) { if ( fseek(ADOLC_CURRENT_TAPE_INFOS.tay_file, sizeof(revreal) * ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber * ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE], SEEK_SET) == -1 ) fail(ADOLC_EVAL_SEEK_VALUE_STACK); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(revreal); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fread(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + i * chunkSize, chunkSize * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file)) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fread(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + chunks * chunkSize, remain * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file)) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); } --ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber; } /****************************************************************************/ /* Writes the block of size depth of taylor coefficients from point loc to */ /* the taylor buffer. If the buffer is filled, then it is written to the */ /* taylor tape. */ /****************************************************************************/ void write_taylor(locint loc, int keep) { revreal *i; double *T; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; T = ADOLC_CURRENT_TAPE_INFOS.dpp_T[loc]; /* write data to buffer and put buffer to disk as long as data remain in * the T-buffer => don't create an empty value stack buffer! */ while (ADOLC_CURRENT_TAPE_INFOS.currTay + keep > ADOLC_CURRENT_TAPE_INFOS.lastTayP1) { for (i = ADOLC_CURRENT_TAPE_INFOS.currTay; i < ADOLC_CURRENT_TAPE_INFOS.lastTayP1; ++i) { *i = (revreal) * T; /* In this assignment the precision will be sacrificed if the type * revreal is defined as float. */ ++T; } keep -= ADOLC_CURRENT_TAPE_INFOS.lastTayP1 - ADOLC_CURRENT_TAPE_INFOS.currTay; put_tay_block(ADOLC_CURRENT_TAPE_INFOS.lastTayP1); } for (i = ADOLC_CURRENT_TAPE_INFOS.currTay; i < ADOLC_CURRENT_TAPE_INFOS.currTay + keep; ++i) { *i = (revreal) * T; /* In this assignment the precision will be sacrificed * if the type revreal is defined as float. */ ++T; } ADOLC_CURRENT_TAPE_INFOS.currTay += keep; } /****************************************************************************/ /* Writes the block of size depth of taylor coefficients from point loc to */ /* the taylor buffer. If the buffer is filled, then it is written to the */ /* taylor tape. */ /*--------------------------------------------------------------------------*/ void write_taylors(locint loc, int keep, int degree, int numDir) { int i, j; double *T; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; T = ADOLC_CURRENT_TAPE_INFOS.dpp_T[loc]; for (j = 0; j < numDir; ++j) { for (i = 0; i < keep; ++i) { if (ADOLC_CURRENT_TAPE_INFOS.currTay == ADOLC_CURRENT_TAPE_INFOS.lastTayP1) put_tay_block(ADOLC_CURRENT_TAPE_INFOS.lastTayP1); *ADOLC_CURRENT_TAPE_INFOS.currTay = (revreal) * T; /* The precision will be sacrificed if the type * revreal is defined as float. */ ++ADOLC_CURRENT_TAPE_INFOS.currTay; ++T; } /* for (i = keep; i < degree; ++i) ++T;*/ if (degree > keep) T += degree - keep; } } /****************************************************************************/ /* Write_scaylors writes # size elements from x to the taylor buffer. */ /****************************************************************************/ void write_scaylors(revreal *x, uint size) { revreal *i; uint j = 0; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* write data to buffer and put buffer to disk as long as data remain in * the x-buffer => don't create an empty value stack buffer! */ while (ADOLC_CURRENT_TAPE_INFOS.currTay + size > ADOLC_CURRENT_TAPE_INFOS.lastTayP1) { for (i = ADOLC_CURRENT_TAPE_INFOS.currTay; i < ADOLC_CURRENT_TAPE_INFOS.lastTayP1; ++i) { *i = x[j]; ++j; } size -= ADOLC_CURRENT_TAPE_INFOS.lastTayP1 - ADOLC_CURRENT_TAPE_INFOS.currTay; put_tay_block(ADOLC_CURRENT_TAPE_INFOS.lastTayP1); } for (i = ADOLC_CURRENT_TAPE_INFOS.currTay; i < ADOLC_CURRENT_TAPE_INFOS.tayBuffer + size; ++i) { *ADOLC_CURRENT_TAPE_INFOS.currTay = x[j]; ++j; } ADOLC_CURRENT_TAPE_INFOS.currTay += size; } /****************************************************************************/ /* Writes the value stack buffer onto hard disk. */ /****************************************************************************/ void put_tay_block(revreal *lastTayP1) { int i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.tay_file == NULL) { ADOLC_CURRENT_TAPE_INFOS.tay_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.tay_fileName, "w+b"); if (ADOLC_CURRENT_TAPE_INFOS.tay_file == NULL) fail(ADOLC_TAPING_TAYLOR_OPEN_FAILED); } number = lastTayP1 - ADOLC_CURRENT_TAPE_INFOS.tayBuffer; if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(revreal); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + i * chunkSize, chunkSize * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + chunks * chunkSize, remain * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += number; } ADOLC_CURRENT_TAPE_INFOS.currTay = ADOLC_CURRENT_TAPE_INFOS.tayBuffer; ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /* Puts a block of taylor coefficients from the value stack buffer to the */ /* taylor buffer. --- Higher Order Scalar */ /****************************************************************************/ void get_taylors(locint loc, int degree) { int j; revreal *i; revreal *T; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; T = ADOLC_CURRENT_TAPE_INFOS.rpp_T[loc] + degree; /* As long as all values from the taylor stack buffer will be used copy * them into the taylor buffer and load the next (previous) buffer. */ while (ADOLC_CURRENT_TAPE_INFOS.currTay - degree < ADOLC_CURRENT_TAPE_INFOS.tayBuffer) { for ( i = ADOLC_CURRENT_TAPE_INFOS.currTay - 1; i >= ADOLC_CURRENT_TAPE_INFOS.tayBuffer; --i ) { --T; *T = *i; } degree -= ADOLC_CURRENT_TAPE_INFOS.currTay - ADOLC_CURRENT_TAPE_INFOS.tayBuffer; get_tay_block_r(); } /* Copy the remaining values from the stack into the buffer ... */ for (j = 0; j < degree; ++j) { --ADOLC_CURRENT_TAPE_INFOS.currTay; --T; *T = *ADOLC_CURRENT_TAPE_INFOS.currTay; } } /****************************************************************************/ /* Puts a block of taylor coefficients from the value stack buffer to the */ /* taylor buffer. --- Higher Order Vector */ /****************************************************************************/ void get_taylors_p(locint loc, int degree, int numDir) { int i, j; revreal *T; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; T = ADOLC_CURRENT_TAPE_INFOS.rpp_T[loc] + degree * numDir; /* update the directions except the base point parts */ for (j = 0; j < numDir; ++j) { for (i = 1; i < degree; ++i) { if (ADOLC_CURRENT_TAPE_INFOS.currTay == ADOLC_CURRENT_TAPE_INFOS.tayBuffer) get_tay_block_r(); --ADOLC_CURRENT_TAPE_INFOS.currTay; --T; *T = *ADOLC_CURRENT_TAPE_INFOS.currTay; } --T; /* skip the base point part */ } /* now update the base point parts */ if (ADOLC_CURRENT_TAPE_INFOS.currTay == ADOLC_CURRENT_TAPE_INFOS.tayBuffer) get_tay_block_r(); --ADOLC_CURRENT_TAPE_INFOS.currTay; for (i = 0; i < numDir; ++i) { *T = *ADOLC_CURRENT_TAPE_INFOS.currTay; T += degree; } } /****************************************************************************/ /* Gets the next (previous block) of the value stack */ /****************************************************************************/ void get_tay_block_r() { int i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_CURRENT_TAPE_INFOS.lastTayBlockInCore = 0; number = ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; if ( fseek(ADOLC_CURRENT_TAPE_INFOS.tay_file, sizeof(revreal) * ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber * number, SEEK_SET) == -1 ) fail(ADOLC_EVAL_SEEK_VALUE_STACK); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(revreal); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fread(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + i * chunkSize, chunkSize * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file)) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fread(ADOLC_CURRENT_TAPE_INFOS.tayBuffer + chunks * chunkSize, remain * sizeof(revreal), 1, ADOLC_CURRENT_TAPE_INFOS.tay_file)) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.currTay = ADOLC_CURRENT_TAPE_INFOS.lastTayP1; --ADOLC_CURRENT_TAPE_INFOS.nextBufferNumber; } /****************************************************************************/ /****************************************************************************/ /* NON-VALUE-STACK FUNCTIONS */ /****************************************************************************/ /****************************************************************************/ void initTapeBuffers() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.opBuffer == NULL) ADOLC_CURRENT_TAPE_INFOS.opBuffer = (unsigned char *) malloc(ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE] * sizeof(unsigned char)); if (ADOLC_CURRENT_TAPE_INFOS.locBuffer == NULL) ADOLC_CURRENT_TAPE_INFOS.locBuffer = (locint *) malloc(ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE] * sizeof(locint)); if (ADOLC_CURRENT_TAPE_INFOS.valBuffer == NULL) ADOLC_CURRENT_TAPE_INFOS.valBuffer = (double *) malloc(ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE] * sizeof(double)); if ( ADOLC_CURRENT_TAPE_INFOS.opBuffer == NULL || ADOLC_CURRENT_TAPE_INFOS.locBuffer == NULL || ADOLC_CURRENT_TAPE_INFOS.valBuffer == NULL ) fail(ADOLC_TAPING_BUFFER_ALLOCATION_FAILED); ADOLC_CURRENT_TAPE_INFOS.lastOpP1 = ADOLC_CURRENT_TAPE_INFOS.opBuffer + ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE]; ADOLC_CURRENT_TAPE_INFOS.lastLocP1 = ADOLC_CURRENT_TAPE_INFOS.locBuffer + ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; ADOLC_CURRENT_TAPE_INFOS.lastValP1 = ADOLC_CURRENT_TAPE_INFOS.valBuffer + ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]; } /****************************************************************************/ /* start_trace: (part of trace_on) */ /* Initialization for the taping process. Does buffer allocation, sets */ /* files names, and calls appropriate setup routines. */ /****************************************************************************/ void start_trace() { int i, space; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; initTapeBuffers(); ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer; ADOLC_CURRENT_TAPE_INFOS.num_eq_prod = 0; ADOLC_CURRENT_TAPE_INFOS.numSwitches = 0; ADOLC_CURRENT_TAPE_INFOS.workMode = ADOLC_TAPING; /* Put operation denoting the start_of_the tape */ put_op(start_of_tape); /* Leave space for the stats */ space = STAT_SIZE * sizeof(size_t) + sizeof(ADOLC_ID); if (space > statSpace * sizeof(locint)) fail(ADOLC_MORE_STAT_SPACE_REQUIRED); for (i = 0; i < statSpace; ++i) ADOLC_PUT_LOCINT(0); /* initialize value stack if necessary */ if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) taylor_begin(ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE], 0); /* mark possible (hard disk) tape creation */ markNewTape(); } static void save_params() { size_t np; size_t ip, avail, remain, chunk; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM] = ADOLC_GLOBAL_TAPE_VARS.numparam; if (ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore != NULL) free(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore); ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore = malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM]*sizeof(double)); memcpy(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore, ADOLC_GLOBAL_TAPE_VARS.pStore, ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM]*sizeof(double)); free_all_taping_params(); if (ADOLC_CURRENT_TAPE_INFOS.currVal + ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM] < ADOLC_CURRENT_TAPE_INFOS.lastValP1) put_vals_notWriteBlock(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore, ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM]); else { np = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM]; ip = 0; while (ip < np) { avail = ADOLC_CURRENT_TAPE_INFOS.lastValP1 - ADOLC_CURRENT_TAPE_INFOS.currVal; remain = np - ip; chunk = (availopBuffer); tapeInfos->opBuffer = NULL; free(tapeInfos->locBuffer); tapeInfos->locBuffer = NULL; free(tapeInfos->valBuffer); tapeInfos->valBuffer = NULL; if (tapeInfos->tayBuffer != NULL) { free(tapeInfos->tayBuffer); tapeInfos->tayBuffer = NULL; --numTBuffersInUse; } if (tapeInfos->op_file != NULL) { fclose(tapeInfos->op_file); tapeInfos->op_file = NULL; } if (tapeInfos->loc_file != NULL) { fclose(tapeInfos->loc_file); tapeInfos->loc_file = NULL; } if (tapeInfos->val_file != NULL) { fclose(tapeInfos->val_file); tapeInfos->val_file = NULL; } if (tapeInfos->tay_file != NULL) { fclose(tapeInfos->tay_file); tapeInfos->tay_file = NULL; } } /****************************************************************************/ /* Tapestats: */ /* Returns statistics on the tape tag with following meaning: */ /* tape_stat[0] = # of independent variables. */ /* tape_stat[1] = # of dependent variables. */ /* tape_stat[2] = max # of live variables. */ /* tape_stat[3] = value stack size. */ /* tape_stat[4] = buffer size (# of chars, # of doubles, # of locints) */ /* tape_stat[5] = # of operations. */ /* tape_stat[6] = operation file access flag (1 = file in use, 0 otherwise) */ /* tape_stat[7] = # of saved locations. */ /* tape_stat[8] = location file access flag (1 = file in use, 0 otherwise) */ /* tape_stat[9] = # of saved constant values. */ /* tape_stat[10]= value file access flag (1 = file in use, 0 otherwise) */ /****************************************************************************/ void tapestats(short tag, size_t *tape_stats) { int i; TapeInfos *tapeInfos; /* get the tapeInfos for tag */ tapeInfos = getTapeInfos(tag); /* copy stats to the users field */ for (i = 0; i < STAT_SIZE; ++i) tape_stats[i] = tapeInfos->stats[i]; } /****************************************************************************/ /* An all-in-one tape stats printing routine. */ /****************************************************************************/ void printTapeStats(FILE *stream, short tag) { size_t stats[STAT_SIZE]; tapestats(tag, (size_t *)&stats); fprintf(stream, "\n*** TAPE STATS (tape %d) **********\n", (int)tag); fprintf(stream, "Number of independents: %10zu\n", stats[NUM_INDEPENDENTS]); fprintf(stream, "Number of dependents: %10zu\n", stats[NUM_DEPENDENTS]); fprintf(stream, "\n"); fprintf(stream, "Max # of live adoubles: %10zu\n", stats[NUM_MAX_LIVES]); fprintf(stream, "Taylor stack size: %10zu\n", stats[TAY_STACK_SIZE]); fprintf(stream, "\n"); fprintf(stream, "Number of operations: %10zu\n", stats[NUM_OPERATIONS]); fprintf(stream, "Number of locations: %10zu\n", stats[NUM_LOCATIONS]); fprintf(stream, "Number of values: %10zu\n", stats[NUM_VALUES]); fprintf(stream, "Number of parameters: %10zu\n", stats[NUM_PARAM]); fprintf(stream, "\n"); fprintf(stream, "Operation file written: %10zu\n", stats[OP_FILE_ACCESS]); fprintf(stream, "Location file written: %10zu\n", stats[LOC_FILE_ACCESS]); fprintf(stream, "Value file written: %10zu\n", stats[VAL_FILE_ACCESS]); fprintf(stream, "\n"); fprintf(stream, "Operation buffer size: %10zu\n", stats[OP_BUFFER_SIZE]); fprintf(stream, "Location buffer size: %10zu\n", stats[LOC_BUFFER_SIZE]); fprintf(stream, "Value buffer size: %10zu\n", stats[VAL_BUFFER_SIZE]); fprintf(stream, "Taylor buffer size: %10zu\n", stats[TAY_BUFFER_SIZE]); fprintf(stream, "\n"); fprintf(stream, "Operation type size: %10zu\n", (size_t)sizeof(unsigned char)); fprintf(stream, "Location type size: %10zu\n", (size_t)sizeof(locint)); fprintf(stream, "Value type size: %10zu\n", (size_t)sizeof(double)); fprintf(stream, "Taylor type size: %10zu\n", (size_t)sizeof(revreal)); fprintf(stream, "**********************************\n\n"); } /****************************************************************************/ /* Returns the number of parameters recorded on tape */ /****************************************************************************/ size_t get_num_param(short tag) { TapeInfos *tapeInfos; tapeInfos = getTapeInfos(tag); return tapeInfos->stats[NUM_PARAM]; } /****************************************************************************/ /* Reads parameters from the end of value tape for disk based tapes */ /****************************************************************************/ static void read_params(TapeInfos* tapeInfos) { FILE* val_file; int i, chunks; size_t number, remain, chunkSize, nVT; double *valBuffer = NULL, *currVal = NULL, *lastValP1 = NULL; size_t np, ip, avail, rsize; if (tapeInfos->pTapeInfos.paramstore == NULL) tapeInfos->pTapeInfos.paramstore = malloc(tapeInfos->stats[NUM_PARAM]*sizeof(double)); valBuffer = (double*) malloc(tapeInfos->stats[VAL_BUFFER_SIZE] *sizeof(double)); lastValP1 = valBuffer + tapeInfos->stats[VAL_BUFFER_SIZE]; if ((val_file = fopen(tapeInfos->pTapeInfos.val_fileName, "rb")) == NULL) fail(ADOLC_VALUE_TAPE_FOPEN_FAILED); number = (tapeInfos->stats[NUM_VALUES] / tapeInfos->stats[VAL_BUFFER_SIZE]) * tapeInfos->stats[VAL_BUFFER_SIZE]; fseek(val_file, number * sizeof(double), SEEK_SET); number = tapeInfos->stats[NUM_VALUES] % tapeInfos->stats[VAL_BUFFER_SIZE]; if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, val_file) != 1 ) fail(ADOLC_VALUE_TAPE_FREAD_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(valBuffer + chunks * chunkSize, remain * sizeof(double), 1, val_file) != 1) fail(ADOLC_VALUE_TAPE_FREAD_FAILED); } nVT = tapeInfos->stats[NUM_VALUES] - number; currVal = valBuffer + number; np = tapeInfos->stats[NUM_PARAM]; ip = np; while ( ip > 0) { avail = currVal - valBuffer; rsize = (availpTapeInfos.paramstore[--ip] = *--currVal; if (ip > 0) { number = tapeInfos->stats[VAL_BUFFER_SIZE]; fseek(val_file, sizeof(double)*(nVT - number), SEEK_SET); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, val_file) != 1 ) fail(ADOLC_VALUE_TAPE_FREAD_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(valBuffer + chunks * chunkSize, remain * sizeof(double), 1, val_file) != 1) fail(ADOLC_VALUE_TAPE_FREAD_FAILED); nVT -= number; currVal = lastValP1; } } fclose(val_file); free(valBuffer); } /****************************************************************************/ /* Overrides the parameters for the next evaluations. This will invalidate */ /* the taylor stack, so next reverse call will fail, if not preceeded by a */ /* forward call after setting the parameters. */ /****************************************************************************/ void set_param_vec(short tag, size_t numparam, revreal* paramvec) { size_t i; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* mark possible (hard disk) tape creation */ markNewTape(); /* make room for tapeInfos and read tape stats if necessary, keep value * stack information */ openTape(tag, ADOLC_FORWARD); if (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM] != numparam) { fprintf(DIAG_OUT, "ADOL-C error: Setting parameters on tape %d " "aborted!\nNumber of parameters (%zu) passed" " is inconsistent with number recorded on tape (%zu)\n", tag, numparam, ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM]); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } if (ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore == NULL) ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore = (double*) malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM]*sizeof(double)); for(i = 0; i < ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM]; i++) ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[i] = paramvec[i]; taylor_close(0); releaseTape(); } /****************************************************************************/ /* Does the actual reading from the hard disk into the stats buffer */ /****************************************************************************/ void read_tape_stats(TapeInfos *tapeInfos) { FILE *loc_file; int tapeVersion, limitVersion; ADOLC_ID tape_ADOLC_ID; if (tapeInfos->inUse != 0 && tapeInfos->tapingComplete == 0) return; limitVersion = 100 * ADOLC_NEW_TAPE_VERSION + 10 * ADOLC_NEW_TAPE_SUBVERSION + 1 * ADOLC_NEW_TAPE_PATCHLEVEL ; if ((loc_file = fopen(tapeInfos->pTapeInfos.loc_fileName, "rb")) == NULL) fail(ADOLC_INTEGER_TAPE_FOPEN_FAILED); if (fread(&tape_ADOLC_ID, sizeof(ADOLC_ID), 1, loc_file) != 1) fail(ADOLC_INTEGER_TAPE_FREAD_FAILED); if (fread(tapeInfos->stats, STAT_SIZE * sizeof(size_t), 1, loc_file) != 1) fail(ADOLC_INTEGER_TAPE_FREAD_FAILED); failAdditionalInfo1 = tapeInfos->tapeID; tapeVersion = 100 * tape_ADOLC_ID.adolc_ver + 10 * tape_ADOLC_ID.adolc_sub + 1 * tape_ADOLC_ID.adolc_lvl ; if (tapeVersion < limitVersion) fail(ADOLC_TAPE_TO_OLD); if (tape_ADOLC_ID.address_size != adolc_id.address_size) { if (tape_ADOLC_ID.address_size < adolc_id.address_size) fail(ADOLC_WRONG_PLATFORM_64); else fail(ADOLC_WRONG_PLATFORM_32); } if (tape_ADOLC_ID.locint_size != adolc_id.locint_size) { failAdditionalInfo1 = tape_ADOLC_ID.locint_size; failAdditionalInfo2 = adolc_id.locint_size; fail(ADOLC_WRONG_LOCINT_SIZE); } fclose(loc_file); tapeInfos->tapingComplete = 1; if (tapeInfos->stats[NUM_PARAM] > 0) read_params(tapeInfos); } void skip_tracefile_cleanup(short tnum) { TapeInfos *tinfo = getTapeInfos(tnum); tinfo->pTapeInfos.skipFileCleanup = 1; } /****************************************************************************/ /* Initialize a forward sweep. Get stats, open tapes, fill buffers, ... */ /****************************************************************************/ void init_for_sweep(short tag) { int i = 0, chunks, numLocsForStats; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* mark possible (hard disk) tape creation */ markNewTape(); /* make room for tapeInfos and read tape stats if necessary, keep value * stack information */ openTape(tag, ADOLC_FORWARD); initTapeBuffers(); /* init operations */ number = 0; if (ADOLC_CURRENT_TAPE_INFOS.stats[OP_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "rb"); /* how much to read ? */ number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS]); if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1 ) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1 ) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); } /* how much remains ? */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS] - number; } ADOLC_CURRENT_TAPE_INFOS.numOps_Tape = number; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer; /* init locations */ number = 0; if (ADOLC_CURRENT_TAPE_INFOS.stats[LOC_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "rb"); /* how much to read ? */ number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS]); if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1 ) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1 ) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); } /* how much remains ? */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] - number; } ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape = number; /* skip stats */ numLocsForStats = statSpace; while (numLocsForStats >= ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]) { get_loc_block_f(); numLocsForStats -= ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; } ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer + numLocsForStats; /* init constants */ number = 0; if (ADOLC_CURRENT_TAPE_INFOS.stats[VAL_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "rb"); /* how much to read ? */ number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES]); if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1 ) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1 ) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); } /* how much remains ? */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES] - number; } ADOLC_CURRENT_TAPE_INFOS.numVals_Tape = number; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer; #ifdef ADOLC_AMPI_SUPPORT TAPE_AMPI_resetBottom(); #endif } /****************************************************************************/ /* Initialize a reverse sweep. Get stats, open tapes, fill buffers, ... */ /****************************************************************************/ void init_rev_sweep(short tag) { int i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* mark possible (hard disk) tape creation */ markNewTape(); /* make room for tapeInfos and read tape stats if necessary, keep value * stack information */ openTape(tag, ADOLC_REVERSE); initTapeBuffers(); /* init operations */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS]; if (ADOLC_CURRENT_TAPE_INFOS.stats[OP_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "rb"); number = (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS] / ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE]) * ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.op_file, number * sizeof(unsigned char), SEEK_SET); number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS] % ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE] ; if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1 ) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1 ) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); } } ADOLC_CURRENT_TAPE_INFOS.numOps_Tape = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_OPERATIONS] - number; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer + number; /* init locations */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS]; if (ADOLC_CURRENT_TAPE_INFOS.stats[LOC_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "rb"); number = (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] / ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]) * ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.loc_file, number * sizeof(locint), SEEK_SET); number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] % ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1 ) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1 ) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); } } ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_LOCATIONS] - number; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer + number; /* init constants */ number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES]; if (ADOLC_CURRENT_TAPE_INFOS.stats[VAL_FILE_ACCESS] == 1) { ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "rb"); number = (ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES] / ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]) * ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.val_file, number * sizeof(double), SEEK_SET); number = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES] % ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]; if (number != 0) { chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1 ) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1 ) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); } } ADOLC_CURRENT_TAPE_INFOS.numVals_Tape = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_VALUES] - number; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer + number; #ifdef ADOLC_AMPI_SUPPORT TAPE_AMPI_resetTop(); #endif } /****************************************************************************/ /* Finish a forward or reverse sweep. */ /****************************************************************************/ void end_sweep() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.op_file != NULL) { fclose(ADOLC_CURRENT_TAPE_INFOS.op_file); ADOLC_CURRENT_TAPE_INFOS.op_file = NULL; } if (ADOLC_CURRENT_TAPE_INFOS.loc_file != NULL) { fclose(ADOLC_CURRENT_TAPE_INFOS.loc_file); ADOLC_CURRENT_TAPE_INFOS.loc_file = NULL; } if (ADOLC_CURRENT_TAPE_INFOS.val_file != NULL) { fclose(ADOLC_CURRENT_TAPE_INFOS.val_file); ADOLC_CURRENT_TAPE_INFOS.val_file = NULL; } if (ADOLC_CURRENT_TAPE_INFOS.deg_save > 0) releaseTape(); /* keep value stack */ else releaseTape(); /* no value stack */ } /* --- Operations --- */ #if defined(__USE_ISOC99) const int maxLocsPerOp=10; #endif /****************************************************************************/ /* Puts an operation into the operation buffer. Ensures that location buffer*/ /* and constants buffer are prepared to take the belonging stuff. */ /****************************************************************************/ void put_op_reserve(unsigned char op, unsigned int reserveExtraLocations) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* make sure we have enough slots to write the locs */ if (ADOLC_CURRENT_TAPE_INFOS.currLoc + maxLocsPerOp + reserveExtraLocations > ADOLC_CURRENT_TAPE_INFOS.lastLocP1) { size_t remainder = ADOLC_CURRENT_TAPE_INFOS.lastLocP1 - ADOLC_CURRENT_TAPE_INFOS.currLoc; if (remainder>0) memset(ADOLC_CURRENT_TAPE_INFOS.currLoc,0,(remainder-1)*sizeof(locint)); *(ADOLC_CURRENT_TAPE_INFOS.lastLocP1 - 1) = remainder; put_loc_block(ADOLC_CURRENT_TAPE_INFOS.lastLocP1); /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_int; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } /* every operation writes <5 values --- 3 should be sufficient */ if (ADOLC_CURRENT_TAPE_INFOS.currVal + 5 > ADOLC_CURRENT_TAPE_INFOS.lastValP1) { locint valRemainder=ADOLC_CURRENT_TAPE_INFOS.lastValP1 - ADOLC_CURRENT_TAPE_INFOS.currVal; ADOLC_PUT_LOCINT(valRemainder); /* avoid writing uninitialized memory to the file and get valgrind upset */ memset(ADOLC_CURRENT_TAPE_INFOS.currVal,0,valRemainder*sizeof(double)); put_val_block(ADOLC_CURRENT_TAPE_INFOS.lastValP1); /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_val; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } /****************************************************************************/ /* Writes a block of operations onto hard disk and handles file creation, */ /* removal, ... */ /****************************************************************************/ void put_op_block(unsigned char *lastOpP1) { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.op_file == NULL) { ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "rb"); if (ADOLC_CURRENT_TAPE_INFOS.op_file != NULL) { #if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "ADOL-C debug: Old tapefile %s gets removed!\n", ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName); #endif fclose(ADOLC_CURRENT_TAPE_INFOS.op_file); ADOLC_CURRENT_TAPE_INFOS.op_file = NULL; if (remove(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName)) fprintf(DIAG_OUT, "ADOL-C warning: " "Unable to remove old tapefile\n"); ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "wb"); } else { ADOLC_CURRENT_TAPE_INFOS.op_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.op_fileName, "wb"); } } number = lastOpP1 - ADOLC_CURRENT_TAPE_INFOS.opBuffer; chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) ) != 1 ) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) ) != 1 ) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.numOps_Tape += number; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer; ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /* Reads the next operations block into the internal buffer. */ /****************************************************************************/ void get_op_block_f() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.numOps_Tape); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numOps_Tape -= remain; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer; } /****************************************************************************/ /* Reads the previous block of operations into the internal buffer. */ /****************************************************************************/ void get_op_block_r() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.op_file, sizeof(unsigned char) * (ADOLC_CURRENT_TAPE_INFOS.numOps_Tape - number), SEEK_SET); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(unsigned char); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + i * chunkSize, chunkSize * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.opBuffer + chunks * chunkSize, remain * sizeof(unsigned char), 1, ADOLC_CURRENT_TAPE_INFOS.op_file) != 1) fail(ADOLC_EVAL_OP_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numOps_Tape -= number; ADOLC_CURRENT_TAPE_INFOS.currOp = ADOLC_CURRENT_TAPE_INFOS.opBuffer + number; } /* --- Locations --- */ /****************************************************************************/ /* Writes a block of locations onto hard disk and handles file creation, */ /* removal, ... */ /****************************************************************************/ void put_loc_block(locint *lastLocP1) { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.loc_file == NULL) { ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "rb"); if (ADOLC_CURRENT_TAPE_INFOS.loc_file != NULL) { #if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "ADOL-C debug: Old tapefile %s gets removed!\n", ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName); #endif fclose(ADOLC_CURRENT_TAPE_INFOS.loc_file); ADOLC_CURRENT_TAPE_INFOS.loc_file = NULL; if (remove(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName)) fprintf(DIAG_OUT, "ADOL-C warning: " "Unable to remove old tapefile!\n"); ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "wb"); } else { ADOLC_CURRENT_TAPE_INFOS.loc_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.loc_fileName, "wb"); } } number = lastLocP1 - ADOLC_CURRENT_TAPE_INFOS.locBuffer; chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape += number; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer; ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /* Reads the next block of locations into the internal buffer. */ /****************************************************************************/ void get_loc_block_f() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof (locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape -= number; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.locBuffer; } /****************************************************************************/ /* Reads the previous block of locations into the internal buffer. */ /****************************************************************************/ void get_loc_block_r() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.loc_file, sizeof(locint) * (ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape - number), SEEK_SET); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(locint); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + i * chunkSize, chunkSize * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.locBuffer + chunks * chunkSize, remain * sizeof(locint), 1, ADOLC_CURRENT_TAPE_INFOS.loc_file) != 1) fail(ADOLC_EVAL_LOC_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numLocs_Tape -= ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE]; ADOLC_CURRENT_TAPE_INFOS.currLoc = ADOLC_CURRENT_TAPE_INFOS.lastLocP1 - *(ADOLC_CURRENT_TAPE_INFOS.lastLocP1 - 1); } /* --- Values (Constants -- Real) --- */ /****************************************************************************/ /* Writes a block of constants (real) onto hard disk and handles file */ /* creation, removal, ... */ /****************************************************************************/ void put_vals_writeBlock(double *vals, locint numVals) { int i; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; for (i = 0; i < numVals; ++i) { *ADOLC_CURRENT_TAPE_INFOS.currVal = vals[i]; ++ADOLC_CURRENT_TAPE_INFOS.currVal; } ADOLC_PUT_LOCINT(ADOLC_CURRENT_TAPE_INFOS.lastValP1 - ADOLC_CURRENT_TAPE_INFOS.currVal); put_val_block(ADOLC_CURRENT_TAPE_INFOS.lastValP1); /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_val; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } /****************************************************************************/ /* Write some constants to the buffer without disk access */ /****************************************************************************/ void put_vals_notWriteBlock(double *vals, locint numVals) { int i; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; for (i = 0; i < numVals; ++i) { *ADOLC_CURRENT_TAPE_INFOS.currVal = vals[i]; ++ADOLC_CURRENT_TAPE_INFOS.currVal; } } /****************************************************************************/ /* Writes a block of constants (real) onto tape and handles file creation */ /* removal, ... */ /****************************************************************************/ void put_val_block(double *lastValP1) { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.val_file == NULL) { ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "rb"); if (ADOLC_CURRENT_TAPE_INFOS.val_file != NULL) { #if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "ADOL-C debug: Old tapefile %s gets removed!\n", ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName); #endif fclose(ADOLC_CURRENT_TAPE_INFOS.val_file); ADOLC_CURRENT_TAPE_INFOS.val_file = NULL; if (remove(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName)) fprintf(DIAG_OUT, "ADOL-C warning: " "Unable to remove old tapefile\n"); ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "wb"); } else { ADOLC_CURRENT_TAPE_INFOS.val_file = fopen(ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.val_fileName, "wb"); } } number = lastValP1 - ADOLC_CURRENT_TAPE_INFOS.valBuffer; chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); remain = number % chunkSize; if (remain != 0) if ((failAdditionalInfo1 = fwrite(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) ) != 1) fail(ADOLC_TAPING_FATAL_IO_ERROR); ADOLC_CURRENT_TAPE_INFOS.numVals_Tape += number; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer; ADOLC_OPENMP_RESTORE_THREAD_NUMBER; } /****************************************************************************/ /* Reads the next block of constants into the internal buffer. */ /****************************************************************************/ void get_val_block_f() { size_t i, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = MIN_ADOLC(ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE], ADOLC_CURRENT_TAPE_INFOS.numVals_Tape); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof (double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numVals_Tape -= number; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.valBuffer; /* get_locint_f(); value used in reverse only */ ++ADOLC_CURRENT_TAPE_INFOS.currLoc; } /****************************************************************************/ /* Reads the previous block of values into the internal buffer. */ /****************************************************************************/ void get_val_block_r() { size_t i, chunks; size_t number, remain, chunkSize; locint temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; number = ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.val_file, sizeof(double) * (ADOLC_CURRENT_TAPE_INFOS.numVals_Tape - number), SEEK_SET); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numVals_Tape -= number; --ADOLC_CURRENT_TAPE_INFOS.currLoc; temp = *ADOLC_CURRENT_TAPE_INFOS.currLoc; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.lastValP1 - temp; } /****************************************************************************/ /* Returns the number of free constants in the real tape. Ensures that it */ /* is at least 5. */ /****************************************************************************/ locint get_val_space(void) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.lastValP1 - 5 < ADOLC_CURRENT_TAPE_INFOS.currVal) { ADOLC_PUT_LOCINT(ADOLC_CURRENT_TAPE_INFOS.lastValP1 - ADOLC_CURRENT_TAPE_INFOS.currVal); put_val_block(ADOLC_CURRENT_TAPE_INFOS.lastValP1); /* every operation writes 1 opcode */ if (ADOLC_CURRENT_TAPE_INFOS.currOp + 1 == ADOLC_CURRENT_TAPE_INFOS.lastOpP1) { *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; put_op_block(ADOLC_CURRENT_TAPE_INFOS.lastOpP1); *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_op; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } *ADOLC_CURRENT_TAPE_INFOS.currOp = end_of_val; ++ADOLC_CURRENT_TAPE_INFOS.currOp; } return (ADOLC_CURRENT_TAPE_INFOS.lastValP1 - ADOLC_CURRENT_TAPE_INFOS.currVal); } /****************************************************************************/ /* Discards parameters from the end of value tape during reverse mode */ /****************************************************************************/ void discard_params_r(void) { size_t i, np, ip, avail, rsize, chunks; size_t number, remain, chunkSize; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; np = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM]; ip = np; while ( ip > 0 ) { avail = ADOLC_CURRENT_TAPE_INFOS.currVal - ADOLC_CURRENT_TAPE_INFOS.valBuffer; rsize = (avail 0 ) { number = ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE]; fseek(ADOLC_CURRENT_TAPE_INFOS.val_file, sizeof(double) * (ADOLC_CURRENT_TAPE_INFOS.numVals_Tape - number), SEEK_SET); chunkSize = ADOLC_IO_CHUNK_SIZE / sizeof(double); chunks = number / chunkSize; for (i = 0; i < chunks; ++i) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + i * chunkSize, chunkSize * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); remain = number % chunkSize; if (remain != 0) if (fread(ADOLC_CURRENT_TAPE_INFOS.valBuffer + chunks * chunkSize, remain * sizeof(double), 1, ADOLC_CURRENT_TAPE_INFOS.val_file) != 1) fail(ADOLC_EVAL_VAL_TAPE_READ_FAILED); ADOLC_CURRENT_TAPE_INFOS.numVals_Tape -= number; ADOLC_CURRENT_TAPE_INFOS.currVal = ADOLC_CURRENT_TAPE_INFOS.lastValP1; } } } /****************************************************************************/ /* Returns a pointer to the first element of a values vector and skips the */ /* vector. -- Forward Mode -- */ /****************************************************************************/ double *get_val_v_f(locint size) { double *temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; temp = ADOLC_CURRENT_TAPE_INFOS.currVal; ADOLC_CURRENT_TAPE_INFOS.currVal += size; return temp; } /****************************************************************************/ /* Returns a pointer to the first element of a values vector and skips the */ /* vector. -- Reverse Mode -- */ /****************************************************************************/ double *get_val_v_r(locint size) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_CURRENT_TAPE_INFOS.currVal -= size; return ADOLC_CURRENT_TAPE_INFOS.currVal; } /* --- Updates / Corrections --- */ /****************************************************************************/ /* Not sure what's going on here! -> vector class ? --- kowarz */ /****************************************************************************/ void reset_val_r(void) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.currVal == ADOLC_CURRENT_TAPE_INFOS.valBuffer) get_val_block_r(); } /****************************************************************************/ /* Update locations tape to remove assignments involving temp. variables. */ /* e.g. t = a + b ; y = t => y = a + b */ /****************************************************************************/ int upd_resloc(locint temp, locint lhs) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.currLoc - ADOLC_CURRENT_TAPE_INFOS.locBuffer < 1) return 0; if (temp == *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 1)) { *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 1) = lhs; return 1; } return 0; } int upd_resloc_check(locint temp, locint lhs) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.currLoc - ADOLC_CURRENT_TAPE_INFOS.locBuffer < 1) return 0; if (temp == *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 1)) { return 1; } return 0; } /****************************************************************************/ /* Update locations and operations tape to remove special operations inv. */ /* temporary variables. e.g. t = a * b ; y += t => y += a * b */ /****************************************************************************/ int upd_resloc_inc_prod(locint temp, locint newlhs, unsigned char newop) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.currLoc - ADOLC_CURRENT_TAPE_INFOS.locBuffer < 3) return 0; if (ADOLC_CURRENT_TAPE_INFOS.currOp - ADOLC_CURRENT_TAPE_INFOS.opBuffer < 1) return 0; if (temp == *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 1) && mult_a_a == *(ADOLC_CURRENT_TAPE_INFOS.currOp - 1) && /* skipping recursive case */ newlhs != *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 2) && newlhs != *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 3) ) { *(ADOLC_CURRENT_TAPE_INFOS.currLoc - 1) = newlhs; *(ADOLC_CURRENT_TAPE_INFOS.currOp - 1) = newop; return 1; } return 0; } void enableBranchSwitchWarnings() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = 1; } void disableBranchSwitchWarnings() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = 0; } /****************************************************************************/ /* UTILs */ /****************************************************************************/ double make_nan() { double a, b; #ifdef inf_num a = non_num; b = non_den; #endif return a / b; } double make_inf() { double a, b; #ifdef inf_num a = inf_num; b = inf_den; #endif return a / b; } /****************************************************************************/ /* DEBUG FUNCTIONS */ #if defined(ADOLC_HARDDEBUG) /*--------------------------------------------------------------------------*/ unsigned char get_op_f() { unsigned char temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; temp = *ADOLC_CURRENT_TAPE_INFOS.currOp; ++ADOLC_CURRENT_TAPE_INFOS.currOp; fprintf(DIAG_OUT, "f_op: %i\n", temp - '\0'); /* why -'\0' ??? kowarz */ return temp; } /*--------------------------------------------------------------------------*/ unsigned char get_op_r() { unsigned char temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; --ADOLC_CURRENT_TAPE_INFOS.currOp; temp = *ADOLC_CURRENT_TAPE_INFOS.currOp; fprintf(DIAG_OUT, "r_op: %i\n", temp - '\0'); return temp; } /*--------------------------------------------------------------------------*/ locint get_locint_f() { locint temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; temp = *ADOLC_CURRENT_TAPE_INFOS.currLoc; ++ADOLC_CURRENT_TAPE_INFOS.currLoc; fprintf(DIAG_OUT, "f_loc: %i\n", temp); return temp; } /*--------------------------------------------------------------------------*/ locint get_locint_r() { unsigned char temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; --ADOLC_CURRENT_TAPE_INFOS.currLoc; temp = *ADOLC_CURRENT_TAPE_INFOS.currLoc; fprintf(DIAG_OUT, "r_loc: %i\n", temp); return temp; } /*--------------------------------------------------------------------------*/ double get_val_f() { double temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; temp = *ADOLC_CURRENT_TAPE_INFOS.currVal; ++ADOLC_CURRENT_TAPE_INFOS.currVal; fprintf(DIAG_OUT, "f_val: %e\n", temp); return temp; } /*--------------------------------------------------------------------------*/ double get_val_r() { double temp; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; --ADOLC_CURRENT_TAPE_INFOS.currVal; temp = *ADOLC_CURRENT_TAPE_INFOS.currVal; fprintf(DIAG_OUT, "r_val: %e\n", temp); return temp; } #endif ADOL-C-2.6.3/ADOL-C/src/checkpointing_p.h0000644000175200017520000000311712373412404016074 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: checkpointing_p.h Revision: $Id: checkpointing_p.h 541 2014-08-15 14:11:16Z kulshres $ Contents: private functions for the checkpointing functions. Copyright (c) Andreas Kowarz, Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_CHECKPOINTING_P_H) #define ADOLC_CHECKPOINTING_P_H 1 #include #include #include "buffer_temp.h" #include "taping_p.h" #include using std::stack; BEGIN_C_DECLS /****************************************************************************/ /* Now the C THINGS */ #define CP_BLOCK_SIZE 10 CpInfos *get_cp_fct(int index); void init_CpInfos(CpInfos *cpInfos); END_C_DECLS /****************************************************************************/ #if defined(__cplusplus) #define ADOLC_BUFFER_TYPE Buffer< CpInfos, CP_BLOCK_SIZE > extern ADOLC_BUFFER_TYPE ADOLC_EXT_DIFF_FCTS_BUFFER_DECL; /* field of pointers to the value fields of a checkpoint */ typedef double **StackElement; extern stack ADOLC_CHECKPOINTS_STACK_DECL; /* a cleanup function */ void cp_clearStack(); #endif #endif /* ADOLC_CHECKPOITING_P_H */ ADOL-C-2.6.3/ADOL-C/src/fov_pl_sig_forward.c0000644000175200017520000000127312426143774016611 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fov_an_forward.c Revision: $Id$ Contents: fov_an_forward (first-order-vector abs-normal forward mode) Copyright (c) Kshitij Kulshrestha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOV_ 1 #undef _KEEP_ #define _ABS_NORM_SIG_ 1 #include #undef _ABS_NORM_SIG_ #undef _FOV_ ADOL-C-2.6.3/ADOL-C/src/sparse/0000755000175200017520000000000013037353015014052 5ustar coincoinADOL-C-2.6.3/ADOL-C/src/sparse/sparsedrivers.cpp0000644000175200017520000013300512564725026017465 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse/sparsedrivers.cpp Revision: $Id: sparsedrivers.cpp 617 2015-08-18 21:56:38Z kulshres $ Contents: "Easy To Use" C++ interfaces of SPARSE package Copyright (c) Andrea Walther, Benjamin Letschert, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include "taping_p.h" #include "oplate.h" #include "dvlparms.h" #include #include #include #if defined(ADOLC_INTERNAL) # if HAVE_CONFIG_H # include "config.h" # endif #endif #if HAVE_LIBCOLPACK #include #endif #include #include #if HAVE_LIBCOLPACK using namespace ColPack; #endif using namespace std; /****************************************************************************/ /******* sparse Jacobains, separate drivers ***************/ /****************************************************************************/ /*--------------------------------------------------------------------------*/ /* sparsity pattern Jacobian */ /*--------------------------------------------------------------------------*/ /* */ int jac_pat( short tag, /* tape identification */ int depen, /* number of dependent variables */ int indep, /* number of independent variables */ const double *basepoint, /* independant variable values */ unsigned int **crs, /* returned compressed row block-index storage */ int *options /* control options options[0] : way of sparsity pattern computation 0 - propagation of index domains (default) 1 - propagation of bit pattern options[1] : test the computational graph control flow 0 - safe mode (default) 1 - tight mode options[2] : way of bit pattern propagation 0 - automatic detection (default) 1 - forward mode 2 - reverse mode */ ) { int rc= -1; int i, ctrl_options[2]; if (crs == NULL) { fprintf(DIAG_OUT,"ADOL-C user error in jac_pat(...) : " "parameter crs may not be NULL !\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else for (i=0; i 1 )) options[0] = 0; /* default */ if (( options[1] < 0 ) || (options[1] > 1 )) options[1] = 0; /* default */ if (( options[2] < -1 ) || (options[2] > 2 )) options[2] = 0; /* default */ if (options[0] == 0) { if (options[1] == 1) rc = indopro_forward_tight(tag, depen, indep, basepoint, crs); else { rc = indopro_forward_safe(tag, depen, indep, basepoint, crs); } } else { ctrl_options[0] = options[1]; ctrl_options[1] = options[2]; rc = bit_vector_propagation( tag, depen, indep, basepoint, crs, ctrl_options); } return(rc); } int absnormal_jac_pat( short tag, /* tape identification */ int depen, /* number of dependent variables */ int indep, /* number of independent variables */ int numsw, /* number of switches */ const double *basepoint, /* independant variable values */ unsigned int **crs /* returned compressed row block-index storage */ ) { if (crs == NULL) { fprintf(DIAG_OUT,"ADOL-C user error in jac_pat(...) : " "parameter crs may not be NULL !\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else for (int i=0; iGenerateSeedJacobian_unmanaged(Seed, p, &dummy, "SMALLEST_LAST","ROW_PARTIAL_DISTANCE_TWO"); else g->GenerateSeedJacobian_unmanaged(Seed, &dummy, p, "SMALLEST_LAST","COLUMN_PARTIAL_DISTANCE_TWO"); delete g; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #endif /****************************************************************************/ /******* sparse Hessians, separate drivers ***************/ /****************************************************************************/ /*---------------------------------------------------------------------------*/ /* sparsity pattern Hessian */ /* */ int hess_pat( short tag, /* tape identification */ int indep, /* number of independent variables */ const double *basepoint, /* independant variable values */ unsigned int **crs, /* returned compressed row block-index storage */ int option /* control option option : test the computational graph control flow 0 - safe mode (default) 1 - tight mode 2 - old safe mode 3 - old tight mode */ ) { int rc= -1; int i; if (crs == NULL) { fprintf(DIAG_OUT,"ADOL-C user error in hess_pat(...) : " "parameter crs may not be NULL !\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else for (i=0; i 3 )) option = 0; /* default */ if (option == 3) rc = nonl_ind_old_forward_tight(tag, 1, indep, basepoint, crs); else if (option == 2) rc = nonl_ind_old_forward_safe(tag, 1, indep, basepoint, crs); else if (option == 1) rc = nonl_ind_forward_tight(tag, 1, indep, basepoint, crs); else rc = nonl_ind_forward_safe(tag, 1, indep, basepoint, crs); return(rc); } /*--------------------------------------------------------------------------*/ /* seed matrix for Hessian */ /*--------------------------------------------------------------------------*/ void generate_seed_hess (int n, unsigned int **HP, double*** Seed, int *p, int option /* control options option : way of compression 0 - indirect recovery (default) 1 - direct recovery */ ) #if HAVE_LIBCOLPACK { int seed_rows; GraphColoringInterface *g = new GraphColoringInterface(SRC_MEM_ADOLC, HP, n); if (option == 0) g->GenerateSeedHessian_unmanaged(Seed, &seed_rows, p, "SMALLEST_LAST","ACYCLIC_FOR_INDIRECT_RECOVERY"); else g->GenerateSeedHessian_unmanaged(Seed, &seed_rows, p, "SMALLEST_LAST","STAR"); delete g; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #endif static void deepcopy_HP(unsigned int ***HPnew, unsigned int **HP, int indep) { int i,j,s; *HPnew = (unsigned int **)malloc(indep*sizeof(unsigned int *)); for (i=0; i 1 )) options[0] = 0; /* default */ if (( options[1] < 0 ) || (options[1] > 1 )) options[1] = 0; /* default */ if (( options[2] < -1 ) || (options[2] > 2 )) options[2] = 0; /* default */ if (( options[3] < 0 ) || (options[3] > 1 )) options[3] = 0; /* default */ sJinfos.JP = (unsigned int **) malloc(depen*sizeof(unsigned int *)); ret_val = jac_pat(tag, depen, indep, basepoint, sJinfos.JP, options); if (ret_val < 0) { printf(" ADOL-C error in sparse_jac() \n"); return ret_val; } sJinfos.depen = depen; sJinfos.nnz_in = depen; sJinfos.nnz_in = 0; for (i=0;iGenerateSeedJacobian(&(sJinfos.Seed), &(sJinfos.seed_rows), &(sJinfos.seed_clms), "SMALLEST_LAST","ROW_PARTIAL_DISTANCE_TWO"); sJinfos.seed_clms = indep; ret_val = sJinfos.seed_rows; } else { g->GenerateSeedJacobian(&(sJinfos.Seed), &(sJinfos.seed_rows), &(sJinfos.seed_clms), "SMALLEST_LAST","COLUMN_PARTIAL_DISTANCE_TWO"); sJinfos.seed_rows = depen; ret_val = sJinfos.seed_clms; } sJinfos.B = myalloc2(sJinfos.seed_rows,sJinfos.seed_clms); sJinfos.y = myalloc1(depen); sJinfos.g = (void *) g; sJinfos.jr1d = (void *) jr1d; setTapeInfoJacSparse(tag, sJinfos); tapeInfos=getTapeInfos(tag); ADOLC_CURRENT_TAPE_INFOS.copy(*tapeInfos); } else { tapeInfos=getTapeInfos(tag); ADOLC_CURRENT_TAPE_INFOS.copy(*tapeInfos); sJinfos.depen = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.depen; sJinfos.nnz_in = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.nnz_in; sJinfos.JP = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.JP; sJinfos.B = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.B; sJinfos.y = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.y; sJinfos.Seed = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.Seed; sJinfos.seed_rows = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.seed_rows; sJinfos.seed_clms = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.seed_clms; g = (BipartiteGraphPartialColoringInterface *)ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.g; jr1d = (JacobianRecovery1D *)ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sJinfos.jr1d; } if (sJinfos.nnz_in != *nnz) { printf(" ADOL-C error in sparse_jac():" " Number of nonzeros not consistent," " repeat call with repeat = 0 \n"); return -3; } if (options[2] == -1) return ret_val; /* compute jacobian times matrix product */ if (options[3] == 1) { ret_val = zos_forward(tag,depen,indep,1,basepoint,sJinfos.y); if (ret_val < 0) return ret_val; MINDEC(ret_val,fov_reverse(tag,depen,indep,sJinfos.seed_rows,sJinfos.Seed,sJinfos.B)); } else ret_val = fov_forward(tag, depen, indep, sJinfos.seed_clms, basepoint, sJinfos.Seed, sJinfos.y, sJinfos.B); /* recover compressed Jacobian => ColPack library */ if (*values != NULL && *rind != NULL && *cind != NULL) { // everything is preallocated, we assume correctly // call usermem versions if (options[3] == 1) jr1d->RecoverD2Row_CoordinateFormat_usermem(g, sJinfos.B, sJinfos.JP, rind, cind, values); else jr1d->RecoverD2Cln_CoordinateFormat_usermem(g, sJinfos.B, sJinfos.JP, rind, cind, values); } else { // at least one of rind cind values is not allocated, deallocate others // and call unmanaged versions if (*values != NULL) free(*values); if (*rind != NULL) free(*rind); if (*cind != NULL) free(*cind); if (options[3] == 1) jr1d->RecoverD2Row_CoordinateFormat_unmanaged(g, sJinfos.B, sJinfos.JP, rind, cind, values); else jr1d->RecoverD2Cln_CoordinateFormat_unmanaged(g, sJinfos.B, sJinfos.JP, rind, cind, values); } return ret_val; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); adolc_exit(-1,"",__func__,__FILE__,__LINE__); return -1; } #endif /****************************************************************************/ /******* sparse Hessians, complete driver ***************/ /****************************************************************************/ int sparse_hess( short tag, /* tape identification */ int indep, /* number of independent variables */ int repeat, /* indicated repeated call with same seed */ const double *basepoint, /* independant variable values */ int *nnz, /* number of nonzeros */ unsigned int **rind, /* row index */ unsigned int **cind, /* column index */ double **values, /* non-zero values */ int *options /* control options options[0] :test the computational graph control flow 0 - safe mode (default) 1 - tight mode 2 - old safe mode 3 - old tight mode options[1] : way of recovery 0 - indirect recovery 1 - direct recovery */ ) #if HAVE_LIBCOLPACK { int i, l; unsigned int j; SparseHessInfos sHinfos; double **Seed; int dummy; double y; int ret_val=-1; GraphColoringInterface *g; TapeInfos *tapeInfos; double *v, *w, **X, yt, lag=1; HessianRecovery *hr; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* Generate sparsity pattern, determine nnz, allocate memory */ if (repeat <= 0) { if (( options[0] < 0 ) || (options[0] > 3 )) options[0] = 0; /* default */ if (( options[1] < 0 ) || (options[1] > 1 )) options[1] = 0; /* default */ if (repeat == 0) { sHinfos.HP = (unsigned int **) malloc(indep*sizeof(unsigned int *)); /* generate sparsity pattern */ ret_val = hess_pat(tag, indep, basepoint, sHinfos.HP, options[0]); if (ret_val < 0) { printf(" ADOL-C error in sparse_hess() \n"); return ret_val; } } else { tapeInfos=getTapeInfos(tag); ADOLC_CURRENT_TAPE_INFOS.copy(*tapeInfos); if (indep != ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.indep) { fprintf(DIAG_OUT,"ADOL-C Error: wrong number of independents stored in hessian pattern.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } deepcopy_HP(&sHinfos.HP,ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.HP,indep); } sHinfos.indep = indep; sHinfos.nnz_in = 0; for (i=0;i= i) sHinfos.nnz_in++; } *nnz = sHinfos.nnz_in; /* compute seed matrix => ColPack library */ Seed = NULL; g = new GraphColoringInterface(SRC_MEM_ADOLC, sHinfos.HP, indep); hr = new HessianRecovery; if (options[1] == 0) g->GenerateSeedHessian(&Seed, &dummy, &sHinfos.p, "SMALLEST_LAST","ACYCLIC_FOR_INDIRECT_RECOVERY"); else g->GenerateSeedHessian(&Seed, &dummy, &sHinfos.p, "SMALLEST_LAST","STAR"); sHinfos.Hcomp = myalloc2(indep,sHinfos.p); sHinfos.Xppp = myalloc3(indep,sHinfos.p,1); for (i=0; i ColPack library */ // if (options[1] == 0) // HessianRecovery::IndirectRecover_CoordinateFormat(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); // else // HessianRecovery::DirectRecover_CoordinateFormat(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); if (*values != NULL && *rind != NULL && *cind != NULL) { // everything is preallocated, we assume correctly // call usermem versions if (options[1] == 0) hr->IndirectRecover_CoordinateFormat_usermem(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); else hr->DirectRecover_CoordinateFormat_usermem(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); } else { // at least one of rind cind values is not allocated, deallocate others // and call unmanaged versions if (*values != NULL) free(*values); if (*rind != NULL) free(*rind); if (*cind != NULL) free(*cind); if (options[1] == 0) hr->IndirectRecover_CoordinateFormat_unmanaged(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); else hr->DirectRecover_CoordinateFormat_unmanaged(g, sHinfos.Hcomp, sHinfos.HP, rind, cind, values); } return ret_val; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); adolc_exit(-1,"",__func__,__FILE__,__LINE__); return -1; } #endif /****************************************************************************/ /******* sparse Hessians, set and get sparsity pattern ***************/ /****************************************************************************/ void set_HP( short tag, /* tape identification */ int indep, /* number of independent variables */ unsigned int ** HP) #ifdef SPARSE { SparseHessInfos sHinfos; TapeInfos *tapeInfos; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; tapeInfos=getTapeInfos(tag); ADOLC_CURRENT_TAPE_INFOS.copy(*tapeInfos); sHinfos.nnz_in = 0; deepcopy_HP(&sHinfos.HP,HP,indep); sHinfos.Hcomp = NULL; sHinfos.Xppp = NULL; sHinfos.Yppp = NULL; sHinfos.Zppp = NULL; sHinfos.Upp = NULL; sHinfos.p = 0; sHinfos.g = NULL; sHinfos.hr = NULL; sHinfos.indep = indep; setTapeInfoHessSparse(tag, sHinfos); } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if sparse configuration option was used\n", __FUNCTION__); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #endif void get_HP( short tag, /* tape identification */ int indep, /* number of independent variables */ unsigned int *** HP) #ifdef SPARSE { TapeInfos *tapeInfos; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; tapeInfos=getTapeInfos(tag); ADOLC_CURRENT_TAPE_INFOS.copy(*tapeInfos); deepcopy_HP(HP,ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.sHinfos.HP,indep); } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if sparse configuration option was used\n", __FUNCTION__); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #endif /*****************************************************************************/ /* JACOBIAN BLOCK PATTERN */ /* ------------------------------------------------------------------------- */ int bit_vector_propagation( short tag, /* tape identification */ int depen, /* number of dependent variables */ int indep, /* number of independent variables */ const double *basepoint, /* independant variable values */ unsigned int **crs, /* compressed block row storage */ int *options /* control options */ /* options[0] : way of bit pattern propagation 0 - automatic detection (default) 1 - forward mode 2 - reverse mode options[1] : test the computational graph control flow 0 - safe variant (default) 1 - tight variant */ ) { int rc= 3; char forward_mode, tight_mode; int i, ii, j, jj, k, k_old, bits_per_long, i_blocks_per_strip, d_blocks_per_strip; int this_strip_i_bl_idx, next_strip_i_bl_idx, this_strip_d_bl_idx, next_strip_d_bl_idx; int stripmined_calls, strip_idx; int p_stripmine, q_stripmine, p_ind_bl_bp, q_dep_bl_bp, i_bl_idx, d_bl_idx; unsigned long int value1, v; unsigned long int **seed=NULL, *s, **jac_bit_pat=NULL, *jac; unsigned char *indep_blocks_flags=NULL, *i_b_flags; double *valuepoint=NULL; if ( options[1] == 0 ) { if ( depen >= indep/2 ) options[1] = 1; /* forward */ else options[1] = 2; /* reverse */ } if ( options[1] == 1 ) forward_mode = 1; else forward_mode = 0; if ( options[0] == 1 ) tight_mode = 1; else tight_mode = 0; if ( ! forward_mode ) valuepoint = myalloc1(depen); /* bit pattern parameters */ /* number of bits in an unsigned long int variable */ bits_per_long = 8 * sizeof(unsigned long int); /* olvo 20000214 nl: inserted explicit cast to unsigned long int */ value1 = (unsigned long int) 1 << (bits_per_long - 1); /* 10000....0 */ /* =================================================== forward propagation */ if ( forward_mode ) { if (( tight_mode ) && ( basepoint == NULL )) { fprintf(DIAG_OUT, "ADOL-C error in jac_pat(...) : supply basepoint x for tight mode.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } /* indep partial derivatives for the whole Jacobian */ /* number of unsigned longs to store the whole seed / Jacobian matrice */ p_ind_bl_bp = indep / bits_per_long + ( (indep % bits_per_long) != 0 ); /* number of unsigned longs to store the seed / Jacobian strips */ if ( p_ind_bl_bp <= PQ_STRIPMINE_MAX ) { p_stripmine = p_ind_bl_bp; stripmined_calls = 1; } else { p_stripmine = PQ_STRIPMINE_MAX; stripmined_calls = p_ind_bl_bp / PQ_STRIPMINE_MAX + ( (p_ind_bl_bp % PQ_STRIPMINE_MAX) != 0 ); } /* number of independent blocks per seed / Jacobian strip */ i_blocks_per_strip = p_stripmine * bits_per_long; /* allocate memory --------------------------------------------------- */ if ( ! (indep_blocks_flags = (unsigned char*) calloc(i_blocks_per_strip, sizeof(char)) ) ) { fprintf(DIAG_OUT, "ADOL-C error, " __FILE__ ":%i : \njac_pat(...) unable to allocate %i bytes !\n", __LINE__, (int)(i_blocks_per_strip*sizeof(char))); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } seed = myalloc2_ulong(indep, p_stripmine); jac_bit_pat = myalloc2_ulong(depen, p_stripmine); /* strip-mining : repeated forward calls ----------------------------- */ for (strip_idx = 0; strip_idx < stripmined_calls; strip_idx++) { /* build a partition of the seed matrix (indep x indep_blocks) --- */ /* (indep x i_blocks_per_strip) as a bit pattern */ s = seed[0]; for (i=0; i int !!! */ *s++ = 0; /* set old seed matrix to 0 */ this_strip_i_bl_idx = strip_idx * i_blocks_per_strip; next_strip_i_bl_idx = (strip_idx+1) * i_blocks_per_strip; if ( next_strip_i_bl_idx > indep ) next_strip_i_bl_idx = indep; v = value1; /* 10000....0 */ for (i=0; i> ((i - this_strip_i_bl_idx) % bits_per_long); } /* bit pattern propagation by forward ---------------------------- */ if ( tight_mode ) { rc = int_forward_tight( tag, depen, indep, p_stripmine, basepoint, seed, valuepoint, jac_bit_pat); } else { rc = int_forward_safe ( tag, depen, indep, p_stripmine, seed, jac_bit_pat); } /* extract pattern from bit patterns --------------------- */ for (j = 0; j < depen; j++) { ii = -1; v = 0; jac = jac_bit_pat[j]; i_b_flags = indep_blocks_flags; for (i_bl_idx = 0; i_bl_idx < i_blocks_per_strip; i_bl_idx++) { if ( !v ) { v = value1; /* 10000....0 */ ii++; } if ( v & jac[ii] ) *i_b_flags = 1; i_b_flags++; v = v >> 1; } if ( strip_idx == 0 ) k_old = 0; else k_old = crs[j][0]; k = 0; i_b_flags = indep_blocks_flags; for (i = 0; i < i_blocks_per_strip; i++) k += *i_b_flags++; if ((k > 0 ) || ( strip_idx == 0 )) { if ( ! (crs[j] = (unsigned int*)realloc(crs[j], (k_old+k+1)*sizeof(unsigned int))) ) { fprintf(DIAG_OUT, "ADOL-C error, " __FILE__ ":%i : \njac_pat(...) unable to allocate %i bytes !\n", __LINE__, (int)((k_old+k+1)*sizeof(unsigned int))); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } if ( strip_idx == 0 ) crs[j][0] = 0; if ( k > 0 ) { k = crs[j][0] + 1; i_b_flags = indep_blocks_flags; for (i = 0; i < i_blocks_per_strip; i++) { if ( *i_b_flags ) { crs[j][k++] = this_strip_i_bl_idx + i; *i_b_flags = 0; } i_b_flags++; } /* current/total number of non-zero blocks of indep. vars. */ crs[j][0] = k - 1; } } } } /* strip_idx */ } /* forward */ /* =================================================== reverse propagation */ else { /* depen weight vectors for the whole Jacobian */ /* number of unsigned longs to store the whole seed / Jacobian matrice */ q_dep_bl_bp = depen / bits_per_long + ( (depen % bits_per_long) != 0 ); /* number of unsigned longs to store the seed / Jacobian strips */ if ( q_dep_bl_bp <= PQ_STRIPMINE_MAX ) { q_stripmine = q_dep_bl_bp; stripmined_calls = 1; } else { q_stripmine = PQ_STRIPMINE_MAX; stripmined_calls = q_dep_bl_bp / PQ_STRIPMINE_MAX + ( (q_dep_bl_bp % PQ_STRIPMINE_MAX) != 0 ); } /* number of dependent blocks per seed / Jacobian strip */ d_blocks_per_strip = q_stripmine * bits_per_long; /* allocate memory --------------------------------------------------- */ if ( ! (indep_blocks_flags = (unsigned char*)calloc(indep, sizeof(unsigned char)) ) ) { fprintf(DIAG_OUT, "ADOL-C error, " __FILE__ ":%i : \njac_pat(...) unable to allocate %i bytes !\n", __LINE__, (int)(indep*sizeof(unsigned char))); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } seed = myalloc2_ulong(q_stripmine, depen); jac_bit_pat = myalloc2_ulong(q_stripmine, indep); /* olvo 20000214: call to forward required in tight mode only, in safe mode no basepoint available! */ if ( tight_mode ) { if ( basepoint == NULL ) { fprintf(DIAG_OUT, "ADOL-C error in jac_pat(..) : "); fprintf(DIAG_OUT, "no basepoint x for tight mode supplied.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } rc = zos_forward(tag, depen, indep, 1, basepoint, valuepoint); } /* strip-mining : repeated reverse calls ----------------------------- */ for (strip_idx = 0; strip_idx < stripmined_calls; strip_idx++) { /* build a partition of the seed matrix (depen_blocks x depen) */ /* (d_blocks_per_strip x depen) as a bit pattern */ s = seed[0]; for (jj=0; jj int !!! */ for (j=0; j depen ) next_strip_d_bl_idx = depen; v = value1; /* 10000....0 */ for (j=0; j> ((j - this_strip_d_bl_idx) % bits_per_long); } /* bit pattern propagation by reverse ---------------------------- */ if ( tight_mode ) rc = int_reverse_tight( tag, depen, indep, q_stripmine, seed, jac_bit_pat); else rc = int_reverse_safe ( tag, depen, indep, q_stripmine, seed, jac_bit_pat); /* extract pattern from bit patterns --------------------- */ jj = -1; v = 0; for (d_bl_idx = this_strip_d_bl_idx; d_bl_idx < next_strip_d_bl_idx; d_bl_idx++) { if ( !v ) { v = value1; /* 10000....0 */ jj++; } jac = jac_bit_pat[jj]; for (i=0; i> 1; k=0; i_b_flags = indep_blocks_flags; for (i=0; i namespace adtl { #ifdef SPARSE SparseJacInfos sJinfos = { NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0, 0 }; #endif int ADOLC_get_sparse_jacobian( func_ad *const fun, int n, int m, int repeat, double* basepoints, int *nnz, unsigned int **rind, unsigned int **cind, double **values) #if HAVE_LIBCOLPACK { int i; unsigned int j; int dummy; int ret_val = -1; if (!repeat) { freeSparseJacInfos(sJinfos.y, sJinfos.B, sJinfos.JP, sJinfos.g, sJinfos.jr1d, sJinfos.seed_rows, sJinfos.seed_clms, sJinfos.depen); //setNumDir(n); setMode(ADTL_INDO); { adouble *x, *y; x = new adouble[n]; y = new adouble[m]; for (i=0; i < n ; i++){ x[i] = basepoints[i]; //x[i].setADValue(i,1); } ret_val = ADOLC_Init_sparse_pattern(x,n,0); ret_val = (*fun)(n,x,m,y); if (ret_val < 0) { printf(" ADOL-C error in tapeless sparse_jac() \n"); return ret_val; } ret_val = ADOLC_get_sparse_pattern(y, m, sJinfos.JP ); delete[] x; delete[] y; } sJinfos.depen = m; sJinfos.nnz_in = 0; for (i=0;iGenerateSeedJacobian(&(sJinfos.Seed), &(sJinfos.seed_rows), &(sJinfos.seed_clms), "SMALLEST_LAST","COLUMN_PARTIAL_DISTANCE_TWO"); sJinfos.seed_rows = m; sJinfos.B = myalloc2(sJinfos.seed_rows,sJinfos.seed_clms); sJinfos.y = myalloc1(m); sJinfos.g = (void *) g; sJinfos.jr1d = (void *) jr1d; if (sJinfos.nnz_in != *nnz) { printf(" ADOL-C error in sparse_jac():" " Number of nonzeros not consistent," " repeat call with repeat = 0 \n"); return -3; } } // ret_val = fov_forward(tag, depen, indep, sJinfos.seed_clms, basepoint, sJinfos.Seed, sJinfos.y, sJinfos.B); setNumDir(sJinfos.seed_clms); setMode(ADTL_FOV); { adouble *x, *y; x = new adouble[n]; y = new adouble[m]; for (i=0; i < n ; i++){ x[i] = basepoints[i]; for (j=0; j < sJinfos.seed_clms; j++) x[i].setADValue(j,sJinfos.Seed[i][j]); } ret_val = (*fun)(n,x,m,y); for (i=0;i ColPack library */ if (*values != NULL) free(*values); if (*rind != NULL) free(*rind); if (*cind != NULL) free(*cind); BipartiteGraphPartialColoringInterface *g; JacobianRecovery1D *jr1d; g = (BipartiteGraphPartialColoringInterface*)sJinfos.g; jr1d = (JacobianRecovery1D*)sJinfos.jr1d; jr1d->RecoverD2Cln_CoordinateFormat_unmanaged(g, sJinfos.B, sJinfos.JP, rind, cind, values); //delete g; //delete jr1d; return ret_val; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); adolc_exit(-1,"",__func__,__FILE__,__LINE__); return -1; } #endif #if 0 int ADOLC_get_sparse_jacobian(int n, int m, adouble *x, int *nnz, unsigned int *rind, unsigned int *cind, double *values) #if HAVE_LIBCOLPACK { int i; unsigned int j; SparseJacInfos sJinfos; int dummy; int ret_val = -1; BipartiteGraphPartialColoringInterface *g; JacobianRecovery1D *jr1d; ret_val = ADOLC_get_sparse_pattern(x, m, sJinfos.JP ); sJinfos.depen = m; sJinfos.nnz_in = 0; for (i=0;iGenerateSeedJacobian(&(sJinfos.Seed), &(sJinfos.seed_rows), &(sJinfos.seed_clms), "SMALLEST_LAST","COLUMN_PARTIAL_DISTANCE_TWO"); sJinfos.seed_rows = m; sJinfos.B = myalloc2(sJinfos.seed_rows,sJinfos.seed_clms); sJinfos.y = myalloc1(m); sJinfos.g = (void *) g; sJinfos.jr1d = (void *) jr1d; if (sJinfos.nnz_in != *nnz) { printf(" ADOL-C error in sparse_jac():" " Number of nonzeros not consistent," " repeat call with repeat = 0 \n"); return -3; } // ret_val = fov_forward(tag, depen, indep, sJinfos.seed_clms, basepoint, sJinfos.Seed, sJinfos.y, sJinfos.B); for (i=0;i ColPack library */ if (values != NULL) free(values); if (rind != NULL) free(rind); if (cind != NULL) free(cind); jr1d->RecoverD2Cln_CoordinateFormat_unmanaged(g, sJinfos.B, sJinfos.JP, &rind, &cind, &values); delete g; delete jr1d; return ret_val; } #else { fprintf(DIAG_OUT, "ADOL-C error: function %s can only be used if linked with ColPack\n", __FUNCTION__); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #endif #endif } /****************************************************************************/ /* THAT'S ALL */ ADOL-C-2.6.3/ADOL-C/src/sparse/sparse_fo_rev.cpp0000644000175200017520000001013212375634024017416 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: sparse/sparse_fo_rev.cpp Revision: $Id: sparse_fo_rev.cpp 566 2014-08-22 12:31:16Z kulshres $ Contents: All "Easy To Use" C++ interfaces of SPARSE package Copyright (c) Andrea Walther, Christo Mitev This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include "dvlparms.h" #include #if defined(__cplusplus) extern "C" void adolc_exit(int errorcode, const char *what, const char* function, const char *file, int line); /****************************************************************************/ /* Bit pattern propagation; general call */ /* */ int forward( short tag, int m, int n, int p, double *x, unsigned long int **X, double *y, unsigned long int **Y, char mode) /* forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p], mode) */ { int rc = -1; if (mode == 1) // tight version if (x != NULL) rc = int_forward_tight(tag,m,n,p,x,X,y,Y); else { fprintf(DIAG_OUT,"ADOL-C error: no basepoint for bit" " pattern forward tight.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else if (mode == 0) // safe version rc = int_forward_safe(tag,m,n,p,X,Y); else { fprintf(DIAG_OUT,"ADOL-C error: bad mode parameter to bit" " pattern forward.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } return (rc); } /****************************************************************************/ /* Bit pattern propagation; no basepoint */ /* */ int forward( short tag, int m, int n, int p, unsigned long int **X, unsigned long int **Y, char mode) /* forward(tag, m, n, p, X[n][p], Y[m][p], mode) */ { if (mode != 0) // not safe { fprintf(DIAG_OUT,"ADOL-C error: bad mode parameter to bit" " pattern forward.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } return int_forward_safe(tag,m,n,p,X,Y); } /****************************************************************************/ /* */ /* Bit pattern propagation, general call */ /* */ int reverse( short tag, int m, int n, int q, unsigned long int **U, unsigned long int **Z, char mode) /* reverse(tag, m, n, q, U[q][m], Z[q][n]) */ { int rc=-1; /* ! use better the tight version, the safe version supports no subscripts*/ if (mode == 0) // safe version rc = int_reverse_safe(tag,m,n,q,U,Z); else if (mode == 1) rc = int_reverse_tight(tag,m,n,q,U,Z); else { fprintf(DIAG_OUT,"ADOL-C error: bad mode parameter" " to bit pattern reverse.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } return rc; } /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/src/sparse/Makefile.in0000644000175200017520000004534712672541257016147 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/src/sparse DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libsparse_la_LIBADD = am_libsparse_la_OBJECTS = sparse_fo_rev.lo sparsedrivers.lo libsparse_la_OBJECTS = $(am_libsparse_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libsparse_la_SOURCES) DIST_SOURCES = $(libsparse_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 -DSPARSE=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 -DSPARSE=1 AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = libsparse.la libsparse_la_SOURCES = sparse_fo_rev.cpp sparsedrivers.cpp all: all-am .SUFFIXES: .SUFFIXES: .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/src/sparse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/src/sparse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libsparse.la: $(libsparse_la_OBJECTS) $(libsparse_la_DEPENDENCIES) $(EXTRA_libsparse_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libsparse_la_OBJECTS) $(libsparse_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparse_fo_rev.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparsedrivers.Plo@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/src/sparse/Makefile.am0000644000175200017520000000175112672541226016121 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 681 2016-03-17 14:43:34Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 -DSPARSE=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 -DSPARSE=1 AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = libsparse.la libsparse_la_SOURCES = sparse_fo_rev.cpp sparsedrivers.cpp ADOL-C-2.6.3/ADOL-C/src/fixpoint.cpp0000644000175200017520000001773512562202137015136 0ustar coincoin /*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fixpoint.c Revision: $Id: fixpoint.cpp 608 2015-08-10 20:06:55Z kulshres $ Contents: all C functions directly accessing at least one of the four tapes (operations, locations, constants, value stack) Copyright (c) Andreas Kowarz, Sebastian Schlenkrich This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include "taping_p.h" #include #include #include "dvlparms.h" #include using namespace std; /*--------------------------------------------------------------------------*/ /* F(x,u,y,dim_x,dim_u) */ /* norm(x,dim_x) */ typedef struct { locint edf_index; int sub_tape_num; int (*double_F)(double*, double* ,double*, int, int); int (*adouble_F)(adouble*, adouble*, adouble*, int, int); double (*norm)(double*, int); double (*norm_deriv)(double*, int); double epsilon; double epsilon_deriv; int N_max; int N_max_deriv; } fpi_data; static vector fpi_stack; static int iteration ( int dim_xu, double *xu, int dim_x, double *x_fix ) { int i, k; double err; fpi_data *current = fpi_stack.back(); for (i=0; iN_max; k++) { for (i=0; idouble_F)( xu, xu+dim_x, x_fix, dim_x, dim_xu-dim_x ); for (i=0; inorm)(xu,dim_x); if (errepsilon) return k; } return -1; } static int fp_zos_forward ( int dim_xu, double *xu, int dim_x, double *x_fix ) { int i, k; double err; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint edf_index = ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index; fpi_data *current=0; vector::iterator fpi_stack_iterator; for (fpi_stack_iterator=fpi_stack.begin(); fpi_stack_iterator!=fpi_stack.end(); ++fpi_stack_iterator) { current = *fpi_stack_iterator; if (edf_index==current->edf_index) break; } if (fpi_stack_iterator==fpi_stack.end()) { fprintf(stderr,"ADOL-C Error! No edf found for fixpoint iteration.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } for (i=0; iN_max; k++) { for (i=0; idouble_F)( xu, xu+dim_x, x_fix, dim_x, dim_xu-dim_x ); for (i=0; inorm)(xu,dim_x); if (errepsilon) return k; } return -1; } static int fp_fos_forward ( int dim_xu, double *xu, double *xu_dot, int dim_x, double *x_fix, double *x_fix_dot) { // Piggy back int i, k; double err, err_deriv; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint edf_index = ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index; fpi_data *current=0; vector::iterator fpi_stack_iterator; for (fpi_stack_iterator=fpi_stack.begin(); fpi_stack_iterator!=fpi_stack.end(); ++fpi_stack_iterator) { current = *fpi_stack_iterator; if (edf_index==current->edf_index) break; } if (fpi_stack_iterator==fpi_stack.end()) { fprintf(stderr,"ADOL-C Error! No edf found for fixpoint iteration.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } for (k=1; (kN_max_deriv)|(kN_max); k++) { for (i=0; isub_tape_num, dim_x, dim_xu, 0, xu, xu_dot, x_fix, x_fix_dot); for (i=0; inorm)(xu,dim_x); for (i=0; inorm_deriv)(xu_dot,dim_x); if ((errepsilon)&(err_derivepsilon_deriv)) { return k; } } return -1; } static int fp_fos_reverse ( int dim_x, double *x_fix_bar, int dim_xu, double *xu_bar, double* /*unused*/, double* /*unused*/) { // (d x_fix) / (d x_0) = 0 (!) int i, k; double err; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint edf_index = ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index; fpi_data *current=0; vector::iterator fpi_stack_iterator; for (fpi_stack_iterator=fpi_stack.begin(); fpi_stack_iterator!=fpi_stack.end(); ++fpi_stack_iterator) { current = *fpi_stack_iterator; if (edf_index==current->edf_index) break; } if (fpi_stack_iterator==fpi_stack.end()) { fprintf(stderr,"ADOL-C Error! No edf found for fixpoint iteration.\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } double *U = new double[dim_xu]; double *xi = new double[dim_x]; for (k=1; kN_max_deriv; k++) { for (i=0; isub_tape_num, dim_x, dim_xu, xi, U ); for (i=0; inorm_deriv)(xi,dim_x); printf(" fp_fos_reverse: k = %d err = %e\n",k,err); if (errepsilon_deriv) { for (i=0; isub_tape_num = sub_tape_num; data->double_F = double_F; data->adouble_F = adouble_F; data->norm = norm; data->norm_deriv = norm_deriv; data->epsilon = epsilon; data->epsilon_deriv = epsilon_deriv; data->N_max = N_max; data->N_max_deriv = N_max_deriv; fpi_stack.push_back(data); // declare extern differentiated function and data ext_diff_fct *edf_iteration = reg_ext_fct(&iteration); data->edf_index = edf_iteration->index; edf_iteration->zos_forward = &fp_zos_forward; edf_iteration->fos_forward = &fp_fos_forward; edf_iteration->fos_reverse = &fp_fos_reverse; // put x and u together adouble *xu = new adouble[dim_x+dim_u]; for (i=0; i>= dummy; trace_off(); delete[] xu; return k; } ADOL-C-2.6.3/ADOL-C/src/fov_forward.c0000644000175200017520000000142611227420735015245 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fov_forward.c Revision: $Id: fov_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: fov_forward (first-order-vector forward mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOV_ 1 #undef _KEEP_ #include #undef _FOV_ ADOL-C-2.6.3/ADOL-C/src/config.h.in0000644000175200017520000001210212562262246014603 0ustar coincoin/* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble late initialization mode */ #undef ADOLC_ADOUBLE_LATEINIT /* ADOL-C adouble zeroing mode */ #undef ADOLC_ADOUBLE_STDCZERO /* defined if adjoinable MPI support is to be compiled in */ #undef ADOLC_AMPI_SUPPORT /* ADOL-C debug mode */ #undef ADOLC_DEBUG /* ADOL-C hard debug mode */ #undef ADOLC_HARDDEBUG /* ADOL-C Patchlevel */ #undef ADOLC_PATCHLEVEL /* ADOL-C Subversion */ #undef ADOLC_SUBVERSION /* ADOL-C tape_doc routine computes values */ #undef ADOLC_TAPE_DOC_VALUES /* ADOL-C thread save errno mode */ #undef ADOLC_THREADSAVE_ERRNO /* Use calloc instead of malloc for memory allocation */ #undef ADOLC_USE_CALLOC /* ADOL-C Version */ #undef ADOLC_VERSION /* Boost pool should not assume multithreading */ #undef BOOST_POOL_NO_MT /* define if the Boost library is available */ #undef HAVE_BOOST /* Define to 1 if you have the header file. */ #undef HAVE_BOOST_POOL_POOL_ALLOC_HPP /* define if the Boost::System library is available */ #undef HAVE_BOOST_SYSTEM /* Define if the compiler provides __builtin_expect */ #undef HAVE_BUILTIN_EXPECT /* define if the compiler supports basic C++11 syntax */ #undef HAVE_CXX11 /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `fmax' function. */ #undef HAVE_FMAX /* Define to 1 if you have the `fmin' function. */ #undef HAVE_FMIN /* Define to 1 if you have the `ftime' function. */ #undef HAVE_FTIME /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define 1 if ColPack is available */ #undef HAVE_LIBCOLPACK /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `pow' function. */ #undef HAVE_POW /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if stdbool.h conforms to C99. */ #undef HAVE_STDBOOL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIMEB_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `trunc' function. */ #undef HAVE_TRUNC /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* The size of `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* Define 1 if sparse derivative propagation is to be enabled */ #undef SPARSE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Define to rpl_calloc if the replacement function should be used. */ #undef calloc /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t ADOL-C-2.6.3/ADOL-C/src/forward_partx.c0000644000175200017520000001356011412425466015615 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: forward_partx.c Revision: $Id: forward_partx.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include BEGIN_C_DECLS /*--------------------------------------------------------------------------*/ /* ZOS_PARTX */ /* zos_forward_partx(tag, m, mdim[n], n, x[n][d], y[m]) */ /* (based on zos_forward) */ int zos_forward_partx(short tag, int m, int n, int *ndim, double **x, double *y) { double *x0; /* base point */ int i,j,ind,sum_n, rc; sum_n = 0; for(i=0;i #undef _HOV_ ADOL-C-2.6.3/ADOL-C/src/hos_reverse.c0000644000175200017520000000140711227420735015252 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hos_reverse.c Revision: $Id: hos_reverse.c 42 2009-07-15 18:37:17Z awalther $ Contents: hos_reverse (higher-order-scalar reverse mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOS_ 1 #include #undef _HOS_ ADOL-C-2.6.3/ADOL-C/src/hov_wk_forward.c0000644000175200017520000000132311227420735015744 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hov_wk_forward.c Revision: $Id: hov_wk_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: hov_wk_forward (higher-order-vector forward mode with keep) Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOV_WK_ 1 #define _KEEP_ 1 #include #undef _KEEP_ #undef _HOV_WK_ ADOL-C-2.6.3/ADOL-C/src/rpl_malloc.c0000644000175200017520000000406612564725026015064 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: malloc.c Revision: $Id: rpl_malloc.c 617 2015-08-18 21:56:38Z kulshres $ Contents: malloc replacements for not gnu compatible malloc system functions Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include "rpl_malloc.h" #undef ADOLC_NO_MALLOC #undef ADOLC_NO_REALLOC #if defined(ADOLC_INTERNAL) # if !defined(HAVE_MALLOC) # define ADOLC_NO_MALLOC 1 # else # if (HAVE_MALLOC == 0) # define ADOLC_NO_MALLOC 1 # endif /* HAVE_MALLOC == 0 */ # endif /* HAVE_MALLOC */ # if !defined(HAVE_REALLOC) # define ADOLC_NO_REALLOC 1 # else # if (HAVE_REALLOC == 0) # define ADOLC_NO_REALLOC 1 # endif /* HAVE_REALLOC == 0 */ # endif /* HAVE_REALLOC */ #endif /* ADOLC_INTERNAL */ #if defined(ADOLC_NO_MALLOC) # undef malloc # undef calloc extern void *malloc(); extern void *calloc(); /** Allocate an n-byte block from the heap! n>=1 * If native malloc(0) returns an invalid pointer use the * replacement-function instead. */ void *rpl_malloc(size_t n) { if (n == 0) n = 1; return malloc(n); } void *rpl_calloc(size_t n, size_t size) { if (n == 0) n = 1; if (size == 0) size = 1; return calloc(n, size); } #endif /* ADOLC_NO_MALLOC */ #if defined(ADOLC_NO_REALLOC) # undef realloc extern void *realloc(); void *rpl_realloc(void *ptr, size_t size) { if (size == 0) size = 1; if (ptr == NULL) ptr = rpl_malloc(1); return realloc(ptr, size); } #endif /* ADOLC_NO_REALLOC */ ADOL-C-2.6.3/ADOL-C/src/fortutils.c0000644000175200017520000000451411412425466014765 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fortutils.c Revision: $Id: fortutils.c 106 2010-06-29 17:19:50Z kulshres $ Contents: Internal tools to handle Fortran arrays Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include BEGIN_C_DECLS /****************************************************************************/ /* */ /*--------------------------------------------------------------------------*/ void spread1(int m, fdouble* x, double* X) { int j; for (j=0; j #include #include #include "taping_p.h" #include "oplate.h" #include #include "externfcts_p.h" #include "dvlparms.h" #include #include #if defined(ADOLC_DEBUG) || defined(_ZOS_) #include #endif /* ADOLC_DEBUG */ #ifdef ADOLC_AMPI_SUPPORT #include "ampisupportAdolc.h" #endif /****************************************************************************/ /* MACROS */ #undef _ADOLC_VECTOR_ #undef _HIGHER_ORDER_ /*--------------------------------------------------------------------------*/ #if defined(_ZOS_) #if defined(_ABS_NORM_) # define GENERATED_FILENAME "zos_pl_forward" #elif defined(_ABS_NORM_SIG_) # define GENERATED_FILENAME "zos_pl_sig_forward" #else # define GENERATED_FILENAME "zos_forward" #endif /*--------------------------------------------------------------------------*/ #else #if defined(_FOS_) #if defined(_ABS_NORM_) #define GENERATED_FILENAME "fos_pl_forward" #elif defined(_ABS_NORM_SIG_) #define GENERATED_FILENAME "fos_pl_sig_forward" #else #define GENERATED_FILENAME "fos_forward" #endif #define ARGUMENT(indexi,l,i) argument[indexi] #define TAYLORS(indexd,l,i) taylors[indexd] /*--------------------------------------------------------------------------*/ #else #if defined(_FOV_) #if defined(_ABS_NORM_) #define GENERATED_FILENAME "fov_pl_forward" #elif defined(_ABS_NORM_SIG_) #define GENERATED_FILENAME "fov_pl_sig_forward" #if defined(_MSC_VER) && _MSC_VER < 180 #define fmin __min #define fmax __max #endif #else #define GENERATED_FILENAME "fov_forward" #endif #define _ADOLC_VECTOR_ #if defined(_CHUNKED_) #define ARGUMENT(indexi,l,i) argument[indexi][l+offset] #define TAYLORS(indexd,l,i) taylors[indexd][l+offset] #else #define ARGUMENT(indexi,l,i) argument[indexi][l] #define TAYLORS(indexd,l,i) taylors[indexd][l] #endif /*--------------------------------------------------------------------------*/ #else #if defined(_HOS_) #define GENERATED_FILENAME "hos_forward" #define _HIGHER_ORDER_ #define ARGUMENT(indexi,l,i) argument[indexi][i] #define TAYLORS(indexd,l,i) taylors[indexd][i] /*--------------------------------------------------------------------------*/ #else #if defined(_HOV_) #define GENERATED_FILENAME "hov_forward" #define _ADOLC_VECTOR_ #define _HIGHER_ORDER_ #define ARGUMENT(indexi,l,i) argument[indexi][l][i] #define TAYLORS(indexd,l,i) taylors[indexd][l][i] /*--------------------------------------------------------------------------*/ #else #if defined(_HOV_WK_) #define GENERATED_FILENAME "hov_wk_forward" #define _ADOLC_VECTOR_ #define _HIGHER_ORDER_ #define ARGUMENT(indexi,l,i) argument[indexi][l][i] #define TAYLORS(indexd,l,i) taylors[indexd][l][i] /*--------------------------------------------------------------------------*/ #else #if defined(_INT_FOR_) #if defined(_TIGHT_) #define GENERATED_FILENAME "int_forward_t" #endif #if defined(_NTIGHT_) #define GENERATED_FILENAME "int_forward_s" #endif #define ARGUMENT(indexi,l,i) argument[indexi][l] #define TAYLORS(indexd,l,i) taylors[indexd][l] /*--------------------------------------------------------------------------*/ #else #if defined(_INDO_) void copy_index_domain(int res, int arg, locint **ind_dom); void merge_2_index_domains(int res, int arg, locint **ind_dom); void combine_2_index_domains(int res, int arg1, int arg2, locint **ind_dom); void merge_3_index_domains(int res, int arg1, int arg2, locint **ind_dom); #define NUMNNZ 20 #define FMIN_ADOLC(x,y) ((y 1) \ write_taylors(res,(keep-1),k,p); \ } \ } #else #if defined(_ADOLC_VECTOR_) /* otherwise no keep */ #define IF_KEEP_TAYLOR_CLOSE #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #else /* _ZOS_, _FOS_, _HOS_ */ #define IF_KEEP_TAYLOR_CLOSE \ if (keep){\ fprintf(DIAG_OUT,"Otherwise succeeding reverse sweep will fail!\n");\ taylor_close(0);\ } #if defined(_ZOS_) #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) \ { \ UPDATE_TAYLORWRITTEN(keep) \ if (keep) \ ADOLC_WRITE_SCAYLOR(dp_T0[res]); \ } #else #if defined(_FOS_) #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) \ { \ UPDATE_TAYLORWRITTEN(keep) \ if (keep) \ { \ ADOLC_WRITE_SCAYLOR(dp_T0[res]); \ if (keep > 1) \ ADOLC_WRITE_SCAYLOR(dp_T[res]); \ } \ } #else #if defined(_HOS_) #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) \ { \ UPDATE_TAYLORWRITTEN(keep) \ if (keep) \ { \ ADOLC_WRITE_SCAYLOR(dp_T0[res]); \ if (keep > 1) \ write_taylor(res,keep-1); \ } \ } #endif #endif #endif #endif #endif #else /* no _KEEP_ */ #define IF_KEEP_TAYLOR_CLOSE #define IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #endif /*--------------------------------------------------------------------------*/ /* access to variables */ #if !defined(_ZOS_) #if defined(_FOS_) #define TRES *Tres #define TARG *Targ #define TARG1 *Targ1 #define TARG2 *Targ2 #define TQO *Tqo #define TRES_INC *Tres #define TARG_INC *Targ #define TARG1_INC *Targ1 #define TARG2_INC *Targ2 #define TQO_INC *Tqo #define TRES_DEC *Tres #define TARG_DEC *Targ #define TARG1_DEC *Targ1 #define TARG2_DEC *Targ2 #define TQO_DEC *Tqo #define TRES_FOINC *Tres #define TARG_FOINC *Targ #define TARG1_FOINC *Targ1 #define TARG2_FOINC *Targ2 #define TQO_FOINC *Tqo #define TRES_FODEC *Tres #define DEC_TRES_FO #define TARG_FODEC *Targ #define TARG1_FODEC *Targ1 #define TARG2_FODEC *Targ2 #define TQO_FODEC *Tqo #define ASSIGN_T(a,b) a = &b; #else #if defined(_INT_FOR_) #define TRES *Tres #define TARG *Targ #define TARG1 *Targ1 #define TARG2 *Targ2 #define TQO *Tqo #define TRES_INC *Tres++ #define TARG_INC *Targ++ #define TARG1_INC *Targ1++ #define TARG2_INC *Targ2++ #define TQO_INC *Tqo++ #define TRES_DEC *Tres-- #define TARG_DEC *Targ-- #define TARG1_DEC *Targ1-- #define TARG2_DEC *Targ2-- #define TQO_DEC *Tqo-- #define TRES_FOINC *Tres++ #define TARG_FOINC *Targ++ #define TARG1_FOINC *Targ1++ #define TARG2_FOINC *Targ2++ #define TQO_FOINC *Tqo++ #define TRES_FODEC *Tres-- #define TARG_FODEC *Targ-- #define TARG1_FODEC *Targ1-- #define TARG2_FODEC *Targ2-- #define TQO_FODEC *Tqo-- #define ASSIGN_T(a,b) a = b; #else /* _HOS_, _FOV_, _HOV_, _HOV_WK */ #define TRES *Tres #define TARG *Targ #define TARG1 *Targ1 #define TARG2 *Targ2 #define TQO *Tqo #define TRES_INC *Tres++ #define TARG_INC *Targ++ #define TARG1_INC *Targ1++ #define TARG2_INC *Targ2++ #define TQO_INC *Tqo++ #define TRES_DEC *Tres-- #define TARG_DEC *Targ-- #define TARG1_DEC *Targ1-- #define TARG2_DEC *Targ2-- #define TQO_DEC *Tqo-- #if defined(_FOV_) #define TRES_FOINC *Tres++ #define TARG_FOINC *Targ++ #define TARG1_FOINC *Targ1++ #define TARG2_FOINC *Targ2++ #define TQO_FOINC *Tqo++ #define TRES_FODEC *Tres #define DEC_TRES_FO Tres--; #define TARG_FODEC *Targ-- #define TARG1_FODEC *Targ1-- #define TARG2_FODEC *Targ2-- #define TQO_FODEC *Tqo-- #else /* _HOS_, _HOV_, _HOV_WK */ #define TRES_FOINC *Tres #define TARG_FOINC *Targ #define TARG1_FOINC *Targ1 #define TARG2_FOINC *Targ2 #define TQO_FOINC *Tqo #define TRES_FODEC *Tres #define DEC_TRES_FO #define TARG_FODEC *Targ #define TARG1_FODEC *Targ1 #define TARG2_FODEC *Targ2 #define TQO_FODEC *Tqo #endif #endif #define ASSIGN_T(a,b) a = b; #endif #endif /*--------------------------------------------------------------------------*/ /* loop stuff */ #if defined(_ADOLC_VECTOR_) #define FOR_0_LE_l_LT_p for (l=0; l=0; l--) #if defined(_ABS_NORM_) || defined(_ABS_NORM_SIG_) #define FIRSTSIGN_P(x,y) firstsign(p,&(x),y) #define COPYTAYL_P(x,y) FOR_0_LE_l_LT_p x[l] = y[l] #define EXT_FIRSTSIGN_P(sigx,sigd,x,y) ext_firstsign(sigx,sigd,p,&(x),y) #define EXT_FIRSTSIGN2_P(sigx,x,y) ext_firstsign2(sigx,p,&(x),y) #endif #else #if defined(_INT_FOR_) #define FOR_0_LE_l_LT_p for (l=0; l=0; l--) #else #define FOR_0_LE_l_LT_p #define FOR_p_GT_l_GE_0 #if defined(_ABS_NORM_) || defined(_ABS_NORM_SIG_) #define FIRSTSIGN_P(x,y) firstsign(1,&(x),y) #define COPYTAYL_P(x,y) x = *y #define EXT_FIRSTSIGN_P(sigx,sigd,x,y) ext_firstsign(sigx,sigd,1,&(x),y) #define EXT_FIRSTSIGN2_P(sigx,x,y) ext_firstsign2(sigx,1,&(x),y) #endif #endif #endif #if defined(_HIGHER_ORDER_) #define FOR_0_LE_i_LT_k for (i=0; i=0; i--) #else #define FOR_0_LE_i_LT_k #define FOR_k_GT_i_GE_0 #endif #if defined(_HOV_) #define FOR_0_LE_l_LT_pk for (l=0; ldp_x, m, edfct->dp_y) # define ADOLC_EXT_FCT_IARR_COMPLETE \ zos_forward_iArr(iArrLength, iArr, n, edfct->dp_x, m, edfct->dp_y) # define ADOLC_EXT_FCT_V2_COMPLETE \ zos_forward(iArrLength, iArr, nin, nout, insz, edfct2->x, outsz, edfct2->y, edfct2->context) # define ADOLC_EXT_LOOP # define ADOLC_EXT_SUBSCRIPT # define ADOLC_EXT_SUBSCRIPT_START # define ADOLC_EXT_COPY_TAYLORS(dest,src) #endif /* FOS_FORWARD */ #if defined(_FOS_) # define _EXTERN_ 1 # define ADOLC_EXT_FCT_POINTER fos_forward # define ADOLC_EXT_FCT_IARR_POINTER fos_forward_iArr # define ADOLC_EXT_FCT_COMPLETE \ fos_forward(n, edfct->dp_x, edfct->dp_X, m, edfct->dp_y, edfct->dp_Y) # define ADOLC_EXT_FCT_IARR_COMPLETE \ fos_forward_iArr(iArrLength, iArr, n, edfct->dp_x, edfct->dp_X, m, edfct->dp_y, edfct->dp_Y) # define ADOLC_EXT_POINTER_X edfct->dp_X # define ADOLC_EXT_POINTER_Y edfct->dp_Y # define ADOLC_EXT_FCT_V2_COMPLETE \ fos_forward(iArrLength, iArr, nin, nout, insz, edfct2->x, edfct2->xp, outsz, edfct2->y, edfct2->yp, edfct2->context) # define ADOLC_EXT_V2_POINTER_X edfct2->xp # define ADOLC_EXT_V2_POINTER_Y edfct2->yp # define ADOLC_EXT_LOOP # define ADOLC_EXT_SUBSCRIPT # define ADOLC_EXT_COPY_TAYLORS(dest,src) dest=src # define ADOLC_EXT_COPY_TAYLORS_BACK(dest,src) src=dest #endif /* FOV_FORWARD */ #if defined(_FOV_) # define _EXTERN_ 1 # define ADOLC_EXT_FCT_POINTER fov_forward # define ADOLC_EXT_FCT_IARR_POINTER fov_forward_iArr # define ADOLC_EXT_FCT_COMPLETE \ fov_forward(n, edfct->dp_x,p, edfct->dpp_X, m, edfct->dp_y, edfct->dpp_Y) # define ADOLC_EXT_FCT_IARR_COMPLETE \ fov_forward_iArr(iArrLength, iArr, n, edfct->dp_x,p, edfct->dpp_X, m, edfct->dp_y, edfct->dpp_Y) # define ADOLC_EXT_POINTER_X edfct->dpp_X # define ADOLC_EXT_POINTER_Y edfct->dpp_Y # define ADOLC_EXT_FCT_V2_COMPLETE \ fov_forward(iArrLength, iArr, nin, nout, insz, edfct2->x, p, edfct2->Xp, outsz, edfct2->y, edfct2->Yp, edfct2->context) # define ADOLC_EXT_V2_POINTER_X edfct2->Xp # define ADOLC_EXT_V2_POINTER_Y edfct2->Yp # define ADOLC_EXT_LOOP for (loop2 = 0; loop2 < p; ++loop2) # define ADOLC_EXT_SUBSCRIPT [loop2] # define ADOLC_EXT_COPY_TAYLORS(dest,src) dest=src # define ADOLC_EXT_COPY_TAYLORS_BACK(dest,src) #endif #if defined(_EXTERN_) locint n, m; ext_diff_fct *edfct; ext_diff_fct_v2 *edfct2; int loop,oloop; int iArrLength; int *iArr; # if defined(_FOV_) int loop2; # endif int ext_retc; int nin, nout; locint *insz, *outsz; #endif #if defined(_ABS_NORM_) short sig; #endif #ifdef ADOLC_AMPI_SUPPORT MPI_Op op; void *buf, *rbuf; int count, rcount; MPI_Datatype datatype, rtype; int src; int tag; enum AMPI_PairedWith_E pairedWith; MPI_Comm comm; MPI_Status status; struct AMPI_Request_S request; #endif locint qq; ADOLC_OPENMP_THREAD_NUMBER; #if defined(ADOLC_DEBUG) /****************************************************************************/ /* DEBUG MESSAGES */ fprintf(DIAG_OUT,"Call of %s(..) with tag: %d, n: %d, m %d,\n", GENERATED_FILENAME, tnum, indcheck, depcheck); #if defined(_KEEP_) fprintf(DIAG_OUT," keep: %d\n", keep); #endif #if defined(_HIGHER_ORDER_) fprintf(DIAG_OUT," degree: %d\n",gdegree); #endif #if defined(_ADOLC_VECTOR_) fprintf(DIAG_OUT," p: %d\n\n",p); #endif #endif /****************************************************************************/ /* INITs */ /* Set up stuff for the tape */ ADOLC_OPENMP_GET_THREAD_NUMBER; /* Initialize the Forward Sweep */ init_for_sweep(tnum); if ( (depcheck != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS]) || (indcheck != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]) ) { fprintf(DIAG_OUT,"ADOL-C error: forward sweep on tape %d aborted!\n" "Number of dependent(%u) and/or independent(%u) variables passed" " to forward is\ninconsistent with number " "recorded on tape (%zu, %zu) \n", tnum, depcheck, indcheck, ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS], ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #if defined(_ABS_NORM_) || defined(_ABS_NORM_SIG_) if (! ADOLC_CURRENT_TAPE_INFOS.stats[NO_MIN_MAX] ) { fprintf(DIAG_OUT,"ADOL-C error: tape %d was not created compatible " "with %s\n Please call enableMinMaxUsingAbs() " "before trace_on(%d)\n", tnum, __FUNCTION__, tnum); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #if defined(_ABS_NORM_SIG_) || defined(_INDOPRO_) if (swcheck != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_SWITCHES]) { fprintf(DIAG_OUT,"ADOL-C error: forward sweep on tape %d aborted!\n" "Number of switches(%u) passed" " to forward is\ninconsistent with number " "recorded on tape (%zu) \n", tnum, swcheck, ADOLC_CURRENT_TAPE_INFOS.stats[NUM_SWITCHES]); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #endif #endif /****************************************************************************/ /* MEMORY ALLOCATION */ /* olvo 980626 has to be revised for common blocks */ /*--------------------------------------------------------------------------*/ #if !defined(_NTIGHT_) dp_T0 = myalloc1(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]); ADOLC_CURRENT_TAPE_INFOS.dp_T0 = dp_T0; if(ADOLC_CURRENT_TAPE_INFOS.stats[NO_MIN_MAX]) { if (ADOLC_CURRENT_TAPE_INFOS.signature == NULL) { signature = myalloc1(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_SWITCHES]); ADOLC_CURRENT_TAPE_INFOS.signature = signature; } else signature = ADOLC_CURRENT_TAPE_INFOS.signature; } ADOLC_CURRENT_TAPE_INFOS.dpp_T = &dp_T0; ADOLC_CURRENT_TAPE_INFOS.numTay = 0; ADOLC_CURRENT_TAPE_INFOS.gDegree = 0; ADOLC_CURRENT_TAPE_INFOS.workMode = ADOLC_ZOS_FORWARD; #endif /* !_NTIGHT_ */ #if defined(_ZOS_) /* ZOS */ #if defined(_KEEP_) if (keep>1) { fprintf(DIAG_OUT,"\n ADOL-C error: zero order scalar forward cannot save" " more\nthan zero order taylor coefficients!\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #endif #if defined(_KEEP_) if (keep) { taylbuf = ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; taylor_begin(taylbuf,keep-1); } #endif /*--------------------------------------------------------------------------*/ #else /* FOS */ #if defined(_FOS_) #if defined(_KEEP_) if (keep>2) { fprintf(DIAG_OUT,"\n ADOL-C error: first order scalar forward cannot save" " more \nthan first order taylor coefficients!\n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } #endif dp_T = myalloc1(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]); ADOLC_CURRENT_TAPE_INFOS.dpp_T = &dp_T; ADOLC_CURRENT_TAPE_INFOS.numTay = 1; ADOLC_CURRENT_TAPE_INFOS.gDegree = 1; ADOLC_CURRENT_TAPE_INFOS.workMode = ADOLC_FOS_FORWARD; # define TAYLOR_BUFFER dp_T #if defined(_KEEP_) if (keep) { taylbuf = ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE]; taylor_begin(taylbuf,keep-1); } #endif /*--------------------------------------------------------------------------*/ #else /* INF_FOR */ #if defined(_INT_FOR_) up_T = myalloc2_ulong(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES],p); #define TAYLOR_BUFFER up_T /*--------------------------------------------------------------------------*/ #else /* INDOPRO */ #if defined(_INDO_) #if defined(_INDOPRO_) /* index domains */ ind_dom = (locint **) malloc(sizeof(locint*) * ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]); max_ind_dom = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES]; for(i=0;i */ int v = 0; unsigned int countPerOperation[256], taylorPerOperation[256]; memset(countPerOperation, 0, 1024); memset(taylorPerOperation, 0, 1024); # define UPDATE_TAYLORWRITTEN(X) taylorPerOperation[operation] += X; #else # define UPDATE_TAYLORWRITTEN(X) #endif /* ADOLC_DEBUG */ operation=get_op_f(); #if defined(ADOLC_DEBUG) ++countPerOperation[operation]; #endif /* ADOLC_DEBUG */ while (operation !=end_of_tape) { switch (operation) { /****************************************************************************/ /* MARKERS */ /*--------------------------------------------------------------------------*/ case end_of_op: /* end_of_op */ get_op_block_f(); operation=get_op_f(); /* Skip next operation, it's another end_of_op */ break; /*--------------------------------------------------------------------------*/ case end_of_int: /* end_of_int */ get_loc_block_f(); break; /*--------------------------------------------------------------------------*/ case end_of_val: /* end_of_val */ get_val_block_f(); break; /*--------------------------------------------------------------------------*/ case start_of_tape: /* start_of_tape */ case end_of_tape: /* end_of_tape */ break; /****************************************************************************/ /* COMPARISON */ /*--------------------------------------------------------------------------*/ case eq_zero: /* eq_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] != 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator eq_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } ret_c = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case neq_zero: /* neq_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] == 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator neq_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case le_zero: /* le_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] > 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator le_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } if (dp_T0[arg] == 0) ret_c = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case gt_zero: /* gt_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] <= 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator gt_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case ge_zero: /* ge_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] < 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator ge_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } if (dp_T0[arg] == 0) ret_c = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case lt_zero: /* lt_zero */ arg = get_locint_f(); #if !defined(_NTIGHT_) if (dp_T0[arg] >= 0) { if (ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator lt_zero).\n" "Forward sweep aborted! Retaping recommended!\n"); ret_c = -1; operation = end_of_tape; continue; } #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* ASSIGNMENTS */ /*--------------------------------------------------------------------------*/ case assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ arg = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = dp_T0[arg]; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(res, arg, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ,TAYLOR_BUFFER[arg]) ASSIGN_T(Tres,TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = TARG_INC; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ res = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = coval; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0]=0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case neg_sign_p: case recipr_p: case assign_p: /* assign an adouble variable a assign_d */ /* double value. (=) */ res = get_locint_f(); arg = get_locint_f(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; #endif IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) if (operation == recipr_p) coval = 1.0/coval; else if (operation == neg_sign_p) coval = - coval; dp_T0[res] = coval; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0]=0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case assign_d_zero: /* assign an adouble variable a assign_d_zero */ /* double value. (0) (=) */ res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = 0.0; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0]=0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case assign_d_one: /* assign an adouble variable a assign_d_one */ /* double value. (1) (=) */ res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = 1.0; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0]=0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] = basepoint[indexi]; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0] = 1; ind_dom[res][2] = indexi; #endif #if defined(_NONLIND_) fod[opind].entry = indexi; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_p TRES_INC = ARGUMENT(indexi,l,i); #else FOR_0_LE_l_LT_p FOR_0_LE_i_LT_k TRES_INC = ARGUMENT(indexi,l,i); #endif #endif #endif /* ALL_TOGETHER_AGAIN */ ++indexi; break; /*--------------------------------------------------------------------------*/ case assign_dep: /* assign a float variable a assign_dep */ /* dependent adouble value. (>>=) */ res = get_locint_f(); #if !defined(_INDO_) #if !defined(_NTIGHT_) if ( valuepoint != NULL ) valuepoint[indexd] = dp_T0[res]; #endif /* !_NTIGHT_ */ #endif #if defined(_INDO_) #if defined(_INDOPRO_) && !defined(_NONLIND_OLD_) if (ind_dom[res][0] != 0) { crs[indexd] = (unsigned int*) malloc(sizeof(unsigned int) * (ind_dom[res][0]+1)); crs[indexd][0] = ind_dom[res][0]; for(l=1;l<=crs[indexd][0];l++) { crs[indexd][l] = ind_dom[res][l+1]; } } else { crs[indexd] = (unsigned int*) malloc(sizeof(unsigned int)); crs[indexd][0] =0; } #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) #ifdef _INT_FOR_ if (taylors != 0 ) /* ??? question: why here? */ FOR_0_LE_l_LT_p TAYLORS(indexd,l,i) = TRES_INC; #else if (taylors != 0 ) /* ??? question: why here? */ FOR_0_LE_l_LT_p FOR_0_LE_i_LT_k TAYLORS(indexd,l,i) = TRES_INC; #endif #endif #endif /* ALL_TOGETHER_AGAIN */ indexd++; break; /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ case eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ res = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] += coval; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_plus_p: /* Add a floating point to an eq_plus_p */ /* adouble. (+=) */ res = get_locint_f(); arg = get_locint_f(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; #endif IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] += coval; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] += dp_T0[arg]; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_pk TRES_INC |= TARG_INC; #else FOR_0_LE_l_LT_pk TRES_INC += TARG_INC; #endif #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ res = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] -= coval; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_min_p: /* Subtract a floating point from an eq_min_p */ /* adouble. (-=) */ res = get_locint_f(); arg = get_locint_f(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; #endif IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] -= coval; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] -= dp_T0[arg]; #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_pk TRES_INC |= TARG_INC; #else FOR_0_LE_l_LT_pk TRES_INC -= TARG_INC; #endif #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ res = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] *= coval; #endif /* !_NTIGHT_ */ #if !defined(_INDO_) #if !defined(_ZOS_) /* BREAK_ZOS */ #if !defined( _INT_FOR_) FOR_0_LE_l_LT_pk ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC *= coval; #endif #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case eq_mult_p: /* Multiply an adouble by a eq_mult_p */ /* flaoting point. (*=) */ res = get_locint_f(); arg = get_locint_f(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; #endif IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) dp_T0[res] *= coval; #endif /* !_NTIGHT_ */ #if !defined(_INDO_) #if !defined(_ZOS_) /* BREAK_ZOS */ #if !defined( _INT_FOR_) FOR_0_LE_l_LT_pk ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC *= coval; #endif #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; traverse_unary(&fod[arg_index[res]], nonl_dom, &fod[arg_index[arg]], indcheck+1,maxopind+2); traverse_unary(&fod[arg_index[arg]], nonl_dom, &fod[arg_index[res]], indcheck+1,maxopind+2); arg_index[res] = opind++; #endif #if defined(_NONLIND_OLD_) extend_nonlinearity_domain_binary(res, arg, ind_dom, nonl_dom); #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) INC_pk_1(Tres) INC_pk_1(Targ) #ifdef _INT_FOR_ FOR_p_GT_l_GE_0 TRES_FODEC |= TARG_DEC; #else FOR_p_GT_l_GE_0 FOR_k_GT_i_GE_0 { TRES_FODEC = dp_T0[res]*TARG_DEC + TRES*dp_T0[arg]; DEC_TRES_FO #ifdef _HIGHER_ORDER_ TresOP = Tres-i; TargOP = Targ; for (j=0;j0 */ #endif /* _HIGHER_ORDER_ */ } #endif #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case sin_op: /* sine operation sin_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); IF_KEEP_WRITE_TAYLOR(arg2,keep,k,p) /* olvo 980710 covalue */ IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) /* Note: always arg2 != arg1 */ dp_T0[arg2] = cos(dp_T0[arg1]); dp_T0[res] = sin(dp_T0[arg1]); #endif /* !_NTIGHT_ */ ADOLC_OPENMP_RESTORE_THREAD_NUMBER; #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg1]]; fod[opind].right = NULL; traverse_unary(&fod[opind], nonl_dom, &fod[opind], indcheck+1,maxopind+2); arg_index[res] = opind++; #endif #if defined(_NONLIND_OLD_) extend_nonlinearity_domain_unary(arg1, ind_dom, nonl_dom); #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) ASSIGN_T(Targ2, TAYLOR_BUFFER[arg2]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_p { /* olvo 980923 changed order to allow x = sin(x) */ TARG2_FOINC = TARG1; TRES_FOINC = TARG1_FOINC; } #else FOR_0_LE_l_LT_p FOR_0_LE_i_LT_k { /* olvo 980921 changed order to allow x = sin(x) */ #if defined(_HIGHER_ORDER_) zOP = dp_z+i; (*zOP--) = (i+1) * (*Targ1); #endif /* _HIGHER_ORDER_ */ /* Note: always arg2 != arg1 */ TARG2_FOINC = -dp_T0[res] * TARG1; TRES_FOINC = dp_T0[arg2] * TARG1_INC; #if defined(_HIGHER_ORDER_) TresOP = Tres-i; Targ2OP = Targ2-i; *Tres *= (i+1); *Targ2 *= (i+1); for (j=0;j 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES = r0; VEC_INC(Tres, k) } else if (dp_T0[arg1] == -1.0) FOR_0_LE_l_LT_p { FOR_0_LE_i_LT_k if (TARG1 > 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES = r0; VEC_INC(Tres, k) } else FOR_0_LE_l_LT_p { FOR_0_LE_i_LT_k { /* olvo 980921 changed order to allow x = asin(x) */ #if defined(_HIGHER_ORDER_) zOP = dp_z+i; (*zOP--) = (i+1) * (*Targ1); #endif /* _HIGHER_ORDER_ */ TRES_FOINC = dp_T0[arg2] * TARG1_INC; #if defined(_HIGHER_ORDER_) Targ2OP = Targ2; *Tres *= (i+1); for (j=0;j 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = -make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES = r0; VEC_INC(Tres, k) } else if (dp_T0[arg1] == -1.0) FOR_0_LE_l_LT_p { FOR_0_LE_i_LT_k if (TARG1 > 0.0) { r0 = -make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES = r0; VEC_INC(Tres, k) } else FOR_0_LE_l_LT_p { FOR_0_LE_i_LT_k { /* olvo 980921 changed order to allow x = acos(x) */ #if defined(_HIGHER_ORDER_) zOP = dp_z+i; (*zOP--) = (i+1) * (*Targ1); #endif /* _HIGHER_ORDER_ */ TRES_FOINC = dp_T0[arg2] * TARG1_INC; #if defined(_HIGHER_ORDER_) Targ2OP = Targ2; *Tres *= (i+1); for (j=0;j 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES_INC = r0; #if defined(_HIGHER_ORDER_) for (i=1;i 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES_INC = r0; #if defined(_HIGHER_ORDER_) for (i=1;i 0.0) { r0 = make_inf(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else if (TARG1 < 0.0) { r0 = make_nan(); VEC_INC(Targ1, k-i) BREAK_FOR_I } else { r0 = 0.0; Targ1++; } TRES_INC = r0; #if defined(_HIGHER_ORDER_) for (i=1;i 1) TRES_INC = 0; if ((coval - i < 1) && (coval - i > 0)) TRES_INC = make_inf(); if (coval - i < 0) TRES_INC = make_nan(); } } } else { if (coval == 1) { FOR_0_LE_l_LT_pk TRES_INC = TARG_INC; } else /* coval is an int > 1 */ /* the following is not efficient but at least it works */ /* it reformulates x^n into x* ... *x n times */ { INC_pk_1(Targ) INC_pk_1(Tres) FOR_p_GT_l_GE_0 { FOR_k_GT_i_GE_0 { *Tres = 0; DEC_TRES_FO #if defined(_HIGHER_ORDER_) if (i == k-1) { zOP = dp_z+k-1; for(j=k-1;j>=0;j--) { (*zOP--) = (*Targ--); } } for (j=0;j 1) TRES_INC = 0; if ((coval - i < 1) && (coval - i > 0)) TRES_INC = make_inf(); if (coval - i < 0) TRES_INC = make_nan(); } } } else { if (coval == 1) { FOR_0_LE_l_LT_pk TRES_INC = TARG_INC; } else /* coval is an int > 1 */ /* the following is not efficient but at least it works */ /* it reformulates x^n into x* ... *x n times */ { INC_pk_1(Targ) INC_pk_1(Tres) FOR_p_GT_l_GE_0 { FOR_k_GT_i_GE_0 { *Tres = 0; DEC_TRES_FO #if defined(_HIGHER_ORDER_) if (i == k-1) { zOP = dp_z+k-1; for(j=k-1;j>=0;j--) { (*zOP--) = (*Targ--); } } for (j=0;j dp_T0[res] == 0.0 */ { r0 = 0.0; FOR_0_LE_i_LT_k { if (TARG>0.0) { r0 = make_inf(); VEC_INC(Targ, k-i) BREAK_FOR_I } else if (TARG<0.0) { r0 = make_nan(); VEC_INC(Targ, k-i) BREAK_FOR_I } else Targ++; } } else { r0 = 0.5/dp_T0[res]; } Targ = TargOP; #if defined(_HIGHER_ORDER_) even = 1; #endif FOR_0_LE_i_LT_k { TRES_FOINC = r0 * TARG_INC; #if defined(_HIGHER_ORDER_) TresOP = Tres-i; TresOP2 = Tres-1; x = 0; for (j=1;2*j-1 dp_T0[arg2]) { if (coval) MINDEC(ret_c,2); } else if (dp_T0[arg1] < dp_T0[arg2]) { if (!coval) MINDEC(ret_c,2); } else if (arg1 != arg2) MINDEC(ret_c,1); #endif /* !_NTIGHT_ */ #if defined (_INDO_) #if defined (_INDOPRO_) #if defined (_TIGHT_) if (dp_T0[arg1] < dp_T0[arg2]) copy_index_domain(res, arg1, ind_dom); else { if (dp_T0[arg1] > dp_T0[arg2]) copy_index_domain(res, arg2, ind_dom); else combine_2_index_domains(res, arg1, arg2, ind_dom); } #else combine_2_index_domains(res, arg1, arg2, ind_dom); #endif #endif #if defined(_NONLIND_) #ifdef _TIGHT_ if (dp_T0[arg1] < dp_T0[arg2]) { fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg1]]; fod[opind].right = NULL; arg_index[res] = opind++; } else { if (dp_T0[arg1] > dp_T0[arg2]) { fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg2]]; fod[opind].right = NULL; arg_index[res] = opind++; } else { fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg1]]; fod[opind].right = &fod[arg_index[arg2]]; arg_index[res] = opind++; } } #else fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[arg1]]; fod[opind].right = &fod[arg_index[arg2]]; arg_index[res] = opind++; arg_index[res] = opind++; #endif #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) ASSIGN_T(Targ2, TAYLOR_BUFFER[arg2]) ASSIGN_T(Tres, TAYLOR_BUFFER[res]) #ifdef _INT_FOR_ #ifdef _TIGHT_ Tqo = NULL; if (dp_T0[arg1] > dp_T0[arg2]) Tqo = Targ2; else if (dp_T0[arg1] < dp_T0[arg2]) Tqo = Targ1; FOR_0_LE_l_LT_p { Targ = Tqo; if (Targ == NULL) /* e.g. T0[arg1] == T0[arg2] */ { Targ1OP = Targ1; Targ2OP = Targ2; if (TARG1 > TARG2) Targ = Targ2OP; else if (TARG1 < TARG2) Targ = Targ1OP; Targ1++; Targ2++; if (Targ == NULL) /* e.g. both are equal */ Targ = Targ1OP; } TRES_INC = TARG_INC; if (Tqo) Tqo++; } dp_T0[res] = MIN_ADOLC(dp_T0[arg1], dp_T0[arg2]); #endif /* _TIGHT_ */ #ifdef _NTIGHT_ TRES_INC = TARG1_INC | TARG2_INC; #endif /* _NTIGHT_ */ #else Tqo = NULL; if (dp_T0[arg1] > dp_T0[arg2]) Tqo = Targ2; else if (dp_T0[arg1] < dp_T0[arg2]) Tqo = Targ1; FOR_0_LE_l_LT_p { Targ = Tqo; if (Targ == NULL) /* e.g. dp_T0[arg1] == dp_T0[arg2] */ { Targ1OP = Targ1; Targ2OP = Targ2; FOR_0_LE_i_LT_k { if (TARG1 > TARG2) { Targ = Targ2OP; VEC_INC(Targ1, k-i) VEC_INC(Targ2, k-i) BREAK_FOR_I } else if (TARG1 < TARG2) { Targ = Targ1OP; VEC_INC(Targ1, k-i) VEC_INC(Targ2, k-i) BREAK_FOR_I } Targ1++; Targ2++; } if (Targ == NULL) /* e.g. both are equal */ Targ = Targ1OP; } FOR_0_LE_i_LT_k TRES_INC = TARG_INC; if (Tqo) { VEC_INC(Tqo, k) } } #endif #endif #endif /* ALL_TOGETHER_AGAIN */ #if !defined(_NTIGHT_) dp_T0[res] = MIN_ADOLC( dp_T0[arg1], dp_T0[arg2] ); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case abs_val: /* abs_val */ arg = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if !defined(_NTIGHT_) /* olvo 980923 changed order to allow x = min(x,y) etc. */ /* olvo/mitev 980721 ec n3l (taken from below) */ if (dp_T0[arg] < 0.0) { if (coval) MINDEC(ret_c,2); } else if (dp_T0[arg] > 0.0) { if (!coval) MINDEC(ret_c,2); } if (ADOLC_CURRENT_TAPE_INFOS.stats[NO_MIN_MAX]) { signature[switchnum] = dp_T0[arg]; #if defined(_ABS_NORM_) || defined(_ABS_NORM_SIG_) swargs[switchnum] = dp_T0[arg]; #endif } #endif /* !_NTIGHT_ */ #if defined(_INDO_) #if defined(_INDOPRO_) #if defined(_ABS_NORM_) if (ind_dom[arg][0] != 0) { crs[switchnum] = (unsigned int*) malloc(sizeof(unsigned int)* (ind_dom[arg][0]+1)); crs[switchnum][0] = ind_dom[arg][0]; for(l=1;l 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; copy_index_domain(res, arg1, ind_dom); } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; copy_index_domain(res, arg2, ind_dom); } #else combine_2_index_domains(res, arg1, arg2, ind_dom); #endif #endif #if defined (_NONLIND_) #ifdef _TIGHT_ if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; arg_index[res] = arg_index[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; arg_index[res] = arg_index[arg2]; } #else arg_index[res] = opind++; #endif #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) ASSIGN_T(Targ2, TAYLOR_BUFFER[arg2]) #endif /* ALL_TOGETHER_AGAIN */ #ifdef _INT_FOR_ #ifdef _TIGHT_ coval = get_val_f(); if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; else FOR_0_LE_l_LT_pk TRES_INC = TARG2_INC; if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; } #endif /* _TIGHT_ */ #ifdef _NTIGHT_ FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC | TARG2_INC; #endif /* _NTIGHT_ */ #else #if !defined(_ZOS_) /* BREAK_ZOS */ if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; else FOR_0_LE_l_LT_pk TRES_INC = TARG2_INC; #endif if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; } #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ case cond_assign_s: /* cond_assign_s */ arg = get_locint_f(); arg1 = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) /* olvo 980924 changed order to allow reflexive ops */ #if defined(_INDO_) #if defined(_INDOPRO_) #ifdef _TIGHT_ if (dp_T0[arg] > 0) copy_index_domain(res, arg1, ind_dom); #else merge_2_index_domains(res, arg1, ind_dom); #endif #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) #endif /* ALL_TOGETHER_AGAIN */ #ifdef _INT_FOR_ #ifdef _TIGHT_ coval = get_val_f(); if (dp_T0[arg] > 0) #endif /* _TIGHT_ */ FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #ifdef _TIGHT_ if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else if (dp_T0[arg] == 0) MINDEC(ret_c,0); #endif /* _TIGHT_ */ #else #if !defined(_ZOS_) /* BREAK_ZOS */ if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #endif if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else if (dp_T0[arg] == 0) MINDEC(ret_c,0); #endif #endif /* ALL_TOGETHER_AGAIN */ break; /*--------------------------------------------------------------------------*/ /* NEW CONDITIONALS */ /*--------------------------------------------------------------------------*/ #if defined(ADOLC_ADVANCED_BRANCHING) case neq_a_a: case eq_a_a: case le_a_a: case ge_a_a: case lt_a_a: case gt_a_a: case neq_a_p: case eq_a_p: case le_a_p: case ge_a_p: case lt_a_p: case gt_a_p: #if !defined(_NTIGHT_) coval = #endif get_val_f(); arg = get_locint_f(); arg1 = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) { revreal retval = -1; const char* opname = ""; switch (operation) { case neq_a_a: retval = (revreal)(dp_T0[arg] != dp_T0[arg1]); opname = "neq_a_a"; break; case eq_a_a: retval = (revreal)(dp_T0[arg] == dp_T0[arg1]); opname = "eq_a_a"; break; case ge_a_a: retval = (revreal)(dp_T0[arg] >= dp_T0[arg1]); opname = "ge_a_a"; break; case le_a_a: retval = (revreal)(dp_T0[arg] <= dp_T0[arg1]); opname = "le_a_a"; break; case gt_a_a: retval = (revreal)(dp_T0[arg] > dp_T0[arg1]); opname = "gt_a_a"; break; case lt_a_a: retval = (revreal)(dp_T0[arg] < dp_T0[arg1]); opname = "lt_a_a"; break; case neq_a_p: retval = (revreal)(dp_T0[arg] != ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]); opname = "neq_a_p"; break; case eq_a_p: retval = (revreal)(dp_T0[arg] == ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]); opname = "eq_a_p"; break; case ge_a_p: retval = (revreal)(dp_T0[arg] >= ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]); opname = "ge_a_p"; break; case le_a_p: retval = (revreal)(dp_T0[arg] <= ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]); opname = "le_a_p"; break; case gt_a_p: retval = (revreal)(dp_T0[arg] > ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]); opname = "gt_a_p"; break; case lt_a_p: retval = (revreal)(dp_T0[arg] < ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]); opname = "lt_a_p"; break; } if (retval != coval && ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning) fprintf(DIAG_OUT, "ADOL-C Warning: Branch switch detected in comparison " "(operator %s).\n" "Results may be unpredictable! Retaping recommended!\n",opname); IF_KEEP_WRITE_TAYLOR(res,keep,k,p); dp_T0[res] = retval; } #endif #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0]=0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = 0; #endif #endif /* ALL_TOGETHER_AGAIN */ break; #endif /* ADVANCED_BRANCHING */ /*--------------------------------------------------------------------------*/ case subscript: #if !defined(_NTIGHT_) coval = #endif get_val_f(); arg = get_locint_f(); res = get_locint_f(); { #if !defined(_NTIGHT_) size_t idx, numvar = (size_t)trunc(fabs(coval)); locint vectorloc; vectorloc = #endif get_locint_f(); #if !defined(_NTIGHT_) idx = (size_t)trunc(fabs(dp_T0[arg])); if (idx >= numvar) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting n=%zu, idx=%zu\n", numvar, idx); arg1 = vectorloc+idx; IF_KEEP_WRITE_TAYLOR(res,keep,k,p); dp_T0[res] = dp_T0[arg1]; #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ1,TAYLOR_BUFFER[arg1]) ASSIGN_T(Tres,TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active subscripting does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ } break; case subscript_ref: #if !defined(_NTIGHT_) coval = #endif get_val_f(); arg = get_locint_f(); res = get_locint_f(); { #if !defined(_NTIGHT_) size_t idx, numvar = (size_t)trunc(fabs(coval)); locint vectorloc; vectorloc = #endif get_locint_f(); #if !defined(_NTIGHT_) idx = (size_t)trunc(fabs(dp_T0[arg])); if (idx >= numvar) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting (ref) n=%zu, idx=%zu\n", numvar, idx); arg1 = vectorloc+idx; IF_KEEP_WRITE_TAYLOR(res,keep,k,p); dp_T0[res] = arg1; #else fprintf(DIAG_OUT, "ADOL-C error: active subscripting does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif } break; case ref_copyout: arg = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p); dp_T0[res] = dp_T0[arg1]; #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ1,TAYLOR_BUFFER[arg1]) ASSIGN_T(Tres,TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_incr_a: arg = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p); dp_T0[arg1]++; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif break; case ref_decr_a: arg = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p); dp_T0[arg1]--; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif break; case ref_assign_d: arg = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p) dp_T0[arg1] = coval; #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[arg1][0] = 0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[arg1] = opind++; #endif #else #if !defined(_ZOS_) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) FOR_0_LE_l_LT_pk TARG1_INC = 0; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif break; case ref_assign_p: arg = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[res]; #endif #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p) dp_T0[arg1] = coval; #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[arg1][0] = 0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[arg1] = opind++; #endif #else #if !defined(_ZOS_) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) FOR_0_LE_l_LT_pk TARG1_INC = 0; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif break; case ref_assign_d_zero: arg = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p) dp_T0[arg1] = 0.0; #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[arg1][0] = 0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[arg1] = opind++; #endif #else #if !defined(_ZOS_) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) FOR_0_LE_l_LT_pk TARG1_INC = 0; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif break; case ref_assign_d_one: arg = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p) dp_T0[arg1] = 1.0; #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[arg1][0] = 0; #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[arg1] = opind++; #endif #else #if !defined(_ZOS_) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) FOR_0_LE_l_LT_pk TARG1_INC = 0; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif break; case ref_assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ arg = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) arg1 = (size_t)trunc(fabs(dp_T0[res])); IF_KEEP_WRITE_TAYLOR(arg1,keep,k,p) dp_T0[arg1] = dp_T0[arg]; #if defined(_INDO_) #if defined(_INDOPRO_) copy_index_domain(arg1, arg, ind_dom); #endif #if defined(_NONLIND_) arg_index[arg1] = arg_index[arg]; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Targ,TAYLOR_BUFFER[arg]) ASSIGN_T(Targ1,TAYLOR_BUFFER[arg1]) FOR_0_LE_l_LT_pk TARG1_INC = TARG_INC; #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ arg = get_locint_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] = basepoint[indexi]; #if defined(_INDO_) #if defined(_INDOPRO_) ind_dom[res][0] = 1; ind_dom[res][2] = indexi; #endif #if defined(_NONLIND_) fod[opind].entry = indexi; fod[opind].left = NULL; fod[opind].right = NULL; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_p TRES_INC = ARGUMENT(indexi,l,i); #else FOR_0_LE_l_LT_p FOR_0_LE_i_LT_k TRES_INC = ARGUMENT(indexi,l,i); #endif #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ ++indexi; break; case ref_eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ arg = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] += coval; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case ref_eq_plus_p: /* Add a floating point to an eq_plus_p */ /* adouble. (+=) */ arg = get_locint_f(); arg1 = get_locint_f(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; #endif #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] += coval; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case ref_eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg = get_locint_f(); arg1 = get_locint_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg1])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] += dp_T0[arg]; #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_pk TRES_INC |= TARG_INC; #else FOR_0_LE_l_LT_pk TRES_INC += TARG_INC; #endif #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ arg = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] -= coval; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_eq_min_p: /* Subtract a floating point from an eq_min_p */ /* adouble. (-=) */ arg = get_locint_f(); arg1 = get_locint_f(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; #endif #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] -= coval; #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case ref_eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg = get_locint_f(); arg1 = get_locint_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg1])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] -= dp_T0[arg]; #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; arg_index[res] = opind++; #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) #ifdef _INT_FOR_ FOR_0_LE_l_LT_pk TRES_INC |= TARG_INC; #else FOR_0_LE_l_LT_pk TRES_INC -= TARG_INC; #endif #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ arg = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] *= coval; #if !defined(_INDO_) #if !defined(_ZOS_) /* BREAK_ZOS */ #if !defined( _INT_FOR_) FOR_0_LE_l_LT_pk ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC *= coval; #endif #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_eq_mult_p: /* Multiply an adouble by a eq_mult_p */ /* flaoting point. (*=) */ arg = get_locint_f(); arg1 = get_locint_f(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; #endif #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) dp_T0[res] *= coval; #if !defined(_INDO_) #if !defined(_ZOS_) /* BREAK_ZOS */ #if !defined( _INT_FOR_) FOR_0_LE_l_LT_pk ASSIGN_T(Tres, TAYLOR_BUFFER[res]) FOR_0_LE_l_LT_pk TRES_INC *= coval; #endif #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ break; case ref_eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg = get_locint_f(); arg1 = get_locint_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg1])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) #if defined(_INDO_) #if defined(_INDOPRO_) merge_2_index_domains(res, arg, ind_dom); #endif #if defined(_NONLIND_) fod[opind].entry = maxopind+2; fod[opind].left = &fod[arg_index[res]]; fod[opind].right = &fod[arg_index[arg]]; traverse_unary(&fod[arg_index[res]], nonl_dom, &fod[arg_index[arg]], indcheck+1,maxopind+2); traverse_unary(&fod[arg_index[arg]], nonl_dom, &fod[arg_index[res]], indcheck+1,maxopind+2); arg_index[res] = opind++; #endif #if defined(_NONLIND_OLD_) extend_nonlinearity_domain_binary(res, arg, ind_dom, nonl_dom); #endif #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ, TAYLOR_BUFFER[arg]) INC_pk_1(Tres) INC_pk_1(Targ) #ifdef _INT_FOR_ FOR_p_GT_l_GE_0 TRES_FODEC |= TARG_DEC; #else FOR_p_GT_l_GE_0 FOR_k_GT_i_GE_0 { TRES_FODEC = dp_T0[res]*TARG_DEC + TRES*dp_T0[arg]; DEC_TRES_FO #ifdef _HIGHER_ORDER_ TresOP = Tres-i; TargOP = Targ; for (j=0;j 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; #if defined(_INDOPRO_) copy_index_domain(res, arg2, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg2]; #endif } #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) ASSIGN_T(Targ2, TAYLOR_BUFFER[arg2]) #endif /* ALL_TOGETHER_AGAIN */ #ifdef _INT_FOR_ coval = get_val_f(); if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; else FOR_0_LE_l_LT_pk TRES_INC = TARG2_INC; if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; } FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC | TARG2_INC; #else #if !defined(_ZOS_) /* BREAK_ZOS */ if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; else FOR_0_LE_l_LT_pk TRES_INC = TARG2_INC; #endif if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else { if (coval > 0.0) MINDEC(ret_c,2); if (dp_T0[arg] == 0) MINDEC(ret_c,0); dp_T0[res] = dp_T0[arg2]; } #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ } break; case ref_cond_assign_s: /* cond_assign_s */ arg = get_locint_f(); arg1 = get_locint_f(); arg2 = get_locint_f(); #if !defined(_NTIGHT_) coval = #endif get_val_f(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(dp_T0[arg2])); IF_KEEP_WRITE_TAYLOR(res,keep,k,p) /* olvo 980924 changed order to allow reflexive ops */ #if defined(_INDO_) if (dp_T0[arg] > 0) { #if defined(_INDOPRO_) copy_index_domain(res, arg1, ind_dom); #endif #if defined(_NONLIND_) arg_index[res] = arg_index[arg1]; #endif } #else #if !defined(_ZOS_) /* BREAK_ZOS */ ASSIGN_T(Tres, TAYLOR_BUFFER[res]) ASSIGN_T(Targ1, TAYLOR_BUFFER[arg1]) #endif /* ALL_TOGETHER_AGAIN */ #ifdef _INT_FOR_ coval = get_val_f(); if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else if (dp_T0[arg] == 0) MINDEC(ret_c,0); #else #if !defined(_ZOS_) /* BREAK_ZOS */ if (dp_T0[arg] > 0) FOR_0_LE_l_LT_pk TRES_INC = TARG1_INC; #endif if (dp_T0[arg] > 0) { if (coval <= 0.0) MINDEC(ret_c,2); dp_T0[res] = dp_T0[arg1]; } else if (dp_T0[arg] == 0) MINDEC(ret_c,0); #endif #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* ALL_TOGETHER_AGAIN */ break; /****************************************************************************/ /* REMAINING STUFF */ /*--------------------------------------------------------------------------*/ case take_stock_op: /* take_stock_op */ size = get_locint_f(); res = get_locint_f(); #if !defined(_NTIGHT_) d = #endif get_val_v_f(size); for (ls=0;lsADOLC_EXT_FCT_POINTER==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_DIFFFUNC); if (n>0) { if (edfct->dp_x==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #if !defined(_ZOS_) if (ADOLC_EXT_POINTER_X==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #endif } if (m>0) { if (edfct->dp_y==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #if !defined(_ZOS_) if (ADOLC_EXT_POINTER_Y==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #endif } arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_for; for (loop=0; loopdp_x_changes) { IF_KEEP_WRITE_TAYLOR(arg, keep, k, p); } edfct->dp_x[loop]=dp_T0[arg]; #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS(ADOLC_EXT_POINTER_X[loop],TAYLOR_BUFFER[arg]); #endif ++arg; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_for; for (loop=0; loopdp_y_priorRequired) { IF_KEEP_WRITE_TAYLOR(arg, keep, k, p); } edfct->dp_y[loop]=dp_T0[arg]; #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS(ADOLC_EXT_POINTER_Y[loop],TAYLOR_BUFFER[arg]); #endif ++arg; } ext_retc = edfct->ADOLC_EXT_FCT_COMPLETE; MINDEC(ret_c, ext_retc); res = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_for; for (loop=0; loopdp_x[loop]; #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS_BACK(ADOLC_EXT_POINTER_X[loop],TAYLOR_BUFFER[res]); #endif ++res; } res = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_for; for (loop=0; loopdp_y[loop]; #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS_BACK(ADOLC_EXT_POINTER_Y[loop],TAYLOR_BUFFER[res]); #endif ++res; } break; case ext_diff_iArr: /* extern differntiated function */ iArrLength=get_locint_f(); iArr=malloc(iArrLength*sizeof(int)); for (loop=0;loopADOLC_EXT_FCT_IARR_POINTER==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_DIFFFUNC); if (n>0) { if (edfct->dp_x==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #if !defined(_ZOS_) if (ADOLC_EXT_POINTER_X==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #endif } if (m>0) { if (edfct->dp_y==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #if !defined(_ZOS_) if (ADOLC_EXT_POINTER_Y==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #endif } arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_for; for (loop=0; loopdp_x_changes) { IF_KEEP_WRITE_TAYLOR(arg, keep, k, p); } edfct->dp_x[loop]=dp_T0[arg]; #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS(ADOLC_EXT_POINTER_X[loop],TAYLOR_BUFFER[arg]); #endif ++arg; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_for; for (loop=0; loopdp_y_priorRequired) { IF_KEEP_WRITE_TAYLOR(arg, keep, k, p); } edfct->dp_y[loop]=dp_T0[arg]; #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS(ADOLC_EXT_POINTER_Y[loop],TAYLOR_BUFFER[arg]); #endif ++arg; } ext_retc = edfct->ADOLC_EXT_FCT_IARR_COMPLETE; MINDEC(ret_c, ext_retc); res = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_for; for (loop=0; loopdp_x[loop]; #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS_BACK(ADOLC_EXT_POINTER_X[loop],TAYLOR_BUFFER[res]); #endif ++res; } res = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_for; for (loop=0; loopdp_y[loop]; #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS_BACK(ADOLC_EXT_POINTER_Y[loop],TAYLOR_BUFFER[res]); #endif ++res; } free((void*)iArr); iArr=0; break; case ext_diff_v2: ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index=get_locint_f(); iArrLength = get_locint_f(); iArr = malloc(iArrLength*sizeof(int)); for (loop=0;loopADOLC_EXT_FCT_POINTER==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_DIFFFUNC); if (nin>0) { if (edfct2->x == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #if !defined(_ZOS_) if (ADOLC_EXT_V2_POINTER_X==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #endif } if (nout>0) { if (edfct2->y == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #if !defined(_ZOS_) if (ADOLC_EXT_V2_POINTER_Y == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); #endif } for(oloop=0;oloopx[oloop][0],&dp_T0[arg],insz[oloop]*sizeof(double)); for(loop=0;loopdp_x_changes) { IF_KEEP_WRITE_TAYLOR(arg,keep,k,p); } #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS(ADOLC_EXT_V2_POINTER_X[oloop][loop],TAYLOR_BUFFER[arg]); #endif ++arg; } } for(oloop=0;oloopy[oloop][0],&dp_T0[arg],outsz[oloop]*sizeof(double)); for(loop=0;loopdp_y_priorRequired) { IF_KEEP_WRITE_TAYLOR(arg,keep,k,p); } #if !defined(_ZOS_) ADOLC_EXT_COPY_TAYLORS(ADOLC_EXT_V2_POINTER_Y[oloop][loop],TAYLOR_BUFFER[arg]); #endif ++arg; } } ext_retc = edfct2->ADOLC_EXT_FCT_V2_COMPLETE; MINDEC(ret_c,ext_retc); for(oloop=0;oloopx[oloop][0],insz[oloop]*sizeof(double)); #if !defined(_ZOS_) for(loop=0;loopy[oloop][0],outsz[oloop]*sizeof(double)); #if !defined(_ZOS_) for(loop=0;loop 0) printf("operation %3d: %6d time(s) - %6d taylors written (%10.2f per operation)\n", v, countPerOperation[v], taylorPerOperation[v], (double)taylorPerOperation[v] / (double)countPerOperation[v]); printf("\n"); #endif /* ADOLC_DEBUG */ #if defined(_KEEP_) if (keep) taylor_close(taylbuf); #endif /* clean up */ #if !defined (_NTIGHT_) free(dp_T0); #endif /* !_NTIGHT_ */ #if !defined(_INDO_) #if !defined(_ZOS_) # if defined(_FOS_) free(dp_T); # else #if !defined (_INT_FOR_) myfree2(dpp_T); free(dp_Ttemp); #endif /* !_NTIGHT_ */ #endif #endif #endif #if defined(_HIGHER_ORDER_) free(dp_z); #endif ADOLC_CURRENT_TAPE_INFOS.workMode = ADOLC_NO_MODE; end_sweep(); #if defined(_INDO_) #if defined(_INDOPRO_) for(i=0;ientry; temp1 = temp->left; free(temp); temp = temp1; } } free(sod); free(nonl_dom); free(fod); free(arg_index); #endif #if defined(_NONLIND_OLD_) for( i=0; i < indcheck; i++) { crs[i] = (unsigned int*) malloc(sizeof(unsigned int) * (nonl_dom[i][0]+1)); crs[i][0] = nonl_dom[i][0]; for(l=1; l < crs[i][0]+1; l++) crs[i][l] = nonl_dom[i][l+1]; free(nonl_dom[i]); } free(nonl_dom); #endif #endif return ret_c; } /****************************************************************************/ #if defined(_ZOS_) && defined(_ABS_NORM_) int get_num_switches(short tapeID) { int nswitch; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; init_for_sweep(tapeID); if (!ADOLC_CURRENT_TAPE_INFOS.stats[NO_MIN_MAX]) { fprintf(DIAG_OUT,"ADOL-C error: tape %d was not created compatible " "with %s\n Please call enableMinMaxUsingAbs() " "before trace_on(%d)\n", tapeID, __FUNCTION__, tapeID); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } nswitch = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_SWITCHES]; end_sweep(); return nswitch; } #endif #if defined(_ABS_NORM_) && defined(_FOV_) short firstsign(int p, double *u, double* du) { int i=0; short tmp; tmp=((*u)>1e-12)?1.0:(((*u)<-1e-12)?-1.0:0.0); while(i

0.0)?1.0:((du[i]<0.0)?-1.0:0.0); i++; } return tmp; } #elif defined(_ABS_NORM_SIG_) && defined(_FOV_) short ext_firstsign(double sigbase, double sigdir, int p, double *u, double* du) { if (sigbase == 0 && sigdir > 0) { du[0] = fmax(0,du[0]); *u = 0; } else if (sigbase == 0 && sigdir < 0) { du[0] = fmin(0,du[0]); *u =0; } else if (sigbase == 0 && sigdir == 0) { du[0] = 0; *u = 0; } return firstsign(p,u,du); } short ext_firstsign2(double sigbase, int p, double *u, double* du) { if (sigbase == 0) *u=0; return firstsign(p,u,du); } #endif /****************************************************************************/ #if defined(_INDOPRO_) && !defined(_NONLIND_OLD_) /****************************************************************************/ /* set operations for propagation of index domains */ /*--------------------------------------------------------------------------*/ /* operations on index domains */ #if defined(_TIGHT_) void copy_index_domain(int res, int arg, locint **ind_dom) { int i; if (ind_dom[arg][0] > ind_dom[res][1]) { free(ind_dom[res]); ind_dom[res] = (locint *) malloc(sizeof(locint) * 2*(ind_dom[arg][0]+1)); ind_dom[res][1] = 2*ind_dom[arg][0]; } for(i=2;ileft != NULL) { free_tree(tree->left,num); } if (tree->right != NULL) { free_tree(tree->right,num); } { if (tree->entry == num) free(tree); } } void traverse_crs(IndexElement* tree, IndexElement_sod* sod, int num) { IndexElement_sod *temp, *temp1; if (tree->left != NULL) { traverse_crs(tree->left, sod, num); } if (tree->right != NULL) { traverse_crs(tree->right, sod, num); } if (tree->entry < num) { temp = sod->left; if (temp == NULL) { temp = (struct IndexElement_sod*) malloc(sizeof(struct IndexElement_sod)); temp->left = NULL; temp->entry = tree->entry; sod->entry++; sod->left=temp; } else { while ((temp->entry < tree->entry) && (temp->left != NULL)) { temp1 = temp; temp = temp->left; } if (temp->left == NULL) { if(temp->entry < tree->entry) { temp->left = (struct IndexElement_sod*) malloc(sizeof(struct IndexElement_sod)); temp = temp->left; temp->left = NULL; temp->entry = tree->entry; sod->entry++; } if(temp->entry > tree->entry) { temp->left = (struct IndexElement_sod*) malloc(sizeof(struct IndexElement_sod)); temp->left->entry = temp->entry; temp->left->left = NULL; temp->entry = tree->entry; sod->entry++; } } else { if (temp->entry > tree->entry) { temp1 = (struct IndexElement_sod*) malloc(sizeof(struct IndexElement_sod)); temp1->left = temp->left; temp1->entry = temp->entry; temp->entry = tree->entry; temp->left=temp1; sod->entry++; } } } } } void traverse_unary(IndexElement* tree, IndexElement* nonl_dom, IndexElement* fodi, int num, int maxopind) { IndexElement *temp; if (tree->left != NULL) { traverse_unary(tree->left, nonl_dom, fodi, num, maxopind); if (tree->right != NULL) { traverse_unary(tree->right, nonl_dom, fodi, num, maxopind); } } else { if(tree->entryright = fodi; temp->left = nonl_dom[tree->entry].left; temp->entry= num; nonl_dom[tree->entry].left = temp; } } } #endif #endif #if defined(_NONLIND_OLD_) #if defined(_TIGHT_) void extend_nonlinearity_domain_binary_step (int arg1, int arg2, locint **ind_dom, locint **nonl_dom) { int index,num,num1, num2, i,j,k,l,m; locint *temp_nonl, *index_nonl_dom; num = ind_dom[arg2][0]; for(m=2;m num2) num2 = num1+num; temp_nonl = (locint*) malloc(sizeof(locint)*(num2+2)); temp_nonl[1] = num2; i = 2; k = 2; j = 2; num1 +=2; num2 = num+2; while ((i #undef _HOS_OV_ ADOL-C-2.6.3/ADOL-C/src/indopro_forward_pl.c0000644000175200017520000000136212427131452016615 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: indopro_forward_pl.c Revision: $Id$ Contents: indopro_forward_pl (index domains abs-normal forward mode) Copyright (c) Kshitij Kulshrestha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _INDOPRO_ 1 #define _NTIGHT_ 1 #define _ABS_NORM_ 1 #include #undef _ABS_NORM_ #undef _NTIGHT_ #undef _INDOPRO_ #undef _INDO_ ADOL-C-2.6.3/ADOL-C/src/oplate.h0000644000175200017520000000526312500402400014203 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: oplate.h Revision: $Id: oplate.h 600 2015-03-12 21:28:32Z kulshres $ Contents: Numeric values for the various opcodes used by ADOL-C. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_OPLATE_P_H) #define ADOLC_OPLATE_P_H 1 /****************************************************************************/ /* opcodes */ enum OPCODES { death_not = 0, assign_ind, assign_dep, assign_a, assign_d, eq_plus_d, eq_plus_a, eq_min_d, eq_min_a, eq_mult_d, eq_mult_a, plus_a_a, plus_d_a, min_a_a, min_d_a, mult_a_a, mult_d_a, div_a_a, div_d_a, exp_op, cos_op, sin_op, atan_op, log_op, pow_op, asin_op, acos_op, sqrt_op, asinh_op, acosh_op, atanh_op, gen_quad, end_of_tape, start_of_tape, end_of_op, end_of_int, end_of_val, cond_assign, cond_assign_s, take_stock_op, assign_d_one, assign_d_zero, incr_a, decr_a, neg_sign_a, pos_sign_a, min_op, abs_val, eq_zero, neq_zero, le_zero, gt_zero, ge_zero, lt_zero, eq_plus_prod, eq_min_prod, erf_op, ceil_op, floor_op, ext_diff, ext_diff_iArr, ignore_me, ext_diff_v2, subscript = 80, subscript_ref, ref_assign_d_zero, ref_assign_d_one, ref_assign_d, ref_assign_a, ref_assign_ind, ref_incr_a, ref_decr_a, ref_eq_plus_d, ref_eq_min_d, ref_eq_plus_a, ref_eq_min_a, ref_eq_mult_d, ref_eq_mult_a, ref_copyout, ref_cond_assign, ref_cond_assign_s, assign_p = 98, eq_plus_p, eq_min_p, eq_mult_p, ref_assign_p, ref_eq_plus_p, ref_eq_min_p, ref_eq_mult_p, plus_a_p, min_a_p, mult_a_p, div_p_a, pow_op_p, neg_sign_p, recipr_p, vec_copy, vec_dot, vec_axpy, eq_a_p = 119, neq_a_p, le_a_p, gt_a_p, ge_a_p, lt_a_p, eq_a_a = 125, neq_a_a, le_a_a, gt_a_a, ge_a_a, lt_a_a, ampi_send = 131, ampi_recv, ampi_isend, ampi_irecv, ampi_wait, ampi_barrier, ampi_gather, ampi_scatter, ampi_allgather, ampi_gatherv, ampi_scatterv, ampi_allgatherv, ampi_bcast, ampi_reduce, ampi_allreduce }; /****************************************************************************/ #endif ADOL-C-2.6.3/ADOL-C/src/interfacesf.c0000644000175200017520000001537112625322020015213 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: interfacesf.c Revision: $Id: interfacesf.c 638 2015-11-25 12:05:36Z kulshres $ Contents: Genuine Fortran callable C Interfaces to ADOL-C forward & reverse calls. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include BEGIN_C_DECLS /*--------------------------------------------------------------------------*/ fint hos_forward_(fint* ftag, fint* fm, fint* fn, fint* fd, fint* fk, fdouble* fbase, fdouble* fx, fdouble* fvalue, fdouble* fy) { int rc= -1; int tag=*ftag, m=*fm, n=*fn, d=*fd, k=*fk; double* base = myalloc1(n); double* value = myalloc1(m); double** X = myalloc2(n,d); double** Y = myalloc2(m,d); spread1(n,fbase,base); spread2(n,d,fx,X); rc= hos_forward(tag,m,n,d,k,base,X,value,Y); pack2(m,d,Y,fy); pack1(m,value,fvalue); myfree2(X); myfree2(Y); myfree1(base); myfree1(value); return rc; } /*--------------------------------------------------------------------------*/ fint zos_forward_(fint* ftag, fint* fm, fint* fn, fint* fk, fdouble* fbase, fdouble* fvalue) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, k=*fk; double* base=myalloc1(n); double* value = myalloc1(m); spread1(n,fbase,base); rc=zos_forward(tag,m,n,k,base,value); pack1(m,value,fvalue); myfree1(base); myfree1(value); return rc; } /*--------------------------------------------------------------------------*/ fint hov_forward_(fint* ftag, fint* fm, fint* fn, fint* fd, fint* fp, fdouble* fbase, fdouble* fx, fdouble* fvalue, fdouble* fy) { int rc= -1; int tag=*ftag, m=*fm, n=*fn, d=*fd, p=*fp; double* base = myalloc1(n); double* value = myalloc1(m); double*** X = myalloc3(n,p,d); double*** Y = myalloc3(m,p,d); spread1(n,fbase,base); spread3(n,p,d,fx,X); rc= hov_forward(tag,m,n,d,p,base,X,value,Y); pack3(m,p,d,Y,fy); pack1(m,value,fvalue); myfree3(X); myfree3(Y); myfree1(base); myfree1(value); return rc; } /*--------------------------------------------------------------------------*/ fint fov_forward_(fint* ftag, fint* fm, fint* fn, fint* fp, fdouble* fbase, fdouble* fx, fdouble* fvalue, fdouble* fy) { int rc= -1; int tag=*ftag, m=*fm, n=*fn, p=*fp; double* base = myalloc1(n); double* value = myalloc1(m); double** X = myalloc2(n,p); double** Y = myalloc2(m,p); spread1(n,fbase,base); spread2(n,p,fx,X); rc= fov_forward(tag,m,n,p,base,X,value,Y); pack2(m,p,Y,fy); pack1(m,value,fvalue); myfree2(X); myfree2(Y); myfree1(base); myfree1(value); return rc; } /*--------------------------------------------------------------------------*/ fint hos_reverse_(fint* ftag, fint* fm, fint* fn, fint* fd, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, d=*fd; double** Z = myalloc2(n,d+1); double* u = myalloc1(m); spread1(m,fu,u); rc=hos_reverse(tag,m,n,d,u,Z); pack2(n,d+1,Z,fz); myfree2(Z); myfree1(u); return rc; } /*--------------------------------------------------------------------------*/ fint hos_ti_reverse_( fint* ftag, fint* fm, fint* fn, fint* fd, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, d=*fd; double** Z = myalloc2(n,d+1); double** U = myalloc2(m,d+1); spread2(m,d+1,fu,U); rc=hos_ti_reverse(tag,m,n,d,U,Z); pack2(n,d+1,Z,fz); myfree2(Z); myfree2(U); return rc; } /*--------------------------------------------------------------------------*/ fint fos_reverse_(fint* ftag, fint* fm, fint* fn, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn; double* u = myalloc1(m); double* Z = myalloc1(n); spread1(m,fu,u); rc=fos_reverse(tag,m,n,u,Z); pack1(n,Z,fz); myfree1(Z); myfree1(u); return rc; } /*--------------------------------------------------------------------------*/ fint hov_reverse_(fint* ftag, fint* fm, fint* fn, fint* fd, fint* fq, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, d=*fd, q=*fq; double** U = myalloc2(q,m); double*** Z = myalloc3(q,n,d+1); short ** nop = 0; spread2(q,m,fu,U); rc=hov_reverse(tag,m,n,d,q,U,Z,nop); pack3(q,n,d+1,Z,fz); myfree3(Z); myfree2(U); return rc; } /*--------------------------------------------------------------------------*/ fint hov_ti_reverse_( fint* ftag, fint* fm, fint* fn, fint* fd, fint* fq, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, d=*fd, q=*fq; double*** U = myalloc3(q,m,d+1); double*** Z = myalloc3(q,n,d+1); short ** nop = 0; spread3(q,m,d+1,fu,U); rc=hov_ti_reverse(tag,m,n,d,q,U,Z,nop); pack3(q,n,d+1,Z,fz); myfree3(Z); myfree3(U); return rc; } /*--------------------------------------------------------------------------*/ fint fov_reverse_(fint* ftag, fint* fm, fint* fn, fint* fq, fdouble* fu, fdouble* fz) { int rc=-1; int tag=*ftag, m=*fm, n=*fn, q=*fq; double** U = myalloc2(q,m); double** Z = myalloc2(q,n); spread2(q,m,fu,U); rc=fov_reverse(tag,m,n,q,U,Z); pack2(q,n,Z,fz); myfree2(Z); myfree2(U); return rc; } /****************************************************************************/ /* THAT'S ALL */ END_C_DECLS ADOL-C-2.6.3/ADOL-C/src/rpl_malloc.h0000644000175200017520000000471612564725026015073 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: malloc.h Revision: $Id: rpl_malloc.h 617 2015-08-18 21:56:38Z kulshres $ Contents: malloc replacements for not gnu compatible malloc system functions Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_MALLOC_H) # define ADOLC_MALLOC_H 1 # if defined(ADOLC_INTERNAL) # if defined(HAVE_CONFIG_H) # include "config.h" # undef ADOLC_NO_MALLOC # undef ADOLC_NO_REALLOC # if !defined(HAVE_MALLOC) # define ADOLC_NO_MALLOC 1 # else # if (HAVE_MALLOC == 0) # define ADOLC_NO_MALLOC 1 # endif /* HAVE_MALLOC == 0 */ # endif /* HAVE_MALLOC */ # if !defined(HAVE_REALLOC) # define ADOLC_NO_REALLOC 1 # else # if (HAVE_REALLOC == 0) # define ADOLC_NO_REALLOC 1 # endif /* HAVE_REALLOC == 0 */ # endif /* HAVE_REALLOC */ # if defined(ADOLC_NO_MALLOC) # include # if defined(__cplusplus) extern "C" { # endif /* __cplusplus */ # undef rpl_malloc # undef rpl_calloc extern void *rpl_malloc(size_t); extern void *rpl_calloc(size_t, size_t); # if defined(__cplusplus) } # endif /* __cplusplus */ # endif /* ADOLC_NO_MALLOC */ # if defined(ADOLC_NO_REALLOC) # include # if defined(__cplusplus) extern "C" { # endif /* __cplusplus */ # undef rpl_realloc extern void *rpl_realloc(void *, size_t); # if defined(__cplusplus) } # endif /* __cplusplus */ # endif /* ADOLC_NO_REALLOC */ # endif /* HAVE_CONFIG_H */ # endif /* ADOLC_INTERNAL */ #endif /* ADOLC_MALLOC_H */ ADOL-C-2.6.3/ADOL-C/src/zos_pl_forward.c0000644000175200017520000000130212426144722015753 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: zos_an_forward.c Revision: $Id$ Contents: zos_forward (zero-order-scalar abs-normal forward mode) Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _ZOS_ 1 #define _KEEP_ 1 #define _ABS_NORM_ 1 #include #undef _ABS_NORM_ #undef _KEEP_ #undef _ZOS_ ADOL-C-2.6.3/ADOL-C/src/tape_handling.cpp0000644000175200017520000015633312672541240016074 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: tape_handling.cpp Revision: $Id: tape_handling.cpp 683 2016-03-17 14:43:44Z kulshres $ Contents: management of tape infos Copyright (c) Andreas Kowarz, Andrea Walther, Kshitij Kulshreshtha, Benjamin Letschert, Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include "taping_p.h" #include "checkpointing_p.h" #include "dvlparms.h" #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include #include using namespace std; #ifdef SPARSE BEGIN_C_DECLS extern void freeSparseJacInfos(double *y, double **B, unsigned int **JP, void *g, void *jr1d, int seed_rows, int seed_clms, int depen); extern void freeSparseHessInfos(double **Hcomp, double ***Xppp, double ***Yppp, double ***Zppp, double **Upp, unsigned int **HP, void *g, void *hr, int p, int indep); END_C_DECLS #endif GlobalTapeVarsCL::GlobalTapeVarsCL() { store = NULL; storeSize = 0; numLives = 0; nominmaxFlag = 0; pStore = NULL; numparam = 0; maxparam = 0; initialStoreSize = 0; storeManagerPtr = new StoreManagerLocintBlock(store, storeSize, numLives); paramStoreMgrPtr = new StoreManagerLocintBlock(pStore, maxparam, numparam); } GlobalTapeVarsCL::~GlobalTapeVarsCL() { if (storeManagerPtr != NULL) { delete storeManagerPtr; storeManagerPtr = NULL; } if (paramStoreMgrPtr != NULL) { delete paramStoreMgrPtr; paramStoreMgrPtr = NULL; } } const GlobalTapeVarsCL& GlobalTapeVarsCL::operator=(const GlobalTapeVarsCL& gtv) { storeSize = gtv.storeSize; numLives = gtv.numLives; maxLoc = gtv.maxLoc; operationBufferSize = gtv.operationBufferSize; locationBufferSize = gtv.locationBufferSize; valueBufferSize = gtv.valueBufferSize; taylorBufferSize = gtv.taylorBufferSize; maxNumberTaylorBuffers = gtv.maxNumberTaylorBuffers; inParallelRegion = gtv.inParallelRegion; newTape = gtv.newTape; branchSwitchWarning = gtv.branchSwitchWarning; currentTapeInfosPtr = gtv.currentTapeInfosPtr; initialStoreSize = gtv.initialStoreSize; store = new double[storeSize]; memcpy(store, gtv.store, storeSize*sizeof(double)); storeManagerPtr = new StoreManagerLocintBlock( dynamic_cast(gtv.storeManagerPtr), store, storeSize, numLives); paramStoreMgrPtr = new StoreManagerLocintBlock( dynamic_cast(gtv.paramStoreMgrPtr), pStore, maxparam, numparam); return *this; } StoreManagerLocint::StoreManagerLocint(double * &storePtr, size_t &size, size_t &numlives) : storePtr(storePtr), indexFree(0), head(0), maxsize(size), currentfill(numlives) { #ifdef ADOLC_DEBUG std::cerr << "StoreManagerInteger::StoreManagerInteger()\n"; #endif } StoreManagerLocint::~StoreManagerLocint() { #ifdef ADOLC_DEBUG std::cerr << "StoreManagerInteger::~StoreManagerInteger()\n"; #endif if (storePtr) { delete[] storePtr; storePtr = 0; } if (indexFree) { delete[] indexFree; indexFree = 0; } maxsize = 0; currentfill = 0; head = 0; } StoreManagerLocint::StoreManagerLocint(const StoreManagerLocint *const stm, double * &storePtr, size_t &size, size_t &numlives) : storePtr(storePtr), maxsize(size), currentfill(numlives) { #ifdef ADOLC_DEBUG std::cerr << "StoreManagerInteger::StoreManagerInteger()\n"; #endif head = stm->head; indexFree = new locint[maxsize]; for (size_t i = 0; i < maxsize; i++) indexFree[i] = stm->indexFree[i]; } locint StoreManagerLocint::next_loc() { if (head == 0) { grow(); } assert(head); locint const result = head; head = indexFree[head]; ++currentfill; #ifdef ADOLC_DEBUG std::cerr << "next_loc: " << result << " fill: " << size() << "max: " << maxSize() << endl; #endif return result; } void StoreManagerLocint::free_loc(locint loc) { assert(0 < loc && loc < maxsize); indexFree[loc] = head; head = loc; --currentfill; #ifdef ADOLC_DEBUG std::cerr << "free_loc: " << loc << " fill: " << size() << "max: " << maxSize() << endl; #endif } void StoreManagerLocint::grow(size_t mingrow) { if (maxsize == 0) maxsize += initialSize; size_t const oldMaxsize = maxsize; maxsize *= 2; if (maxsize < mingrow) maxsize = mingrow; if (maxsize > std::numeric_limits::max()) { // encapsulate this error message fprintf(DIAG_OUT,"\nADOL-C error:\n"); fprintf(DIAG_OUT,"maximal number (%d) of live active variables exceeded\n\n", std::numeric_limits::max()); adolc_exit(-3,"",__func__,__FILE__,__LINE__); } #ifdef ADOLC_DEBUG std::cerr << "StoreManagerInteger::grow(): increase size from " << oldMaxsize << " to " << maxsize << " entries (currently " << size() << " entries used)\n"; assert(oldMaxsize == initialSize or size() == oldMaxsize); #endif double *const oldStore = storePtr; locint *const oldIndex = indexFree; #if defined(ADOLC_DEBUG) std::cerr << "StoreManagerInteger::grow(): allocate " << maxsize * sizeof(double) << " B doubles " << "and " << maxsize * sizeof(locint) << " B locints\n"; #endif storePtr = new double[maxsize]; indexFree = new locint[maxsize]; // we use index 0 as end-of-list marker size_t i = 1; storePtr[0] = std::numeric_limits::quiet_NaN(); if (oldMaxsize != initialSize) { // not the first time #if defined(ADOLC_DEBUG) std::cerr << "StoreManagerInteger::grow(): copy values\n"; #endif for (size_t j = i; j < oldMaxsize; ++j) { indexFree[j] = oldIndex[j]; } for (size_t j = i; j < oldMaxsize; ++j) { storePtr[j] = oldStore[j]; } // reset i to start of new slots (upper half) i = oldMaxsize; #if defined(ADOLC_DEBUG) std::cerr << "StoreManagerInteger::grow(): free " << oldMaxsize * sizeof(double) << " + " << oldMaxsize * sizeof(locint) << " B\n"; #endif delete [] oldStore; delete [] oldIndex; } head = i; // create initial linked list for new slots for ( ; i < maxsize-1; ++i) { indexFree[i] = i + 1; } indexFree[i] = 0; // end marker assert(i == maxsize-1); } /****************************************************************************/ /* Returns the next free location in "adouble" memory. */ /****************************************************************************/ locint next_loc() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr->next_loc(); } /****************************************************************************/ /* frees the specified location in "adouble" memory */ /****************************************************************************/ void free_loc(locint loc) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr->free_loc(loc); } /* vector of tape infos for all tapes in use */ vector ADOLC_TAPE_INFOS_BUFFER_DECL; /* stack of pointers to tape infos * represents the order of tape usage when doing nested taping */ stack ADOLC_TAPE_STACK_DECL; /* the main tape info buffer and its fallback */ TapeInfos ADOLC_CURRENT_TAPE_INFOS_DECL; TapeInfos ADOLC_CURRENT_TAPE_INFOS_FALLBACK_DECL; /* global tapeing variables */ GlobalTapeVars ADOLC_GLOBAL_TAPE_VARS_DECL; #if defined(_OPENMP) static vector *tapeInfosBuffer_s; static stack *tapeStack_s; static TapeInfos *currentTapeInfos_s; static TapeInfos *currentTapeInfos_fallBack_s; static GlobalTapeVars *globalTapeVars_s; static ADOLC_BUFFER_TYPE *ADOLC_extDiffFctsBuffer_s; static stack *ADOLC_checkpointsStack_s; static revolve_nums *revolve_numbers_s; static vector *tapeInfosBuffer_p; static stack *tapeStack_p; static TapeInfos *currentTapeInfos_p; static TapeInfos *currentTapeInfos_fallBack_p; static GlobalTapeVars *globalTapeVars_p; static ADOLC_BUFFER_TYPE *ADOLC_extDiffFctsBuffer_p; static stack *ADOLC_checkpointsStack_p; static revolve_nums *revolve_numbers_p; #endif /*--------------------------------------------------------------------------*/ /* This function sets the flag "newTape" if either a taylor buffer has been */ /* created or a taping process has been performed. Calling the function is */ /* also useful to "convince" the linker of including the cleaner part into */ /* the binary when linking statically! */ /*--------------------------------------------------------------------------*/ void markNewTape() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.newTape = 1; } /* inits the struct for the new tape */ void initTapeInfos(TapeInfos *newTapeInfos) { char *ptr, *end; ptr = (char *)(&newTapeInfos->tapeID); end = (char *)(&newTapeInfos->pTapeInfos); for ( ; ptr != end ; ptr++ ) *ptr = 0; } /* as above but keep allocated buffers if possible */ void initTapeInfos_keep(TapeInfos *newTapeInfos) { unsigned char *opBuffer = newTapeInfos->opBuffer; locint *locBuffer = newTapeInfos->locBuffer; double *valBuffer = newTapeInfos->valBuffer; revreal *tayBuffer = newTapeInfos->tayBuffer; double *signature = newTapeInfos->signature; FILE *tay_file = newTapeInfos->tay_file; initTapeInfos(newTapeInfos); newTapeInfos->opBuffer = opBuffer; newTapeInfos->locBuffer = locBuffer; newTapeInfos->valBuffer = valBuffer; newTapeInfos->tayBuffer = tayBuffer; newTapeInfos->signature = signature; newTapeInfos->tay_file = tay_file; } /* inits a new tape and updates the tape stack (called from start_trace) * - returns 0 without error * - returns 1 if tapeID was already/still in use */ int initNewTape(short tapeID) { TapeInfos *newTapeInfos = NULL; bool newTI = false; int retval = 0; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if tape is in use */ vector::iterator tiIter; if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID==tapeID) { newTapeInfos=*tiIter; if ((*tiIter)->inUse != 0) { if ((*tiIter)->tapingComplete == 0) fail(ADOLC_TAPING_TAPE_STILL_IN_USE); if ( (*tiIter)->stats[OP_FILE_ACCESS] == 0 && (*tiIter)->stats[LOC_FILE_ACCESS] == 0 && (*tiIter)->stats[VAL_FILE_ACCESS] == 0 ) { # if defined(ADOLC_DEBUG) fprintf(DIAG_OUT, "\nADOL-C warning: Tape %d existed in main memory" " only and gets overwritten!\n\n", tapeID); # endif /* free associated resources */ retval = 1; } } if ((*tiIter)->tay_file != NULL) rewind((*tiIter)->tay_file); initTapeInfos_keep(*tiIter); (*tiIter)->tapeID = tapeID; #ifdef SPARSE freeSparseJacInfos(newTapeInfos->pTapeInfos.sJinfos.y, newTapeInfos->pTapeInfos.sJinfos.B, newTapeInfos->pTapeInfos.sJinfos.JP, newTapeInfos->pTapeInfos.sJinfos.g, newTapeInfos->pTapeInfos.sJinfos.jr1d, newTapeInfos->pTapeInfos.sJinfos.seed_rows, newTapeInfos->pTapeInfos.sJinfos.seed_clms, newTapeInfos->pTapeInfos.sJinfos.depen); freeSparseHessInfos(newTapeInfos->pTapeInfos.sHinfos.Hcomp, newTapeInfos->pTapeInfos.sHinfos.Xppp, newTapeInfos->pTapeInfos.sHinfos.Yppp, newTapeInfos->pTapeInfos.sHinfos.Zppp, newTapeInfos->pTapeInfos.sHinfos.Upp, newTapeInfos->pTapeInfos.sHinfos.HP, newTapeInfos->pTapeInfos.sHinfos.g, newTapeInfos->pTapeInfos.sHinfos.hr, newTapeInfos->pTapeInfos.sHinfos.p, newTapeInfos->pTapeInfos.sHinfos.indep); newTapeInfos->pTapeInfos.sJinfos.B=NULL; newTapeInfos->pTapeInfos.sJinfos.y=NULL; newTapeInfos->pTapeInfos.sJinfos.g=NULL; newTapeInfos->pTapeInfos.sJinfos.jr1d=NULL; newTapeInfos->pTapeInfos.sJinfos.Seed=NULL; newTapeInfos->pTapeInfos.sJinfos.JP=NULL; newTapeInfos->pTapeInfos.sJinfos.depen=0; newTapeInfos->pTapeInfos.sJinfos.nnz_in=0; newTapeInfos->pTapeInfos.sJinfos.seed_rows=0; newTapeInfos->pTapeInfos.sJinfos.seed_clms=0; newTapeInfos->pTapeInfos.sHinfos.Zppp=NULL; newTapeInfos->pTapeInfos.sHinfos.Yppp=NULL; newTapeInfos->pTapeInfos.sHinfos.Xppp=NULL; newTapeInfos->pTapeInfos.sHinfos.Upp=NULL; newTapeInfos->pTapeInfos.sHinfos.Hcomp=NULL; newTapeInfos->pTapeInfos.sHinfos.HP=NULL; newTapeInfos->pTapeInfos.sHinfos.g=NULL; newTapeInfos->pTapeInfos.sHinfos.hr=NULL; newTapeInfos->pTapeInfos.sHinfos.nnz_in=0; newTapeInfos->pTapeInfos.sHinfos.indep=0; newTapeInfos->pTapeInfos.sHinfos.p=0; #endif break; } } } /* create new info struct and initialize it */ if (newTapeInfos == NULL) { newTapeInfos = new TapeInfos(tapeID); newTI = true; } newTapeInfos->traceFlag=1; newTapeInfos->inUse=1; newTapeInfos->stats[OP_BUFFER_SIZE] = ADOLC_GLOBAL_TAPE_VARS.operationBufferSize; newTapeInfos->stats[LOC_BUFFER_SIZE] = ADOLC_GLOBAL_TAPE_VARS.locationBufferSize; newTapeInfos->stats[VAL_BUFFER_SIZE] = ADOLC_GLOBAL_TAPE_VARS.valueBufferSize; newTapeInfos->stats[TAY_BUFFER_SIZE] = ADOLC_GLOBAL_TAPE_VARS.taylorBufferSize; /* update tapeStack and save tapeInfos */ if (ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr != NULL) { ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr->copy( ADOLC_CURRENT_TAPE_INFOS); ADOLC_TAPE_STACK.push(ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr); } else { ADOLC_CURRENT_TAPE_INFOS_FALLBACK.copy( ADOLC_CURRENT_TAPE_INFOS); ADOLC_TAPE_STACK.push(&ADOLC_CURRENT_TAPE_INFOS_FALLBACK); } if (newTI) ADOLC_TAPE_INFOS_BUFFER.push_back(newTapeInfos); newTapeInfos->pTapeInfos.skipFileCleanup=0; /* set the new tape infos as current */ ADOLC_CURRENT_TAPE_INFOS.copy(*newTapeInfos); ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = newTapeInfos; return retval; } /* opens an existing tape or creates a new handle for a tape on hard disk * - called from init_for_sweep and init_rev_sweep */ void openTape(short tapeID, char mode) { TapeInfos *tempTapeInfos=NULL; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if tape information exist in memory */ vector::iterator tiIter; if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID == tapeID) { /* tape has been used before (in the current program) */ if ((*tiIter)->inUse == 0) { /* forward sweep */ if ((*tiIter)->tay_file != NULL) rewind((*tiIter)->tay_file); initTapeInfos_keep(*tiIter); (*tiIter)->traceFlag=1; (*tiIter)->tapeID = tapeID; (*tiIter)->tapingComplete = 1; (*tiIter)->inUse = 1; read_tape_stats(*tiIter); } if (ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr != NULL) { ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr->copy( ADOLC_CURRENT_TAPE_INFOS); ADOLC_TAPE_STACK.push( ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr); } else { ADOLC_CURRENT_TAPE_INFOS_FALLBACK.copy( ADOLC_CURRENT_TAPE_INFOS); ADOLC_TAPE_STACK.push(&ADOLC_CURRENT_TAPE_INFOS_FALLBACK); } ADOLC_CURRENT_TAPE_INFOS.copy(**tiIter); ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = *tiIter; return; } } } /* tapeID not used so far */ if (mode == ADOLC_REVERSE) { failAdditionalInfo1 = tapeID; fail(ADOLC_REVERSE_NO_TAYLOR_STACK); } /* create new info struct and initialize it */ tempTapeInfos = new TapeInfos(tapeID); tempTapeInfos->traceFlag=1; tempTapeInfos->inUse = 1; tempTapeInfos->tapingComplete = 1; ADOLC_TAPE_INFOS_BUFFER.push_back(tempTapeInfos); read_tape_stats(tempTapeInfos); /* update tapeStack and save tapeInfos */ if (ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr != NULL) { ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr->copy( ADOLC_CURRENT_TAPE_INFOS); ADOLC_TAPE_STACK.push(ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr); } else { ADOLC_CURRENT_TAPE_INFOS_FALLBACK.copy( ADOLC_CURRENT_TAPE_INFOS); ADOLC_TAPE_STACK.push(&ADOLC_CURRENT_TAPE_INFOS_FALLBACK); } /* set the new tape infos as current */ ADOLC_CURRENT_TAPE_INFOS.copy(*tempTapeInfos); ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = tempTapeInfos; } /* release the current tape and give control to the previous one */ void releaseTape() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* if operations, locations and constants tapes have been written and value * stack information have not been created tapeInfos are no longer needed*/ if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors == 0 && ADOLC_CURRENT_TAPE_INFOS.stats[OP_FILE_ACCESS] == 1 && ADOLC_CURRENT_TAPE_INFOS.stats[LOC_FILE_ACCESS] == 1 && ADOLC_CURRENT_TAPE_INFOS.stats[VAL_FILE_ACCESS] == 1 ) { ADOLC_CURRENT_TAPE_INFOS.inUse = 0; } ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr->copy( ADOLC_CURRENT_TAPE_INFOS); ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = ADOLC_TAPE_STACK.top(); ADOLC_CURRENT_TAPE_INFOS.copy( *ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr); ADOLC_TAPE_STACK.pop(); if (ADOLC_TAPE_STACK.empty()) ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = NULL; } /* updates the tape infos for the given ID - a tapeInfos struct is created * and registered if non is found but its state will remain "not in use" */ TapeInfos *getTapeInfos(short tapeID) { TapeInfos *tapeInfos; vector::iterator tiIter; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if TapeInfos for tapeID exist */ if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID==tapeID) { tapeInfos=*tiIter; if (tapeInfos->inUse==0) read_tape_stats(tapeInfos); return tapeInfos; } } } /* create new TapeInfos, initialize and update tapeInfosBuffer */ tapeInfos = new TapeInfos(tapeID); ADOLC_TAPE_INFOS_BUFFER.push_back(tapeInfos); tapeInfos->traceFlag=1; tapeInfos->inUse=0; tapeInfos->tapingComplete = 1; read_tape_stats(tapeInfos); return tapeInfos; } void set_nested_ctx(short tag, char nested) { TapeInfos* tiInfos = getTapeInfos(tag); tiInfos->in_nested_ctx = nested; } void cachedTraceTags(std::vector& result) { vector::const_iterator tiIter; vector::iterator tIdIter; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; result.resize(ADOLC_TAPE_INFOS_BUFFER.size()); if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for(tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(), tIdIter=result.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter, ++tIdIter) { *tIdIter = (*tiIter)->tapeID; } } } #ifdef SPARSE /* updates the tape infos on sparse Jac for the given ID */ void setTapeInfoJacSparse(short tapeID, SparseJacInfos sJinfos) { TapeInfos *tapeInfos; vector::iterator tiIter; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if TapeInfos for tapeID exist */ if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID==tapeID) { tapeInfos=*tiIter; // free memory of tape entry that had been used previously freeSparseJacInfos(tapeInfos->pTapeInfos.sJinfos.y, tapeInfos->pTapeInfos.sJinfos.B, tapeInfos->pTapeInfos.sJinfos.JP, tapeInfos->pTapeInfos.sJinfos.g, tapeInfos->pTapeInfos.sJinfos.jr1d, tapeInfos->pTapeInfos.sJinfos.seed_rows, tapeInfos->pTapeInfos.sJinfos.seed_clms, tapeInfos->pTapeInfos.sJinfos.depen); tapeInfos->pTapeInfos.sJinfos.y=sJinfos.y; tapeInfos->pTapeInfos.sJinfos.Seed=sJinfos.Seed; tapeInfos->pTapeInfos.sJinfos.B=sJinfos.B; tapeInfos->pTapeInfos.sJinfos.JP=sJinfos.JP; tapeInfos->pTapeInfos.sJinfos.depen=sJinfos.depen; tapeInfos->pTapeInfos.sJinfos.nnz_in=sJinfos.nnz_in; tapeInfos->pTapeInfos.sJinfos.seed_clms=sJinfos.seed_clms; tapeInfos->pTapeInfos.sJinfos.seed_rows=sJinfos.seed_rows; tapeInfos->pTapeInfos.sJinfos.g=sJinfos.g; tapeInfos->pTapeInfos.sJinfos.jr1d=sJinfos.jr1d; } } } } #endif #ifdef SPARSE /* updates the tape infos on sparse Hess for the given ID */ void setTapeInfoHessSparse(short tapeID, SparseHessInfos sHinfos) { TapeInfos *tapeInfos; vector::iterator tiIter; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if TapeInfos for tapeID exist */ if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter=ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter!=ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID==tapeID) { tapeInfos=*tiIter; // free memory of tape entry that had been used previously freeSparseHessInfos(tapeInfos->pTapeInfos.sHinfos.Hcomp, tapeInfos->pTapeInfos.sHinfos.Xppp, tapeInfos->pTapeInfos.sHinfos.Yppp, tapeInfos->pTapeInfos.sHinfos.Zppp, tapeInfos->pTapeInfos.sHinfos.Upp, tapeInfos->pTapeInfos.sHinfos.HP, tapeInfos->pTapeInfos.sHinfos.g, tapeInfos->pTapeInfos.sHinfos.hr, tapeInfos->pTapeInfos.sHinfos.p, tapeInfos->pTapeInfos.sHinfos.indep); tapeInfos->pTapeInfos.sHinfos.Hcomp=sHinfos.Hcomp; tapeInfos->pTapeInfos.sHinfos.Xppp=sHinfos.Xppp; tapeInfos->pTapeInfos.sHinfos.Yppp=sHinfos.Yppp; tapeInfos->pTapeInfos.sHinfos.Zppp=sHinfos.Zppp; tapeInfos->pTapeInfos.sHinfos.Upp=sHinfos.Upp; tapeInfos->pTapeInfos.sHinfos.HP=sHinfos.HP; tapeInfos->pTapeInfos.sHinfos.indep=sHinfos.indep; tapeInfos->pTapeInfos.sHinfos.nnz_in=sHinfos.nnz_in; tapeInfos->pTapeInfos.sHinfos.p=sHinfos.p; tapeInfos->pTapeInfos.sHinfos.g=sHinfos.g; tapeInfos->pTapeInfos.sHinfos.hr=sHinfos.hr; } } } } #endif void init() { ADOLC_OPENMP_THREAD_NUMBER; errno = 0; ADOLC_OPENMP_GET_THREAD_NUMBER; #if defined(_OPENMP) tapeInfosBuffer = new vector; tapeStack = new stack; currentTapeInfos = new TapeInfos; currentTapeInfos->tapingComplete = 1; currentTapeInfos_fallBack = new TapeInfos; globalTapeVars = new GlobalTapeVars; ADOLC_extDiffFctsBuffer = new ADOLC_BUFFER_TYPE; ADOLC_checkpointsStack = new stack; revolve_numbers = new revolve_nums; #endif /* _OPENMP */ ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; ADOLC_CURRENT_TAPE_INFOS.keepTaylors = 0; ADOLC_GLOBAL_TAPE_VARS.maxLoc=1; for (uint i=0; iop_file!=NULL) { fclose((*tiIter)->op_file); (*tiIter)->op_file = NULL; } if ((*tiIter)->val_file!=NULL) { fclose((*tiIter)->val_file); (*tiIter)->val_file = NULL; } if ((*tiIter)->loc_file!=NULL) { fclose((*tiIter)->loc_file); (*tiIter)->loc_file = NULL; } if ((*tiIter)->tay_file!=NULL && (*tiIter)->pTapeInfos.skipFileCleanup==0 ) { fclose((*tiIter)->tay_file); (*tiIter)->tay_file = NULL; remove((*tiIter)->pTapeInfos.tay_fileName); } if ((*tiIter)->opBuffer != NULL) { free((*tiIter)->opBuffer); (*tiIter)->opBuffer = NULL; } if ((*tiIter)->valBuffer != NULL) { free((*tiIter)->valBuffer); (*tiIter)->valBuffer = NULL; } if ((*tiIter)->locBuffer != NULL) { free((*tiIter)->locBuffer); (*tiIter)->locBuffer = NULL; } if ((*tiIter)->signature != NULL) { free((*tiIter)->signature); (*tiIter)->signature = NULL; } if ((*tiIter)->tayBuffer != NULL) { free((*tiIter)->tayBuffer); (*tiIter)->tayBuffer = NULL; } #ifdef SPARSE freeSparseJacInfos((*tiIter)->pTapeInfos.sJinfos.y, (*tiIter)->pTapeInfos.sJinfos.B, (*tiIter)->pTapeInfos.sJinfos.JP, (*tiIter)->pTapeInfos.sJinfos.g, (*tiIter)->pTapeInfos.sJinfos.jr1d, (*tiIter)->pTapeInfos.sJinfos.seed_rows, (*tiIter)->pTapeInfos.sJinfos.seed_clms, (*tiIter)->pTapeInfos.sJinfos.depen); freeSparseHessInfos((*tiIter)->pTapeInfos.sHinfos.Hcomp, (*tiIter)->pTapeInfos.sHinfos.Xppp, (*tiIter)->pTapeInfos.sHinfos.Yppp, (*tiIter)->pTapeInfos.sHinfos.Zppp, (*tiIter)->pTapeInfos.sHinfos.Upp, (*tiIter)->pTapeInfos.sHinfos.HP, (*tiIter)->pTapeInfos.sHinfos.g, (*tiIter)->pTapeInfos.sHinfos.hr, (*tiIter)->pTapeInfos.sHinfos.p, (*tiIter)->pTapeInfos.sHinfos.indep); #endif /* remove "main" tape files if not all three have been written */ int filesWritten = (*tiIter)->stats[OP_FILE_ACCESS] + (*tiIter)->stats[LOC_FILE_ACCESS] + (*tiIter)->stats[VAL_FILE_ACCESS]; if ( (filesWritten > 0) && ((*tiIter)->pTapeInfos.keepTape == 0) && (*tiIter)->pTapeInfos.skipFileCleanup==0 ) { /* try to remove all tapes (even those not written by this * run) => this ensures that there is no mixture of tapes from * different ADOLC runs */ if ( (*tiIter)->stats[OP_FILE_ACCESS] == 1 ) remove((*tiIter)->pTapeInfos.op_fileName); if ( (*tiIter)->stats[LOC_FILE_ACCESS] == 1 ) remove((*tiIter)->pTapeInfos.loc_fileName); if ( (*tiIter)->stats[VAL_FILE_ACCESS] == 1 ) remove((*tiIter)->pTapeInfos.val_fileName); } if ((*tiIter)->pTapeInfos.op_fileName != NULL) { free((*tiIter)->pTapeInfos.op_fileName); (*tiIter)->pTapeInfos.op_fileName = NULL; } if ((*tiIter)->pTapeInfos.val_fileName != NULL) { free((*tiIter)->pTapeInfos.val_fileName); (*tiIter)->pTapeInfos.val_fileName = NULL; } if ((*tiIter)->pTapeInfos.loc_fileName != NULL) { free((*tiIter)->pTapeInfos.loc_fileName); (*tiIter)->pTapeInfos.loc_fileName = NULL; } if ((*tiIter)->pTapeInfos.tay_fileName != NULL) { free((*tiIter)->pTapeInfos.tay_fileName); (*tiIter)->pTapeInfos.tay_fileName = NULL; } delete *tiIter; *tiIter = NULL; } } cp_clearStack(); if (ADOLC_GLOBAL_TAPE_VARS.store != NULL) { delete[] ADOLC_GLOBAL_TAPE_VARS.store; ADOLC_GLOBAL_TAPE_VARS.store = NULL; } if (ADOLC_GLOBAL_TAPE_VARS.pStore != NULL) { delete[] ADOLC_GLOBAL_TAPE_VARS.pStore; ADOLC_GLOBAL_TAPE_VARS.pStore = NULL; } #if defined(_OPENMP) if (ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 0) { /* cleanup on program exit */ delete revolve_numbers; delete ADOLC_checkpointsStack; delete ADOLC_extDiffFctsBuffer; delete globalTapeVars; delete currentTapeInfos; delete currentTapeInfos_fallBack; delete tapeStack; delete tapeInfosBuffer; } #endif ADOLC_OPENMP_RESTORE_THREAD_NUMBER; clearTapeBaseNames(); } int removeTape(short tapeID, short type) { TapeInfos *tapeInfos = NULL; vector::iterator tiIter; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* check if TapeInfos for tapeID exist */ if (!ADOLC_TAPE_INFOS_BUFFER.empty()) { for (tiIter = ADOLC_TAPE_INFOS_BUFFER.begin(); tiIter != ADOLC_TAPE_INFOS_BUFFER.end(); ++tiIter) { if ((*tiIter)->tapeID == tapeID) { tapeInfos = *tiIter; if (tapeInfos->tapingComplete == 0) return -1; ADOLC_TAPE_INFOS_BUFFER.erase(tiIter); break; } } } if (tapeInfos == NULL) { // might be on disk only tapeInfos = new TapeInfos(tapeID); tapeInfos->tapingComplete = 1; } freeTapeResources(tapeInfos); #ifdef SPARSE freeSparseJacInfos(tapeInfos->pTapeInfos.sJinfos.y, tapeInfos->pTapeInfos.sJinfos.B, tapeInfos->pTapeInfos.sJinfos.JP, tapeInfos->pTapeInfos.sJinfos.g, tapeInfos->pTapeInfos.sJinfos.jr1d, tapeInfos->pTapeInfos.sJinfos.seed_rows, tapeInfos->pTapeInfos.sJinfos.seed_clms, tapeInfos->pTapeInfos.sJinfos.depen); freeSparseHessInfos(tapeInfos->pTapeInfos.sHinfos.Hcomp, tapeInfos->pTapeInfos.sHinfos.Xppp, tapeInfos->pTapeInfos.sHinfos.Yppp, tapeInfos->pTapeInfos.sHinfos.Zppp, tapeInfos->pTapeInfos.sHinfos.Upp, tapeInfos->pTapeInfos.sHinfos.HP, tapeInfos->pTapeInfos.sHinfos.g, tapeInfos->pTapeInfos.sHinfos.hr, tapeInfos->pTapeInfos.sHinfos.p, tapeInfos->pTapeInfos.sHinfos.indep); #endif ADOLC_OPENMP_RESTORE_THREAD_NUMBER; if (type == ADOLC_REMOVE_COMPLETELY) { remove(tapeInfos->pTapeInfos.op_fileName); remove(tapeInfos->pTapeInfos.loc_fileName); remove(tapeInfos->pTapeInfos.val_fileName); } free(tapeInfos->pTapeInfos.op_fileName); free(tapeInfos->pTapeInfos.val_fileName); free(tapeInfos->pTapeInfos.loc_fileName); if (tapeInfos->pTapeInfos.tay_fileName != NULL) free(tapeInfos->pTapeInfos.tay_fileName); delete tapeInfos; return 0; } /****************************************************************************/ /* Initialization for the taping process. Creates buffers for this tape, */ /* sets files names, and calls appropriate setup routines. */ /****************************************************************************/ int trace_on(short tnum, int keepTaylors) { int retval = 0; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* allocate memory for TapeInfos and update tapeStack */ retval = initNewTape(tnum); ADOLC_CURRENT_TAPE_INFOS.keepTaylors=keepTaylors; ADOLC_CURRENT_TAPE_INFOS.stats[NO_MIN_MAX] = ADOLC_GLOBAL_TAPE_VARS.nominmaxFlag; if (keepTaylors!=0) ADOLC_CURRENT_TAPE_INFOS.deg_save=1; start_trace(); take_stock(); /* record all existing adoubles on the tape */ return retval; } int trace_on(short tnum, int keepTaylors, uint obs, uint lbs, uint vbs, uint tbs, int skipFileCleanup) { int retval = 0; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* allocate memory for TapeInfos and update tapeStack */ retval = initNewTape(tnum); ADOLC_CURRENT_TAPE_INFOS.stats[OP_BUFFER_SIZE] = obs; ADOLC_CURRENT_TAPE_INFOS.stats[LOC_BUFFER_SIZE] = lbs; ADOLC_CURRENT_TAPE_INFOS.stats[VAL_BUFFER_SIZE] = vbs; ADOLC_CURRENT_TAPE_INFOS.stats[TAY_BUFFER_SIZE] = tbs; ADOLC_CURRENT_TAPE_INFOS.keepTaylors=keepTaylors; ADOLC_CURRENT_TAPE_INFOS.stats[NO_MIN_MAX] = ADOLC_GLOBAL_TAPE_VARS.nominmaxFlag; ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.skipFileCleanup=skipFileCleanup; if (keepTaylors!=0) ADOLC_CURRENT_TAPE_INFOS.deg_save=1; start_trace(); take_stock(); /* record all existing adoubles on the tape */ return retval; } /****************************************************************************/ /* Stop Tracing. Cleans up, and turns off trace_flag. Flag not equal zero */ /* enforces writing of the three main tape files (op+loc+val). */ /****************************************************************************/ void trace_off(int flag) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.workMode != ADOLC_TAPING) { failAdditionalInfo1 = ADOLC_CURRENT_TAPE_INFOS.tapeID; fail(ADOLC_TAPING_NOT_ACTUALLY_TAPING); } ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.keepTape = flag; keep_stock(); /* copy remaining live variables + trace_flag = 0 */ stop_trace(flag); cout.flush(); ADOLC_CURRENT_TAPE_INFOS.tapingComplete = 1; ADOLC_CURRENT_TAPE_INFOS.workMode = ADOLC_NO_MODE; releaseTape(); } bool isTaping() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_CURRENT_TAPE_INFOS.traceFlag != 0; } void checkInitialStoreSize(GlobalTapeVars *gtv) { if (gtv->initialStoreSize > gtv->storeManagerPtr->initialSize) gtv->storeManagerPtr->grow( gtv->initialStoreSize); } /****************************************************************************/ /* A class for initialization/finalization and OpenMP handling */ /****************************************************************************/ class Keeper { public: inline Keeper() { dummy = 0; init(); readConfigFile(); } inline ~Keeper() { cleanUp(); } inline void touch() { dummy = 1; } private: int dummy; }; /* a static instance that does all work */ static Keeper theKeeper; /** * Hope to convince the linker to link the keeper code into the executable. */ void initADOLC() { theKeeper.touch(); } /****************************************************************************/ /****************************************************************************/ /* The following is necessary to provide a separate ADOL-C environment for */ /* each OpenMP worker. */ /****************************************************************************/ /****************************************************************************/ #if defined(_OPENMP) #include ADOLC_OpenMP ADOLC_OpenMP_Handler; ADOLC_OpenMP_NC ADOLC_OpenMP_Handler_NC; int ADOLC_parallel_doCopy; static bool waitForMaster_begin = true; static bool waitForMaster_end = true; static bool firstParallel = true; /****************************************************************************/ /* Used by OpenMP to create a separate environment for every worker thread. */ /****************************************************************************/ void beginParallel() { ADOLC_OPENMP_THREAD_NUMBER; #if defined(ADOLC_THREADSAVE_ERRNO) errno = omp_get_thread_num(); #endif ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_threadNumber == 0) { /* master only */ int numThreads = omp_get_num_threads(); tapeInfosBuffer_s = tapeInfosBuffer; tapeStack_s = tapeStack; currentTapeInfos_s = currentTapeInfos; currentTapeInfos_fallBack_s = currentTapeInfos_fallBack; globalTapeVars_s = globalTapeVars; ADOLC_extDiffFctsBuffer_s = ADOLC_extDiffFctsBuffer; ADOLC_checkpointsStack_s = ADOLC_checkpointsStack; revolve_numbers_s = revolve_numbers; if (firstParallel) { tapeInfosBuffer = new vector[numThreads]; tapeStack = new stack[numThreads]; currentTapeInfos = new TapeInfos[numThreads]; currentTapeInfos_fallBack = new TapeInfos[numThreads]; globalTapeVars = new GlobalTapeVars[numThreads]; ADOLC_extDiffFctsBuffer = new ADOLC_BUFFER_TYPE[numThreads]; ADOLC_checkpointsStack = new stack[numThreads]; revolve_numbers = new revolve_nums[numThreads]; } else { tapeInfosBuffer = tapeInfosBuffer_p; tapeStack = tapeStack_p; currentTapeInfos = currentTapeInfos_p; currentTapeInfos_fallBack = currentTapeInfos_fallBack_p; globalTapeVars = globalTapeVars_p; ADOLC_extDiffFctsBuffer = ADOLC_extDiffFctsBuffer_p; ADOLC_checkpointsStack = ADOLC_checkpointsStack_p; revolve_numbers = revolve_numbers_p; } /* - set inParallelRegion for tmpGlobalTapeVars because it is source * for initializing the parallel globalTapeVars structs * - inParallelRegion has to be set to one for all workers by master. * This is necessary, to deter a speedy master from assuming all * workers are done, in endParallel, before they even leaved * beginParallel. */ globalTapeVars_s[0].inParallelRegion = 1; for (int i = 0; i < numThreads; ++i) globalTapeVars[i].inParallelRegion = 1; waitForMaster_end = true; waitForMaster_begin = false; } else while (waitForMaster_begin) { usleep(1000); /* if anyone knows a better value, ... :-) */ } if (firstParallel) { ADOLC_EXT_DIFF_FCTS_BUFFER.init(init_CpInfos); /* Use assignment operator instead of open coding * this copies the store and the storemanager too */ ADOLC_GLOBAL_TAPE_VARS = *globalTapeVars_s; ADOLC_GLOBAL_TAPE_VARS.newTape = 0; ADOLC_CURRENT_TAPE_INFOS.tapingComplete = 1; ADOLC_GLOBAL_TAPE_VARS.currentTapeInfosPtr = NULL; } else { if (ADOLC_parallel_doCopy) { ADOLC_GLOBAL_TAPE_VARS.storeSize = globalTapeVars_s->storeSize; ADOLC_GLOBAL_TAPE_VARS.numLives = globalTapeVars_s->numLives; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = globalTapeVars_s->branchSwitchWarning; /* deleting the storemanager deletes the store too */ delete ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr; ADOLC_GLOBAL_TAPE_VARS.store = new double[ADOLC_GLOBAL_TAPE_VARS.storeSize]; memcpy(ADOLC_GLOBAL_TAPE_VARS.store, globalTapeVars_s->store, ADOLC_GLOBAL_TAPE_VARS.storeSize * sizeof(double)); ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr = new StoreManagerLocintBlock( dynamic_cast(globalTapeVars_s->storeManagerPtr), ADOLC_GLOBAL_TAPE_VARS.store, ADOLC_GLOBAL_TAPE_VARS.storeSize, ADOLC_GLOBAL_TAPE_VARS.numLives); } } } /****************************************************************************/ /* Used by OpenMP to destroy the separate environment of every worker. */ /****************************************************************************/ /* There are n+1 instances of ADOLC_OpenMP => n within the parallel region * and one in the serial part! */ void endParallel() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; /* do nothing if called at program exit (serial part) */ if (ADOLC_threadNumber == 0 && ADOLC_GLOBAL_TAPE_VARS.inParallelRegion == 0) return; ADOLC_GLOBAL_TAPE_VARS.inParallelRegion = 0; if (ADOLC_threadNumber == 0) { /* master only */ int num; int numThreads = omp_get_num_threads(); bool firstIt = true; do { /* wait until all slaves have left the parallel part */ if (firstIt) firstIt = false; else usleep(1000); /* no busy waiting */ num = 1; for (int i = 1; i < numThreads; ++i) if (globalTapeVars[i].inParallelRegion == 0) ++num; } while (num != numThreads); firstParallel = false; revolve_numbers_p = revolve_numbers; ADOLC_checkpointsStack_p = ADOLC_checkpointsStack; ADOLC_extDiffFctsBuffer_p = ADOLC_extDiffFctsBuffer; globalTapeVars_p = globalTapeVars; currentTapeInfos_p = currentTapeInfos; currentTapeInfos_fallBack_p = currentTapeInfos_fallBack; tapeStack_p = tapeStack; tapeInfosBuffer_p = tapeInfosBuffer; revolve_numbers = revolve_numbers_s; ADOLC_checkpointsStack = ADOLC_checkpointsStack_s; ADOLC_extDiffFctsBuffer = ADOLC_extDiffFctsBuffer_s; globalTapeVars = globalTapeVars_s; currentTapeInfos = currentTapeInfos_s; currentTapeInfos_fallBack = currentTapeInfos_fallBack_s; tapeStack = tapeStack_s; tapeInfosBuffer = tapeInfosBuffer_s; ADOLC_GLOBAL_TAPE_VARS.inParallelRegion = 0; waitForMaster_begin = true; waitForMaster_end = false; } else while (waitForMaster_end) { usleep(1000); // no busy waiting } } #endif /* _OPENMP */ TapeInfos::TapeInfos() : pTapeInfos() { initTapeInfos(this); } TapeInfos::TapeInfos(short _tapeID) : pTapeInfos() { initTapeInfos(this); tapeID = _tapeID; pTapeInfos.op_fileName = createFileName(tapeID, OPERATIONS_TAPE); pTapeInfos.loc_fileName = createFileName(tapeID, LOCATIONS_TAPE); pTapeInfos.val_fileName = createFileName(tapeID, VALUES_TAPE); pTapeInfos.tay_fileName = NULL; } void TapeInfos::copy(const TapeInfos& tInfos) { char *ptr, *end; char const* tIptr = (char const*)(&tInfos.tapeID); ptr = (char *)(&this->tapeID); end = (char *)(&this->pTapeInfos); for ( ; ptr != end ; ptr++, tIptr++ ) *ptr = *tIptr; this->pTapeInfos.copy(tInfos.pTapeInfos); } PersistantTapeInfos::PersistantTapeInfos() { char *ptr = (char*)(&forodec_nax), *end = (char*)(¶mstore); for (; ptr != end ; ptr++ ) *ptr = 0; paramstore = NULL; } void PersistantTapeInfos::copy(const PersistantTapeInfos& pTInfos) { char *ptr = (char*)(&this->forodec_nax), *end = (char*)(&this->paramstore); char const* pTIptr = (char const*)(&pTInfos.forodec_nax); for (; ptr != end ; ptr++, pTIptr++ ) *ptr = *pTIptr; paramstore = pTInfos.paramstore; } PersistantTapeInfos::~PersistantTapeInfos() { if (paramstore != NULL) { free(paramstore); paramstore = NULL; } } StoreManagerLocintBlock::StoreManagerLocintBlock(double * &storePtr, size_t &size, size_t &numlives) : storePtr(storePtr), maxsize(size), currentfill(numlives) #ifdef ADOLC_LOCDEBUG ,ensure_blockCallsSinceLastConsolidateBlocks(0) #endif { indexFree.clear(); #ifdef ADOLC_LOCDEBUG std::cerr << "StoreManagerIntegerBlock::StoreManagerIntegerBlock()\n"; #endif } StoreManagerLocintBlock::~StoreManagerLocintBlock() { #ifdef ADOLC_LOCDEBUG std::cerr << "StoreManagerIntegerBlock::~StoreManagerIntegerBlock()\n"; #endif if (storePtr != NULL) { delete[] storePtr; storePtr = NULL; } if (!indexFree.empty() ) { indexFree.clear(); } maxsize = 0; currentfill = 0; } StoreManagerLocintBlock::StoreManagerLocintBlock( const StoreManagerLocintBlock *const stm, double * &storePtr, size_t &size, size_t &numlives) : storePtr(storePtr), maxsize(size), currentfill(numlives) #ifdef ADOLC_LOCDEBUG ,ensure_blockCallsSinceLastConsolidateBlocks(0) #endif { #ifdef ADOLC_LOCDEBUG std::cerr << "StoreManagerInteger::StoreManagerInteger()\n"; #endif indexFree.clear(); forward_list::const_iterator iter = stm->indexFree.begin(); for (; iter != stm->indexFree.end(); iter++) indexFree.emplace_front( *iter ); } locint StoreManagerLocintBlock::next_loc() { if ( indexFree.empty() ) grow(); struct FreeBlock &front = indexFree.front(); locint const result = front.next; if (--front.size == 0) { if (next(indexFree.cbegin()) == indexFree.cend()) { front.next++; grow(); } else indexFree.pop_front(); } else front.next++; ++currentfill; #ifdef ADOLC_LOCDEBUG std::cerr << "StoreManagerLocintBlock::next_loc: result: " << result << " fill: " << size() << "max: " << maxSize() << endl; forward_list::iterator iter = indexFree.begin(); for( ; iter != indexFree.end(); iter++ ) std::cerr << "INDEXFELD ( " << iter->next << " , " << iter->size << ")" << endl; #endif return result; } void StoreManagerLocintBlock::ensure_block(size_t n) { bool found = false; #ifdef ADOLC_LOCDEBUG ++ensure_blockCallsSinceLastConsolidateBlocks; std::cerr << "StoreManagerLocintBlock::ensure_Block: required " << n << " ... "; std::cerr << "searching for big enough block " << endl; #endif if (maxSize()-size()>n) { if (indexFree.front().size>=n) found = true; if ((!found) && ((double(maxSize())/double(size()))>gcTriggerRatio() || maxSize()>gcTriggerMaxSize())) { consolidateBlocks(); #ifdef ADOLC_LOCDEBUG std::cerr << "ADOLC: GC called consolidateBlocks because " << maxSize() << "/" << size() << ">" << gcTriggerRatio() << " or " << maxSize() << ">" << gcTriggerMaxSize() << " after " << ensure_blockCallsSinceLastConsolidateBlocks << std::endl; ensure_blockCallsSinceLastConsolidateBlocks=0; #endif forward_list::iterator biter = indexFree.before_begin(), iter = indexFree.begin(); for (; iter != indexFree.end() ; biter++, iter++ ) { if ( iter->size >= n) { if (iter != indexFree.begin() ) { indexFree.emplace_front(*iter); indexFree.erase_after(biter); } found = true; break; } } } } if (!found) { #ifdef ADOLC_LOCDEBUG std::cerr << "no big enough block...growing " << endl; #endif grow(n); } #ifdef ADOLC_LOCDEBUG std::cerr << "StoreManagerLocintBlock::ensure_Block: " << " fill: " << size() << "max: " << maxSize() << " ensure_Block (" << n << ")" << endl; forward_list::iterator iter = indexFree.begin(); for( ; iter != indexFree.end(); iter++ ) std::cerr << "INDEXFELD ( " << iter->next << " , " << iter->size << ")" << endl; #endif } void StoreManagerLocintBlock::grow(size_t minGrow) { // first figure out what eventual size we want size_t const oldMaxsize = maxsize; if (maxsize == 0){ maxsize = initialSize; } else { maxsize *= 2; } if (minGrow > 0) { while (maxsize - oldMaxsize < minGrow) { maxsize *= 2; } } if (maxsize > std::numeric_limits::max()) { // encapsulate this error message fprintf(DIAG_OUT,"\nADOL-C error:\n"); fprintf(DIAG_OUT,"maximal number (%u) of live active variables exceeded\n\n", std::numeric_limits::max()); adolc_exit(-3,"",__func__,__FILE__,__LINE__); } #ifdef ADOLC_LOCDEBUG // index 0 is not used, means one slot less std::cerr << "StoreManagerIntegerBlock::grow(): increase size from " << oldMaxsize << " to " << maxsize << " entries (currently " << size() << " entries used)\n"; #endif double *const oldStore = storePtr; #if defined(ADOLC_LOCDEBUG) std::cerr << "StoreManagerInteger::grow(): allocate " << maxsize * sizeof(double) << " B doubles\n"; #endif storePtr = new double[maxsize]; assert(storePtr); memset(storePtr, 0, maxsize*sizeof(double)); if (oldStore != NULL) { // not the first time #if defined(ADOLC_LOCDEBUG) std::cerr << "StoreManagerInteger::grow(): copy values\n"; #endif memcpy(storePtr, oldStore, oldMaxsize*sizeof(double)); #if defined(ADOLC_LOCDEBUG) std::cerr << "StoreManagerInteger::grow(): free " << oldMaxsize * sizeof(double) << "\n"; #endif delete [] oldStore; } bool foundTail = false; forward_list::iterator biter = indexFree.before_begin(), iter = indexFree.begin(); for (; iter != indexFree.end() ; biter++,iter++ ) { if (iter->next + iter->size == oldMaxsize ) { iter->size += (maxsize - oldMaxsize); indexFree.emplace_front(*iter); indexFree.erase_after(biter); foundTail = true; break; } } if (! foundTail) { indexFree.emplace_front( #if defined(_MSC_VER) && _MSC_VER <= 1800 FreeBlock( #endif oldMaxsize,(maxsize - oldMaxsize) #if defined(_MSC_VER) && _MSC_VER <= 1800 ) #endif ); } biter = indexFree.before_begin(); iter = indexFree.begin(); while (iter != indexFree.end()) { if (iter->size == 0) { indexFree.erase_after(biter); // don't leave 0 blocks around iter = next(biter); } else { biter++; iter++; } } #ifdef ADOLC_LOCDEBUG std::cerr << "Growing:" << endl; iter = indexFree.begin(); for( ; iter != indexFree.end(); iter++ ) std::cerr << "INDEXFELD ( " << iter->next << " , " << iter->size << ")" << endl; #endif } void StoreManagerLocintBlock::free_loc(locint loc) { assert( loc < maxsize); struct FreeBlock &front = indexFree.front(); if ((loc+1 == front.next) || (front.next + front.size == loc)) { front.size++; if (loc + 1 == front.next) front.next = loc; } else { indexFree.emplace_front( #if defined(_MSC_VER) && _MSC_VER <= 1800 FreeBlock( #endif loc,1 #if defined(_MSC_VER) && _MSC_VER <= 1800 ) #endif ); } --currentfill; #ifdef ADOLC_LOCDEBUG std::cerr << "free_loc: " << loc << " fill: " << size() << "max: " << maxSize() << endl; forward_list::iterator iter = indexFree.begin(); for( ; iter != indexFree.end(); iter++ ) std::cerr << "INDEXFELD ( " << iter->next << " , " << iter->size << ")" << endl; #endif } void ensureContiguousLocations(size_t n) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr->ensure_block(n); } void setStoreManagerControl(double gcTriggerRatio, size_t gcTriggerMaxSize) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.storeManagerPtr->setStoreManagerControl(gcTriggerRatio,gcTriggerMaxSize); } void StoreManagerLocintBlock::consolidateBlocks() { indexFree.sort(); forward_list::iterator iter = indexFree.begin(), niter = iter++; while (iter != indexFree.end()) { if (niter->next + niter->size == iter->next) { niter->size += iter->size; indexFree.erase_after(niter); iter = next(niter); } else { niter++; iter++; } } #ifdef ADOLC_LOCDEBUG std::cerr << "StoreManagerLocintBlock::consolidateBlocks: " << " fill: " << size() << "max: " << maxSize() << endl; iter = indexFree.begin(); for( ; iter != indexFree.end(); iter++ ) std::cerr << "INDEXFELD ( " << iter->next << " , " << iter->size << ")" << endl; #endif } void enableMinMaxUsingAbs() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (!isTaping()) ADOLC_GLOBAL_TAPE_VARS.nominmaxFlag = 1; else fprintf(DIAG_OUT, "ADOL-C warning: " "change from native Min/Max to using Abs during tracing " "will lead to inconsistent results, not changing behaviour now\n" " " "call %s before trace_on(tape_id) for the correct behaviour\n" ,__FUNCTION__); } void disableMinMaxUsingAbs() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (!isTaping()) ADOLC_GLOBAL_TAPE_VARS.nominmaxFlag = 0; else fprintf(DIAG_OUT, "ADOL-C warning: " "change from native Min/Max to using Abs during tracing " "will lead to inconsistent results, not changing behaviour now\n" " " "call %s after trace_off() for the correct behaviour\n" ,__FUNCTION__); } class FatalError: public exception{ protected: static const int MAX_MSG_SIZE = 4*1024; char msg[MAX_MSG_SIZE]; public: explicit FatalError(int errorcode, const char* what, const char* function, const char* file, int line) { // need to use C-style functions that do not use exceptions themselves snprintf(this->msg, MAX_MSG_SIZE, "errorcode=%d function=%s file=%s line=%d what=%s", errorcode, function, file, line, what); } virtual const char* what() const throw() { return msg; } }; void adolc_exit(int errorcode, const char *what, const char* function, const char *file, int line) { throw FatalError(errorcode, what, function, file, line); } /* Only called during stop_trace() via save_params() */ void free_all_taping_params() { size_t np; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; np = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_PARAM]; while ( np > 0 ) ADOLC_GLOBAL_TAPE_VARS.paramStoreMgrPtr->free_loc(--np); } ADOL-C-2.6.3/ADOL-C/src/tapedoc/0000755000175200017520000000000013037353015014174 5ustar coincoinADOL-C-2.6.3/ADOL-C/src/tapedoc/Makefile.in0000644000175200017520000004502412562262246016255 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/src/tapedoc DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libtapedoc_la_LIBADD = am_libtapedoc_la_OBJECTS = tapedoc.lo libtapedoc_la_OBJECTS = $(am_libtapedoc_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libtapedoc_la_SOURCES) DIST_SOURCES = $(libtapedoc_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_LDFLAGS = -no-undefined AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = libtapedoc.la libtapedoc_la_SOURCES = tapedoc.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/src/tapedoc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/src/tapedoc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libtapedoc.la: $(libtapedoc_la_OBJECTS) $(libtapedoc_la_DEPENDENCIES) $(EXTRA_libtapedoc_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libtapedoc_la_OBJECTS) $(libtapedoc_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tapedoc.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/src/tapedoc/Makefile.am0000644000175200017520000000200112247105556016230 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## subdirectory tapedoc ## Revision: $Id: Makefile.am 439 2013-12-02 13:30:22Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_LDFLAGS = -no-undefined AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = libtapedoc.la libtapedoc_la_SOURCES = tapedoc.c ADOL-C-2.6.3/ADOL-C/src/tapedoc/tapedoc.c0000644000175200017520000016757612504155547016015 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: tapedoc/tapedoc.c Revision: $Id: tapedoc.c 603 2015-03-24 03:35:03Z kulshres $ Contents: Routine tape_doc(..) writes the taped operations in LaTeX-code to the file tape_doc.tex Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include "oplate.h" #include "taping_p.h" #include #include "dvlparms.h" #include #include #ifdef ADOLC_AMPI_SUPPORT #include "ampi/ampi.h" #include "ampi/tape/support.h" #endif BEGIN_C_DECLS /****************************************************************************/ /* STATIC VARIABLES */ /*--------------------------------------------------------------------------*/ static short tag; static int op_cnt; static int rev_op_cnt; static int pagelength; static FILE *fp; static char baseName[]="tape_"; static char extension[]=".tex"; /****************************************************************************/ /* LOCAL WRITE ROUTINES */ /*--------------------------------------------------------------------------*/ void filewrite_start( int opcode ) { char *fileName; int num; fileName=(char *)malloc(sizeof(char)*(9+sizeof(tag)*8+2)); if (fileName==NULL) fail(ADOLC_MALLOC_FAILED); strncpy(fileName, baseName, strlen(baseName)); num=sprintf(fileName+strlen(baseName), "%d", tag); strncpy(fileName+strlen(baseName)+num, extension, strlen(extension)); fileName[strlen(baseName)+num+strlen(extension)]=0; if ((fp = fopen(fileName,"w")) == NULL) { fprintf(DIAG_OUT,"cannot open file !\n"); adolc_exit(1,"",__func__,__FILE__,__LINE__); } free((void*)fileName); fprintf(fp,"\\documentclass{article}\n"); fprintf(fp,"\\headheight0cm\n"); fprintf(fp,"\\headsep-1cm\n"); fprintf(fp,"\\textheight25cm\n"); fprintf(fp,"\\oddsidemargin-1cm\n"); fprintf(fp,"\\topmargin0cm\n"); fprintf(fp,"\\textwidth18cm\n"); fprintf(fp,"\\begin{document}\n"); fprintf(fp,"\\tiny\n"); #ifdef ADOLC_TAPE_DOC_VALUES fprintf(fp,"\\begin{tabular}{|r|r|r|l|r|r|r|r||r|r||r|r|r|r|} \\hline \n"); fprintf(fp," & & code & op & loc & loc & loc & loc & double & double & value & value & value & value \\\\ \\hline \n"); fprintf(fp," & & %i & start of tape & & & & & & & & & & \\\\ \\hline \n",opcode); #else fprintf(fp,"\\begin{tabular}{|r|r|r|l|r|r|r|r||r|r|} \\hline \n"); fprintf(fp," & & code & op & loc & loc & loc & loc & double & double \\\\ \\hline \n"); fprintf(fp," & & %i & start of tape & & & & & & \\\\ \\hline \n",opcode); #endif pagelength = 0; } void checkPageBreak() { if (pagelength == 100) { /* 101 lines per page */ fprintf(fp,"\\end{tabular}\\\\\n"); fprintf(fp,"\\newpage\n"); #ifdef ADOLC_TAPE_DOC_VALUES fprintf(fp,"\\begin{tabular}{|r|r|r|l|r|r|r|r||r|r||r|r|r|r|} \\hline \n"); fprintf(fp," & & code & op & loc & loc & loc & loc & double & double & value & value & value & value \\\\ \\hline \n"); #else fprintf(fp,"\\begin{tabular}{|r|r|r|l|r|r|r|r||r|r|} \\hline \n"); fprintf(fp," & & code & op & loc & loc & loc & loc & double & double \\\\ \\hline \n"); #endif pagelength=-1; } } /****************************************************************************/ /* filewrite( opcode number, op name, number locations, locations, values, */ /* number constants, constants ) */ /****************************************************************************/ void filewrite( unsigned short opcode, const char* opString, int nloc, int *loc, double *val,int ncst, double* cst) { int i; checkPageBreak(); /* write opcode counters and number */ fprintf(fp,"%i & %i & %i & ",op_cnt, rev_op_cnt, opcode); /* write opcode name if available */ if (opString) fprintf(fp,"%s",opString); /* write locations (max 4) right-justified */ fprintf(fp," &"); if (opcode==ext_diff || opcode==ext_diff_iArr || opcode==ext_diff_v2) opcode = ext_diff; if (opcode!=ext_diff) { /* default */ for(i=0; i<(4-nloc); i++) fprintf(fp," &"); for(i=0; i>=) */ res = get_locint_f(); loc_a[0]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[res]; valuepoint[indexd++]=dp_T0[res]; #endif filewrite(operation,"assign dep",1,loc_a,val_a,0,cst_d); break; /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ case eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ res = get_locint_f(); coval = get_val_f(); loc_a[0] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES dp_T0[res] += coval; val_a[0] = dp_T0[res]; #endif filewrite(operation,"eq plus d",1,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res]+= dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,"eq plus a",2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_plus_prod: /* Add an product to an eq_plus_prod */ /* adouble. (+= x1*x2) */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res] += dp_T0[arg1]*dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"eq plus prod",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ res = get_locint_f(); coval = get_val_f(); loc_a[0] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES dp_T0[res] -= coval; val_a[0] = dp_T0[res]; #endif filewrite(operation,"eq min d",1,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res]-= dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,"eq min a",2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_min_prod: /* Subtract an product from an eq_min_prod */ /* adouble. (+= x1*x2) */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res] -= dp_T0[arg1]*dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"eq min prod",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ res = get_locint_f(); coval = get_val_f(); loc_a[0] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES dp_T0[res] *= coval; val_a[0] = dp_T0[res]; #endif filewrite(operation,"eq mult d",1,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res]*= dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,"eq mult a",2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case incr_a: /* Increment an adouble incr_a */ res = get_locint_f(); loc_a[0] = res; #ifdef ADOLC_TAPE_DOC_VALUES dp_T0[res]++; val_a[0] = dp_T0[res]; #endif filewrite(operation,"incr a",1,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case decr_a: /* Increment an adouble decr_a */ res = get_locint_f(); loc_a[0] = res; #ifdef ADOLC_TAPE_DOC_VALUES dp_T0[res]--; val_a[0] = dp_T0[res]; #endif filewrite(operation,"decr a",1,loc_a,val_a,0,cst_d); break; /****************************************************************************/ /* BINARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case plus_a_a: /* : Add two adoubles. (+) plus a_a */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res]=dp_T0[arg1]+dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"plus a a",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case plus_d_a: /* Add an adouble and a double plus_d_a */ /* (+) */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res]= dp_T0[arg] + coval; val_a[1]=dp_T0[res]; #endif filewrite(operation,"plus d a",2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case min_a_a: /* Subtraction of two adoubles min_a_a */ /* (-) */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res]=dp_T0[arg1]-dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"min a a",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case min_d_a: /* Subtract an adouble from a min_d_a */ /* double (-) */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0] = dp_T0[arg]; dp_T0[res] = coval - dp_T0[arg]; val_a[1] = dp_T0[res]; #endif filewrite(operation,"min d a",2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case mult_a_a: /* Multiply two adoubles (*) mult_a_a */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res]=dp_T0[arg1]*dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"mult a a",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case mult_d_a: /* Multiply an adouble by a double mult_d_a */ /* (*) */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0] = dp_T0[arg]; dp_T0[res] = coval * dp_T0[arg]; val_a[1] = dp_T0[res]; #endif filewrite(operation,"mult d a",2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case div_a_a: /* Divide an adouble by an adouble div_a_a */ /* (/) */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; val_a[1]=dp_T0[arg2]; dp_T0[res]=dp_T0[arg1]/dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"div a a",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case div_d_a: /* Division double - adouble (/) div_d_a */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0] = dp_T0[arg]; dp_T0[res] = coval / dp_T0[arg]; val_a[1] = dp_T0[res]; #endif filewrite(operation,"div d a",2,loc_a,val_a,1,cst_d); break; /****************************************************************************/ /* SIGN OPERATIONS */ /*--------------------------------------------------------------------------*/ case pos_sign_a: /* pos_sign_a */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res]= dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,"pos sign a",2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case neg_sign_a: /* neg_sign_a */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res]= -dp_T0[arg]; val_a[1]=dp_T0[res]; #endif filewrite(operation,"neg sign a",2,loc_a,val_a,0,cst_d); break; /****************************************************************************/ /* UNARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case exp_op: /* exponent operation exp_op */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res]= exp(dp_T0[arg]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[res]; #endif filewrite(operation,"exp op",2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case sin_op: /* sine operation sin_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES /* olvo 980923 changed order to allow x=sin(x) */ val_a[0]=dp_T0[arg1]; dp_T0[arg2]= cos(dp_T0[arg1]); dp_T0[res] = sin(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"sin op",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case cos_op: /* cosine operation cos_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES /* olvo 980923 changed order to allow x=cos(x) */ val_a[0]=dp_T0[arg1]; dp_T0[arg2]= sin(dp_T0[arg1]); dp_T0[res] = cos(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"cos op",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case atan_op: /* atan_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; dp_T0[res] = atan(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"atan op",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case asin_op: /* asin_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; dp_T0[res] = asin(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"asin op",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case acos_op: /* acos_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; dp_T0[res] = acos(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"acos op",3,loc_a,val_a,0,cst_d); break; #ifdef ATRIG_ERF /*--------------------------------------------------------------------------*/ case asinh_op: /* asinh_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; dp_T0[res] = asinh(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"asinh op",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case acosh_op: /* acosh_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; dp_T0[res] = acosh(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"acosh op",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case atanh_op: /* atanh_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; dp_T0[res] = atanh(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"atanh op",3,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case erf_op: /* erf_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; dp_T0[res] = erf(dp_T0[arg1]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"erf op",3,loc_a,val_a,0,cst_d); break; #endif /*--------------------------------------------------------------------------*/ case log_op: /* log_op */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res]= log(dp_T0[arg]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[res]; #endif filewrite(operation,"log op",2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case pow_op: /* pow_op */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); cst_d[0]=coval; loc_a[0]=arg; loc_a[1]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res] = pow(dp_T0[arg],coval); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[res]; #endif filewrite(operation,"pow op",2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case sqrt_op: /* sqrt_op */ arg = get_locint_f(); res = get_locint_f(); loc_a[0]=arg; loc_a[1]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; dp_T0[res]= sqrt(dp_T0[arg]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; val_a[1]=dp_T0[res]; #endif filewrite(operation,"sqrt op",2,loc_a,val_a,0,cst_d); break; /*--------------------------------------------------------------------------*/ case gen_quad: /* gen_quad */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); cst_d[0] = get_val_f(); cst_d[1] = get_val_f(); loc_a[0]=arg1; loc_a[1]=arg2; loc_a[2]=res; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg1]; dp_T0[res] = cst_d[1]; val_a[1]=dp_T0[arg2]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"gen quad",3,loc_a,val_a,2,cst_d); break; /*--------------------------------------------------------------------------*/ case min_op: /* min_op */ arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg1; loc_a[1] = arg2; loc_a[2] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0] = dp_T0[arg1]; val_a[1] = dp_T0[arg2]; if (dp_T0[arg1] > dp_T0[arg2]) dp_T0[res] = dp_T0[arg2]; else dp_T0[res] = dp_T0[arg1]; val_a[2] = dp_T0[res]; #endif filewrite(operation,"min op",3,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case abs_val: /* abs_val */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0] = dp_T0[arg]; dp_T0[res] = fabs(dp_T0[arg]); val_a[1] = dp_T0[res]; #endif filewrite(operation,"abs val",2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case ceil_op: /* ceil_op */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0] = dp_T0[arg]; dp_T0[res] = ceil(dp_T0[arg]); val_a[1] = dp_T0[res]; #endif filewrite(operation,"ceil op",2,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case floor_op: /* Compute ceil of adouble floor_op */ arg = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0] = arg; loc_a[1] = res; cst_d[0] = coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0] = dp_T0[arg]; dp_T0[res] = floor(dp_T0[arg]); val_a[1] = dp_T0[res]; #endif filewrite(operation,"floor op",2,loc_a,val_a,1,cst_d); break; /****************************************************************************/ /* CONDITIONALS */ /*--------------------------------------------------------------------------*/ case cond_assign: /* cond_assign */ arg = get_locint_f(); arg1 = get_locint_f(); arg2 = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0]=arg; loc_a[1]=arg1; loc_a[2]=arg2 ; loc_a[3]=res; cst_d[0]=coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; val_a[1]=dp_T0[arg1]; val_a[2]=dp_T0[arg2]; if (dp_T0[arg]>0) dp_T0[res]=dp_T0[arg1]; else dp_T0[res]=dp_T0[arg2]; val_a[3]=dp_T0[res]; #endif filewrite(operation,"cond assign $\\longrightarrow$",4,loc_a,val_a,1,cst_d); break; /*--------------------------------------------------------------------------*/ case cond_assign_s: /* cond_assign_s */ arg = get_locint_f(); arg1 = get_locint_f(); res = get_locint_f(); coval = get_val_f(); loc_a[0]=arg; loc_a[1]=arg1; loc_a[2]=res; cst_d[0]=coval; #ifdef ADOLC_TAPE_DOC_VALUES val_a[0]=dp_T0[arg]; val_a[1]=dp_T0[arg1]; if (dp_T0[arg]>0) dp_T0[res]=dp_T0[arg1]; val_a[2]=dp_T0[res]; #endif filewrite(operation,"cond assign s $\\longrightarrow$",3,loc_a,val_a,1,cst_d); break; case vec_copy: res = get_locint_f(); arg = get_locint_f(); size = get_locint_f(); loc_a[0] = res; loc_a[1] = arg; loc_a[2] = size; #ifdef ADOLC_TAPE_DOC_VALUES for(qq=0;qq0) { loc_a[size++] = get_locint_f(); /* rbuf loc */ TAPE_AMPI_read_int(loc_a+size++); /* rcnt */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* rtype */ } loc_a[size++]=get_locint_f(); /* buf loc */ TAPE_AMPI_read_int(loc_a+size++); /* count */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* type */ TAPE_AMPI_read_int(loc_a+size++); /* root */ TAPE_AMPI_read_MPI_Comm(&anMPI_Comm); TAPE_AMPI_read_int(loc_a+0); /* commSizeForRootOrNull */ filewrite_ampi(operation, "ampi gather",size, loc_a); break; case ampi_scatter: size=0; TAPE_AMPI_read_int(loc_a+size++); /* commSizeForRootOrNull */ if (*(loc_a+0)>0) { loc_a[size++] = get_locint_f(); /* rbuf loc */ TAPE_AMPI_read_int(loc_a+size++); /* rcnt */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* rtype */ } loc_a[size++]=get_locint_f(); /* buf loc */ TAPE_AMPI_read_int(loc_a+size++); /* count */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* type */ TAPE_AMPI_read_int(loc_a+size++); /* root */ TAPE_AMPI_read_MPI_Comm(&anMPI_Comm); TAPE_AMPI_read_int(loc_a+0); /* commSizeForRootOrNull */ filewrite_ampi(operation, "ampi scatter",size, loc_a); break; case ampi_allgather: TAPE_AMPI_read_int(loc_a+1); /* commSizeForRootOrNull */ if (*(loc_a+1)>0) { TAPE_AMPI_read_int(loc_a+2); /* rcnt */ loc_a[2] = get_locint_f(); /* rbuf loc */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* rtype */ } TAPE_AMPI_read_int(loc_a+3); /* count */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* type */ TAPE_AMPI_read_MPI_Comm(&anMPI_Comm); TAPE_AMPI_read_int(loc_a+1); /* commSizeForRootOrNull */ filewrite_ampi(operation, "ampi allgather",4, loc_a); break; case ampi_gatherv: size=0; TAPE_AMPI_read_int(loc_a+size++); /* commSizeForRootOrNull */ if (*(loc_a+0)>0) { loc_a[size++] = get_locint_f(); /* rbuf loc */ TAPE_AMPI_read_int(loc_a+size++); /* rcnt[0] */ TAPE_AMPI_read_int(loc_a+size++); /* displs[0] */ } for (l=1;l<*(loc_a+0);++l) { TAPE_AMPI_read_int(loc_a+size); TAPE_AMPI_read_int(loc_a+size); } if (*(loc_a+0)>0) { TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* rtype */ } loc_a[size++] = get_locint_f(); /* buf loc */ TAPE_AMPI_read_int(loc_a+size++); /* count */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* type */ TAPE_AMPI_read_int(loc_a+size++); /* root */ TAPE_AMPI_read_MPI_Comm(&anMPI_Comm); TAPE_AMPI_read_int(loc_a+0); /* commSizeForRootOrNull */ filewrite_ampi(operation, "ampi gatherv",size, loc_a); break; case ampi_scatterv: size=0; TAPE_AMPI_read_int(loc_a+size++); /* commSizeForRootOrNull */ if (*(loc_a+0)>0) { loc_a[size++] = get_locint_f(); /* rbuf loc */ TAPE_AMPI_read_int(loc_a+size++); /* rcnt[0] */ TAPE_AMPI_read_int(loc_a+size++); /* displs[0] */ } for (l=1;l<*(loc_a+0);++l) { TAPE_AMPI_read_int(loc_a+size); TAPE_AMPI_read_int(loc_a+size); } if (*(loc_a+0)>0) { TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* rtype */ } loc_a[size++] = get_locint_f(); /* buf loc */ TAPE_AMPI_read_int(loc_a+size++); /* count */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* type */ TAPE_AMPI_read_int(loc_a+size++); /* root */ TAPE_AMPI_read_MPI_Comm(&anMPI_Comm); TAPE_AMPI_read_int(loc_a+0); /* commSizeForRootOrNull */ filewrite_ampi(operation, "ampi scatterv",size, loc_a); break; case ampi_allgatherv: size=0; TAPE_AMPI_read_int(loc_a+size++); /* commSizeForRootOrNull */ for (l=0;l<*(loc_a);++l) { TAPE_AMPI_read_int(loc_a+size); /* rcnts */ TAPE_AMPI_read_int(loc_a+size+1); /* displs */ } if (*(loc_a)>0) { size+=2; loc_a[size++] = get_locint_f(); /* rbuf loc */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* rtype */ } loc_a[size++] = get_locint_f(); /* buf loc */ TAPE_AMPI_read_int(loc_a+size++); /* count */ TAPE_AMPI_read_MPI_Datatype(&anMPI_Datatype); /* type */ TAPE_AMPI_read_int(loc_a+size++); /* root */ TAPE_AMPI_read_MPI_Comm(&anMPI_Comm); TAPE_AMPI_read_int(loc_a); /* commSizeForRootOrNull */ filewrite_ampi(operation, "ampi allgatherv",size, loc_a); break; #endif /*--------------------------------------------------------------------------*/ default: /* default */ /* Die here, we screwed up */ fprintf(DIAG_OUT,"ADOL-C error: Fatal error in tape_doc for op %d\n", operation); break; } /* endswitch */ /* Read the next operation */ operation=get_op_f(); ++op_cnt; --rev_op_cnt; } /* endwhile */ if (operation == end_of_tape) { filewrite_end(operation); }; if (dp_T0) free(dp_T0); dp_T0 = NULL; end_sweep(); } /* end tape_doc */ /****************************************************************************/ /* THAT'S ALL */ END_C_DECLS ADOL-C-2.6.3/ADOL-C/src/adalloc.c0000644000175200017520000002206412562462432014332 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adalloc.c Revision: $Id: adalloc.c 613 2015-08-11 21:11:54Z kulshres $ Contents: C allocation of arrays of doubles in several dimensions Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include "dvlparms.h" #if !defined(ADOLC_NO_MALLOC) # define ADOLC_CALLOC(n,m) calloc(n,m) #else # define ADOLC_CALLOC(n,m) rpl_calloc(n,m) #endif #if defined(ADOLC_USE_CALLOC) # if !defined(ADOLC_NO_MALLOC) # define ADOLC_MALLOC(n,m) calloc(n,m) # else # define ADOLC_MALLOC(n,m) rpl_calloc(n,m) # endif #else # if !defined(ADOLC_NO_MALLOC) # define ADOLC_MALLOC(n,m) malloc(n*m) # else # define ADOLC_MALLOC(n,m) rpl_malloc(n*m) # endif #endif BEGIN_C_DECLS extern void adolc_exit(int errorcode, const char *what, const char* function, const char *file, int line); /****************************************************************************/ /* MEMORY MANAGEMENT UTILITIES */ /*--------------------------------------------------------------------------*/ char* populate_dpp(double ***const pointer, char *const memory, int n, int m) { char* tmp; double **tmp1; double *tmp2; int i,j; tmp = (char*) memory; tmp1 = (double**)memory; *pointer = tmp1; tmp = (char*)(tmp1+n); tmp2 = (double*)tmp; for (i=0;i0) { A=(double*)ADOLC_MALLOC(m,sizeof(double)); if (A == NULL) { fprintf(DIAG_OUT,"ADOL-C error: myalloc1 cannot allocate %zd bytes\n", (size_t)(m*sizeof(double))); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } } return A; } /*--------------------------------------------------------------------------*/ double** myalloc2(size_t m, size_t n) { double **A=NULL; if (m>0 && n>0) { int i; char *Adum = (char*)ADOLC_MALLOC(m*n*sizeof(double)+m*sizeof(double*),sizeof(char)); if (Adum == NULL) { fprintf(DIAG_OUT,"ADOL-C error: myalloc2 cannot allocate %zd bytes\n", (size_t)(m*n*sizeof(double)+m*sizeof(double*))); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } populate_dpp(&A,Adum,m,n); } return A; } /*--------------------------------------------------------------------------*/ double*** myalloc3(size_t m, size_t n, size_t p) { /* This function allocates 3-tensors contiguously */ double ***A = NULL; if (m>0 && n>0 && p > 0) { int i,j; char *Adum = (char*) ADOLC_MALLOC(m*n*p*sizeof(double)+m*n*sizeof(double*)+m*sizeof(double**),sizeof(char)); if (Adum == NULL) { fprintf(DIAG_OUT,"ADOL-C error: myalloc3 cannot allocate %zd bytes\n", (size_t)(m*n*p*sizeof(double)+m*n*sizeof(double*)+m*sizeof(double**))); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } populate_dppp(&A,Adum,m,n,p); } return A; } /*--------------------------------------------------------------------------*/ void myfree1(double *A) { if (A) free((char*) A); } /*--------------------------------------------------------------------------*/ void myfree2(double **A) { if (A) free((char*) A); } /*--------------------------------------------------------------------------*/ void myfree3(double ***A) { if (A) free((char*) A); } /****************************************************************************/ /* SPECIAL IDENTITY REPRESENTATION */ /*--------------------------------------------------------------------------*/ double **myallocI2(int n) { double *Idum = (double*)ADOLC_MALLOC((2*n-1),sizeof(double)); double **I = (double**)malloc(n*sizeof(double*)); int i; if (Idum == NULL) { fprintf(DIAG_OUT,"ADOL-C error: myallocI2 cannot allocate %i bytes\n", (int)((2*n-1)*sizeof(double))); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } if (I == NULL) { fprintf(DIAG_OUT,"ADOL-C error: myallocI2 cannot allocate %i bytes\n", (int)(n*sizeof(double*))); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } Idum += (n - 1); I[0] = Idum; *Idum = 1.0; /* 20020628 olvo n3l: Initialization to 0 */ for (i=1; i #undef _INT_FOR_ #undef _NTIGHT_ ADOL-C-2.6.3/ADOL-C/src/taping_p.h0000644000175200017520000005520212672756516014554 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: taping_p.h Revision: $Id: taping_p.h 687 2016-03-18 10:49:50Z kulshres $ Contents: declarations for used by taping routines Copyright (c) Andreas Kowarz, Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_TAPING_P_H) #define ADOLC_TAPING_P_H 1 #ifdef __cplusplus #include "storemanager.h" #endif #include #include #include BEGIN_C_DECLS enum WORKMODES { ADOLC_NO_MODE, ADOLC_FORWARD, ADOLC_ZOS_FORWARD, ADOLC_FOS_FORWARD, ADOLC_FOV_FORWARD, ADOLC_HOS_FORWARD, ADOLC_HOV_FORWARD, ADOLC_REVERSE, ADOLC_FOS_REVERSE, ADOLC_FOV_REVERSE, ADOLC_HOS_REVERSE, ADOLC_HOV_REVERSE, ADOLC_TAPING }; /****************************************************************************/ /* Tape identification (ADOLC & version check) */ /****************************************************************************/ typedef struct { short adolc_ver; short adolc_sub; short adolc_lvl; short locint_size; short revreal_size; short address_size; } ADOLC_ID; extern ADOLC_ID adolc_id; /****************************************************************************/ /* tape types => used for file name generation */ /****************************************************************************/ enum TAPENAMES { LOCATIONS_TAPE, VALUES_TAPE, OPERATIONS_TAPE, TAYLORS_TAPE }; /****************************************************************************/ /* Errors handled by fail(...) */ /****************************************************************************/ enum ADOLC_ERRORS { ADOLC_MALLOC_FAILED, ADOLC_INTEGER_TAPE_FOPEN_FAILED, ADOLC_INTEGER_TAPE_FREAD_FAILED, ADOLC_VALUE_TAPE_FOPEN_FAILED, ADOLC_VALUE_TAPE_FREAD_FAILED, ADOLC_TAPE_TO_OLD, ADOLC_WRONG_LOCINT_SIZE, ADOLC_MORE_STAT_SPACE_REQUIRED, ADOLC_TAPING_BUFFER_ALLOCATION_FAILED, ADOLC_TAPING_TBUFFER_ALLOCATION_FAILED, ADOLC_TAPING_READ_ERROR_IN_TAYLOR_CLOSE, ADOLC_TAPING_TO_MANY_TAYLOR_BUFFERS, ADOLC_TAPING_TO_MANY_LOCINTS, ADOLC_TAPING_STORE_REALLOC_FAILED, ADOLC_TAPING_FATAL_IO_ERROR, ADOLC_TAPING_TAPE_STILL_IN_USE, ADOLC_TAPING_TAYLOR_OPEN_FAILED, ADOLC_EVAL_SEEK_VALUE_STACK, ADOLC_EVAL_OP_TAPE_READ_FAILED, ADOLC_EVAL_VAL_TAPE_READ_FAILED, ADOLC_EVAL_LOC_TAPE_READ_FAILED, ADOLC_EVAL_TAY_TAPE_READ_FAILED, ADOLC_REVERSE_NO_TAYLOR_STACK, ADOLC_REVERSE_COUNTS_MISMATCH, ADOLC_REVERSE_TAYLOR_COUNTS_MISMATCH, ADOLC_BUFFER_NULLPOINTER_FUNCTION, ADOLC_BUFFER_INDEX_TO_LARGE, ADOLC_EXT_DIFF_NULLPOINTER_STRUCT, ADOLC_EXT_DIFF_WRONG_TAPESTATS, ADOLC_EXT_DIFF_NULLPOINTER_FUNCTION, ADOLC_EXT_DIFF_NULLPOINTER_DIFFFUNC, ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT, ADOLC_EXT_DIFF_WRONG_FUNCTION_INDEX, ADOLC_EXT_DIFF_LOCATIONGAP, ADOLC_CHECKPOINTING_CPINFOS_NULLPOINTER, ADOLC_CHECKPOINTING_NULLPOINTER_ARGUMENT, ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION, ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION_DOUBLE, ADOLC_CHECKPOINTING_REVOLVE_IRREGULAR_TERMINATED, ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION, ADOLC_WRONG_PLATFORM_32, ADOLC_WRONG_PLATFORM_64, ADOLC_TAPING_NOT_ACTUALLY_TAPING, ADOLC_VEC_LOCATIONGAP }; /* additional infos fail can work with */ extern int failAdditionalInfo1; extern int failAdditionalInfo2; extern locint failAdditionalInfo3; extern locint failAdditionalInfo4; extern void *failAdditionalInfo5; extern void *failAdditionalInfo6; /****************************************************************************/ /* tape information */ /****************************************************************************/ #ifdef SPARSE typedef struct SparseJacInfos { void *g; void *jr1d; double *y; double **Seed; double **B; unsigned int **JP; int depen, nnz_in, seed_clms, seed_rows; } SparseJacInfos; typedef struct SparseHessInfos { void *g; void *hr; double **Hcomp; double*** Xppp; double*** Yppp; double*** Zppp; double** Upp; unsigned int **HP; int nnz_in, indep, p; } SparseHessInfos; #endif typedef struct PersistantTapeInfos { /* survive tape re-usage */ int forodec_nax, forodec_dax; double *forodec_y, *forodec_z, **forodec_Z; double **jacSolv_J; double **jacSolv_I; double *jacSolv_xold; int *jacSolv_ri; int *jacSolv_ci; int jacSolv_nax, jacSolv_modeold, jacSolv_cgd; #ifdef SPARSE /* sparse Jacobian matrices */ SparseJacInfos sJinfos; /* sparse Hessian matrices */ SparseHessInfos sHinfos; #endif /* file names */ char *op_fileName; char *loc_fileName; char *val_fileName; char *tay_fileName; int keepTape; /* - remember if tapes shall be written out to disk - this information can only be given at taping time and must survive all other actions on the tape */ /** * defaults to 0, if 1 skips file removal (when file operations are costly) */ int skipFileCleanup; revreal *paramstore; #ifdef __cplusplus PersistantTapeInfos(); ~PersistantTapeInfos(); void copy(const PersistantTapeInfos&); #endif } PersistantTapeInfos; /** * maximal number of locations writen per op code */ #if defined(__USE_ISOC99) extern const int maxLocsPerOp; #else #define maxLocsPerOp 10 #endif typedef struct TapeInfos { short tapeID; int inUse; uint numInds; uint numDeps; int keepTaylors; /* == 1 - write taylor stack in taping mode */ size_t stats[STAT_SIZE]; int traceFlag; char tapingComplete; /* operations tape */ FILE *op_file; /* file descriptor */ unsigned char *opBuffer; /* pointer to the current tape buffer */ unsigned char *currOp; /* pointer to the current opcode */ unsigned char *lastOpP1; /* pointer to element following the buffer */ size_t numOps_Tape; /* overall number of opcodes */ size_t num_eq_prod; /* overall number of eq_*_prod for nlf */ /* values (real) tape */ FILE *val_file; double *valBuffer; double *currVal; double *lastValP1; size_t numVals_Tape; /* locations tape */ FILE *loc_file; locint *locBuffer; locint *currLoc; locint *lastLocP1; size_t numLocs_Tape; /* taylor stack tape */ FILE *tay_file; revreal *tayBuffer; revreal *currTay; revreal *lastTayP1; size_t numTays_Tape; int nextBufferNumber; /* the next Buffer to read back */ char lastTayBlockInCore; /* == 1 if last taylor buffer is still in in core (first call of reverse) */ double **T_for; /* derivative buffer - forward */ uint deg_save; /* degree to save and saved respectively */ uint tay_numInds; /* # of independents for the taylor stack */ uint tay_numDeps; /* # of dependents for the taylor stack */ /* checkpointing */ locint lowestXLoc_for; /* location of the first ind. - forward mode */ locint lowestYLoc_for; /* location of the first dep. - forward mode */ locint lowestXLoc_rev; /* location of the first ind. - reverse mode */ locint lowestYLoc_rev; /* location of the first dep. - reverse mode */ locint cpIndex; /* index of the curr. cp function <- tape */ int numDirs_rev; /* # of directions for **v_reverse (checkpointing) */ locint *lowestXLoc_ext_v2; locint *lowestYLoc_ext_v2; /* evaluation forward */ double *dp_T0; int gDegree, numTay; enum WORKMODES workMode; /* * Taylor coefficient array allocated like this: * dpp_T[ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES][numTay*gDegree] */ double **dpp_T; /* evaluation reverse */ revreal *rp_T; revreal **rpp_T; revreal *rp_A; revreal **rpp_A; unsigned long int **upp_A; /* extern diff. fcts */ locint ext_diff_fct_index; /* set by forward and reverse (from tape) */ char in_nested_ctx; size_t numSwitches; locint* switchlocs; double* signature; PersistantTapeInfos pTapeInfos; #if defined(__cplusplus) TapeInfos(); TapeInfos(short tapeID); ~TapeInfos() {} void copy(const TapeInfos&); #endif } TapeInfos; typedef struct GlobalTapeVarsCL { double* store; /* double store for calc. while taping */ size_t storeSize; size_t numLives; locint maxLoc; locint operationBufferSize; /* Defaults to the value specified in */ locint locationBufferSize; /* usrparms.h. May be overwritten by values */ locint valueBufferSize; /* in a local config file .adolcrc. */ locint taylorBufferSize; int maxNumberTaylorBuffers; char inParallelRegion; /* set to 1 if in an OpenMP parallel region */ char newTape; /* signals: at least one tape created (0/1) */ char branchSwitchWarning; TapeInfos *currentTapeInfosPtr; uint nominmaxFlag; size_t numparam; size_t maxparam; double *pStore; size_t initialStoreSize; #ifdef __cplusplus StoreManager *paramStoreMgrPtr; StoreManager *storeManagerPtr; GlobalTapeVarsCL(); ~GlobalTapeVarsCL(); const GlobalTapeVarsCL& operator=(const GlobalTapeVarsCL&); #else void *paramStoreMgrPtr; void *storeManagerPtr; #endif } GlobalTapeVars; #if defined(_OPENMP) extern int isParallel(); #define ADOLC_TAPE_INFOS_BUFFER_DECL *tapeInfosBuffer #define ADOLC_TAPE_STACK_DECL *tapeStack #define ADOLC_CURRENT_TAPE_INFOS_DECL *currentTapeInfos #define ADOLC_CURRENT_TAPE_INFOS_FALLBACK_DECL *currentTapeInfos_fallBack #define ADOLC_GLOBAL_TAPE_VARS_DECL *globalTapeVars #define ADOLC_EXT_DIFF_FCTS_BUFFER_DECL *ADOLC_extDiffFctsBuffer #define ADOLC_CHECKPOINTS_STACK_DECL *ADOLC_checkpointsStack #define ADOLC_OPENMP_THREAD_NUMBER int ADOLC_threadNumber #if defined(ADOLC_THREADSAVE_ERRNO) #define ADOLC_OPENMP_GET_THREAD_NUMBER ADOLC_threadNumber = errno #define ADOLC_OPENMP_RESTORE_THREAD_NUMBER errno = ADOLC_threadNumber #else #define ADOLC_OPENMP_GET_THREAD_NUMBER ADOLC_threadNumber = omp_get_thread_num() #define ADOLC_OPENMP_RESTORE_THREAD_NUMBER #endif #define ADOLC_TAPE_INFOS_BUFFER tapeInfosBuffer[ADOLC_threadNumber] #define ADOLC_TAPE_STACK tapeStack[ADOLC_threadNumber] #define ADOLC_CURRENT_TAPE_INFOS currentTapeInfos[ADOLC_threadNumber] #define ADOLC_CURRENT_TAPE_INFOS_FALLBACK currentTapeInfos_fallBack[ADOLC_threadNumber] #define ADOLC_GLOBAL_TAPE_VARS globalTapeVars[ADOLC_threadNumber] #define ADOLC_EXT_DIFF_FCTS_BUFFER ADOLC_extDiffFctsBuffer[ADOLC_threadNumber] #define ADOLC_CHECKPOINTS_STACK ADOLC_checkpointsStack[ADOLC_threadNumber] #define REVOLVE_NUMBERS revolve_numbers[ADOLC_threadNumber] #else #define ADOLC_TAPE_INFOS_BUFFER_DECL tapeInfosBuffer #define ADOLC_TAPE_STACK_DECL tapeStack #define ADOLC_CURRENT_TAPE_INFOS_DECL currentTapeInfos #define ADOLC_CURRENT_TAPE_INFOS_FALLBACK_DECL currentTapeInfos_fallBack #define ADOLC_GLOBAL_TAPE_VARS_DECL globalTapeVars #define ADOLC_EXT_DIFF_FCTS_BUFFER_DECL ADOLC_extDiffFctsBuffer #define ADOLC_CHECKPOINTS_STACK_DECL ADOLC_checkpointsStack #define ADOLC_OPENMP_THREAD_NUMBER #define ADOLC_OPENMP_GET_THREAD_NUMBER #define ADOLC_OPENMP_RESTORE_THREAD_NUMBER #define ADOLC_TAPE_INFOS_BUFFER tapeInfosBuffer #define ADOLC_TAPE_STACK tapeStack #define ADOLC_CURRENT_TAPE_INFOS currentTapeInfos #define ADOLC_CURRENT_TAPE_INFOS_FALLBACK currentTapeInfos_fallBack #define ADOLC_GLOBAL_TAPE_VARS globalTapeVars #define ADOLC_EXT_DIFF_FCTS_BUFFER ADOLC_extDiffFctsBuffer #define ADOLC_CHECKPOINTS_STACK ADOLC_checkpointsStack #define REVOLVE_NUMBERS revolve_numbers #endif /* _OPENMP */ extern TapeInfos ADOLC_CURRENT_TAPE_INFOS_DECL; extern TapeInfos ADOLC_CURRENT_TAPE_INFOS_FALLBACK_DECL; extern GlobalTapeVars ADOLC_GLOBAL_TAPE_VARS_DECL; /****************************************************************************/ /* C Function interfaces */ /****************************************************************************/ int initNewTape(short tapeID); /* initializes a new tape * - returns 0 on success * - returns 1 in case tapeID is already/still in use */ void openTape(short tapeID, char mode); /* opens an existing tape or creates a new one */ void releaseTape(); /* release the current tape and give control to the previous one * if keepVS is not zero (keep value stack for reverse) => belonging TapeInfos * are kept marked as being in use */ TapeInfos *getTapeInfos(short tapeID); /* updates the tape infos for the given ID - a tapeInfos struct is created * and registered if non is found but its state will remain "not in use" */ #ifdef SPARSE void setTapeInfoJacSparse(short tapeID, SparseJacInfos sJinfos); /* updates the tape infos on sparse Jac for the given ID */ void setTapeInfoHessSparse(short tapeID, SparseHessInfos sHinfos); /* updates the tape infos n sparse Hess for the given ID */ #endif void take_stock(); /* record all existing adoubles on the tape * - intended to be used in start_trace only */ locint keep_stock(); /* record all remaining live variables on the value stack tape * - turns off trace_flag * - intended to be used in stop_trace only */ void updateLocs(); locint next_loc(); /* returns the next free location in "adouble" memory */ void free_loc(locint loc); /* frees the specified location in "adouble" memory */ void taylor_begin(uint bufferSize, int degreeSave); /* set up statics for writing taylor data */ void taylor_close(uint buffer); /* close taylor file if necessary and refill buffer if possible */ void taylor_back(short tag, int* dep, int* ind, int* degree); /* initializes a reverse sweep */ void write_taylor(locint loc, int keep); /* writes the block of size depth of taylor coefficients from point loc to * the taylor buffer, if the buffer is filled, then it is written to the * taylor tape */ void write_taylors(locint loc, int keep, int degree, int numDir); /* writes the block of size depth of taylor coefficients from point loc to * the taylor buffer, if the buffer is filled, then it is written to the * taylor tape */ #define ADOLC_WRITE_SCAYLOR(X) \ {\ if (ADOLC_CURRENT_TAPE_INFOS.currTay == ADOLC_CURRENT_TAPE_INFOS.lastTayP1)\ put_tay_block(ADOLC_CURRENT_TAPE_INFOS.lastTayP1);\ *ADOLC_CURRENT_TAPE_INFOS.currTay = (X);\ ++ADOLC_CURRENT_TAPE_INFOS.currTay;\ } /* writes a single element (x) to the taylor buffer and writes the buffer to * disk if necessary */ void write_scaylors(revreal *x, uint size); /* write_scaylors writes # size elements from x to the taylor buffer */ #define ADOLC_OVERWRITE_SCAYLOR(X,Y) \ {\ *Y = *(ADOLC_CURRENT_TAPE_INFOS.currTay - 1);\ *(ADOLC_CURRENT_TAPE_INFOS.currTay - 1) = X;\ } /* overwrites the last (single) element (x) of the taylor buffer */ #define ADOLC_DELETE_SCAYLOR(X) \ {\ --ADOLC_CURRENT_TAPE_INFOS.currTay;\ *X = *ADOLC_CURRENT_TAPE_INFOS.currTay;\ } /* deletes the last (single) element (x) of the taylor buffer */ void put_tay_block(revreal *lastValP1); /* writes the taylor stack buffer onto hard disk */ #define ADOLC_GET_TAYLOR(X) \ {\ if (ADOLC_CURRENT_TAPE_INFOS.currTay == ADOLC_CURRENT_TAPE_INFOS.tayBuffer)\ get_tay_block_r();\ --ADOLC_CURRENT_TAPE_INFOS.currTay;\ ADOLC_CURRENT_TAPE_INFOS.rp_T[X] = *ADOLC_CURRENT_TAPE_INFOS.currTay;\ } /* puts a taylor value from the value stack buffer to the taylor buffer */ void get_taylors(locint loc, int degree); /* puts a block of taylor coefficients from the value stack buffer to the * taylor buffer --- Higher Order Scalar */ void get_taylors_p(locint loc, int degree, int numDir); /* puts a block of taylor coefficients from the value stack buffer to the * taylor buffer --- Higher Order Vector */ void get_tay_block_r(); /* gets the next (previous block) of the value stack */ void initTapeBuffers(); /* free/allocate memory for buffers, initialize pointers */ void start_trace(); /* initialization for the taping process -> buffer allocation, sets * files names, and calls appropriate setup routines */ void stop_trace(int flag); /* stop Tracing, clean up, and turn off trace_flag */ void close_tape(int flag); /* close open tapes, update stats and clean up */ void freeTapeResources(TapeInfos *tapeInfos); /* free all resources used by a tape before overwriting the tape */ void read_tape_stats(TapeInfos *tapeInfos); /* does the actual reading from the hard disk into the stats buffer */ void init_for_sweep(short tag); /* initialize a forward sweep, get stats, open tapes, fill buffers, ... */ void init_rev_sweep(short tag); /* initialize a reverse sweep, get stats, open tapes, fill buffers, ... */ void end_sweep(); /* finish a forward or reverse sweep */ void fail(int error); /* outputs an appropriate error message using DIAG_OUT and exits the running * program */ /* print an error message describing the error number */ void printError(); char *createFileName(short tapeID, int tapeType); /* create file name depending on tape type and number */ /* puts an operation into the operation buffer, ensures that location buffer * and constants buffer are prepared to take the belonging stuff */ void put_op_reserve(unsigned char op, unsigned int reserveExtraLocations); #define put_op(i) put_op_reserve((i),0) void put_op_block(unsigned char *lastOpP1); /* writes a block of operations onto hard disk and handles file creation, * removal, ... */ void get_op_block_f(); /* reads the next operations block into the internal buffer */ void get_op_block_r(); /* reads the previous block of operations into the internal buffer */ #define ADOLC_PUT_LOCINT(X) \ {\ *ADOLC_CURRENT_TAPE_INFOS.currLoc = X;\ ++ADOLC_CURRENT_TAPE_INFOS.currLoc;\ } /* puts a single locations into the location buffer, no disk access */ void put_loc_block(locint *lastLocP1); /* writes a block of locations onto hard disk and handles file creation, * removal, ... */ void get_loc_block_f(); /* reads the next block of locations into the internal buffer */ void get_loc_block_r(); /* reads the previous block of locations into the internal buffer */ #define ADOLC_PUT_VAL(X) \ {\ *ADOLC_CURRENT_TAPE_INFOS.currVal = X;\ ++ADOLC_CURRENT_TAPE_INFOS.currVal;\ } /* puts a single constant into the location buffer, no disk access */ void put_vals_writeBlock(double *reals, locint numReals); /* fill the constants buffer and write it to disk */ void put_vals_notWriteBlock(double *reals, locint numReals); /* write some constants to the buffer without disk access */ void put_val_block(double *lastValP1); /* writes a block of constants (real) onto hard disk and handles file * creation, removal, ... */ void get_val_block_f(); /* reads the next block of constants into the internal buffer */ void get_val_block_r(); /* reads the previous block of constants into the internal buffer */ locint get_val_space(void); /* returns the number of free constants in the real tape, ensures that it * is at least 5 */ double *get_val_v_f(locint size); /* return a pointer to the first element of a constants vector * -- Forward Mode -- */ double *get_val_v_r(locint size); /* return a pointer to the first element of a constants vector * -- Reverse Mode -- */ /* suspicious function, maybe for vector class - kept for compatibility */ void reset_val_r(); /* updates */ int upd_resloc(locint temp, locint lhs); int upd_resloc_check(locint temp, locint lhs); int upd_resloc_inc_prod(locint temp, locint newlhs, unsigned char newop); /* special IEEE values */ double make_nan(); double make_inf(); #if !defined(ADOLC_HARDDEBUG) /*--------------------------------------------------------------------------*/ /* MACRO or FUNCTION */ #define get_op_f() *ADOLC_CURRENT_TAPE_INFOS.currOp++ #define get_op_r() *--ADOLC_CURRENT_TAPE_INFOS.currOp #define get_locint_f() *ADOLC_CURRENT_TAPE_INFOS.currLoc++ #define get_locint_r() *--ADOLC_CURRENT_TAPE_INFOS.currLoc #define get_val_f() *ADOLC_CURRENT_TAPE_INFOS.currVal++ #define get_val_r() *--ADOLC_CURRENT_TAPE_INFOS.currVal #else /* HARDDEBUG */ unsigned char get_op_f(); unsigned char get_op_r(); locint get_locint_f(); locint get_locint_r(); double get_val_f(); double get_val_r(); #endif /* tries to read a local config file containing, e.g., buffer sizes */ void readConfigFile(); void checkInitialStoreSize(GlobalTapeVars *gtv); /* clear the tapeBaseNames that were alocated above in readConfigFile() */ void clearTapeBaseNames(); /****************************************************************************/ /* This function sets the flag "newTape" if either a taylor buffer has been */ /* created or a taping process has been performed. Calling the function is */ /* also useful to "convince" the linker of including the cleaner part into */ /* the binary when linking statically! */ /****************************************************************************/ void markNewTape(); /****************************************************************************/ /* Allows us to throw an exception instead of calling exit() in case of a */ /* irrecoverable error */ /****************************************************************************/ void adolc_exit(int errorcode, const char *what, const char *function, const char* file, int line); /****************************************************************************/ /* Discards parameters from the end of value tape during reverse mode */ /****************************************************************************/ void discard_params_r(); /****************************************************************************/ /* Frees parameter indices after taping is complete */ /****************************************************************************/ void free_all_taping_params(); END_C_DECLS /****************************************************************************/ /* That's all */ /****************************************************************************/ #endif /* ADOLC_TAPING_P_H */ ADOL-C-2.6.3/ADOL-C/src/externfcts2.cpp0000644000175200017520000001536412562202137015541 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: externfcts2.cpp Revision: $Id$ Contents: functions and data types for extern (differentiated) functions. Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include "taping_p.h" #include #include "externfcts_p.h" #include #include #include "oplate.h" #include "buffer_temp.h" #include /****************************************************************************/ /* extern differentiated functions stuff */ #define ADOLC_BUFFER_TYPE \ Buffer< ext_diff_fct_v2, EDFCTS_BLOCK_SIZE > static ADOLC_BUFFER_TYPE buffer(edf_zero); void edf_zero(ext_diff_fct_v2 *edf) { // sanity settings edf->function=0; edf->zos_forward=0; edf->fos_forward=0; edf->fov_forward=0; edf->fos_reverse=0; edf->fov_reverse=0; edf->x = 0; edf->y = 0; edf->xp = 0; edf->yp = 0; edf->Xp = 0; edf->Yp = 0; edf->up = 0; edf->zp = 0; edf->Up = 0; edf->Zp = 0; edf->max_nin = 0; edf->max_nout = 0; edf->max_insz = 0; edf->max_outsz = 0; edf->nestedAdolc=false; edf->dp_x_changes=true; edf->dp_y_priorRequired=true; edf->context = NULL; if (edf->allmem != NULL) free(edf->allmem); edf->allmem=NULL; } ext_diff_fct_v2 *reg_ext_fct(ADOLC_ext_fct_v2 *ext_fct) { ext_diff_fct_v2 *edf = buffer.append(); edf->function = ext_fct; return edf; } static void update_ext_fct_memory(ext_diff_fct_v2 *edfct, int nin, int nout, int *insz, int *outsz) { int m_isz=0, m_osz=0; int i,j; for(i=0;imax_ninmax_noutmax_inszmax_outszallmem != NULL) free(edfct->allmem); edfct->allmem=(char*)malloc(totalmem); memset(edfct->allmem,0,totalmem); tmp = edfct->allmem; tmp = populate_dpp(&edfct->x,tmp,nin,m_isz); tmp = populate_dpp(&edfct->y,tmp,nout,m_osz); tmp = populate_dpp(&edfct->xp,tmp,nin,m_isz); tmp = populate_dpp(&edfct->yp,tmp,nout,m_osz); tmp = populate_dpp(&edfct->up,tmp,nout,m_osz); tmp = populate_dpp(&edfct->zp,tmp,nin,m_isz); tmp = populate_dppp_nodata(&edfct->Xp,tmp,nin,m_isz); tmp = populate_dppp_nodata(&edfct->Yp,tmp,nout,m_osz); tmp = populate_dppp_nodata(&edfct->Up,tmp,nout,m_osz); tmp = populate_dppp_nodata(&edfct->Zp,tmp,nin,m_isz); } edfct->max_nin=(edfct->max_ninmax_nin; edfct->max_nout=(edfct->max_noutmax_nout; edfct->max_insz=(edfct->max_inszmax_insz; edfct->max_outsz=(edfct->max_outszmax_outsz; } int call_ext_fct(ext_diff_fct_v2 *edfct, int iArrLen, int* iArr, int nin, int nout, int *insz, adouble **x, int *outsz, adouble **y) { int ret; int oldTraceFlag; int i,j; size_t numVals; double *vals; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op_reserve(ext_diff_v2, 2*(nin+nout)+iArrLen); ADOLC_PUT_LOCINT(edfct->index); ADOLC_PUT_LOCINT(iArrLen); for(i=0;inestedAdolc) { numVals = ADOLC_GLOBAL_TAPE_VARS.storeSize; vals = new double[numVals]; memcpy(vals,ADOLC_GLOBAL_TAPE_VARS.store, numVals*sizeof(double)); } update_ext_fct_memory(edfct,nin,nout,insz,outsz); if (oldTraceFlag != 0) { if (edfct->dp_x_changes) for(i=0;idp_y_priorRequired) for(i=0;idp_x_changes) for(i=0;idp_y_priorRequired) for(i=0;ix[i][j] = x[i][j].getValue(); if (edfct->dp_y_priorRequired) for(i=0;iy[i][j] = y[i][j].getValue(); ret=edfct->function(iArrLen,iArr,nin,nout,insz,edfct->x,outsz,edfct->y,edfct->context); if (edfct->nestedAdolc) { memcpy(ADOLC_GLOBAL_TAPE_VARS.store, vals, numVals*sizeof(double)); delete[] vals; vals = NULL; } if (edfct->dp_x_changes) for(i=0;ix[i][j]); for(i=0;iy[i][j]); ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; return ret; } ext_diff_fct_v2 *get_ext_diff_fct_v2( int index ) { return buffer.getElement(index); } ADOL-C-2.6.3/ADOL-C/src/fos_pl_sig_forward.c0000644000175200017520000000127412426143774016607 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fos_an_forward.c Revision: $Id$ Contents: fos_an_forward (first-order-scalar abs-normal forward mode) Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOS_ 1 #undef _KEEP_ #define _ABS_NORM_SIG_ 1 #include #undef _ABS_NORM_SIG_ #undef _FOS_ ADOL-C-2.6.3/ADOL-C/src/fos_pl_reverse.c0000644000175200017520000000122312426143774015746 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fos_reverse.c Revision: $Id$ Contents: fos_reverse (first-order-scalar reverse mode) Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOS_ 1 #define _ABS_NORM_ 1 #include #undef _ABS_NORM_ #undef _FOS_ ADOL-C-2.6.3/ADOL-C/src/indopro_forward_s.c0000644000175200017520000000137511227420735016452 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: int_forward_s.c Revision: $Id: indopro_forward_s.c 42 2009-07-15 18:37:17Z awalther $ Contents: int_forward (integer forward mode for bit pattern propagation) Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _INDOPRO_ 1 #define _NTIGHT_ 1 #include #undef _INDO_ #undef _INDOPRO_ #undef _NTIGHT_ ADOL-C-2.6.3/ADOL-C/src/ho_rev.c0000644000175200017520000032527012761540614014222 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ho_rev.c Revision: $Id: ho_rev.c 720 2016-08-31 11:37:48Z kulshres $ Contents: Contains the routines : hos_reverse (higher-order-scalar reverse mode): define _HOS_ hos_ov_reverse (higher-order-scalar reverse mode on vectors): define _HOS_OV_ hov_reverse (higher-order-vector reverse mode): define _HOV_ Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ /***************************************************************************** There are four basic versions of the procedure `reverse', which are optimized for the cases of scalar or vector reverse sweeps with first or higher derivatives, respectively. In the calling sequence this distinction is apparent from the type of the parameters `lagrange' and `results'. The former may be left out and the integer parameters `depen', `indep', `degre', and `nrows' must be set or default according to the following matrix of calling cases. no lagrange double* lagrange double** lagrange double* gradient of scalar weight vector times infeasible results valued function Jacobian product combination ( depen = 1 , ( depen > 0 , degre = 0 , degre = 0 , ------ nrows = 1 ) nrows = 1 ) double** Jacobian of vector weight vector times weight matrix results valued function Taylor-Jacobians times Jacobian ( 0 < depen ( depen > 0 , ( depen > 0 , = nrows , degre > 0 , degre = 0 , degre = 0 ) nrows = 1 ) nrows > 0 ) double*** full family of ------------ weigth matrix x results Taylor-Jacobians ------------ Taylor Jacobians *****************************************************************************/ /****************************************************************************/ /* MACROS */ #undef _ADOLC_VECTOR_ #undef _HIGHER_ORDER_ /*--------------------------------------------------------------------------*/ #ifdef _HOS_ #define GENERATED_FILENAME "hos_reverse" #define _HIGHER_ORDER_ #define RESULTS(l,indexi,k) results[indexi][k] #define LAGRANGE(l,indexd,k) lagrange[indexd][k] #define HOV_INC(T,degree) {} #define HOS_OV_INC(T,degree) {} #define GET_TAYL(loc,depth,p) \ { \ UPDATE_TAYLORREAD(depth) \ get_taylors(loc,depth); \ } /*--------------------------------------------------------------------------*/ #elif _HOS_OV_ #define GENERATED_FILENAME "hos_ov_reverse" #define _HIGHER_ORDER_ #define RESULTS(l,indexi,k) results[l][indexi][k] #define LAGRANGE(l,indexd,k) lagrange[indexd][k] #define HOV_INC(T,degree) T += degree; #define HOS_OV_INC(T,degree) T += degree; #define GET_TAYL(loc,depth,p) \ { \ UPDATE_TAYLORREAD(depth * p) \ get_taylors_p(loc,depth,p); \ } /*--------------------------------------------------------------------------*/ #elif _HOV_ #define GENERATED_FILENAME "hov_reverse" #define _ADOLC_VECTOR_ #define _HIGHER_ORDER_ #define RESULTS(l,indexi,k) results[l][indexi][k] #define LAGRANGE(l,indexd,k) lagrange[l][indexd][k] #define IF_HOV_ #define ENDIF_HOV_ #define HOV_INC(T,degree) T += degree; #define HOS_OV_INC(T,degree) #define GET_TAYL(loc,depth,p) \ { \ UPDATE_TAYLORREAD(depth) \ get_taylors(loc,depth); \ } #else #error Error ! Define [_HOS_ | _HOS_OV_ | _HOV_] #endif /*--------------------------------------------------------------------------*/ /* access to variables */ #ifdef _FOS_ /* why?, not in fo_rev.c ? */ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define AQO *Aqo #define ARES_INC *Ares #define AARG_INC *Aarg #define AARG1_INC *Aarg1 #define AARG2_INC *Aarg2 #define AQO_INC *Aqo #define ARES_INC_O Ares #define AARG_INC_O Aarg #define AARG1_INC_O Aarg1 #define AARG2_INC_O Aarg2 #define AQO_INC_O Aqo #define ASSIGN_A(a,b) a = &b; #define HOS_OV_ASSIGN_A(Aqo, rp_Atemp) #define FOR_0_LE_l_LT_q l = 0; #elif _HOS_OV_ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define AQO *Aqo #define ARES_INC *Ares++ #define AARG_INC *Aarg++ #define AARG1_INC *Aarg1++ #define AARG2_INC *Aarg2++ #define AQO_INC *Aqo++ #define ARES_INC_O Ares++ #define AARG_INC_O Aarg++ #define AARG1_INC_O Aarg1++ #define AARG2_INC_O Aarg2++ #define AQO_INC_O Aqo++ #define ASSIGN_A(a,b) a = b; #define HOS_OV_ASSIGN_A(a, b) a = b; #define FOR_0_LE_l_LT_q for(l=0;l=0; l--) /* why ? not used here */ #elif _HOS_OV_ #define FOR_0_LE_l_LT_p for (l=0; l=0; i--) #else #define FOR_0_LE_i_LT_k #define FOR_k_GT_i_GE_0 #endif #ifdef _HOV_ #define FOR_0_LE_l_LT_pk1 for (l=0; l #include #include "oplate.h" #include "taping_p.h" #include #include "dvlparms.h" #include #if defined(ADOLC_DEBUG) #include #endif /* ADOLC_DEBUG */ BEGIN_C_DECLS /*--------------------------------------------------------------------------*/ /* Local Static Variables */ #ifdef _HOS_ /***************************************************************************/ /* Higher Order Scalar Reverse Pass. */ /***************************************************************************/ int hos_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ double *lagrange, /* range weight vector */ double **results) /* matrix of coefficient vectors */ { int i, j, rc; double** L = myalloc2(depen,degre+1); for ( i = 0; i < depen; ++i ) { L[i][0] = lagrange[i]; for ( j = 1; j <= degre; ++j ) L[i][j] = 0.0; } rc = hos_ti_reverse(tnum,depen,indep,degre,L,results); myfree2(L); return rc; } int hos_ti_reverse( short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ double **lagrange, /* range weight vectors */ double **results) /* matrix of coefficient vectors */ #elif _HOS_OV_ /***************************************************************************/ /* Higher Order Scalar Reverse Pass, Vector Keep. */ /***************************************************************************/ int hos_ov_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ int nrows, /* # of Jacobian rows calculated */ double **lagrange, /* range weight vector */ double ***results) /* matrix of coefficient vectors */ #elif _HOV_ /***************************************************************************/ /* Higher Order Vector Reverse Pass. */ /***************************************************************************/ int hov_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ int nrows, /* # of Jacobian rows calculated */ double **lagrange, /* domain weight vector */ double ***results, /* matrix of coefficient vectors */ short **nonzero ) /* structural sparsity pattern */ { int i, j, k, rc; double*** L = myalloc3(nrows,depen,degre+1); for ( k = 0; k < nrows; ++k ) for ( i = 0; i < depen; ++i ) { L[k][i][0] = lagrange[k][i]; for ( j = 1; j <= degre; ++j ) L[k][i][j] = 0.0; } rc = hov_ti_reverse(tnum,depen,indep,degre,nrows,L,results,nonzero); myfree3(L); return rc; } int hov_ti_reverse( short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int degre, /* highest derivative degre */ int nrows, /* # of Jacobian rows calculated */ double ***lagrange, /* domain weight vectors */ double ***results, /* matrix of coefficient vectors */ short **nonzero ) /* structural sparsity pattern */ #endif { /************************************************************************/ /* ALL VARIABLES */ unsigned char operation; /* operation code */ int dc, ret_c=3; locint size = 0; locint res = 0; locint arg = 0; locint arg1 = 0; locint arg2 = 0; double coval = 0; int indexi = 0, indexd = 0; /* loop indices */ int i, j, l, ls; /* other necessary variables */ double *x; int *jj; int taycheck; int numdep,numind; double aTmp; /*----------------------------------------------------------------------*/ /* Taylor stuff */ revreal *Tres, *Targ, *Targ1, *Targ2, *Tqo, *rp_Ttemp, *rp_Ttemp2; revreal **rpp_T; /*----------------------------------------------------------------------*/ /* Adjoint stuff */ #ifdef _FOS_ double Atemp; # define A_TEMP Atemp #endif revreal *Ares, *Aarg=NULL, *Aarg1, *Aarg2, *Aqo, *rp_Atemp, *rp_Atemp2; revreal **rpp_A, *AP1, *AP2; /*----------------------------------------------------------------------*/ int k = degre + 1; int k1 = k + 1; revreal comp; #ifdef _ADOLC_VECTOR_ int p = nrows; #endif #ifdef _HOV_ int pk1 = p*k1; int q = 1; #elif _HOS_OV_ int p = nrows; int pk1 = p*k1; int q = p; #else int q = 1; #endif locint qq; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; #if defined(ADOLC_DEBUG) /************************************************************************/ /* DEBUG MESSAGES */ fprintf(DIAG_OUT,"Call of %s(..) with tag: %d, n: %d, m %d,\n", GENERATED_FILENAME, tnum, indep, depen); #ifdef _HIGHER_ORDER_ fprintf(DIAG_OUT," degree: %d\n",degre); #endif #ifdef _ADOLC_VECTOR_ fprintf(DIAG_OUT," p: %d\n\n",nrows); #endif #endif /************************************************************************/ /* INITs */ /*----------------------------------------------------------------------*/ /* Set up stuff for the tape */ /* Initialize the Reverse Sweep */ init_rev_sweep(tnum); if ( (depen != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS]) || (indep != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]) ) fail(ADOLC_REVERSE_COUNTS_MISMATCH); indexi = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS] - 1; indexd = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS] - 1; /************************************************************************/ /* MEMORY ALLOCATION STUFF */ /*----------------------------------------------------------------------*/ #ifdef _HOS_ /* HOS */ rpp_A = (revreal**)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * sizeof(revreal*)); if (rpp_A == NULL) fail(ADOLC_MALLOC_FAILED); Aqo = (revreal*)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * k1 * sizeof(revreal)); if (Aqo == NULL) fail(ADOLC_MALLOC_FAILED); for (i=0; i%i," " keep=%i!\n",degre,degre+1); adolc_exit(-2,"",__func__,__FILE__,__LINE__); }; if((numdep != depen)||(numind != indep)) { fprintf(DIAG_OUT,"\n ADOL-C error: reverse fails on tape %d because " "the number of\nindependent and/or dependent variables" " given to reverse are\ninconsistent with that of the" " internal taylor array.\n",tnum); adolc_exit(-2,"",__func__,__FILE__,__LINE__); } /************************************************************************/ /* REVERSE SWEEP */ #if defined(ADOLC_DEBUG) int v = 0; unsigned int countPerOperation[256], taylorPerOperation[256]; memset(countPerOperation, 0, 1024); memset(taylorPerOperation, 0, 1024); # define UPDATE_TAYLORREAD(X) taylorPerOperation[operation] += X; #else # define UPDATE_TAYLORREAD(X) #endif /* ADOLC_DEBUG */ operation=get_op_r(); #if defined(ADOLC_DEBUG) ++countPerOperation[operation]; #endif /* ADOLC_DEBUG */ while (operation != start_of_tape) { /* Switch statement to execute the operations in Reverse */ switch (operation) { /************************************************************/ /* MARKERS */ /*----------------------------------------------------------*/ case end_of_op: /* end_of_op */ get_op_block_r(); operation = get_op_r(); /* Skip next operation, it's another end_of_op */ break; /*----------------------------------------------------------*/ case end_of_int: /* end_of_int */ get_loc_block_r(); /* Get the next int block */ break; /*----------------------------------------------------------*/ case end_of_val: /* end_of_val */ get_val_block_r(); /* Get the next val block */ break; /*----------------------------------------------------------*/ case start_of_tape: /* start_of_tape */ break; case end_of_tape: /* end_of_tape */ discard_params_r(); break; /************************************************************/ /* COMPARISON */ /*----------------------------------------------------------*/ case eq_zero : /* eq_zero */ arg = get_locint_r(); ret_c = 0; break; /*----------------------------------------------------------*/ case neq_zero : /* neq_zero */ case gt_zero : /* gt_zero */ case lt_zero : /* lt_zero */ arg = get_locint_r(); break; /*----------------------------------------------------------*/ case ge_zero : /* ge_zero */ case le_zero : /* le_zero */ arg = get_locint_r(); if (*rpp_T[arg] == 0) ret_c = 0; break; /************************************************************/ /* ASSIGNMENTS */ /*----------------------------------------------------------*/ case assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC = 0.0; FOR_0_LE_i_LT_k { /* ! no tempory */ AARG_INC += ARES; ARES_INC = 0.0; } } GET_TAYL(res,k,p) break; /*----------------------------------------------------------*/ case assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ res = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; /*----------------------------------------------------------*/ case neg_sign_p: case recipr_p: case assign_p: /* assign an adouble variable a assign_d */ /* double value. (=) */ arg = get_locint_r(); res = get_locint_r(); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; /*----------------------------------------------------------*/ case assign_d_zero: /* assign an adouble a assign_d_zero */ case assign_d_one: /* double value. (=) assign_d_one */ res = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ res = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p { #ifdef _HOV_ if (nonzero) /* ??? question: why here? */ nonzero[l][indexi] = (int)ARES; #endif /* _HOV_ */ ARES_INC_O; FOR_0_LE_i_LT_k RESULTS(l,indexi,i) = ARES_INC; } GET_TAYL(res,k,p) indexi--; break; /*--------------------------------------------------------------------------*/ case assign_dep: /* assign a float variable a assign_dep */ /* dependent adouble value. (>>=) */ res = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[res]) /* just a helpful pointers */ FOR_0_LE_l_LT_p { ARES_INC_O; dc = -1; FOR_0_LE_i_LT_k { ARES_INC = LAGRANGE(l,indexd,i); if (LAGRANGE(l,indexd,i)) dc = i; } AARG = (dc < 0)? 0.0 : (dc > 0)? 2.0 : 1.0; HOV_INC(Aarg, k1) } indexd--; break; /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ case eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ res = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_plus_p: /* Add a floating point to an eq_plus_p */ /* adouble. (+=) */ arg = get_locint_r(); res = get_locint_r(); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]); FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; FOR_0_LE_i_LT_k AARG_INC += ARES_INC; } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ res = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_min_p: /* Subtract a floating point from an eq_min_p */ /* adouble. (-=) */ arg = get_locint_r(); res = get_locint_r(); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0==ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; FOR_0_LE_i_LT_k AARG_INC -= ARES_INC; } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ res = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if ( 0 == ARES_INC ) HOV_INC(Ares, k) else FOR_0_LE_i_LT_k ARES_INC *= coval; GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_mult_p: /* Multiply an adouble by a eq_mult_p */ /* flaoting point. (*=) */ arg = get_locint_r(); res = get_locint_r(); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if ( 0 == ARES_INC ) HOV_INC(Ares, k) else FOR_0_LE_i_LT_k ARES_INC *= coval; GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ res = get_locint_r(); arg = get_locint_r(); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_A(Aqo, rp_Atemp) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ, rpp_T[arg]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(ARES,2.0); MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; conv(k,Ares,Targ,rp_Atemp); if(arg != res) { inconv(k,Ares,Tres,Aarg); FOR_0_LE_i_LT_k ARES_INC = AQO_INC; } else FOR_0_LE_i_LT_k ARES_INC = 2.0 * AQO_INC; HOV_INC(Aarg,k) HOS_OV_INC(Tres,k) HOS_OV_INC(Targ,k) HOS_OV_ASSIGN_A(Aqo, rp_Atemp) } } break; /*--------------------------------------------------------------------------*/ case incr_a: /* Increment an adouble incr_a */ case decr_a: /* Increment an adouble decr_a */ res = get_locint_r(); GET_TAYL(res,k,p) break; /****************************************************************************/ /* BINARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case plus_a_a: /* : Add two adoubles. (+) plus a_a */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Aarg2, rpp_A[arg2]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG2,aTmp); AARG2_INC_O; AARG1_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG1_INC += aTmp; AARG2_INC += aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case plus_a_p: /* Add an adouble and a double plus_a_p */ case min_a_p: /* Subtract an adouble from a min_a_p */ /* (+) */ arg1 = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC += aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case plus_d_a: /* Add an adouble and a double plus_d_a */ /* (+) */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC += aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case min_a_a: /* Subtraction of two adoubles min_a_a */ /* (-) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Aarg2, rpp_A[arg2]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG2,aTmp); AARG2_INC_O; AARG1_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG1_INC += aTmp; AARG2_INC -= aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case min_d_a: /* Subtract an adouble from a min_d_a */ /* double (-) */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC -= aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case mult_a_a: /* Multiply two adoubles (*) mult_a_a */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ1, rpp_T[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) HOV_INC(Ares, k1) } else { comp = (ARES > 2.0) ? ARES : 2.0 ; ARES_INC = 0.0; MAXDEC(AARG1,comp); MAXDEC(AARG2,comp); AARG1_INC_O; AARG2_INC_O; copyAndZeroset(k,Ares,rp_Atemp); inconv(k,rp_Atemp,Targ1,Aarg2); inconv(k,rp_Atemp,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOV_INC(Aarg2, k) HOS_OV_INC(Targ1, k) HOS_OV_INC(Targ2, k) } break; /*--------------------------------------------------------------------------*/ /* olvo 991122: new op_code with recomputation */ case eq_plus_prod: /* increment a product of eq_plus_prod */ /* two adoubles (*) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ1, rpp_T[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) /* RECOMPUTATION */ ASSIGN_T( Tres, rpp_T[res]) #if !defined(_HOS_OV_) deconv1(k,Targ1,Targ2,Tres); #endif FOR_0_LE_l_LT_p { #if defined(_HOS_OV_) deconv1(k,Targ1,Targ2,Tres); #endif if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) HOV_INC(Ares, k1) } else { comp = (ARES > 2.0) ? ARES : 2.0 ; ARES_INC = comp; MAXDEC(AARG1,comp); MAXDEC(AARG2,comp); AARG1_INC_O; AARG2_INC_O; inconv(k,Ares,Targ1,Aarg2); inconv(k,Ares,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOV_INC(Aarg2, k) HOS_OV_INC(Targ1, k) HOS_OV_INC(Targ2, k) HOS_OV_INC(Tres, k) } } break; /*--------------------------------------------------------------------------*/ /* olvo 991122: new op_code with recomputation */ case eq_min_prod: /* decrement a product of eq_min_prod */ /* two adoubles (*) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ1, rpp_T[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) /* RECOMPUTATION */ ASSIGN_T( Tres, rpp_T[res]) #if !defined(_HOS_OV_) inconv1(k,Targ1,Targ2,Tres); #endif FOR_0_LE_l_LT_p { #if defined(_HOS_OV_) inconv1(k,Targ1,Targ2,Tres); #endif if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) HOV_INC(Ares, k1) } else { comp = (ARES > 2.0) ? ARES : 2.0 ; ARES_INC = comp; MAXDEC(AARG1,comp); MAXDEC(AARG2,comp); AARG1_INC_O; AARG2_INC_O; deconv1(k,Ares,Targ1,Aarg2); deconv1(k,Ares,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOV_INC(Aarg2, k) HOS_OV_INC(Targ1, k) HOS_OV_INC(Targ2, k) HOS_OV_INC(Tres, k) } } break; /*--------------------------------------------------------------------------*/ case mult_d_a: /* Multiply an adouble by a double mult_d_a */ /* (*) */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC += coval * aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case mult_a_p: /* Multiply an adouble by a double mult_a_p */ /* (*) */ arg1 = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC += coval * aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case div_a_a: /* Divide an adouble by an adouble div_a_a */ /* (/) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ2, rpp_T[arg2]) /* olvo 980922 allows reflexive operation */ if (arg2 == res) { FOR_0_LE_l_LT_pk rp_Ttemp2[l] = Tres[l]; Tres = rp_Ttemp2; GET_TAYL(res,k,p) } VEC_COMPUTED_INIT FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,3.0); MAXDEC(AARG1,aTmp); MAXDEC(AARG2,3.0); MAXDEC(AARG2,aTmp); AARG1_INC_O; AARG2_INC_O; VEC_COMPUTED_CHECK recipr(k,1.0,Targ2,rp_Ttemp); conv0(k ,rp_Ttemp, Tres, rp_Atemp2); VEC_COMPUTED_END copyAndZeroset(k,Ares,rp_Atemp); inconv(k, rp_Atemp, rp_Ttemp, Aarg1); deconv(k, rp_Atemp, rp_Atemp2, Aarg2); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOV_INC(Aarg2, k) HOS_OV_INC(Tres, k) HOS_OV_INC(Targ2, k) } } if (res != arg2) GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case div_d_a: /* Division double - adouble (/) div_d_a */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980922 allows reflexive operation */ if (arg == res) { FOR_0_LE_l_LT_pk rp_Ttemp2[l] = Tres[l]; Tres = rp_Ttemp2; GET_TAYL(arg,k,p) } VEC_COMPUTED_INIT FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,3.0); AARG_INC_O; VEC_COMPUTED_CHECK recipr(k,1.0,Targ,rp_Ttemp); conv0(k, rp_Ttemp, Tres, rp_Atemp); VEC_COMPUTED_END deconvZeroR(k,Ares,rp_Atemp,Aarg); HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres, k) HOS_OV_INC(Targ, k) } } if (arg != res) GET_TAYL(res,k,p) break; /****************************************************************************/ case div_p_a: /* Division double - adouble (/) div_p_a */ arg1 = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980922 allows reflexive operation */ if (arg == res) { FOR_0_LE_l_LT_pk rp_Ttemp2[l] = Tres[l]; Tres = rp_Ttemp2; GET_TAYL(arg,k,p) } VEC_COMPUTED_INIT FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,3.0); AARG_INC_O; VEC_COMPUTED_CHECK recipr(k,1.0,Targ,rp_Ttemp); conv0(k, rp_Ttemp, Tres, rp_Atemp); VEC_COMPUTED_END deconvZeroR(k,Ares,rp_Atemp,Aarg); HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres, k) HOS_OV_INC(Targ, k) } } if (arg != res) GET_TAYL(res,k,p) break; /****************************************************************************/ /* SIGN OPERATIONS */ /*--------------------------------------------------------------------------*/ case pos_sign_a: /* pos_sign_a */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC += aTmp; } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case neg_sign_a: /* neg_sign_a */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); AARG_INC_O; FOR_0_LE_i_LT_k { aTmp = ARES; ARES_INC = 0.0; AARG_INC -= aTmp; } } GET_TAYL(res,k,p) break; /****************************************************************************/ /* UNARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case exp_op: /* exponent operation exp_op */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ, rpp_T[arg]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,4.0); AARG_INC_O; inconv0(k,Ares,Tres,Aarg); HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres, k) } } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case sin_op: /* sine operation sin_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG1,4.0); AARG1_INC_O; inconv0(k,Ares,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOS_OV_INC(Targ2, k) } } GET_TAYL(res,k,p) GET_TAYL(arg2,k,p) /* olvo 980710 covalue */ /* NOTE: rpp_A[arg2] should be 0 already */ break; /*--------------------------------------------------------------------------*/ case cos_op: /* cosine operation cos_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG1,4.0); AARG1_INC_O; deconv0(k,Ares,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOS_OV_INC(Targ2, k) } } GET_TAYL(res,k,p) GET_TAYL(arg2,k,p) /* olvo 980710 covalue */ /* NOTE: rpp_A[arg2] should be 0 already */ break; /*xxx*/ /*--------------------------------------------------------------------------*/ case atan_op: /* atan_op */ case asin_op: /* asin_op */ case acos_op: /* acos_op */ case asinh_op: /* asinh_op */ case acosh_op: /* acosh_op */ case atanh_op: /* atanh_op */ case erf_op: /* erf_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG1,4.0); AARG1_INC_O; inconv0(k,Ares,Targ2,Aarg1); HOV_INC(Aarg1, k) HOV_INC(Ares, k) HOS_OV_INC(Targ2, k) } } break; /*--------------------------------------------------------------------------*/ case log_op: /* log_op */ res = get_locint_r(); arg = get_locint_r(); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_T(Targ, rpp_T[arg]) VEC_COMPUTED_INIT FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,4.0); AARG_INC_O; VEC_COMPUTED_CHECK recipr(k,1.0,Targ,rp_Ttemp); VEC_COMPUTED_END inconv0(k,Ares,rp_Ttemp,Aarg); HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Targ, k) } } break; /*--------------------------------------------------------------------------*/ case pow_op: /* pow_op */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_T(Targ, rpp_T[arg]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) /* olvo 980921 allows reflexive operation */ if (arg == res) { FOR_0_LE_l_LT_pk rp_Ttemp2[l] = Tres[l]; Tres = rp_Ttemp2; GET_TAYL(arg,k,p) } VEC_COMPUTED_INIT FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,4.0); AARG_INC_O; VEC_COMPUTED_CHECK if (fabs(Targ[0]) > ADOLC_EPS) { divide(k,Tres,Targ,rp_Ttemp); for (i=0;i 1) { Aarg[i] = 0; Ares[i] = 0; } if ((coval - i < 1) && (coval - i > 0)) { Aarg[i] = make_inf(); Ares[i] = 0; } if (coval - i < 0) { Aarg[i] = make_nan(); Ares[i] = 0; } } } else { if (coval == 1) { FOR_0_LE_i_LT_k { /* ! no tempory */ Aarg[i] += Ares[i]; Ares[i] = 0.0; } } else { /* coval is an int > 1 */ /* the following is not efficient but at least it works */ /* it reformulates x^n into x* ... *x n times */ copyAndZeroset(k,Ares,rp_Atemp); inconv(k,rp_Atemp,Targ,Aarg); inconv(k,rp_Atemp,Targ,Aarg); if (coval == 3) { conv(k,Aarg,Targ,rp_Atemp); FOR_0_LE_i_LT_k Aarg[i] = 2.0 * rp_Atemp[i]; } } } } } VEC_COMPUTED_END HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres, k) HOS_OV_INC(Targ, k) } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case pow_op_p: /* pow_op_p */ arg1 = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; ASSIGN_T(Targ, rpp_T[arg]) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) /* olvo 980921 allows reflexive operation */ if (arg == res) { FOR_0_LE_l_LT_pk rp_Ttemp2[l] = Tres[l]; Tres = rp_Ttemp2; GET_TAYL(arg,k,p) } VEC_COMPUTED_INIT FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,4.0); AARG_INC_O; VEC_COMPUTED_CHECK if (fabs(Targ[0]) > ADOLC_EPS) { divide(k,Tres,Targ,rp_Ttemp); for (i=0;i 1) { Aarg[i] = 0; Ares[i] = 0; } if ((coval - i < 1) && (coval - i > 0)) { Aarg[i] = make_inf(); Ares[i] = 0; } if (coval - i < 0) { Aarg[i] = make_nan(); Ares[i] = 0; } } } else { if (coval == 1) { FOR_0_LE_i_LT_k { /* ! no tempory */ Aarg[i] += Ares[i]; Ares[i] = 0.0; } } else { /* coval is an int > 1 */ /* the following is not efficient but at least it works */ /* it reformulates x^n into x* ... *x n times */ copyAndZeroset(k,Ares,rp_Atemp); inconv(k,rp_Atemp,Targ,Aarg); inconv(k,rp_Atemp,Targ,Aarg); if (coval == 3) { conv(k,Aarg,Targ,rp_Atemp); FOR_0_LE_i_LT_k Aarg[i] = 2.0 * rp_Atemp[i]; } } } } } VEC_COMPUTED_END HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres, k) HOS_OV_INC(Targ, k) } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case sqrt_op: /* sqrt_op */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_T(Tres, rpp_T[res]) VEC_COMPUTED_INIT FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG,aTmp); MAXDEC(AARG,4.0); AARG_INC_O; VEC_COMPUTED_CHECK recipr(k,0.5,Tres,rp_Ttemp); VEC_COMPUTED_END inconv0(k,Ares,rp_Ttemp,Aarg); HOV_INC(Ares, k) HOV_INC(Aarg, k) HOS_OV_INC(Tres,k) } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case gen_quad: /* gen_quad */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); coval = get_val_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { aTmp = ARES; ARES_INC = 0.0; MAXDEC(AARG1,aTmp); MAXDEC(AARG1,4.0); AARG1_INC_O; inconv0(k,Ares,Targ2,Aarg1); HOV_INC(Aarg1, k) HOV_INC(Ares, k) HOS_OV_INC(Targ2, k) } GET_TAYL(res,k,p) break; /*--------------------------------------------------------------------------*/ case min_op: /* min_op */ #ifdef _HOS_OV_ fprintf(DIAG_OUT," operation min_op not implemented for hos_ov"); break; #endif res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_T(Targ1, rpp_T[arg1]) ASSIGN_T(Targ2, rpp_T[arg2]) ASSIGN_A(AP1, NULL) ASSIGN_A(AP2, Ares) if (Targ1[0] > Targ2[0]) { FOR_0_LE_l_LT_p { if ((coval) && (*AP2)) MINDEC(ret_c,2); HOV_INC(AP2,k1) } AP1 = Aarg2; arg = 0; } else if (Targ1[0] < Targ2[0]) { FOR_0_LE_l_LT_p { if ((!coval) && (*AP2)) MINDEC(ret_c,2); HOV_INC(AP2,k1) } AP1 = Aarg1; arg = 0; } else /* both are equal */ /* must be changed for hos_ov, but how? */ /* seems to influence the return value */ for (i=1;i Targ2[i]) { FOR_0_LE_l_LT_p { if (*AP2) MINDEC(ret_c,1); HOV_INC(AP2,k1) } AP1 = Aarg2; arg = i+1; } else if (Targ1[i] < Targ2[i]) { FOR_0_LE_l_LT_p { if (*AP2) MINDEC(ret_c,1); HOV_INC(AP2,k1) } AP1 = Aarg1; arg = i+1; } if (AP1 != NULL) break; } if (AP1 != NULL) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(AP1, k1) HOV_INC(Ares,k1); } else { aTmp = ARES; ARES_INC = 0.0; if (arg) /* we are at the tie */ *AP1 = 5.0; else MAXDEC(*AP1,aTmp); AP1++; for (i=0;i0) && (aTmp)) MINDEC(ret_c,2); AARG_INC += x[l] * aTmp; } } HOS_OV_INC(Targ,k) } break; /*--------------------------------------------------------------------------*/ case ceil_op: /* ceil_op */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) coval = (coval != ceil(*rpp_T[arg]) ); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { ARES_INC = 0.0; AARG_INC = 5.0; FOR_0_LE_i_LT_k { if ((coval) && (ARES)) MINDEC(ret_c,2); ARES_INC = 0.0; } HOV_INC(Aarg, k) } break; /*--------------------------------------------------------------------------*/ case floor_op: /* floor_op */ res = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) coval = ( coval != floor(*rpp_T[arg]) ); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { ARES = 0.0; AARG_INC = 5.0; FOR_0_LE_i_LT_k { if ( (coval) && (ARES) ) MINDEC(ret_c,2); ARES_INC = 0.0; } HOV_INC(Aarg, k) } break; /****************************************************************************/ /* CONDITIONALS */ /*--------------------------------------------------------------------------*/ case cond_assign: /* cond_assign */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980925 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG1,ARES); ARES_INC = 0.0; AARG1_INC_O; FOR_0_LE_i_LT_k { AARG1_INC += ARES; ARES_INC = 0; } } } else FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); HOV_INC(Ares, k1) } } else /* TARG <= 0.0 */ { if (res != arg2) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg2, k1) } else { if (TARG == 0.0) /* we are at the tie */ { MINDEC(ret_c,0); AARG1 = 5.0; AARG2_INC = 5.0; } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG2,ARES); AARG2_INC_O; } ARES_INC = 0.0; FOR_0_LE_i_LT_k { AARG2_INC += ARES; ARES_INC = 0; } } HOV_INC(Aarg1, k1) } else FOR_0_LE_l_LT_p { if (ARES) { if (TARG == 0.0) /* we are at the tie */ { MINDEC(ret_c,0); AARG1 = 5.0; AARG2 = 5.0; } else if (coval <= 0.0) MINDEC(ret_c,2); } HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } } break; /*--------------------------------------------------------------------------*/ case cond_assign_s: /* cond_assign_s */ res = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980925 changed code a little bit */ if (TARG == 0.0) /* we are at the tie */ { FOR_0_LE_l_LT_p { if (ARES) AARG1 = 5.0; HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } MINDEC(ret_c,0); } else if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG1,ARES); ARES_INC = 0.0; AARG1_INC_O; FOR_0_LE_i_LT_k { (AARG1_INC) += ARES; ARES_INC = 0; } } } else FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); HOV_INC(Ares, k1) } } break; /*--------------------------------------------------------------------------*/ /* NEW CONDITIONALS */ /*--------------------------------------------------------------------------*/ #if defined(ADOLC_ADVANCED_BRANCHING) case neq_a_a: case eq_a_a: case le_a_a: case ge_a_a: case lt_a_a: case gt_a_a: case neq_a_p: case eq_a_p: case le_a_p: case ge_a_p: case lt_a_p: case gt_a_p: res = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; #endif /*--------------------------------------------------------------------------*/ case subscript: coval = get_val_r(); { size_t idx, numval = (size_t)trunc(fabs(coval)); locint vectorloc; vectorloc = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ, rpp_T[arg]) idx = (size_t)trunc(fabs(TARG)); if (idx >= numval) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting n=%zu, idx=%zu\n", numval, idx); arg1 = vectorloc+idx; ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } else { MAXDEC(AARG1,ARES); AARG1_INC_O; ARES_INC = 0.0; FOR_0_LE_i_LT_k { AARG1_INC += ARES; ARES_INC = 0.0; } } GET_TAYL(res,k,p) } break; case subscript_ref: coval = get_val_r(); { size_t idx, numval = (size_t)trunc(fabs(coval)); locint vectorloc; vectorloc = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ, rpp_T[arg]) ASSIGN_T(Tres, rpp_T[res]) idx = (size_t)trunc(fabs(TARG)); if (idx >= numval) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting (ref) n=%zu, idx=%zu\n", numval, idx); arg1 = (size_t)trunc(fabs(TRES)); /* * This is actually NOP * basically all we need is that arg1 == vectorloc[idx] * so doing a check here is probably good */ if (arg1 != vectorloc+idx) { fprintf(DIAG_OUT, "ADOL-C error: indexed active position does not match referenced position\nindexed = %zu, referenced = %d\n", vectorloc+idx, arg1); adolc_exit(-2,"",__func__,__FILE__,__LINE__); } GET_TAYL(res,k,p) } break; case ref_copyout: res = get_locint_r(); arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) arg = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC = 0.0; FOR_0_LE_i_LT_k { AARG_INC += ARES; ARES_INC = 0.0; } } GET_TAYL(res,k,p) break; case ref_incr_a: /* Increment an adouble incr_a */ case ref_decr_a: /* Increment an adouble decr_a */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); GET_TAYL(res,k,p) break; case ref_assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ coval = get_val_r(); /* fallthrough */ case ref_assign_d_zero: /* assign an adouble a assign_d_zero */ case ref_assign_d_one: /* double value. (=) assign_d_one */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; case ref_assign_p: arg = get_locint_r(); arg1 = get_locint_r(); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; GET_TAYL(res,k,p) break; case ref_assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC = 0.0; FOR_0_LE_i_LT_k { /* ! no tempory */ AARG_INC += ARES; ARES_INC = 0.0; } } GET_TAYL(res,k,p) break; case ref_assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p { #ifdef _HOV_ if (nonzero) /* ??? question: why here? */ nonzero[l][indexi] = (int)ARES; #endif /* _HOV_ */ ARES_INC_O; FOR_0_LE_i_LT_k RESULTS(l,indexi,i) = ARES_INC; } GET_TAYL(res,k,p) indexi--; break; case ref_eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); GET_TAYL(res,k,p) break; case ref_eq_plus_p: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ arg = get_locint_r(); arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; GET_TAYL(res,k,p) break; case ref_eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; FOR_0_LE_i_LT_k AARG_INC += ARES_INC; } GET_TAYL(res,k,p) break; case ref_eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); GET_TAYL(res,k,p) break; case ref_eq_min_p: /* Add a floating point to an eq_min_d */ /* adouble. (-=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; GET_TAYL(res,k,p) break; case ref_eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) FOR_0_LE_l_LT_p if (0==ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg, k1) } else { MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; FOR_0_LE_i_LT_k AARG_INC -= ARES_INC; } GET_TAYL(res,k,p) break; case ref_eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ arg1 = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if ( 0 == ARES_INC ) HOV_INC(Ares, k) else FOR_0_LE_i_LT_k ARES_INC *= coval; GET_TAYL(res,k,p) break; case ref_eq_mult_p: /* Multiply an adouble by a eq_mult_p */ /* flaoting point. (*=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; ASSIGN_A(Ares, rpp_A[res]) FOR_0_LE_l_LT_p if ( 0 == ARES_INC ) HOV_INC(Ares, k) else FOR_0_LE_i_LT_k ARES_INC *= coval; GET_TAYL(res,k,p) break; case ref_eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg1 = get_locint_r(); arg = get_locint_r(); ASSIGN_T(Targ1, rpp_T[arg1]) res = (size_t)trunc(fabs(TARG1)); GET_TAYL(res,k,p) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg, rpp_A[arg]) ASSIGN_A(Aqo, rp_Atemp) ASSIGN_T(Tres, rpp_T[res]) ASSIGN_T(Targ, rpp_T[arg]) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Aarg, k1) HOV_INC(Ares, k1) } else { MAXDEC(ARES,2.0); MAXDEC(AARG,ARES); AARG_INC_O; ARES_INC_O; conv(k,Ares,Targ,rp_Atemp); if(arg != res) { inconv(k,Ares,Tres,Aarg); FOR_0_LE_i_LT_k ARES_INC = AQO_INC; } else FOR_0_LE_i_LT_k ARES_INC = 2.0 * AQO_INC; HOV_INC(Aarg,k) HOS_OV_INC(Tres,k) HOS_OV_INC(Targ,k) HOS_OV_ASSIGN_A(Aqo, rp_Atemp) } } break; case vec_copy: size = get_locint_r(); arg = get_locint_r(); res = get_locint_r(); for(qq=0;qq 2.0) ? ARES : 2.0 ; ARES_INC = comp; MAXDEC(AARG1,comp); MAXDEC(AARG2,comp); AARG1_INC_O; AARG2_INC_O; inconv(k,Ares,Targ1,Aarg2); inconv(k,Ares,Targ2,Aarg1); HOV_INC(Ares, k) HOV_INC(Aarg1, k) HOV_INC(Aarg2, k) HOS_OV_INC(Targ1, k) HOS_OV_INC(Targ2, k) HOS_OV_INC(Tres, k) } } } GET_TAYL(res,k,p) break; case vec_axpy: size = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); res = get_locint_r(); for (qq=0;qq 2.0) ? ARES : 2.0 ; MAXDEC(AARG2,ARES); ARES_INC = 0.0; MAXDEC(AARG,comp); MAXDEC(AARG1,comp); AARG_INC_O; AARG1_INC_O; AARG2_INC_O; copyAndZeroset(k,Ares,rp_Atemp); inconv(k,rp_Atemp,Targ1,Aarg); inconv(k,rp_Atemp,Targ,Aarg1); FOR_0_LE_i_LT_k AARG2_INC += *rp_Atemp++; HOV_INC(Ares,k) HOV_INC(Aarg, k) HOV_INC(Aarg1,k) HOS_OV_INC(Targ,k) HOS_OV_INC(Targ1,k) } GET_TAYL(res+qq,k,p) } break; case ref_cond_assign: /* cond_assign */ { revreal *Tref; locint ref = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_T(Tref, rpp_T[ref]) #ifdef _HIGHER_ORDER_ #define TREF *Tref #else #define TREF rpp_T[ref] #endif res = (size_t)trunc(fabs(TREF)); #undef TREF GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_A(Aarg2, rpp_A[arg2]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980925 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG1,ARES); ARES_INC = 0.0; AARG1_INC_O; FOR_0_LE_i_LT_k { AARG1_INC += ARES; ARES_INC = 0; } } } else FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); HOV_INC(Ares, k1) } } else /* TARG <= 0.0 */ { if (res != arg2) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg2, k1) } else { if (TARG == 0.0) /* we are at the tie */ { MINDEC(ret_c,0); AARG1 = 5.0; AARG2_INC = 5.0; } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG2,ARES); AARG2_INC_O; } ARES_INC = 0.0; FOR_0_LE_i_LT_k { AARG2_INC += ARES; ARES_INC = 0; } } HOV_INC(Aarg1, k1) } else FOR_0_LE_l_LT_p { if (ARES) { if (TARG == 0.0) /* we are at the tie */ { MINDEC(ret_c,0); AARG1 = 5.0; AARG2 = 5.0; } else if (coval <= 0.0) MINDEC(ret_c,2); } HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) HOV_INC(Aarg2, k1) } } } break; case ref_cond_assign_s: /* cond_assign_s */ arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); coval = get_val_r(); ASSIGN_T(Targ2, rpp_T[arg2]) res = (size_t)trunc(fabs(TARG2)); GET_TAYL(res,k,p) ASSIGN_A(Aarg1, rpp_A[arg1]) ASSIGN_A(Ares, rpp_A[res]) ASSIGN_T(Targ, rpp_T[arg]) /* olvo 980925 changed code a little bit */ if (TARG == 0.0) /* we are at the tie */ { FOR_0_LE_l_LT_p { if (ARES) AARG1 = 5.0; HOV_INC(Aarg1, k1) HOV_INC(Ares, k1) } MINDEC(ret_c,0); } else if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if (0 == ARES) { HOV_INC(Ares, k1) HOV_INC(Aarg1, k1) } else { if (coval <= 0.0) MINDEC(ret_c,2); MAXDEC(AARG1,ARES); ARES_INC = 0.0; AARG1_INC_O; FOR_0_LE_i_LT_k { (AARG1_INC) += ARES; ARES_INC = 0; } } } else FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); HOV_INC(Ares, k1) } } break; /****************************************************************************/ /* REMAINING STUFF */ /*--------------------------------------------------------------------------*/ case take_stock_op: /* take_stock_op */ res = get_locint_r(); size = get_locint_r(); get_val_v_r(size); res += size; for (ls=size;ls>0;ls--) { res--; ASSIGN_A( Ares, rpp_A[res]) FOR_0_LE_l_LT_pk1 ARES_INC = 0.0; } break; /*--------------------------------------------------------------------------*/ case death_not: /* death_not */ arg2 = get_locint_r(); arg1 = get_locint_r(); for (j=arg1;j<=arg2;j++) { ASSIGN_A(Aarg1, rpp_A[j]) FOR_0_LE_l_LT_p for (i=0; i 0) printf("operation %3d: %6d time(s) - %6d taylors read (%10.2f per operation)\n", v, countPerOperation[v], taylorPerOperation[v], (double)taylorPerOperation[v] / (double)countPerOperation[v]); printf("\n"); #endif /* ADOLC_DEBUG */ /* clean up */ free((char*)*rpp_T); free((char*) rpp_T); free(*rpp_A); free(rpp_A); free(rp_Ttemp); free(rp_Ttemp2); free(rp_Atemp); free(rp_Atemp2); free((char*) jj); free((char*) x); ADOLC_CURRENT_TAPE_INFOS.workMode = ADOLC_NO_MODE; end_sweep(); return ret_c; } /****************************************************************************/ /* THAT'S ALL */ END_C_DECLS ADOL-C-2.6.3/ADOL-C/src/ampisupport.cpp0000755000175200017520000010771012355023577015666 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ampisupport.cpp Revision: $Id$ Copyright (c) Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #include "taping_p.h" #include "oplate.h" #include "adolc/adouble.h" #ifdef ADOLC_AMPI_SUPPORT #include "ampi/ampi.h" #include "ampi/adTool/support.h" #include "ampi/tape/support.h" #include "ampi/libCommon/modified.h" #include "ampisupportAdolc.h" MPI_Comm ADTOOL_AMPI_COMM_WORLD_SHADOW; int AMPI_Init_NT(int* argc, char*** argv) { int rc; rc=MPI_Init(argc, argv); ADTOOL_AMPI_setupTypes(); ADOLC_TLM_init(); ourADTOOL_AMPI_FPCollection.pushBcastInfo_fp=&ADTOOL_AMPI_pushBcastInfo; ourADTOOL_AMPI_FPCollection.popBcastInfo_fp=&ADTOOL_AMPI_popBcastInfo; ourADTOOL_AMPI_FPCollection.pushDoubleArray_fp=&ADTOOL_AMPI_pushDoubleArray; ourADTOOL_AMPI_FPCollection.popDoubleArray_fp=&ADTOOL_AMPI_popDoubleArray; ourADTOOL_AMPI_FPCollection.pushReduceInfo_fp=&ADTOOL_AMPI_pushReduceInfo; ourADTOOL_AMPI_FPCollection.popReduceCountAndType_fp=&ADTOOL_AMPI_popReduceCountAndType; ourADTOOL_AMPI_FPCollection.popReduceInfo_fp=&ADTOOL_AMPI_popReduceInfo; ourADTOOL_AMPI_FPCollection.pushSRinfo_fp=&ADTOOL_AMPI_pushSRinfo; ourADTOOL_AMPI_FPCollection.popSRinfo_fp=&ADTOOL_AMPI_popSRinfo; ourADTOOL_AMPI_FPCollection.pushGSinfo_fp=&ADTOOL_AMPI_pushGSinfo; ourADTOOL_AMPI_FPCollection.popGScommSizeForRootOrNull_fp=&ADTOOL_AMPI_popGScommSizeForRootOrNull; ourADTOOL_AMPI_FPCollection.popGSinfo_fp=&ADTOOL_AMPI_popGSinfo; ourADTOOL_AMPI_FPCollection.pushGSVinfo_fp=&ADTOOL_AMPI_pushGSVinfo; ourADTOOL_AMPI_FPCollection.popGSVinfo_fp=&ADTOOL_AMPI_popGSVinfo; ourADTOOL_AMPI_FPCollection.push_CallCode_fp=&ADTOOL_AMPI_push_CallCode; ourADTOOL_AMPI_FPCollection.push_CallCodeReserve_fp=&ADTOOL_AMPI_push_CallCodeReserve; ourADTOOL_AMPI_FPCollection.pop_CallCode_fp=&ADTOOL_AMPI_pop_CallCode; ourADTOOL_AMPI_FPCollection.push_AMPI_Request_fp=&ADTOOL_AMPI_push_AMPI_Request; ourADTOOL_AMPI_FPCollection.pop_AMPI_Request_fp=&ADTOOL_AMPI_pop_AMPI_Request; ourADTOOL_AMPI_FPCollection.push_request_fp=&ADTOOL_AMPI_push_request; ourADTOOL_AMPI_FPCollection.pop_request_fp=&ADTOOL_AMPI_pop_request; ourADTOOL_AMPI_FPCollection.push_comm_fp=&ADTOOL_AMPI_push_comm; ourADTOOL_AMPI_FPCollection.pop_comm_fp=&ADTOOL_AMPI_pop_comm; ourADTOOL_AMPI_FPCollection.rawData_fp=&ADTOOL_AMPI_rawData; ourADTOOL_AMPI_FPCollection.rawDataV_fp=&ADTOOL_AMPI_rawDataV; ourADTOOL_AMPI_FPCollection.packDType_fp=&ADTOOL_AMPI_packDType; ourADTOOL_AMPI_FPCollection.unpackDType_fp=&ADTOOL_AMPI_unpackDType; ourADTOOL_AMPI_FPCollection.writeData_fp=&ADTOOL_AMPI_writeData; ourADTOOL_AMPI_FPCollection.writeDataV_fp=&ADTOOL_AMPI_writeDataV; ourADTOOL_AMPI_FPCollection.rawAdjointData_fp=&ADTOOL_AMPI_rawAdjointData; ourADTOOL_AMPI_FPCollection.Turn_fp=&ADTOOL_AMPI_Turn; ourADTOOL_AMPI_FPCollection.mapBufForAdjoint_fp=&ADTOOL_AMPI_mapBufForAdjoint; ourADTOOL_AMPI_FPCollection.setBufForAdjoint_fp=&ADTOOL_AMPI_setBufForAdjoint; ourADTOOL_AMPI_FPCollection.getAdjointCount_fp=&ADTOOL_AMPI_getAdjointCount; ourADTOOL_AMPI_FPCollection.setAdjointCount_fp=&ADTOOL_AMPI_setAdjointCount; ourADTOOL_AMPI_FPCollection.setAdjointCountAndTempBuf_fp=&ADTOOL_AMPI_setAdjointCountAndTempBuf; ourADTOOL_AMPI_FPCollection.allocateTempBuf_fp=&ADTOOL_AMPI_allocateTempBuf; ourADTOOL_AMPI_FPCollection.releaseAdjointTempBuf_fp=&ADTOOL_AMPI_releaseAdjointTempBuf; ourADTOOL_AMPI_FPCollection.incrementAdjoint_fp=&ADTOOL_AMPI_incrementAdjoint; ourADTOOL_AMPI_FPCollection.multiplyAdjoint_fp=&ADTOOL_AMPI_multiplyAdjoint; ourADTOOL_AMPI_FPCollection.divideAdjoint_fp=&ADTOOL_AMPI_divideAdjoint; ourADTOOL_AMPI_FPCollection.equalAdjoints_fp=&ADTOOL_AMPI_equalAdjoints; ourADTOOL_AMPI_FPCollection.nullifyAdjoint_fp=&ADTOOL_AMPI_nullifyAdjoint; ourADTOOL_AMPI_FPCollection.setupTypes_fp=&ADTOOL_AMPI_setupTypes; ourADTOOL_AMPI_FPCollection.cleanupTypes_fp=&ADTOOL_AMPI_cleanupTypes; ourADTOOL_AMPI_FPCollection.FW_rawType_fp=&ADTOOL_AMPI_FW_rawType; ourADTOOL_AMPI_FPCollection.BW_rawType_fp=&ADTOOL_AMPI_BW_rawType; ourADTOOL_AMPI_FPCollection.isActiveType_fp=&ADTOOL_AMPI_isActiveType; ourADTOOL_AMPI_FPCollection.allocateTempActiveBuf_fp=&ADTOOL_AMPI_allocateTempActiveBuf; ourADTOOL_AMPI_FPCollection.releaseTempActiveBuf_fp=&ADTOOL_AMPI_releaseTempActiveBuf; ourADTOOL_AMPI_FPCollection.copyActiveBuf_fp=&ADTOOL_AMPI_copyActiveBuf; return rc; } locint startLocAssertContiguous(adouble* adoubleBuffer, int count) { locint start=0; if (count>0) { start=adoubleBuffer->loc(); assert(start+count-1==(adoubleBuffer+count-1)->loc()); // buf must have consecutive ascending locations } return start; } void ADTOOL_AMPI_pushBcastInfo(void* buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { int i, dt_idx = derivedTypeIdx(datatype); int activeVarCount, bitCountToFirstActive, bitCountToLastActive; if (isDerivedType(dt_idx)) { derivedTypeData* dtdata = getDTypeData(); activeVarCount = dtdata->num_actives[dt_idx]*count; bitCountToFirstActive = dtdata->first_active_blocks[dt_idx];; bitCountToLastActive = (count-1)*dtdata->extents[dt_idx] + dtdata->last_active_blocks[dt_idx] + sizeof(adouble)*(dtdata->last_active_block_lengths[dt_idx]-1); } else { activeVarCount = count; bitCountToFirstActive = 0; bitCountToLastActive = (count-1)*sizeof(adouble); } if (count>0) { assert(buf); locint start=((adouble*)((char*)buf+bitCountToFirstActive))->loc(); locint end=((adouble*)((char*)buf+bitCountToLastActive))->loc(); assert(start+activeVarCount-1==end); // buf must have consecutive ascending locations ADOLC_PUT_LOCINT(start); } else { ADOLC_PUT_LOCINT(0); // have to put something } TAPE_AMPI_push_int(count); TAPE_AMPI_push_MPI_Datatype(datatype); TAPE_AMPI_push_int(root); TAPE_AMPI_push_MPI_Comm(comm); } } void ADTOOL_AMPI_popBcastInfo(void** buf, int* count, MPI_Datatype* datatype, int* root, MPI_Comm* comm, void **idx) { TAPE_AMPI_pop_MPI_Comm(comm); TAPE_AMPI_pop_int(root); TAPE_AMPI_pop_MPI_Datatype(datatype); TAPE_AMPI_pop_int(count); *buf=(void*)(&(ADOLC_CURRENT_TAPE_INFOS.rp_A[get_locint_r()])); } void ADTOOL_AMPI_pushDoubleArray(void* buf, int count) { int i; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { for (i=0;i=0;i--) { TAPE_AMPI_pop_double(&(buf[i])); } } void ADTOOL_AMPI_pushReduceInfo(void* sbuf, void* rbuf, void* resultData, int pushResultData, /* push resultData if true */ int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { if (count>0) { assert(rbuf); ADOLC_PUT_LOCINT(startLocAssertContiguous((adouble*)rbuf,count)); ADOLC_PUT_LOCINT(startLocAssertContiguous((adouble*)sbuf,count)); } else { ADOLC_PUT_LOCINT(0); ADOLC_PUT_LOCINT(0); } TAPE_AMPI_push_int(count); TAPE_AMPI_push_int(pushResultData); ADTOOL_AMPI_pushDoubleArray(sbuf,count); if (pushResultData) ADTOOL_AMPI_pushDoubleArray(resultData,count); TAPE_AMPI_push_int(pushResultData); TAPE_AMPI_push_MPI_Op(op); TAPE_AMPI_push_int(root); TAPE_AMPI_push_MPI_Comm(comm); TAPE_AMPI_push_MPI_Datatype(datatype); TAPE_AMPI_push_int(count); } } void ADTOOL_AMPI_popReduceCountAndType(int* count, MPI_Datatype* datatype) { TAPE_AMPI_pop_int(count); TAPE_AMPI_pop_MPI_Datatype(datatype); } void ADTOOL_AMPI_popReduceInfo(void** sbuf, void** rbuf, void** prevData, void** resultData, int* count, MPI_Op* op, int* root, MPI_Comm* comm, void **idx) { int popResultData; TAPE_AMPI_pop_MPI_Comm(comm); TAPE_AMPI_pop_int(root); TAPE_AMPI_pop_MPI_Op(op); TAPE_AMPI_pop_int(&popResultData); if (popResultData) ADTOOL_AMPI_popDoubleArray((double*)(*resultData),count); ADTOOL_AMPI_popDoubleArray((double*)(*prevData),count); TAPE_AMPI_pop_int(&popResultData); TAPE_AMPI_pop_int(count); *sbuf=(void*)(&(ADOLC_CURRENT_TAPE_INFOS.rp_A[get_locint_r()])); *rbuf=(void*)(&(ADOLC_CURRENT_TAPE_INFOS.rp_A[get_locint_r()])); } void ADTOOL_AMPI_pushSRinfo(void* buf, int count, MPI_Datatype datatype, int endPoint, int tag, enum AMPI_PairedWith_E pairedWith, MPI_Comm comm) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { int i, dt_idx = derivedTypeIdx(datatype); int activeVarCount, bitCountToFirstActive, bitCountToLastActive; if (isDerivedType(dt_idx)) { derivedTypeData* dtdata = getDTypeData(); activeVarCount = dtdata->num_actives[dt_idx]*count; bitCountToFirstActive = dtdata->first_active_blocks[dt_idx]; bitCountToLastActive = (count-1)*dtdata->extents[dt_idx] + dtdata->last_active_blocks[dt_idx] + sizeof(adouble)*(dtdata->last_active_block_lengths[dt_idx]-1); } else { activeVarCount = count; bitCountToFirstActive = 0; bitCountToLastActive = (count-1)*sizeof(adouble); } if (count>0) { assert(buf); locint start=((adouble*)((char*)buf+bitCountToFirstActive))->loc(); locint end=((adouble*)((char*)buf+bitCountToLastActive))->loc(); assert(start+activeVarCount-1==end); // buf must have consecutive ascending locations ADOLC_PUT_LOCINT(start); } else { ADOLC_PUT_LOCINT(0); // have to put something } TAPE_AMPI_push_int(count); TAPE_AMPI_push_MPI_Datatype(datatype); TAPE_AMPI_push_int(endPoint); TAPE_AMPI_push_int(tag); TAPE_AMPI_push_int(pairedWith); TAPE_AMPI_push_MPI_Comm(comm); } } void ADTOOL_AMPI_popSRinfo(void** buf, int* count, MPI_Datatype* datatype, int* endPoint, int* tag, AMPI_PairedWith_E* pairedWith, MPI_Comm* comm, void **idx) { TAPE_AMPI_pop_MPI_Comm(comm); TAPE_AMPI_pop_int((int*)pairedWith); TAPE_AMPI_pop_int(tag); TAPE_AMPI_pop_int(endPoint); TAPE_AMPI_pop_MPI_Datatype(datatype); TAPE_AMPI_pop_int(count); *buf=(void*)(&(ADOLC_CURRENT_TAPE_INFOS.rp_A[get_locint_r()])); } void ADTOOL_AMPI_pushGSinfo(int commSizeForRootOrNull, void *rbuf, int rcnt, MPI_Datatype rtype, void *buf, int count, MPI_Datatype type, int root, MPI_Comm comm) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { int i; TAPE_AMPI_push_int(commSizeForRootOrNull); // counter at the beginning if(commSizeForRootOrNull>0) { TAPE_AMPI_push_int(rcnt); assert(rbuf); ADOLC_PUT_LOCINT(startLocAssertContiguous((adouble*)rbuf,rcnt)); TAPE_AMPI_push_MPI_Datatype(rtype); } locint start=0; // have to put something regardless if (buf!=MPI_IN_PLACE && count>0) { assert(buf); start=startLocAssertContiguous((adouble*)buf,count); } else { count=0; } ADOLC_PUT_LOCINT(start); TAPE_AMPI_push_int(count); TAPE_AMPI_push_MPI_Datatype(type); TAPE_AMPI_push_int(root); TAPE_AMPI_push_MPI_Comm(comm); TAPE_AMPI_push_int(commSizeForRootOrNull); // counter at the end } } void ADTOOL_AMPI_popGScommSizeForRootOrNull(int *commSizeForRootOrNull) { TAPE_AMPI_pop_int(commSizeForRootOrNull); } void ADTOOL_AMPI_popGSinfo(int commSizeForRootOrNull, void **rbuf, int *rcnt, MPI_Datatype *rtype, void **buf, int *count, MPI_Datatype *type, int *root, MPI_Comm *comm) { int i; TAPE_AMPI_pop_MPI_Comm(comm); TAPE_AMPI_pop_int(root); TAPE_AMPI_pop_MPI_Datatype(type); TAPE_AMPI_pop_int(count); locint bufLoc=get_locint_r(); if (*count==0) { if (commSizeForRootOrNull) *buf=MPI_IN_PLACE; else *buf=0; } else *buf=(void*)(&(ADOLC_CURRENT_TAPE_INFOS.rp_A[bufLoc])); if (commSizeForRootOrNull>0) { TAPE_AMPI_pop_MPI_Datatype(rtype); *rbuf=(void*)(&(ADOLC_CURRENT_TAPE_INFOS.rp_A[get_locint_r()])); TAPE_AMPI_pop_int(rcnt); } else { // at least initialize to something nonrandom // because we know we always have valid addresses passed in here // NOTE JU: may not be true for source transformation... *rbuf=0; *rcnt=0; } TAPE_AMPI_pop_int(&commSizeForRootOrNull); } void ADTOOL_AMPI_pushGSVinfo(int commSizeForRootOrNull, void *rbuf, int *rcnts, int *displs, MPI_Datatype rtype, void *buf, int count, MPI_Datatype type, int root, MPI_Comm comm) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { int i; int minDispls=INT_MAX,endOffsetMax=0; TAPE_AMPI_push_int(commSizeForRootOrNull); // counter at the beginning for (i=0;i0) { if (minDispls>displs[i]) minDispls=displs[i]; if (endOffsetMax0) { assert(minDispls==0); // don't want to make assumptions about memory layout for nonzero displacements assert(rbuf); ADOLC_PUT_LOCINT(startLocAssertContiguous((adouble*)rbuf,endOffsetMax)); TAPE_AMPI_push_MPI_Datatype(rtype); } locint start=0; // have to put something regardless if (count>0 && buf!=MPI_IN_PLACE) { assert(buf); start=startLocAssertContiguous((adouble*)buf,count); } else { count=0; } ADOLC_PUT_LOCINT(start); TAPE_AMPI_push_int(count); TAPE_AMPI_push_MPI_Datatype(type); TAPE_AMPI_push_int(root); TAPE_AMPI_push_MPI_Comm(comm); TAPE_AMPI_push_int(commSizeForRootOrNull); // counter at the end } } void ADTOOL_AMPI_popGSVinfo(int commSizeForRootOrNull, void **rbuf, int *rcnts, int *displs, MPI_Datatype *rtype, void **buf, int *count, MPI_Datatype *type, int *root, MPI_Comm *comm) { int i; TAPE_AMPI_pop_MPI_Comm(comm); TAPE_AMPI_pop_int(root); TAPE_AMPI_pop_MPI_Datatype(type); TAPE_AMPI_pop_int(count); locint bufLoc=get_locint_r(); if (*count==0) { if (commSizeForRootOrNull) *buf=MPI_IN_PLACE; else *buf=0; } else *buf=(void*)(&(ADOLC_CURRENT_TAPE_INFOS.rp_A[bufLoc])); if (commSizeForRootOrNull>0) { TAPE_AMPI_pop_MPI_Datatype(rtype); *rbuf=(void*)(&(ADOLC_CURRENT_TAPE_INFOS.rp_A[get_locint_r()])); } else { // at least initialize to something nonrandom // because we know we always have valid addresses passed in here // NOTE JU: may not be true for source transformation... *rbuf=0; } for (i=commSizeForRootOrNull-1;i>=0;--i) { TAPE_AMPI_pop_int(&(displs[i])); TAPE_AMPI_pop_int(&(rcnts[i])); } TAPE_AMPI_pop_int(&commSizeForRootOrNull); } void ADTOOL_AMPI_push_CallCode(enum AMPI_CallCode_E thisCall) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { switch(thisCall) { case AMPI_WAIT: put_op(ampi_wait); break; case AMPI_BARRIER: put_op(ampi_barrier); break; case AMPI_SEND: put_op(ampi_send); break; case AMPI_RECV: put_op(ampi_recv); break; case AMPI_ISEND: put_op(ampi_isend); break; case AMPI_IRECV: put_op(ampi_irecv); break; case AMPI_BCAST: put_op(ampi_bcast); break; case AMPI_REDUCE: put_op(ampi_reduce); break; case AMPI_ALLREDUCE: put_op(ampi_allreduce); break; case AMPI_GATHER: put_op(ampi_gather); break; case AMPI_SCATTER: put_op(ampi_scatter); break; case AMPI_ALLGATHER: put_op(ampi_allgather); break; default: assert(0); break; } } } void ADTOOL_AMPI_push_CallCodeReserve(enum AMPI_CallCode_E thisCall, unsigned int numlocations) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { switch(thisCall) { case AMPI_GATHERV: put_op_reserve(ampi_gatherv, numlocations); break; case AMPI_SCATTERV: put_op_reserve(ampi_scatterv, numlocations); break; case AMPI_ALLGATHERV: put_op_reserve(ampi_allgatherv, numlocations); break; default: assert(0); break; } } } void ADTOOL_AMPI_pop_CallCode(enum AMPI_CallCode_E *thisCall) { assert(0); } void ADTOOL_AMPI_push_AMPI_Request(struct AMPI_Request_S *ampiRequest) { ADTOOL_AMPI_pushSRinfo(ampiRequest->buf, ampiRequest->count, ampiRequest->datatype, ampiRequest->endPoint, ampiRequest->tag, ampiRequest->pairedWith, ampiRequest->comm); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { TAPE_AMPI_push_MPI_Request(ampiRequest->tracedRequest); TAPE_AMPI_push_int(ampiRequest->origin); } } void ADTOOL_AMPI_pop_AMPI_Request(struct AMPI_Request_S *ampiRequest) { TAPE_AMPI_pop_int((int*)&(ampiRequest->origin)); TAPE_AMPI_pop_MPI_Request(&(ampiRequest->tracedRequest)); ADTOOL_AMPI_popSRinfo(&(ampiRequest->adjointBuf), &(ampiRequest->count), &(ampiRequest->datatype), &(ampiRequest->endPoint), &(ampiRequest->tag), &(ampiRequest->pairedWith), &(ampiRequest->comm), &(ampiRequest->idx)); } void ADTOOL_AMPI_push_request(MPI_Request request) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) TAPE_AMPI_push_MPI_Request(request); } MPI_Request ADTOOL_AMPI_pop_request() { MPI_Request r; TAPE_AMPI_pop_MPI_Request(&r); return r; } void ADTOOL_AMPI_push_comm(MPI_Comm comm) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) TAPE_AMPI_push_MPI_Comm(comm); } MPI_Comm ADTOOL_AMPI_pop_comm() { MPI_Comm c; TAPE_AMPI_pop_MPI_Comm(&c); return c; } void * ADTOOL_AMPI_rawData(void* activeData, int *size) { void *ret=0; if (*size>0) { adouble* adouble_p=(adouble*)activeData; ret=(void*)(&(ADOLC_GLOBAL_TAPE_VARS.store[adouble_p->loc()])); } return ret; } void * ADTOOL_AMPI_rawDataV(void* activeData, int commSize, int *counts, int *displs) { void *ret=NULL; int nonNullCount=0; int minDispls=INT_MAX; for (int i=0; i< commSize; ++i) { if (counts[i]>nonNullCount) nonNullCount=counts[i]; if (minDispls>displs[i]) minDispls=displs[i]; } if (nonNullCount>0) { assert(minDispls==0); adouble* adouble_p=(adouble*)activeData; ret=(void*)(&(ADOLC_GLOBAL_TAPE_VARS.store[adouble_p->loc()])); } return ret; } void * ADTOOL_AMPI_packDType(void* indata, void* outdata, int count, int idx) { if (!isDerivedType(idx)) return indata; /* not derived type, or only passive elements */ int i, j, s, in_offset, out_offset, dt_idx; MPI_Aint p_extent, extent; MPI_Datatype datatype; derivedTypeData* dtdata = getDTypeData(); char *out_addr, *in_addr; p_extent = dtdata->p_extents[idx]; extent = dtdata->extents[idx]; for (j=0;jcounts[idx];i++) { datatype = dtdata->arrays_of_types[idx][i]; if (datatype==MPI_UB || datatype==MPI_LB) assert(0); dt_idx = derivedTypeIdx(datatype); out_addr = (char*)outdata + out_offset + (int)dtdata->arrays_of_p_displacements[idx][i]; in_addr = (char*)indata + in_offset + (int)dtdata->arrays_of_displacements[idx][i]; if (ADTOOL_AMPI_isActiveType(datatype)==AMPI_ACTIVE) { memcpy(out_addr, ADTOOL_AMPI_rawData((void*)in_addr,&dtdata->arrays_of_blocklengths[idx][i]), sizeof(revreal)*dtdata->arrays_of_blocklengths[idx][i]); } else if (isDerivedType(dt_idx)) { ADTOOL_AMPI_packDType(in_addr, out_addr, dtdata->arrays_of_blocklengths[idx][i], dt_idx); } else { if (datatype==MPI_DOUBLE) s = (int)sizeof(double); else if (datatype==MPI_INT) s = (int)sizeof(int); else if (datatype==MPI_FLOAT) s = (int)sizeof(float); else if (datatype==MPI_CHAR) s = (int)sizeof(char); else assert(0); memcpy(out_addr, in_addr, s*dtdata->arrays_of_blocklengths[idx][i]); } } } return outdata; } void * ADTOOL_AMPI_unpackDType(void* indata, void* outdata, int count, int idx) { if (!isDerivedType(idx)) return indata; /* not derived type, or only passive elements */ int i, j, s, in_offset, out_offset, dt_idx; MPI_Aint p_extent, extent; MPI_Datatype datatype; derivedTypeData* dtdata = getDTypeData(); char *out_addr, *in_addr; p_extent = dtdata->p_extents[idx]; extent = dtdata->extents[idx]; for (j=0;jcounts[idx];i++) { datatype = dtdata->arrays_of_types[idx][i]; if (datatype==MPI_UB || datatype==MPI_LB) assert(0); dt_idx = derivedTypeIdx(datatype); out_addr = (char*)outdata + out_offset + (int)dtdata->arrays_of_displacements[idx][i]; in_addr = (char*)indata + in_offset + (int)dtdata->arrays_of_p_displacements[idx][i]; if (ADTOOL_AMPI_isActiveType(datatype)==AMPI_ACTIVE) { memcpy(ADTOOL_AMPI_rawData((void*)out_addr,&dtdata->arrays_of_blocklengths[idx][i]), in_addr, sizeof(revreal)*dtdata->arrays_of_blocklengths[idx][i]); } else if (isDerivedType(dt_idx)) { ADTOOL_AMPI_unpackDType(in_addr, out_addr, dtdata->arrays_of_blocklengths[idx][i], dt_idx); } else { if (datatype==MPI_DOUBLE) s = (int)sizeof(double); else if (datatype==MPI_INT) s = (int)sizeof(int); else if (datatype==MPI_FLOAT) s = (int)sizeof(float); else if (datatype==MPI_CHAR) s = (int)sizeof(char); else assert(0); memcpy(out_addr, in_addr, s*dtdata->arrays_of_blocklengths[idx][i]); } } } return outdata; } void ADTOOL_AMPI_writeData(void* activeData,int *size) {} void ADTOOL_AMPI_writeDataV(void* activeData, int *counts, int* displs) {} void * ADTOOL_AMPI_rawAdjointData(void* activeData) { return activeData; } void ADTOOL_AMPI_mapBufForAdjoint(struct AMPI_Request_S *ampiRequest, void* buf) { ampiRequest->buf=buf; } void ADTOOL_AMPI_Turn(void* buf, void* adjointBuf) {} void ADTOOL_AMPI_setBufForAdjoint(struct AMPI_Request_S *ampiRequest, void* buf) { /* do nothing */ } void ADTOOL_AMPI_getAdjointCount(int *count, MPI_Datatype datatype) { int dt_idx = derivedTypeIdx(datatype); if (isDerivedType(dt_idx)) *count *= getDTypeData()->num_actives[dt_idx]; } void ADTOOL_AMPI_setAdjointCount(struct AMPI_Request_S *ampiRequest) { /* for now we keep the count as is but for example in vector mode one would have to multiply by vector length */ ampiRequest->adjointCount=ampiRequest->count; } void ADTOOL_AMPI_setAdjointCountAndTempBuf(struct AMPI_Request_S *ampiRequest) { ADTOOL_AMPI_setAdjointCount(ampiRequest); ampiRequest->adjointTempBuf= ADTOOL_AMPI_allocateTempBuf(ampiRequest->adjointCount, ampiRequest->datatype, ampiRequest->comm); } void* ADTOOL_AMPI_allocateTempBuf(int adjointCount, MPI_Datatype dataType, MPI_Comm comm) { size_t s=0; void* buf; int dt_idx = derivedTypeIdx(dataType); if (dataType==AMPI_ADOUBLE) s=sizeof(revreal); else if(dataType==MPI_DOUBLE) s=sizeof(double); else if(dataType==MPI_FLOAT) s=sizeof(float); else if(isDerivedType(dt_idx)) s=getDTypeData()->p_extents[dt_idx]; else MPI_Abort(comm, MPI_ERR_TYPE); buf=malloc(adjointCount*s); assert(buf); return buf; } void ADTOOL_AMPI_releaseAdjointTempBuf(void *tempBuf) { free(tempBuf); } void* ADTOOL_AMPI_allocateTempActiveBuf(int count, MPI_Datatype datatype, MPI_Comm comm) { int dt_idx = derivedTypeIdx(datatype); if (isDerivedType(dt_idx)) { int i, j, extent, struct_offset, block_offset; MPI_Datatype blocktype; derivedTypeData* dtdata = getDTypeData(); void* buf; extent = dtdata->extents[dt_idx]; buf = malloc(count*extent); assert(buf); for (j=0;jcounts[dt_idx];i++) { blocktype = dtdata->arrays_of_types[dt_idx][i]; if (blocktype==MPI_UB || blocktype==MPI_LB) assert(0); block_offset = struct_offset + dtdata->arrays_of_displacements[dt_idx][i]; if (blocktype==AMPI_ADOUBLE) { new ((void*)((char*)buf + block_offset)) adouble[dtdata->arrays_of_blocklengths[dt_idx][i]]; } } } return buf; } else if (datatype==AMPI_ADOUBLE) { adouble* buf = new adouble[count]; assert(buf); return buf; } else assert(0); } void ADTOOL_AMPI_releaseTempActiveBuf(void *buf, int count, MPI_Datatype datatype) { int dt_idx = derivedTypeIdx(datatype); if (isDerivedType(dt_idx)) { int i, j, k, extent, struct_offset, block_offset; MPI_Datatype blocktype; derivedTypeData* dtdata = getDTypeData(); extent = dtdata->extents[dt_idx]; for (j=0;jcounts[dt_idx];i++) { blocktype = dtdata->arrays_of_types[dt_idx][i]; block_offset = struct_offset + dtdata->arrays_of_displacements[dt_idx][i]; if (blocktype==AMPI_ADOUBLE) { for (k=0;karrays_of_blocklengths[dt_idx][i];k++) { ((adouble*)((char*)buf + block_offset + k*sizeof(adouble)))->~adouble(); } } } } free(buf); } else if (datatype==AMPI_ADOUBLE) delete[] (adouble*)buf; else assert(0); } void * ADTOOL_AMPI_copyActiveBuf(void* source, void* target, int count, MPI_Datatype datatype, MPI_Comm comm) { int s, k, dt_idx = derivedTypeIdx(datatype); if (ADTOOL_AMPI_isActiveType(datatype)==AMPI_ACTIVE) { for (k=0;kextents[dt_idx]; for (j=0;jcounts[dt_idx];i++) { blocktype = dtdata->arrays_of_types[dt_idx][i]; if (blocktype==MPI_UB || blocktype==MPI_LB) assert(0); block_offset = struct_offset + (int)dtdata->arrays_of_displacements[dt_idx][i]; if (ADTOOL_AMPI_isActiveType(blocktype)==AMPI_ACTIVE) { for (k=0;karrays_of_blocklengths[dt_idx][i];k++) { ((adouble*)((char*)target + block_offset))[k] = ((adouble*)((char*)source + block_offset))[k]; } } else { if (blocktype==MPI_DOUBLE) s = sizeof(double); else if (blocktype==MPI_INT) s = sizeof(int); else if (blocktype==MPI_FLOAT) s = sizeof(float); else if (blocktype==MPI_CHAR) s = sizeof(char); memcpy((char*)target + block_offset, (char*)source + block_offset, s*dtdata->arrays_of_blocklengths[dt_idx][i]); } } } } else assert(0); return target; } void ADTOOL_AMPI_incrementAdjoint(int adjointCount, MPI_Datatype datatype, MPI_Comm comm, void* target, void *source, void *idx) { for (unsigned int i=0; ipacked_types[dt_idx]; else return datatype; } MPI_Datatype ADTOOL_AMPI_BW_rawType(MPI_Datatype datatype) { int dt_idx = derivedTypeIdx(datatype); if (datatype==AMPI_ADOUBLE) return MPI_DOUBLE; else if (datatype==AMPI_AFLOAT) return MPI_FLOAT; else if (isDerivedType(dt_idx)) return MPI_DOUBLE; else return datatype; } // tracing int AMPI_Send(void* buf, int count, MPI_Datatype datatype, int src, int tag, AMPI_PairedWith pairedWith, MPI_Comm comm) { return FW_AMPI_Send(buf, count, datatype, src, tag, pairedWith, comm); } int AMPI_Recv(void* buf, int count, MPI_Datatype datatype, int src, int tag, AMPI_PairedWith pairedWith, MPI_Comm comm, MPI_Status* status) { return FW_AMPI_Recv(buf, count, datatype, src, tag, pairedWith, comm, status); } int AMPI_Isend (void* buf, int count, MPI_Datatype datatype, int dest, int tag, AMPI_PairedWith pairedWith, MPI_Comm comm, AMPI_Request* request) { return FW_AMPI_Isend(buf, count, datatype, dest, tag, pairedWith, comm, request); } int AMPI_Irecv (void* buf, int count, MPI_Datatype datatype, int src, int tag, AMPI_PairedWith pairedWith, MPI_Comm comm, AMPI_Request* request) { return FW_AMPI_Irecv(buf, count, datatype, src, tag, pairedWith, comm, request); } int AMPI_Wait(AMPI_Request *request, MPI_Status *status) { return FW_AMPI_Wait(request, status); } int AMPI_Barrier(MPI_Comm comm) { return FW_AMPI_Barrier(comm); } int AMPI_Gather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) { return FW_AMPI_Gather(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm); } int AMPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) { return FW_AMPI_Scatter(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm); } int AMPI_Allgather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, MPI_Comm comm) { return FW_AMPI_Allgather(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, comm); } int AMPI_Gatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm) { return FW_AMPI_Gatherv(sendbuf, sendcnt, sendtype, recvbuf, recvcnts, displs, recvtype, root, comm); } int AMPI_Scatterv(void *sendbuf, int *sendcnts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) { return FW_AMPI_Scatterv(sendbuf, sendcnts, displs, sendtype, recvbuf, recvcnt, recvtype, root, comm); } int AMPI_Allgatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, MPI_Datatype recvtype, MPI_Comm comm) { return FW_AMPI_Allgatherv(sendbuf, sendcnt, sendtype, recvbuf, recvcnts, displs, recvtype, comm); } int AMPI_Bcast(void* buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) { return FW_AMPI_Bcast(buf, count, datatype, root, comm); } int AMPI_Reduce(void* sbuf, void* rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) { return FWB_AMPI_Reduce(sbuf, rbuf, count, datatype, op, root, comm); } int AMPI_Allreduce(void* sbuf, void* rbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) { return FW_AMPI_Allreduce(sbuf, rbuf, count, datatype, op, comm); } #endif ADOL-C-2.6.3/ADOL-C/src/externfcts.cpp0000644000175200017520000002123012562202137015444 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: externfcts.cpp Revision: $Id: externfcts.cpp 608 2015-08-10 20:06:55Z kulshres $ Contents: functions and data types for extern (differentiated) functions. Copyright (c) Andreas Kowarz, Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include "taping_p.h" #include #include "externfcts_p.h" #include #include #include "oplate.h" #include "buffer_temp.h" #include /****************************************************************************/ /* extern differentiated functions stuff */ #define ADOLC_BUFFER_TYPE \ Buffer< ext_diff_fct, EDFCTS_BLOCK_SIZE > static ADOLC_BUFFER_TYPE buffer(edf_zero); void edf_zero(ext_diff_fct *edf) { // sanity settings edf->function=0; edf->function_iArr=0; edf->zos_forward=0; edf->zos_forward_iArr=0; edf->fos_forward=0; edf->fos_forward_iArr=0; edf->hos_forward=0; edf->hos_forward_iArr=0; edf->fov_forward=0; edf->fov_forward_iArr=0; edf->hov_forward=0; edf->hov_forward_iArr=0; edf->fos_reverse=0; edf->fos_reverse_iArr=0; edf->hos_reverse=0; edf->hos_reverse_iArr=0; edf->fov_reverse=0; edf->fov_reverse_iArr=0; edf->hov_reverse=0; edf->hov_reverse_iArr=0; edf->dp_x=0; edf->dp_X=0; edf->dpp_X=0; edf->dppp_X=0; edf->dp_y=0; edf->dp_Y=0; edf->dpp_Y=0; edf->dppp_Y=0; edf->dp_U=0; edf->dpp_U=0; edf->dp_Z=0; edf->dpp_Z=0; edf->dppp_Z=0; edf->spp_nz=0; edf->max_n=0; edf->max_m=0; edf->nestedAdolc=true; edf->dp_x_changes=true; edf->dp_y_priorRequired=true; if (edf->allmem != NULL) free(edf->allmem); edf->allmem=NULL; } ext_diff_fct *reg_ext_fct(ADOLC_ext_fct ext_fct) { // this call sets edf->index: ext_diff_fct * edf=buffer.append(); edf->function=ext_fct; return edf; } ext_diff_fct *reg_ext_fct(ADOLC_ext_fct_iArr ext_fct) { // this call sets edf->index: ext_diff_fct * edf=buffer.append(); edf->function_iArr=ext_fct; return edf; } /* * The externfcts.h had a comment previously that said the following: **** * The user has to preallocate the variables and set the pointers for any of the call back functions * that will be called during trace interpretation. * The dimensions given below correspond to the formal arguments in the call back funtions signatures above. * If the dimensions n and m change between multiple calls to the same external function, then the variables * have to be preallocation with the maximum of the respective dimension values. * The dp_x and dp_y pointers have to be valid during both, the tracing phase and the trace interpretation; * all the other pointers are required to be valid only for the trace interpretation. **** * Doing this now internally saves the user from doing it, as well as updating * when using multiple problem sizes. */ static void update_ext_fct_memory(ext_diff_fct *edfct, int n, int m) { if (edfct->max_nmax_mallmem != NULL) free(edfct->allmem); edfct->allmem = (char*)malloc(totalmem); memset(edfct->allmem,0,totalmem); edfct->dp_x = (double*)edfct->allmem; edfct->dp_y = edfct->dp_x+n; edfct->dp_X = edfct->dp_y+m; edfct->dp_Y = edfct->dp_X+n; edfct->dp_U = edfct->dp_Y+m; edfct->dp_Z = edfct->dp_U+m; tmp = (char*)(edfct->dp_Z+n); edfct->dpp_X = (double**)tmp; edfct->dpp_Y = edfct->dpp_X + n; edfct->dpp_U = edfct->dpp_Y + m; edfct->dpp_Z = edfct->dpp_U + m; /* tmp = populate_dpp(&edfct->dpp_X, tmp, n,n); tmp = populate_dpp(&edfct->dpp_Y, tmp, m,n); tmp = populate_dpp(&edfct->dpp_U, tmp, m,m); tmp = populate_dpp(&edfct->dpp_Z, tmp, m,n); */ } edfct->max_n=(edfct->max_nmax_n; edfct->max_m=(edfct->max_mmax_m; } void call_ext_fct_commonPrior(ext_diff_fct *edfct, int n, adouble *xa, int m, adouble *ya, int &numVals, double *&vals, int &oldTraceFlag) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (xa[n-1].loc()-xa[0].loc()!=(unsigned)n-1 || ya[m-1].loc()-ya[0].loc()!=(unsigned)m-1) fail(ADOLC_EXT_DIFF_LOCATIONGAP); if (edfct==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_STRUCT); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_PUT_LOCINT(edfct->index); ADOLC_PUT_LOCINT(n); ADOLC_PUT_LOCINT(m); ADOLC_PUT_LOCINT(xa[0].loc()); ADOLC_PUT_LOCINT(ya[0].loc()); ADOLC_PUT_LOCINT(0); /* keep space for checkpointing index */ oldTraceFlag=ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag=0; } else oldTraceFlag=0; if (edfct->nestedAdolc) { numVals = ADOLC_GLOBAL_TAPE_VARS.storeSize; vals = new double[numVals]; memcpy(vals, ADOLC_GLOBAL_TAPE_VARS.store, numVals * sizeof(double)); } update_ext_fct_memory(edfct,n,m); /* update taylor buffer if keep != 0 ; possible double counting as in * adouble.cpp => correction in taping.c */ if (oldTraceFlag != 0) { if (edfct->dp_x_changes) ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += n; if (edfct->dp_y_priorRequired) ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += m; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) { if (edfct->dp_x_changes) for (int i=0; idp_y_priorRequired) for (int i=0; idp_x[i]=xa[i].getValue(); if (edfct->dp_y_priorRequired) for (int i=0; idp_y[i]=ya[i].getValue(); } void call_ext_fct_commonPost(ext_diff_fct *edfct, int n, adouble *xa, int m, adouble *ya, int &numVals, double *&vals, int &oldTraceFlag) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (edfct->nestedAdolc) { memcpy(ADOLC_GLOBAL_TAPE_VARS.store, vals, numVals * sizeof(double)); delete[] vals; vals=0; } /* write back */ if (edfct->dp_x_changes) for (int i=0; idp_x[i]); for (int i=0; idp_y[i]); ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; } int call_ext_fct(ext_diff_fct *edfct, int n, adouble *xa, int m, adouble *ya) { int ret; int numVals = 0; double *vals = NULL; int oldTraceFlag; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) put_op(ext_diff); call_ext_fct_commonPrior (edfct,n,xa,m,ya,numVals,vals,oldTraceFlag); ret=edfct->function(n, edfct->dp_x, m, edfct->dp_y); call_ext_fct_commonPost (edfct,n,xa,m,ya,numVals,vals,oldTraceFlag); return ret; } int call_ext_fct(ext_diff_fct *edfct, int iArrLength, int *iArr, int n, adouble *xa, int m, adouble *ya) { int ret; int numVals = 0; double *vals = NULL; int oldTraceFlag; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op_reserve(ext_diff_iArr,iArrLength+2); ADOLC_PUT_LOCINT(iArrLength); for (int i=0; ifunction_iArr(iArrLength, iArr, n, edfct->dp_x, m, edfct->dp_y); call_ext_fct_commonPost (edfct,n,xa,m,ya,numVals,vals,oldTraceFlag); return ret; } ext_diff_fct *get_ext_diff_fct( int index ) { return buffer.getElement(index); } /****************************************************************************/ /* THAT'S ALL */ ADOL-C-2.6.3/ADOL-C/src/fov_reverse.c0000644000175200017520000000140611227420735015252 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fov_reverse.c Revision: $Id: fov_reverse.c 42 2009-07-15 18:37:17Z awalther $ Contents: fov_reverse (first-order-vector reverse mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOV_ 1 #include #undef _FOV_ ADOL-C-2.6.3/ADOL-C/src/checkpointing.cpp0000644000175200017520000005172012761540542016121 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: checkpointing.cpp Revision: $Id: checkpointing.cpp 711 2016-08-31 11:37:06Z kulshres $ Contents: checkpointing algorithms Copyright (c) Andreas Kowarz, Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include "oplate.h" #include "taping_p.h" #include #include #include #include #include "checkpointing_p.h" #include #include #include using namespace std; ADOLC_BUFFER_TYPE ADOLC_EXT_DIFF_FCTS_BUFFER_DECL; /* field of pointers to the value fields of a checkpoint */ stack ADOLC_CHECKPOINTS_STACK_DECL; /* forward function declarations */ void init_edf(ext_diff_fct *edf); ADOLC_ext_fct cp_zos_forward; ADOLC_ext_fct_fos_forward cp_fos_forward; ADOLC_ext_fct_fov_forward cp_fov_forward; ADOLC_ext_fct_hos_forward cp_hos_forward; ADOLC_ext_fct_hov_forward cp_hov_forward; ADOLC_ext_fct_fos_reverse cp_fos_reverse; ADOLC_ext_fct_fov_reverse cp_fov_reverse; ADOLC_ext_fct_hos_reverse cp_hos_reverse; ADOLC_ext_fct_hov_reverse cp_hov_reverse; void cp_takeshot(CpInfos *cpInfos); void cp_restore(CpInfos *cpInfos); void cp_release(CpInfos *cpInfos); void cp_taping(CpInfos *cpInfos); void revolve_for(CpInfos *cpInfos); void revolveError(CpInfos *cpInfos); /* we do not really have an ext. diff. function that we want to be called */ int dummy(int n, double *x, int m, double *y) { return 0; } /* register one time step function (uses buffer template) */ CpInfos *reg_timestep_fct(ADOLC_TimeStepFuncion timeStepFunction) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; CpInfos* theCpInfos=ADOLC_EXT_DIFF_FCTS_BUFFER.append(); theCpInfos->function=timeStepFunction; return theCpInfos; } /* This is the main checkpointing function the user calls within the taping * process. It performs n time steps with or without taping and registers an * external dummy function which calls the actual checkpointing workhorses * from within the used drivers. */ int checkpointing (CpInfos *cpInfos) { int i; ext_diff_fct *edf; int oldTraceFlag; locint numVals; double *vals; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; // knockout if (cpInfos==NULL) fail(ADOLC_CHECKPOINTING_CPINFOS_NULLPOINTER); if (cpInfos->function==NULL) fail(ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION); if (cpInfos->function_double==NULL) fail(ADOLC_CHECKPOINTING_NULLPOINTER_FUNCTION_DOUBLE); if (cpInfos->adp_x==NULL) fail(ADOLC_CHECKPOINTING_NULLPOINTER_ARGUMENT); // register extern function edf=reg_ext_fct(dummy); init_edf(edf); // but we do not call it // we use direct taping to avoid unnecessary argument copying if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ext_diff); ADOLC_PUT_LOCINT(edf->index); ADOLC_PUT_LOCINT(0); ADOLC_PUT_LOCINT(0); ADOLC_PUT_LOCINT(cpInfos->adp_x[0].loc()); ADOLC_PUT_LOCINT(cpInfos->adp_y[0].loc()); // this CpInfos id has to be read by the actual checkpointing // functions ADOLC_PUT_LOCINT(cpInfos->index); oldTraceFlag=ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag=0; } else oldTraceFlag=0; numVals = ADOLC_GLOBAL_TAPE_VARS.storeSize; vals = new double[numVals]; memcpy(vals, ADOLC_GLOBAL_TAPE_VARS.store, numVals * sizeof(double)); cpInfos->dp_internal_for = new double[cpInfos->n]; // initialize internal arguments for (i=0; in; ++i) cpInfos->dp_internal_for[i]=cpInfos->adp_x[i].getValue(); if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors != 0) // perform all time steps, tape the last, take checkpoints revolve_for(cpInfos); else // perform all time steps without taping for (i=0; isteps; ++i) cpInfos->function_double(cpInfos->n, cpInfos->dp_internal_for); memcpy(ADOLC_GLOBAL_TAPE_VARS.store, vals, numVals * sizeof(double)); delete[] vals; // update taylor stack; same structure as in adouble.cpp + // correction in taping.c if (oldTraceFlag != 0) { ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += cpInfos->n; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors != 0) for (i = 0; i < cpInfos->n; ++i) ADOLC_WRITE_SCAYLOR(cpInfos->adp_y[i].getValue()); } // save results for (i=0; in; ++i) { cpInfos->adp_y[i].setValue(cpInfos->dp_internal_for[i]); } delete[] cpInfos->dp_internal_for; cpInfos->dp_internal_for = NULL; // normal taping again ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; return 0; } /* - reinit external function buffer and checkpointing buffer * - necessary when using tape within a different program */ void reinit_checkpointing() {} CpInfos *get_cp_fct(int index) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_EXT_DIFF_FCTS_BUFFER.getElement(index); } /* initialize the CpInfos variable (function and index are set within * the template code */ void init_CpInfos(CpInfos *cpInfos) { char *ptr; ptr = (char *)cpInfos; for (unsigned int i = 0; i < sizeof(CpInfos); ++i) ptr[i] = 0; cpInfos->tapeNumber = -1; } /* initialize the information for the external function in a way that our * checkpointing functions are called */ void init_edf(ext_diff_fct *edf) { edf->function=dummy; edf->zos_forward=cp_zos_forward; edf->fos_forward=cp_fos_forward; edf->fov_forward=cp_fov_forward; edf->hos_forward=cp_hos_forward; edf->hov_forward=cp_hov_forward; edf->fos_reverse=cp_fos_reverse; edf->fov_reverse=cp_fov_reverse; edf->hos_reverse=cp_hos_reverse; edf->hov_reverse=cp_hov_reverse; } /****************************************************************************/ /* the following are the main checkpointing functions called by the */ /* external differentiated function alogrithms */ /****************************************************************************/ /* special case: use double version where possible, no taping */ int cp_zos_forward (int n, double *dp_x, int m, double *dp_y) { CpInfos *cpInfos; double *T0; int i, oldTraceFlag; locint arg; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; // taping off oldTraceFlag=ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag=0; // get checkpointing information cpInfos=get_cp_fct(ADOLC_CURRENT_TAPE_INFOS.cpIndex); T0 = ADOLC_CURRENT_TAPE_INFOS.dp_T0; // note the mode cpInfos->modeForward = ADOLC_ZOS_FORWARD; cpInfos->modeReverse = ADOLC_NO_MODE; // prepare arguments cpInfos->dp_internal_for=new double[cpInfos->n]; arg=ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_for; for (i=0; in; ++i) { cpInfos->dp_internal_for[i]=T0[arg]; ++arg; } revolve_for(cpInfos); // write back arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_for; // keep input for (i=0; in; ++i) { ADOLC_WRITE_SCAYLOR(T0[arg]); T0[arg]=cpInfos->dp_internal_for[i]; ++arg; } delete[] cpInfos->dp_internal_for; cpInfos->dp_internal_for = NULL; // taping "on" ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; return 0; } void revolve_for(CpInfos *cpInfos) { /* init revolve */ cpInfos->check=-1; cpInfos->capo=0; cpInfos->info = 0; cpInfos->fine=cpInfos->steps; /* execute all time steps */ enum revolve_action whattodo; do { whattodo=revolve(&cpInfos->check, &cpInfos->capo, &cpInfos->fine, cpInfos->checkpoints, &cpInfos->info); switch (whattodo) { case revolve_takeshot: cp_takeshot(cpInfos); cpInfos->currentCP=cpInfos->capo; break; case revolve_advance: for (int i=0; icapo-cpInfos->currentCP; ++i) { cpInfos->function_double(cpInfos->n, cpInfos->dp_internal_for); } break; case revolve_firsturn: cp_taping(cpInfos); break; case revolve_error: revolveError(cpInfos); break; default: fail(ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION); } } while (whattodo==revolve_takeshot || whattodo==revolve_advance); } int cp_fos_forward (int n, double *dp_x, double *dp_X, int m, double *dp_y, double *dp_Y) { printf("WARNING: Checkpointing algorithm not " "implemented for the fos_forward mode!\n"); return 0; } int cp_fov_forward (int n, double *dp_x, int p, double **dpp_X, int m, double *dp_y, double **dpp_Y) { printf("WARNING: Checkpointing algorithm not " "implemented for the fov_forward mode!\n"); return 0; } int cp_hos_forward (int n, double *dp_x, int d, double **dpp_X, int m, double *dp_y, double **dpp_Y) { printf("WARNING: Checkpointing algorithm not " "implemented for the hos_forward mode!\n"); return 0; } int cp_hov_forward (int n, double *dp_x, int d, int p, double ***dppp_X, int m, double *dp_y, double ***dppp_Y) { printf("WARNING: Checkpointing algorithm not " "implemented for the hov_forward mode!\n"); return 0; } int cp_fos_reverse (int m, double *dp_U, int n, double *dp_Z, double *dp_x, double *dp_y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; revreal *A = ADOLC_CURRENT_TAPE_INFOS.rp_A; int oldTraceFlag; locint arg; CpInfos *cpInfos=get_cp_fct(ADOLC_CURRENT_TAPE_INFOS.cpIndex); char old_bsw; // note the mode cpInfos->modeReverse = ADOLC_FOS_REVERSE; cpInfos->dp_internal_for=new double[cpInfos->n]; cpInfos->dp_internal_rev=new double[cpInfos->n]; // taping "off" oldTraceFlag=ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag=0; arg=ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (int i=0; in; ++i) { cpInfos->dp_internal_rev[i]=A[arg]; ++arg; } // update taylor buffer for (int i = 0; i < cpInfos->n; ++i) { --arg; ADOLC_GET_TAYLOR(arg); } // execute second part of revolve_firstturn left from forward sweep fos_reverse(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, cpInfos->dp_internal_rev, cpInfos->dp_internal_rev); old_bsw = ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = 0; // checkpointing enum revolve_action whattodo; do { whattodo=revolve(&cpInfos->check, &cpInfos->capo, &cpInfos->fine, cpInfos->checkpoints, &cpInfos->info); switch (whattodo) { case revolve_terminate: break; case revolve_takeshot: cp_takeshot(cpInfos); cpInfos->currentCP=cpInfos->capo; break; case revolve_advance: for (int i=0; icapo-cpInfos->currentCP; ++i) cpInfos->function_double(cpInfos->n, cpInfos->dp_internal_for); break; case revolve_youturn: if (cpInfos->retaping != 0) cp_taping(cpInfos); // retaping forced else { // one forward step with keep and retaping if necessary if (zos_forward(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, 1, cpInfos->dp_internal_for, cpInfos->dp_internal_for) < 0) cp_taping(cpInfos); } // one reverse step fos_reverse(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, cpInfos->dp_internal_rev, cpInfos->dp_internal_rev); break; case revolve_restore: if (cpInfos->capo!=cpInfos->currentCP) cp_release(cpInfos); cpInfos->currentCP=cpInfos->capo; cp_restore(cpInfos); break; case revolve_error: revolveError(cpInfos); break; default: fail(ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION); break; } } while (whattodo!=revolve_terminate && whattodo!=revolve_error); cp_release(cpInfos); // release first checkpoint if written ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = old_bsw; // save results arg=ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (int i=0; in; ++i) { A[arg]=cpInfos->dp_internal_rev[i]; ++arg; } // clean up delete[] cpInfos->dp_internal_for; cpInfos->dp_internal_for = NULL; delete[] cpInfos->dp_internal_rev; cpInfos->dp_internal_rev = NULL; // taping "on" ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; return 0; } int cp_fov_reverse (int m, int p, double **dpp_U, int n, double **dpp_Z, double */*unused*/, double */*unused*/) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; revreal **A = ADOLC_CURRENT_TAPE_INFOS.rpp_A; int oldTraceFlag, numDirs; locint arg; CpInfos *cpInfos = get_cp_fct(ADOLC_CURRENT_TAPE_INFOS.cpIndex); char old_bsw; // note the mode cpInfos->modeReverse = ADOLC_FOV_REVERSE; numDirs = ADOLC_CURRENT_TAPE_INFOS.numDirs_rev; cpInfos->dp_internal_for = new double[cpInfos->n]; cpInfos->dpp_internal_rev = myalloc2(numDirs, cpInfos->n); // taping "off" oldTraceFlag = ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (int i = 0; i < cpInfos->n; ++i) { for (int j = 0; j < numDirs; ++j) { cpInfos->dpp_internal_rev[j][i] = A[arg][j]; } ++arg; } // update taylor buffer for (int i = 0; i < cpInfos->n; ++i) { --arg; ADOLC_GET_TAYLOR(arg); } // execute second part of revolve_firstturn left from forward sweep fov_reverse(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, numDirs, cpInfos->dpp_internal_rev, cpInfos->dpp_internal_rev); old_bsw = ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning; ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = 0; // checkpointing enum revolve_action whattodo; do { whattodo=revolve(&cpInfos->check, &cpInfos->capo, &cpInfos->fine, cpInfos->checkpoints, &cpInfos->info); switch (whattodo) { case revolve_terminate: break; case revolve_takeshot: cp_takeshot(cpInfos); cpInfos->currentCP = cpInfos->capo; break; case revolve_advance: for (int i = 0; i < cpInfos->capo - cpInfos->currentCP; ++i) cpInfos->function_double(cpInfos->n, cpInfos->dp_internal_for); break; case revolve_youturn: if (cpInfos->retaping != 0) cp_taping(cpInfos); // retaping forced else { // one forward step with keep and retaping if necessary if (zos_forward(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, 1, cpInfos->dp_internal_for, cpInfos->dp_internal_for) < 0) cp_taping(cpInfos); } // one reverse step fov_reverse(cpInfos->tapeNumber, cpInfos->n, cpInfos->n, numDirs, cpInfos->dpp_internal_rev, cpInfos->dpp_internal_rev); break; case revolve_restore: if (cpInfos->capo != cpInfos->currentCP) cp_release(cpInfos); cpInfos->currentCP = cpInfos->capo; cp_restore(cpInfos); break; case revolve_error: revolveError(cpInfos); break; default: fail(ADOLC_CHECKPOINTING_UNEXPECTED_REVOLVE_ACTION); break; } } while (whattodo != revolve_terminate && whattodo != revolve_error); cp_release(cpInfos); // release first checkpoint if written ADOLC_GLOBAL_TAPE_VARS.branchSwitchWarning = old_bsw; // save results arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (int i = 0; i < cpInfos->n; ++i) { for (int j = 0; j < numDirs; ++j) { A[arg][j] = cpInfos->dpp_internal_rev[j][i]; } ++arg; } // clean up delete[] cpInfos->dp_internal_for; cpInfos->dp_internal_for = NULL; myfree2(cpInfos->dpp_internal_rev); cpInfos->dpp_internal_rev = NULL; // taping "on" ADOLC_CURRENT_TAPE_INFOS.traceFlag=oldTraceFlag; return 0; } int cp_hos_reverse (int m, double *dp_U, int n, int d, double **dpp_Z) { printf("WARNING: Checkpointing algorithm not " "implemented for the hos_reverse mode!\n"); return 0; } int cp_hov_reverse (int m, int p, double **dpp_U, int n, int d, double ***dppp_Z, short **spp_nz) { printf("WARNING: Checkpointing algorithm not " "implemented for the hov_reverse mode!\n"); return 0; } /****************************************************************************/ /* functions for handling the checkpoint stack */ /****************************************************************************/ void cp_clearStack() { StackElement se; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; while (!ADOLC_CHECKPOINTS_STACK.empty()) { se = ADOLC_CHECKPOINTS_STACK.top(); ADOLC_CHECKPOINTS_STACK.pop(); delete[] se[0]; delete[] se; } } void cp_takeshot (CpInfos *cpInfos) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; StackElement se = new double *[2]; ADOLC_CHECKPOINTS_STACK.push(se); se[0] = new double[cpInfos->n]; for (int i = 0; i < cpInfos->n; ++i) se[0][i] = cpInfos->dp_internal_for[i]; if (cpInfos->saveNonAdoubles != NULL) se[1] = static_cast(cpInfos->saveNonAdoubles()); else se[1] = NULL; } void cp_restore (CpInfos *cpInfos) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; StackElement se = ADOLC_CHECKPOINTS_STACK.top(); for (int i = 0; i < cpInfos->n; ++i) cpInfos->dp_internal_for[i] = se[0][i]; if (se[1] != NULL) cpInfos->restoreNonAdoubles(static_cast(se[1])); } void cp_release (CpInfos *cpInfos) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (!ADOLC_CHECKPOINTS_STACK.empty()) { StackElement se = ADOLC_CHECKPOINTS_STACK.top(); ADOLC_CHECKPOINTS_STACK.pop(); delete[] se[0]; if (se[1] != NULL) delete[] se[1]; delete[] se; } } void cp_taping(CpInfos *cpInfos) { adouble *tapingAdoubles = new adouble[cpInfos->n]; trace_on(cpInfos->tapeNumber, 1); for (int i = 0; i < cpInfos->n; ++i) tapingAdoubles[i] <<= cpInfos->dp_internal_for[i]; cpInfos->function(cpInfos->n, tapingAdoubles); for (int i = 0; i < cpInfos->n; ++i) tapingAdoubles[i] >>= cpInfos->dp_internal_for[i]; trace_off(); delete[] tapingAdoubles; } /****************************************************************************/ /* revolve error function */ /****************************************************************************/ void revolveError (CpInfos *cpInfos) { switch(cpInfos->info) { case 10: printf(" Number of checkpoints stored exceeds " "checkup!\n Increase constant 'checkup' " "and recompile!\n"); break; case 11: printf(" Number of checkpoints stored = %d exceeds " "snaps = %d!\n Ensure 'snaps' > 0 and increase " "initial 'fine'!\n", cpInfos->check+1, cpInfos->checkpoints); break; case 12: printf(" Error occurred in numforw!\n"); break; case 13: printf(" Enhancement of 'fine', 'snaps' checkpoints " "stored!\n Increase 'snaps'!\n"); break; case 14: printf(" Number of snaps exceeds checkup!\n Increase " "constant 'checkup' and recompile!\n"); break; case 15: printf(" Number of reps exceeds repsup!\n Increase " "constant 'repsup' and recompile!\n"); break; } fail(ADOLC_CHECKPOINTING_REVOLVE_IRREGULAR_TERMINATED); } ADOL-C-2.6.3/ADOL-C/src/hov_reverse.c0000644000175200017520000000140711227420735015255 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hov_reverse.c Revision: $Id: hov_reverse.c 42 2009-07-15 18:37:17Z awalther $ Contents: hov_reverse (higher-order-vector reverse mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOV_ 1 #include #undef _HOV_ ADOL-C-2.6.3/ADOL-C/src/lie/0000755000175200017520000000000013037353015013326 5ustar coincoinADOL-C-2.6.3/ADOL-C/src/lie/Makefile.am0000644000175200017520000000172712562202346015373 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id$ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_LDFLAGS = -no-undefined AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = liblie.la liblie_la_SOURCES = adolc_lie_c.c adolc_lie.cppADOL-C-2.6.3/ADOL-C/src/lie/adolc_lie.cpp0000644000175200017520000000264712761540604015763 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: lie/adolc_lie.cpp Revision: $Id$ Contents: Implementation of a C++ Wrapper for adolc_lie C-function calls Copyright (c) Siquian Wang, Klaus Röbenack, Jan Winkler, Mirko Franke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include int lie_scalar(short Tape_F, short Tape_H, short n, short m, double* x0, short d, double** result) { return lie_scalarcv(Tape_F, Tape_H, n, m, x0, d, result); } int lie_scalar(short Tape_F, short Tape_H, short n, double* x0, short d, double* result) { return lie_scalarc(Tape_F, Tape_H, n, x0, d, result); } int lie_gradient(short int Tape_F, short int Tape_H, short int n, short int m, double* x0, short int d, double*** result) { return lie_gradientcv(Tape_F, Tape_H, n, m, x0, d, result); } int lie_gradient(short int Tape_F, short int Tape_H, short int n, double* x0, short int d, double** result) { return lie_gradientc(Tape_F, Tape_H, n, x0, d, result); } ADOL-C-2.6.3/ADOL-C/src/lie/adolc_lie_c.c0000644000175200017520000003156312761540604015724 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: lie/adolc_lie_c.c Revision: $Id$ Contents: Implementation of functions for computation of Lie derivatives Copyright (c) Siquian Wang, Klaus Röbenack, Jan Winkler, Mirko Franke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #include "dvlparms.h" /** Computes the total derivative of the output * * @param p Number of rows of C (number of outputs) * @param n Number of columns of B (number of inputs) * @param deg Order of derivative (d) * @retval ***B Total derivative dx(j+1)/dx0 * @param ***C Partial derivative of the output mapping * @param ***D Total derivative of the output mapping */ void accodeout (int p, int n, int deg, double ***B, double ***C, double ***D) { int i, j, k, l, ip, jp, kp; // D_k:=C_k (1. summation step) for (k=0; k <= deg; k++) { for (j=0; j < p; j++) for (i=0; i < n; i++) D[j][i][k]=C[j][i][k]; // add sum if necessary if (k >= 1) { for (l=1; l<=k; l++) for (jp=0; jp=1) { double x; for (l = 1; l <= k; l++) { for (ip = 0; ip < n; ip++) { x = 0.0; for (kp = 0; kp < n; kp++) { x+=C[kp][k-l]*B[kp][ip][l-1]; }; D[ip][k]+= Fak*x; }; }; }; }; }; /** Helper function for calculation of Lie-brackets (solution of the adjoint variational equation) * * @param n Number of columns of B (number of inputs) * @param deg Order of derivative * @param ***A Total derivative of A * @retval ***Bs Solution of adjoint variational equation */ void accadj(int n, int deg, double ***A, double ***Bs) { int i, j, k, l, ip, jp, kp; // (1. summation step) for (k = 0; k <= deg; k++) { for (j = 0; j < n; j++) { for (i = 0; i < n; i++) { Bs[j][i][k] = -A[i][j][k]/(k+1); } } // add sum if necessary if (k >= 1) { double x = 0.0; for (l = 1; l <= k; l++) { for (jp = 0; jp < n; jp++) { for (ip = 0; ip < n; ip++) { x = 0.0; for (kp = 0; kp < n; kp++) { x+=A[kp][jp][k-l]*Bs[kp][ip][l-1]; }; Bs[jp][ip][k] -= x/(k+1); }; }; }; }; }; }; /** Calculates the Lie-derivative along a co vector field * * @param n Number of rows and columns * @param d Order of derivative (d) * @param Bs Solution of adjoint variational equation (Bs[n][n][d]) * @param b Taylor-coefficients of output mapping (b[n][d]) * @retval result Lie derivative along co-vector field (result[n][d]) */ void accbrac(int n, int d, double ***Bs, double **b, double **result) { int i, j, k, l, jp, kp; // factorial int Fak = 1; // formula 3.58 for (k = 0; k <= d; k++) { if(k == 0) Fak = 1; else Fak = Fak*k; for (j = 0; j < n; j++) { for (i = 0; i < n; i++) { result[i][k] = Fak*b[i][k]; } if(k >= 1) { double x; for (l = 1; l <= k; l++) { for (jp = 0; jp < n; jp++) { x = 0.0; for (kp = 0; kp < n; kp++) { x+=Bs[kp][jp][l-1]*b[kp][k-l]; } result[jp][k]+=Fak*x; }; }; }; }; }; }; /** Computes the Lie derivative of smooth map h : D -> R^m along a vector field f : D -> R^n * \param Tape_F tape identification of vector field f * \param Tape_H tape identification of vector field h * \param n number of independent variables n * \param m number of dependent variables m * \param x0 values of independent variables x0 (dimension [n]) * \param d highest derivative degree d * \param result resulting Lie derivatives of vectorial scalar fields (dimension [m][d+1]) */ int lie_scalarcv(short Tape_F, short Tape_H, short n, short m, double* x0, short d, double** result) { double** X = myalloc2(n, d+1); // Taylorcoeff. expansion x(t) double** Y = myalloc2(m, d+1); // Taylorcoeff. expansion y(t) double* x = myalloc1(n); double* y = myalloc1(m); int i=0, j=0, k=0; double Fak = 1.0; for (i = 0; i < n; i++) { X[i][0] = x0[i]; }; //see odedrivers forodec(Tape_F, n, 1.0, 0, d, X); //prepare for input for (i = 0; i < n; i++) { x[i] = X[i][0]; for (k = 0; k < d; k++) X[i][k] = X[i][k+1]; } hos_forward(Tape_H, m, n, d, 0, x, X, y, Y); //postprocess output of hos_forward for (i=0; i 0; k--) { Y[i][k] = Y[i][k-1]; }; Y[i][0] = y[i]; }; // prepare output for lie_Scalar for(j=0;j R^m along vector field f : D -> R^n * \param Tape_F tape identification of vector field f * \param Tape_H tape identification of scalar field h * \param n number of independent variables n and m = 1 * \param x0 values of independent variables x0 (dimension [n]) * \param d highest derivative degree d * \retval result resulting Lie derivatives of a scalar field (dimension [d+1]) */ int lie_scalarc(short Tape_F, short Tape_H, short n, double* x0, short d, double* result) { int rc= -1; short m = 1, i=0; double** Temp = myalloc2(m, d+1); rc = lie_scalarcv(Tape_F, Tape_H, n, m, x0, d, Temp); for (i = 0; i <= d; i++) { result[i] = Temp[0][i]; } myfree2(Temp); return rc; } /** Calculates the jacobians of the Lie derivatives of scalar fields h : D -> R^m * \param Tape_F tape identification of vector field f * \param Tape_H tape identification of vector field h * \param n number of independent variables n * \param m number of dependent variables m * \param x0 values of independent variables x0 (dimension [n]) * \param d highest derivative degree d * \retval result resulting jacobians of Lie derivatives of vectorial scalar fields (dimension [m][n][d+1]) */ int lie_gradientcv(short Tape_F, short Tape_H, short n, short m, double* x0, short d, double*** result) { double **X=myalloc2(n,d+1); double **Y=myalloc2(m,d+1); double ***Pc=myalloc3(m,n,d+1); double ***A=myalloc3(n,n,d); double ***B=myalloc3(n,n,d); double ***D=myalloc3(m,n,d+1); double* x = myalloc1(n); double* y = myalloc1(m); double* xp = myalloc1(n); double* yp = myalloc1(m); static int depax_m,depax_n; static double** In; static double** Im; int i=0, j=0, l=0, k=0, rc=-1; double Fak=1.0; for (i = 0; i < n; i++) X[i][0] = x0[i]; forodec(Tape_F, n, 1.0, 0, d, X); if (n adolc_compsize depax_n) { if (depax_n) myfreeI2(depax_n,In); In = myallocI2(depax_n = n); } if (m adolc_compsize depax_m) { if (depax_m) myfreeI2(depax_m,Im); Im = myallocI2(depax_m = m); } hov_reverse(Tape_F,n,n,d-1,n,In,A,0);// explanation in interfaces.cpp accodec(n, 1.0, d-1, A, B, 0); // explanation in odedrivers.c //prepare for input for (i=0; i R * * \param Tape_F tape identification of vector field f * \param Tape_H tape identification of vector field h * \param n number of independent variables n * \param x0 values of independent variables x0 (dimension [n]) * \param d highest derivative degree d * \retval result resulting jacobians of Lie derivatives of a scalar field (dimension [n][d+1]) */ int lie_gradientc(short Tape_F, short Tape_H, short n, double* x0, short d, double** result) { int rc= -1; short m = 1, i=0, j=0; double*** Temp = myalloc3(m, n, d+1); rc = lie_gradientcv(Tape_F, Tape_H, n, m, x0, d, Temp); for(i=0; i (R^m)* along the vector field f : D -> R^n * * \param Tape_F tape identification of vector field f * \param Tape_W tape identification of covector field h * \param n number of independent variables n * \param x0 values of independent variables x0 (dimension [n]) * \param d highest derivative degree d * \retval result resulting Lie derivatives of a covector field (dimension [n][d+1]) */ int lie_covector( short int Tape_F, short int Tape_W, short int n, double* x0, short int d, double** result) { int m=n; double** X = myalloc2(n, d+1); // Taylorcoeff. expansion x(t) double** Y = myalloc2(m, d+1); // Taylorcoeff. expansion y(t) double***A = myalloc3(n, n, d); double***B = myalloc3(n, n, d+1); double* x = myalloc1(n); double* y = myalloc1(m); double* xp = myalloc1(n); double* yp = myalloc1(m); int i=0, k=0; static int depax_m,depax_n; static double** In; static double** Im; for (i = 0; i < n; i++) X[i][0] = x0[i]; forodec(Tape_F, n, 1.0, 0, d, X); if (n adolc_compsize depax_n) { if (depax_n) myfreeI2(depax_n,In); In = myallocI2(depax_n = n); } if (m adolc_compsize depax_m) { if (depax_m) myfreeI2(depax_m,Im); Im = myallocI2(depax_m = m); } hov_reverse(Tape_F,n,n,d-1,n,In,A,0); // explanation in interfaces.cpp //prepare for input for (i=0; i0; k--) Y[i][k] = Y[i][k-1]; Y[i][0] = y[i]; } accodec(n, 1.0, d-1, A, B, 0); // explanation in odedrivers.c acccov(n, d, B, Y, result); myfree2(X); myfree2(Y); myfree3(A); myfree3(B); myfree1(x); myfree1(y); myfree1(xp); myfree1(yp); return -1; } /** Calculates the iterated Lie derivatives (Lie brackets) of the vector field g : D -> R^n along the vector field f : D -> R^n * * \param Tape_F tape identification of vector field f * \param Tape_G tape identification of vector field g * \param n number of independent variables n * \param x0 values of independent variables x0 (dimension [n]) * \param d highest derivative degree d */ int lie_bracket(short int Tape_F, short int Tape_G, short int n, double* x0, short int d, double** result) { int m = n; double **X = myalloc2(n, d+2); // Taylorcoeff. expansion x(t) double **Y = myalloc2(m, d+2); // Taylorcoeff. expansion y(t) double ***A = myalloc3(n, n, d+1); double ***Xs = myalloc3(n, n, d+1); double* y = myalloc1(m); int i, k; //static identity matrix for hov_reverse static int depax_n = 0; static double** In = NULL; for (i = 0; i < n; i++) { X[i][0] = x0[i]; }; forodec(Tape_F, n, 1.0, 0, d+1, X); // for hov_reverse if (n > depax_n) { if (depax_n) { myfreeI2(depax_n, In); }; In = myallocI2(depax_n = n); } hov_reverse(Tape_F, n, n, d, n, In, A, 0); //prepare for input for (i = 0; i < n; i++) { for (k = 0; k < d; k++) { X[i][k] = X[i][k+1]; } } hos_forward(Tape_G, m, n, d+1, d+2, x0, X, y, Y); //postprocess output of hos_forward for (i = 0; i < m; i++) { for (k = d; k > 0; k--) { Y[i][k] = Y[i][k-1]; } Y[i][0] = y[i]; } accadj(n, d, A, Xs); accbrac(n, d, Xs, Y, result); myfree1(y); myfree2(X); myfree2(Y); myfree3(A); myfree3(Xs); return -1; }; ADOL-C-2.6.3/ADOL-C/src/lie/Makefile.in0000644000175200017520000005155312562262246015413 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ADOL-C/src/lie DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) liblie_la_LIBADD = am_liblie_la_OBJECTS = adolc_lie_c.lo adolc_lie.lo liblie_la_OBJECTS = $(am_liblie_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/ADOL-C/src depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(liblie_la_SOURCES) DIST_SOURCES = $(liblie_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_LDFLAGS = -no-undefined AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src MAINTAINERCLEANFILES = Makefile.in *~ *.orig noinst_LTLIBRARIES = liblie.la liblie_la_SOURCES = adolc_lie_c.c adolc_lie.cpp all: all-am .SUFFIXES: .SUFFIXES: .c .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/src/lie/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/src/lie/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } liblie.la: $(liblie_la_OBJECTS) $(liblie_la_DEPENDENCIES) $(EXTRA_liblie_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(liblie_la_OBJECTS) $(liblie_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adolc_lie.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adolc_lie_c.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/src/storemanager.h0000644000175200017520000002175212672541240015427 0ustar coincoin// -*- c++ -*- hello emacs... /*---------------------------------------------------------------------------- ADOL-C-- Automatic Differentiation by Overloading in C++ - simplified File: storemanager.h Revision: $Id: storemanager.h 683 2016-03-17 14:43:44Z kulshres $ Contents: storemanager.h contains definitions of abstract interface class StoreManager and some derived classes implementing the desired functionality. Copyright (c) 2006 Johannes Willkomm 2011-2013 Kshitij Kulshreshtha 2012 Benjamin Letschert 2013 Jean Utke This file is part of ADOL-C. The classes StoreManagerXYZ basically takes the global double *store pointer into their obhut and implement next_loc and free_loc. They basic idea is taken from "The C++ Programming Language" by Bjarne Stroustrup, from the chapter 19 on iterators and allocators. To understand how and why they work do the following: 1) Have a look at StoreManagerInSitu and convince yourself that it is exactly the same as the solution presented in the Stroustrup book, except that we always have just one big array instead of a linked list of chunks. This means in particular that we have to copy the values from the old array into the lower half of the new one (we always double the size). 2) Have a look at StoreManagerLocint and convince yourself that these do the same as StoreManagerInSitu except that the linked list of free slots is maintained in a completely different portion of memory. This means the values in freed slots remain untouched until they are allocated again. 3) Have a look a class StoreManagerLocintBlock. This class uses a list of of free blocks of different sizes instead of free locations. class StoreManagerInSitu An unsafe implementation is provided as well, but commented out. It does not use the indexFeld array which saves between 25% and 50% memory relative to the above safe implementation. It is most closely modelled after the example found in the Stroustrup book. It appears that it works very well, if one does not use the trace_on(tag, 1); ... trace_off(); reverse(); way of using ADOL-C. If the first sweep is forward it works fine. Therefore I left it in here as a comment so an interested user with acute main memory scarcity may give it a try. History: 20120427 bl: add blocking store management 20110208 kk: incorporated in ADOL-C; moved some code arround 20060507 jw: begin ----------------------------------------------------------------------------*/ #ifndef ADOL_C__STOREMANAGER_H #define ADOL_C__STOREMANAGER_H #if defined(ADOLC_INTERNAL) # if HAVE_CONFIG_H # include "config.h" # endif #endif #include #if defined(HAVE_BOOST_POOL_POOL_ALLOC_HPP) && defined(HAVE_BOOST_SYSTEM) #include #define USE_BOOST_POOL 1 #else #define USE_BOOST_POOL 0 #endif #include class GlobalTapeVarsCL; extern "C" void checkInitialStoreSize(GlobalTapeVarsCL* gtv); class StoreManager { friend void checkInitialStoreSize(GlobalTapeVarsCL* gtv); protected: static size_t const initialSize = 4; double myGcTriggerRatio; size_t myGcTriggerMaxSize; virtual void grow(size_t mingrow = 0) = 0; public: StoreManager() : myGcTriggerRatio(1.5), myGcTriggerMaxSize(initialSize) {} virtual ~StoreManager() {} virtual locint next_loc() = 0; virtual void free_loc(locint) = 0; virtual void ensure_block(size_t n) = 0; void setStoreManagerControl(double gcTriggerRatio, size_t gcTriggerMaxSize) { myGcTriggerRatio=gcTriggerRatio; myGcTriggerMaxSize=gcTriggerMaxSize;} double gcTriggerRatio() const {return myGcTriggerRatio;} size_t gcTriggerMaxSize() const {return myGcTriggerMaxSize;} // // effectively the current size of the store array virtual size_t maxSize() const = 0; // // the number of slots currently in use virtual size_t size() const = 0; }; class StoreManagerLocint : public StoreManager { protected: double * &storePtr; locint * indexFree; locint head; size_t &maxsize; size_t ¤tfill; virtual void grow(size_t mingrow = 0); public: StoreManagerLocint(double * &storePtr, size_t &size, size_t &numlives); StoreManagerLocint(const StoreManagerLocint *const stm, double * &storePtr, size_t &size, size_t &numLives); virtual ~StoreManagerLocint(); virtual inline size_t size() const { return currentfill; } virtual inline size_t maxSize() const { return maxsize; } virtual inline bool realloc_on_next_loc() const { return (head == 0); } virtual locint next_loc(); virtual void free_loc(locint loc); virtual void ensure_block(size_t n) {} }; class StoreManagerLocintBlock : public StoreManager { protected: double * &storePtr; struct FreeBlock { locint next; // next location size_t size; // number of following free locations FreeBlock(): next(0), size(0) {} FreeBlock(const struct FreeBlock &block) : next(block.next),size(block.size) {} FreeBlock(const locint& n, const size_t& s) : next(n), size(s) {} bool operator<(const struct FreeBlock& b) const { return (next < b.next); } }; std::forward_list #endif > indexFree; size_t &maxsize; size_t ¤tfill; void consolidateBlocks(); #ifdef ADOLC_LOCDEBUG unsigned int ensure_blockCallsSinceLastConsolidateBlocks; #endif /** * when minGrow is specified we asssume that we have already * search the blocks and found no block with minGrow locations in it */ virtual void grow(size_t minGrow=0 ); public: StoreManagerLocintBlock(double * &storePtr, size_t &size, size_t &numlives); StoreManagerLocintBlock(const StoreManagerLocintBlock *const stm, double * &storePtr, size_t &size, size_t &numLives); virtual ~StoreManagerLocintBlock(); virtual inline size_t size() const { return currentfill; } virtual inline size_t maxSize() const { return maxsize; } virtual locint next_loc(); virtual void free_loc(locint loc); virtual void ensure_block(size_t n); }; #if 0 /* This implementation is unsafe in that using tace_on with keep=1 and reverse mode directly afterwards will yield incorrect results. For all other purposes it seem to work just fine, so it's left here for reference as a comment. */ /* unsafe - use with care */ class StoreManagerInSitu : public StoreManager { // static size_t const initialeGroesse = 512; protected: double * &storePtr; struct Link { struct Link *next; }; Link *head; size_t groesse; size_t anzahl; public: size_t maxIndexUsed; StoreManager(double * &storePtr) : storePtr(storePtr), head(0), groesse(initialeGroesse), anzahl(0), maxIndexUsed(0) { // while a place in store is unused we want to place // a Link stucture (i.e. a pointer) there assert(sizeof(double) >= sizeof(void*)); assert(sizeof(double) >= sizeof(Link)); std::cerr << "StoreManager::StoreManager()\n"; } virtual ~StoreManager() { if (storePtr) { delete [] storePtr; storePtr = 0; } std::cerr << "StoreManager::~StoreManager()\n"; } virtual inline size_t size() const { return anzahl; } virtual inline size_t maxSize() const { return groesse; } virtual locint next_loc(size_t n = 1) { assert(n == 1); if (head == 0) { grow(); } assert(head); double * const dPtr = reinterpret_cast(head); head = head->next; ++anzahl; locint const result = dPtr - storePtr; maxIndexUsed = std::max((locint)maxIndexUsed, result); return result; } virtual void free_loc(locint loc) { assert(loc < groesse); Link *returned = reinterpret_cast(storePtr + loc); returned->next = head; head = returned; --anzahl; } private: void grow() { size_t const alteGroesse = groesse; groesse *= 2; assert(alteGroesse == initialeGroesse or size() == alteGroesse); std::cerr << "StoreManager::grow(): increase size to " << groesse << "\n"; double *const oldStore = storePtr; std::cerr << "StoreManager::grow(): allocate " << groesse * sizeof(double) << " B\n"; storePtr = new double[groesse]; size_t i = 0; if (alteGroesse != initialeGroesse) { // nicht beim ersten Mal std::cerr << "StoreManager::grow(): copy values\n"; for ( ; i < alteGroesse; ++i) { storePtr[i] = oldStore[i]; } std::cerr << "StoreManager::grow(): free " << alteGroesse * sizeof(double) << " B\n"; delete [] oldStore; } head = reinterpret_cast(storePtr + i); for ( ; i < groesse-1; ++i) { reinterpret_cast(storePtr + i)->next = reinterpret_cast(storePtr + i + 1); } reinterpret_cast(storePtr + i)->next = 0; } }; #endif /* 0 */ #endif /* ADOL_C__STOREMANAGER_H */ ADOL-C-2.6.3/ADOL-C/src/buffer_temp.h0000644000175200017520000001023112526602070015221 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: struct_buf.h Revision: $Id: buffer_temp.h 607 2015-05-19 09:36:56Z kulshres $ Contents: - template class for linked list of Type buffers with constant length per buffer - intended to be used with structs Copyright (c) Andreas Kowarz, Kshitij Kulshreshtha, Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #if !defined(ADOLC_STRUCT_BUF_H) #define ADOLC_STRUCT_BUF_H 1 #include #include "taping_p.h" #if defined(__cplusplus) /****************************************************************************/ /* This is all C++ */ #include #define BUFFER Buffer #define BUFFER_TEMPLATE template typedef locint IndexType; BUFFER_TEMPLATE class Buffer { typedef void (*InitFunctionPointer) (SubBufferElement *subBufferElement); static void zeroAll(SubBufferElement* subBufferElement); typedef struct SubBuffer { SubBufferElement elements[_subBufferSize]; struct SubBuffer *nextSubBuffer; SubBuffer(); } SubBuffer; public: inline Buffer() { firstSubBuffer = NULL; numEntries = 0; subBufferSize = _subBufferSize; initFunction = zeroAll; } inline Buffer(InitFunctionPointer _initFunction) { firstSubBuffer = NULL; numEntries = 0; subBufferSize = _subBufferSize; initFunction = _initFunction; } inline ~Buffer(); inline void init(InitFunctionPointer _initFunction) { initFunction = _initFunction; } SubBufferElement *append(); SubBufferElement *getElement(IndexType index); private: SubBuffer *firstSubBuffer; InitFunctionPointer initFunction; IndexType subBufferSize; IndexType numEntries; }; BUFFER_TEMPLATE void BUFFER::zeroAll(SubBufferElement* subBufferElement) { memset(subBufferElement,0,sizeof(*subBufferElement)); } BUFFER_TEMPLATE BUFFER::SubBuffer::SubBuffer() { memset(elements,0,sizeof(SubBufferElement)*_subBufferSize); nextSubBuffer = NULL; } BUFFER_TEMPLATE BUFFER::~Buffer() { SubBuffer *tmpSubBuffer = NULL; while (firstSubBuffer != NULL) { tmpSubBuffer = firstSubBuffer; firstSubBuffer = firstSubBuffer->nextSubBuffer; for(int i = 0; i < subBufferSize; i++) if (tmpSubBuffer->elements[i].allmem != NULL) free(tmpSubBuffer->elements[i].allmem); delete tmpSubBuffer; } } BUFFER_TEMPLATE SubBufferElement *BUFFER::append() { SubBuffer *currentSubBuffer=firstSubBuffer, *previousSubBuffer=NULL; IndexType index, tmp=numEntries; while (tmp>=subBufferSize) { previousSubBuffer=currentSubBuffer; currentSubBuffer=currentSubBuffer->nextSubBuffer; tmp-=subBufferSize; } if (currentSubBuffer==NULL) { currentSubBuffer=new SubBuffer; if (firstSubBuffer==NULL) firstSubBuffer=currentSubBuffer; else previousSubBuffer->nextSubBuffer=currentSubBuffer; currentSubBuffer->nextSubBuffer=NULL; } index=tmp; currentSubBuffer->elements[index].allmem=NULL; if (initFunction!=NULL) initFunction(&(currentSubBuffer->elements[index])); currentSubBuffer->elements[index].index=numEntries; ++numEntries; return ¤tSubBuffer->elements[index]; } BUFFER_TEMPLATE SubBufferElement *BUFFER::getElement(IndexType index) { SubBuffer *currentSubBuffer=firstSubBuffer; if (index>=numEntries) fail(ADOLC_BUFFER_INDEX_TO_LARGE); while (index>=subBufferSize) { currentSubBuffer=currentSubBuffer->nextSubBuffer; index-=subBufferSize; } return ¤tSubBuffer->elements[index]; } #endif /* __cplusplus */ #endif /* ADOLC_STRUCT_BUF_H */ ADOL-C-2.6.3/ADOL-C/src/nonl_ind_old_forward_t.c0000644000175200017520000000150712106465576017445 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: nonl_ind_forward_t.c Revision: $Id: nonl_ind_old_forward_t.c 408 2013-02-12 16:19:10Z kulshres $ Contents: nonl_ind_forward_t (propagation of nonlinear index domains) Copyright (c) Andrea Walther, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _NONLIND_OLD_ 1 #define _INDOPRO_ 1 #define _TIGHT_ 1 #include #undef _INDO_ #undef _NONLIND_OLD_ #undef _INDOPRO_ #undef _TIGHT_ ADOL-C-2.6.3/ADOL-C/src/advector.cpp0000644000175200017520000004513012633764260015104 0ustar coincoin/* --------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ Revision: $Id: advector.cpp 659 2015-12-15 10:17:20Z kulshres $ Contents: advector.cpp contains a vector implementation that is able to trace subscripting operations. Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ #include #include #include "taping_p.h" #include #include "oplate.h" #include "dvlparms.h" using std::vector; adubref::adubref( locint lo, locint ref ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; location = lo; refloc = (size_t)trunc(fabs(ADOLC_GLOBAL_TAPE_VARS.store[location])); if (ref != refloc) { fprintf(DIAG_OUT,"ADOL-C error: strange construction of an active" " vector subscript reference\n(passed ref = %d, stored refloc = %d)\n",ref,refloc); adolc_exit(-2,"",__func__,__FILE__,__LINE__); } isInit = true; } adubref::~adubref() { #ifdef adolc_overwrite if (isInit) free_loc(location); #endif } adubref::operator adub() const { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location); put_op(ref_copyout); ADOLC_PUT_LOCINT(location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[refloc]; return locat; } adub adubref::operator++( int ) { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location); put_op(ref_copyout); ADOLC_PUT_LOCINT(location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[refloc]; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(ref_incr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]++; return locat; } adub adubref::operator--( int ) { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,location); put_op(ref_copyout); ADOLC_PUT_LOCINT(location); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[refloc]; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(ref_decr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]--; return locat; } adubref& adubref::operator++() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(ref_incr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]++; return *this; } adubref& adubref::operator--() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,location); put_op(ref_decr_a); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]--; return *this; } adubref& adubref::operator = ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { if (coval == 0) { put_op(ref_assign_d_zero); ADOLC_PUT_LOCINT(location); // = res } else if (coval == 1.0) { put_op(ref_assign_d_one); ADOLC_PUT_LOCINT(location); // = res } else { put_op(ref_assign_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] = coval; return *this; } adubref& adubref::operator = ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint x_loc = x.loc(); if (location!=x_loc) /* test this to avoid for x=x statements adjoint(x)=0 in reverse mode */ { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(location,x.location); put_op(ref_assign_a); ADOLC_PUT_LOCINT(x_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc]=ADOLC_GLOBAL_TAPE_VARS.store[x_loc]; } return *this; } adubref& adubref::operator = ( const adubref& x ) { *this = adub(x); return *this; } adubref& adubref::operator <<= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numInds++; put_op(ref_assign_ind); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] = coval; return *this; } void adubref::declareIndependent() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numInds++; put_op(ref_assign_ind); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } } adubref& adubref::operator >>= (double& coval) { adub(*this) >>= coval; return *this; } void adubref::declareDependent() { adub(*this).declareDependent(); } adubref& adubref::operator += ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_plus_d,location,coval); put_op(ref_eq_plus_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] += coval; return *this; } adubref& adubref::operator += ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_plus_a,location,y.location); put_op(ref_eq_plus_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] += ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } adubref& adubref::operator -= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_min_d,location,coval); put_op(ref_eq_min_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] -= coval; return *this; } adubref& adubref::operator -= ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_min_a,location,y.location); put_op(ref_eq_min_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] -= ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } adubref& adubref::operator *= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_mult_d,location,coval); put_op(ref_eq_mult_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] *= coval; return *this; } adubref& adubref::operator *= ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_mult_a,location,y.location); put_op(ref_eq_mult_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[refloc]); } ADOLC_GLOBAL_TAPE_VARS.store[refloc] *= ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } void condassign( adubref& res, const badouble &cond, const badouble &arg1, const badouble &arg2 ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign(res.location,cond.location,arg1.location, // arg2.location); put_op(ref_cond_assign); ADOLC_PUT_LOCINT(cond.loc()); // = arg ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]); ADOLC_PUT_LOCINT(arg1.loc()); // = arg1 ADOLC_PUT_LOCINT(arg2.loc()); // = arg2 ADOLC_PUT_LOCINT(res.location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.refloc]); } if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] > 0) ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg1.loc()]; else ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg2.loc()]; } void condassign( adubref& res, const badouble &cond, const badouble &arg ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign2(res.location,cond.location,arg.location); put_op(ref_cond_assign_s); ADOLC_PUT_LOCINT(cond.loc()); // = arg ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]); ADOLC_PUT_LOCINT(arg.loc()); // = arg1 ADOLC_PUT_LOCINT(res.location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.refloc]); } if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] > 0) ADOLC_GLOBAL_TAPE_VARS.store[res.refloc] = ADOLC_GLOBAL_TAPE_VARS.store[arg.loc()]; } advector::blocker::blocker(size_t n) { ensureContiguousLocations(n); } bool advector::nondecreasing() const { bool ret = true; double last = - ADOLC_MATH_NSP::numeric_limits::infinity(); vector::const_iterator iter = data.begin(); for ( ; iter != data.end() && ret ; iter++) { ret = ret && ( iter->value() >= last ); last = iter->value(); } return ret; } adub advector::operator[](const badouble& index) const { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; size_t idx = (size_t)trunc(fabs(ADOLC_GLOBAL_TAPE_VARS.store[index.loc()])); locint locat = next_loc(); size_t n = data.size(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(subscript); ADOLC_PUT_LOCINT(index.loc()); ADOLC_PUT_LOCINT(locat); ADOLC_PUT_VAL(n); ADOLC_PUT_LOCINT(data[0].loc()); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } if (idx >= n) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting n=%zu, idx=%zu\n", n, idx); ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[data[idx].loc()]; return locat; } adubref advector::operator[](const badouble& index) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; size_t idx = (size_t) trunc(fabs(ADOLC_GLOBAL_TAPE_VARS.store[index.loc()])); locint locat = next_loc(); size_t n = data.size(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(subscript_ref); ADOLC_PUT_LOCINT(index.loc()); ADOLC_PUT_LOCINT(locat); ADOLC_PUT_VAL(n); ADOLC_PUT_LOCINT(data[0].loc()); ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } if (idx >= n) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting (ref) n=%zu, idx=%zu\n", n, idx); ADOLC_GLOBAL_TAPE_VARS.store[locat] = data[idx].loc(); return adubref(locat,data[idx].loc()); } adouble advector::lookupindex(const badouble& x, const badouble& y) const { if (!nondecreasing()) { fprintf(DIAG_OUT, "ADOL-C error: can only call lookup index if advector ist nondecreasing\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); } if (y.value() < 0) { fprintf(DIAG_OUT, "ADOL-C error: index lookup needs a nonnegative denominator\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); } adouble r = 0; size_t n = data.size(); for (size_t i = 0; i < n; i++) condassign(r, x - data[i]*y, (adouble) (i+1)); return r; } void adolc_vec_copy(adouble *const dest, const adouble *const src, locint n) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (dest[n-1].loc() - dest[0].loc()!=(unsigned)n-1 || src[n-1].loc()-src[0].loc()!=(unsigned)n-1) fail(ADOLC_VEC_LOCATIONGAP); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(vec_copy); ADOLC_PUT_LOCINT(dest[0].loc()); ADOLC_PUT_LOCINT(src[0].loc()); ADOLC_PUT_LOCINT(n); for (locint i=0; i #undef _INDO_ #undef _NONLIND_ #undef _TIGHT_ ADOL-C-2.6.3/ADOL-C/src/int_reverse_t.c0000644000175200017520000000135211227420735015575 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: int_reverse_t.c Revision: $Id: int_reverse_t.c 42 2009-07-15 18:37:17Z awalther $ Contents: int_reverse (integer reverse mode tight for bit pattern propagation) Copyright (c) Andrea Walther, Christo Mitev This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INT_REV_ 1 #define _TIGHT_ 1 #include #undef _INT_REV_ #undef _TIGHT_ ADOL-C-2.6.3/ADOL-C/src/adouble_tl.cpp0000644000175200017520000000672712565247274015425 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adouble.cpp Revision: $Id$ Contents: adouble_tl.cpp contains that definitions of procedures used to define various tapeless adouble operations. These operations actually have two purposes. The first purpose is to actual compute the function, just as the same code written for double precision (single precision - complex - interval) arithmetic would. The second purpose is to compute directional derivatives in forward mode of automatic differentiation. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Benjamin Letschert This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include #include #include "dvlparms.h" using std::cout; extern "C" void adolc_exit(int errorcode, const char *what, const char* function, const char *file, int line); namespace adtl { size_t adouble::numDir = 1; enum Mode adouble::forward_mode = ADTL_FOV; size_t refcounter::refcnt = 0; /******************* i/o operations ***************************************/ ostream& operator << ( ostream& out, const adouble& a) { if (likely(adouble::_do_val() && adouble::_do_adval())) { out << "Value: " << a.val; out << " ADValues (" << adouble::numDir << "): "; FOR_I_EQ_0_LT_NUMDIR out << a.ADVAL_I << " "; out << "(a)"; } return out; } istream& operator >> ( istream& in, adouble& a) { if(likely(adouble::_do_val() && adouble::_do_adval())) { char c; do in >> c; while (c!=':' && !in.eof()); in >> a.val; unsigned int num; do in >> c; while (c!='(' && !in.eof()); in >> num; if (num>adouble::numDir) { cout << "ADOL-C error: to many directions in input\n"; adolc_exit(-1,"",__func__,__FILE__,__LINE__); } do in >> c; while (c!=':' && !in.eof()); FOR_I_EQ_0_LT_NUMDIR in >> a.ADVAL_I; do in >> c; while (c!=')' && !in.eof()); return in; } return in; } /**************** ADOLC_TRACELESS_SPARSE_PATTERN ****************************/ int ADOLC_Init_sparse_pattern(adouble *a, int n, unsigned int start_cnt) { for(unsigned int i=0; i < n; i++) { a[i].delete_pattern(); a[i].pattern.push_back( i+start_cnt ); } return 3; } int ADOLC_get_sparse_pattern(const adouble *const b, int m, unsigned int **&pat) { pat = (unsigned int**) malloc(m*sizeof(unsigned int*)); for( int i=0; i < m ; i++){ //const_cast(b[i]).pattern.sort(); //const_cast(b[i]).pattern.unique(); if ( b[i].get_pattern_size() > 0 ) { pat[i] = (unsigned int*) malloc(sizeof(unsigned int) * (b[i].get_pattern_size() +1) ); pat[i][0] = b[i].get_pattern_size(); const list& tmp_set = b[i].get_pattern(); list::const_iterator it; unsigned int l=1; for(it = tmp_set.begin() ; it != tmp_set.end() ; it++,l++) pat[i][l] = *it; } else { pat[i] = (unsigned int*) malloc(sizeof(unsigned int)); pat[i][0] =0; } } return 3; } } ADOL-C-2.6.3/ADOL-C/src/fos_forward.c0000644000175200017520000000144611227420735015244 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fos_forward.c Revision: $Id: fos_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: fos_forward (first-order-scalar forward mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOS_ 1 #define _KEEP_ 1 #include #undef _KEEP_ #undef _FOS_ ADOL-C-2.6.3/ADOL-C/src/adouble.cpp0000644000175200017520000021662212672756516014726 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: adouble.cpp Revision: $Id: adouble.cpp 687 2016-03-18 10:49:50Z kulshres $ Contents: adouble.C contains that definitions of procedures used to define various badouble, adub, and adouble operations. These operations actually have two purposes. The first purpose is to actual compute the function, just as the same code written for double precision (single precision - complex - interval) arithmetic would. The second purpose is to write a transcript of the computation for the reverse pass of automatic differentiation. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include "taping_p.h" #include #include "oplate.h" #include "dvlparms.h" using namespace std; /****************************************************************************/ /* HELPFUL FUNCTIONS */ /*--------------------------------------------------------------------------*/ void condassign( double &res, const double &cond, const double &arg1, const double &arg2 ) { res = cond > 0 ? arg1 : arg2; } /*--------------------------------------------------------------------------*/ void condassign( double &res, const double &cond, const double &arg) { res = cond > 0 ? arg : res; } /*--------------------------------------------------------------------------*/ /* The remaining routines define the badouble, adub and adouble routines. */ /*--------------------------------------------------------------------------*/ /****************************************************************************/ /* CONSTRUCTORS */ /*--------------------------------------------------------------------------*/ #if defined(ADOLC_ADOUBLE_LATEINIT) void adouble::initInternal(void) { if (isInit) return; location = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; #if defined(ADOLC_ADOUBLE_STDCZERO) if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(assign_d_zero); ADOLC_PUT_LOCINT(location); // = res } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); ADOLC_GLOBAL_TAPE_VARS.store[location] = 0.; #endif isInit = true; } #else void adouble::initInternal(void) {} #endif /*--------------------------------------------------------------------------*/ adouble::adouble() { location = next_loc(); isInit = true; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; #if defined(ADOLC_ADOUBLE_STDCZERO) if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(assign_d_zero); ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = 0.; #endif } /*--------------------------------------------------------------------------*/ adouble::adouble( double coval ) { location = next_loc(); isInit = true; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { if (coval == 0) { put_op(assign_d_zero); ADOLC_PUT_LOCINT(location); // = res } else if (coval == 1.0) { put_op(assign_d_one); ADOLC_PUT_LOCINT(location); // = res } else { put_op(assign_d); ADOLC_PUT_LOCINT(location); // = res ADOLC_PUT_VAL(coval); // = coval } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = coval; } /*--------------------------------------------------------------------------*/ adouble::adouble( const adouble& a ) { location = next_loc(); isInit = true; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(assign_a); ADOLC_PUT_LOCINT(a.location); // = arg ADOLC_PUT_LOCINT(location); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[location]); } ADOLC_GLOBAL_TAPE_VARS.store[location] = ADOLC_GLOBAL_TAPE_VARS.store[a.location]; } /*--------------------------------------------------------------------------*/ adouble::adouble( const adub& a ) { location = next_loc(); isInit = true; locint a_loc = a.loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; int upd = 0; /* 981020 olvo skip upd_resloc(..) if no tracing performed */ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) upd = upd_resloc_check(a_loc,loc()); if (upd) { /* olvo 980708 new n2l & 980921 changed interface */ free_loc(location); location = a_loc; const_cast(a).isInit = false; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(loc(),a_loc); put_op(assign_a); ADOLC_PUT_LOCINT(a_loc); // = arg ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] = ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; } } /****************************************************************************/ /* DESTRUCTORS */ /*--------------------------------------------------------------------------*/ adouble::~adouble() { #ifdef adolc_overwrite if (isInit) free_loc(location); #endif } /*--------------------------------------------------------------------------*/ adub::~adub() { #ifdef adolc_overwrite if (isInit) free_loc(location); #endif } /****************************************************************************/ /* HELPERS */ adub* adubp_from_adub(const adub& a) { locint locat = a.loc(); const_cast(a).isInit = false; adub *retp = new adub(locat); return retp; } /****************************************************************************/ /* VALUE */ /*--------------------------------------------------------------------------*/ double badouble::getValue() const { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_GLOBAL_TAPE_VARS.store[loc()]; } badouble::operator double const&() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_GLOBAL_TAPE_VARS.store[loc()]; } badouble::operator double&&() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return (double&&)ADOLC_GLOBAL_TAPE_VARS.store[loc()]; } badouble::operator double() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return ADOLC_GLOBAL_TAPE_VARS.store[loc()]; } void badouble::setValue( const double x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; ADOLC_GLOBAL_TAPE_VARS.store[loc()]=x; } /****************************************************************************/ /* ASSIGNMENTS */ /*--------------------------------------------------------------------------*/ /* Assign an adouble variable a constant value. */ badouble& badouble::operator = ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { if (coval == 0) { put_op(assign_d_zero); ADOLC_PUT_LOCINT(loc()); // = res } else if (coval == 1.0) { put_op(assign_d_one); ADOLC_PUT_LOCINT(loc()); // = res } else { put_op(assign_d); ADOLC_PUT_LOCINT(loc()); // = res ADOLC_PUT_VAL(coval); // = coval } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] = coval; return *this; } /*--------------------------------------------------------------------------*/ /* Assign an adouble variable a constant value. */ adouble& adouble::operator = ( double coval ) { this->loc(); // call for late init (*this).badouble::operator=(coval); return (*this); } /*--------------------------------------------------------------------------*/ /* Assign an adouble variable to an independent value. */ badouble& badouble::operator <<= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numInds++; put_op(assign_ind); ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] = coval; return *this; } void badouble::declareIndependent() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numInds++; put_op(assign_ind); ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } } /*--------------------------------------------------------------------------*/ /* Assign a float variable from a dependent adouble value. */ badouble& badouble::operator >>= ( double& coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numDeps++; put_op(assign_dep); ADOLC_PUT_LOCINT(loc()); // = res } coval = double (ADOLC_GLOBAL_TAPE_VARS.store[loc()]); return *this; } void badouble::declareDependent() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { ADOLC_CURRENT_TAPE_INFOS.numDeps++; put_op(assign_dep); ADOLC_PUT_LOCINT(loc()); // = res } } /*--------------------------------------------------------------------------*/ /* Assign an Badouble variable an Badouble value. */ badouble& badouble::operator = ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint x_loc = x.loc(); if (loc()!=x_loc) /* test this to avoid for x=x statements adjoint(x)=0 in reverse mode */ { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(loc(),x.loc()); put_op(assign_a); ADOLC_PUT_LOCINT(x_loc); // = arg ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()]=ADOLC_GLOBAL_TAPE_VARS.store[x_loc]; } return *this; } /*--------------------------------------------------------------------------*/ /* Assign an Badouble variable an Badouble value. */ adouble& adouble::operator = ( const badouble& x ) { this->loc(); // call for late init (*this).badouble::operator=(x); return (*this); } /*--------------------------------------------------------------------------*/ /* Assign an adouble variable an adouble value. */ adouble& adouble::operator = ( const adouble& x ) { this->loc(); // call for late init x.loc(); // cal for late init (*this).badouble::operator=(x); return (*this); } /*--------------------------------------------------------------------------*/ /* Assign an adouble an adub */ /* olvo 980517 new version griewank */ badouble& badouble::operator = ( const adub& a ) { locint a_loc = a.loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; int upd = 0; /* 981020 olvo skip upd_resloc(..) if no tracing performed */ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) upd = upd_resloc(a_loc,loc()); if (upd) { /* olvo 980708 new n2l & 980921 changed interface */ revreal tempVal = ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_OVERWRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()],&ADOLC_GLOBAL_TAPE_VARS.store[a_loc]); ADOLC_GLOBAL_TAPE_VARS.store[loc()] = tempVal; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(loc(),a_loc); put_op(assign_a); ADOLC_PUT_LOCINT(a_loc); // = arg ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] = ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; } return *this; } /*--------------------------------------------------------------------------*/ /* Assign an adouble an adub */ /* olvo 980517 new version griewank */ adouble& adouble::operator = ( const adub& a ) { this->loc(); // call for late init (*this).badouble::operator=(a); return (*this); } /****************************************************************************/ /* INPUT / OUTPUT */ /*--------------------------------------------------------------------------*/ /* Output an adouble value !!! No tracing of this action */ std::ostream& operator << ( std::ostream& out, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; return out << ADOLC_GLOBAL_TAPE_VARS.store[y.loc()] << "(a)" ; } /*--------------------------------------------------------------------------*/ /* Input adouble value */ std::istream& operator >> ( std::istream& in, const badouble& y ) { double coval; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; in >> coval; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_d(y.loc(),coval); if (coval == 0) { put_op(assign_d_zero); ADOLC_PUT_LOCINT(y.loc()); // = res } else if (coval == 1.0) { put_op(assign_d_one); ADOLC_PUT_LOCINT(y.loc()); // = res } else { put_op(assign_d); ADOLC_PUT_LOCINT(y.loc()); // = res ADOLC_PUT_VAL(coval); // = coval } ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[y.loc()] = coval; return in; } /****************************************************************************/ /* INCREMENT / DECREMENT */ /*--------------------------------------------------------------------------*/ /* Postfix increment */ adub adouble::operator++( int ) { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,loc()); put_op(assign_a); ADOLC_PUT_LOCINT(loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[loc()]; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,loc()); put_op(incr_a); ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()]++; return locat; } /*--------------------------------------------------------------------------*/ /* Postfix decrement */ adub adouble::operator--( int ) { locint locat = next_loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(locat,loc()); put_op(assign_a); ADOLC_PUT_LOCINT(loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[loc()]; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(decr_a,loc()); put_op(decr_a); ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()]--; return locat; } /*--------------------------------------------------------------------------*/ /* Prefix increment */ badouble& adouble::operator++() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(incr_a,loc()); put_op(incr_a); ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()]++; return *this; } /*--------------------------------------------------------------------------*/ /* Prefix decrement */ badouble& adouble::operator--() { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_incr_decr_a(decr_a,loc()); put_op(decr_a); ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()]--; return *this; } /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ /* Adding a floating point to an adouble */ badouble& badouble::operator += ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_plus_d,loc(),coval); put_op(eq_plus_d); ADOLC_PUT_LOCINT(loc()); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] += coval; return *this; } /*--------------------------------------------------------------------------*/ /* Subtracting a floating point from an adouble */ badouble& badouble::operator -= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_min_d,loc(),coval); put_op(eq_min_d); ADOLC_PUT_LOCINT(loc()); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] -= coval; return *this; } /*--------------------------------------------------------------------------*/ /* Add an adouble to another adouble */ badouble& badouble::operator += ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_plus_a,loc(),y.loc()); put_op(eq_plus_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] += ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } /*--------------------------------------------------------------------------*/ /* olvo 991122 new version for y += x1 * x2; */ badouble& badouble::operator += ( const adub& a ) { locint a_loc = a.loc(); ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; int upd = 0; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { upd = upd_resloc_inc_prod(a_loc,loc(),eq_plus_prod); } if (upd) { ADOLC_GLOBAL_TAPE_VARS.store[loc()] += ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_DELETE_SCAYLOR(&ADOLC_GLOBAL_TAPE_VARS.store[a_loc]); --ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; ++ADOLC_CURRENT_TAPE_INFOS.num_eq_prod; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(loc(),a_loc); put_op(eq_plus_a); ADOLC_PUT_LOCINT(a_loc); // = arg ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] += ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; } return *this; } /*--------------------------------------------------------------------------*/ /* Subtract an adouble from another adouble */ badouble& badouble::operator -= ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_min_a,loc(),y.loc()); put_op(eq_min_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] -= ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } /*--------------------------------------------------------------------------*/ /* olvo 991122 new version for y -= x1 * x2; */ badouble& badouble::operator -= ( const adub& a ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint a_loc = a.loc(); int upd = 0; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { upd = upd_resloc_inc_prod(a_loc,loc(),eq_min_prod); } if (upd) { ADOLC_GLOBAL_TAPE_VARS.store[loc()] -= ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_DELETE_SCAYLOR(&ADOLC_GLOBAL_TAPE_VARS.store[a_loc]); --ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; ++ADOLC_CURRENT_TAPE_INFOS.num_eq_prod; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_assign_a(loc(),a_loc); put_op(eq_min_a); ADOLC_PUT_LOCINT(a_loc); // = arg ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] -= ADOLC_GLOBAL_TAPE_VARS.store[a_loc]; } return *this; } /*--------------------------------------------------------------------------*/ /* Multiply an adouble by a floating point */ badouble& badouble::operator *= ( double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_d_same_arg(eq_mult_d,loc(),coval); put_op(eq_mult_d); ADOLC_PUT_LOCINT(loc()); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] *= coval; return *this; } /*--------------------------------------------------------------------------*/ /* Multiply one adouble by another adouble*/ badouble& badouble::operator *= ( const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint y_loc = y.loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_a_same_arg(eq_mult_a,loc(),y.loc()); put_op(eq_mult_a); ADOLC_PUT_LOCINT(y_loc); // = arg ADOLC_PUT_LOCINT(loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[loc()]); } ADOLC_GLOBAL_TAPE_VARS.store[loc()] *= ADOLC_GLOBAL_TAPE_VARS.store[y_loc]; return *this; } /*--------------------------------------------------------------------------*/ badouble& badouble::operator /= (double y) { *this = *this/y; return *this; } /*--------------------------------------------------------------------------*/ badouble& badouble::operator /= (const badouble& y) { *this = *this * (1.0/y); return *this; } /****************************************************************************/ /* COMPARISON */ /*--------------------------------------------------------------------------*/ /* The Not Equal Operator (!=) */ int operator != ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v != 0); else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ADOLC_GLOBAL_TAPE_VARS.store[v.loc()] ? neq_zero : eq_zero); ADOLC_PUT_LOCINT(v.loc()); } return (ADOLC_GLOBAL_TAPE_VARS.store[v.loc()] != 0); } } /*--------------------------------------------------------------------------*/ /* The Equal Operator (==) */ int operator == ( const badouble& v, double coval) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v == 0); else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ADOLC_GLOBAL_TAPE_VARS.store[v.loc()] ? neq_zero : eq_zero); ADOLC_PUT_LOCINT(v.loc()); } return (ADOLC_GLOBAL_TAPE_VARS.store[v.loc()] == 0); } } /*--------------------------------------------------------------------------*/ /* The Less than or Equal Operator (<=) */ int operator <= ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v <= 0); else { int b = (ADOLC_GLOBAL_TAPE_VARS.store[v.loc()] <= 0); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(b ? le_zero : gt_zero); ADOLC_PUT_LOCINT(v.loc()); } return b; } } /*--------------------------------------------------------------------------*/ /* The Greater than or Equal Operator (>=) */ int operator >= ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v >= 0); else { int b = (ADOLC_GLOBAL_TAPE_VARS.store[v.loc()] >= 0); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(b ? ge_zero : lt_zero); ADOLC_PUT_LOCINT(v.loc()); } return b; } } /*--------------------------------------------------------------------------*/ /* The Greater than Operator (>) */ int operator > ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v > 0); else { int b = (ADOLC_GLOBAL_TAPE_VARS.store[v.loc()] > 0); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(b ? gt_zero : le_zero); ADOLC_PUT_LOCINT(v.loc()); } return b; } } /*--------------------------------------------------------------------------*/ /* The Less than Operator (<) */ int operator < ( const badouble& v, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (coval) return (-coval+v < 0); else { int b = (ADOLC_GLOBAL_TAPE_VARS.store[v.loc()] < 0); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(b ? lt_zero : ge_zero); ADOLC_PUT_LOCINT(v.loc()); } return b; } } /****************************************************************************/ /* SIGN OPERATORS */ /*--------------------------------------------------------------------------*/ /* olvo 980709 modified positive sign operator ??? possibly there is a better way */ adub operator + ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_pos_sign_a(locat,x.loc()); put_op(pos_sign_a); ADOLC_PUT_LOCINT(x.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; return locat; } /*--------------------------------------------------------------------------*/ /* olvo 980709 modified negative sign operator */ adub operator - ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_neg_sign_a(locat,x.loc()); put_op(neg_sign_a); ADOLC_PUT_LOCINT(x.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = -ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; return locat; } /****************************************************************************/ /* BINARY OPERATORS */ /* NOTE: each operator calculates address of temporary and returns an adub */ /*--------------------------------------------------------------------------*/ /* Adding two adoubles */ adub operator + ( const badouble& x, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_two_a_rec(plus_a_a,locat,x.loc(),y.loc()); put_op(plus_a_a); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()] + ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; return locat; } /*--------------------------------------------------------------------------*/ /* Adding a adouble and a floating point */ adub operator + ( double coval, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (coval) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(plus_d_a,locat,coval,y.loc()); put_op(plus_d_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval + ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_pos_sign_a(locat,y.loc()); put_op(pos_sign_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } return locat; } /*--------------------------------------------------------------------------*/ adub operator + ( const badouble& y, double coval) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (coval) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(plus_d_a,locat,coval,y.loc()); put_op(plus_d_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval + ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_pos_sign_a(locat,y.loc()); put_op(pos_sign_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } return locat; } /*--------------------------------------------------------------------------*/ /* Subtraction of two adoubles */ adub operator - ( const badouble& x, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_two_a_rec(min_a_a,locat,x.loc(),y.loc()); put_op(min_a_a); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()] - ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; return locat; } /*--------------------------------------------------------------------------*/ /* Subtract an adouble from a floating point */ adub operator - ( double coval, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); /* olvo 980708 test coval to be zero */ if (coval) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(min_d_a,locat,coval,y.loc()); put_op(min_d_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval - ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_neg_sign_a(locat,y.loc()); put_op(neg_sign_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = -ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } return locat; } /*--------------------------------------------------------------------------*/ /* Multiply two adoubles */ adub operator * ( const badouble& x, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_two_a_rec(mult_a_a,locat,x.loc(),y.loc()); put_op(mult_a_a); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()] * ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; return locat; } /*--------------------------------------------------------------------------*/ /* Multiply an adouble by a floating point */ /* olvo 980709 modified */ adub operator * ( double coval, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if ( coval == 1.0 ) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_pos_sign_a(locat,y.loc()); put_op(pos_sign_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } else if ( coval == -1.0 ) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_neg_sign_a(locat,y.loc()); put_op(neg_sign_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = -ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(mult_d_a,locat,coval,y.loc()); put_op(mult_d_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval * ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } return locat; } /*--------------------------------------------------------------------------*/ /* Divide an adouble by another adouble */ adub operator / ( const badouble& x, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_two_a_rec(div_a_a,locat,x.loc(),y.loc()); put_op(div_a_a); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()] / ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; return locat; } /*--------------------------------------------------------------------------*/ /* Division floating point - adouble */ adub operator / ( double coval, const badouble& y ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(div_d_a,locat,coval,y.loc()); put_op(div_d_a); ADOLC_PUT_LOCINT(y.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval / ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; return locat; } /****************************************************************************/ /* SINGLE OPERATIONS */ /*--------------------------------------------------------------------------*/ /* Compute exponential of adouble */ adub exp ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_single_op(exp_op,locat,x.loc()); put_op(exp_op); ADOLC_PUT_LOCINT(x.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::exp(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Compute logarithm of adouble */ adub log ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_single_op(log_op,locat,x.loc()); put_op(log_op); ADOLC_PUT_LOCINT(x.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::log(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Compute sqrt of adouble */ adub sqrt ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_single_op(sqrt_op,locat,x.loc()); put_op(sqrt_op); ADOLC_PUT_LOCINT(x.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::sqrt(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /****************************************************************************/ /* QUAD OPERATIONS */ /*--------------------------------------------------------------------------*/ /* Compute sin of adouble !!! Sin and Cos are always evaluated together */ adub sin ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(sin_op,locat,x.loc(),y.loc()); put_op(sin_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += 2; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) { /* olvo 980921 changed order */ ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]); ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::sin(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_GLOBAL_TAPE_VARS.store[y.loc()] = ADOLC_MATH_NSP::cos(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Compute cos of adouble */ adub cos ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(cos_op, locat,x.loc(),y.loc()); put_op(cos_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ADOLC_CURRENT_TAPE_INFOS.numTays_Tape += 2; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) { /* olvo 980921 changed order */ ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]); ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::cos(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_GLOBAL_TAPE_VARS.store[y.loc()] = ADOLC_MATH_NSP::sin(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Compute tan of adouble */ adub tan ( const badouble& x ) { return sin(x) / cos(x); } /*--------------------------------------------------------------------------*/ /* Asin value -- really a quadrature */ adub asin ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / sqrt(1.0 - x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(asin_op,locat,x.loc(),y.loc()); put_op(asin_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::asin(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Acos value -- really a quadrature */ adub acos ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = -1.0 / sqrt(1.0 - x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(acos_op,locat,x.loc(),y.loc()); put_op(acos_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::acos(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Atan value -- really a quadrature */ adub atan ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / (1.0 + x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(atan_op,locat,x.loc(),y.loc()); put_op(atan_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::atan(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ adouble atan2( const badouble& y, const badouble& x) { adouble a1, a2, ret, sy; const double pihalf = ADOLC_MATH_NSP::asin(1.0); /* y+0.0 is a hack since condassign is currently not defined for badoubles */ condassign( sy, y, (adouble)1.0 , (adouble)-1.0 ); condassign( a1, x, atan(y/x), atan(y/x)+sy*2*pihalf); condassign( a2, fabs(y), sy*pihalf-atan(x/y), (adouble) 0.0 ); condassign( ret, fabs(x) - fabs(y), a1, a2 ); return ret; } /*--------------------------------------------------------------------------*/ /* power value -- adouble ^ floating point */ adub pow ( const badouble& x, double coval ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(pow_op,locat,cocval,x.loc()); put_op(pow_op); ADOLC_PUT_LOCINT(x.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP::pow(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()],coval); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* power value --- floating point ^ adouble */ adouble pow ( double coval, const badouble& y ) { adouble ret; if (coval <= 0) { fprintf(DIAG_OUT,"\nADOL-C message: exponent at zero/negative constant basis deactivated\n"); } condassign (ret, (adouble) coval, exp(y*ADOLC_MATH_NSP::log(coval)), (adouble) ADOLC_MATH_NSP::pow(coval,y.getValue()) ); return ret; } /*--------------------------------------------------------------------------*/ /* power value --- adouble ^ adouble */ adouble pow ( const badouble& x, const badouble& y) { adouble a1, a2, ret; double vx = x.getValue(); double vy = y.getValue(); if (!(vx > 0)) { if (vx < 0 || vy >= 0) fprintf(DIAG_OUT,"\nADOL-C message: exponent of zero/negative basis deactivated\n"); else fprintf(DIAG_OUT,"\nADOL-C message: negative exponent and zero basis deactivated\n"); } condassign(a1, -y, (adouble) ADOLC_MATH_NSP::pow(vx,vy), pow(x,vy)); condassign(a2, fabs(x), pow(x, vy), a1); condassign(ret, x, exp(y*log(x)),a2); return ret; } /*--------------------------------------------------------------------------*/ /* log base 10 of an adouble */ adub log10 ( const badouble& x ) { return log(x) / ADOLC_MATH_NSP::log(10.0); } /*--------------------------------------------------------------------------*/ /* Hyperbolic Sine of an adouble */ /* 981119 olvo changed as J.M. Aparicio suggested */ adub sinh ( const badouble& x ) { if (x.getValue() < 0.0) { adouble temp = exp(x); return 0.5*(temp - 1.0/temp); } else { adouble temp = exp(-x); return 0.5*(1.0/temp - temp); } } /*--------------------------------------------------------------------------*/ /* Hyperbolic Cosine of an adouble */ /* 981119 olvo changed as J.M. Aparicio suggested */ adub cosh ( const badouble& x ) { adouble temp = (x.getValue() < 0.0) ? exp(x) : exp(-x); return 0.5*(temp + 1.0/temp); } /*--------------------------------------------------------------------------*/ /* Hyperbolic Tangent of an adouble value. */ /* 981119 olvo changed as J.M. Aparicio suggested */ adub tanh ( const badouble& x ) { if (x.getValue() < 0.0) { adouble temp = exp(2.0*x); return (temp - 1.0)/(temp + 1.0); } else { adouble temp = exp((-2.0)*x); return (1.0 - temp)/(temp + 1.0); } } /*--------------------------------------------------------------------------*/ /* Ceiling function (NOTE: This function is nondifferentiable) */ adub ceil ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat=next_loc(); double coval = ADOLC_MATH_NSP::ceil(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(ceil_op,locat,coval,x.loc()); put_op(ceil_op); ADOLC_PUT_LOCINT(x.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval; return locat; } /*--------------------------------------------------------------------------*/ /* Floor function (NOTE: This function is nondifferentiable) */ adub floor ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat=next_loc(); double coval = ADOLC_MATH_NSP::floor(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_args_d_a(floor_op,locat,coval,x.loc()); put_op(floor_op); ADOLC_PUT_LOCINT(x.loc()); // = arg ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(coval); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = coval; return locat; } #ifdef ATRIG_ERF /* NOTE: enable if your compiler knows asinh, acosh, atanh, erf */ /*--------------------------------------------------------------------------*/ /* Asinh value -- really a quadrature */ adub asinh ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / sqrt(1.0 + x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(asinh_op,locat,x.loc(),y.loc()); put_op(asinh_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP_ERF::asinh(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Acosh value -- really a quadrature */ adub acosh ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / sqrt(x*x-1.0); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(acosh_op,locat,x.loc(),y.loc()); put_op(acosh_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP_ERF::acosh(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* Atanh value -- really a quadrature */ adub atanh ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 1.0 / (1.0 - x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(atanh_op,locat,x.loc(),y.loc()); put_op(atanh_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP_ERF::atanh(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } /*--------------------------------------------------------------------------*/ /* The error function erf */ adub erf( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); adouble y = 2.0 / ADOLC_MATH_NSP_ERF::sqrt(ADOLC_MATH_NSP::acos(-1.0))*exp(-x*x); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_quad(erf_op,locat,x.loc(),y.loc()); put_op(erf_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = ADOLC_MATH_NSP_ERF::erf(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); ADOLC_OPENMP_RESTORE_THREAD_NUMBER; return locat; } #endif /*--------------------------------------------------------------------------*/ /* Fabs Function (NOTE: This function is also nondifferentiable at x=0) */ adub fabs ( const badouble& x ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; locint locat = next_loc(); double coval = 1.0; double temp = ADOLC_MATH_NSP::fabs(ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]); if (temp != ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]) coval = 0.0; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { /* write_args_d_a(abs_val,locat,coval,x.loc()); */ put_op(abs_val); ADOLC_PUT_LOCINT(x.loc()); /* arg */ ADOLC_PUT_LOCINT(locat); /* res */ ADOLC_PUT_VAL(coval); /* coval */ ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.stats[NO_MIN_MAX]) ++ADOLC_CURRENT_TAPE_INFOS.numSwitches; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = temp; return locat; } /*--------------------------------------------------------------------------*/ /* max and min functions (changed : 11/15/95) */ adub fmin ( const badouble& x, const badouble& y ) { /* olvo 980702 tested: return 0.5*fabs(x+y-fabs(x-y)); */ ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.stats[NO_MIN_MAX]) return ((x + y - fabs(x - y))/2.0); locint locat = next_loc(); if (ADOLC_GLOBAL_TAPE_VARS.store[y.loc()] < ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]) { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_min_op(x.loc(),y.loc(),locat,0.0); put_op(min_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(0.0); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; } else { if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_min_op(x.loc(),y.loc(),locat,1.0); put_op(min_op); ADOLC_PUT_LOCINT(x.loc()); // = arg1 ADOLC_PUT_LOCINT(y.loc()); // = arg2 ADOLC_PUT_LOCINT(locat); // = res ADOLC_PUT_VAL(1.0); // = coval ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat]=ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; } return locat; } /*--------------------------------------------------------------------------*/ /*21.8.96*/ adub fmin ( double d, const badouble& y ) { adouble x = d; return (fmin (x,y)); } /*--------------------------------------------------------------------------*/ adub fmin ( const badouble& x, double d ) { adouble y = d; return (fmin (x,y)); } /*--------------------------------------------------------------------------*/ adub fmax ( const badouble& x, const badouble& y ) { return (-fmin(-x,-y)); } /*--------------------------------------------------------------------------*/ /*21.8.96*/ adub fmax ( double d, const badouble& y ) { adouble x = d; return (-fmin(-x,-y)); } /*--------------------------------------------------------------------------*/ adub fmax ( const badouble& x, double d ) { adouble y = d; return (-fmin(-x,-y)); } /*--------------------------------------------------------------------------*/ /* Ldexp Function */ adub ldexp ( const badouble& x, int exp ) { return x*ldexp(1.0,exp); } /*--------------------------------------------------------------------------*/ /* Macro for user defined quadratures, example myquad is below.*/ /* the forward sweep tests if the tape is executed exactly at */ /* the same argument point otherwise it stops with a returnval */ #define extend_quad(func,integrand)\ adouble func ( const badouble& arg )\ { adouble temp; \ adouble val; \ integrand; \ ADOLC_OPENMP_THREAD_NUMBER; \ ADOLC_OPENMP_GET_THREAD_NUMBER; \ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) \ { put_op(gen_quad); \ ADOLC_PUT_LOCINT(arg.loc()); \ ADOLC_PUT_LOCINT(val.loc()); \ ADOLC_PUT_LOCINT(temp.loc()); \ ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; \ if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) \ ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[temp.loc()]); \ } \ ADOLC_GLOBAL_TAPE_VARS.store[temp.loc()]=func(ADOLC_GLOBAL_TAPE_VARS.store[arg.loc()]); \ if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) \ { ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[arg.loc()]); \ ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[temp.loc()]); \ } \ return temp; } double myquad(double& x) { double res; res = ADOLC_MATH_NSP::log(x); return res; } /* This defines the natural logarithm as a quadrature */ extend_quad(myquad,val = 1/arg) /****************************************************************************/ /* CONDITIONALS */ /*--------------------------------------------------------------------------*/ #if defined(ADOLC_ADVANCED_BRANCHING) adub operator != (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; double res = (double)(xval != yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(neq_a_a); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y.loc()); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator == (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; double res = (double)(xval == yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(eq_a_a); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y.loc()); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator <= (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; double res = (double)(xval <= yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(le_a_a); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y.loc()); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator >= (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; double res = (double)(xval >= yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(ge_a_a); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y.loc()); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator > (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; double res = (double)(xval > yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(gt_a_a); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y.loc()); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } /*--------------------------------------------------------------------------*/ adub operator < (const badouble& x, const badouble& y) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; double xval = ADOLC_GLOBAL_TAPE_VARS.store[x.loc()]; double yval = ADOLC_GLOBAL_TAPE_VARS.store[y.loc()]; double res = (double)(xval < yval); locint locat = next_loc(); if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { put_op(lt_a_a); ADOLC_PUT_LOCINT(x.loc()); // arg ADOLC_PUT_LOCINT(y.loc()); // arg1 ADOLC_PUT_VAL(res); // check for branch switch ADOLC_PUT_LOCINT(locat); // res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[locat]); } ADOLC_GLOBAL_TAPE_VARS.store[locat] = res; return locat; } #endif /*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/ void condassign( adouble &res, const badouble &cond, const badouble &arg1, const badouble &arg2 ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign(res.loc(),cond.loc(),arg1.loc(), // arg2.loc()); put_op(cond_assign); ADOLC_PUT_LOCINT(cond.loc()); // = arg ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]); ADOLC_PUT_LOCINT(arg1.loc()); // = arg1 ADOLC_PUT_LOCINT(arg2.loc()); // = arg2 ADOLC_PUT_LOCINT(res.loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.loc()]); } if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] > 0) ADOLC_GLOBAL_TAPE_VARS.store[res.loc()] = ADOLC_GLOBAL_TAPE_VARS.store[arg1.loc()]; else ADOLC_GLOBAL_TAPE_VARS.store[res.loc()] = ADOLC_GLOBAL_TAPE_VARS.store[arg2.loc()]; } /*--------------------------------------------------------------------------*/ void condassign( adouble &res, const badouble &cond, const badouble &arg ) { ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; if (ADOLC_CURRENT_TAPE_INFOS.traceFlag) { // old: write_condassign2(res.loc(),cond.loc(),arg.loc()); put_op(cond_assign_s); ADOLC_PUT_LOCINT(cond.loc()); // = arg ADOLC_PUT_VAL(ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()]); ADOLC_PUT_LOCINT(arg.loc()); // = arg1 ADOLC_PUT_LOCINT(res.loc()); // = res ++ADOLC_CURRENT_TAPE_INFOS.numTays_Tape; if (ADOLC_CURRENT_TAPE_INFOS.keepTaylors) ADOLC_WRITE_SCAYLOR(ADOLC_GLOBAL_TAPE_VARS.store[res.loc()]); } if (ADOLC_GLOBAL_TAPE_VARS.store[cond.loc()] > 0) ADOLC_GLOBAL_TAPE_VARS.store[res.loc()] = ADOLC_GLOBAL_TAPE_VARS.store[arg.loc()]; } /****************************************************************************/ /* THAT'S ALL*/ ADOL-C-2.6.3/ADOL-C/src/hos_forward.c0000644000175200017520000000145011227420735015241 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: hos_forward.c Revision: $Id: hos_forward.c 42 2009-07-15 18:37:17Z awalther $ Contents: hos_forward (higher-order-scalar forward mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _HOS_ 1 #define _KEEP_ 1 #include #undef _KEEP_ #undef _HOS_ ADOL-C-2.6.3/ADOL-C/src/fos_pl_sig_reverse.c0000644000175200017520000000122612627546141016611 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fos_reverse.c Revision: $Id$ Contents: fos_reverse (first-order-scalar reverse mode) Copyright (c) Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOS_ 1 #define _ABS_NORM_SIG_ 1 #include #undef _ABS_NORM_SIG_ #undef _FOS_ ADOL-C-2.6.3/ADOL-C/src/interfaces.cpp0000644000175200017520000003646112373412415015420 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: interfaces.cpp Revision: $Id: interfaces.cpp 542 2014-08-15 14:11:25Z kulshres $ Contents: Genuine C++ Interfaces to ADOL-C forward & reverse calls. Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include "dvlparms.h" /****************************************************************************/ /* MACROS */ #define fabs(x) ((x) > 0 ? (x) : -(x)) #define ceil(x) ((int)((x)+1) - (int)((x) == (int)(x))) extern "C" void adolc_exit(int errorcode, const char *what, const char* function, const char *file, int line); /****************************************************************************/ /* FORWARD MODE, overloaded calls */ /****************************************************************************/ /* general call */ /* */ int forward( short tag, int m, int n, int d, int keep, double **X, double **Y) /* forward(tag, m, n, d, keep, X[n][d+1], Y[m][d+1]) */ { /* olvo 980729 general ec */ static double *x, *y, *xp, *yp; static int maxn, maxm; int rc = -1, i, k; if (n > maxn) { if (x) myfree1(x); if (xp) myfree1(xp); x = myalloc1(maxn = n); xp = myalloc1(maxn); } if (m > maxm) { if (y) myfree1(y); if (yp) myfree1(yp); y = myalloc1(maxm = m); yp = myalloc1(maxm); } /*------------------------------------------------------------------------*/ /* prepare input */ for (i=0; i 1) { for (k=d; k>0; k--) X[i][k] = X[i][k-1]; X[i][0] = x[i]; } for (i=0; i0; k--) Y[i][k] = Y[i][k-1]; Y[i][0] = y[i]; } return rc; } /****************************************************************************/ /* Y can be one dimensional if m=1 */ /* */ int forward( short tag, int m, int n, int d, int keep, double **X, double *Y) /* forward(tag, 1, n, d, keep, X[n][d+1], Y[d+1]), m=1 */ { /* olvo 980729 general ec */ static double *x, *xp; static int maxn; double y; int rc= -1, i, k; if (m == 1) { if (n > maxn) { if (x) myfree1(x); if (xp) myfree1(xp); x = myalloc1(maxn = n); xp = myalloc1(maxn); } /*----------------------------------------------------------------------*/ /* prepare input */ for (i=0; i 1) { for (k=d; k>0; k--) X[i][k] = X[i][k-1]; X[i][0] = x[i]; } for (k=d; k>0; k--) Y[k] = Y[k-1]; Y[0] = y; } else { fprintf(DIAG_OUT,"ADOL-C error: wrong Y dimension in forward \n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } return rc; } /****************************************************************************/ /* X and Y can be one dimensional if d = 0 */ /* */ int forward( short tag, int m, int n, int d, int keep, double *X, double *Y) /* forward(tag, m, n, 0, keep, X[n], Y[m]), d=0 */ { int rc = -1; if (d != 0) { fprintf(DIAG_OUT,"ADOL-C error: wrong X and Y dimensions in forward \n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else rc = zos_forward(tag,m,n,keep,X,Y); return rc; } /****************************************************************************/ /* X and Y can be one dimensional if d omitted */ /* */ int forward(short tag, int m, int n, int keep, double *X, double *Y) /* forward(tag, m, n, keep, X[n], Y[m]) */ { return zos_forward(tag,m,n,keep,X,Y); } /****************************************************************************/ /* general call */ /* */ int forward( short tag, int m, int n, int d, int p, double *x, double ***X, double *y, double ***Y) /* forward(tag, m, n, d, p, x[n], X[n][p][d], y[m], Y[m][p][d]) */ { return hov_forward(tag,m,n,d,p,x,X,y,Y); } /****************************************************************************/ /* general call */ /* */ int forward( short tag, int m, int n, int p, double *x, double **X, double *y, double **Y) /* forward(tag, m, n, p, x[n], X[n][p], y[m], Y[m][p]) */ { return fov_forward(tag,m,n,p,x,X,y,Y); } /****************************************************************************/ /* REVERSE MODE, overloaded calls */ /****************************************************************************/ /* general call */ /* */ int reverse( short tag, int m, int n, int d, double *u, double **Z) /* reverse(tag, m, n, d, u[m], Z[n][d+1]) */ { return hos_reverse(tag,m,n,d,u,Z); } /****************************************************************************/ /* u can be a scalar if m=1 */ /* */ int reverse( short tag, int m, int n, int d, double u, double **Z) /* reverse(tag, 1, n, 0, u, Z[n][d+1]), m=1 => u scalar */ { int rc=-1; if (m != 1) { fprintf(DIAG_OUT,"ADOL-C error: wrong u dimension in scalar-reverse \n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else rc = hos_reverse(tag,m,n,d,&u,Z); return rc; } /****************************************************************************/ /* Z can be vector if d = 0; Done by specialized code */ /* */ int reverse( short tag, int m, int n, int d, double *u, double *Z) /* reverse(tag, m, n, 0, u[m], Z[n]), d=0 */ { if (d != 0) { fprintf(DIAG_OUT,"ADOL-C error: wrong Z dimension in scalar-reverse \n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } return fos_reverse(tag,m,n,u,Z); } /****************************************************************************/ /* u and Z can be scalars if m=1 and d=0; */ /* */ int reverse( short tag, int m, int n, int d, double u, double *Z) /* reverse(tag, 1, n, 0, u, Z[n]), m=1 and d=0 => u and Z scalars */ { int rc=-1; if (m != 1 || d != 0 ) { fprintf(DIAG_OUT,"ADOL-C error: wrong u or Z dimension in scalar-reverse \n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else rc = fos_reverse(tag,m,n,&u,Z); \ return rc; } /****************************************************************************/ /* general call */ /* */ int reverse( short tag, int m, int n, int d, int q, double **U, double ***Z, short **nz) /* reverse(tag, m, n, d, q, U[q][m], Z[q][n][d+1], nz[q][n]) */ { return hov_reverse(tag,m,n,d,q,U,Z,nz); } /****************************************************************************/ /* U can be a vector if m=1 */ /* */ int reverse( short tag, int m, int n, int d, int q, double *U, double ***Z, short **nz) /* reverse(tag, 1, n, d, q, U[q], Z[q][n][d+1], nz[q][n]), m=1 => u vector */ { int rc=-1; if (m != 1) { fprintf(DIAG_OUT,"ADOL-C error: wrong U dimension in vector-reverse \n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else { /* olvo 980727 ??? */ /* double** upp = new double*[nrows]; */ double **upp = (double**) malloc(q*sizeof(double*)); for (int i=0; i Z matrix */ { int rc=-1; if (d != 0) { fprintf(DIAG_OUT,"ADOL-C error: wrong degree in vector-reverse \n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else rc = fov_reverse(tag,m,n,q,U,Z); return rc; } /****************************************************************************/ /* */ /* d=0 may be omitted, then Z may be a matrix; specialized code */ /* */ int reverse( short tag, int m, int n, int q, double **U, double **Z) /* reverse(tag, m, n, q, U[q][m], Z[q][n]), d=0 => Z matrix */ { int rc=-1; rc = fov_reverse(tag,m,n,q,U,Z); return rc; } /****************************************************************************/ /* */ /* If m=1 and d=0 then U can be vector and Z a matrix but no nz. */ /* */ int reverse( short tag, int m, int n, int d, int q, double *U, double **Z) /* reverse(tag, 1, n, 0, q, U[q], Z[q][n]), m=1 and d=0 => U vector and Z matrix but no nz */ { int rc=-1; /* olvo 981126 ??? what's that: */ /* (++d)--; *//* degre is reserved for the future use. Ingore this line */ if ((m != 1) || (d != 0)) { fprintf(DIAG_OUT,"ADOL-C error: wrong U dimension in vector-reverse \n"); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else { /* olvo 980727 ??? */ /* double ** upp = new double*[nrows]; */ double **upp = (double**) malloc(q*sizeof(double*)); for (int i=0; i #undef _CHUNKED_ #undef _FOV_ ADOL-C-2.6.3/ADOL-C/src/ampisupportAdolc.cpp0000644000175200017520000006007012470347706016624 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: ampisupportAdolc.cpp Revision: $Id$ Copyright (c) Jean Utke This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #include #include #include "taping_p.h" #include "oplate.h" #include "adolc/adouble.h" #ifdef ADOLC_AMPI_SUPPORT #include "ampisupportAdolc.h" #include "ampi/adTool/support.h" #include "ampi/tape/support.h" extern "C" void ADOLC_TLM_AMPI_PROD(void *invec, void *inoutvec, int *len, MPI_Datatype *dtype); void ADOLC_TLM_AMPI_PROD(void *invec, void *inoutvec, int *len, MPI_Datatype *dtype){ int order=ADOLC_CURRENT_TAPE_INFOS.gDegree; int dir=ADOLC_CURRENT_TAPE_INFOS.numTay; double *in=(double*)invec; double *inout=(double*)inoutvec; int count=(*len)/((order*dir)+1); assert((*len)%((order*dir)+1)==0); // has to evenly divide or something is wrong for (int i=0;i0;--o) { double z=0; // do the convolution except for the 0-th coefficients for (int conv=1;conv0) { TAPE_AMPI_read_int(&recvcnt); startRLoc = get_locint_f(); TAPE_AMPI_read_MPI_Datatype(&recvtype); allocatePack(&recvbuf, startRLoc, recvcnt, packedRCount, recvtype, packedRDatatype); } startSLoc = get_locint_f(); TAPE_AMPI_read_int(&sendcnt); TAPE_AMPI_read_MPI_Datatype(&sendtype); TAPE_AMPI_read_int(&root); TAPE_AMPI_read_MPI_Comm(&comm); if (sendcnt > 0) { allocatePack(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } rc = TLM_AMPI_Gather(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm); if (commSizeForRootOrNull>0) { unpackDeallocate(&recvbuf, startRLoc, recvcnt, packedRCount, recvtype, packedRDatatype); } if (sendcnt > 0) { unpackDeallocate(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } TAPE_AMPI_read_int(&commSizeForRootOrNull); return rc; } int ADOLC_TLM_AMPI_Scatter(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) { int rc; int commSizeForRootOrNull; locint startRLoc = 0, startSLoc = 0; MPI_Datatype packedRDatatype; int packedRCount; MPI_Datatype packedSDatatype; int packedSCount; TAPE_AMPI_read_int(&commSizeForRootOrNull); if (commSizeForRootOrNull>0) { TAPE_AMPI_read_int(&recvcnt); startRLoc = get_locint_f(); TAPE_AMPI_read_MPI_Datatype(&recvtype); allocatePack(&recvbuf, startRLoc, recvcnt, packedRCount, recvtype, packedRDatatype); } startSLoc = get_locint_f(); TAPE_AMPI_read_int(&sendcnt); TAPE_AMPI_read_MPI_Datatype(&sendtype); TAPE_AMPI_read_int(&root); TAPE_AMPI_read_MPI_Comm(&comm); if (sendcnt > 0) { allocatePack(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } rc = TLM_AMPI_Scatter(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, root, comm); if (commSizeForRootOrNull>0) { unpackDeallocate(&recvbuf, startRLoc, recvcnt, packedRCount, recvtype, packedRDatatype); } if (sendcnt > 0) { unpackDeallocate(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } TAPE_AMPI_read_int(&commSizeForRootOrNull); return rc; } int ADOLC_TLM_AMPI_Allgather(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, MPI_Comm comm) { int rc; int rootPlaceholder; int commSizeForRootOrNull; locint startRLoc = 0, startSLoc = 0; MPI_Datatype packedRDatatype; int packedRCount; MPI_Datatype packedSDatatype; int packedSCount; TAPE_AMPI_read_int(&commSizeForRootOrNull); if (commSizeForRootOrNull>0) { TAPE_AMPI_read_int(&recvcnt); startRLoc = get_locint_f(); TAPE_AMPI_read_MPI_Datatype(&recvtype); allocatePack(&recvbuf, startRLoc, recvcnt, packedRCount, recvtype, packedRDatatype); } startSLoc = get_locint_f(); TAPE_AMPI_read_int(&sendcnt); TAPE_AMPI_read_MPI_Datatype(&sendtype); TAPE_AMPI_read_int(&rootPlaceholder); TAPE_AMPI_read_MPI_Comm(&comm); if (sendcnt > 0) { allocatePack(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } rc = TLM_AMPI_Allgather(sendbuf, sendcnt, sendtype, recvbuf, recvcnt, recvtype, comm); if (commSizeForRootOrNull>0) { unpackDeallocate(&recvbuf, startRLoc, recvcnt, packedRCount, recvtype, packedRDatatype); } if (sendcnt > 0) { unpackDeallocate(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } TAPE_AMPI_read_int(&commSizeForRootOrNull); return rc; } int ADOLC_TLM_AMPI_Gatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, MPI_Datatype recvtype, int root, MPI_Comm comm) { int rc,i; int commSizeForRootOrNull; locint startRLoc, startSLoc; MPI_Datatype packedRDatatype, packedSDatatype; int packedRCount, packedSCount; int totalrecvcnt = 0; TAPE_AMPI_read_int(&commSizeForRootOrNull); for(i=0;i0) && (totalrecvcnt0) { startRLoc = get_locint_f(); TAPE_AMPI_read_MPI_Datatype(&recvtype); allocatePack(&recvbuf, startRLoc, totalrecvcnt, packedRCount, recvtype, packedRDatatype); } startSLoc = get_locint_f(); TAPE_AMPI_read_int(&sendcnt); TAPE_AMPI_read_MPI_Datatype(&sendtype); TAPE_AMPI_read_int(&root); TAPE_AMPI_read_MPI_Comm(&comm); if (sendcnt > 0) { allocatePack(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } rc = TLM_AMPI_Gatherv(sendbuf, sendcnt, sendtype, recvbuf, recvcnts, displs, recvtype, root, comm); if (sendcnt > 0) { unpackDeallocate(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } if (commSizeForRootOrNull>0) { unpackDeallocate(&recvbuf, startRLoc, totalrecvcnt, packedRCount, recvtype, packedRDatatype); } TAPE_AMPI_read_int(&commSizeForRootOrNull); return rc; } int ADOLC_TLM_AMPI_Scatterv(void *sendbuf, int *sendcnts, int *displs, MPI_Datatype sendtype, void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) { int rc,i; int commSizeForRootOrNull; locint startRLoc, startSLoc; MPI_Datatype packedRDatatype, packedSDatatype; int packedRCount, packedSCount; int totalsendcnt = 0; TAPE_AMPI_read_int(&commSizeForRootOrNull); for(i=0;i0) && (totalsendcnt0) { startSLoc = get_locint_f(); TAPE_AMPI_read_MPI_Datatype(&sendtype); allocatePack(&sendbuf, startSLoc, totalsendcnt, packedSCount, sendtype, packedSDatatype); } startRLoc = get_locint_f(); TAPE_AMPI_read_int(&recvcnt); TAPE_AMPI_read_MPI_Datatype(&recvtype); TAPE_AMPI_read_int(&root); TAPE_AMPI_read_MPI_Comm(&comm); if (recvcnt > 0) { allocatePack(&recvbuf, startRLoc, recvcnt, packedRCount, recvtype, packedRDatatype); } rc = TLM_AMPI_Scatterv(sendbuf, sendcnts, displs, sendtype, recvbuf, recvcnt, recvtype, root, comm); if (commSizeForRootOrNull>0) { unpackDeallocate(&sendbuf, startSLoc, totalsendcnt, packedSCount, sendtype, packedSDatatype); } if (recvcnt > 0) { unpackDeallocate(&recvbuf, startRLoc, recvcnt, packedRCount, recvtype, packedRDatatype); } TAPE_AMPI_read_int(&commSizeForRootOrNull); return rc; } int ADOLC_TLM_AMPI_Allgatherv(void *sendbuf, int sendcnt, MPI_Datatype sendtype, void *recvbuf, int *recvcnts, int *displs, MPI_Datatype recvtype, MPI_Comm comm) { int rc,i; int commSizeForRootOrNull, rootPlaceholder; locint startRLoc, startSLoc; MPI_Datatype packedRDatatype, packedSDatatype; int packedRCount, packedSCount; int totalrecvcnt = 0; TAPE_AMPI_read_int(&commSizeForRootOrNull); for(i=0;i0) && (totalrecvcnt0) { startRLoc = get_locint_f(); TAPE_AMPI_read_MPI_Datatype(&recvtype); allocatePack(&recvbuf, startRLoc, totalrecvcnt, packedRCount, recvtype, packedRDatatype); } startSLoc = get_locint_f(); TAPE_AMPI_read_int(&sendcnt); TAPE_AMPI_read_MPI_Datatype(&sendtype); TAPE_AMPI_read_int(&rootPlaceholder); TAPE_AMPI_read_MPI_Comm(&comm); if (sendcnt > 0) { allocatePack(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } rc = TLM_AMPI_Allgatherv(sendbuf, sendcnt, sendtype, recvbuf, recvcnts, displs, recvtype, comm); if (sendcnt > 0) { unpackDeallocate(&sendbuf, startSLoc, sendcnt, packedSCount, sendtype, packedSDatatype); } if (commSizeForRootOrNull>0) { unpackDeallocate(&recvbuf, startRLoc, totalrecvcnt, packedRCount, recvtype, packedRDatatype); } TAPE_AMPI_read_int(&commSizeForRootOrNull); return rc; } int ADOLC_TLM_AMPI_Bcast(void* buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm) { locint startLoc=get_locint_f(); TAPE_AMPI_read_int(&count); TAPE_AMPI_read_MPI_Datatype(&datatype); TAPE_AMPI_read_int(&root); TAPE_AMPI_read_MPI_Comm(&comm); int packedCount=0; MPI_Datatype packedDatatype; allocatePack(&buf, startLoc, count, packedCount, datatype, packedDatatype); int rc=TLM_AMPI_Bcast(buf, packedCount, packedDatatype, root, comm); unpackDeallocate(&buf, startLoc, count, packedCount, datatype, packedDatatype); return rc; } int ADOLC_TLM_AMPI_Reduce(void* sbuf, void* rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm) { locint rbufStart = get_locint_f(); locint sbufStart = get_locint_f(); TAPE_AMPI_read_int(&count); int pushedResultsCount; TAPE_AMPI_read_int(&pushedResultsCount); double pushedDoubles; for (int i=0;i0) for (int i=0;i #undef _INT_FOR_ #undef _TIGHT_ ADOL-C-2.6.3/ADOL-C/src/Makefile.in0000644000175200017520000010304212627546146014637 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @BUILD_ADOLC_AMPI_SUPPORT_TRUE@am__append_1 = libadolcampi.la @SPARSE_TRUE@am__append_2 = int_forward_s.c int_forward_t.c \ @SPARSE_TRUE@ indopro_forward_s.c indopro_forward_t.c \ @SPARSE_TRUE@ indopro_forward_pl.c \ @SPARSE_TRUE@ nonl_ind_forward_s.c nonl_ind_forward_t.c \ @SPARSE_TRUE@ nonl_ind_old_forward_s.c nonl_ind_old_forward_t.c \ @SPARSE_TRUE@ int_reverse_s.c int_reverse_t.c subdir = ADOL-C/src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(srcdir)/config.h.in $(top_srcdir)/autoconf/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libadolcampi_la_LIBADD = am__libadolcampi_la_SOURCES_DIST = ampisupport.cpp \ ampisupportAdolc.cpp ampisupportAdolc.h @BUILD_ADOLC_AMPI_SUPPORT_TRUE@am_libadolcampi_la_OBJECTS = \ @BUILD_ADOLC_AMPI_SUPPORT_TRUE@ ampisupport.lo \ @BUILD_ADOLC_AMPI_SUPPORT_TRUE@ ampisupportAdolc.lo libadolcampi_la_OBJECTS = $(am_libadolcampi_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = @BUILD_ADOLC_AMPI_SUPPORT_TRUE@am_libadolcampi_la_rpath = libadolcsrc_la_LIBADD = am__libadolcsrc_la_SOURCES_DIST = adalloc.c rpl_malloc.c adouble.cpp \ convolut.c fortutils.c interfaces.cpp interfacesf.c taping.c \ tape_handling.cpp dvlparms.h oplate.h taping_p.h rpl_malloc.h \ storemanager.h externfcts_p.h checkpointing_p.h buffer_temp.h \ zos_forward.c fos_forward.c fov_forward.c hos_forward.c \ hov_forward.c hov_wk_forward.c fos_reverse.c fov_reverse.c \ hos_reverse.c hos_ov_reverse.c hov_reverse.c forward_partx.c \ zos_pl_forward.c fos_pl_reverse.c fos_pl_sig_reverse.c \ fos_pl_forward.c fov_pl_forward.c fos_pl_sig_forward.c \ fov_pl_sig_forward.c externfcts.cpp checkpointing.cpp \ fixpoint.cpp fov_offset_forward.c revolve.c advector.cpp \ adouble_tl.cpp param.cpp externfcts2.cpp int_forward_s.c \ int_forward_t.c indopro_forward_s.c indopro_forward_t.c \ indopro_forward_pl.c nonl_ind_forward_s.c nonl_ind_forward_t.c \ nonl_ind_old_forward_s.c nonl_ind_old_forward_t.c \ int_reverse_s.c int_reverse_t.c @SPARSE_TRUE@am__objects_1 = int_forward_s.lo int_forward_t.lo \ @SPARSE_TRUE@ indopro_forward_s.lo indopro_forward_t.lo \ @SPARSE_TRUE@ indopro_forward_pl.lo nonl_ind_forward_s.lo \ @SPARSE_TRUE@ nonl_ind_forward_t.lo nonl_ind_old_forward_s.lo \ @SPARSE_TRUE@ nonl_ind_old_forward_t.lo int_reverse_s.lo \ @SPARSE_TRUE@ int_reverse_t.lo am_libadolcsrc_la_OBJECTS = adalloc.lo rpl_malloc.lo adouble.lo \ convolut.lo fortutils.lo interfaces.lo interfacesf.lo \ taping.lo tape_handling.lo zos_forward.lo fos_forward.lo \ fov_forward.lo hos_forward.lo hov_forward.lo hov_wk_forward.lo \ fos_reverse.lo fov_reverse.lo hos_reverse.lo hos_ov_reverse.lo \ hov_reverse.lo forward_partx.lo zos_pl_forward.lo \ fos_pl_reverse.lo fos_pl_sig_reverse.lo fos_pl_forward.lo \ fov_pl_forward.lo fos_pl_sig_forward.lo fov_pl_sig_forward.lo \ externfcts.lo checkpointing.lo fixpoint.lo \ fov_offset_forward.lo revolve.lo advector.lo adouble_tl.lo \ param.lo externfcts2.lo $(am__objects_1) libadolcsrc_la_OBJECTS = $(am_libadolcsrc_la_OBJECTS) libadolcsrc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(libadolcsrc_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/autoconf/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(libadolcampi_la_SOURCES) $(libadolcsrc_la_SOURCES) DIST_SOURCES = $(am__libadolcampi_la_SOURCES_DIST) \ $(am__libadolcsrc_la_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = drivers tapedoc lie sparse DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CFLAGS = @ac_adolc_cflags@ -DADOLC_INTERNAL=1 -std=gnu99 AM_CXXFLAGS = @ac_adolc_cxxflags@ -DADOLC_INTERNAL=1 AM_CPPFLAGS = -I$(top_builddir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/include -I$(top_srcdir)/ADOL-C/src @SPARSE_FALSE@SUBDIRS = drivers tapedoc lie @SPARSE_TRUE@SUBDIRS = drivers sparse tapedoc lie MAINTAINERCLEANFILES = Makefile.in *~ *.orig adolc_config.h config.h.in EXTRA_DIST = uni5_for.c fo_rev.c ho_rev.c noinst_LTLIBRARIES = libadolcsrc.la $(am__append_1) libadolcsrc_la_LDFLAGS = @BUILD_ADOLC_AMPI_SUPPORT_TRUE@libadolcampi_la_SOURCES = ampisupport.cpp ampisupportAdolc.cpp \ @BUILD_ADOLC_AMPI_SUPPORT_TRUE@ ampisupportAdolc.h libadolcsrc_la_SOURCES = adalloc.c rpl_malloc.c adouble.cpp convolut.c \ fortutils.c interfaces.cpp interfacesf.c taping.c \ tape_handling.cpp dvlparms.h oplate.h taping_p.h rpl_malloc.h \ storemanager.h externfcts_p.h checkpointing_p.h buffer_temp.h \ zos_forward.c fos_forward.c fov_forward.c hos_forward.c \ hov_forward.c hov_wk_forward.c fos_reverse.c fov_reverse.c \ hos_reverse.c hos_ov_reverse.c hov_reverse.c forward_partx.c \ zos_pl_forward.c fos_pl_reverse.c fos_pl_sig_reverse.c \ fos_pl_forward.c fov_pl_forward.c fos_pl_sig_forward.c \ fov_pl_sig_forward.c externfcts.cpp checkpointing.cpp \ fixpoint.cpp fov_offset_forward.c revolve.c advector.cpp \ adouble_tl.cpp param.cpp externfcts2.cpp $(am__append_2) all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .cpp .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ADOL-C/src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign ADOL-C/src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status ADOL-C/src/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libadolcampi.la: $(libadolcampi_la_OBJECTS) $(libadolcampi_la_DEPENDENCIES) $(EXTRA_libadolcampi_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(am_libadolcampi_la_rpath) $(libadolcampi_la_OBJECTS) $(libadolcampi_la_LIBADD) $(LIBS) libadolcsrc.la: $(libadolcsrc_la_OBJECTS) $(libadolcsrc_la_DEPENDENCIES) $(EXTRA_libadolcsrc_la_DEPENDENCIES) $(AM_V_CXXLD)$(libadolcsrc_la_LINK) $(libadolcsrc_la_OBJECTS) $(libadolcsrc_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adalloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adouble.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adouble_tl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/advector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ampisupport.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ampisupportAdolc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checkpointing.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/externfcts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/externfcts2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fixpoint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fortutils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/forward_partx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_pl_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_pl_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_pl_sig_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_pl_sig_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fos_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_offset_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_pl_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_pl_sig_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fov_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_ov_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hos_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_reverse.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hov_wk_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indopro_forward_pl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indopro_forward_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/indopro_forward_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_forward_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_forward_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_reverse_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/int_reverse_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfaces.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfacesf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_forward_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_old_forward_s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nonl_ind_old_forward_t.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/param.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/revolve.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rpl_malloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape_handling.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/taping.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zos_forward.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zos_pl_forward.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCXX_TRUE@ $(LTCXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/ADOL-C/src/fov_pl_forward.c0000644000175200017520000000126412426143774015747 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fov_an_forward.c Revision: $Id$ Contents: fov_an_forward (first-order-vector abs-normal forward mode) Copyright (c) Kshitij Kulshrestha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOV_ 1 #undef _KEEP_ #define _ABS_NORM_ 1 #include #undef _ABS_NORM_ #undef _FOV_ ADOL-C-2.6.3/ADOL-C/src/fo_rev.c0000644000175200017520000032134112672541222014210 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fo_rev.c Revision: $Id: fo_rev.c 680 2016-03-17 14:43:30Z kulshres $ Contents: Contains the routines : fos_reverse (first-order-scalar reverse mode) : define _FOS_ fov_reverse (first-order-vector reverse mode) : define _FOV_ int_reverse_tight, ( first-order-vector reverse mode for bit patterns, checks all dependences on taylors and real values, more precize) int_reverse_safe, ( first-order-vector reverse mode for bit patterns, return always 3, no dependences on taylors and real values, faster than tight) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel, Kshitij Kulshreshtha This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ /***************************************************************************** There are four basic versions of the procedure `reverse', which are optimized for the cases of scalar or vector reverse sweeps with first or higher derivatives, respectively. In the calling sequence this distinction is apparent from the type of the parameters `lagrange' and `results'. The former may be left out and the integer parameters `depen', `indep', `degre', and `nrows' must be set or default according to the following matrix of calling cases. no lagrange double* lagrange double** lagrange double* gradient of scalar weight vector times infeasible results valued function Jacobian product combination ( depen = 1 , ( depen > 0 , degre = 0 , degre = 0 , ------ nrows = 1 ) nrows = 1 ) double** Jacobian of vector weight vector times weight matrix results valued function Taylor-Jacobians times Jacobian ( 0 < depen ( depen > 0 , ( depen > 0 , = nrows , degre > 0 , degre = 0 , degre = 0 ) nrows = 1 ) nrows > 0 ) double*** full family of ------------ weigth matrix x results Taylor-Jacobians ------------ Taylor Jacobians *****************************************************************************/ /****************************************************************************/ /* MACROS */ #undef _ADOLC_VECTOR_ /*--------------------------------------------------------------------------*/ #ifdef _FOS_ #ifdef _ABS_NORM_ #define GENERATED_FILENAME "fos_pl_reverse" #else #ifdef _ABS_NORM_SIG_ #define GENERATED_FILENAME "fos_pl_sig_reverse" #else #define GENERATED_FILENAME "fos_reverse" #endif #endif #define RESULTS(l,indexi) results[indexi] #define LAGRANGE(l,indexd) lagrange[indexd] #define RESULTSTRANS(l,indexi) results[indexi] #define LAGRANGETRANS(l,indexd) lagrange[indexd] /*--------------------------------------------------------------------------*/ #elif _FOV_ #define GENERATED_FILENAME "fov_reverse" #define _ADOLC_VECTOR_ #define RESULTS(l,indexi) results[l][indexi] #define LAGRANGE(l,indexd) lagrange[l][indexd] #define RESULTSTRANS(l,indexi) results[indexi][l] #define LAGRANGETRANS(l,indexd) lagrange[indexd][l] #else #if defined(_INT_REV_) #if defined(_TIGHT_) #define GENERATED_FILENAME "int_reverse_t" #endif #if defined(_NTIGHT_) #define GENERATED_FILENAME "int_reverse_s" #endif #define RESULTS(l,indexi) results[l][indexi] #define LAGRANGE(l,indexd) lagrange[l][indexd] #define RESULTSTRANS(l,indexi) results[indexi][l] #define LAGRANGETRANS(l,indexd) lagrange[indexd][l] #else #error Error ! Define [_FOS_ | _FOV_ | _INT_REV_SAFE_ | _INT_REV_TIGHT_ ] #endif #endif /*--------------------------------------------------------------------------*/ /* access to variables */ #ifdef _FOS_ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define ARES_INC *Ares #define AARG_INC *Aarg #define AARG1_INC *Aarg1 #define AARG2_INC *Aarg2 #define ARES_INC_O Ares #define AARG_INC_O /adAarg #define AARG1_INC_O Aarg1 #define AARG2_INC_O Aarg2 #define ASSIGN_A(a,b) a = &b; #else /* _FOV_ */ #ifdef _FOV_ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define ARES_INC *Ares++ #define AARG_INC *Aarg++ #define AARG1_INC *Aarg1++ #define AARG2_INC *Aarg2++ #define ARES_INC_O Ares++ #define AARG_INC_O Aarg++ #define AARG1_INC_O Aarg1++ #define AARG2_INC_O Aarg2++ #define ASSIGN_A(a,b) a = b; #else #ifdef _INT_REV_ #define ARES *Ares #define AARG *Aarg #define AARG1 *Aarg1 #define AARG2 *Aarg2 #define ARES_INC *Ares++ #define AARG_INC *Aarg++ #define AARG1_INC *Aarg1++ #define AARG2_INC *Aarg2++ #define ARES_INC_O Ares++ #define AARG_INC_O Aarg++ #define AARG1_INC_O Aarg1++ #define AARG2_INC_O Aarg2++ #define ASSIGN_A(a,b) a = b; #endif #endif #endif #define TRES rp_T[res] #define TARG rp_T[arg] #define TARG1 rp_T[arg1] #define TARG2 rp_T[arg2] /*--------------------------------------------------------------------------*/ /* loop stuff */ #ifdef _ADOLC_VECTOR_ #define FOR_0_LE_l_LT_p for (l=0; l=0; l--) #else #ifdef _INT_REV_ #define FOR_0_LE_l_LT_p for (l=0; l=0; l--) #else #define FOR_0_LE_l_LT_p #define FOR_p_GT_l_GE_0 #endif #endif #ifdef _FOV_ #define FOR_0_LE_l_LT_pk1 for (l=0; l #include #include "oplate.h" #include "taping_p.h" #include #include "externfcts_p.h" #include "dvlparms.h" #include #include #ifdef ADOLC_AMPI_SUPPORT #include "ampi/ampi.h" #include "ampi/libCommon/modified.h" #endif BEGIN_C_DECLS /****************************************************************************/ /* NOW THE CODE */ #ifdef _FOS_ /****************************************************************************/ /* First-Order Scalar Reverse Pass. */ /****************************************************************************/ #ifdef _ABS_NORM_ /****************************************************************************/ /* Abs-Normal extended adjoint row computation. */ /****************************************************************************/ int fos_pl_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int swchk, /* consistency chk on # of switches */ int rownum, /* required row no. of abs-normal form */ double *results) /* coefficient vectors */ #elif defined(_ABS_NORM_SIG_) /****************************************************************************/ /* Abs-Normal extended adjoint row computation. */ /****************************************************************************/ int fos_pl_sig_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int swchk, /* consistency chk on # of switches */ short *siggrad, double *lagrange, double *results) /* coefficient vectors */ #else int fos_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ double *lagrange, double *results) /* coefficient vectors */ #endif #else #if _FOV_ /****************************************************************************/ /* First-Order Vector Reverse Pass. */ /****************************************************************************/ int fov_reverse(short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int nrows, /* # of Jacobian rows being calculated */ double **lagrange, /* domain weight vector */ double **results) /* matrix of coefficient vectors */ #else #if defined(_INT_REV_) #if defined(_TIGHT_) /****************************************************************************/ /* First Order Vector version of the reverse mode for bit patterns, tight */ /****************************************************************************/ int int_reverse_tight( short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int nrows, /* # of Jacobian rows being calculated */ unsigned long int **lagrange,/* domain weight vector[var][row](in)*/ unsigned long int **results) /* matrix of coeff. vectors[var][row]*/ #endif #if defined(_NTIGHT_) /****************************************************************************/ /* First Order Vector version of the reverse mode, bit pattern, safe */ /****************************************************************************/ int int_reverse_safe( short tnum, /* tape id */ int depen, /* consistency chk on # of deps */ int indep, /* consistency chk on # of indeps */ int nrows, /* # of Jacobian rows being calculated */ unsigned long int **lagrange,/* domain weight vector[var][row](in)*/ unsigned long int **results) /* matrix of coeff. vectors[var][row]*/ #endif #endif #endif #endif { /****************************************************************************/ /* ALL VARIABLES */ unsigned char operation; /* operation code */ int ret_c = 3; /* return value */ locint size = 0; locint res = 0; locint arg = 0; locint arg1 = 0; locint arg2 = 0; #if !defined (_NTIGHT_) double coval = 0; #endif int indexi = 0, indexd = 0; #if defined(_ABS_NORM_) || defined(_ABS_NORM_SIG_) int switchnum; #endif /* loop indices */ #if defined(_FOV_) int l; #endif #if defined(_INT_REV_) int l; #endif int j, ls; /* other necessary variables */ #if !defined (_NTIGHT_) double r0, r_0; int taycheck; int numdep,numind; #endif /*--------------------------------------------------------------------------*/ /* Adjoint stuff */ #ifdef _FOS_ revreal *rp_A; revreal aTmp; #endif #ifdef _FOV_ revreal **rpp_A, *Aqo; revreal aTmp; #endif #if !defined(_NTIGHT_) revreal *rp_T; #endif /* !_NTIGHT_ */ #if !defined _INT_REV_ revreal *Ares, *Aarg, *Aarg1, *Aarg2; #else unsigned long int **upp_A; unsigned long int *Ares, *Aarg, *Aarg1, *Aarg2; unsigned long int aTmp; #endif /*--------------------------------------------------------------------------*/ #ifdef _ADOLC_VECTOR_ int p = nrows; #endif #ifdef _INT_REV_ int p = nrows; #endif /****************************************************************************/ /* extern diff. function variables */ #if defined(_FOS_) # define ADOLC_EXT_FCT_U edfct->dp_U # define ADOLC_EXT_FCT_Z edfct->dp_Z # define ADOLC_EXT_FCT_POINTER fos_reverse # define ADOLC_EXT_FCT_IARR_POINTER fos_reverse_iArr # define ADOLC_EXT_FCT_COMPLETE \ fos_reverse(m, edfct->dp_U, n, edfct->dp_Z, edfct->dp_x, edfct->dp_y) # define ADOLC_EXT_FCT_IARR_COMPLETE \ fos_reverse_iArr(iArrLength,iArr, m, edfct->dp_U, n, edfct->dp_Z, edfct->dp_x, edfct->dp_y) # define ADOLC_EXT_FCT_SAVE_NUMDIRS # define ADOLC_EXT_FCT_V2_U edfct2->up # define ADOLC_EXT_FCT_V2_Z edfct2->zp # define ADOLC_EXT_FCT_V2_COMPLETE \ fos_reverse(iArrLength,iArr,nout,nin,outsz,edfct2->up,insz,edfct2->zp,edfct2->x,edfct2->y,edfct2->context) #else # define ADOLC_EXT_FCT_U edfct->dpp_U # define ADOLC_EXT_FCT_Z edfct->dpp_Z # define ADOLC_EXT_FCT_POINTER fov_reverse # define ADOLC_EXT_FCT_IARR_POINTER fov_reverse_iArr # define ADOLC_EXT_FCT_COMPLETE \ fov_reverse(m, p, edfct->dpp_U, n, edfct->dpp_Z, edfct->dp_x, edfct->dp_y) # define ADOLC_EXT_FCT_IARR_COMPLETE \ fov_reverse_iArr(iArrLength, iArr, m, p, edfct->dpp_U, n, edfct->dpp_Z, edfct->dp_x, edfct->dp_y) # define ADOLC_EXT_FCT_SAVE_NUMDIRS ADOLC_CURRENT_TAPE_INFOS.numDirs_rev = nrows # define ADOLC_EXT_FCT_V2_U edfct2->Up # define ADOLC_EXT_FCT_V2_Z edfct2->Zp # define ADOLC_EXT_FCT_V2_COMPLETE \ fov_reverse(iArrLength,iArr,nout,nin,outsz,p,edfct2->Up,insz,edfct2->Zp,edfct2->x,edfct2->y, edfct2->context) #endif #if !defined(_INT_REV_) locint n, m; ext_diff_fct *edfct; ext_diff_fct_v2 *edfct2; int iArrLength; int *iArr; int loop,oloop; int ext_retc; int oldTraceFlag; locint *insz, *outsz, nin, nout; #endif #ifdef ADOLC_AMPI_SUPPORT MPI_Op op; void *buf, *rbuf; int count, rcount; MPI_Datatype datatype, rtype; int src; int tag; enum AMPI_PairedWith_E pairedWith; MPI_Comm comm; MPI_Status* status; struct AMPI_Request_S request; #endif locint qq; ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; #if defined(ADOLC_DEBUG) /****************************************************************************/ /* DEBUG MESSAGES */ fprintf(DIAG_OUT,"Call of %s(..) with tag: %d, n: %d, m %d,\n", GENERATED_FILENAME, tnum, indep, depen); #ifdef _ADOLC_VECTOR_ fprintf(DIAG_OUT," p: %d\n\n",nrows); #endif #endif /****************************************************************************/ /* INITs */ /*------------------------------------------------------------------------*/ /* Set up stuff for the tape */ /* Initialize the Reverse Sweep */ init_rev_sweep(tnum); failAdditionalInfo3 = depen; failAdditionalInfo4 = indep; if ( (depen != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS]) || (indep != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS]) ) fail(ADOLC_REVERSE_COUNTS_MISMATCH); indexi = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_INDEPENDENTS] - 1; indexd = ADOLC_CURRENT_TAPE_INFOS.stats[NUM_DEPENDENTS] - 1; #if defined(_ABS_NORM_) || defined(_ABS_NORM_SIG_) if (! ADOLC_CURRENT_TAPE_INFOS.stats[NO_MIN_MAX] ) { fprintf(DIAG_OUT, "ADOL-C error: Tape %d was not created compatible " "with %s(..)\n Please call enableMinMaxUsingAbs() " "before trace_on(%d)\n", tnum, GENERATED_FILENAME, tnum); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else if (swchk != ADOLC_CURRENT_TAPE_INFOS.stats[NUM_SWITCHES]) { fprintf(DIAG_OUT, "ADOL-C error: Number of switches passed %d does not " "match with the one recorded on tape %d (%zu)\n",swchk,tnum, ADOLC_CURRENT_TAPE_INFOS.stats[NUM_SWITCHES]); adolc_exit(-1,"",__func__,__FILE__,__LINE__); } else switchnum = swchk - 1; #endif /****************************************************************************/ /* MEMORY ALLOCATION STUFF */ /*--------------------------------------------------------------------------*/ #ifdef _FOS_ /* FOS */ rp_A = (revreal*) calloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES], sizeof(revreal)); if (rp_A == NULL) fail(ADOLC_MALLOC_FAILED); ADOLC_CURRENT_TAPE_INFOS.rp_A = rp_A; rp_T = (revreal *)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * sizeof(revreal)); if (rp_T == NULL) fail(ADOLC_MALLOC_FAILED); ADOLC_CURRENT_TAPE_INFOS.workMode = ADOLC_FOS_REVERSE; #ifdef _ABS_NORM_ memset(results,0,sizeof(double)*(indep+swchk)); #endif # define ADJOINT_BUFFER rp_A # define ADJOINT_BUFFER_ARG_L rp_A[arg] # define ADJOINT_BUFFER_RES_L rp_A[res] # define ADJOINT_BUFFER_ARG rp_A[arg] # define ADJOINT_BUFFER_RES rp_A[res] # define ADOLC_EXT_FCT_U_L_LOOP edfct->dp_U[loop] # define ADOLC_EXT_FCT_Z_L_LOOP edfct->dp_Z[loop] # define ADOLC_EXT_FCT_V2_U_LOOP edfct2->up[oloop][loop] # define ADOLC_EXT_FCT_V2_Z_LOOP edfct2->zp[oloop][loop] # define ADOLC_EXT_FCT_COPY_ADJOINTS(dest,src) dest=src # define ADOLC_EXT_FCT_COPY_ADJOINTS_BACK(dest,src) src=dest /*--------------------------------------------------------------------------*/ #else #if defined _FOV_ /* FOV */ rpp_A = (revreal**)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * sizeof(revreal*)); if (rpp_A == NULL) fail(ADOLC_MALLOC_FAILED); Aqo = (revreal*)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * p * sizeof(revreal)); if (Aqo == NULL) fail(ADOLC_MALLOC_FAILED); for (j=0; jdpp_U[l][loop] # define ADOLC_EXT_FCT_Z_L_LOOP edfct->dpp_Z[l][loop] # define ADOLC_EXT_FCT_V2_U_LOOP edfct2->Up[oloop][loop] # define ADOLC_EXT_FCT_V2_Z_LOOP edfct2->Zp[oloop][loop] # define ADOLC_EXT_FCT_COPY_ADJOINTS(dest,src) dest=src # define ADOLC_EXT_FCT_COPY_ADJOINTS_BACK(dest,src) #else #if defined _INT_REV_ upp_A = myalloc2_ulong(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES], p); #if defined _TIGHT_ ADOLC_CURRENT_TAPE_INFOS.upp_A = upp_A; rp_T = (revreal *)malloc(ADOLC_CURRENT_TAPE_INFOS.stats[NUM_MAX_LIVES] * sizeof(revreal)); if (rp_T == NULL) fail(ADOLC_MALLOC_FAILED); #endif # define ADJOINT_BUFFER upp_A # define ADJOINT_BUFFER_ARG_L upp_A[arg][l] # define ADJOINT_BUFFER_RES_L upp_A[res][l] #endif #endif #endif /****************************************************************************/ /* TAYLOR INITIALIZATION */ #if !defined(_NTIGHT_) ADOLC_CURRENT_TAPE_INFOS.rp_T = rp_T; taylor_back(tnum, &numdep, &numind, &taycheck); if (taycheck < 0) { fprintf(DIAG_OUT,"\n ADOL-C error: reverse fails because it was not" " preceded\nby a forward sweep with degree>0, keep=1!\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); }; if((numdep != depen)||(numind != indep)) fail(ADOLC_REVERSE_TAYLOR_COUNTS_MISMATCH); #endif /* !_NTIGHT_ */ /****************************************************************************/ /* REVERSE SWEEP */ operation=get_op_r(); while (operation != start_of_tape) { /* Switch statement to execute the operations in Reverse */ switch (operation) { /****************************************************************************/ /* MARKERS */ /*--------------------------------------------------------------------------*/ case end_of_op: /* end_of_op */ get_op_block_r(); operation = get_op_r(); /* Skip next operation, it's another end_of_op */ break; /*--------------------------------------------------------------------------*/ case end_of_int: /* end_of_int */ get_loc_block_r(); /* Get the next int block */ break; /*--------------------------------------------------------------------------*/ case end_of_val: /* end_of_val */ get_val_block_r(); /* Get the next val block */ break; /*--------------------------------------------------------------------------*/ case start_of_tape: /* start_of_tape */ break; case end_of_tape: /* end_of_tape */ discard_params_r(); break; /****************************************************************************/ /* COMPARISON */ /*--------------------------------------------------------------------------*/ case eq_zero : /* eq_zero */ arg = get_locint_r(); #if !defined(_NTIGHT_) ret_c = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case neq_zero : /* neq_zero */ case gt_zero : /* gt_zero */ case lt_zero : /* lt_zero */ arg = get_locint_r(); break; /*--------------------------------------------------------------------------*/ case ge_zero : /* ge_zero */ case le_zero : /* le_zero */ arg = get_locint_r(); #if !defined(_NTIGHT_) if (TARG == 0) ret_c = 0; #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* ASSIGNMENTS */ /*--------------------------------------------------------------------------*/ case assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG_INC |= ARES; ARES_INC = 0; #else AARG_INC += ARES; ARES_INC = 0.0; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ res = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case neg_sign_p: case recipr_p: case assign_p: /* assign an adouble variable a assign_d */ /* double value. (=) */ arg = get_locint_r(); res = get_locint_r(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case assign_d_zero: /* assign an adouble variable a assign_d_zero */ case assign_d_one: /* double value (0 or 1). (=) assign_d_one */ res = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ res = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) if (ADOLC_CURRENT_TAPE_INFOS.in_nested_ctx) { FOR_0_LE_l_LT_p RESULTSTRANS(l,indexi) += ARES_INC; } else { FOR_0_LE_l_LT_p RESULTS(l,indexi) = ARES_INC; } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ indexi--; break; /*--------------------------------------------------------------------------*/ case assign_dep: /* assign a float variable a assign_dep */ /* dependent adouble value. (>>=) */ res = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) #if defined(_ABS_NORM_) if (indexd + swchk == rownum) ARES = 1.0; else ARES = 0.0; #else if (ADOLC_CURRENT_TAPE_INFOS.in_nested_ctx) { FOR_0_LE_l_LT_p { ARES_INC = LAGRANGETRANS(l,indexd); LAGRANGETRANS(l,indexd) = 0.0; } } else { FOR_0_LE_l_LT_p ARES_INC = LAGRANGE(l,indexd); } #endif indexd--; break; /****************************************************************************/ /* OPERATION + ASSIGNMENT */ /*--------------------------------------------------------------------------*/ case eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ res = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_plus_p: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ arg = get_locint_r(); res = get_locint_r(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]); FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else AARG_INC += ARES_INC; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ res = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_min_p: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ arg = get_locint_r(); res = get_locint_r(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else AARG_INC -= ARES_INC; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ res = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ #if!defined(_INT_REV_) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p ARES_INC *= coval; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_mult_p: /* Multiply an adouble by a eq_mult_p */ /* flaoting point. (*=) */ arg = get_locint_r(); res = get_locint_r(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; #endif /* !_NTIGHT_ */ #if!defined(_INT_REV_) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p ARES_INC *= coval; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else { aTmp = ARES; /* olvo 980713 nn: ARES = 0.0; */ ARES_INC = (aTmp==0)?0:(aTmp * TARG); AARG_INC += (aTmp==0)?0:(aTmp * TRES); } #endif break; /*--------------------------------------------------------------------------*/ case incr_a: /* Increment an adouble incr_a */ case decr_a: /* Increment an adouble decr_a */ res = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* BINARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case plus_a_a: /* : Add two adoubles. (+) plus a_a */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; AARG2_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += aTmp; AARG2_INC += aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case plus_d_a: /* Add an adouble and a double plus_d_a */ /* (+) */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case plus_a_p: /* Add an adouble and a double plus_a_p */ case min_a_p: /* Subtract an adouble from a min_d_a */ /* (+) */ arg1 = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case min_a_a: /* Subtraction of two adoubles min_a_a */ /* (-) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; AARG2_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += aTmp; AARG2_INC -= aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case min_d_a: /* Subtract an adouble from a min_d_a */ /* double (-) */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC -= aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case mult_a_a: /* Multiply two adoubles (*) mult_a_a */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG2_INC |= aTmp; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG2_INC += (aTmp==0)?0:(aTmp * TARG1); AARG1_INC += (aTmp==0)?0:(aTmp * TARG2); #endif } break; /*--------------------------------------------------------------------------*/ /* olvo 991122: new op_code with recomputation */ case eq_plus_prod: /* increment a product of eq_plus_prod */ /* two adoubles (*) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) #if !defined(_NTIGHT_) /* RECOMPUTATION */ TRES -= TARG1*TARG2; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG2_INC |= ARES; AARG1_INC |= ARES_INC; #else AARG2_INC += ARES * TARG1; AARG1_INC += ARES_INC * TARG2; #endif } break; /*--------------------------------------------------------------------------*/ /* olvo 991122: new op_code with recomputation */ case eq_min_prod: /* decrement a product of eq_min_prod */ /* two adoubles (*) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) #if !defined(_NTIGHT_) /* RECOMPUTATION */ TRES += TARG1*TARG2; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG2_INC |= ARES; AARG1_INC |= ARES_INC; #else AARG2_INC -= ARES * TARG1; AARG1_INC -= ARES_INC * TARG2; #endif } break; /*--------------------------------------------------------------------------*/ case mult_d_a: /* Multiply an adouble by a double mult_d_a */ /* (*) */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(coval * aTmp); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case mult_a_p: /* Multiply an adouble by a double mult_a_p */ /* (*) */ arg1 = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(coval * aTmp); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case div_a_a: /* Divide an adouble by an adouble div_a_a */ /* (/) */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) /* olvo 980922 changed order to allow x=y/x */ #if !defined(_NTIGHT_) r_0 = -TRES; ADOLC_GET_TAYLOR(res); r0 = 1.0 / TARG2; r_0 *= r0; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; AARG2_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += (aTmp==0)?0:(aTmp * r0); AARG2_INC += (aTmp==0)?0:(aTmp * r_0); #endif } break; /*--------------------------------------------------------------------------*/ case div_d_a: /* Division double - adouble (/) div_d_a */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) /* olvo 980922 changed order to allow x=d/x */ r0 = -TRES; if (arg == res) ADOLC_GET_TAYLOR(arg); r0 /= TARG; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } #if !defined(_NTIGHT_) if (arg != res) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /****************************************************************************/ case div_p_a: /* Division double - adouble (/) div_p_a */ arg1 = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) /* olvo 980922 changed order to allow x=d/x */ r0 = -TRES; if (arg == res) ADOLC_GET_TAYLOR(arg); r0 /= TARG; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } #if !defined(_NTIGHT_) if (arg != res) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* SIGN OPERATIONS */ /*--------------------------------------------------------------------------*/ case pos_sign_a: /* pos_sign_a */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case neg_sign_a: /* neg_sign_a */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC -= aTmp; #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* UNARY OPERATIONS */ /*--------------------------------------------------------------------------*/ case exp_op: /* exponent operation exp_op */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp*TRES); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case sin_op: /* sine operation sin_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += (aTmp==0)?0:(aTmp * TARG2); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); ADOLC_GET_TAYLOR(arg2); /* olvo 980710 covalue */ /* NOTE: ADJOINT_BUFFER[arg2] should be 0 already */ #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case cos_op: /* cosine operation cos_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC -= (aTmp==0)?0:(aTmp * TARG2); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); ADOLC_GET_TAYLOR(arg2); /* olvo 980710 covalue */ /* NOTE ADJOINT_BUFFER[arg2] should be 0 already */ #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case atan_op: /* atan_op */ case asin_op: /* asin_op */ case acos_op: /* acos_op */ case asinh_op: /* asinh_op */ case acosh_op: /* acosh_op */ case atanh_op: /* atanh_op */ case erf_op: /* erf_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += (aTmp==0)?0:(aTmp * TARG2); #endif } break; /*--------------------------------------------------------------------------*/ case log_op: /* log_op */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_INT_REV_) r0 = 1.0/TARG; #endif FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } break; /*--------------------------------------------------------------------------*/ case pow_op: /* pow_op */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) /* olvo 980921 changed order to allow x=pow(x,n) */ r0 = TRES; if (arg == res) ADOLC_GET_TAYLOR(arg); if (TARG == 0.0) r0 = 0.0; else r0 *= coval/TARG; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case pow_op_p: /* pow_op_p */ arg1 = get_locint_r(); res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg1]; #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) /* olvo 980921 changed order to allow x=pow(x,n) */ r0 = TRES; if (arg == res) ADOLC_GET_TAYLOR(arg); if (TARG == 0.0) r0 = 0.0; else r0 *= coval/TARG; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case sqrt_op: /* sqrt_op */ res = get_locint_r(); arg = get_locint_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) if (TRES == 0.0) r0 = 0.0; else r0 = 0.5 / TRES; #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG_INC |= aTmp; #else ARES_INC = 0.0; AARG_INC += (aTmp==0)?0:(aTmp * r0); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case gen_quad: /* gen_quad */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); coval = get_val_r(); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; AARG1_INC |= aTmp; #else ARES_INC = 0.0; AARG1_INC += (aTmp==0)?0:(aTmp * TARG2); #endif } #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case min_op: /* min_op */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) #if !defined(_NTIGHT_) if (TARG1 > TARG2) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if ((coval) && (aTmp)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG2_INC |= aTmp; #else AARG2_INC += aTmp; #endif } else if (TARG1 < TARG2) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if ((!coval) && (aTmp)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= aTmp; #else AARG1_INC += aTmp; #endif } else { /* both are equal */ FOR_0_LE_l_LT_p { #if defined(_INT_REV_) aTmp = ARES; ARES_INC = 0; AARG2_INC |= aTmp; AARG1_INC |= aTmp; #else aTmp = ARES / 2.0; ARES_INC = 0.0; AARG2_INC += aTmp; AARG1_INC += aTmp; #endif } if (arg1 != arg2) MINDEC(ret_c,1); } #else FOR_0_LE_l_LT_p { aTmp = ARES; ARES_INC = 0; AARG1_INC |= aTmp; AARG2_INC |= aTmp; } #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case abs_val: /* abs_val */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if defined(_ABS_NORM_) if (rownum == switchnum) { AARG = 1.0; } else { results[indep+switchnum] = ARES; AARG = 0.0; ARES = 0.0; } switchnum--; #elif defined(_ABS_NORM_SIG_) aTmp = ARES; ARES_INC = 0.0; AARG_INC += siggrad[switchnum]*aTmp; switchnum--; #else #if !defined(_NTIGHT_) if (TARG < 0.0) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if ((coval) && (aTmp)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG_INC |= aTmp; #else AARG_INC -= aTmp; #endif } else if (TARG > 0.0) FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if ((!coval) && (aTmp)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG_INC |= aTmp; #else AARG_INC += aTmp; #endif } else FOR_0_LE_l_LT_p { aTmp = ARES; #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif if (aTmp) MINDEC(ret_c,1); } #else FOR_0_LE_l_LT_p { aTmp = ARES; ARES_INC = 0; AARG_INC |= aTmp; } #endif /* !_NTIGHT_ */ #endif /* _ABS_NORM */ break; /*--------------------------------------------------------------------------*/ case ceil_op: /* ceil_op */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) #if !defined(_NTIGHT_) coval = (coval != ceil(TARG) ); #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { #if !defined(_NTIGHT_) if ((coval) && (ARES)) MINDEC(ret_c,2); #endif /* !_NTIGHT_ */ #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif } break; /*--------------------------------------------------------------------------*/ case floor_op: /* floor_op */ res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) #if !defined(_NTIGHT_) coval = ( coval != floor(TARG1) ); #endif /* !_NTIGHT_ */ FOR_0_LE_l_LT_p { #if !defined(_NTIGHT_) if ( (coval) && (ARES) ) MINDEC(ret_c,2); #endif /* !_NTIGHT_ */ #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif } break; /****************************************************************************/ /* CONDITIONALS */ /*--------------------------------------------------------------------------*/ case cond_assign: /* cond_assign */ res = get_locint_r(); arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg2, ADJOINT_BUFFER[arg2]) #if !defined(_NTIGHT_) /* olvo 980924 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0; #else AARG1_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } else { if (res != arg2) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG2_INC |= ARES; ARES_INC = 0; #else AARG2_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } #else if (res != arg1) { FOR_0_LE_l_LT_p AARG1_INC |= ARES_INC; ASSIGN_A( Ares, ADJOINT_BUFFER[res]) } if (res != arg2) { FOR_0_LE_l_LT_p AARG2_INC |= ARES_INC; ASSIGN_A( Ares, ADJOINT_BUFFER[res]) } if ((res != arg1) && (res != arg2)) FOR_0_LE_l_LT_p ARES_INC = 0; #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ case cond_assign_s: /* cond_assign_s */ res = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) #if !defined(_NTIGHT_) /* olvo 980924 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0.0; #else AARG1_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } else if (TARG == 0.0) /* we are at the tie */ FOR_0_LE_l_LT_p if (ARES_INC) MINDEC(ret_c,0); #else if (res != arg1) FOR_0_LE_l_LT_p { AARG1 |= ARES; ARES_INC = 0; } #endif /* !_NTIGHT_ */ break; /*--------------------------------------------------------------------------*/ /* NEW CONDITIONALS */ /*--------------------------------------------------------------------------*/ #if defined(ADOLC_ADVANCED_BRANCHING) case neq_a_a: case eq_a_a: case le_a_a: case ge_a_a: case lt_a_a: case gt_a_a: case neq_a_p: case eq_a_p: case le_a_p: case ge_a_p: case lt_a_p: case gt_a_p: res = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); #endif ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif #if !defined(_NTIGHT_) ADOLC_GET_TAYLOR(res); #endif /* !_NTIGHT_ */ break; #endif /*--------------------------------------------------------------------------*/ case subscript: { #if !defined(_NTIGHT_) double val = #endif get_val_r(); #if !defined(_NTIGHT_) size_t idx, numval = (size_t)trunc(fabs(val)); locint vectorloc; vectorloc = #endif get_locint_r(); res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) idx = (size_t)trunc(fabs(TARG)); if (idx >= numval) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting n=%zu, idx=%zu\n", numval, idx); arg1 = vectorloc+idx; ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0; #else AARG1_INC += ARES; ARES = 0.0; #endif } ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active subscripting does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ } break; case subscript_ref: { #if !defined(_NTIGHT_) double val = #endif get_val_r(); #if !defined(_NTIGHT_) size_t idx, numval = (size_t)trunc(fabs(val)); locint vectorloc; vectorloc = #endif get_locint_r(); res = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) idx = (size_t)trunc(fabs(TARG)); if (idx >= numval) fprintf(DIAG_OUT, "ADOL-C warning: index out of bounds while subscripting (ref) n=%zu, idx=%zu\n", numval, idx); arg1 = (size_t)trunc(fabs(TRES)); /* * This is actually NOP * basically all we need is that arg1 == vectorloc+idx * so doing a check here is probably good */ if (arg1 != vectorloc+idx) { fprintf(DIAG_OUT, "ADOL-C error: indexed active position does not match referenced position\nindexed = %zu, referenced = %d\n", vectorloc+idx, arg1); adolc_exit(-2,"",__func__,__FILE__,__LINE__); } ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active subscripting does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ } break; case ref_copyout: res = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) arg = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG_INC |= ARES; ARES_INC = 0; #else AARG_INC += ARES; ARES_INC = 0.0; #endif } ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif break; case ref_incr_a: /* Increment an adouble incr_a */ case ref_decr_a: /* Increment an adouble decr_a */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_assign_d: /* assign an adouble variable a assign_d */ /* double value. (=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_assign_p: /* assign an adouble variable a assign_p */ arg = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_assign_d_zero: /* assign an adouble variable a assign_d_zero */ case ref_assign_d_one: /* double value (0 or 1). (=) assign_d_one */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) ARES_INC = 0; #else ARES_INC = 0.0; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_assign_a: /* assign an adouble variable an assign_a */ /* adouble value. (=) */ arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p { #if defined(_INT_REV_) AARG_INC |= ARES; ARES_INC = 0; #else AARG_INC += ARES; ARES_INC = 0.0; #endif } ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_assign_ind: /* assign an adouble variable an assign_ind */ /* independent double value (<<=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p RESULTS(l,indexi) = ARES_INC; ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ indexi--; break; case ref_eq_plus_d: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_eq_plus_p: /* Add a floating point to an eq_plus_d */ /* adouble. (+=) */ arg = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_eq_plus_a: /* Add an adouble to another eq_plus_a */ /* adouble. (+=) */ arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]); FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else AARG_INC += ARES_INC; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_eq_min_d: /* Subtract a floating point from an eq_min_d */ /* adouble. (-=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_eq_min_p: /* Subtract a floating point from an eq_min_p */ /* adouble. (-=) */ arg = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_eq_min_a: /* Subtract an adouble from another eq_min_a */ /* adouble. (-=) */ arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else AARG_INC -= ARES_INC; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_eq_mult_d: /* Multiply an adouble by a eq_mult_d */ /* flaoting point. (*=) */ arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = get_val_r(); #if !defined(_INT_REV_) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p ARES_INC *= coval; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_eq_mult_p: /* Multiply an adouble by a eq_mult_p */ /* flaoting point. (*=) */ arg = get_locint_r(); arg1 = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); coval = ADOLC_CURRENT_TAPE_INFOS.pTapeInfos.paramstore[arg]; #if !defined(_INT_REV_) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p ARES_INC *= coval; #endif ADOLC_GET_TAYLOR(res); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case ref_eq_mult_a: /* Multiply one adouble by another eq_mult_a */ /* (*=) */ arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) res = (size_t)trunc(fabs(TARG1)); ADOLC_GET_TAYLOR(res); ASSIGN_A( Ares, ADJOINT_BUFFER[res]) ASSIGN_A( Aarg, ADJOINT_BUFFER[arg]) FOR_0_LE_l_LT_p #if defined(_INT_REV_) AARG_INC |= ARES_INC; #else { aTmp = ARES; /* olvo 980713 nn: ARES = 0.0; */ ARES_INC = (aTmp==0)?0:(aTmp * TARG); AARG_INC += (aTmp==0)?0:(aTmp * TRES); } #endif #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; case vec_copy: size = get_locint_r(); arg = get_locint_r(); res = get_locint_r(); for (qq=0;qq 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0; #else AARG1_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } else { if (res != arg2) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG2_INC |= ARES; ARES_INC = 0; #else AARG2_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ } break; case ref_cond_assign_s: /* cond_assign_s */ arg2 = get_locint_r(); arg1 = get_locint_r(); arg = get_locint_r(); #if !defined(_NTIGHT_) coval = get_val_r(); res = (size_t)trunc(fabs(TARG2)); ADOLC_GET_TAYLOR(res); ASSIGN_A( Aarg1, ADJOINT_BUFFER[arg1]) ASSIGN_A( Ares, ADJOINT_BUFFER[res]) /* olvo 980924 changed code a little bit */ if (TARG > 0.0) { if (res != arg1) FOR_0_LE_l_LT_p { if ((coval <= 0.0) && (ARES)) MINDEC(ret_c,2); #if defined(_INT_REV_) AARG1_INC |= ARES; ARES_INC = 0.0; #else AARG1_INC += ARES; ARES_INC = 0.0; #endif } else FOR_0_LE_l_LT_p if ((coval <= 0.0) && (ARES_INC)) MINDEC(ret_c,2); } else if (TARG == 0.0) /* we are at the tie */ FOR_0_LE_l_LT_p if (ARES_INC) MINDEC(ret_c,0); #else fprintf(DIAG_OUT, "ADOL-C error: active vector element referencing does not work in safe mode, please use tight mode\n"); adolc_exit(-2,"",__func__,__FILE__,__LINE__); #endif /* !_NTIGHT_ */ break; /****************************************************************************/ /* REMAINING STUFF */ /*--------------------------------------------------------------------------*/ case take_stock_op: /* take_stock_op */ res = get_locint_r(); size = get_locint_r(); #if !defined(_NTIGHT_) get_val_v_r(size); #endif /* !_NTIGHT_ */ res += size; for (ls=size; ls>0; ls--) { res--; ASSIGN_A( Ares, ADJOINT_BUFFER[res]) FOR_0_LE_l_LT_p ARES_INC = 0.0; } break; /*--------------------------------------------------------------------------*/ case death_not: /* death_not */ arg2 = get_locint_r(); arg1 = get_locint_r(); for (j=arg1;j<=arg2;j++) { ASSIGN_A(Aarg1, ADJOINT_BUFFER[j]) FOR_0_LE_l_LT_p AARG1_INC = 0.0; } #if !defined(_NTIGHT_) for (j=arg1;j<=arg2;j++) ADOLC_GET_TAYLOR(j); #endif /* !_NTIGHT_ */ break; #if !defined(_INT_REV_) /*--------------------------------------------------------------------------*/ case ext_diff: /* extern differntiated function */ ADOLC_CURRENT_TAPE_INFOS.cpIndex = get_locint_r(); ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev = get_locint_r(); ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev = get_locint_r(); m = get_locint_r(); n = get_locint_r(); ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index = get_locint_r(); ADOLC_EXT_FCT_SAVE_NUMDIRS; edfct = get_ext_diff_fct(ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index); oldTraceFlag = ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; if (edfct->ADOLC_EXT_FCT_POINTER == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_FUNCTION); if (m>0) { if (ADOLC_EXT_FCT_U == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); if (edfct->dp_y==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); } if (n>0) { if (ADOLC_EXT_FCT_Z == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); if (edfct->dp_x==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); } arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (loop = 0; loop < m; ++loop) { ADOLC_EXT_FCT_COPY_ADJOINTS(ADOLC_EXT_FCT_U[loop],ADJOINT_BUFFER_ARG); ++arg; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev; for (loop = 0; loop < n; ++loop) { ADOLC_EXT_FCT_COPY_ADJOINTS(ADOLC_EXT_FCT_Z[loop],ADJOINT_BUFFER_ARG); ++arg; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev; for (loop = 0; loop < n; ++loop,++arg) { edfct->dp_x[loop]=TARG; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (loop = 0; loop < m; ++loop,++arg) { edfct->dp_y[loop]=TARG; } ext_retc = edfct->ADOLC_EXT_FCT_COMPLETE; MINDEC(ret_c, ext_retc); res = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (loop = 0; loop < m; ++loop) { FOR_0_LE_l_LT_p { ADJOINT_BUFFER_RES_L = 0.; /* \bar{v}_i = 0 !!! */ } ++res; } res = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev; for (loop = 0; loop < n; ++loop) { ADOLC_EXT_FCT_COPY_ADJOINTS_BACK(ADOLC_EXT_FCT_Z[loop],ADJOINT_BUFFER_RES); ++res; } if (edfct->dp_y_priorRequired) { arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev+m-1; for (loop = 0; loop < m; ++loop,--arg) { ADOLC_GET_TAYLOR(arg); } } if (edfct->dp_x_changes) { arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev+n-1; for (loop = 0; loop < n; ++loop,--arg) { ADOLC_GET_TAYLOR(arg); } } ADOLC_CURRENT_TAPE_INFOS.traceFlag = oldTraceFlag; break; case ext_diff_iArr: /* extern differntiated function */ ADOLC_CURRENT_TAPE_INFOS.cpIndex = get_locint_r(); ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev = get_locint_r(); ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev = get_locint_r(); m = get_locint_r(); n = get_locint_r(); ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index = get_locint_r(); iArrLength=get_locint_r(); iArr=(int*)malloc(iArrLength*sizeof(int)); for (loop=iArrLength-1;loop>=0;--loop) iArr[loop]=get_locint_r(); get_locint_r(); /* get it again */ ADOLC_EXT_FCT_SAVE_NUMDIRS; edfct = get_ext_diff_fct(ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index); oldTraceFlag = ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; if (edfct->ADOLC_EXT_FCT_IARR_POINTER == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_FUNCTION); if (m>0) { if (ADOLC_EXT_FCT_U == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); if (edfct->dp_y==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); } if (n>0) { if (ADOLC_EXT_FCT_Z == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); if (edfct->dp_x==NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); } arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (loop = 0; loop < m; ++loop) { ADOLC_EXT_FCT_COPY_ADJOINTS(ADOLC_EXT_FCT_U[loop],ADJOINT_BUFFER_ARG); ++arg; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev; for (loop = 0; loop < n; ++loop) { ADOLC_EXT_FCT_COPY_ADJOINTS(ADOLC_EXT_FCT_Z[loop],ADJOINT_BUFFER_ARG); ++arg; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev; for (loop = 0; loop < n; ++loop,++arg) { edfct->dp_x[loop]=TARG; } arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (loop = 0; loop < m; ++loop,++arg) { edfct->dp_y[loop]=TARG; } ext_retc = edfct->ADOLC_EXT_FCT_IARR_COMPLETE; MINDEC(ret_c, ext_retc); res = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev; for (loop = 0; loop < m; ++loop) { FOR_0_LE_l_LT_p { ADJOINT_BUFFER_RES_L = 0.; /* \bar{v}_i = 0 !!! */ } ++res; } res = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev; for (loop = 0; loop < n; ++loop) { ADOLC_EXT_FCT_COPY_ADJOINTS_BACK(ADOLC_EXT_FCT_Z[loop],ADJOINT_BUFFER_RES); ++res; } if (edfct->dp_y_priorRequired) { arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_rev+m-1; for (loop = 0; loop < m; ++loop,--arg) { ADOLC_GET_TAYLOR(arg); } } if (edfct->dp_x_changes) { arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_rev+n-1; for (loop = 0; loop < n; ++loop,--arg) { ADOLC_GET_TAYLOR(arg); } } ADOLC_CURRENT_TAPE_INFOS.traceFlag = oldTraceFlag; break; case ext_diff_v2: nout = get_locint_r(); nin = get_locint_r(); insz = malloc(2*(nin+nout)*sizeof(locint)); outsz = insz + nin; ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_ext_v2 = outsz + nout; ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_ext_v2 = outsz + nout + nin; for (loop=nout-1;loop>=0;--loop) { ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_ext_v2[loop] = get_locint_r(); outsz[loop] = get_locint_r(); } for (loop=nin-1;loop>=0;--loop) { ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_ext_v2[loop] = get_locint_r(); insz[loop] = get_locint_r(); } get_locint_r(); /* nout again */ get_locint_r(); /* nin again */ iArrLength = get_locint_r(); iArr = malloc(iArrLength*sizeof(int)); for (loop=iArrLength-1;loop>=0;--loop) iArr[loop] = get_locint_r(); get_locint_r(); /* iArrLength again */ ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index=get_locint_r(); ADOLC_EXT_FCT_SAVE_NUMDIRS; edfct2 = get_ext_diff_fct_v2(ADOLC_CURRENT_TAPE_INFOS.ext_diff_fct_index); oldTraceFlag = ADOLC_CURRENT_TAPE_INFOS.traceFlag; ADOLC_CURRENT_TAPE_INFOS.traceFlag = 0; if (edfct2->ADOLC_EXT_FCT_POINTER == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_FUNCTION); if (nout>0) { if (ADOLC_EXT_FCT_V2_U == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); if (edfct2->y == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); } if (nin>0) { if (ADOLC_EXT_FCT_V2_Z == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); if (edfct2->x == NULL) fail(ADOLC_EXT_DIFF_NULLPOINTER_ARGUMENT); } for (oloop=0;oloopy[oloop][loop]=TARG; ++arg; } } for (oloop=0;oloopx[oloop][loop]=TARG; ++arg; } } ext_retc = edfct2->ADOLC_EXT_FCT_V2_COMPLETE; MINDEC(ret_c, ext_retc); for (oloop=0;oloopdp_y_priorRequired) { for(oloop=nout-1;oloop>=0;--oloop) { arg = ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_ext_v2[oloop]+outsz[oloop]-1; for (loop=outsz[oloop]-1; loop>=0; --loop) { ADOLC_GET_TAYLOR(arg); --arg; } } } if (edfct2->dp_x_changes) { for(oloop=nin-1;oloop>=0;--oloop) { arg = ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_ext_v2[oloop]+insz[oloop]-1; for (loop=insz[oloop]-1; loop>=0; --loop) { ADOLC_GET_TAYLOR(arg); --arg; } } } ADOLC_CURRENT_TAPE_INFOS.traceFlag = oldTraceFlag; free(iArr); free(insz); insz = 0; iArr = 0; outsz = 0; ADOLC_CURRENT_TAPE_INFOS.lowestXLoc_ext_v2 = 0; ADOLC_CURRENT_TAPE_INFOS.lowestYLoc_ext_v2 = 0; break; #ifdef ADOLC_AMPI_SUPPORT /*--------------------------------------------------------------------------*/ case ampi_send: { BW_AMPI_Send(buf, count, datatype, src, tag, pairedWith, comm); break; } case ampi_recv: { BW_AMPI_Recv(buf, count, datatype, src, tag, pairedWith, comm, status); break; } case ampi_isend: { BW_AMPI_Isend(buf, count, datatype, src, tag, pairedWith, comm, &request); break; } case ampi_irecv: { BW_AMPI_Irecv(buf, count, datatype, src, tag, pairedWith, comm, &request); break; } case ampi_wait: { BW_AMPI_Wait(&request, status); break; } case ampi_barrier: { BW_AMPI_Barrier(comm); break; } case ampi_gather: { BW_AMPI_Gather(buf, count, datatype, rbuf, rcount, rtype, src, comm); break; } case ampi_scatter: { BW_AMPI_Scatter(rbuf, rcount, rtype, buf, count, datatype, src, comm); break; } case ampi_allgather: { BW_AMPI_Allgather(buf, count, datatype, rbuf, rcount, rtype, comm); break; } case ampi_gatherv: { BW_AMPI_Gatherv(buf, count, datatype, rbuf, NULL, NULL, rtype, src, comm); break; } case ampi_scatterv: { BW_AMPI_Scatterv(rbuf, NULL, NULL, rtype, buf, count, datatype, src, comm); break; } case ampi_allgatherv: { BW_AMPI_Allgatherv(buf, count, datatype, rbuf, NULL, NULL, rtype, comm); break; } case ampi_bcast: { BW_AMPI_Bcast(buf, count, datatype, src, comm); break; } case ampi_reduce: { BWB_AMPI_Reduce(buf, rbuf, count, datatype, op, src, comm); break; } case ampi_allreduce: { BW_AMPI_Allreduce(buf, rbuf, count, datatype, op, comm); break; } #endif #endif /* !_INT_REV_ */ /*--------------------------------------------------------------------------*/ default: /* default */ /* Die here, we screwed up */ fprintf(DIAG_OUT,"ADOL-C fatal error in " GENERATED_FILENAME " (" __FILE__ ") : no such operation %d\n", operation); adolc_exit(-1,"",__func__,__FILE__,__LINE__); break; } /* endswitch */ /* Get the next operation */ operation=get_op_r(); } /* endwhile */ /* clean up */ #if !defined(_INT_REV_) free(rp_T); #endif #ifdef _FOS_ free(rp_A); #endif #ifdef _FOV_ myfree2(rpp_A); #endif #ifdef _INT_REV_ free(upp_A); #endif ADOLC_CURRENT_TAPE_INFOS.workMode = ADOLC_NO_MODE; end_sweep(); return ret_c; } /****************************************************************************/ /* THAT'S ALL */ END_C_DECLS ADOL-C-2.6.3/ADOL-C/src/indopro_forward_t.c0000644000175200017520000000137211227420735016450 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: int_forward_t.c Revision: $Id: indopro_forward_t.c 42 2009-07-15 18:37:17Z awalther $ Contents: int_forward (integer forward mode for bit pattern propagation) Copyright (c) Andrea Walther This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _INDO_ 1 #define _INDOPRO_ 1 #define _TIGHT_ 1 #include #undef _INDO_ #undef _INDOPRO_ #undef _TIGHT_ ADOL-C-2.6.3/ADOL-C/src/fos_reverse.c0000644000175200017520000000140611227420735015247 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: fos_reverse.c Revision: $Id: fos_reverse.c 42 2009-07-15 18:37:17Z awalther $ Contents: fos_reverse (first-order-scalar reverse mode) Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz, Hristo Mitev, Sebastian Schlenkrich, Jean Utke, Olaf Vogel This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ----------------------------------------------------------------------------*/ #define _FOS_ 1 #include #undef _FOS_ ADOL-C-2.6.3/ADOL-C/src/revolve.c0000644000175200017520000005500612761540542014417 0ustar coincoin/*---------------------------------------------------------------------------- ADOL-C -- Automatic Differentiation by Overloading in C++ File: revolve.c Revision: $Id: revolve.c 711 2016-08-31 11:37:06Z kulshres $ Contents: optimal binomial checkpointing adapted for ADOL-C Copyright (c) Andrea Walther, Andreas Griewank, Andreas Kowarz This file is part of ADOL-C. This software is provided as open source. Any use, reproduction, or distribution of the software constitutes recipient's acceptance of the terms of the accompanying license file. ---------------------------------------------------------------------------*/ /* ----- * The function REVOLVE coded below is meant to be used as a * * "controller" for running a time-dependent applications program * * in the reverse mode with checkpointing described in the paper * * "Achieving logarithmic Growth in temporal and spatial complexity * * in reverse automatic differentiation", Optimization Methods and * * Software, Vol.1 pp. 35-54. * * A postscript source of that paper can be found in the ftp sites * * info.mcs.anl.gov and nbtf02.math.tu-dresden.de. * * Apart from REVOLVE this file contains five auxiliary routines * * NUMFORW, EXPENSE, MAXRANGE, and ADJUST. * * * *--------------------------------------------------------------------* * * * To utilize REVOLVE the user must have procedures for * * - Advancing the state of the modeled system to a certain time. * * - Saving the current state onto a stack of snapshots. * * - Restoring the the most recently saved snapshot and * * restarting the forward simulation from there. * * - Initializing the adjoints at the end of forward sweep. * * - Performing one combined forward and adjoint step. * * Through an encoding of its return value REVOLVE asks the * * calling program to perform one of these 'actions', which we will * * refer to as * * * * 'advance', 'takeshot', 'restore', 'firsturn' and 'youturn' .* * There are two other return values, namely * * 'terminate' and 'error' * * which indicate a regular or faulty termination of the calls * * to REVOLVE. * * * * The action 'firsturn' includes a 'youturn', in that it requires * * -advancing through the last time-step with recording * * of intermediates * * -initializing the adjoint values (possibly after * * performing some IO) * * -reversing the last time step using the record just written * * The action 'firsturn' is obtained when the difference FINE-CAPO * * has been reduced to 1 for the first time. * * * *--------------------------------------------------------------------* * * * The calling sequence is * * * * REVOLVE(CHECK,CAPO,FINE,SNAPS,INFO) * * * * with the return value being one of the actions to be taken. The * * calling parameters are all integers with the following meaning * * * * CHECK number of checkpoint being written or retrieved * * CAPO beginning of subrange currently being processed * * FINE end of subrange currently being processed * * SNAPS upper bound on number of checkpoints taken * * INFO determines how much information will be printed * * and contains information about an error occurred * * * * Since REVOLVE involves only a few integer operations its * * run-time is truly negligible within any nontrivial application. * * * * The parameter SNAPS is selected by the user (possibly with the * * help of the routines EXPENSE and ADJUST described below ) and * * remains unchanged throughout. * * * * The pair (CAPO,FINE) always represents the initial and final * * state of the subsequence of time steps currently being traversed * * backwards. * * * * The conditions * * CHECK >= -1 and CAPO <= FINE * * are necessary and sufficient for a regular response of REVOLVE. * * If either condition is violated the value 'error' is returned. * * * * The first call to REVOLVE must be with CHECK=-1 so that * * appropriate initializations can be performed internally. * * * * When CHECK =-1 and CAPO = FINE then 'terminate' is returned as * * action value. This combination necessarily arises after a * * sufficiently large number of calls to REVOLVE, which depends * * only on the initial difference FINE-CAPO. * * * * The last parameter INFO determines how much information about * * the actions performed will be printed. When INFO =0 no * * information is sent to standard output. When INFO > 0 REVOLVE * * produces an output that contains a prediction of the number of * * forward steps and of the factor by which the execution will slow * * down. When an error occurs, the return value of INFO contains * * information about the reason: * * * * INFO = 10: number of checkpoints stored exceeds CHECKUP, * * increase constant CHECKUP and recompile * * INFO = 11: number of checkpoints stored exceeds SNAPS, ensure * * SNAPS greater than 0 and increase initial FINE * * INFO = 12: error occurs in NUMFORW * * INFO = 13: enhancement of FINE, SNAPS checkpoints stored, * * SNAPS must be increased * * INFO = 14: number of SNAPS exceeds CHECKUP, increase constant * * CHECKUP and recompile * * INFO = 15: number of REPS exceeds REPSUP, increase constant * * REPSUP and recompile * * * *--------------------------------------------------------------------* * * * Some further explanations and motivations: * * * * There is an implicit bound on CHECK through the dimensioning of * * the integer array CH[CHEKUP] with CHECKUP = 64 being the default.* * If anybody wants to have that even larger he must change the * * source. Also for the variable REPS an upper bound REPSUP is * * defined. The default value equals 64. If during a call to * * TREEVERSE a (CHECKUP+1)-st checkpoint would normally be called * * for then control is returned after an appropriate error message. * * When the calculated REPS exceeds REPSUP also an error message * * occurs. * * During the forward sweep the user is free to change the last * * three parameters from call to call, except that FINE may never * * be less than the current value of CAPO. This may be useful when * * the total number of time STEPS to be taken is not a priori * * known. The choice FINE=CAPO+1 initiates the reverse sweep, which * * happens automatically if is left constant as CAPO is eventually * * moved up to it. Once the first reverse or restore action has * * been taken only the last two parameters should be changed. * * * *--------------------------------------------------------------------* * * * The necessary number of forward steps without recording is * * calculated by the function * * * * NUMFORW(STEPS,SNAPS) * * * * STEPS denotes the total number of time steps, i.e. FINE-CAPO * * during the first call of REVOLVE. When SNAPS is less than 1 an * * error message will be given and -1 is returned as value. * * * *--------------------------------------------------------------------* * * * To choose an appropriated value of SNAPS the function * * * * EXPENSE(STEPS,SNAPS) * * * * estimates the run-time factor incurred by REVOLVE for a * * particular value of SNAPS. The ratio NUMFORW(STEPS,SNAPS)/STEPS * * is returned. This ratio corresponds to the run-time factor of * * the execution relative to the run-time of one forward time step. * * * *--------------------------------------------------------------------* * * * The auxiliary function * * * * MAXRANGE(SNAPS,REPS) * * * * returns the integer (SNAPS+REPS)!/(SNAPS!REPS!) provided * * SNAPS >=0, REPS >= 0. Otherwise there will be appropriate error * * messages and the value -1 will be returned. If the binomial * * expression is not representable as a signed 4 byte integer, * * greater than 2^31-1, this maximal value is returned and a * * warning message printed. * * * *--------------------------------------------------------------------* * * * Furthermore, the function * * * * ADJUST(STEPS) * * * * is provided. It can be used to determine a value of SNAPS so * * that the increase in spatial complexity equals approximately the * * increase in temporal complexity. For that ADJUST computes a * * return value satisfying SNAPS ~= log_4 (STEPS) because of the * * theory developed in the paper mentioned above. * * * *--------------------------------------------------------------------*/ #include #include "taping_p.h" #define MAXINT 2147483647 #ifndef _OPENMP revolve_nums revolve_numbers; #else revolve_nums *revolve_numbers = NULL; #endif /* ************************************************************************* */ int numforw(int steps, int snaps) { int reps, range, num; if (snaps < 1) { printf(" error occurs in numforw: snaps < 1\n"); return -1; } if (snaps > ADOLC_CHECKUP) { printf(" number of snaps=%d exceeds ADOLC_CHECKUP \n",snaps); printf(" redefine 'ADOLC_CHECKUP' \n"); return -1; } reps = 0; range = 1; while(range < steps) { reps += 1; range = range*(reps + snaps)/reps; } printf("range = %d \n",range); if (reps > ADOLC_REPSUP) { printf(" number of reps=%d exceeds ADOLC_REPSUP \n",reps); printf(" redefine 'ADOLC_REPSUP' \n"); return -1; } num = reps * steps - range*reps/(snaps+1); return num; } /* ************************************************************************* */ double expense(int steps, int snaps) { double ratio; if (snaps < 1) { printf(" error occurs in expense: snaps < 0\n"); return -1; } if (steps < 1) { printf(" error occurs in expense: steps < 0\n"); return -1; } ratio = ((double) numforw(steps,snaps)); if (ratio == -1) return -1; ratio = ratio/steps; return ratio; } /* ************************************************************************* */ int maxrange(int ss, int tt) { int i, ires; double res = 1.0; if((tt<0) || (ss<0)) { printf("error in MAXRANGE: negative parameter"); return -1; } for(i=1; i<= tt; i++) { res *= (ss + i); res /= i; if (res > MAXINT) { ires=MAXINT; printf("warning from MAXRANGE: returned maximal integer %d\n", ires); return ires; } } ires = res; return ires; } /* ************************************************************************* */ int adjust(int steps) { int snaps, s, reps; snaps = 1; reps = 1; s = 0; while( maxrange(snaps+s, reps+s) > steps ) s--; while( maxrange(snaps+s, reps+s) < steps ) s++; snaps += s; reps += s ; s = -1; while( maxrange(snaps,reps) >= steps ) { if (snaps > reps) { snaps -= 1; s = 0; } else { reps -= 1; s = 1; } } if ( s == 0 ) snaps += 1 ; if ( s == 1 ) reps += 1; return snaps; } /* ************************************************************************* */ enum revolve_action revolve (int* check,int* capo,int* fine,int snaps,int* info) { int ds, oldcapo, num, bino1, bino2, bino3, bino4, bino5, bino6; /* (*capo,*fine) is the time range currently under consideration */ /* ch[j] is the number of the state that is stored in checkpoint j */ ADOLC_OPENMP_THREAD_NUMBER; ADOLC_OPENMP_GET_THREAD_NUMBER; REVOLVE_NUMBERS.commands += 1; if ((*check < -1) || (*capo > *fine)) { *info = 9; return revolve_error; } if ((*check == -1) && (*capo < *fine)) { if (*check == -1) REVOLVE_NUMBERS.turn = 0; /* initialization of turn counter */ *REVOLVE_NUMBERS.ch = *capo-1; } switch(*fine-*capo) { case 0: /* reduce capo to previous checkpoint, unless done */ if(*check == -1 || *capo==*REVOLVE_NUMBERS.ch ) { *check -= 1; if (*info > 0) { printf(" \n advances: %5d",REVOLVE_NUMBERS.advances); printf(" \n takeshots: %4d",REVOLVE_NUMBERS.takeshots); printf(" \n commands: %5d \n",REVOLVE_NUMBERS.commands); } return revolve_terminate; } else { *capo = REVOLVE_NUMBERS.ch[*check]; REVOLVE_NUMBERS.oldfine = *fine; return revolve_restore; } case 1: /* (possibly first) combined forward/reverse step */ *fine -= 1; if(*check >= 0 && REVOLVE_NUMBERS.ch[*check] == *capo) *check -= 1; if(REVOLVE_NUMBERS.turn == 0) { REVOLVE_NUMBERS.turn = 1; REVOLVE_NUMBERS.oldfine = *fine; return revolve_firsturn; } else { REVOLVE_NUMBERS.oldfine = *fine; return revolve_youturn; } default: if(*check == -1 || REVOLVE_NUMBERS.ch[*check] != *capo) { *check += 1 ; if(*check >= ADOLC_CHECKUP) { *info = 10; return revolve_error; } if(*check+1 > snaps) { *info = 11; return revolve_error; } REVOLVE_NUMBERS.ch[*check] = *capo; if (*check == 0) { REVOLVE_NUMBERS.advances = 0; REVOLVE_NUMBERS.takeshots = 0; REVOLVE_NUMBERS.commands = 1; REVOLVE_NUMBERS.oldsnaps = snaps; if (snaps > ADOLC_CHECKUP) { *info = 14; return revolve_error; } if (*info > 0) { num = numforw(*fine-*capo,snaps); if (num == -1) { *info = 12; return revolve_error; } printf(" prediction of needed forward steps: %8d => " "\n",num); printf(" slowdown factor: %8.4f \n\n", ((double) num)/(*fine-*capo)); } } REVOLVE_NUMBERS.takeshots += 1; REVOLVE_NUMBERS.oldfine = *fine; return revolve_takeshot; } else { if ((REVOLVE_NUMBERS.oldfine < *fine) && (snaps == *check+1)) { *info = 13; return revolve_error; } oldcapo = *capo; ds = snaps - *check; if (ds < 1) { *info = 11; return revolve_error; } REVOLVE_NUMBERS.reps = 0; REVOLVE_NUMBERS.range = 1; while(REVOLVE_NUMBERS.range < *fine - *capo) { REVOLVE_NUMBERS.reps += 1; REVOLVE_NUMBERS.range = REVOLVE_NUMBERS.range * (REVOLVE_NUMBERS.reps + ds) / REVOLVE_NUMBERS.reps; } if (REVOLVE_NUMBERS.reps > ADOLC_REPSUP) { *info = 15; return revolve_error; } if (snaps != REVOLVE_NUMBERS.oldsnaps) { if (snaps > ADOLC_CHECKUP) { *info = 14; return revolve_error; } } bino1 = REVOLVE_NUMBERS.range * REVOLVE_NUMBERS.reps / (ds+REVOLVE_NUMBERS.reps); bino2 = (ds > 1) ? bino1*ds/(ds+REVOLVE_NUMBERS.reps-1) : 1; if (ds == 1) bino3 = 0; else bino3 = (ds > 2) ? bino2 * (ds - 1) / (ds + REVOLVE_NUMBERS.reps - 2) : 1; bino4 = bino2*(REVOLVE_NUMBERS.reps-1)/ds; if (ds < 3) bino5 = 0; else bino5 = (ds > 3) ? bino3*(ds-2)/REVOLVE_NUMBERS.reps : 1; bino6 = 0; /* range = beta(c,r) >= l (r -> min) * bino1 = beta(c,r-1) * bino2 = beta(c-1,r-1) * bino3 = beta(c-2,r-1) * bino4 = beta(c,r-2) * bino5 = beta(c-3,r) */ /* new version by A. Kowarz * l^ as large as possible * bino6 = beta(c-1,r-2) if (ds < 1) bino6 = 0; else bino6 = (ds > 1) ? bino2*(reps-1)/(ds+reps-2) : 1; if (*fine-*capo>=range-bino5) *capo += bino1; else if (*fine-*capo>bino1+bino2) *capo = *fine-bino2-bino3; else if (*fine-*capo>=bino1+bino6) *capo += bino1-bino3; else *capo = *fine-bino1+bino4; */ /* new version by A. Kowarz * l^ as small as possible * bino6 = beta(c-1,r) */ bino6 = bino1*ds/REVOLVE_NUMBERS.reps; if (*fine-*capo<=bino1+bino3) *capo += bino4; else if (*fine-*capo= range - bino5) *capo = *capo + bino1; else *capo = *fine-bino2-bino3; } */ if (*capo == oldcapo) *capo = oldcapo+1; REVOLVE_NUMBERS.advances = REVOLVE_NUMBERS.advances + *capo - oldcapo; REVOLVE_NUMBERS.oldfine = *fine; return revolve_advance; } } } ADOL-C-2.6.3/ADOL-C/Makefile.am0000644000175200017520000000301012562262231014015 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 38 2009-06-17 15:48:09Z awalther $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz, Kshitij Kulshreshtha ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## AUTOMAKE_OPTIONS = foreign if DOCEXA SUBDIRS = src . test examples else if ADDEXA SUBDIRS = src . test examples else if PAREXA SUBDIRS = src . test examples else SUBDIRS = src . test endif endif endif SUBDIRS += include MAINTAINERCLEANFILES = Makefile.in lib_LTLIBRARIES = lib@adolclib@.la lib@adolclib@_la_LDFLAGS = -version-info 3:0:1 -no-undefined lib@adolclib@_la_SOURCES = dummy.cpp lib@adolclib@_la_LIBADD = src/libadolcsrc.la if BUILD_ADOLC_AMPI_SUPPORT lib@adolclib@_la_LIBADD += src/libadolcampi.la if DARWIN lib@adolclib@_la_LDFLAGS += -Wl,-undefined,dynamic_lookup endif endif lib@adolclib@_la_LIBADD += src/drivers/libdrivers.la src/tapedoc/libtapedoc.la src/lie/liblie.la if SPARSE lib@adolclib@_la_LIBADD += src/sparse/libsparse.la endif BUILT_SOURCES = dummy.cpp dummy.cpp: touch $@ CC = $(saveCC) CXX = $(saveCXX) test: cd test; $(MAKE) test .PHONY: test ADOL-C-2.6.3/BUGS0000644000175200017520000000064311154001222011541 0ustar coincoinNot many: - incorrect results in rare cases if using malloc => default for ADOL-C memory allocation changed to calloc - operations like adouble=value/adouble, adouble=value*adouble, etc. that overwrite the adouble argument cause either a segmentation fault, an error in seeking/reading the taylor stack or wrong derivatives when applying the reverse mode (only one taylor gets written but two are read back) ADOL-C-2.6.3/configure.ac0000644000175200017520000005547413037352546013404 0ustar coincoin############################################################################## # configure.ac -- Process this file with autoconf to produce configure # Revision: $Id: configure.ac 732 2017-01-17 08:27:18Z kulshres $ # # Copyright (C) Andrea Walther, Andreas Kowarz # # contains patches from the COIN OR libtool # ############################################################################## define([ADOLC_VER], [2]) define([ADOLC_SUB], [6]) define([ADOLC_LVL], [3]) AC_PREREQ(2.67) AC_INIT(adolc, ADOLC_VER.ADOLC_SUB.ADOLC_LVL, [adol-c@list.coin-or.org]) config_flags="$*" AC_REVISION($Revision: 732 $) AC_CONFIG_SRCDIR([ADOL-C/src/adouble.cpp]) AC_CONFIG_AUX_DIR([autoconf]) AC_CONFIG_MACRO_DIR([autoconf]) AC_CONFIG_HEADERS([ADOL-C/src/config.h]) AC_PREFIX_DEFAULT(${HOME}/adolc_base) AM_INIT_AUTOMAKE([1.11 dist-bzip2 foreign subdir-objects]) AM_MAINTAINER_MODE([disable]) AM_SILENT_RULES([yes]) adolclib=adolc if test "x$CFLAGS" == x ; then ac_shell_cflags="not_set" else ac_shell_cflags="$CFLAGS" fi if test "x$CXXFLAGS" == x ; then ac_shell_cxxflags="not_set" else ac_shell_cxxflags="$CXXFLAGS" fi libdir_set_on_cmd="no" for i in $config_flags ; do case $i in -libdir | --libdir | --libdi | --libd | -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir_set_on_cmd="yes" break ;; esac done AM_CONDITIONAL(DARWIN, [test "x${host_os#darwin}" != "x${host_os}"]) AC_MSG_CHECKING(whether to build ADOL-C with adjoinable MPI (AMPI) support) AC_ARG_ENABLE(ampi, [AS_HELP_STRING([--enable-ampi],[build ADOL-C with adjoinable MPI (AMPI) support [default=disabled]])], [adolc_ampi_support=$enableval],[adolc_ampi_support=no]) AC_MSG_RESULT($adolc_ampi_support) AM_CONDITIONAL(BUILD_ADOLC_AMPI_SUPPORT,[test x${adolc_ampi_support} = xyes]) if test x"${adolc_ampi_support}" = xyes ; then AC_DEFINE(ADOLC_AMPI_SUPPORT,1,[defined if adjoinable MPI support is to be compiled in]) fi LT_PREREQ([2.2.6]) # checks for programs AC_PROG_CXX AX_CXX_COMPILE_STDCXX_11(noext,mandatory) AC_PROG_CC AC_PROG_CC_C_O AC_PROG_CC_C99 AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET LT_INIT([disable-static win32-dll dlopen]) if test "x$enable_static" != "xno" ; then AC_MSG_WARN([Linking a user program with static ADOL-C library will always result in a segmentation fault]) fi MPI_CONF_PRE AC_CHECK_SIZEOF([void *]) if test "x$ac_cv_sizeof_void_p" = "x8" ; then _lib=lib64 else _lib=lib fi if test "x$libdir_set_on_cmd" = "xno" ; then libdir='${exec_prefix}'/"${_lib}" AC_SUBST(_lib) AC_SUBST(libdir) fi # check for builtin ACX_C_BUILTIN_EXPECT # checks for header files AC_HEADER_STDC AC_HEADER_TIME AC_HEADER_STDBOOL AC_CHECK_HEADERS([stddef.h stdlib.h stdio.h string.h unistd.h sys/timeb.h]) # checks for types AC_C_CONST AC_C_INLINE AC_TYPE_SIZE_T AC_STRUCT_TM # Checks for libraries and fuctions AC_SEARCH_LIBS([pow], [m]) AC_CHECK_FUNCS([floor fmax fmin ftime pow sqrt strchr strtol trunc]) # substitutions AC_SUBST(ac_aux_dir) # ADOL-C configuration AC_DEFINE(ADOLC_VERSION,ADOLC_VER,[ADOL-C Version]) AC_DEFINE(ADOLC_SUBVERSION,ADOLC_SUB,[ADOL-C Subversion]) AC_DEFINE(ADOLC_PATCHLEVEL,ADOLC_LVL,[ADOL-C Patchlevel]) ADOLC_VERSION=ADOLC_VER ADOLC_SUBVERSION=ADOLC_SUB ADOLC_PATCHLEVEL=ADOLC_LVL AC_SUBST(ADOLC_VERSION) AC_SUBST(ADOLC_SUBVERSION) AC_SUBST(ADOLC_PATCHLEVEL) # Checks for library functions AC_FUNC_MALLOC AC_FUNC_REALLOC if test x$ac_cv_func_malloc_0_nonnull != xyes ; then AC_DEFINE_UNQUOTED([calloc],[rpl_calloc],[Define to rpl_calloc if the replacement function should be used.]) fi AC_MSG_CHECKING(whether to use calloc or malloc for memory allocation) AC_ARG_ENABLE(use-calloc,[AS_HELP_STRING([--disable-use-calloc], [disable use of calloc and use malloc instead for memory allocation [default=calloc is used]])], [use_calloc=$enableval],[use_calloc=yes]) if test x$use_calloc = xyes ; then AC_MSG_RESULT(calloc) AC_DEFINE(ADOLC_USE_CALLOC,1,[Use calloc instead of malloc for memory allocation]) else AC_MSG_RESULT(malloc) fi AC_MSG_CHECKING(whether to enable atrig/erf functions) AC_ARG_ENABLE(atrig-erf,[AS_HELP_STRING([--enable-atrig-erf], [enable atrig and erf functions in ADOL-C [default=no]])], [use_atrig_erf=$enableval],[use_atrig_erf=no]) AC_MSG_RESULT($use_atrig_erf) if test x$use_atrig_erf = xyes ; then ATRIG_ERF="#define ATRIG_ERF 1" else ATRIG_ERF="#undef ATRIG_ERF" fi AC_SUBST(ATRIG_ERF) AC_MSG_CHECKING(whether to use 32-bit or 64-bit locations) AC_ARG_ENABLE(ulong,[AS_HELP_STRING([--enable-ulong], [enable 64-bit locations (only available on 64-bit systems) [default=32-bit]])], [use_ulong=$enableval],[use_ulong=no]) if test x$use_ulong = xyes -a 0$ac_cv_sizeof_void_p -ge 8 ; then UINT_TYPE=uint64_t AC_MSG_RESULT(64-bit) else UINT_TYPE=uint32_t AC_MSG_RESULT(32-bit) fi AC_SUBST(UINT_TYPE) AC_MSG_CHECKING(whether to use single or double precision) AC_ARG_ENABLE(double,[AS_HELP_STRING([--disable-double], [disable double precision arithmetic [untested, default=double is enabled]])], [use_double=$enableval],[use_double=yes]) if test x$use_double = xno ; then REAL_TYPE=float echo echo -n "using ${REAL_TYPE} is not well tested, please report bugs if you find any..." else REAL_TYPE=double fi AC_MSG_RESULT($REAL_TYPE) AC_SUBST(REAL_TYPE) AC_MSG_CHECKING(whether to enable advanced branching operations) AC_ARG_ENABLE(advanced-branching, [AS_HELP_STRING([--enable-advanced-branching], [enable advanced branching operations to reduce retaping [default=no]. The boolean valued comparison operators with two adouble arguments will not return boolean results but the active results may be used to automatically switch branches in conjunction with condassign or advector (see manual).])], [use_advbranch=$enableval],[use_advbranch=no]) AC_MSG_RESULT($use_advbranch) if test x$use_advbranch = xyes ; then ADVBRANCH="#define ADOLC_ADVANCED_BRANCHING 1" else ADVBRANCH="#undef ADOLC_ADVANCED_BRANCHING" fi AC_SUBST(ADVBRANCH) AC_SUBST(ADVBRANCH) AC_MSG_CHECKING(whether to use ADOL-C debug mode) AC_ARG_ENABLE(debug, [ AS_HELP_STRING([--enable-debug],[enable ADOL-C debug mode [default=no]])], [ adolc_debug=$enableval AC_MSG_RESULT($adolc_debug) ], [ adolc_debug=no AC_MSG_RESULT(no) ]) AC_MSG_CHECKING(whether to use ADOL-C hard debug mode) AC_ARG_ENABLE(harddebug, [ AS_HELP_STRING([--enable-harddebug],[enable ADOL-C hard debug mode [default=no]])], [ adolc_harddebug=$enableval AC_MSG_RESULT($adolc_harddebug) ], [ adolc_harddebug=no AC_MSG_RESULT(no) ]) if test x$adolc_harddebug == xyes ; then adolc_debug=yes AC_DEFINE(ADOLC_HARDDEBUG,1,[ADOL-C hard debug mode]) fi if test x$adolc_debug == xyes ; then AC_DEFINE(ADOLC_DEBUG,1,[ADOL-C debug mode]) fi AC_MSG_CHECKING(whether the default adouble constructor should initialize the value to 0) AC_ARG_ENABLE(stdczero, [ AS_HELP_STRING([--disable-stdczero],[adouble default constructor does not initialize the value to zero (improves performance but yields incorrect results for implicit array initializations, see manual) [default=enabled]])], [ adolc_stdczero=no AC_MSG_RESULT(no) ], [ adolc_stdczero=yes AC_MSG_RESULT(yes) ]) if test x$adolc_stdczero == xyes; then AC_DEFINE(ADOLC_ADOUBLE_STDCZERO,1,[ADOL-C adouble zeroing mode]) fi AC_MSG_CHECKING(whether the adouble variables have a late initialize option for functions like malloc/realloc) AC_ARG_ENABLE(lateinit, [ AS_HELP_STRING([--enable-lateinit],[adouble constructors need to be called. With malloc or realloc that is not the case. With this option the adouble can do a late initialization.) [default=disabled]])], [ adolc_late_init=yes AC_MSG_RESULT(yes) ], [ adolc_late_init=no AC_MSG_RESULT(no) ]) if test x$adolc_late_init == xyes; then AC_DEFINE(ADOLC_ADOUBLE_LATEINIT,1,[ADOL-C adouble late initialization mode]) fi AC_MSG_CHECKING(whether errno is thread save) AC_ARG_ENABLE(tserrno, [ AS_HELP_STRING([--enable-tserrno],[use errno as thread number cache [default=no]])], [ adolc_tserrno=$enableval AC_MSG_RESULT($adolc_tserrno) ], [ adolc_tserrno=no AC_MSG_RESULT(no) ]) if test x$adolc_tserrno == xyes ; then AC_DEFINE(ADOLC_THREADSAVE_ERRNO,1,[ADOL-C thread save errno mode]) fi AC_MSG_CHECKING(which flag to use to enable OpenMP) AC_ARG_WITH(openmp-flag, [AS_HELP_STRING([--with-openmp-flag=FLAG], [use FLAG to enable OpenMP at compile time [default=none]])], [ac_adolc_openmpflag=$withval AC_MSG_RESULT($ac_adolc_openmpflag)], [ac_adolc_openmpflag="" AC_MSG_RESULT(none)]) AX_BOOST_BASE([1.54],[boost_new=yes],[boost_new=no]) if test x$boost_new = xyes ; then CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" AC_LANG_PUSH([C++]) AC_CHECK_HEADERS([boost/pool/pool_alloc.hpp]) AC_LANG_POP([C++]) AX_BOOST_SYSTEM LDFLAGS="$LDFLAGS $BOOST_LDFLAGS $BOOST_SYSTEM_LIB" fi if test "x$want_boost" = xyes -a "x$boost_new" = xyes -a "x$ac_cv_header_boost_pool_pool_alloc_hpp" = xyes -a "x$link_system" = xyes ; then using_boost_pool=yes else using_boost_pool=no fi if test "x$using_boost_pool" = xyes -a "x$ac_adolc_openmpflag" = x ; then AC_DEFINE(BOOST_POOL_NO_MT,1,[Boost pool should not assume multithreading]) fi # ADOL-C Sparse facility AC_MSG_CHECKING(whether to build sparse drivers) AC_ARG_ENABLE(sparse, [ AS_HELP_STRING([--enable-sparse],[build sparse drivers [default=disabled]])], [sparse=$enableval AC_MSG_RESULT($sparse)], [sparse="no" AC_MSG_RESULT(no)]) COLPACK_CONF AM_CONDITIONAL(SPARSE,[test x${sparse} = xyes]) if test x$sparse = xyes ; then AC_DEFINE(SPARSE,[1],[Define 1 if sparse derivative propagation is to be enabled]) fi # ADOL-C Examples AC_MSG_CHECKING(whether to build documented examples) AC_ARG_ENABLE(docexa, [ AS_HELP_STRING([--enable-docexa],[build documented examples [default=disabled]])], [docexa=$enableval AC_MSG_RESULT(yes)], [docexa="no" AC_MSG_RESULT(no)]) AM_CONDITIONAL(DOCEXA,[test x${docexa} = xyes]) AC_MSG_CHECKING(whether to build additional examples) AC_ARG_ENABLE(addexa, [AS_HELP_STRING([--enable-addexa], [build additional examples [default=disabled]])], [addexa=$enableval AC_MSG_RESULT(yes)], [addexa="no" AC_MSG_RESULT(no)]) AM_CONDITIONAL(ADDEXA,[test x${addexa} = xyes]) AC_MSG_CHECKING(whether to build parallel example) AC_ARG_ENABLE(parexa, [AS_HELP_STRING([--enable-parexa], [build parallel example [default=disabled], if enabled -with-openmp-flag=FLAG required])], [parexa=$enableval AC_MSG_RESULT(yes)], [parexa="no" AC_MSG_RESULT(no)]) AM_CONDITIONAL(PAREXA,[test x${parexa} = xyes]) # ADOL-C Compilation flags AC_MSG_CHECKING(which CFLAGS to use) AC_ARG_WITH(cflags, [AS_HELP_STRING([--with-cflags=FLAGS], [use CFLAGS=FLAGS (default: -O2)])], [ac_adolc_cflags="$withval" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cflags="$ac_adolc_cflags -g -O0" fi ac_adolc_cflags="$ac_adolc_cflags $ac_adolc_openmpflag" AC_SUBST(ac_adolc_cflags) AC_MSG_RESULT($ac_adolc_cflags)], [if test "$ac_shell_cflags" = "not_set"; then ac_adolc_cflags="-O2" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cflags="-g -O0 -Wall -ansi" fi else ac_adolc_cflags="$CFLAGS" fi ac_adolc_cflags="$ac_adolc_cflags $ac_adolc_openmpflag" AC_SUBST(ac_adolc_cflags) AC_MSG_RESULT($ac_adolc_cflags)]) AC_MSG_CHECKING(which CXXFLAGS to use) AC_ARG_WITH(cxxflags, [AS_HELP_STRING([--with-cxxflags=FLAGS], [use CXXFLAGS=FLAGS (default: -O2)])], [ac_adolc_cxxflags="$withval" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cxxflags="$ac_adolc_cxxflags -g -O0" fi ac_adolc_cxxflags="$ac_adolc_cxxflags $ac_adolc_openmpflag" AC_SUBST(ac_adolc_cxxflags) AC_MSG_RESULT($ac_adolc_cxxflags)], [if test "$ac_shell_cxxflags" = "not_set"; then ac_adolc_cxxflags="-O2" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cxxflags="-g -O0 -Wall" fi else ac_adolc_cxxflags="$CXXFLAGS" fi ac_adolc_cxxflags="$ac_adolc_cxxflags $ac_adolc_openmpflag" AC_SUBST(ac_adolc_cxxflags) AC_MSG_RESULT($ac_adolc_cxxflags)]) MPI_CONF_POST AMPI_CONF AC_ARG_WITH(soname, [AS_HELP_STRING([--with-soname=NAME], [user can choose what to call his library here [default: if ampi enabled then adolc_ampi otherwise adolc]])], [adolclib=$withval]) AC_SUBST(adolclib) AC_MSG_CHECKING(whether tape_doc should compute values as it prints the tape contents) AC_ARG_ENABLE(tapedoc_values, [ AS_HELP_STRING([--disable-tapedoc-values], [should the tape_doc routine compute the values as it interprets and prints the tape contents [default=enabled]])], [ tapedoc_values=no ], [ tapedoc_values=yes ]) AC_MSG_RESULT($tapedoc_values) if test x$tapedoc_values == xyes; then AC_DEFINE(ADOLC_TAPE_DOC_VALUES,1,[ADOL-C tape_doc routine computes values]) fi ########################################################################### # COIN_PATCH_LIBTOOL_CYGWIN # ########################################################################### # Patches to libtool for cygwin. Lots for cl, a few for GCC. # For cl: # - cygpath is not correctly quoted in fix_srcfile_path # - paths generated for .lib files is not run through cygpath -w # # REQUIRED FOR COMPILATION WITH CYGWIN !!! # AC_DEFUN([AC_COIN_PATCH_LIBTOOL_CYGWIN], [ case "$CXX" in clang* | */clang*) # do nothing but don't want to accidentally match the 'cl' patterns below ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) AC_MSG_NOTICE(Applying patches to libtool for cl compiler) sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|fix_srcfile_path=\"\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's%compile_deplibs=\"\$dir/\$old_library \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$old_library | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%compile_deplibs=\"\$dir/\$linklib \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$linklib | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%lib /OUT:%lib -OUT:%' \ -e "s%cygpath -w%$CYGPATH_W%" \ -e 's%$AR x \\$f_ex_an_ar_oldlib%bla=\\`lib -nologo -list \\$f_ex_an_ar_oldlib | xargs echo '"$mydos2unix"'\\`; echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$f_ex_an_ar_oldlib; done%' \ -e 's/$AR t/lib -nologo -list/' \ -e 's%f_ex_an_ar_oldlib="\($?*1*\)"%f_ex_an_ar_oldlib='\`"$CYGPATH_W"' \1`%' \ -e 's%^archive_cmds=.*%archive_cmds="\\$CC -o \\$lib \\$libobjs \\$compiler_flags \\\\\\`echo \\\\\\"\\$deplibs\\\\\\" | \\$SED -e '"\'"'s/ -lc\\$//'"\'"'\\\\\\` -link -dll~linknames="%' \ -e 's%old_archive_cmds="lib -OUT:\\$oldlib\\$oldobjs\\$old_deplibs"%old_archive_cmds="if test -r \\$oldlib; then bla=\\"\\$oldlib\\"; else bla=; fi; lib -OUT:\\$oldlib \\\\\\$bla\\$oldobjs\\$old_deplibs"%' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; *) AC_MSG_NOTICE(Applying patches to libtool for GNU compiler) sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac ]) # COIN_PATCH_LIBTOOL_CYGWIN # output AC_CONFIG_FILES(Makefile ADOL-C/Makefile ADOL-C/include/Makefile ADOL-C/include/adolc/Makefile ADOL-C/include/adolc/internal/adolc_settings.h ADOL-C/include/adolc/drivers/Makefile ADOL-C/include/adolc/internal/Makefile ADOL-C/include/adolc/lie/Makefile ADOL-C/include/adolc/sparse/Makefile ADOL-C/include/adolc/tapedoc/Makefile ADOL-C/src/Makefile ADOL-C/src/drivers/Makefile ADOL-C/src/lie/Makefile ADOL-C/src/sparse/Makefile ADOL-C/src/tapedoc/Makefile ADOL-C/doc/version.tex ADOL-C/examples/Makefile ADOL-C/examples/additional_examples/Makefile ADOL-C/examples/additional_examples/cuda/Makefile ADOL-C/examples/additional_examples/clock/Makefile ADOL-C/examples/additional_examples/checkpointing/Makefile ADOL-C/examples/additional_examples/ext_diff_func/Makefile ADOL-C/examples/additional_examples/fixpoint_exam/Makefile ADOL-C/examples/additional_examples/hessmat/Makefile ADOL-C/examples/additional_examples/lie/Makefile ADOL-C/examples/additional_examples/lufact/Makefile ADOL-C/examples/additional_examples/openmp_exam/Makefile ADOL-C/examples/additional_examples/scal/Makefile ADOL-C/examples/additional_examples/speelpenning/Makefile ADOL-C/examples/additional_examples/taylor/Makefile ADOL-C/examples/additional_examples/detexam/Makefile ADOL-C/examples/additional_examples/helm/Makefile ADOL-C/examples/additional_examples/lighthouse/Makefile ADOL-C/examples/additional_examples/ode/Makefile ADOL-C/examples/additional_examples/sparse/Makefile ADOL-C/examples/additional_examples/tapesave/Makefile ADOL-C/examples/additional_examples/pow/Makefile ADOL-C/examples/additional_examples/timing/Makefile ADOL-C/examples/additional_examples/param/Makefile ADOL-C/test/Makefile MSVisualStudio/v14/sparse/config.h MSVisualStudio/v14/nosparse/config.h MSVisualStudio/v14/x64/sparse/config.h MSVisualStudio/v14/x64/nosparse/config.h adolc.spec adolclib.pc ) AC_OUTPUT #call libtool for cygwin AC_COIN_PATCH_LIBTOOL_CYGWIN warn=false # echo configuration echo \ " ----------------------------------------------------------------------------- Configuration: C compiler: ${CC} C++ compiler: ${CXX} Linker: ${LD} Source code location: `pwd` Install path: ${prefix} CFLAGS: ${ac_adolc_cflags} CXXFLAGS: ${ac_adolc_cxxflags} Use Boost pool allocator: ${using_boost_pool} Use ADOL-C debug mode: ${adolc_debug} Use ADOL-C hard debug mode: ${adolc_harddebug} Zero value in adouble default ctor: ${adolc_stdczero}" if [[ "x${ac_adolc_openmpflag}" != "x" ]] ; then echo \ " Access thread number via errno: ${adolc_tserrno}" fi echo \ " Use ADOL-C safe extern mode: ${adolc_safe_extern} Use ADOL-C late init mode: ${adolc_late_init} Build sparse drivers: ${sparse} Build with adjoinable MPI support: ${adolc_ampi_support} Build with ColPack: ${have_colpack}" if test x$sparse = xyes && test x$have_colpack = xno; then echo -e \ " \033@<:@1;31mCompressed sparse structures will not be available Only sparsity patterns can be computed\033@<:@0m" warn=true fi echo echo \ " Build documented examples: ${docexa} Build additional examples: ${addexa} tape_doc routine computes values: ${tapedoc_values} See ADOL-C/src/config.h for further configuration information. -----------------------------------------------------------------------------" # check for make install problems resulting from missing write permission pdir=${prefix} writable=true while test "x${pdir}" != "x/" ; do if test -e ${pdir} && test ! -w ${pdir}; then writable=false break elif test ! -e ${pdir} ; then pdir=`dirname ${pdir}` else break fi done if test "x${pdir}" == "x/" ; then writable=false fi if ! ${writable} ; then echo -e \ " \033@<:@1;31mPrefix ${prefix} not writable please run ./configure --prefix=DIR with a writable directory path otherwise administrator privileges will be required to run \`make install'\033@<:@0m" warn=true fi case ${prefix} in ${HOME}|${HOME}/*) if $warn ; then for (( i=5; i>0; i-- )); do echo -ne "\rPlease read the above messages carefully, continuing in ${i} seconds" sleep 1 done echo -e "\rPlease read the above messages carefully " fi echo \ " ***************************************************************************** To successfully compile and run programs using the ADOL-C shared library do the following things: compiling: * add \"-I${prefix}/include\" to your compiler call linking: * add \"-L${libdir} -l$adolclib\" to your linker call * extend your linker call by \"-Wl,--rpath -Wl,${libdir}\" (if you wish to skip the point \"executing\") executing (do one of the following things): * add ${libdir} to your LD_LIBRARY_PATH variable * ask your system administrator for adding ${libdir} to the global file containing library search paths (/etc/ld.so.conf) (or use the static library by replacing \"-L${libdir} -l$adolclib\" with \"${libdir}/lib$adolclib.a\" when linking) See README for instructions on how to change to a nonlocal installation! ***************************************************************************** " ;; esac if test "x$enable_static" != "xno" ; then echo \ " Linking a user program with a static ADOL-C library will always result in a segmentation fault. Please always use the shared library. ***************************************************************************** " fi ADOL-C-2.6.3/TODO0000644000175200017520000000103112326163377011564 0ustar coincoin - check variable initialization (to overcome ADOL-C - malloc bug) - performance tuning for tape handling and in many other ways - add code for parsing a local config file (if supplied) at startup to be able to change the internal buffer sizes at runtime - extend the extern differentiated function code to all major forward and reverse routines - many interesting mathematics stuff ;) - update the documentation (as always) - add a ldconfig run for global installations - set documented examples to be compiled per default ADOL-C-2.6.3/INSTALL0000644000175200017520000003241611154001222012112 0ustar coincoinCopyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. THE FOLLOWING INFORMATION ARE INTENDED FOR *NIX SYSTEMS. IF YOU WISH TO INSTALL ADOL-C ON A WINDOWS PLATFORM PLEASE SKIP THE NEXT PARAGRAPHS AND CONTINUE NEAR THE END OF THIS FILE. *********************************************************************** * INSTALLING ADOL-C ON *NIX PLATFORMS * *********************************************************************** Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. Type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `${HOME}/adolc_base/include', `${HOME}/adolc_base/lib'. You can specify an installation prefix other than `${HOME}/adolc_base/' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. *********************************************************************** * INSTALLING ADOL-C ON WINDOWS PLATFORMS * *********************************************************************** Preperations ============ The provided makefile set is optimized for the GNU-make system. Although other make systems may work too we strongly recommened using the GNU version. The later can be obtained from the download section of the MinGW project page located at http://www.mingw.org/download.shtml or from the files section of the SourceForge project page http://sourceforge.net/projects/mingw/ Of the "mingw32-make*" package one only needs the executable from the "bin" sub-directory ( sub-folder ;-) ). To install it two ways are possible basically distinguished by the necessary privileges. 1) Install with administrator privileges Simply copy the ecexutable into a directory covered by the PATH variable (e.g. C:\WINDOWS) and rename it to make.exe . 2) Install without administrator privileges Copy the executable into the main directory of the unzipped ADOL-C package and rename it to make.exe . Adjust the PATH variable by executing "SET PATH=;%PATH%" where has to be replaced by the full path to the ADOL-C main directory including device letter. Remember that the later is a temporary change. The Windows version of ADOL-C was tested in the following environment: - Windows XP - Microsoft Visual C++ Toolkit 2003 - GNUmake All variables within the ADOL-C package are adjusted to fit exactly our test environment. If an other compiler should be used one should adjust the files "winflags_dll" and "winflags_exa" accordingly. COMPILING ========= ADOL-C features a Windows compilation script named "comp_win.bat" that should be used. It is a simple wrapper that calls the make program with appropriate arguments. The script itself accepts a small number of switches what results in the following ways of calling it: 1) "comp_win" or "comp_win library" Compiles the library only. 2) "comp_win --with-exa" Compiles the library and all examples. 3) "comp_win clean" Removes all created files including the library. There is (currently) no automatic way of installing the relevant headers and the library in the Windows file hirarchy after completing the compile step. We recommend to use the build directory directly when compiling and linking against ADOL-C in the following way: *) Use the "-I" switch or an equivalent with the ADOL-C base directory as argument for specifying the include path. Have a look at the documen- tation and the included examples to figure out the necessary include files. *) Link your programs against the ADOL-C import library "adolc.lib" that can be found in the sub-directory "adolc". *) IMPORTANT: The new program needs to find the ADOL-C export library "adolc.dll" that is also located in the sub-directory "adolc". Copy the library in a directory where the runtime system can find it. Possible locations are (maybe not complete): - Windows system directories, e.g. C:\WINDOWS or C:\WINDOWS\SYSTEM - directories covered by the PATH variable - the current directory (where the applications is started from) - the directoy of the executable (if different from the current directory) Hints: ====== * It is possible to create a "static" library, too. Changes to "winflags_dll" are required to achieve this behaviour. The fourth line creates a variable named "AR" with the default value of "Change_Me". It should be set to the command name for building the static library. The value of "ARFLAGS" should be set accordingly. * It should be possible to use ADOL-C from within graphical programming environments but we will not provide support for this constellation (due to missing test systems :-) ) We would appreciate very much if you could give us feedback in case of problems and suggestions. ADOL-C-2.6.3/Makefile.am0000644000175200017520000000454312565145675013151 0ustar coincoin############################################################################## ## Makefile.am -- Process this file with automake to produce Makefile.in ## Revision: $Id: Makefile.am 623 2015-08-19 18:32:29Z kulshres $ ## ## Copyright (C) Andrea Walther, Andreas Kowarz ## ## This file is part of ADOL-C. This software is provided as open source. ## Any use, reproduction, or distribution of the software constitutes ## recipient's acceptance of the terms of the accompanying license file. ## ############################################################################## ACLOCAL_AMFLAGS = -I autoconf AUTOMAKE_OPTIONS = foreign EXTRA_DIST = TODO BUGS LICENSE update_versions.sh \ ADOL-C/doc/version.tex.in ADOL-C/doc/version.tex \ ADOL-C/doc/adolc-manual.pdf ADOL-C/doc/adolc-manual.ps \ ADOL-C/doc/adolc-manual.tex ADOL-C/doc/short_ref.pdf \ ADOL-C/doc/short_ref.ps ADOL-C/doc/short_ref.tex \ ADOL-C/doc/multiplexed.pdf ADOL-C/doc/multiplexed.eps \ ADOL-C/doc/tapeadv.pdf ADOL-C/doc/tapeadv.eps \ ADOL-C/doc/tapebasic.pdf ADOL-C/doc/tapebasic.eps \ ADOL-C/doc/tap_point.pdf ADOL-C/doc/tap_point.eps \ MSVisualStudio/v14/adolc.sln MSVisualStudio/v14/adolc.vcxproj \ MSVisualStudio/v14/ColPack_Readme_VC++.txt \ MSVisualStudio/v14/ColPack.vcxproj \ MSVisualStudio/v14/sparse/config.h.in MSVisualStudio/v14/nosparse/config.h.in \ MSVisualStudio/v14/x64/sparse/config.h.in MSVisualStudio/v14/x64/nosparse/config.h.in \ MSVisualStudio/v14/sparse/config.h MSVisualStudio/v14/nosparse/config.h \ MSVisualStudio/v14/x64/sparse/config.h MSVisualStudio/v14/x64/nosparse/config.h \ MSVisualStudio/v14/Readme_VC++.txt \ MSVisualStudio/v14/installer.sh \ adolc.spec.in adolc.spec \ update_versions.sh SUBDIRS = ADOL-C # install pkg-config information pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = @adolclib@.pc @adolclib@.pc: adolclib.pc mv $< $@ test: all cd ADOL-C; $(MAKE) test distclean-local: rm -f @adolclib@.pc .PHONY: test ADOL-C-2.6.3/adolc.spec0000644000175200017520000001073013037352546013036 0ustar coincoin# spec file for package adolc (Version 2.6.3) # norootforbuild %define packver 2.6.3 Name: adolc Version: 2.6.3 Release: 0.1 License: GPLv2 or CPL Summary: Algorithmic Differentiation Library for C/C++ Url: http://projects.coin-or.org/ADOL-C Group: Development/Languages/C and C++ Source: %{name}-%{packver}.tar.bz2 BuildRequires: gcc-c++ libstdc++-devel BuildRequires: ColPack-devel BuildRequires: boost-devel BuildRoot: %{_tmppath}/%{name}-%{version}-build AutoReqProv: on %description The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. %package -n libadolc2 Summary: Algorithmic Differentiation Library for C/C++ Group: Development/Languages/C and C++ %description -n libadolc2 The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. %package devel Summary: Algorithmic Differentiation Library for C/C++ -- development files Group: Development/Languages/C and C++ Requires: libadolc2 = %{version} %description devel The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. This package provides the development environment for adolc %package doc Summary: Algorithmic Differentiation Library for C/C++ -- documentation Group: Development/Languages/C and C++ BuildArch: noarch %description doc The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. This package provides the user´s manual for adolc %prep %setup -q -n %{name}-%{packver} -b 1 %build autoreconf -v --install --force %configure --prefix=/usr make %{_smp_mflags} %install %makeinstall install -d %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 README AUTHORS BUGS LICENSE INSTALL TODO %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 ADOL-C/doc/adolc-manual.pdf %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 ADOL-C/doc/short_ref.pdf %{buildroot}%{_datadir}/doc/packages/%{name} find %{buildroot} -type f -name '*.la' -delete -print %clean rm -rf %{buildroot} rm -rf %{_builddir}/%{name}-%{packver} %post -n libadolc2 -p /sbin/ldconfig %postun -n libadolc2 -p /sbin/ldconfig %files -n libadolc2 %defattr(-,root,root) %{_libdir}/libadolc.so.* %files devel %defattr(-,root,root) %dir %{_includedir}/adolc %dir %{_includedir}/adolc/drivers %dir %{_includedir}/adolc/sparse %dir %{_includedir}/adolc/tapedoc %dir %{_libdir}/pkgconfig %{_includedir}/adolc/*.h %{_includedir}/adolc/drivers/*.h %{_includedir}/adolc/sparse/*.h %{_includedir}/adolc/tapedoc/*.h %{_libdir}/libadolc.so %{_libdir}/pkgconfig/adolc.pc %files doc %defattr(-,root,root) %dir %{_datadir}/doc/packages/%{name} %{_datadir}/doc/packages/%{name}/* %changelog ADOL-C-2.6.3/NEWS0000644000175200017520000000000011154001222011540 0ustar coincoinADOL-C-2.6.3/aclocal.m40000644000175200017520000011566113037350652012745 0ustar coincoin# generated automatically by aclocal 1.13.4 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.13' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.13.4], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.13.4])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([autoconf/acx_builtin.m4]) m4_include([autoconf/ampi.m4]) m4_include([autoconf/ax_boost_base.m4]) m4_include([autoconf/ax_boost_system.m4]) m4_include([autoconf/colpack.m4]) m4_include([autoconf/libtool.m4]) m4_include([autoconf/ltoptions.m4]) m4_include([autoconf/ltsugar.m4]) m4_include([autoconf/ltversion.m4]) m4_include([autoconf/lt~obsolete.m4]) m4_include([autoconf/mpi.m4]) m4_include([autoconf/stdcxx_11.m4]) ADOL-C-2.6.3/autoconf/0000755000175200017520000000000013037353015012705 5ustar coincoinADOL-C-2.6.3/autoconf/ax_boost_base.m40000644000175200017520000002507212470354460015772 0ustar coincoin# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_boost_base.html # =========================================================================== # # SYNOPSIS # # AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # DESCRIPTION # # Test for the Boost C++ libraries of a particular version (or newer) # # If no path to the installed boost library is given the macro searchs # under /usr, /usr/local, /opt and /opt/local and evaluates the # $BOOST_ROOT environment variable. Further documentation is available at # . # # This macro calls: # # AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) # # And sets: # # HAVE_BOOST # # LICENSE # # Copyright (c) 2008 Thomas Porschberg # Copyright (c) 2009 Peter Adolphs # # 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 25 AC_DEFUN([AX_BOOST_BASE], [ AC_ARG_WITH([boost], [AS_HELP_STRING([--with-boost@<:@=ARG@:>@], [use Boost library from a standard location (ARG=yes), from the specified location (ARG=), or disable it (ARG=no) @<:@ARG=yes@:>@ ])], [ if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ac_boost_path="" else want_boost="yes" ac_boost_path="$withval" fi ], [want_boost="yes"]) AC_ARG_WITH([boost-libdir], AS_HELP_STRING([--with-boost-libdir=LIB_DIR], [Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]), [ if test -d "$withval" then ac_boost_lib_path="$withval" else AC_MSG_ERROR(--with-boost-libdir expected directory name) fi ], [ac_boost_lib_path=""] ) if test "x$want_boost" = "xyes"; then boost_lib_version_req=ifelse([$1], ,1.20.0,$1) boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` if test "x$boost_lib_version_req_sub_minor" = "x" ; then boost_lib_version_req_sub_minor="0" fi WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) succeeded=no dnl On 64-bit systems check for system libraries in both lib64 and lib. dnl The former is specified by FHS, but e.g. Debian does not adhere to dnl this (as it rises problems for generic multi-arch support). dnl The last entry in the list is chosen by default when no libraries dnl are found, e.g. when only header-only libraries are installed! libsubdirs="lib" ax_arch=`uname -m` case $ax_arch in x86_64) libsubdirs="lib64 libx32 lib lib64" ;; ppc64|s390x|sparc64|aarch64|ppc64le) libsubdirs="lib64 lib lib64 ppc64le" ;; esac dnl allow for real multi-arch paths e.g. /usr/lib/x86_64-linux-gnu. Give dnl them priority over the other paths since, if libs are found there, they dnl are almost assuredly the ones desired. AC_REQUIRE([AC_CANONICAL_HOST]) libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs" case ${host_cpu} in i?86) libsubdirs="lib/i386-${host_os} $libsubdirs" ;; esac dnl first we check the system location for boost libraries dnl this location ist chosen if boost libraries are installed with the --layout=system option dnl or if you install boost with RPM if test "$ac_boost_path" != ""; then BOOST_CPPFLAGS="-I$ac_boost_path/include" for ac_boost_path_tmp in $libsubdirs; do if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" break fi done elif test "$cross_compiling" != yes; then for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then for libsubdir in $libsubdirs ; do if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" break; fi done fi dnl overwrite ld flags if we have required special directory with dnl --with-boost-libdir parameter if test "$ac_boost_lib_path" != ""; then BOOST_LDFLAGS="-L$ac_boost_lib_path" fi CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_REQUIRE([AC_PROG_CXX]) AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ]])],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) dnl if we found no boost with system layout we search for boost libraries dnl built and installed without the --layout=system option or for a staged(not installed) version if test "x$succeeded" != "xyes"; then _version=0 if test "$ac_boost_path" != ""; then if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" done fi else if test "$cross_compiling" != yes; then for ac_boost_path in /usr /usr/local /opt /opt/local ; do if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp best_path=$ac_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" if test "$ac_boost_lib_path" = ""; then for libsubdir in $libsubdirs ; do if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$best_path/$libsubdir" fi fi if test "x$BOOST_ROOT" != "x"; then for libsubdir in $libsubdirs ; do if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_LANG_PUSH(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ @%:@include ]], [[ #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ]])],[ AC_MSG_RESULT(yes) succeeded=yes found_system=yes ],[ ]) AC_LANG_POP([C++]) fi if test "$succeeded" != "yes" ; then if test "$_version" = "0" ; then AC_MSG_NOTICE([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation.]]) else AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) fi # execute ACTION-IF-NOT-FOUND (if present): ifelse([$3], , :, [$3]) else AC_SUBST(BOOST_CPPFLAGS) AC_SUBST(BOOST_LDFLAGS) AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) # execute ACTION-IF-FOUND (if present): ifelse([$2], , :, [$2]) fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi ]) ADOL-C-2.6.3/autoconf/depcomp0000755000175200017520000005601612267456742014311 0ustar coincoin#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ADOL-C-2.6.3/autoconf/lt~obsolete.m40000644000175200017520000001375612267512306015541 0ustar coincoin# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) ADOL-C-2.6.3/autoconf/config.guess0000755000175200017520000013111012267456742015241 0ustar coincoin#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-06-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac case "${UNAME_MACHINE}" in i?86) test -z "$VENDOR" && VENDOR=pc ;; *) test -z "$VENDOR" && VENDOR=unknown ;; esac test -f /etc/SuSE-release -o -f /.buildenv && VENDOR=suse # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-${VENDOR}-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-${VENDOR}-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-${VENDOR}-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-${VENDOR}-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-${VENDOR}-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-${VENDOR}-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-${VENDOR}-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-${VENDOR}-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-${VENDOR}-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-${VENDOR}-osf1mk else echo ${UNAME_MACHINE}-${VENDOR}-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-${VENDOR}-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-${VENDOR}-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-${VENDOR}-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-${VENDOR}-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-${VENDOR}-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-${VENDOR}-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-${VENDOR}-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-${VENDOR}-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-${VENDOR}-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-${VENDOR}-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-${VENDOR}-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-${VENDOR}-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-${VENDOR}-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-${VENDOR}-linux-${LIBC} ;; PA8*) echo hppa2.0-${VENDOR}-linux-${LIBC} ;; *) echo hppa-${VENDOR}-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-${VENDOR}-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-${VENDOR}-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-${VENDOR}-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-${VENDOR}-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-${VENDOR}-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-${VENDOR}-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-${VENDOR}-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-${VENODR}-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-${VENDOR}-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-${VENODR}-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-${VENDOR}-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-${VENDOR}-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-${VENDOR}-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-${VENDOR}-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-${VENDOR}-tops10 exit ;; *:TENEX:*:*) echo pdp10-${VENDOR}-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-${VENDOR}-tops20 exit ;; *:ITS:*:*) echo pdp10-${VENDOR}-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-${VENDOR}-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-${VENDOR}-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ADOL-C-2.6.3/autoconf/colpack.m40000644000175200017520000000333712301171726014571 0ustar coincoindnl check for linking with ColPack AC_DEFUN([COLPACK_CONF], [ AC_PREREQ(2.59) AC_ARG_WITH(colpack, [ AS_HELP_STRING([--with-colpack=DIR],[path to the colpack library and headers [default=system libraries]])], [ colpack=$withval COLPACK_CFLAGS="-I$colpack/include" if test x${_lib} != xlib ; then D[[0]]="$colpack/${_lib}" D[[1]]="$colpack/lib" else D[[0]]="$colpack/${_lib}" fi ], [ COLPACK_CFLAGS="" COLPACK_LIBS="-lColPack" D[[0]]="" ]) AC_LANG_PUSH([C++]) save_CXXFLAGS="$CXXFLAGS" save_CPPFLAGS="$CPPFLAGS" save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $COLPACK_CFLAGS" CXXFLAGS="$CXXFLAGS $ac_adolc_openmpflag" AC_CHECK_HEADER([ColPack/ColPackHeaders.h],[have_colpackheaders=yes],[ have_colpackheaders=no CPPFLAGS="$save_CPPFLAGS" CXXFLAGS="$save_CXXFLAGS" ]) for ((i=0; i < ${#D[@]} ; i++)); do COLPACK_LIBDIR="${D[[$i]]}" if test -n "$COLPACK_LIBDIR" ; then COLPACK_LIBS="-L$COLPACK_LIBDIR -lColPack -Wl,-rpath,$COLPACK_LIBDIR" fi if test x$have_colpackheaders = xyes ; then LIBS="$COLPACK_LIBS $LIBS" AC_MSG_CHECKING(for libColPack in $COLPACK_LIBDIR) AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [ColPack::GraphColoring g])], [have_colpack=yes], [have_colpack=no]) AC_MSG_RESULT($have_colpack) if test x$have_colpack = xyes ; then break else LIBS="$save_LIBS" fi else have_colpack=no fi done AC_LANG_POP([C++]) AM_CONDITIONAL(HAVE_LIBCOLPACK,[test x$have_colpack = xyes]) if test x$have_colpack = xyes; then sparse=yes echo "will build sparse drivers as linking with -lColPack succeeded" fi if test x$sparse = xyes && test x$have_colpack = xyes; then AC_DEFINE(HAVE_LIBCOLPACK,[1],[Define 1 if ColPack is available]) fi ]) ADOL-C-2.6.3/autoconf/stdcxx_11.m40000644000175200017520000001114412340611355014766 0ustar coincoin# based on # ============================================================================ # http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html # ============================================================================ # # SYNOPSIS # # AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional]) # # DESCRIPTION # # Check for baseline language coverage in the compiler for the C++11 # standard; if necessary, add switches to CXXFLAGS to enable support. # # The first argument, if specified, indicates whether you insist on an # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. # -std=c++11). If neither is specified, you get whatever works, with # preference for an extended mode. # # The second argument, if specified 'mandatory' or if left unspecified, # indicates that baseline C++11 support is required and that the macro # should error out if no mode with that support is found. If specified # 'optional', then configuration proceeds regardless, after defining # HAVE_CXX11 if and only if a supporting mode is found. # # LICENSE # # Copyright (c) 2008 Benjamin Kosnik # Copyright (c) 2012 Zack Weinberg # Copyright (c) 2013 Roy Stogner # # 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 3 m4_ifndef([_AX_CXX_COMPILE_STDCXX_11_testbody], [ m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [ template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; typedef check> right_angle_brackets; int a; decltype(a) b; typedef check check_type; check_type c; check_type&& cr = static_cast(c); auto d = a; ])],[]) m4_ifndef([AX_CXX_COMPILE_STDCXX_11],[dnl AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl m4_if([$1], [], [], [$1], [ext], [], [$1], [noext], [], [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl m4_if([$2], [], [ax_cxx_compile_cxx11_required=true], [$2], [mandatory], [ax_cxx_compile_cxx11_required=true], [$2], [optional], [ax_cxx_compile_cxx11_required=false], [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])dnl AC_LANG_PUSH([C++])dnl ac_success=no AC_CACHE_CHECK(whether $CXX supports C++11 features by default, ax_cv_cxx_compile_cxx11, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], [ax_cv_cxx_compile_cxx11=yes], [ax_cv_cxx_compile_cxx11=no])]) if test x$ax_cv_cxx_compile_cxx11 = xyes; then ac_success=yes fi m4_if([$1], [noext], [], [dnl if test x$ac_success = xno; then for switch in -std=gnu++11 -std=gnu++0x; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, $cachevar, [ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], [eval $cachevar=yes], [eval $cachevar=no]) CXXFLAGS="$ac_save_CXXFLAGS"]) if eval test x\$$cachevar = xyes; then CXXFLAGS="$CXXFLAGS $switch" ac_success=yes break fi done fi]) m4_if([$1], [ext], [], [dnl if test x$ac_success = xno; then for switch in -std=c++11 -std=c++0x; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch]) AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch, $cachevar, [ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])], [eval $cachevar=yes], [eval $cachevar=no]) CXXFLAGS="$ac_save_CXXFLAGS"]) if eval test x\$$cachevar = xyes; then CXXFLAGS="$CXXFLAGS $switch" ac_success=yes break fi done fi]) AC_LANG_POP([C++]) if test x$ax_cxx_compile_cxx11_required = xtrue; then if test x$ac_success = xno; then AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.]) fi else if test x$ac_success = xno; then HAVE_CXX11=0 AC_MSG_NOTICE([No compiler with C++11 support was found]) else HAVE_CXX11=1 AC_DEFINE(HAVE_CXX11,1, [define if the compiler supports basic C++11 syntax]) fi AC_SUBST(HAVE_CXX11) fi ])],[]) ADOL-C-2.6.3/autoconf/config.sub0000755000175200017520000010530112267456742014707 0ustar coincoin#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-04-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ADOL-C-2.6.3/autoconf/ltmain.sh0000644000175200017520000105152212267456742014552 0ustar coincoin # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 ADOL-C-2.6.3/autoconf/ltsugar.m40000644000175200017520000001042412267512306014635 0ustar coincoin# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ADOL-C-2.6.3/autoconf/ax_boost_system.m40000644000175200017520000001013412470354460016375 0ustar coincoin# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_boost_system.html # =========================================================================== # # SYNOPSIS # # AX_BOOST_SYSTEM # # DESCRIPTION # # Test for System library from the Boost C++ libraries. The macro requires # a preceding call to AX_BOOST_BASE. Further documentation is available at # . # # This macro calls: # # AC_SUBST(BOOST_SYSTEM_LIB) # # And sets: # # HAVE_BOOST_SYSTEM # # LICENSE # # Copyright (c) 2008 Thomas Porschberg # Copyright (c) 2008 Michael Tindal # Copyright (c) 2008 Daniel Casimiro # # 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 17 AC_DEFUN([AX_BOOST_SYSTEM], [ AC_ARG_WITH([boost-system], AS_HELP_STRING([--with-boost-system@<:@=special-lib@:>@], [use the System library from boost - it is possible to specify a certain library for the linker e.g. --with-boost-system=boost_system-gcc-mt ]), [ if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ax_boost_user_system_lib="" else want_boost="yes" ax_boost_user_system_lib="$withval" fi ], [want_boost="yes"] ) if test "x$want_boost" = "xyes"; then AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_BUILD]) CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS AC_CACHE_CHECK(whether the Boost::System library is available, ax_cv_boost_system, [AC_LANG_PUSH([C++]) CXXFLAGS_SAVE=$CXXFLAGS AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include ]], [[boost::system::system_category]])], ax_cv_boost_system=yes, ax_cv_boost_system=no) CXXFLAGS=$CXXFLAGS_SAVE AC_LANG_POP([C++]) ]) if test "x$ax_cv_boost_system" = "xyes"; then AC_SUBST(BOOST_CPPFLAGS) AC_DEFINE(HAVE_BOOST_SYSTEM,,[define if the Boost::System library is available]) BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/@<:@^\/@:>@*//'` LDFLAGS_SAVE=$LDFLAGS if test "x$ax_boost_user_system_lib" = "x"; then for libextension in `ls -r $BOOSTLIBDIR/libboost_system* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], [link_system="no"]) done if test "x$link_system" != "xyes"; then for libextension in `ls -r $BOOSTLIBDIR/boost_system* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do ax_lib=${libextension} AC_CHECK_LIB($ax_lib, exit, [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], [link_system="no"]) done fi else for ax_lib in $ax_boost_user_system_lib boost_system-$ax_boost_user_system_lib; do AC_CHECK_LIB($ax_lib, exit, [BOOST_SYSTEM_LIB="-l$ax_lib"; AC_SUBST(BOOST_SYSTEM_LIB) link_system="yes"; break], [link_system="no"]) done fi if test "x$ax_lib" = "x"; then AC_MSG_ERROR(Could not find a version of the library!) fi if test "x$link_system" = "xno"; then AC_MSG_ERROR(Could not link against $ax_lib !) fi fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi ]) ADOL-C-2.6.3/autoconf/mpi.m40000644000175200017520000000412112301171726013732 0ustar coincoinAC_DEFUN([MPI_CONF_PRE], [ AC_PREREQ(2.59) # MPI root directory AC_ARG_WITH(mpi_root, [AC_HELP_STRING([--with-mpi-root=MPIROOT], [absolute path to the MPI root directory])]) if test x"$with_mpi_root" != "x"; then if test x"$adolc_ampi_support" = "xno"; then AC_MSG_ERROR([if --with-mpi-root is set one must also --enable_ampi]) fi MPIROOT="$with_mpi_root" fi AC_ARG_WITH(mpicc, [AC_HELP_STRING([--with-mpicc=MPICC], [name of the MPI C++ compiler to use (default mpicc)])]) if test x"$with_mpicc" != "x"; then if test x"$adolc_ampi_support" = "xno"; then AC_MSG_ERROR([if --with-mpicc is set one must also --enable-ampi]) fi MPICC="$with_mpicc" else MPICC="mpicc" fi if test x"$with_mpi_root" != "x"; then MPICC="$with_mpi_root/bin/$MPICC" fi AC_ARG_WITH(mpicxx, [AC_HELP_STRING([--with-mpicxx=MPICXX], [name of the MPI C++ compiler to use (default mpicxx)])]) if test x"$with_mpicxx" != "x"; then if test x"$adolc_ampi_support" = "xno"; then AC_MSG_ERROR([if --with-mpicxx is set one must also --enable-ampi]) fi MPICXX="$with_mpicxx" else MPICXX="mpicxx" fi if test x"$with_mpi_root" != "x"; then MPICXX="$with_mpi_root/bin/$MPICXX" fi saveCC="$CC" saveCXX="$CXX" AC_SUBST(saveCC) AC_SUBST(saveCXX) if test x"$adolc_ampi_support" = "xyes"; then CC="$MPICC" CXX="$MPICXX" fi ]) AC_DEFUN([MPI_CONF_POST], [ AC_PREREQ(2.59) if test x"$adolc_ampi_support" = "xyes"; then AC_MSG_CHECKING([Linking of MPI C programs]) AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [MPI_Init(0,0)])], [AC_MSG_RESULT([ok])], [AC_MSG_RESULT([no]) AC_MSG_FAILURE([MPI C compiler is required by $PACKAGE])]) fi if test x"$adolc_ampi_support" = "xyes"; then AC_LANG_PUSH([C++]) AC_MSG_CHECKING([Linking of MPI C++ programs]) AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [MPI_Init(0,0)])], [AC_MSG_RESULT([ok])], [AC_MSG_RESULT([no]) AC_MSG_FAILURE([MPI C++ compiler is required by $PACKAGE])]) AC_LANG_POP([C++]) fi ]) ADOL-C-2.6.3/autoconf/ltversion.m40000644000175200017520000000126212267512306015201 0ustar coincoin# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) ADOL-C-2.6.3/autoconf/ampi.m40000644000175200017520000000207212301425210014064 0ustar coincoinAC_DEFUN([AMPI_CONF], [ AC_PREREQ(2.59) AC_ARG_WITH(ampi, [AS_HELP_STRING([--with-ampi=AMPI_DIR], [full path to the installation of adjoinable MPI (AMPI)])]) if test x"$with_ampi" != "x"; then if test x"$adolc_ampi_support" = "xno"; then AC_MSG_ERROR([if --with-ampi is set one must also --enable-ampi]) fi CPPFLAGS="$CPPFLAGS -I$with_ampi/include" LDFLAGS="$LDFLAGS -L$with_ampi/lib -Wl,-rpath,$with_ampi/lib" if test x"$_lib" != "xlib" ; then LDFLAGS="$LDFLAGS -L$with_ampi/${_lib} -Wl,-rpath,$with_ampi/${_lib}" fi fi if test x"$adolc_ampi_support" = "xyes"; then LIBS="-lampiCommon -lampiBookkeeping -lampiTape $LIBS" keepLIBS="$LIBS" LIBS="$LIBS -lampiADtoolStubsOO" AC_MSG_CHECKING([libampiCommon (provided by AMPI)]) AC_LINK_IFELSE([AC_LANG_PROGRAM([#include "ampi/ampi.h"], [AMPI_Finalize_NT() ])], [AC_MSG_RESULT([ok])], [AC_MSG_RESULT([no]) AC_MSG_FAILURE([libampiCommon is required by $PACKAGE])]) LIBS="$keepLIBS" adolclib=adolc_ampi fi ]) ADOL-C-2.6.3/autoconf/missing0000755000175200017520000001533112267456742014326 0ustar coincoin#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2012-06-26.16; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program 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 General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'automa4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ADOL-C-2.6.3/autoconf/ltoptions.m40000644000175200017520000003007312267512306015211 0ustar coincoin# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) ADOL-C-2.6.3/autoconf/install-sh0000755000175200017520000003325512267456742014740 0ustar coincoin#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: ADOL-C-2.6.3/autoconf/acx_builtin.m40000644000175200017520000000063612150623520015451 0ustar coincoinAC_DEFUN([ACX_C_BUILTIN_EXPECT],[ AC_MSG_CHECKING(for __builtin_expect) AC_LANG(C) AC_TRY_LINK( [ int f(){return 1;}; ], [ if (__builtin_expect(f(), 0)); ], [ AC_MSG_RESULT(yes) AC_DEFINE(HAVE_BUILTIN_EXPECT, 1, [Define if the compiler provides __builtin_expect]) ], [ AC_MSG_RESULT(no) ]) ])ADOL-C-2.6.3/autoconf/libtool.m40000644000175200017520000105735012470354460014633 0ustar coincoin# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS ADOL-C-2.6.3/adolclib.pc.in0000644000175200017520000000044212301425210013557 0ustar coincoinprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: @adolclib@ Version: @PACKAGE_VERSION@ Description: Algorithmic Differentiation Library for C/C++ Requires: Libs: -L${libdir} -l@adolclib@ -Wl,-rpath,${libdir} @LDFLAGS@ @LIBS@ Cflags: -I${includedir} ADOL-C-2.6.3/adolc.spec.in0000644000175200017520000001110412633526077013442 0ustar coincoin# spec file for package adolc (Version @ADOLC_VERSION@.@ADOLC_SUBVERSION@.@ADOLC_PATCHLEVEL@) # norootforbuild %define packver @PACKAGE_VERSION@ Name: adolc Version: @ADOLC_VERSION@.@ADOLC_SUBVERSION@.@ADOLC_PATCHLEVEL@ Release: 0.1 License: GPLv2 or CPL Summary: Algorithmic Differentiation Library for C/C++ Url: http://projects.coin-or.org/ADOL-C Group: Development/Languages/C and C++ Source: %{name}-%{packver}.tar.bz2 BuildRequires: gcc-c++ libstdc++-devel BuildRequires: ColPack-devel BuildRequires: boost-devel BuildRoot: %{_tmppath}/%{name}-%{version}-build AutoReqProv: on %description The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. %package -n libadolc2 Summary: Algorithmic Differentiation Library for C/C++ Group: Development/Languages/C and C++ %description -n libadolc2 The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. %package devel Summary: Algorithmic Differentiation Library for C/C++ -- development files Group: Development/Languages/C and C++ Requires: libadolc2 = %{version} %description devel The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. This package provides the development environment for adolc %package doc Summary: Algorithmic Differentiation Library for C/C++ -- documentation Group: Development/Languages/C and C++ BuildArch: noarch %description doc The package ADOL-C (Automatic Differentiation by OverLoading in C++) facilitates the evaluation of first and higher derivatives of vector functions that are defined by computer programs written in C or C++. The resulting derivative evaluation routines may be called from C/C++, Fortran, or any other language that can be linked with C. The numerical values of derivative vectors are obtained free of truncation errors at a small multiple of the run time and randomly accessed memory of the given function evaluation program. This package provides the user´s manual for adolc %prep %setup -q -n %{name}-%{packver} -b 1 %build autoreconf -v --install --force %configure --prefix=/usr make %{_smp_mflags} %install %makeinstall install -d %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 README AUTHORS BUGS LICENSE INSTALL TODO %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 ADOL-C/doc/adolc-manual.pdf %{buildroot}%{_datadir}/doc/packages/%{name} install -m 644 ADOL-C/doc/short_ref.pdf %{buildroot}%{_datadir}/doc/packages/%{name} find %{buildroot} -type f -name '*.la' -delete -print %clean rm -rf %{buildroot} rm -rf %{_builddir}/%{name}-%{packver} %post -n libadolc2 -p /sbin/ldconfig %postun -n libadolc2 -p /sbin/ldconfig %files -n libadolc2 %defattr(-,root,root) %{_libdir}/libadolc.so.* %files devel %defattr(-,root,root) %dir %{_includedir}/adolc %dir %{_includedir}/adolc/drivers %dir %{_includedir}/adolc/sparse %dir %{_includedir}/adolc/tapedoc %dir %{_libdir}/pkgconfig %{_includedir}/adolc/*.h %{_includedir}/adolc/drivers/*.h %{_includedir}/adolc/sparse/*.h %{_includedir}/adolc/tapedoc/*.h %{_libdir}/libadolc.so %{_libdir}/pkgconfig/adolc.pc %files doc %defattr(-,root,root) %dir %{_datadir}/doc/packages/%{name} %{_datadir}/doc/packages/%{name}/* %changelog ADOL-C-2.6.3/configure0000755000175200017520000240312713037352546013017 0ustar coincoin#! /bin/sh # From configure.ac Revision. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for adolc 2.6.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: adol-c@list.coin-or.org about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='adolc' PACKAGE_TARNAME='adolc' PACKAGE_VERSION='2.6.3' PACKAGE_STRING='adolc 2.6.3' PACKAGE_BUGREPORT='adol-c@list.coin-or.org' PACKAGE_URL='' ac_unique_file="ADOL-C/src/adouble.cpp" ac_default_prefix=${HOME}/adolc_base # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS adolclib ac_adolc_cxxflags ac_adolc_cflags PAREXA_FALSE PAREXA_TRUE ADDEXA_FALSE ADDEXA_TRUE DOCEXA_FALSE DOCEXA_TRUE SPARSE_FALSE SPARSE_TRUE HAVE_LIBCOLPACK_FALSE HAVE_LIBCOLPACK_TRUE BOOST_SYSTEM_LIB BOOST_LDFLAGS BOOST_CPPFLAGS ADVBRANCH REAL_TYPE UINT_TYPE ATRIG_ERF LIBOBJS ADOLC_PATCHLEVEL ADOLC_SUBVERSION ADOLC_VERSION ac_aux_dir _lib saveCXX saveCC CXXCPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB ac_ct_AR AR NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL OBJDUMP DLLTOOL AS LN_S CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC HAVE_CXX11 am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX BUILD_ADOLC_AMPI_SUPPORT_FALSE BUILD_ADOLC_AMPI_SUPPORT_TRUE DARWIN_FALSE DARWIN_TRUE MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_maintainer_mode enable_ampi enable_dependency_tracking enable_static enable_shared with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock with_mpi_root with_mpicc with_mpicxx enable_use_calloc enable_atrig_erf enable_ulong enable_double enable_advanced_branching enable_debug enable_harddebug enable_stdczero enable_lateinit enable_tserrno with_openmp_flag with_boost with_boost_libdir with_boost_system enable_sparse with_colpack enable_docexa enable_addexa enable_parexa with_cflags with_cxxflags with_ampi with_soname enable_tapedoc_values ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures adolc 2.6.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/adolc] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of adolc 2.6.3:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-ampi build ADOL-C with adjoinable MPI (AMPI) support [default=disabled] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-static[=PKGS] build static libraries [default=no] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-use-calloc disable use of calloc and use malloc instead for memory allocation [default=calloc is used] --enable-atrig-erf enable atrig and erf functions in ADOL-C [default=no] --enable-ulong enable 64-bit locations (only available on 64-bit systems) [default=32-bit] --disable-double disable double precision arithmetic [untested, default=double is enabled] --enable-advanced-branching enable advanced branching operations to reduce retaping [default=no]. The boolean valued comparison operators with two adouble arguments will not return boolean results but the active results may be used to automatically switch branches in conjunction with condassign or advector (see manual). --enable-debug enable ADOL-C debug mode [default=no] --enable-harddebug enable ADOL-C hard debug mode [default=no] --disable-stdczero adouble default constructor does not initialize the value to zero (improves performance but yields incorrect results for implicit array initializations, see manual) [default=enabled] --enable-lateinit adouble constructors need to be called. With malloc or realloc that is not the case. With this option the adouble can do a late initialization.) [default=disabled] --enable-tserrno use errno as thread number cache [default=no] --enable-sparse build sparse drivers [default=disabled] --enable-docexa build documented examples [default=disabled] --enable-addexa build additional examples [default=disabled] --enable-parexa build parallel example [default=disabled], if enabled -with-openmp-flag=FLAG required --disable-tapedoc-values should the tape_doc routine compute the values as it interprets and prints the tape contents [default=enabled] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-mpi-root=MPIROOT absolute path to the MPI root directory --with-mpicc=MPICC name of the MPI C++ compiler to use (default mpicc) --with-mpicxx=MPICXX name of the MPI C++ compiler to use (default mpicxx) --with-openmp-flag=FLAG use FLAG to enable OpenMP at compile time [default=none] --with-boost[=ARG] use Boost library from a standard location (ARG=yes), from the specified location (ARG=), or disable it (ARG=no) [ARG=yes] --with-boost-libdir=LIB_DIR Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located. --with-boost-system[=special-lib] use the System library from boost - it is possible to specify a certain library for the linker e.g. --with-boost-system=boost_system-gcc-mt --with-colpack=DIR path to the colpack library and headers [default=system libraries] --with-cflags=FLAGS use CFLAGS=FLAGS (default: -O2) --with-cxxflags=FLAGS use CXXFLAGS=FLAGS (default: -O2) --with-ampi=AMPI_DIR full path to the installation of adjoinable MPI (AMPI) --with-soname=NAME user can choose what to call his library here [default: if ampi enabled then adolc_ampi otherwise adolc] Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF adolc configure 2.6.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 &5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------------- ## ## Report this to adol-c@list.coin-or.org ## ## -------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------------- ## ## Report this to adol-c@list.coin-or.org ## ## -------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by adolc $as_me 2.6.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu config_flags="$*" ac_aux_dir= for ac_dir in autoconf "$srcdir"/autoconf; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in autoconf \"$srcdir\"/autoconf" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers ADOL-C/src/config.h" am__api_version='1.13' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='adolc' VERSION='2.6.3' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' adolclib=adolc if test "x$CFLAGS" == x ; then ac_shell_cflags="not_set" else ac_shell_cflags="$CFLAGS" fi if test "x$CXXFLAGS" == x ; then ac_shell_cxxflags="not_set" else ac_shell_cxxflags="$CXXFLAGS" fi libdir_set_on_cmd="no" for i in $config_flags ; do case $i in -libdir | --libdir | --libdi | --libd | -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir_set_on_cmd="yes" break ;; esac done if test "x${host_os#darwin}" != "x${host_os}"; then DARWIN_TRUE= DARWIN_FALSE='#' else DARWIN_TRUE='#' DARWIN_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build ADOL-C with adjoinable MPI (AMPI) support" >&5 $as_echo_n "checking whether to build ADOL-C with adjoinable MPI (AMPI) support... " >&6; } # Check whether --enable-ampi was given. if test "${enable_ampi+set}" = set; then : enableval=$enable_ampi; adolc_ampi_support=$enableval else adolc_ampi_support=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $adolc_ampi_support" >&5 $as_echo "$adolc_ampi_support" >&6; } if test x${adolc_ampi_support} = xyes; then BUILD_ADOLC_AMPI_SUPPORT_TRUE= BUILD_ADOLC_AMPI_SUPPORT_FALSE='#' else BUILD_ADOLC_AMPI_SUPPORT_TRUE='#' BUILD_ADOLC_AMPI_SUPPORT_FALSE= fi if test x"${adolc_ampi_support}" = xyes ; then $as_echo "#define ADOLC_AMPI_SUPPORT 1" >>confdefs.h fi # checks for programs ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ax_cxx_compile_cxx11_required=truednl ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 $as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } if ${ax_cv_cxx_compile_cxx11+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; typedef check> right_angle_brackets; int a; decltype(a) b; typedef check check_type; check_type c; check_type&& cr = static_cast(c); auto d = a; _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_cxx_compile_cxx11=yes else ax_cv_cxx_compile_cxx11=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 $as_echo "$ax_cv_cxx_compile_cxx11" >&6; } if test x$ax_cv_cxx_compile_cxx11 = xyes; then ac_success=yes fi if test x$ac_success = xno; then for switch in -std=c++11 -std=c++0x; do cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 $as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } if eval \${$cachevar+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CXXFLAGS="$CXXFLAGS" CXXFLAGS="$CXXFLAGS $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; typedef check> right_angle_brackets; int a; decltype(a) b; typedef check check_type; check_type c; check_type&& cr = static_cast(c); auto d = a; _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval $cachevar=yes else eval $cachevar=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXXFLAGS="$ac_save_CXXFLAGS" fi eval ac_res=\$$cachevar { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXXFLAGS="$CXXFLAGS $switch" ac_success=yes break fi done fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x$ax_cxx_compile_cxx11_required = xtrue; then if test x$ac_success = xno; then as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 fi else if test x$ac_success = xno; then HAVE_CXX11=0 { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 $as_echo "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 $as_echo "#define HAVE_CXX11 1" >>confdefs.h fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump enable_dlopen=yes # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=default # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: if test "x$enable_static" != "xno" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Linking a user program with static ADOL-C library will always result in a segmentation fault" >&5 $as_echo "$as_me: WARNING: Linking a user program with static ADOL-C library will always result in a segmentation fault" >&2;} fi # MPI root directory # Check whether --with-mpi_root was given. if test "${with_mpi_root+set}" = set; then : withval=$with_mpi_root; fi if test x"$with_mpi_root" != "x"; then if test x"$adolc_ampi_support" = "xno"; then as_fn_error $? "if --with-mpi-root is set one must also --enable_ampi" "$LINENO" 5 fi MPIROOT="$with_mpi_root" fi # Check whether --with-mpicc was given. if test "${with_mpicc+set}" = set; then : withval=$with_mpicc; fi if test x"$with_mpicc" != "x"; then if test x"$adolc_ampi_support" = "xno"; then as_fn_error $? "if --with-mpicc is set one must also --enable-ampi" "$LINENO" 5 fi MPICC="$with_mpicc" else MPICC="mpicc" fi if test x"$with_mpi_root" != "x"; then MPICC="$with_mpi_root/bin/$MPICC" fi # Check whether --with-mpicxx was given. if test "${with_mpicxx+set}" = set; then : withval=$with_mpicxx; fi if test x"$with_mpicxx" != "x"; then if test x"$adolc_ampi_support" = "xno"; then as_fn_error $? "if --with-mpicxx is set one must also --enable-ampi" "$LINENO" 5 fi MPICXX="$with_mpicxx" else MPICXX="mpicxx" fi if test x"$with_mpi_root" != "x"; then MPICXX="$with_mpi_root/bin/$MPICXX" fi saveCC="$CC" saveCXX="$CXX" if test x"$adolc_ampi_support" = "xyes"; then CC="$MPICC" CXX="$MPICXX" fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 $as_echo_n "checking size of void *... " >&6; } if ${ac_cv_sizeof_void_p+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : else if test "$ac_cv_type_void_p" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void *) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_void_p=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 $as_echo "$ac_cv_sizeof_void_p" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF if test "x$ac_cv_sizeof_void_p" = "x8" ; then _lib=lib64 else _lib=lib fi if test "x$libdir_set_on_cmd" = "xno" ; then libdir='${exec_prefix}'/"${_lib}" fi # check for builtin { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5 $as_echo_n "checking for __builtin_expect... " >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int f(){return 1;}; int main () { if (__builtin_expect(f(), 0)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # checks for header files { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi if test $ac_cv_header_stdbool_h = yes; then $as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h fi for ac_header in stddef.h stdlib.h stdio.h string.h unistd.h sys/timeb.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # checks for types { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi # Checks for libraries and fuctions { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pow" >&5 $as_echo_n "checking for library containing pow... " >&6; } if ${ac_cv_search_pow+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); int main () { return pow (); ; return 0; } _ACEOF for ac_lib in '' m; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_pow=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_pow+:} false; then : break fi done if ${ac_cv_search_pow+:} false; then : else ac_cv_search_pow=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pow" >&5 $as_echo "$ac_cv_search_pow" >&6; } ac_res=$ac_cv_search_pow if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi for ac_func in floor fmax fmin ftime pow sqrt strchr strtol trunc do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # substitutions # ADOL-C configuration $as_echo "#define ADOLC_VERSION 2" >>confdefs.h $as_echo "#define ADOLC_SUBVERSION 6" >>confdefs.h $as_echo "#define ADOLC_PATCHLEVEL 3" >>confdefs.h ADOLC_VERSION=2 ADOLC_SUBVERSION=6 ADOLC_PATCHLEVEL=3 # Checks for library functions for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 $as_echo_n "checking for GNU libc compatible realloc... " >&6; } if ${ac_cv_func_realloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_realloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_realloc_0_nonnull=yes else ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 $as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then : $as_echo "#define HAVE_REALLOC 1" >>confdefs.h else $as_echo "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac $as_echo "#define realloc rpl_realloc" >>confdefs.h fi if test x$ac_cv_func_malloc_0_nonnull != xyes ; then cat >>confdefs.h <<_ACEOF #define calloc rpl_calloc _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use calloc or malloc for memory allocation" >&5 $as_echo_n "checking whether to use calloc or malloc for memory allocation... " >&6; } # Check whether --enable-use-calloc was given. if test "${enable_use_calloc+set}" = set; then : enableval=$enable_use_calloc; use_calloc=$enableval else use_calloc=yes fi if test x$use_calloc = xyes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: calloc" >&5 $as_echo "calloc" >&6; } $as_echo "#define ADOLC_USE_CALLOC 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: malloc" >&5 $as_echo "malloc" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable atrig/erf functions" >&5 $as_echo_n "checking whether to enable atrig/erf functions... " >&6; } # Check whether --enable-atrig-erf was given. if test "${enable_atrig_erf+set}" = set; then : enableval=$enable_atrig_erf; use_atrig_erf=$enableval else use_atrig_erf=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_atrig_erf" >&5 $as_echo "$use_atrig_erf" >&6; } if test x$use_atrig_erf = xyes ; then ATRIG_ERF="#define ATRIG_ERF 1" else ATRIG_ERF="#undef ATRIG_ERF" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use 32-bit or 64-bit locations" >&5 $as_echo_n "checking whether to use 32-bit or 64-bit locations... " >&6; } # Check whether --enable-ulong was given. if test "${enable_ulong+set}" = set; then : enableval=$enable_ulong; use_ulong=$enableval else use_ulong=no fi if test x$use_ulong = xyes -a 0$ac_cv_sizeof_void_p -ge 8 ; then UINT_TYPE=uint64_t { $as_echo "$as_me:${as_lineno-$LINENO}: result: 64-bit" >&5 $as_echo "64-bit" >&6; } else UINT_TYPE=uint32_t { $as_echo "$as_me:${as_lineno-$LINENO}: result: 32-bit" >&5 $as_echo "32-bit" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use single or double precision" >&5 $as_echo_n "checking whether to use single or double precision... " >&6; } # Check whether --enable-double was given. if test "${enable_double+set}" = set; then : enableval=$enable_double; use_double=$enableval else use_double=yes fi if test x$use_double = xno ; then REAL_TYPE=float echo echo -n "using ${REAL_TYPE} is not well tested, please report bugs if you find any..." else REAL_TYPE=double fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $REAL_TYPE" >&5 $as_echo "$REAL_TYPE" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable advanced branching operations" >&5 $as_echo_n "checking whether to enable advanced branching operations... " >&6; } # Check whether --enable-advanced-branching was given. if test "${enable_advanced_branching+set}" = set; then : enableval=$enable_advanced_branching; use_advbranch=$enableval else use_advbranch=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_advbranch" >&5 $as_echo "$use_advbranch" >&6; } if test x$use_advbranch = xyes ; then ADVBRANCH="#define ADOLC_ADVANCED_BRANCHING 1" else ADVBRANCH="#undef ADOLC_ADVANCED_BRANCHING" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use ADOL-C debug mode" >&5 $as_echo_n "checking whether to use ADOL-C debug mode... " >&6; } # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; adolc_debug=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $adolc_debug" >&5 $as_echo "$adolc_debug" >&6; } else adolc_debug=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use ADOL-C hard debug mode" >&5 $as_echo_n "checking whether to use ADOL-C hard debug mode... " >&6; } # Check whether --enable-harddebug was given. if test "${enable_harddebug+set}" = set; then : enableval=$enable_harddebug; adolc_harddebug=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $adolc_harddebug" >&5 $as_echo "$adolc_harddebug" >&6; } else adolc_harddebug=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$adolc_harddebug == xyes ; then adolc_debug=yes $as_echo "#define ADOLC_HARDDEBUG 1" >>confdefs.h fi if test x$adolc_debug == xyes ; then $as_echo "#define ADOLC_DEBUG 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the default adouble constructor should initialize the value to 0" >&5 $as_echo_n "checking whether the default adouble constructor should initialize the value to 0... " >&6; } # Check whether --enable-stdczero was given. if test "${enable_stdczero+set}" = set; then : enableval=$enable_stdczero; adolc_stdczero=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else adolc_stdczero=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi if test x$adolc_stdczero == xyes; then $as_echo "#define ADOLC_ADOUBLE_STDCZERO 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the adouble variables have a late initialize option for functions like malloc/realloc" >&5 $as_echo_n "checking whether the adouble variables have a late initialize option for functions like malloc/realloc... " >&6; } # Check whether --enable-lateinit was given. if test "${enable_lateinit+set}" = set; then : enableval=$enable_lateinit; adolc_late_init=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else adolc_late_init=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$adolc_late_init == xyes; then $as_echo "#define ADOLC_ADOUBLE_LATEINIT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether errno is thread save" >&5 $as_echo_n "checking whether errno is thread save... " >&6; } # Check whether --enable-tserrno was given. if test "${enable_tserrno+set}" = set; then : enableval=$enable_tserrno; adolc_tserrno=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $adolc_tserrno" >&5 $as_echo "$adolc_tserrno" >&6; } else adolc_tserrno=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$adolc_tserrno == xyes ; then $as_echo "#define ADOLC_THREADSAVE_ERRNO 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flag to use to enable OpenMP" >&5 $as_echo_n "checking which flag to use to enable OpenMP... " >&6; } # Check whether --with-openmp-flag was given. if test "${with_openmp_flag+set}" = set; then : withval=$with_openmp_flag; ac_adolc_openmpflag=$withval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_openmpflag" >&5 $as_echo "$ac_adolc_openmpflag" >&6; } else ac_adolc_openmpflag="" { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi # Check whether --with-boost was given. if test "${with_boost+set}" = set; then : withval=$with_boost; if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ac_boost_path="" else want_boost="yes" ac_boost_path="$withval" fi else want_boost="yes" fi # Check whether --with-boost-libdir was given. if test "${with_boost_libdir+set}" = set; then : withval=$with_boost_libdir; if test -d "$withval" then ac_boost_lib_path="$withval" else as_fn_error $? "--with-boost-libdir expected directory name" "$LINENO" 5 fi else ac_boost_lib_path="" fi if test "x$want_boost" = "xyes"; then boost_lib_version_req=1.54 boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([0-9]*\.[0-9]*\)'` boost_lib_version_req_major=`expr $boost_lib_version_req : '\([0-9]*\)'` boost_lib_version_req_minor=`expr $boost_lib_version_req : '[0-9]*\.\([0-9]*\)'` boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[0-9]*\.[0-9]*\.\([0-9]*\)'` if test "x$boost_lib_version_req_sub_minor" = "x" ; then boost_lib_version_req_sub_minor="0" fi WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for boostlib >= $boost_lib_version_req" >&5 $as_echo_n "checking for boostlib >= $boost_lib_version_req... " >&6; } succeeded=no libsubdirs="lib" ax_arch=`uname -m` case $ax_arch in x86_64) libsubdirs="lib64 libx32 lib lib64" ;; ppc64|s390x|sparc64|aarch64|ppc64le) libsubdirs="lib64 lib lib64 ppc64le" ;; esac libsubdirs="lib/${host_cpu}-${host_os} $libsubdirs" case ${host_cpu} in i?86) libsubdirs="lib/i386-${host_os} $libsubdirs" ;; esac if test "$ac_boost_path" != ""; then BOOST_CPPFLAGS="-I$ac_boost_path/include" for ac_boost_path_tmp in $libsubdirs; do if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp" break fi done elif test "$cross_compiling" != yes; then for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then for libsubdir in $libsubdirs ; do if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir" BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" break; fi done fi if test "$ac_boost_lib_path" != ""; then BOOST_LDFLAGS="-L$ac_boost_lib_path" fi CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes found_system=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test "x$succeeded" != "xyes"; then _version=0 if test "$ac_boost_path" != ""; then if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp fi VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" done fi else if test "$cross_compiling" != yes; then for ac_boost_path in /usr /usr/local /opt /opt/local ; do if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` V_CHECK=`expr $_version_tmp \> $_version` if test "$V_CHECK" = "1" ; then _version=$_version_tmp best_path=$ac_boost_path fi done fi done VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" if test "$ac_boost_lib_path" = ""; then for libsubdir in $libsubdirs ; do if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done BOOST_LDFLAGS="-L$best_path/$libsubdir" fi fi if test "x$BOOST_ROOT" != "x"; then for libsubdir in $libsubdirs ; do if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi done if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` stage_version_shorten=`expr $stage_version : '\([0-9]*\.[0-9]*\)'` V_CHECK=`expr $stage_version_shorten \>\= $_version` if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: We will use a staged boost library from $BOOST_ROOT" >&5 $as_echo "$as_me: We will use a staged boost library from $BOOST_ROOT" >&6;} BOOST_CPPFLAGS="-I$BOOST_ROOT" BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir" fi fi fi fi CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if BOOST_VERSION >= $WANT_BOOST_VERSION // Everything is okay #else # error Boost version is too old #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } succeeded=yes found_system=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi if test "$succeeded" != "yes" ; then if test "$_version" = "0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&5 $as_echo "$as_me: We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in . See http://randspringer.de/boost for more documentation." >&6;} else { $as_echo "$as_me:${as_lineno-$LINENO}: Your boost libraries seems to old (version $_version)." >&5 $as_echo "$as_me: Your boost libraries seems to old (version $_version)." >&6;} fi # execute ACTION-IF-NOT-FOUND (if present): boost_new=no else $as_echo "#define HAVE_BOOST /**/" >>confdefs.h # execute ACTION-IF-FOUND (if present): boost_new=yes fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi if test x$boost_new = xyes ; then CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu for ac_header in boost/pool/pool_alloc.hpp do : ac_fn_cxx_check_header_mongrel "$LINENO" "boost/pool/pool_alloc.hpp" "ac_cv_header_boost_pool_pool_alloc_hpp" "$ac_includes_default" if test "x$ac_cv_header_boost_pool_pool_alloc_hpp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BOOST_POOL_POOL_ALLOC_HPP 1 _ACEOF fi done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Check whether --with-boost-system was given. if test "${with_boost_system+set}" = set; then : withval=$with_boost_system; if test "$withval" = "no"; then want_boost="no" elif test "$withval" = "yes"; then want_boost="yes" ax_boost_user_system_lib="" else want_boost="yes" ax_boost_user_system_lib="$withval" fi else want_boost="yes" fi if test "x$want_boost" = "xyes"; then CPPFLAGS_SAVED="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" export CPPFLAGS LDFLAGS_SAVED="$LDFLAGS" LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" export LDFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the Boost::System library is available" >&5 $as_echo_n "checking whether the Boost::System library is available... " >&6; } if ${ax_cv_boost_system+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CXXFLAGS_SAVE=$CXXFLAGS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { boost::system::system_category ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_boost_system=yes else ax_cv_boost_system=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXXFLAGS=$CXXFLAGS_SAVE ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_boost_system" >&5 $as_echo "$ax_cv_boost_system" >&6; } if test "x$ax_cv_boost_system" = "xyes"; then $as_echo "#define HAVE_BOOST_SYSTEM /**/" >>confdefs.h BOOSTLIBDIR=`echo $BOOST_LDFLAGS | sed -e 's/[^\/]*//'` LDFLAGS_SAVE=$LDFLAGS if test "x$ax_boost_user_system_lib" = "x"; then for libextension in `ls -r $BOOSTLIBDIR/libboost_system* 2>/dev/null | sed 's,.*/lib,,' | sed 's,\..*,,'` ; do ax_lib=${libextension} as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 $as_echo_n "checking for exit in -l$ax_lib... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$ax_lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char exit (); int main () { return exit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : BOOST_SYSTEM_LIB="-l$ax_lib"; link_system="yes"; break else link_system="no" fi done if test "x$link_system" != "xyes"; then for libextension in `ls -r $BOOSTLIBDIR/boost_system* 2>/dev/null | sed 's,.*/,,' | sed -e 's,\..*,,'` ; do ax_lib=${libextension} as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 $as_echo_n "checking for exit in -l$ax_lib... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$ax_lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char exit (); int main () { return exit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : BOOST_SYSTEM_LIB="-l$ax_lib"; link_system="yes"; break else link_system="no" fi done fi else for ax_lib in $ax_boost_user_system_lib boost_system-$ax_boost_user_system_lib; do as_ac_Lib=`$as_echo "ac_cv_lib_$ax_lib''_exit" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -l$ax_lib" >&5 $as_echo_n "checking for exit in -l$ax_lib... " >&6; } if eval \${$as_ac_Lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-l$ax_lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char exit (); int main () { return exit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_ac_Lib=yes" else eval "$as_ac_Lib=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : BOOST_SYSTEM_LIB="-l$ax_lib"; link_system="yes"; break else link_system="no" fi done fi if test "x$ax_lib" = "x"; then as_fn_error $? "Could not find a version of the library!" "$LINENO" 5 fi if test "x$link_system" = "xno"; then as_fn_error $? "Could not link against $ax_lib !" "$LINENO" 5 fi fi CPPFLAGS="$CPPFLAGS_SAVED" LDFLAGS="$LDFLAGS_SAVED" fi LDFLAGS="$LDFLAGS $BOOST_LDFLAGS $BOOST_SYSTEM_LIB" fi if test "x$want_boost" = xyes -a "x$boost_new" = xyes -a "x$ac_cv_header_boost_pool_pool_alloc_hpp" = xyes -a "x$link_system" = xyes ; then using_boost_pool=yes else using_boost_pool=no fi if test "x$using_boost_pool" = xyes -a "x$ac_adolc_openmpflag" = x ; then $as_echo "#define BOOST_POOL_NO_MT 1" >>confdefs.h fi # ADOL-C Sparse facility { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build sparse drivers" >&5 $as_echo_n "checking whether to build sparse drivers... " >&6; } # Check whether --enable-sparse was given. if test "${enable_sparse+set}" = set; then : enableval=$enable_sparse; sparse=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sparse" >&5 $as_echo "$sparse" >&6; } else sparse="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-colpack was given. if test "${with_colpack+set}" = set; then : withval=$with_colpack; colpack=$withval COLPACK_CFLAGS="-I$colpack/include" if test x${_lib} != xlib ; then D[0]="$colpack/${_lib}" D[1]="$colpack/lib" else D[0]="$colpack/${_lib}" fi else COLPACK_CFLAGS="" COLPACK_LIBS="-lColPack" D[0]="" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu save_CXXFLAGS="$CXXFLAGS" save_CPPFLAGS="$CPPFLAGS" save_LIBS="$LIBS" CPPFLAGS="$CPPFLAGS $COLPACK_CFLAGS" CXXFLAGS="$CXXFLAGS $ac_adolc_openmpflag" ac_fn_cxx_check_header_mongrel "$LINENO" "ColPack/ColPackHeaders.h" "ac_cv_header_ColPack_ColPackHeaders_h" "$ac_includes_default" if test "x$ac_cv_header_ColPack_ColPackHeaders_h" = xyes; then : have_colpackheaders=yes else have_colpackheaders=no CPPFLAGS="$save_CPPFLAGS" CXXFLAGS="$save_CXXFLAGS" fi for ((i=0; i < ${#D[@]} ; i++)); do COLPACK_LIBDIR="${D[$i]}" if test -n "$COLPACK_LIBDIR" ; then COLPACK_LIBS="-L$COLPACK_LIBDIR -lColPack -Wl,-rpath,$COLPACK_LIBDIR" fi if test x$have_colpackheaders = xyes ; then LIBS="$COLPACK_LIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libColPack in $COLPACK_LIBDIR" >&5 $as_echo_n "checking for libColPack in $COLPACK_LIBDIR... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { ColPack::GraphColoring g ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : have_colpack=yes else have_colpack=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_colpack" >&5 $as_echo "$have_colpack" >&6; } if test x$have_colpack = xyes ; then break else LIBS="$save_LIBS" fi else have_colpack=no fi done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x$have_colpack = xyes; then HAVE_LIBCOLPACK_TRUE= HAVE_LIBCOLPACK_FALSE='#' else HAVE_LIBCOLPACK_TRUE='#' HAVE_LIBCOLPACK_FALSE= fi if test x$have_colpack = xyes; then sparse=yes echo "will build sparse drivers as linking with -lColPack succeeded" fi if test x$sparse = xyes && test x$have_colpack = xyes; then $as_echo "#define HAVE_LIBCOLPACK 1" >>confdefs.h fi if test x${sparse} = xyes; then SPARSE_TRUE= SPARSE_FALSE='#' else SPARSE_TRUE='#' SPARSE_FALSE= fi if test x$sparse = xyes ; then $as_echo "#define SPARSE 1" >>confdefs.h fi # ADOL-C Examples { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build documented examples" >&5 $as_echo_n "checking whether to build documented examples... " >&6; } # Check whether --enable-docexa was given. if test "${enable_docexa+set}" = set; then : enableval=$enable_docexa; docexa=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else docexa="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x${docexa} = xyes; then DOCEXA_TRUE= DOCEXA_FALSE='#' else DOCEXA_TRUE='#' DOCEXA_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build additional examples" >&5 $as_echo_n "checking whether to build additional examples... " >&6; } # Check whether --enable-addexa was given. if test "${enable_addexa+set}" = set; then : enableval=$enable_addexa; addexa=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else addexa="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x${addexa} = xyes; then ADDEXA_TRUE= ADDEXA_FALSE='#' else ADDEXA_TRUE='#' ADDEXA_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build parallel example" >&5 $as_echo_n "checking whether to build parallel example... " >&6; } # Check whether --enable-parexa was given. if test "${enable_parexa+set}" = set; then : enableval=$enable_parexa; parexa=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else parexa="no" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x${parexa} = xyes; then PAREXA_TRUE= PAREXA_FALSE='#' else PAREXA_TRUE='#' PAREXA_FALSE= fi # ADOL-C Compilation flags { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CFLAGS to use" >&5 $as_echo_n "checking which CFLAGS to use... " >&6; } # Check whether --with-cflags was given. if test "${with_cflags+set}" = set; then : withval=$with_cflags; ac_adolc_cflags="$withval" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cflags="$ac_adolc_cflags -g -O0" fi ac_adolc_cflags="$ac_adolc_cflags $ac_adolc_openmpflag" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_cflags" >&5 $as_echo "$ac_adolc_cflags" >&6; } else if test "$ac_shell_cflags" = "not_set"; then ac_adolc_cflags="-O2" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cflags="-g -O0 -Wall -ansi" fi else ac_adolc_cflags="$CFLAGS" fi ac_adolc_cflags="$ac_adolc_cflags $ac_adolc_openmpflag" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_cflags" >&5 $as_echo "$ac_adolc_cflags" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CXXFLAGS to use" >&5 $as_echo_n "checking which CXXFLAGS to use... " >&6; } # Check whether --with-cxxflags was given. if test "${with_cxxflags+set}" = set; then : withval=$with_cxxflags; ac_adolc_cxxflags="$withval" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cxxflags="$ac_adolc_cxxflags -g -O0" fi ac_adolc_cxxflags="$ac_adolc_cxxflags $ac_adolc_openmpflag" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_cxxflags" >&5 $as_echo "$ac_adolc_cxxflags" >&6; } else if test "$ac_shell_cxxflags" = "not_set"; then ac_adolc_cxxflags="-O2" if test x${adolc_debug} == xyes || test x${adolc_harddebug} == xyes ; then ac_adolc_cxxflags="-g -O0 -Wall" fi else ac_adolc_cxxflags="$CXXFLAGS" fi ac_adolc_cxxflags="$ac_adolc_cxxflags $ac_adolc_openmpflag" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_adolc_cxxflags" >&5 $as_echo "$ac_adolc_cxxflags" >&6; } fi if test x"$adolc_ampi_support" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking Linking of MPI C programs" >&5 $as_echo_n "checking Linking of MPI C programs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { MPI_Init(0,0) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "MPI C compiler is required by $PACKAGE See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi if test x"$adolc_ampi_support" = "xyes"; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking Linking of MPI C++ programs" >&5 $as_echo_n "checking Linking of MPI C++ programs... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { MPI_Init(0,0) ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "MPI C++ compiler is required by $PACKAGE See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi # Check whether --with-ampi was given. if test "${with_ampi+set}" = set; then : withval=$with_ampi; fi if test x"$with_ampi" != "x"; then if test x"$adolc_ampi_support" = "xno"; then as_fn_error $? "if --with-ampi is set one must also --enable-ampi" "$LINENO" 5 fi CPPFLAGS="$CPPFLAGS -I$with_ampi/include" LDFLAGS="$LDFLAGS -L$with_ampi/lib -Wl,-rpath,$with_ampi/lib" if test x"$_lib" != "xlib" ; then LDFLAGS="$LDFLAGS -L$with_ampi/${_lib} -Wl,-rpath,$with_ampi/${_lib}" fi fi if test x"$adolc_ampi_support" = "xyes"; then LIBS="-lampiCommon -lampiBookkeeping -lampiTape $LIBS" keepLIBS="$LIBS" LIBS="$LIBS -lampiADtoolStubsOO" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libampiCommon (provided by AMPI)" >&5 $as_echo_n "checking libampiCommon (provided by AMPI)... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "ampi/ampi.h" int main () { AMPI_Finalize_NT() ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "libampiCommon is required by $PACKAGE See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$keepLIBS" adolclib=adolc_ampi fi # Check whether --with-soname was given. if test "${with_soname+set}" = set; then : withval=$with_soname; adolclib=$withval fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether tape_doc should compute values as it prints the tape contents" >&5 $as_echo_n "checking whether tape_doc should compute values as it prints the tape contents... " >&6; } # Check whether --enable-tapedoc_values was given. if test "${enable_tapedoc_values+set}" = set; then : enableval=$enable_tapedoc_values; tapedoc_values=no else tapedoc_values=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tapedoc_values" >&5 $as_echo "$tapedoc_values" >&6; } if test x$tapedoc_values == xyes; then $as_echo "#define ADOLC_TAPE_DOC_VALUES 1" >>confdefs.h fi ########################################################################### # COIN_PATCH_LIBTOOL_CYGWIN # ########################################################################### # Patches to libtool for cygwin. Lots for cl, a few for GCC. # For cl: # - cygpath is not correctly quoted in fix_srcfile_path # - paths generated for .lib files is not run through cygpath -w # # REQUIRED FOR COMPILATION WITH CYGWIN !!! # # COIN_PATCH_LIBTOOL_CYGWIN # output ac_config_files="$ac_config_files Makefile ADOL-C/Makefile ADOL-C/include/Makefile ADOL-C/include/adolc/Makefile ADOL-C/include/adolc/internal/adolc_settings.h ADOL-C/include/adolc/drivers/Makefile ADOL-C/include/adolc/internal/Makefile ADOL-C/include/adolc/lie/Makefile ADOL-C/include/adolc/sparse/Makefile ADOL-C/include/adolc/tapedoc/Makefile ADOL-C/src/Makefile ADOL-C/src/drivers/Makefile ADOL-C/src/lie/Makefile ADOL-C/src/sparse/Makefile ADOL-C/src/tapedoc/Makefile ADOL-C/doc/version.tex ADOL-C/examples/Makefile ADOL-C/examples/additional_examples/Makefile ADOL-C/examples/additional_examples/cuda/Makefile ADOL-C/examples/additional_examples/clock/Makefile ADOL-C/examples/additional_examples/checkpointing/Makefile ADOL-C/examples/additional_examples/ext_diff_func/Makefile ADOL-C/examples/additional_examples/fixpoint_exam/Makefile ADOL-C/examples/additional_examples/hessmat/Makefile ADOL-C/examples/additional_examples/lie/Makefile ADOL-C/examples/additional_examples/lufact/Makefile ADOL-C/examples/additional_examples/openmp_exam/Makefile ADOL-C/examples/additional_examples/scal/Makefile ADOL-C/examples/additional_examples/speelpenning/Makefile ADOL-C/examples/additional_examples/taylor/Makefile ADOL-C/examples/additional_examples/detexam/Makefile ADOL-C/examples/additional_examples/helm/Makefile ADOL-C/examples/additional_examples/lighthouse/Makefile ADOL-C/examples/additional_examples/ode/Makefile ADOL-C/examples/additional_examples/sparse/Makefile ADOL-C/examples/additional_examples/tapesave/Makefile ADOL-C/examples/additional_examples/pow/Makefile ADOL-C/examples/additional_examples/timing/Makefile ADOL-C/examples/additional_examples/param/Makefile ADOL-C/test/Makefile MSVisualStudio/v14/sparse/config.h MSVisualStudio/v14/nosparse/config.h MSVisualStudio/v14/x64/sparse/config.h MSVisualStudio/v14/x64/nosparse/config.h adolc.spec adolclib.pc" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DARWIN_TRUE}" && test -z "${DARWIN_FALSE}"; then as_fn_error $? "conditional \"DARWIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BUILD_ADOLC_AMPI_SUPPORT_TRUE}" && test -z "${BUILD_ADOLC_AMPI_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"BUILD_ADOLC_AMPI_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_LIBCOLPACK_TRUE}" && test -z "${HAVE_LIBCOLPACK_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBCOLPACK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${SPARSE_TRUE}" && test -z "${SPARSE_FALSE}"; then as_fn_error $? "conditional \"SPARSE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${DOCEXA_TRUE}" && test -z "${DOCEXA_FALSE}"; then as_fn_error $? "conditional \"DOCEXA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ADDEXA_TRUE}" && test -z "${ADDEXA_FALSE}"; then as_fn_error $? "conditional \"ADDEXA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PAREXA_TRUE}" && test -z "${PAREXA_FALSE}"; then as_fn_error $? "conditional \"PAREXA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by adolc $as_me 2.6.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ adolc config.status 2.6.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "ADOL-C/src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS ADOL-C/src/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "ADOL-C/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/Makefile" ;; "ADOL-C/include/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/Makefile" ;; "ADOL-C/include/adolc/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/Makefile" ;; "ADOL-C/include/adolc/internal/adolc_settings.h") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/internal/adolc_settings.h" ;; "ADOL-C/include/adolc/drivers/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/drivers/Makefile" ;; "ADOL-C/include/adolc/internal/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/internal/Makefile" ;; "ADOL-C/include/adolc/lie/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/lie/Makefile" ;; "ADOL-C/include/adolc/sparse/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/sparse/Makefile" ;; "ADOL-C/include/adolc/tapedoc/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/include/adolc/tapedoc/Makefile" ;; "ADOL-C/src/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/src/Makefile" ;; "ADOL-C/src/drivers/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/src/drivers/Makefile" ;; "ADOL-C/src/lie/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/src/lie/Makefile" ;; "ADOL-C/src/sparse/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/src/sparse/Makefile" ;; "ADOL-C/src/tapedoc/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/src/tapedoc/Makefile" ;; "ADOL-C/doc/version.tex") CONFIG_FILES="$CONFIG_FILES ADOL-C/doc/version.tex" ;; "ADOL-C/examples/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/Makefile" ;; "ADOL-C/examples/additional_examples/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/Makefile" ;; "ADOL-C/examples/additional_examples/cuda/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/cuda/Makefile" ;; "ADOL-C/examples/additional_examples/clock/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/clock/Makefile" ;; "ADOL-C/examples/additional_examples/checkpointing/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/checkpointing/Makefile" ;; "ADOL-C/examples/additional_examples/ext_diff_func/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/ext_diff_func/Makefile" ;; "ADOL-C/examples/additional_examples/fixpoint_exam/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/fixpoint_exam/Makefile" ;; "ADOL-C/examples/additional_examples/hessmat/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/hessmat/Makefile" ;; "ADOL-C/examples/additional_examples/lie/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/lie/Makefile" ;; "ADOL-C/examples/additional_examples/lufact/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/lufact/Makefile" ;; "ADOL-C/examples/additional_examples/openmp_exam/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/openmp_exam/Makefile" ;; "ADOL-C/examples/additional_examples/scal/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/scal/Makefile" ;; "ADOL-C/examples/additional_examples/speelpenning/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/speelpenning/Makefile" ;; "ADOL-C/examples/additional_examples/taylor/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/taylor/Makefile" ;; "ADOL-C/examples/additional_examples/detexam/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/detexam/Makefile" ;; "ADOL-C/examples/additional_examples/helm/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/helm/Makefile" ;; "ADOL-C/examples/additional_examples/lighthouse/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/lighthouse/Makefile" ;; "ADOL-C/examples/additional_examples/ode/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/ode/Makefile" ;; "ADOL-C/examples/additional_examples/sparse/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/sparse/Makefile" ;; "ADOL-C/examples/additional_examples/tapesave/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/tapesave/Makefile" ;; "ADOL-C/examples/additional_examples/pow/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/pow/Makefile" ;; "ADOL-C/examples/additional_examples/timing/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/timing/Makefile" ;; "ADOL-C/examples/additional_examples/param/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/examples/additional_examples/param/Makefile" ;; "ADOL-C/test/Makefile") CONFIG_FILES="$CONFIG_FILES ADOL-C/test/Makefile" ;; "MSVisualStudio/v14/sparse/config.h") CONFIG_FILES="$CONFIG_FILES MSVisualStudio/v14/sparse/config.h" ;; "MSVisualStudio/v14/nosparse/config.h") CONFIG_FILES="$CONFIG_FILES MSVisualStudio/v14/nosparse/config.h" ;; "MSVisualStudio/v14/x64/sparse/config.h") CONFIG_FILES="$CONFIG_FILES MSVisualStudio/v14/x64/sparse/config.h" ;; "MSVisualStudio/v14/x64/nosparse/config.h") CONFIG_FILES="$CONFIG_FILES MSVisualStudio/v14/x64/nosparse/config.h" ;; "adolc.spec") CONFIG_FILES="$CONFIG_FILES adolc.spec" ;; "adolclib.pc") CONFIG_FILES="$CONFIG_FILES adolclib.pc" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build static libraries. build_old_libs=$enable_static # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi #call libtool for cygwin case "$CXX" in clang* | */clang*) # do nothing but don't want to accidentally match the 'cl' patterns below ;; cl* | */cl* | CL* | */CL* | icl* | */icl* | ICL* | */ICL*) { $as_echo "$as_me:${as_lineno-$LINENO}: Applying patches to libtool for cl compiler" >&5 $as_echo "$as_me: Applying patches to libtool for cl compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|fix_srcfile_path=\"\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's%compile_deplibs=\"\$dir/\$old_library \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$old_library | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%compile_deplibs=\"\$dir/\$linklib \$compile_deplibs\"%compile_deplibs="'\`"$CYGPATH_W"' \$dir/\$linklib | sed -e '"'"'sY\\\\\\\\Y/Yg'"'"\`' \$compile_deplibs\"'% \ -e 's%lib /OUT:%lib -OUT:%' \ -e "s%cygpath -w%$CYGPATH_W%" \ -e 's%$AR x \\$f_ex_an_ar_oldlib%bla=\\`lib -nologo -list \\$f_ex_an_ar_oldlib | xargs echo '"$mydos2unix"'\\`; echo \\$bla; for i in \\$bla; do lib -nologo -extract:\\$i \\$f_ex_an_ar_oldlib; done%' \ -e 's/$AR t/lib -nologo -list/' \ -e 's%f_ex_an_ar_oldlib="\($?*1*\)"%f_ex_an_ar_oldlib='\`"$CYGPATH_W"' \1`%' \ -e 's%^archive_cmds=.*%archive_cmds="\\$CC -o \\$lib \\$libobjs \\$compiler_flags \\\\\\`echo \\\\\\"\\$deplibs\\\\\\" | \\$SED -e '"\'"'s/ -lc\\$//'"\'"'\\\\\\` -link -dll~linknames="%' \ -e 's%old_archive_cmds="lib -OUT:\\$oldlib\\$oldobjs\\$old_deplibs"%old_archive_cmds="if test -r \\$oldlib; then bla=\\"\\$oldlib\\"; else bla=; fi; lib -OUT:\\$oldlib \\\\\\$bla\\$oldobjs\\$old_deplibs"%' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: Applying patches to libtool for GNU compiler" >&5 $as_echo "$as_me: Applying patches to libtool for GNU compiler" >&6;} sed -e 's|fix_srcfile_path=\"`cygpath -w \"\$srcfile\"`\"|fix_srcfile_path=\"\\\`'"$CYGPATH_W"' \\\"\\$srcfile\\\"\\\`\"|' \ -e 's|"lib /OUT:\\$oldlib\\$oldobjs\\$old_deplibs"|"\\$AR \\$AR_FLAGS \\$oldlib\\$oldobjs\\$old_deplibs~\\$RANLIB \\$oldlib"|' \ -e 's|libext="lib"|libext="a"|' \ libtool > conftest.bla mv conftest.bla libtool chmod 755 libtool ;; esac warn=false # echo configuration echo \ " ----------------------------------------------------------------------------- Configuration: C compiler: ${CC} C++ compiler: ${CXX} Linker: ${LD} Source code location: `pwd` Install path: ${prefix} CFLAGS: ${ac_adolc_cflags} CXXFLAGS: ${ac_adolc_cxxflags} Use Boost pool allocator: ${using_boost_pool} Use ADOL-C debug mode: ${adolc_debug} Use ADOL-C hard debug mode: ${adolc_harddebug} Zero value in adouble default ctor: ${adolc_stdczero}" if [ "x${ac_adolc_openmpflag}" != "x" ] ; then echo \ " Access thread number via errno: ${adolc_tserrno}" fi echo \ " Use ADOL-C safe extern mode: ${adolc_safe_extern} Use ADOL-C late init mode: ${adolc_late_init} Build sparse drivers: ${sparse} Build with adjoinable MPI support: ${adolc_ampi_support} Build with ColPack: ${have_colpack}" if test x$sparse = xyes && test x$have_colpack = xno; then echo -e \ " \033[1;31mCompressed sparse structures will not be available Only sparsity patterns can be computed\033[0m" warn=true fi echo echo \ " Build documented examples: ${docexa} Build additional examples: ${addexa} tape_doc routine computes values: ${tapedoc_values} See ADOL-C/src/config.h for further configuration information. -----------------------------------------------------------------------------" # check for make install problems resulting from missing write permission pdir=${prefix} writable=true while test "x${pdir}" != "x/" ; do if test -e ${pdir} && test ! -w ${pdir}; then writable=false break elif test ! -e ${pdir} ; then pdir=`dirname ${pdir}` else break fi done if test "x${pdir}" == "x/" ; then writable=false fi if ! ${writable} ; then echo -e \ " \033[1;31mPrefix ${prefix} not writable please run ./configure --prefix=DIR with a writable directory path otherwise administrator privileges will be required to run \`make install'\033[0m" warn=true fi case ${prefix} in ${HOME}|${HOME}/*) if $warn ; then for (( i=5; i>0; i-- )); do echo -ne "\rPlease read the above messages carefully, continuing in ${i} seconds" sleep 1 done echo -e "\rPlease read the above messages carefully " fi echo \ " ***************************************************************************** To successfully compile and run programs using the ADOL-C shared library do the following things: compiling: * add \"-I${prefix}/include\" to your compiler call linking: * add \"-L${libdir} -l$adolclib\" to your linker call * extend your linker call by \"-Wl,--rpath -Wl,${libdir}\" (if you wish to skip the point \"executing\") executing (do one of the following things): * add ${libdir} to your LD_LIBRARY_PATH variable * ask your system administrator for adding ${libdir} to the global file containing library search paths (/etc/ld.so.conf) (or use the static library by replacing \"-L${libdir} -l$adolclib\" with \"${libdir}/lib$adolclib.a\" when linking) See README for instructions on how to change to a nonlocal installation! ***************************************************************************** " ;; esac if test "x$enable_static" != "xno" ; then echo \ " Linking a user program with a static ADOL-C library will always result in a segmentation fault. Please always use the shared library. ***************************************************************************** " fi ADOL-C-2.6.3/LICENSE0000644000175200017520000006572411732370423012114 0ustar coincoinTHIS PROGRAM IS PROVIDED UNDER THE TERMS OF ONE OF THE TWO LICENSES, I.E., EITHER THE ECLIPSE PUBLIC LICENSE VERSION 1.0 OR THE GNU GENERAL PUBLIC LICENSE AS GIVEN BELOW. ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES THE RECIPIENT'S ACCEPTANCE OF ONE OF THE TWO AGREEMENTS EPL-1.0 OR GPL-2.0+. *********************************************************************** A copy of the Eclipse Public License version 1.0 is provided along with this program. Eclipse Public License -v 1.0 THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 1. DEFINITIONS "Contribution" means: a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and b) in the case of each subsequent Contributor: i) changes to the Program, and ii) additions to the Program; where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. "Contributor" means any person or entity that distributes the Program. "Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. "Program" means the Contributions distributed in accordance with this Agreement. "Recipient" means anyone who receives the Program under this Agreement, including all Contributors. 2. GRANT OF RIGHTS a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. 3. REQUIREMENTS A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: a) it complies with the terms and conditions of this Agreement; and b) its license agreement: i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. When the Program is made available in source code form: a) it must be made available under this Agreement; and b) a copy of this Agreement must be included with each copy of the Program. Contributors may not remove or alter any copyright notices contained within the Program. Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. 4. COMMERCIAL DISTRIBUTION Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. 5. NO WARRANTY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. 6. DISCLAIMER OF LIABILITY EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. GENERAL If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. *********************************************************************** This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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 General Public License for more details. A copy of the GNU General Public License version 2 is provided along with this program. GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. *********************************************************************** ADOL-C-2.6.3/Makefile.in0000644000175200017520000007507612565145701013161 0ustar coincoin# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ ############################################################################## ############################################################################## VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(top_srcdir)/ADOL-C/doc/version.tex.in \ $(top_srcdir)/MSVisualStudio/v14/sparse/config.h.in \ $(top_srcdir)/MSVisualStudio/v14/nosparse/config.h.in \ $(top_srcdir)/MSVisualStudio/v14/x64/sparse/config.h.in \ $(top_srcdir)/MSVisualStudio/v14/x64/nosparse/config.h.in \ $(srcdir)/adolc.spec.in $(srcdir)/adolclib.pc.in AUTHORS \ ChangeLog INSTALL NEWS README TODO autoconf/config.guess \ autoconf/config.sub autoconf/depcomp autoconf/install-sh \ autoconf/missing autoconf/ltmain.sh \ $(top_srcdir)/autoconf/config.guess \ $(top_srcdir)/autoconf/config.sub \ $(top_srcdir)/autoconf/install-sh \ $(top_srcdir)/autoconf/ltmain.sh \ $(top_srcdir)/autoconf/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/autoconf/acx_builtin.m4 \ $(top_srcdir)/autoconf/ampi.m4 \ $(top_srcdir)/autoconf/ax_boost_base.m4 \ $(top_srcdir)/autoconf/ax_boost_system.m4 \ $(top_srcdir)/autoconf/colpack.m4 \ $(top_srcdir)/autoconf/libtool.m4 \ $(top_srcdir)/autoconf/ltoptions.m4 \ $(top_srcdir)/autoconf/ltsugar.m4 \ $(top_srcdir)/autoconf/ltversion.m4 \ $(top_srcdir)/autoconf/lt~obsolete.m4 \ $(top_srcdir)/autoconf/mpi.m4 \ $(top_srcdir)/autoconf/stdcxx_11.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/ADOL-C/src/config.h CONFIG_CLEAN_FILES = ADOL-C/doc/version.tex \ MSVisualStudio/v14/sparse/config.h \ MSVisualStudio/v14/nosparse/config.h \ MSVisualStudio/v14/x64/sparse/config.h \ MSVisualStudio/v14/x64/nosparse/config.h adolc.spec \ adolclib.pc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 GZIP_ENV = --best DIST_TARGETS = dist-bzip2 dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ADOLC_PATCHLEVEL = @ADOLC_PATCHLEVEL@ ADOLC_SUBVERSION = @ADOLC_SUBVERSION@ ADOLC_VERSION = @ADOLC_VERSION@ ADVBRANCH = @ADVBRANCH@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ ATRIG_ERF = @ATRIG_ERF@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BOOST_CPPFLAGS = @BOOST_CPPFLAGS@ BOOST_LDFLAGS = @BOOST_LDFLAGS@ BOOST_SYSTEM_LIB = @BOOST_SYSTEM_LIB@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ HAVE_CXX11 = @HAVE_CXX11@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ REAL_TYPE = @REAL_TYPE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UINT_TYPE = @UINT_TYPE@ VERSION = @VERSION@ _lib = @_lib@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_adolc_cflags = @ac_adolc_cflags@ ac_adolc_cxxflags = @ac_adolc_cxxflags@ ac_aux_dir = @ac_aux_dir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ adolclib = @adolclib@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ saveCC = @saveCC@ saveCXX = @saveCXX@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I autoconf AUTOMAKE_OPTIONS = foreign EXTRA_DIST = TODO BUGS LICENSE update_versions.sh \ ADOL-C/doc/version.tex.in ADOL-C/doc/version.tex \ ADOL-C/doc/adolc-manual.pdf ADOL-C/doc/adolc-manual.ps \ ADOL-C/doc/adolc-manual.tex ADOL-C/doc/short_ref.pdf \ ADOL-C/doc/short_ref.ps ADOL-C/doc/short_ref.tex \ ADOL-C/doc/multiplexed.pdf ADOL-C/doc/multiplexed.eps \ ADOL-C/doc/tapeadv.pdf ADOL-C/doc/tapeadv.eps \ ADOL-C/doc/tapebasic.pdf ADOL-C/doc/tapebasic.eps \ ADOL-C/doc/tap_point.pdf ADOL-C/doc/tap_point.eps \ MSVisualStudio/v14/adolc.sln MSVisualStudio/v14/adolc.vcxproj \ MSVisualStudio/v14/ColPack_Readme_VC++.txt \ MSVisualStudio/v14/ColPack.vcxproj \ MSVisualStudio/v14/sparse/config.h.in MSVisualStudio/v14/nosparse/config.h.in \ MSVisualStudio/v14/x64/sparse/config.h.in MSVisualStudio/v14/x64/nosparse/config.h.in \ MSVisualStudio/v14/sparse/config.h MSVisualStudio/v14/nosparse/config.h \ MSVisualStudio/v14/x64/sparse/config.h MSVisualStudio/v14/x64/nosparse/config.h \ MSVisualStudio/v14/Readme_VC++.txt \ MSVisualStudio/v14/installer.sh \ adolc.spec.in adolc.spec \ update_versions.sh SUBDIRS = ADOL-C # install pkg-config information pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = @adolclib@.pc all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): ADOL-C/doc/version.tex: $(top_builddir)/config.status $(top_srcdir)/ADOL-C/doc/version.tex.in cd $(top_builddir) && $(SHELL) ./config.status $@ MSVisualStudio/v14/sparse/config.h: $(top_builddir)/config.status $(top_srcdir)/MSVisualStudio/v14/sparse/config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ MSVisualStudio/v14/nosparse/config.h: $(top_builddir)/config.status $(top_srcdir)/MSVisualStudio/v14/nosparse/config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ MSVisualStudio/v14/x64/sparse/config.h: $(top_builddir)/config.status $(top_srcdir)/MSVisualStudio/v14/x64/sparse/config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ MSVisualStudio/v14/x64/nosparse/config.h: $(top_builddir)/config.status $(top_srcdir)/MSVisualStudio/v14/x64/nosparse/config.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ adolc.spec: $(top_builddir)/config.status $(srcdir)/adolc.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ adolclib.pc: $(top_builddir)/config.status $(srcdir)/adolclib.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-generic \ distclean-libtool distclean-local distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-pkgconfigDATA @adolclib@.pc: adolclib.pc mv $< $@ test: all cd ADOL-C; $(MAKE) test distclean-local: rm -f @adolclib@.pc .PHONY: test # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ADOL-C-2.6.3/update_versions.sh0000755000175200017520000000035512062616431014644 0ustar coincoin#!/bin/bash autoreconf -fi ./configure pushd ADOL-C/doc pdflatex adolc-manual.tex pdflatex adolc-manual.tex pdflatex adolc-manual.tex latex adolc-manual.tex latex adolc-manual.tex latex adolc-manual.tex dvips adolc-manual.dvi popd ADOL-C-2.6.3/AUTHORS0000644000175200017520000000160011732370423012136 0ustar coincoinauthors currently working on ADOL-C: ==================================== Andrea Walther Kshitij Kulshreshtha Institute of Mathematics University of Paderborn 33098 Paderborn, Germany Andreas Griewank Department of Mathematics Humboldt University Berlin D-10099, Germany Parts of the ADOL-C source were developed by Andreas Kowarz, now Baumer Optronic GmbH, Germany Hristo Mitev, now Treppenmeister GmbH, Germany Sebastian Schlenkrich, now d-fine GmbH, Germany, Jean Utke, now Argonne National Laboratory, USA, and Olaf Vogel, now Kingelnberg GmbH, Germany We are also indebted to George Corliss, Tom Epperly, Bruce Christianson, David Gay, David Juedes, Brad Karp, Koichi Kubota, Bob Olson, Marcela Rosemblun, Dima Shiriaev, Jay Srinivasan, Chuck Tyner, Jean Utke, and Duane Yoder for helping in various ways with the development and documentation of ADOL-C. ADOL-C-2.6.3/ChangeLog0000644000175200017520000001635711227415666012667 0ustar coincoinVersion 2.1.0 -------> 20090715 awalther - new directory structure to fit usual COIN project standards Version 2.0.0 Version 1.11.0 20060503 kowarz: - new tape handling merged into trunk 20060428 kowarz: - bug fixed that caused seg-fault when running standalone tapedoc - some additional security checks in tape_handling.cpp 20060424 kowarz: - bux fixed that caused a SEG-fault when reading tape stats for a tape written by a different ADOL-C run 20060405 kowarz: - taping code rewritten to "nullify" all pointers that were object to delete or free 20060301 kowarz: - last bugfix for the taylor tape forced the writing of the corresponding file even if the taylor buffer could be hold the overall taylor tape => fixed - buffer sizes in usrparms.h set to default 20060301 schlenk: - value() function added for compatibility reasons 20060228 kowarz: - bug in taylor tape handling corrected => last taylor buffer from taping is now available for multiple reverse sweeps 20060224 kowarz: - function 'value' in adouble.* changed to 'getValue' + corresponding updates in other files 20060215 schlenk: - code for fixpoint iteration added 20060215 kowarz: - bug in extern diff. function code corrected (cross-over assignment) - ext_diff_fct_index is now part of TapeInfos - it is set by forward and reverse sweeps (from tape) and can be accessed via currentTapeInfos 20060203 kowarz: Summary for the last two months: - taping strategies rewritten => should work with nested tapes now - enumeration for tape stats introduced => docs need to be updated - "theCleaner" code extended => should now be available in static versions, too - extern diff. function capabilities extended to fos_rev. - checkpointing interface based on extern differentiated function context and nested taping added => documentation will follow soon - configure system updated: --enable-debug and --enable-harddebug set appropriate compile flags, now - many minor changes :) 20051219 kowarz: - TBUFSIZE (dvlparms.h) is now treated as number of elements - tape files (operations, locations, values) are now deleted at the end of the program for all tapes which could hold at least one within the main memory - file removal works for static and dynamic library now 20051214 kowarz: - new file names for tapes - bug fixed that caused the writing of all tapes (op+loc+val) even if not all exceeded the buffer size - implemented the usage of different buffer sizes for different tapes (op, loc, val) => see "usrparms.h" 20051123 kowarz: - rpl_malloc/rpl_calloc/rpl_realloc handling corrected 20050928 kowarz: - Windows version updated. (Several problems in the sparse directory fixed) Should compile now! - PDF version of the documentation added Version 1.10.0 20050704 kowarz: - initial makefile set for Windows - Windows section added to INSTALL 20050630 kowarz: - function value(badouble x) removed from badouble - function value() added to badouble => use x.value() instead of value(x) - minor updates in the documentation 20050630 walther: - all includes of changed to <= malloc.h not available in all operation systems (e.g. MAC OS) - changed min, max to MIN_ADOLC, MAC_ADOLC - changed maxinc to MAXDEC kowarz: - some minor style changes, error corrections, comment updates Version 1.9.1 20050627 walther: - revised documentation - new coloring algorithms in graph_hess.* to generate seed matrix 20050617 kowarz: - replacement functions for malloc, calloc, realloc added 20050419 walther: - partial fix of the pow-function bug (pow evaluated at 0): forward mode: all orders reverse mode: up to order 1 - log_op corrected for hos_ov_reverse - hess_mat driver: change to static variables to reduce runtime - new drivers for sparse Hessians: * compute sparsity pattern * compute seed matrix from sparsity pattern using 3/2 coloring * compute Hessians in sparse format - new drivers for sparse Jacobians * compute seed matrix from sparsity pattern using CPR * compute Jacobians in sparse format 20050115 kowarz: - two shell scripts added for cross compiling (32-bit and 64-bit mode) 20050114 kowarz: - documentation for tapeless ADOL-C added - ADOL-C debug mode corrected (configure.ac) hard debug mode added to configure.ac 20050103 kowarz: tapeless tangent corrected 20041110 kowarz: tapeless forward version added (scalar / vector) documentation will follow soon 20041013 kowarz: another memory bug in jac_pat fixed => jac_pat seems to be clean now ( thanks to valgrind ;-) ) 20041007 kowarz: fixed memory bug in jac_pat (sparsedrivers.c), hopefully ( memory allocated for NULL rb and cb is freed at the end of jap_pat now ) thanks to Andreas Potschka 20041007 walther: partial fix of the pow-function bug (reverse mode) 20040913 kowarz: added driver jacobian_partx in drivers/drivers.c and drivers/drivers.h that was written down earlier but was not added to the repository 20040717 kowarz: bug fixed in tayutil.c (taylor_begin) ( old temporary files were never closed => could result in program crash due to too many file handles -> system dependend ) => old files are closed now before new ones are opened thanks to Andrej Ponomarenko 20040607 kowarz: bug fixed in tayutil.c (taylor_begin) (old taylor memory was never freed => chance to run out of memory if used many times on same tag -> dependend on memory size ) => moved "free( ... save_taylor)" ahead of " ... save_taylor = 0" thanks to Teijo T Arponen 20040524 kowarz: changed include of adolc files from standard notation (#include <...>) to user file notation (#include "...") ! started with ADOL-C version 1.9.0 ! ADOL-C-2.6.3/MSVisualStudio/0000755000175200017520000000000013037353015013762 5ustar coincoinADOL-C-2.6.3/MSVisualStudio/v14/0000755000175200017520000000000013037353015014374 5ustar coincoinADOL-C-2.6.3/MSVisualStudio/v14/ColPack.vcxproj0000644000175200017520000002461112564736754017354 0ustar coincoin sparse Win32 sparse x64 Win32Proj {C960E4D8-CE08-FDD2-02FD-6394A67739EA} 10.0.10240.0 StaticLibrary false v140 StaticLibrary false v140 StaticLibrary StaticLibrary true Build true Build WIN32;NDEBUG;_WINDOWS;_USRDLL;COLPACK_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase Recovery;GraphColoring;Main;Utilities;BipartiteGraphPartialColoring;BipartiteGraphBicoloring;%(AdditionalIncludeDirectories) MachineX86 true Windows true true mkdir "$(IntDir)\include" & mkdir "$(IntDir)\include\ColPack" & copy "Main\*.h" "$(IntDir)\include\ColPack" & copy "Utilities\*.h" "$(IntDir)\include\ColPack" & copy "GraphColoring\*.h" "$(IntDir)\include\ColPack" & copy "BipartiteGraphBicoloring\*.h" "$(IntDir)\include\ColPack" & copy "BipartiteGraphPartialColoring\*.h" "$(IntDir)\include\ColPack" & copy "Recovery\*.h" "$(IntDir)\include\ColPack" $(IntDir)\include\ColPack\ColPackHeaders.h;%(Outputs) WIN64;NDEBUG;_WINDOWS;_USRDLL;COLPACK_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) MultiThreadedDLL Level3 ProgramDatabase Recovery;GraphColoring;Main;Utilities;BipartiteGraphPartialColoring;BipartiteGraphBicoloring;%(AdditionalIncludeDirectories) true Windows true true mkdir "$(IntDir)\include" & mkdir "$(IntDir)\include\ColPack" & copy "Main\*.h" "$(IntDir)\include\ColPack" & copy "Utilities\*.h" "$(IntDir)\include\ColPack" & copy "GraphColoring\*.h" "$(IntDir)\include\ColPack" & copy "BipartiteGraphBicoloring\*.h" "$(IntDir)\include\ColPack" & copy "BipartiteGraphPartialColoring\*.h" "$(IntDir)\include\ColPack" & copy "Recovery\*.h" "$(IntDir)\include\ColPack" $(IntDir)\include\ColPack\ColPackHeaders.h;%(Outputs) Recovery;GraphColoring;Main;Utilities;BipartiteGraphPartialColoing;BipartiteGraphBicoloring;%(AdditionalIncludeDirectories) Recovery;GraphColoring;Main;Utilities;BipartiteGraphPartialColoing;BipartiteGraphBicoloring;%(AdditionalIncludeDirectories) ADOL-C-2.6.3/MSVisualStudio/v14/installer.sh0000755000175200017520000000427312704206216016736 0ustar coincoin#!/bin/bash -x INCFILES=(adolc.h adalloc.h adouble.h adutils.h \ adutilsc.h advector.h \ convolut.h fortutils.h \ interfaces.h param.h taping.h \ externfcts.h externfcts2.h \ checkpointing.h fixpoint.h \ adolc_sparse.h adolc_openmp.h \ revolve.h adtl.h adoublecuda.h) INCFILES_SPARSE=(sparsedrivers.h sparse_fo_rev.h) INCFILES_DRIVERS=(drivers.h odedrivers.h psdrivers.h taylor.h) INCFILES_TAPEDOC=(tapedoc.h) INCFILES_LIE=(drivers.h) INCFILES_INTERNAL=(adolc_settings.h \ adubfunc.h paramfunc.h \ common.h usrparms.h) if [[ $# < 1 ]]; then echo "usage: installer.sh config [arch]" echo "where config is sparse|nosparse" echo "and arch is optionally Win32 or x64" echo "if omitted arch defaults to Win32" exit 0 fi if [[ $# > 1 ]]; then case $2 in win32|Win32) conf=$1 arch=. cf=$1_win32 suffix=x86 ;; x64) conf=x64/$1 arch=x64 cf=$1_x64 suffix=x64 ;; esac else conf=$1 arch=. cf=$1_win32 suffix=x86 fi mkdir -p tmp mkdir -p tmp/include/adolc mkdir -p tmp/lib mkdir -p tmp/bin mkdir -p tmp/doc mkdir -p tmp/include/adolc/sparse mkdir -p tmp/include/adolc/drivers mkdir -p tmp/include/adolc/lie mkdir -p tmp/include/adolc/tapedoc mkdir -p tmp/include/adolc/internal for i in ${INCFILES[*]} ; do cp ../../ADOL-C/include/adolc/$i tmp/include/adolc done for i in ${INCFILES_SPARSE[*]} ; do cp ../../ADOL-C/include/adolc/sparse/$i tmp/include/adolc/sparse done for i in ${INCFILES_DRIVERS[*]} ; do cp ../../ADOL-C/include/adolc/drivers/$i tmp/include/adolc/drivers done for i in ${INCFILES_LIE[*]} ; do cp ../../ADOL-C/include/adolc/lie/$i tmp/include/adolc/lie done for i in ${INCFILES_TAPEDOC[*]} ; do cp ../../ADOL-C/include/adolc/tapedoc/$i tmp/include/adolc/tapedoc done for i in ${INCFILES_INTERNAL[*]} ; do cp ../../ADOL-C/include/adolc/internal/$i tmp/include/adolc/internal done cp $conf/adolc.dll tmp/bin cp $conf/adolc.lib tmp/lib cp ../../ADOL-C/doc/* tmp/doc cp $arch/vc_redist.$suffix.exe tmp/ echo "@echo off" > tmp/setup.bat echo "vcredist_${suffix}.exe" >> tmp/setup.bat cd tmp zip -r ../adolc_$cf.zip ./ cd .. rm -rf tmp ADOL-C-2.6.3/MSVisualStudio/v14/Readme_VC++.txt0000644000175200017520000000205712565414411017057 0ustar coincoinThe solution and project files were generated on Visual Studio 2010 Ultimate. Compatibility with older versions is not guarenteed. Before adolc may be built using Visual studio the following step must be taken: - Extract the boost library headers into the subdirectory MSVisualStudio/v14/boost This directory will be added to the build as additional include directory Compile boost using instructions from the boost website and choose the stage directory for 32 bit static build as static32 and for 64 bit static build as static64 - Extract and place the ColPack sources in the subdirectory MSVisualStudio/v14/ColPack This directory will be used to build ColPack too. Copy ColPack.vcxproj into it. ColPack will be built by adolc.sln The solution file adolc.sln can build both the sparse as well as the nosparse versions of adolc.dll. In visual studio open this solution file and select the solution 'adolc' in the Solution Explorer, from the toolbar select the build configuration sparse or nosparse, then from the Build menu select Build Solution (shortcut key F7). ADOL-C-2.6.3/MSVisualStudio/v14/nosparse/0000755000175200017520000000000013037353015016226 5ustar coincoinADOL-C-2.6.3/MSVisualStudio/v14/nosparse/config.h0000644000175200017520000001257513037352546017666 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble late initialization mode */ /* #undef ADOLC_ADOUBLE_LATEINIT */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* defined if adjoinable MPI support is to be compiled in */ /* #undef ADOLC_AMPI_SUPPORT */ /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL 3 /* ADOL-C Subversion */ #define ADOLC_SUBVERSION 6 /* ADOL-C tape_doc routine computes values */ #define ADOLC_TAPE_DOC_VALUES 1 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION 2 /* Boost pool should not assume multithreading */ #define BOOST_POOL_NO_MT 1 /* define if the Boost library is available */ #define HAVE_BOOST /* Define to 1 if you have the header file. */ #define HAVE_BOOST_POOL_POOL_ALLOC_HPP 1 /* define if the Boost::System library is available */ #define HAVE_BOOST_SYSTEM /* Define if the compiler provides __builtin_expect */ #define HAVE_BUILTIN_EXPECT 0 /* define if the compiler supports basic C++11 syntax */ #define HAVE_CXX11 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ /* #undef HAVE_LIBCOLPACK */ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 1 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "adolc" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "adol-c@list.coin-or.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "adolc" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "adolc 2.6.3" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "adolc" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.6.3" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 4 /* Define 1 if sparse derivative propagation is to be enabled */ /* #undef SPARSE */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "2.6.3" /* Define to rpl_calloc if the replacement function should be used. */ /* #define calloc rpl_calloc */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ /* #define malloc rpl_malloc */ /* Define to rpl_realloc if the replacement function should be used. */ /* #define realloc rpl_realloc */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.6.3/MSVisualStudio/v14/nosparse/config.h.in0000644000175200017520000001274412565413766020300 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble late initialization mode */ /* #undef ADOLC_ADOUBLE_LATEINIT */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* defined if adjoinable MPI support is to be compiled in */ /* #undef ADOLC_AMPI_SUPPORT */ /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL @ADOLC_PATCHLEVEL@ /* ADOL-C Subversion */ #define ADOLC_SUBVERSION @ADOLC_SUBVERSION@ /* ADOL-C tape_doc routine computes values */ #define ADOLC_TAPE_DOC_VALUES 1 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION @ADOLC_VERSION@ /* Boost pool should not assume multithreading */ #define BOOST_POOL_NO_MT 1 /* define if the Boost library is available */ #define HAVE_BOOST /* Define to 1 if you have the header file. */ #define HAVE_BOOST_POOL_POOL_ALLOC_HPP 1 /* define if the Boost::System library is available */ #define HAVE_BOOST_SYSTEM /* Define if the compiler provides __builtin_expect */ #define HAVE_BUILTIN_EXPECT 0 /* define if the compiler supports basic C++11 syntax */ #define HAVE_CXX11 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ /* #undef HAVE_LIBCOLPACK */ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 1 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "@PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE_NAME@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@PACKAGE_URL@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 4 /* Define 1 if sparse derivative propagation is to be enabled */ /* #undef SPARSE */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "@VERSION@" /* Define to rpl_calloc if the replacement function should be used. */ /* #define calloc rpl_calloc */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ /* #define malloc rpl_malloc */ /* Define to rpl_realloc if the replacement function should be used. */ /* #define realloc rpl_realloc */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.6.3/MSVisualStudio/v14/adolc.vcxproj0000644000175200017520000004213212627556207017111 0ustar coincoin nosparse Win32 nosparse x64 sparse Win32 sparse x64 Win32Proj {43459339-26DA-B162-0783-4ED235513520} 10.0.10240.0 DynamicLibrary false v140 DynamicLibrary false v140 DynamicLibrary false v140 DynamicLibrary false v140 true true true true WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;ADOLC_DLL;ADOLC_INTERNAL=1;HAVE_CONFIG_H;%(PreprocessorDefinitions) $(IntDir);$(ProjectDir)\ColPack\$(IntDir)\include;$(ProjectDir)boost;$(ProjectDir)..\..\ADOL-C\include;$(ProjectDir)..\..\ADOL-C\src;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase SyncCThrow MachineX86 true Windows $(IntDir);$(ProjectDir)boost\static32\lib;%(AdditionalLibraryDirectories) ColPack.lib;%(AdditionalDependencies) if exist $(ProjectDir)..\..\ADOL-C\src\config.h del /q $(ProjectDir)..\..\ADOL-C\src\config.h WIN64;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;ADOLC_DLL;ADOLC_INTERNAL=1;HAVE_CONFIG_H;%(PreprocessorDefinitions) $(IntDir);$(ProjectDir)\ColPack\$(IntDir)\include;$(ProjectDir)boost;$(ProjectDir)..\..\ADOL-C\include;$(ProjectDir)..\..\ADOL-C\src;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase SyncCThrow true Windows $(IntDir);$(ProjectDir)boost\static64\lib;%(AdditionalLibraryDirectories) ColPack.lib;%(AdditionalDependencies) if exist $(ProjectDir)..\..\ADOL-C\src\config.h del /q $(ProjectDir)..\..\ADOL-C\src\config.h WIN32;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;ADOLC_DLL;ADOLC_INTERNAL=1;HAVE_CONFIG_H;%(PreprocessorDefinitions) $(IntDir);$(ProjectDir)boost;$(ProjectDir)..\..\ADOL-C\include;$(ProjectDir)..\..\ADOL-C\src;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase SyncCThrow MachineX86 true Windows $(ProjectDir)boost\static32\lib;%(AdditionalLibraryDirectories) if exist $(ProjectDir)..\..\ADOL-C\src\config.h del /q $(ProjectDir)..\..\ADOL-C\src\config.h WIN64;NDEBUG;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;ADOLC_DLL;ADOLC_INTERNAL=1;HAVE_CONFIG_H;%(PreprocessorDefinitions) $(IntDir);$(ProjectDir)boost;$(ProjectDir)..\..\ADOL-C\include;$(ProjectDir)..\..\ADOL-C\src;%(AdditionalIncludeDirectories) MultiThreadedDLL Level3 ProgramDatabase SyncCThrow true Windows $(ProjectDir)boost\static64\lib;%(AdditionalLibraryDirectories) if exist $(ProjectDir)..\..\ADOL-C\src\config.h del /q $(ProjectDir)..\..\ADOL-C\src\config.h ADOL-C-2.6.3/MSVisualStudio/v14/adolc.sln0000644000175200017520000000431612564736754016223 0ustar coincoin Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.23107.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "adolc", "adolc.vcxproj", "{43459339-26DA-B162-0783-4ED235513520}" ProjectSection(ProjectDependencies) = postProject {C960E4D8-CE08-FDD2-02FD-6394A67739EA} = {C960E4D8-CE08-FDD2-02FD-6394A67739EA} EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ColPack", "ColPack\ColPack.vcxproj", "{C960E4D8-CE08-FDD2-02FD-6394A67739EA}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution nosparse|Win32 = nosparse|Win32 nosparse|x64 = nosparse|x64 sparse|Win32 = sparse|Win32 sparse|x64 = sparse|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {43459339-26DA-B162-0783-4ED235513520}.nosparse|Win32.ActiveCfg = nosparse|Win32 {43459339-26DA-B162-0783-4ED235513520}.nosparse|Win32.Build.0 = nosparse|Win32 {43459339-26DA-B162-0783-4ED235513520}.nosparse|x64.ActiveCfg = nosparse|x64 {43459339-26DA-B162-0783-4ED235513520}.nosparse|x64.Build.0 = nosparse|x64 {43459339-26DA-B162-0783-4ED235513520}.sparse|Win32.ActiveCfg = sparse|Win32 {43459339-26DA-B162-0783-4ED235513520}.sparse|Win32.Build.0 = sparse|Win32 {43459339-26DA-B162-0783-4ED235513520}.sparse|x64.ActiveCfg = sparse|x64 {43459339-26DA-B162-0783-4ED235513520}.sparse|x64.Build.0 = sparse|x64 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.nosparse|Win32.ActiveCfg = sparse|Win32 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.nosparse|Win32.Build.0 = sparse|Win32 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.nosparse|x64.ActiveCfg = sparse|x64 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.nosparse|x64.Build.0 = sparse|x64 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.sparse|Win32.ActiveCfg = sparse|Win32 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.sparse|Win32.Build.0 = sparse|Win32 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.sparse|x64.ActiveCfg = sparse|x64 {C960E4D8-CE08-FDD2-02FD-6394A67739EA}.sparse|x64.Build.0 = sparse|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal ADOL-C-2.6.3/MSVisualStudio/v14/sparse/0000755000175200017520000000000013037353015015671 5ustar coincoinADOL-C-2.6.3/MSVisualStudio/v14/sparse/config.h0000644000175200017520000001256713037352546017332 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble late initialization mode */ /* #undef ADOLC_ADOUBLE_LATEINIT */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* defined if adjoinable MPI support is to be compiled in */ /* #undef ADOLC_AMPI_SUPPORT */ /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL 3 /* ADOL-C Subversion */ #define ADOLC_SUBVERSION 6 /* ADOL-C tape_doc routine computes values */ #define ADOLC_TAPE_DOC_VALUES 1 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION 2 /* Boost pool should not assume multithreading */ #define BOOST_POOL_NO_MT 1 /* define if the Boost library is available */ #define HAVE_BOOST /* Define to 1 if you have the header file. */ #define HAVE_BOOST_POOL_POOL_ALLOC_HPP 1 /* define if the Boost::System library is available */ #define HAVE_BOOST_SYSTEM /* Define if the compiler provides __builtin_expect */ #define HAVE_BUILTIN_EXPECT 0 /* define if the compiler supports basic C++11 syntax */ #define HAVE_CXX11 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ #define HAVE_LIBCOLPACK 1 /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 1 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "adolc" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "adol-c@list.coin-or.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "adolc" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "adolc 2.6.3" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "adolc" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.6.3" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 4 /* Define 1 if sparse derivative propagation is to be enabled */ #define SPARSE 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "2.6.3" /* Define to rpl_calloc if the replacement function should be used. */ /* #define calloc rpl_calloc */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ /* #define malloc rpl_malloc */ /* Define to rpl_realloc if the replacement function should be used. */ /* #define realloc rpl_realloc */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.6.3/MSVisualStudio/v14/sparse/config.h.in0000644000175200017520000001273112565413766017737 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble late initialization mode */ /* #undef ADOLC_ADOUBLE_LATEINIT */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* defined if adjoinable MPI support is to be compiled in */ /* #undef ADOLC_AMPI_SUPPORT */ /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL @ADOLC_PATCHLEVEL@ /* ADOL-C Subversion */ #define ADOLC_SUBVERSION @ADOLC_SUBVERSION@ /* ADOL-C tape_doc routine computes values */ #define ADOLC_TAPE_DOC_VALUES 1 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION @ADOLC_VERSION@ /* Boost pool should not assume multithreading */ #define BOOST_POOL_NO_MT 1 /* define if the Boost library is available */ #define HAVE_BOOST /* Define to 1 if you have the header file. */ #define HAVE_BOOST_POOL_POOL_ALLOC_HPP 1 /* define if the Boost::System library is available */ #define HAVE_BOOST_SYSTEM /* Define if the compiler provides __builtin_expect */ #define HAVE_BUILTIN_EXPECT 0 /* define if the compiler supports basic C++11 syntax */ #define HAVE_CXX11 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ #define HAVE_LIBCOLPACK 1 /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 1 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "@PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@PACKAGE_URL@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 4 /* Define 1 if sparse derivative propagation is to be enabled */ #define SPARSE 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "@VERSION@" /* Define to rpl_calloc if the replacement function should be used. */ /* #define calloc rpl_calloc */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ /* #define malloc rpl_malloc */ /* Define to rpl_realloc if the replacement function should be used. */ /* #define realloc rpl_realloc */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.6.3/MSVisualStudio/v14/x64/0000755000175200017520000000000013037353015015015 5ustar coincoinADOL-C-2.6.3/MSVisualStudio/v14/x64/nosparse/0000755000175200017520000000000013037353015016647 5ustar coincoinADOL-C-2.6.3/MSVisualStudio/v14/x64/nosparse/config.h.in0000644000175200017520000001274412565413766020721 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble late initialization mode */ /* #undef ADOLC_ADOUBLE_LATEINIT */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* defined if adjoinable MPI support is to be compiled in */ /* #undef ADOLC_AMPI_SUPPORT */ /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL @ADOLC_PATCHLEVEL@ /* ADOL-C Subversion */ #define ADOLC_SUBVERSION @ADOLC_SUBVERSION@ /* ADOL-C tape_doc routine computes values */ #define ADOLC_TAPE_DOC_VALUES 1 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION @ADOLC_VERSION@ /* Boost pool should not assume multithreading */ #define BOOST_POOL_NO_MT 1 /* define if the Boost library is available */ #define HAVE_BOOST /* Define to 1 if you have the header file. */ #define HAVE_BOOST_POOL_POOL_ALLOC_HPP 1 /* define if the Boost::System library is available */ #define HAVE_BOOST_SYSTEM /* Define if the compiler provides __builtin_expect */ #define HAVE_BUILTIN_EXPECT 0 /* define if the compiler supports basic C++11 syntax */ #define HAVE_CXX11 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ /* #undef HAVE_LIBCOLPACK */ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 1 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "@PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE_NAME@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@PACKAGE_URL@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 8 /* Define 1 if sparse derivative propagation is to be enabled */ /* #undef SPARSE */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "@VERSION@" /* Define to rpl_calloc if the replacement function should be used. */ /* #define calloc rpl_calloc */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ /* #define malloc rpl_malloc */ /* Define to rpl_realloc if the replacement function should be used. */ /* #define realloc rpl_realloc */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.6.3/MSVisualStudio/v14/x64/nosparse/config.h0000644000175200017520000001257513037352546020307 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble late initialization mode */ /* #undef ADOLC_ADOUBLE_LATEINIT */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* defined if adjoinable MPI support is to be compiled in */ /* #undef ADOLC_AMPI_SUPPORT */ /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL 3 /* ADOL-C Subversion */ #define ADOLC_SUBVERSION 6 /* ADOL-C tape_doc routine computes values */ #define ADOLC_TAPE_DOC_VALUES 1 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION 2 /* Boost pool should not assume multithreading */ #define BOOST_POOL_NO_MT 1 /* define if the Boost library is available */ #define HAVE_BOOST /* Define to 1 if you have the header file. */ #define HAVE_BOOST_POOL_POOL_ALLOC_HPP 1 /* define if the Boost::System library is available */ #define HAVE_BOOST_SYSTEM /* Define if the compiler provides __builtin_expect */ #define HAVE_BUILTIN_EXPECT 0 /* define if the compiler supports basic C++11 syntax */ #define HAVE_CXX11 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ /* #undef HAVE_LIBCOLPACK */ /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 1 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "adolc" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "adol-c@list.coin-or.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "adolc" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "adolc 2.6.3" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "adolc" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.6.3" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 8 /* Define 1 if sparse derivative propagation is to be enabled */ /* #undef SPARSE */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "2.6.3" /* Define to rpl_calloc if the replacement function should be used. */ /* #define calloc rpl_calloc */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ /* #define malloc rpl_malloc */ /* Define to rpl_realloc if the replacement function should be used. */ /* #define realloc rpl_realloc */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.6.3/MSVisualStudio/v14/x64/sparse/0000755000175200017520000000000013037353015016312 5ustar coincoinADOL-C-2.6.3/MSVisualStudio/v14/x64/sparse/config.h.in0000644000175200017520000001273612565413766020365 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble late initialization mode */ /* #undef ADOLC_ADOUBLE_LATEINIT */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* defined if adjoinable MPI support is to be compiled in */ /* #undef ADOLC_AMPI_SUPPORT */ /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL @ADOLC_PATCHLEVEL@ /* ADOL-C Subversion */ #define ADOLC_SUBVERSION @ADOLC_SUBVERSION@ /* ADOL-C tape_doc routine computes values */ #define ADOLC_TAPE_DOC_VALUES 1 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION @ADOLC_VERSION@ /* Boost pool should not assume multithreading */ #define BOOST_POOL_NO_MT 1 /* define if the Boost library is available */ #define HAVE_BOOST /* Define to 1 if you have the header file. */ #define HAVE_BOOST_POOL_POOL_ALLOC_HPP 1 /* define if the Boost::System library is available */ #define HAVE_BOOST_SYSTEM /* Define if the compiler provides __builtin_expect */ #define HAVE_BUILTIN_EXPECT 0 /* define if the compiler supports basic C++11 syntax */ #define HAVE_CXX11 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ #define HAVE_LIBCOLPACK 1 /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 1 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "@PACKAGE@" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" /* Define to the full name of this package. */ #define PACKAGE_NAME "@PACKAGE_NAME@" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "@PACKAGE_STRING@" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "@PACKAGE_TARNAME@" /* Define to the home page for this package. */ #define PACKAGE_URL "@PACKAGE_URL@" /* Define to the version of this package. */ #define PACKAGE_VERSION "@PACKAGE_VERSION@" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 8 /* Define 1 if sparse derivative propagation is to be enabled */ #define SPARSE 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "@VERSION@" /* Define to rpl_calloc if the replacement function should be used. */ /* #define calloc rpl_calloc */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ /* #define malloc rpl_malloc */ /* Define to rpl_realloc if the replacement function should be used. */ /* #define realloc rpl_realloc */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ ADOL-C-2.6.3/MSVisualStudio/v14/x64/sparse/config.h0000644000175200017520000001256713037352546017753 0ustar coincoin/* ADOL-C/src/config.h. Generated from config.h.in by configure. */ /* ADOL-C/src/config.h.in. Generated from configure.ac by autoheader. */ /* ADOL-C adouble late initialization mode */ /* #undef ADOLC_ADOUBLE_LATEINIT */ /* ADOL-C adouble zeroing mode */ #define ADOLC_ADOUBLE_STDCZERO 1 /* defined if adjoinable MPI support is to be compiled in */ /* #undef ADOLC_AMPI_SUPPORT */ /* ADOL-C debug mode */ /* #undef ADOLC_DEBUG */ /* ADOL-C hard debug mode */ /* #undef ADOLC_HARDDEBUG */ /* ADOL-C Patchlevel */ #define ADOLC_PATCHLEVEL 3 /* ADOL-C Subversion */ #define ADOLC_SUBVERSION 6 /* ADOL-C tape_doc routine computes values */ #define ADOLC_TAPE_DOC_VALUES 1 /* ADOL-C thread save errno mode */ /* #undef ADOLC_THREADSAVE_ERRNO */ /* Use calloc instead of malloc for memory allocation */ #define ADOLC_USE_CALLOC 1 /* ADOL-C Version */ #define ADOLC_VERSION 2 /* Boost pool should not assume multithreading */ #define BOOST_POOL_NO_MT 1 /* define if the Boost library is available */ #define HAVE_BOOST /* Define to 1 if you have the header file. */ #define HAVE_BOOST_POOL_POOL_ALLOC_HPP 1 /* define if the Boost::System library is available */ #define HAVE_BOOST_SYSTEM /* Define if the compiler provides __builtin_expect */ #define HAVE_BUILTIN_EXPECT 0 /* define if the compiler supports basic C++11 syntax */ #define HAVE_CXX11 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* Define to 1 if you have the `floor' function. */ #define HAVE_FLOOR 1 /* Define to 1 if you have the `fmax' function. */ #define HAVE_FMAX 1 /* Define to 1 if you have the `fmin' function. */ #define HAVE_FMIN 1 /* Define to 1 if you have the `ftime' function. */ #define HAVE_FTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define 1 if ColPack is available */ #define HAVE_LIBCOLPACK 1 /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #define HAVE_MALLOC 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `pow' function. */ #define HAVE_POW 1 /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #define HAVE_REALLOC 1 /* Define to 1 if you have the `sqrt' function. */ #define HAVE_SQRT 1 /* Define to 1 if stdbool.h conforms to C99. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDDEF_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */ #define HAVE_STRCHR 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMEB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the `trunc' function. */ #define HAVE_TRUNC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_UNISTD_H */ /* Define to 1 if the system has the type `_Bool'. */ #define HAVE__BOOL 1 /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Name of package */ #define PACKAGE "adolc" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "adol-c@list.coin-or.org" /* Define to the full name of this package. */ #define PACKAGE_NAME "adolc" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "adolc 2.6.3" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "adolc" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "2.6.3" /* The size of `void *', as computed by sizeof. */ #define SIZEOF_VOID_P 8 /* Define 1 if sparse derivative propagation is to be enabled */ #define SPARSE 1 /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ #define VERSION "2.6.3" /* Define to rpl_calloc if the replacement function should be used. */ /* #define calloc rpl_calloc */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to rpl_malloc if the replacement function should be used. */ /* #define malloc rpl_malloc */ /* Define to rpl_realloc if the replacement function should be used. */ /* #define realloc rpl_realloc */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */

)|iڤy],4`<u[ !`8Q&3yޚ!YwS<|( o<ӬD^dy dJM2P3[K@Ġ4 7 l5WV>TLn[MfǛᲨvh̢n9dMv@ iU4+ZqK9[?/6}c,1~4ci&DB?24%}WEI&!<8PT_* p;ӡany CYݘbE:Bq d2[]pkMLMȰkQ`JN+HG5&OAxj5> &s% {vE%i8`P/^b[Ѧ0̴ܳ,APx(X@@z?uϞ"\i֝#0wҹ9>]"Z7c B- 1tOl x<[M~92d)ue~%kĨ \4|$Rw,u)nC8[% [맊f"!knO@7&QGKUݚR5u| N]v t`1_ U6f-!vwְR]H$)'W7(iUbtx &jD$'.MYeh4&Se endstream endobj 736 0 obj << /Length 1661 /Filter /FlateDecode >> stream xXYoF~ *W{I] ͅA"F(E:)\uAp"x. aXbp<; a1ım@ .zhI<%rȫt$㤧+R* "@]3LYsZi/4hMy[֊`Xj͕ l-\AhwQd-s1%A^hX`#&H̅&ҢNvy%0-b;fݴ6 S ~ao>%4cv|e H܌FFM$Q"N-_|B6O/opʺq4$HJUQ%1 0`KYn,?ĬƬu''9XzZ4I`BKzFQ$*2vs/6gb8qKj7w|sF=Oo438;C~/mj C7rn1=_zVum b!DloM0+ O:Ңֈ}Bv^HC9C&cV~EhQQ"8H鬺Jne{U`©AnX|Zgјu(ѿ;6m&BM˻K0Qoȯ'}Q%xBV' *~NKSgmW~քCwfY_P& A`y- !蒒 AgoeW%]xsymQhkil^|Ձ1]έҬwר[{H%6 -E Vu˴(6z5Ŭ̾0a?, Ӊa>tˢ:1h06VYLKu1I$LB|"5"ܮpE5۫n-a#,:7g:g{/_!zտ P5}]zfl_3|=P8<ɲ!^@Ϟgj*l#g,] /fՋc d( ai)kmG=U#A]J`+eU'JAÖ}  ڷK=0+h4HFb v?"*(@z]P6 2 YW6&ܘu6!WTX=H0O W* )iM! Z~XPUHG9 U 8,DMӾ DjY6>Z*LDI |0)bHqy+F`Poʰ` I!eԮ2yQ@U֔9$}6L* ui5n|5n=z{v~[jfbxt?nry8kns b6|rm~%h;6 PV[ endstream endobj 740 0 obj << /Length 2556 /Filter /FlateDecode >> stream xڵYIwW& tc{9ZHsMo@E?9g\Fwu_UW[~=7R,M`%uX_(ZA2Ձ(^|R%իJk\/U켽] *|^y{/߾Z] 3OcaPdC7B B碩j(C}A5!߷ .? T1:or$y C'{0*k7Ko3Nˀ<Sh3Gs@O:4ɄŃ*fwLLޗp̳lB'Si&ەU2wǎ)m(j^Fc{-lJyP(PnExhx\p?) :ڭ\(՞?/XŖOygf,zSp{] B,z0Kws;pP~4afeeS=!;^+Ԗl>8͌йՐA D7R{,ӂ}n,!PAĠ!&'=16<op#޴qFRZ7=a ez2;.rAkĜYkAU]K[ ^Vn9vYUt-a'wf״VCٚa5zI@< p8.k,p1<$ȺD0Zj+uQWf[ko@(0BȁrbϡIVi$ǞM| 4a쀺A4>jS{ϣوIqu33R8muxq<1wRpz͘gNd5Ki?K1{G ك_MyNT٣g!*.1@s_TXnxU>RЗ|S1Ysg}amP ' `#(0hjx:|6L%y`4{S\6uyT W7m;qmBm"5sg\(U;޴de22£eJ'T5Xd4-bƸ}N%!p]_f[H)Hyqaj~ayh3sV7)oʚ:VɄ(\w=TdQcFC9=?8fl \pZ2w&<\%~ǐE^=WaIM=觜o p@}fxV"V&()^Nk!Ю/w)EsvIlMR;/ulʱB eE3Ͱԋ,]|D `9= Q/B*|;č`Mc6LHGL(1Aү_9rKsW_ܙ`~u胼Wdه3tXs' x6E;7oQD@px"Bs-?Gs0JBMgJ2˛۫ ͩi7[dQIYDu{#n `_EA"}R[w TXˌ5FbM릞0 &n=TrRqҖlgty[ U)#s3lq:>SzA^*¤Ŕ}l[).#'T[X6PwH91/HxjاZY1F u,SOX`H2͘8d3k!)i8{[v6Y"xmPU(T,:i8{. c@'Av_}Qy\0eC8V5y6e-˓ c8A~q5U@@Cst;uDw3杲rCr)tmK&4iوBlN{@uυVj>R[TU9|֗g^dGgث=X!k) TFc{(gX)c߷yC5PnKńmA`x|pܦ;טY 99a'lu/9vaF=LCF(|F9V82Ƌ(w8(_H dIj endstream endobj 745 0 obj << /Length 3147 /Filter /FlateDecode >> stream xZKϯPnRe&ɸ|pv.JzӍNTzsIu<*m]aOw_$3MNY Lonmrݭ& CY0nmnyg6DۺH06݁~/o_r44Gn.DȒY^z> n_jI)zDkR0 Ayma tqļ |27d)D؜ŇFw6ȩ/In0\&b/ OwcG8ܡ|#(n+'=tgxx^`ك= )?beG \Ft=\\qX;r=ǂ\lx.G+#l"_G10)ګ½ #1 4Ub(S%l ˼a7&ɿg8 g܂=P,G DP 3{^=SDam&9 ^АÝ p;Yh̀@~tqB.:ą&>?5|:e_45ZZ "|Z֒F ABC ɠ:To<93>r4?mߚE4 Vƻ%%q F Ǿ'ab@{8aK=i0|1-::㎙bӀT_ᲟK|w}]lSSaNK)o(^.CCb)*L=ǚSp+TLhY~m&(sk`+sJP3PH&!CkSv)9L_j@0 s=mALR C YF@,^^XDhe[&mkaC4.uqx4H`. Ԝ?C0s@OP% 9Wrf%1E΃Dݪwcم40Mf/ ܒY KEnE 2Ϸ2ϿX`5tٗ#fW+rsXB^}uj3j[qnFq.* Bږc ; U=}#g`?t`72ԡ+#` ,NJ&K:tq,:Lh@XCڹJf|ظU&V }RSZx_aӰ7SMntR K(z]x[ocox daah"c(:h0P/ hsIbyە9Q l1PVcJҳZ+;U^E|~$e׊ʼQr0Y|_Ne֜-ZY~z6Q U-*9Ws&M恫MokxelF^2#$ F%65he&*Mak6GGҫЅpWiDPow7ܠ@F*~J6 {(+<~BXj7.QLa\}R&#Đ\s#j)@S_}kd$@RO'zB!iZà ,M|Iݚ !k,MtûURg\y>l̻-oo]Jg'nWϏHH>ߪ*w8?nrW3܂_SrT~-VvLIkSZ},,T:9n[Ƕo5LEP,|V'#ls9e3G7 }8Bh9|<b2Yr!5ʓ Kx%]Z1/R$5!ux!/EϝX9H V> stream xڥY_s6 X 2{%qϝ&KCX,N(%ؾOTz=$ `EUEQGXmv\P4jS~ ͏]T2̴u,OvQWq~O.R2B_W Ion~|~ssu`s=nܫ7~Zϟn@ן.W(EħeefiBr>o,T'0ca=Mה*t|:qٗ N_#~4h^mjzL*JTCCb!"=[3uM쪯Ipk3)x,C\x-]kT%&["&Xuh0KN7pTh S-&fv4fwkr\4 DԐw"w+G\]Ī r4̥{VۚN{7kanid(HY -C܁4(躲dޮ7L\}z*㩾L{XԵ$ji\qi,'`EiF^$ҙ$>mᛐodȂͶLCj[s3^uh07ZzޒGl/KT‰Ь^؟Xz4=Ic%ǯ~Gt2Ctc1 =:r) ƹb? 7Ϻl=K20NT"@1E+t"1ӻ%S"ڏJ H'2Zp ) w#k꾥a:ҥj[4C=QXqtQhWU+p|GI/] 8Ill0HxJy?+"w ;O"{r`i,Q;Ã* Ձ^U9ABA3,?)'7<&y)?*& 6NJOB]B"Y껓Ek[/^3_ZŻ}!<"KCrBfk2uN Ll L$.(L Ab[F 墅IO~.gBC|{@X/ |/8}}!L%\ _q d u)x~4HY svWkWk*RSR ,dΟtߕWGsKfܳF'm_ok*zFa,GBkSd `^4KИ%0j~w q+Ta0sNr4li%,b~ "0赁1 < &xF+\h @c7BAݸvvuez޹udg ]chl(JgVʎ,?ӷ6(ٲthu|Z'xV*lw1Q{}JUe 7kwxj2-2}NT#pncb3kz!ϰó5eJ X*l`MzOs4 'fF%ve\ʁ p)QhYa)@P(.~-Z@2VTdto> stream xڵWn6}W(PΚ!ER)60ТSFc–$/R$G6``F3g I<:ع_!E8"rD E9~HL;7Dd:'cwQL^&r*R )c=fn 7Ikk0 2` =QF!,"L='&wIݭBY[f;[}B) (&ʡ&!n%@5ťYrg0_HgJEMQ$/sz~n沖b+U ~S͋5!N r|X2Gi=)֡@;1)KCզK|aoF zkyam)y(qv=5BvA 4 hlp*?4"z虼7Ҡ93Sr0nΈq1q첏TKlx&'P\G=‫<4OҖH/m=io/>K)@Hݶފx̓LԥcmWا7`۟Xόq^F+Uυ f*߫O?gP X)Ru׏#yd<;;zN4_Ny $mtled[pa<4bACo6cq롏/P`Wq@IH͚F?VNjiO *KC U[:YѴ|=yTR[8q%ՐL*Mxڨ2O[zu>65X|.HDzBQsPO fJcR1bk*1V?$+߃.w{>n'H# .6ë WB ,kؔsƸEdOm\Qp"begͲƨϲ^[Dg| 6zϠ RfDU(mJPyc6*7V"гmO֜r--"Oч@4p(LfzSv @bwNb͋=OD4M5jlRCW endstream endobj 766 0 obj << /Length 1913 /Filter /FlateDecode >> stream xڵX[s8~D,YLL(m}>xHlZ9:cNKѹ|:7{7^9?'8Kx"ٵ(X2!coyO.gOTܧTő>&LܟNqb2R' ߞOWGӓ$Vmã/h%mxwRQ=idz{=a̸ j%2{q&ػ+G0ro]g2!td>(v<5x)xZJxH`Yz\U%XY6 - {FsFlؒLU2]xȳr}4& Q_T$}/n//7 @ásk2J0THHʤ!BղLAw{i@}m)[t&+SyYKZ@2W)Ù`b ;"9nT%j.hț]jvxrI۷C;< AۼY쾈-"C!x?~LEN0@EA-uY9ҹYEQ=Oi"ib*s v hQw;`geXݤ_hp82U/RO%~Ju^m?=oJ]6t%ɋN;z8Y>R@NjF؟-P/h6)$*|V< Q:Cv~ZnpMw*Q-(^Z-ךĦ;Mxi&5/IDuf+MWy56#.4cw[}-.g(Sy28mnvEF:WiqCL]+Ꮈ -inȪ 6 %%n'S4PPc(vu DYĿƠ" 4 1u1F(jGgӦ'-d$褃[=; )%XK{N(_C70^ALTlj35# |6}p>:׍,j1N`5XE LHO9f ^+d}hNs*ސ r)5ellqQ&c)Sp NBUܚ6 c59˂  #l1 JteoM*hV&#B"y&2`S{ e 5: Ө HC^d, endstream endobj 772 0 obj << /Length 1564 /Filter /FlateDecode >> stream xXv6+lƋ ԋ4{Ӟ>vhAILHJ3x!If;;ǻ孌=FIB-DIOł0{w7c¦Ӏ~V,v5 ~A]Kݻ[mH@#BjA߷wka1{d6^y$ƓRoWƄp*&V)N'yJRAx$F`1!!U۽2aH}!PvS"ķ$|}_!)) iV̿_gnpa[~kpqKH;~'U>4(R8.~N$*`21r[7Hm,?kAUf?gr0"Ӻ¯b:|_L_|԰^J<ؼTsG&V{/)*?9Z6s(>j4fýz4k֋++b31=p40prZ/xe-)+#)ʭYzSW\W$lR>#\N0ƹsh^&DEj0+א33Css& I ą}nIUFa#/a]X]ʥ XߏΛ7o1 23ERK|導3:聾U f G GG| v´IöSp<K =fp%j;؏wEQ}TnM#fl [Ou<񴗐O]I+J$ʫMKQI_'$LyӲPXB̍jƮn>;`YbT")"]U+X+`6zX4F.KG{i/0Ƽ;5%JLK c}߷\IgM.s}> stream xڵXY6~_Gk VSFǵ5E*|NFdY//C¬ahX+2l vDp~@UeĄoՀEit xAɞښ$oߚz x}vA%}M[D & 3w1{<="򘲧4}i7lGBs)Pxhn@<N7`e;NC. E2u?D g^AI ^ҍqf0ݾjxӃ_9Ok*uݸ=L9%̆+(\I,$_D[:_LtR5-oDM;v[?)^)ˠm7lO8dAv3m:# Й_Ɗ 9mRt5=`FywwD(-f&O= YRP{%a+HIBF[XI =Kß#SgiO(@Ayjqǒrhlmpgs_l$,fs[%b)|N1K2rS=jw];ْ֥̾;z(@7KrU4"+ÊZjl]{ﭸ_p$cKǒ4(W>GA L&٭;&]7Wn"AZ@Ar:EDVw0PC]"eRu)(̢B,e`x H(>@i[{iDb*U>◚_pŅ3Ӕ|J޵.}[' ^C-]7U} 37(>(4>8 sq{TmXP١w]6cZ:0thڳ3Q68vcaJڲZ8~ wJ}G@ !?gy3ߍ*(~ <cXgߕD *KӳPE/iǞPf5 ,>lBfp')/8B#䈺kj=@&˨v8Sڍn+U9y%4fB#Jl!/"/r(]=:JaSc⽰à/jC7@4=K+^6uس;Bh5Óo_|^Dm],ϋFJ( T,*";f-j*fApDWs{=1bQ/.A6zdj=q>Ǩq\hH k endstream endobj 784 0 obj << /Length 3067 /Filter /FlateDecode >> stream xڕZKs6W!C@V)8oem!ImQ$Fb!'|Xv۷ 䈒 ݍnN%.^Kbh9초5LqvF:f{$IiM_u{wG_;\Egr9HY ]$n;sLҨSQ^*z)eTi4v $* *MQ~!z';궛FqeԌ~0MZWս)ΟDIx"$_޼*)^\yMvl'4sx/Rů' :%1j`w<w ˃92ܺcݽpvҜm`tnw7| [ggJc&b]9 <)1qfȟ7hZr4w5H94tmbMcɿcQ+;* 0 C|u 3B]P"p k7BTyPh2j 4UՏ2~~˩)zm=R{VC9 [D",Δt˓9\x#XF76 .Zn—5[i*'ˣ޽cg bkJ'@qxou t`yRYcgic\pR3snjފo ѸC=À,p)!Mq۸Q 5:$@E'0(]4;ǭ46֐4bޥhɲ M&_5P2Ms+K8O }w<ú3`h 3Ay-e B<; 鈛鏦lEGwCM1167@x.IfLHض9`޳,|!຤[oiZK,Fg2WȊ5K-f^gH6ڑB4 /Ճ ]!{y!Xߩu/`%q+?An"c yB|XAeع (_0p;$}!Sŗ^G]h?6Yfa[-m C\kJ?E3t/`x>l@(o!ͲVolFDX =`WqrƖ KW8) =MS'QsHl.1c9CRߡZ;t·uޫl_\fJ\ d$[[,܏뫫r(rOS_M& qϾP&&L.a!9\?'pU\sKA$(m:{Jcְ-,^fŕG60$q5mVS92*z*_)\3kk"Fpkdi~{ ߼q0',,]#Ф4 @Ѹc1e(48";U'(\EbnWLHn4lHEѢh޼VEUsL"q3rtŬb#l0/67"pj㞫,fYzfVi yRe,Se,|ڜhmg%Zl눶eh吾hK]߅/UO+7 '>l]qΒûh`  'ZT2ѕ<$@<:_ؒY =(3CtY3nR/IEC]u95)Rz˕]nAgHtv;oof!@Y%zIP$V}xAPhYY+dDDžЁĮҘX˳ a.ŀ;—(LQ.f e,ǘ4f0.{gJts/1p$޽Nt~)lƛAkꏮ+ 퓫/Mzxx@Wje 2mf"1S%ڱUuVhcdvɊ3U*xrGL$ LpG,xTwbXqkO uO7 syrmDM,7/.̹LG>~ܜJ"=Ŕ`]Iz01 >#|טc GڊBfʅYHU v}}N4OkJ%eDI9%e253R 'ԕ`'y`,GHz[SS C qN+(pKnc 9NS*֬*/?s$i |HR$_~Bvۈ=فͲ$K}!|||4߼o^mWTB﫛f endstream endobj 796 0 obj << /Length 2641 /Filter /FlateDecode >> stream xڭYY6~_ٸ9"u{]N9^of6RݭZx @cvK `߼:Km/2?& E&MB%oW?\ 9 B!} Y|+}޼:O۷o޽:=.y->3gq@d#ȢH!c "3 XIyϚ㩬z;&oø ^|Sœmo#Ŗ&q,D+Lz]U/VNmsUbh8 my nz^|#i[cYVP :l.iR;++Tt2~NBe "5bqFP;|EقM[nMx+g.*š `v$)=]lFH3RdEG+tƔ>ރn+dE \q!T8OT&!n)G>bՀ>ånM;A|2{J9ޕ{tqXi:t MhO(ԎqsBKhı @-88MtFpA AexZ_(؇Erp:PxŞqQXL&Z1JD?d nImw͞Y87PV3*Vz* = (.k J&A hZi_G+M6"}x/׼e"/65fMY}_W_ժkR(92?X.ӛ"dao =rl6m7\<0C wӇ${V#S;z&7]PB`PjLɞHIݵjI 3CfT;bF^w#]SeBK(H+(ju%$hoW-@YSҎ78+FML s ]2[zvº-@8mL=̃S pOpjG.i,FkS-[m 8҇:LW6!Z!o;.v̬IXe ;3~I)]0HQ0( s3 lo "͒!pʻl@:'̺?"6M2 и5;Ұ,aOFGϾNW-Ăw(<A/ܠ7*Ȝ*i^zru(nۋgM^H8׍kbn9w5JVٝ6'$*umNmsĉ14/6x¸!àp8~Yރtk]NGZU\*Ij|v9H_ 1#pZWcbtP.u漚fTICYCѨ~{Q]XmgXǃ/d $*j~8 K77 !E[ٿ?Cf=`y {-gB:-~BVm*@o%3 ƏR6I:#fJ:#\84ͤ"7ЂKùm$O@* U ^`)YHǶ 6,e`JdaO/SuꛐƦ9p͖&\Yu1&mTl3w,>d0a*w;)?*!Pt9s&dM'|_vdbU4iͬ}&NDN&2F_6q%r*(0HM'O5oZ #aHBh0LAbHde `=f5!a_iVÏ7jeGJ_*(d;(r0p2V¸`GEYB L rKд<%:7 0ƃe"{щӳ.vvǑ,j)a`zjE%,.Fz#\0g.IBʉ0ix.*r endstream endobj 690 0 obj << /Type /ObjStm /N 100 /First 886 /Length 2181 /Filter /FlateDecode >> stream xZQ~ׯ[l!)Nv!6ڴm||rufsړm 73p+U\L"Za\:v)+]Ƹht$%̍ND&E:XJAĠR*oۤ2dka,"q"k%50-bt@1P$&SdK9jD [DqTr%!Lّ&a" {$)bP `T]8NbL6K1`¿̄֩BF3" r{]KdqlT1(y"^0dr=N..m`L@ qgvdJ؝$3Ð\0aHHL 6/x*6fX+1"V @s`e r[\Θ!bD|.j`2vV1bSi=$d[9 k`wĎdoO bz+\ qJ(k*n-t%N +3`5'OLqӧ׋d?'of: 4韦M}%Ll.VuRL+͑|1=uOK7}xp3lu}ʙ{]p~tӟ7k(/ r};+ײ\=e9$JH>[\ڣ= .hf2z7׫CM7O,n?h.f,>yKs&kas]-.;[ +  b 0c U㽰/.4GTGv(dpoui; aC;8r;@m#_rfyl~y{,ݣ߻7Շ^clp?g=2.W!|ωZ!v0o>6w,- Y`S<ݼ;;65?)%uYqפzr'_-XG[9(|\<2[Ahj釷{oRvai|괜$|@m*>PȞQ9:NN2f9]M: AYի5l݈~urmuK 8n{3v~@SsnM6hLÜ:9-zj SףNdd*֩OlyC&X_ -n#} ';Ȭ;4tdrx?Qh~H| ArB}詡AuE=@3%@7:@5a.%t`s@|jܯ l/=^:?l[':G6N6d?9<Aڰʞ`K(ӑ 6Q]r|Os,DѰf 6@W)ܓduskݿO2{OQ54jzA@Dr{Tb+ L{m["e(.PAzp+7MdoЁ)XnGdyCv1ۺ,j=|\8W۲w|M)b$*{WS$޻<úFXٲg"BL:Zq* YF!*db]5cеOP@ZZ6aL_Z_,{ ۻTCK6LF˟֯x7P/JASEEݧ ޾Jy]nG~-'6OknbW7}ոfol:`? ,hԏP(_ImcWx{%V 5[wx s뫇XlmkN4eAbh4'hU\Rӈ f="wmMvI?Zsl endstream endobj 814 0 obj << /Length 2456 /Filter /FlateDecode >> stream xZ[~_Isy(ns ZY*K$d;ál.p |ЮUS8}g? rkVqyyxhWNtCNt\m҉Sw$h5252Wk_ ;8L]FEWTmHLİ}*tgNC>T ݒ1 Zx@NA6 B{Iz;Ng@NW@U}2>p}D3cfOqQ" pS]1_2}Mz;oa(&H/%,^n+PӜ0AҼ nl'xƣ\ h !X#́nOBiʕ+X3ڮ'CQ?+f_\n65e]v Y?[ "b;31DI@irC%,N xP1߉n`,1eSγiR2f8rKd6N#*PJ&z6*mf4`wO!n[ +E :&/*A(v3‹`C8p^ B {c.((brf0L/Exw䏀j9}sM>Xzbi6ۺ9!ENJ"%‡q y6M^4T 6)l q<0j"";53>9)y3m@'g'XP`0P@Ez;ƙ ADJw (+ߔ*Ҝ lMLūMzWr6[qС4$P.tLNpVB= ǎ.} )uP=@ef@FxۈvZ:ߘ+7p=}fW(_Ae|c8^803Z;MU( mӟ?41(=0Z/#aSb{=o^:{o.; > stream xڭYr}WS kG2*E9Td?v >%$QI^}{oş.FFnz%JHl{/^kOJ Kv'}޼&{w?nwJa/qOow/9e7ةP$QȌv$^~+-6OSݕ 9$IiӬ/ >d syڧ̤'8'9E"SޜuV oQ±lCo˪)& o۝VGoҞÞ=6Ξ釁'>?uv{͞7Rm9u?hʁ>džmziuIɋ& f[E)Z^_ω޶͡MG$m|VEb`MP|_п4)J존x9hiVt "@mn^=t׸SPQi?xaP~tUi}8,Zin/emc+Opc5GxG}l #mV\nnT,>һY3X3s=}\m>81$/BDFUZFEv9=bgf"~@̚+/:!)oB#B"" sϧ4GƜZ=6R{ #L+y5F5u'D"P[[v_9E8ˤաV`a pq O@52PLuj3vk}\'9II5v컢ڻuS<:&uň|q_Tb@$f;5|n:q069DR5}hz VxJKw[7ܣ\󊭆եVEQWQp{4Y7䱽MUaP Xk .5S~͝u=!)!9X ;&rp|X1?UV;(Vc{F/Wr$u?E& s<,AgmۜOb|d%RfUUpsoVHmuRDYaK ik*3 endstream endobj 827 0 obj << /Length 1783 /Filter /FlateDecode >> stream xڝXo6_!t&O–]n+ C"30Yr$9i~G%K.}1)xwMF~\a*b4gu"VQaBG}e돗oW;(6,%(T!2f!bj`n@ÜYz4#i|ǜXSP@yo։*'(]?mנrNY Uۜ$W(:DmgM:Bi;Z{} )z# IQCS)u|5)DȌ* d5yQ2%"St^/ͯjkt_${p(bcsyN$@(7k-\S)h Z<.SN*1H{'tWnl Yzm_5{w؟,<,?PGڋ Į!N\1R ƽ܂s" vex㾫4{\0;);w#.k .sX't70B~ IdTN oB[[8l5@"$?3 Le2]\ݮHKI"n#66attHw <^w0O@XCqF9[TM}fҙY&KqpfclM`Ф0xLo%Iń| ~"Q&r (eW@ʢPs{*ZS_A8y67CcK0Q1 2WWЮm%君B,G$.DCYxa(݃1״cF QҌ ?azԡ`bpiy*Wg{" BԁLP%̈Z1 !V56,S++нb%7\~QtSJ_L׎kؤ)-΄T hu^s؄FS##ށ͘NxltG(.piS"2zV"M2C>6:CH1x7҄.&%*sTX.fv:\)Ɖ7U, &Szc?&ZK.`ctϒ 9̧0.Z(#yF}{G IQF;r#A#pԈxtQ vRfbz^r:!.{eifb `#dKy'Mmۿ IHz1C!mjwwz`F>e_8iጏD[g?v4D]2ooRz_~S 2fo_LC9?C m@^՝_C߰m'CUdkp08: D^woy)l<#u6-/XWB,B+hI\#_BHqn+UA`Q endstream endobj 832 0 obj << /Length 977 /Filter /FlateDecode >> stream xڝVQs6~ϯ` &4]&Bg:LF12369N{%K-pHr/X߮dX4`ɯ'd78@IX`F12dޘl[T-M3@MAϼ.igWXx@ 0Fc6pzD,kv>cm^ 6 lyTVc,'񗿽ph\\W>Ow})🂅gPTnG`܆GR&m/.fhϥ6֢0].є͎@v:X[DlH[t!`ٖnt-]aӰܤӑi&EIiFqHF,fԅLj X QK /T:-_ GPsM} φrBWy=]џk׷ IF*v&A ^P2xzB0ryn(-.܏FuOxgqGf{pm-2 ?8y([Jg9Ey%9dm^(ma'wr TV7#] 5\\QPɱ;.+ iYԶ蒤)ŬM۠7o0#W%K)VD1Isy6J/u DTo9Y$DD;B-C)o)?壼e3vq'%iW3.3zZ{׊{ާ42+a%@^ԉfP*^qf|fzWe!QR\* sT\T_ +G,K@.3IobsNQ߱K_|rƔiӛ-Wi endstream endobj 836 0 obj << /Length 1638 /Filter /FlateDecode >> stream xڥYo6^4fHF[bih Ȕ'I}(HojB'B؁ũzF~[!7г3Bc6!Ip!3P~n>GⰧl%I84}T(QL" fF0 c5H£ثeVܬ#O:rF^Ln<jiR˕ӁQi@B3 YYF[Ƈ9/(m%E ZJE1* `=1QRA(tQ,l2IS,"4I$c\Ap\0r\7F]Ѩmf",|C˄Jm҄{ SٮՍ9xō+8@YSk RC ,VvjD/uJIIX!-A:QTID!LJS:p dlwݕjT(!Z7l% #mUW1AR(iVޥh%odUQj=ciH,U0U-jθ$1dPnXq)Ȏ.!Ժ3Evtpzrڂ3Wwqt#dDŽNܙnAM=LwpR.)+a/h$6L4[ bQ ZP08` >᧦f-,X^ZȭtJ=Ž%|`c6xZh]=>pҢT2VU~3F C)ڙ S:,\}p$Jm0(@K(3ӳzRZo~ʎ !;U͡X`ISu=U/_Ay3A endstream endobj 841 0 obj << /Length 1847 /Filter /FlateDecode >> stream xڵXYoF~].O4NĎQJښ"3;)NZ0 s7& |w& Kj1I|7$E}%2W{S녖1"/l̈xU6Q8A7P!K+RؓC;rLTG֤ +ǕʐoeTNHSqw֥V;7?7\ krTOXJC[*}uFVkUjeɌLBb61 Bv9h4X@ "1<8k͠ SV59st$D%MdAR+ۀ6T]3?fN8!恆A=҄ڎw> Z+U P `i^bMETC l, YV)TL$#jh 3I/1ӦROPr;|lkYX(q`0Qԍ`-E/SVtP7a/y\ġڠB~1^sQ&7jBN˄]wU5/7fiksF̙]߽L l*lkN%]R:a SZds++vns0.Nlk_^މMnpxyu7DC endstream endobj 845 0 obj << /Length 1384 /Filter /FlateDecode >> stream xڕWmo6_!t( '"Ն ^dؼOm1(mkHCIm9iHyt|k1~=eyt֟ıgΌ˕1pě`²78(2;5yyeNo~tgi( ߳06;)K]{6u () \۾tbVAtXKl'"4 Ԧ2M n`)ϓU\NggJP.D W\<"= w ql?p xvV;e[C֛v)@.(>NB7"Est7=sʤ Lc.4ezӅIT)G J AVNo:A;od Zojg@WbpFlbDd5Mx]XɄyW<U \,)M;]F?ZJ`!Ň{||}W*89=)]e <}p*c&ܿvY4CԇQ_Ƶ_օ3<;9R@ l$ |BtQwfcA-#Tv\{DkOjBc|(#.1vjc P0MQeH9}c G?*Jǽr]y>wG=9)RQ3yhlej<׎H_>LΨIJ~TLVPrT:ģ2Z6~jXRg/P.^kugerK+ S;MBggpɥIRI'V | {A[N:Q'B -0"_F36Z=G6QD0& Dۚu%,=!-G-AnTbV;2eyT@/L֐@COYAYBHD?JuSjr(I7o\{Tk gU&]+ G3 o)ؿv۶woq;@%'E1w,_395<)-7\_}퍚}W?߿Y,x Pk5yxnj~Es{v,㲗xau9#&y6gkxNHL<5"&BM~ endstream endobj 850 0 obj << /Length 1614 /Filter /FlateDecode >> stream xڍko6{~aD(J$6]7t7XFQIa}Ǘ,92P/I0hYjE~">䦘,i8e>J~f@H#` 3c<}Q`yO ҉c?]ĆX90\2\c,٭4N @%=yQ;Eå- ^feG'JQ . ~pz K18z*uqa? L"٩TGjl @AecVJi>ǥ`ޠtD6-UYYdOT8Ydeƚ91 _OxࡂJřڱڒ㪕J3eKV-%[YsDZ0.W#7\^nLյf]yws^Lyž:L ӿj5vƃ]üD'| 39XeȱzX1; |%%R0HUlf,[iˁF6_4e\SR,ZOw8J 9Hۓ+O*늿,%{A * 0΅]~ vvtU|!iͬO4`䃩"l6b Jx (68l@~FAYv1[`? c=uB   :20YScvm [7ujڒN8.T }vʥFl$_~SŜ+֍tx7{mwa/74%Vs¨7ȵFԠfgЕj"H񨉇|'hmM.:w|d65iNLh ]`a bHi۽oa1TakZی&N[ endstream endobj 855 0 obj << /Length 1490 /Filter /FlateDecode >> stream xڭ]o6=^dbHQi,nע]ÂȴT\IN ;(rtfywoig֡G磣W~a4fѴ$f~gqxM:c~eR粘L9w.gʸ,d"R"p~]JugM,Si@ף :qJ"QO$"riz!B XKŸG⠦9}1BCqy@AB-^w 3ʴwm1~ze'k8N|2N+ `H w#M={ָ٨HDi׍0pNN\lb)EYj"2Ȭ*THt\}o+T֢ b^0RLFsI~NԐ;U. lBr(MW%д3 " ]7+Yq~-`Im4yJU"23X3(زL@[0GN⍦,T"t_2߳215ii9~IQ-MdS?֌PBSBb,BJac`p6s̷4O\SҞrY ܬJiS%`Bģa]6[ޒ\PfBݡ0V#yI=UϳSu|\Oƈ]쫱>nrvl=Rƾ:uŌms'3y^T1(nx !|sl]!s ܂> ~o C<t Fi=OǓmPT]`XTԗYC(.~ 7LW vq#ʺ$̶\mԽWQdD+7 ݲr:UVmoɬ:VJ["WK XTڪUb}~Or/_bIp#ǃ6_>ۿYCwv )r=-jAnvZҮQɏJsYwYS?{BpG5XmzjPGdT1p|D endstream endobj 859 0 obj << /Length 1793 /Filter /FlateDecode >> stream xڵWs۸_4g1~%tlNΩ7ڛ$l Ԁ9XPTޥvXbDG^N_`ɈѨMG &Fi#Ѵݑ\L/\|'iTܜ_ߜrv~x_pB (Oy]4T ;yΩUƣtyyݵI'Mmqmyqa^WݧBcN {~"{H=Cڲ'?2Zݴ5r_ѭzܪlZ-PΝẹո \W2xqIPU4<#}pX>ɪ vhSY@hUE:m Oǹ 9kC6C*JO6pt^(X.䅧}pH4 )ںųKUY ~RE]X.7nbJd: r`:μtH6Gu&|$pD\5~KHpbm w˞nP`I*<]3 t i)KҁAKɾv%mEO3i+O+OgҹVŖSxr`2C֫uZ@uuTY: Av)QtJi ~ˍ+sܫoC4kmtdAz2T`+P3wV\y#B "߾ N׭^m~< Em}rXF׷ H9RDЈ`܈.L3>8:cfl |OC՝E{2D1&UxcZwĕ-P/28dSyYQV&ڔۜ}/ @!@Y%~Ňs4^%8,RZҷV?"4F6o;<7u3"S\\P>nc܂ݪ+"g "~p>`寗VS3{<_zi'7Jܯ QOZ}E/1K,M1!1,=@QE>(rPq4?'zT< ~-li})-`N|c@5ͳ_IUjFނ-EJNI֮3xu[]e OvA (|эZG 瑃M"= ÊA҅e$_.-7WH?87<ȋhW|w~| endstream endobj 865 0 obj << /Length 2363 /Filter /FlateDecode >> stream xڍXKw۸WxISkг;'q:$MN9g:Pla#K$M)[fc}H>ZWH ݭFYd"ũ JGwv;;ޟv./B)N#%|;" b&* 8zG&l4ze>'*[}_O[{0kP1 U*/Z{*04?<2"O3-*Ӛr g1oǑ`yݘ$]>FFAD 3gU&ѡiڼ5*;7AܸvWon\vCNQ27T̷XGw GkDs+~x칵tMkѠy,a|k>!64P2/KD<ޑ9ĺ8 h5LI=yQS<YZ-nbthy>+ i6 >Ci[\i`[ !308Dl~1޻jW;=yANJ|atFlႴFWfy#x( 4 '9F,ΎP PLfqx$ƈ#bִ}I$lk,#HMą)OACPXIعҍ{vJ`$*1^iH( 3&NA XJv}Yɋtc%gigJR_6;]~AO㝶KaKPTLD#T2$?CLa #S|,oS>Z7@:7 3%Dp]^5=3dj(JLօ_HOHe-: R˂p L.κ . ;xBA[t?Rhh'5.͇*]X_p)|ncgzv}99N-n4 _)}c'KL|C,܍bЪ~l)Jj!ؑw ΂VEb_, ҁ2/;8yCݫB̶ L؊!<13מ039I .\5BV PRjIT*vM㢘Zz: 2ёr{ЋJ !%E =Zۇ3p (ةՆK vR_`i$ݣNCZ=˴ Wd(Dzpr}!kO.G{>ǥ . Ӻ5t_t_*WD^Nx8 endstream endobj 799 0 obj << /Type /ObjStm /N 100 /First 897 /Length 3536 /Filter /FlateDecode >> stream x[[d~_n ,_8 ^a ]p}Jݭ33sfqQKRT37]eq-$jRx&'1+ z]>R).FuD66 $ZChcJʡvSѐZĬU.@b%X&6%bODflhQ~(kcVEA=e.hpzBO)"yl 8qӹV2ڵZٻChdFqYrN,˭]{ dBbR5%E(K`KR}ܕX8)V@BZINKvsR\ T < ~.6@aF%Q,hd{+Z6rq.h EDj}5\U52 FhPqYUAAJ$ kݧ]QvP WhQ>An FǙi 6 `7D6, S~+w]a3}ÆqCK}W>S䗷>/K=5ݦH'*J8 h?pRJW߼}wꥻ ^fw%yg黫oo~ uǷ]{G t2 R wnAZ}y>ȞaA}{e=W_^ })t!R"uTgb sw:w^R~Oq_ yp&zXJic"մw*--.Loo-rlcTFaQ'm)ϳ'K$/~AJX,Xo/)<1䅑0C^)˃ Rm/KDc K $]R v  Er$#׼t_傆s\ TxqA,?ʋ\Rb <ҳrO !qW|%_Ygp Ez8/rI5 _rAꚄ,8kkAh@CW)]ܘqlI0g0230{g"d=:YeEgNw`Ni g<=74L`U3옙= 0% /gJs`Ebp(zx= 'B~%pPۂM#<=_,|GΉp~OoޏxrE@'I?˰W4x\A'8|ƹa8u}R}D\9=[\gj-].ğn=iSRKfМo>\bGPoBXIm|R퇛rӈÒk- n:=:gF.#-~*lV5+޹ ndb7ffQ6$m^oE]}*~]ӣQ6rb%oy=Zl}&\q5M,:cpc[J&Tr߆y#MMQPzl .|ˍ{-!/}/y\yonsӶNl9bD@Ғ{\3E=`KOxVz}AT\Vma74CJJ*@uƅ/+ߋ  6ɈiW@o޳'kpiaU0뛱W.kĎػBY(g5}Ȕ^L1sL4cdz-f(sUwRnr0RSnMDghXuٱ;Oh<ElpOIEV7`~|'3pY_jQڂyVQK>Me} CTFǣ='æh a ]`SY?U+=uBf#$aTŐz,~h2ȝli rU{koɛH#u_Av|`~@LpXanp!~fqz f=o,"Wj0f6f@dm=|Ϣ*WJ`8U[eÉI[C*#&Q;`p&+/!-Qa1:1  tsjh0G؋,0fKO./5G,1N^Bsx09>hDMyN-POO@T^l`< [`bpNd2؃,3"a*+K"F$cQNI |VLcVؖ8P.R%ε< faIˠe,WTqPO ;$2}.Fb>/zX yt=i4׀ugQel+}Ouzk=e`(ΣI~8 Z3T?{z\ZWۢj<"eIc墨9R2c'S54V0LeL=YT=Yuz;>sk3 ˙b8hlXO.V@J,<EKZ-4bI-_&';ÖJ.+?T^Mků9Z΅T94{ S ?̧)'8Ib8rT++N>DkE~=i(=07Kyz< j{ʼqX }LϤI|%"Zl-+o(+*-qR".KR!Ǥ9ILx-uѪ=7-}dh_ VUSh^0}Y̔EǨwyCRx7>j>)ќI3'$f>s3ysK>l[GaÌ}NX%zFGeeJ7z5@ͅI֢+#6_! #5O\2nBЕi_o)B0">C`Zy̋5jOVZva CEz׍qףuk̛A[5 h=j6tXXӋTxB BQDӱyF٠Ʉc OaR*J|i{%$zV+Gy,zu?Ol>ްNxb endstream endobj 894 0 obj << /Length1 1476 /Length2 7777 /Length3 0 /Length 8775 /Filter /FlateDecode >> stream xڍwT].) C!  00tH7҈t" ݂H+ [~uz֚}ݵuI׀On VÐ|@)  Bxll+1äD!m =R {bRR@ @GHA^{?@{)|G'}?v\AIIq?rP0b@H'0`J)DI x{{p /t=/=mlxlC'ǟ ;0>fF 4:n`؟`?v /O'n /p:ʚH$/ zA^ +G t?_z! nH~!~g% ÐxS v+0A=`wO_{l`$@()&&*>vNKp 6Ow88_x /0oǿWx{` v vs}O`g dp>3㕗|"{ $DN=V]WF5 $^/p]A~i0?G%-){ @P_{R{" 쿡OZj>5$^&r0{ Et@`{]O6}%\!0.w/?; pJ0;o @+Q^> #C#'+, {y^?Bߗ.p_F @ yzaWwvĽ}1`,QsMx{9:oSl[O3D\rBr$˛JgO밣Ron'){ j{>p`ވڮΖ)AOvݭSS49m$_QEH4W3XH8|ΧŨ̃x \o.joPȣƌ!e=Gr=WrM}#Sx/*J/ǐأ̒R[~d׈.l|ȭu9\"6yZ"*eU(:7eaŅLCyzFŹqAa"6#౥y.$ıa#}?ѫ^_" _L"wl 5t*>lsNnSDt6Ė25iIg5psys+'gIC. EuqEEogSOtv4sf?3 LDH"hdmtXВt{?roN]_~BRl`bRGS׽t)5zzdd˰P 'EK tF`W24&R2A[ŭX7sGRb^ 舣dIq`0UQ`7CYlm⡌oyv Kxs "Uec"sBw7E4L'l-&+ĢzHLYt[!g,qr0iZwro3p;,*OȎ ?HD*k&4ryQvQTONu\f֯ȱ]_ [ndTCІ%Tfrc6fECF-+\DU>g|smɦ%14e{wjE&C5os9dps{܎^rN76{ !Aq=Q٧ޘopҦ+~)IQm'M*qgudwŎ;r xWl)u7+16Y RBl?®L5GƈλUuRN_W񄮬7C%@\A =׏S)Ҟfn5B:8T{ǶdO6; =Sl 3Jrl(ѤJ%rN8Ū oP:2_6ʋaG}IeO(TIJ/y} ^JIMK ))B%[2ujrCyK=U:JV[\7NST:m|R?O<+cU{uz~ضZ-٬Aq(|baF-Ơ'd_7cM~aur$xl/0xj6Qqr3 Ejff\p^Ǽ#y3Hoې PBu^> #6;T_A'սW>b9NA'uEP-yqT9>ތ`ڷ|V7gZ_[0*Je8+=ЉuBTzLi0~Rg6eW lE[WpceYⷌٗ%yaS//I" ըJ?43=cLI-"9˚UYš|9XN4:N_uh,6KUb/~{sԃ?+euc'ɇ7<٢W;gC^pY!:=%YOxA%%@qTmpNJ8ab_з0ؔl5)M^ԟZcT˫Rc ѺwDZ#KOY7w-X O]v`'N!iǁ8 FO:L1xhY}PYKI/ױZ  )$rBf鴎ZOGs6RZ}8xwrj TH8 I쨞s'͜M=ʢK c^6;?`&0Nךh:jSܻ)h}2lwv $6u1iֱDHiQL!Ϩ܋ʷB&"N黆W;ѾjRIoY \WƮ+EધMk: Q ,#1"/^w,,9 㭜7rYM|W\Sa?f-IChK8wa'./3D,O"~|ҹe:oz׷n&6)ghMPS50;te1wwNu_sޫt\K919(:sĒ6=5.VEOx-2>jQS|2qF%l?.m4jLfBW`&e&Tb窲!ڌoi[^IW,GvXQR`¨ƪV1Z !o;^4/!qX G'м oОɣ]k0h7Q땭ՕNUrطsELm~R%1 De=hiӨxXo+JBY2w*9DVx::1x[,I=Hzhp+v6w1!e<&!2)gRMTL9Lxӂ\d>^Ĕͭ:TThrr u Qq?wa;EHu&B''VӹĊP8}QZLœbJ23Apm@ `CoRI G2`MZ1+ő%9tg'NLzS/?qG?_n=?xW}*A^F`Ԁk w2(qNy0>.xpL~<\o[b~~=#KS#]z酘cun<`O@E : 'DeޥTU?qc<ܑ;6J% wt C*/N6oE½IAPW #wSc&"fU3duа* Yu2_'^Quu&9ܽc/E'TӊQ袜5Jx$ \S؛dVUTUガfϱ koFK74م8~3ʺfs'^~է{+?-# rlC E{iJ7 ѹ3c,*}t vAþi66Y*{E 1ic}]"w7,˜I)ZڌF9~Rd/wĊ+'x3x+p|]كi do5_>2EH,R)ޘ~x eKj DŽsi7?tUQ<)_dDK5#%TYt<[|!]@Tݎ6ƲW)5xdj$:EVv|1+*ް1}}|W,Z =˔;1UbwdmVy!qVCH`ct;#Y -HI s{MNοb"dKolGY`V1.t$߷RWvq/:>jk~/;g2{WzIXE&2aGT; SV)nEgUnJo;)M R,+Gd6?9(JNgrɎyHuaUI׮jkiʀlVKskXe$&'5R>F3@~SKWbLnqQ]Ct3AJsi2 b֣8V$PebgUYDȟzEi{ j87|0}#I";}ԍz_EbQt Úh%xQH]jd%׈.!/# O|HoԚD@oJ_GE+J)hۘYBMބGi%+. xt OwꙔzvᏄ-X;d~i}6"|E\MoDvDK`'/hzقUGGXnG۸^{ endstream endobj 896 0 obj << /Length1 2384 /Length2 19422 /Length3 0 /Length 20804 /Filter /FlateDecode >> stream xڌtk Ƕh%il4m[+jl1۶4Mc/8gtt]s2PƉ ,+`ddgdd##SpGGtpC&ba(kkr0ظع̌1uXdR6@G82a[;w 3s< 40qr:Xd ́ ʶ@' AcdJohHo`GE pp2(.@_- n bn/!08~8ۘʒ2y;Ϳee@ 79&z_,lv6463q1ZXb2NnNC m? ] - > . &09;X99;ZX#_a>h189Uww_m81X;%Em!#3:022q9_ T+igk0hma prpz{S `ba0Y!  ~LƿdžX1{ *r4nJ!![7'6F+/oſGDIS[翚`?{3(}6T g@aho"1g+2Z[Xc>nCBl:_-dkeuN"hcf_-,܀& NZL# P@t7gQq*IoJQc[ncp@_LGjt{ 6N.pM A/ѿAb0A? _` 3Ab0HA?????"ZJGv?#]Ȯ_n}d7/b Zk & ?Gs6t4_>'Gc?_J?IX.>L?sw;O?C_?(gYFjtc'?fqaR!nW@X?:rvGA G_B@P Oʏ7?*vr~~x#Gxn<Tn;;|l@711we]`C +$,ٮz '$DoGzQֶE)oV^=[C۟^cfvᖦ `T^vI;s )?/*UIÿR/#5ʜ!r#FpCE˞z'>b)`~U؍W m|S I {ѳ(7b{yi5\R:t?.ٮVjSrr z q*ґL| WR8 P='g]^qq' xѷ:3}^ ge MAIW~N(z*8F5xjY[x9Ysûq`+L>)4ğvŘh7`bLwrnO;17_J2c !gr KfǰvWSV|28!ƟG}<-_UBjI*H\:܋J=qmHX6l9iH/8ä\(GI .}:z4_ ?i'Uk/|p>B/QޥgΝ%W /MKr3R*!޹GRt4M=j ^L QH})Hmjn/K#JtKd k9اqcXr}bܙG XQ2V i9!ÍoA+ㆱ_LuaO P)^d-QILj]יIm6?{EϨ@'N{k?Ћ'7Uz)<0 5^}ɂ(66'"a;)'5xJ~v;N\Ԟ\ANQbScPu ׆ш3ZaPG3'mUpH\Jĩ:zM2[M"D 5.2Hě~u8"REbWdpw(5_#sW: nL֍CA'舄2i7ṝV58* @Hgm"<A@w<6ju+ Ц:fzt' ##" [O5z( K4DAd&; t逭Nk [́I| Aq{]";?× mgt}B5XaO~2\*=hp&K6Ǘ?xK=_Em|­ʦW؞TŢA}b:_`e$+eЌ{+"^G$߂D_Ey骵 8S]n3f6Jhb¾%;< ˀ/-=M~f'% ! UP5yA󯵶)MU(DP`P]ar]9Y.^`v1b4]Rh[)u#_x:AhN_pYx&;p K{6kKFe:4"WoUSbP16Te{<MYn*{4"5 k"YT.jB[6~' գN8@p\9/ԃ-@mGzx_ū38ZC'Ԕe7:*[Z!mx .z#%j!gu|4hn_jY]LZnJm7|PM@^W`}F<|sLjm!uZ9kU!_"imN<נSUn\ַ,\E(븧p("߶kd0; K(2̷]yŴ͆8ӡq:NcKӏOhN* L[+bh"2ƽG*r\ 6wUƿro  9}-En PB K=:@ Zs:wUD5/ª=[y&6qY˂ :Kw*LB ?OnQiX35x8k\eύ{i'4Ø!G`0zL}+K95r@4a֞+t}a5HAe ŶYj 4W,,r)sLVn9)#ьCvì1>z#CE [[b|0",i=?^1M%ʙXCofV]Z e >@&rʒA|2?YXģ6=#,cOvlǑiOߦQf\YQMD|XsY^0!',sWv8!&sF!a~#zm#ܐh{ͻܦ7!{Bc{/Υ$Xf=ZBhZ6hxve'-9*rE#Q*^dyrYvKsxs wVoHܔs\cBΚ|-R8(@{V>d.%2oo~KE+S#foYow_geH~~qiV.,N+<3>9EʺD kVڌ)Iap?1W89F0@eI _b 7DԳu)IΉ;9f,u+$ꛥ@;,_|`Goj׾%"kc;]_Tn혞|]̐odr=|bz{ed9Î{pO`@TPSD/T" զJwe30Jx0ZT';[m "qnPT0'0d ɽ1 ?1+DV;EF~Qi gMK"H`J}W`K$#DbYN JEE"*gJMrA/=PMn:/yC-lF.s'=dFrdDII! U?\<{=&{t(7 T[2GB%~r2,l2 dYo҉GLRSra Un9w?Y|KQZl9\804`AlKbb|Q@$F&GXٻ1@I7i%B5(LqH!|:t4TK6uHI/d7KV" ǹY%°SdYÓ7؎2 lrY *Eu&CN` =`ykQa)tX>/Umt{0nJ-Ro7pYw~ ?M09VR0nktjϮ?~ʌlpnj8DDfٰKz@$"p>UӢ܄,̍+"R :a@EmP!ZZX>kHB6xD*Ygq|%š!uID"%Mb G 5aی4*To# V ۥ}Z9p֦r|3$8T-F$L5R<@ۅBq5etۧ10M;-occl;5N !+ }'˜\uPd&C a-R^c  ȶw(q.qd%pZbuP#KIUh&8>f*B{:&,WԮ!y;40S"zGZK.{g=[_a&(8($gI\Uz1!L|xQvet~6G[ kBӥi6V0u1!I~cOA NReB P_U+`XPQꝣk\F"_a$b 0vOĤX8)*9C5;57q'W(%T> J7Djo %1u^:=JCIfDBF|L,Q7gy)#_UQc :s:hf" ϜjRm[pg2Z{,䫜BQ\Kϩ1jFaȳZZ9 <{JrU:xeK%P01WuF ]]5g[K޲_A=Gmv+L*kKZ JL%}k6U}Nw`˘>\ _7Eh1ξwoz 1Hٌ-GV1XF~muH(yy#ڣQvbC:R<%V1,/{LϓomlO7M׃m,/N%!=n#t ȹ7shj;+CXM_osJ9A j*/kM@YZE*s,E䰡X.jmRw,3?o{Mh-a_0_~>t5d#07u-܇cv_0{fA<Ԋ2#ZS2bX/\= doI]ga9iV b$=]\0,}&G2v}CVƉk*+|:0f&c_UXUODS;m^ ԵB6H+\@-iˣ9JhPP52o,>y ͇to kgWiŗ o{1΅ ՔcR^xCly}c[F(1ȵh 3)>~,_zMN@ wNJP]> }A:`g5)A;%x7V 8ke6=A₍g V LV2߆Px\ e(H.BjD4@vzyK_g^c#c w.hd7}8m{`,!- xF+5%z2֟yJ^Z@l>&4:` B< 5 `rg1v+H?[t}fs 4A7KOu(`ʺwP:P8[yVBbʙ8O& Lu|INH%`eVWbO9@:Iz%Ь~_}c+Bӷ'ԙK5٨98IOCvS*JYǿMVw>QUTR%~NؒAS%JZqqw+ж!R~e!&^{%m 7`vM4+ie1uFFl($ߙJ{ĉdfHU@ͣޮ4NjrAFd$n\AA ΎFkP#7ۓqϪJp$p7QO}kZw/fa) ᆢ]nW=O吻5~/Bʥ#RGAH?ngI:cX=ɓ:R[NEBxvTd(aN>K03t<3a:#< b(*8ݥf8>l]]CEo{mENAR  Ea;B2 0 (YTxuTZ)NJgԢfZ?g^ < t,,TeϹp AʤΝ0G\Wjmn,HGI YMYPVu\y uN6@"4bO oe:B x.gLQw=.12]9(E9"~kfUtƉ"s.)^}0mXb1ŸЎ8MG$'^-6wr^p6(GGP5& Ļzu0b-Ԛ"cSֿ4m#O*մgBW70 v2nNN0%?6,A >Ngӝ*`a{Ԣ0byCe~rAqr;6zڝP܆b_(`zIåܶB|#ڽPP@{&{E%+{"N8I Nak~eO$zp ˉT-GDn-}^B`;C_7`4pW~TQ |T)g̴}h@aÉ  fm[|XVPb 4 gqǧ, xQ6%vs(1yp;fLƁ /,\_jGBe|$Ta?y&@2oA?=Gb6BKHp0VIHHsGeɶVْ"^ eȖMKmK\!tw$Bnr1rf+J^dAiPRqZd>2ݯC&GtG_nk3C:ѴX5'Bx?}F#DZ?JϺ^Ae#Zsb=p!a] +aijPj@E[ʜSb~ ?\4gqFKzX*D );ry"GR q}9TBV&:tqF9fJXP2Dg5uܙ5o0 EqPYυ>8\,2XXp>X]^njP,|D,vKQCZBm;dz'܅Zk |ֈ !/)͎ne v@)MmpݡG[>R8ֺaJ9knRP {vܞX' 1`G"r.:im4'I3-ްtnRqRpKYNg8\/N Q'a3D\-K1DF~dQd&Fwzqc9%\cty=Э7R"0'K休~vcٝ}< 멊fYwpZQO+ҡ)nf\FbD-E t%d=Wds>D9Ouʄ|jk[+AEƾlgnզAhlr{A\\ v-lŤ~x, ViAs5V:eoY֪<S54'Qlre)!8w$ b*J ?xO-au A-(r굑^\LZRoՋ̶<kY"*4ً Yo|0}=7=f+F`ȥ;нUH3tUҽNjLv.Z0]8#;igp7VkHVn3Vzv(Eme7vE`.'QId?{h".?NO0:K;&DhܛtL7 H!^j_x f>нeX:#W{0E5 }jOޮ 찇Ÿd&0?ʈʑ ֘% @|6/ ]ȑ8YHcKK M D^bNiEfU#VҚ`ȹ>}j&=bTRX =bWD?mö։ܰãv|T2y]ǟ2oMNYPY{D s8ڠJ=W,1>&4iQ^tK;w:yM2􅅄zjy8oi )`k3 J1']ߓǰD!)Ac3ߖ'@s03LNPҍ >WXWyʵ@W.ݖyjD/VޥAD+ 6>~,ž|xH꾮F<M#tT$Ż2O`~_]65Uaiక)k=[~ԃ8cߞHD+ !?: uH⢠l1\4g)aN~kiP/ i(6;֜Ò_Frr#G e!bpȄ1/swQ)w}2ȇ'M!LYK )2Dw;5PGu; M=$X~:=#" qp*|JY&d$o-c B2Â=Qus Ć`ܙ*MFL{vIo}i=nN>WT Zo4|!X!9Ͱ# <iiXe+@-)V;Q [i׋KP}z` 7<`̥3p`Bz Np>|{;Bn5n٠;zoؼWjzp\W);"? 03|a ڝ[{mP$LB\^\W*~q0b/xRsڌc5ui۞ٱ^r o ϊ*_+HMST"ikRl{UЅĉ\ɣl}xMh.ӵ JU#.lEE;|q\>%֏o˧ i?"5H 1ww^h6ɶۑl6|GCQs%ACՇ>;p"V>pg6M p]̧_Cީ]!.TAspOM>YGx Gk}=G zjMX>qzӷ4AOgkd>ʌuzIO!_:5:}oPlU̍X< x룭u{2r[gՓAń%*/2hQr"^ >'Ƹ[ 0oı8uXK:u\Kﳧ=qs) hFAwdvX\+gcG)y0 k=_6>VP'sqJk0_I;: HGE!ɷD' sE% g!<80bL2t<&fpf˻:UR[a8̉{.`/v X 6^ l lq cxSVn<yߍD`n0+q? ]?3u#enH8Z1o呍v#JTayuw }>>ܛȫ$F.Z-U室Zb;WCB>#)CTg㰟*4u$kPB//eA]d`3K/׌}-PBq6cWOeajFɵK}CHb\IsRn4\e=y,K:maFXeԷH^'g5פK&3hC%}B.:1"0HR;@J1w@,]4QepZ=0'mM1ZǺ2ʑeМ\c;;P u*BG[}v)cphiRVy?$tmƬtp/z/52ea`Wsa?僠`kXQ1:r.YqՃ}ǟtt#j6$SѭJYSoWxї \S`~a^ t ů#nd^;>XU [OVM;׶WrVk VPO˨ֺ==ݾрc $̫OI O;|mN:GdM 4zRbv4TE: Zc,H \I8D\v6|3;+?Zv (fO EvP*֕Z-G;S͒ @o9p9ʴcY=cn'̧Of)q [ Ҙ\?`QђѿC &JWF{A{fs73jpZ[8kP(P Xs.zjY3ORQ6#X`-w.ɕ4o;pA+ET{1-DzOc3fX©4jaN;3dN =OW?p;3lwΗ %S#+&2E^uq5(\ƞW19*?\1T׳,EIvc [hl\6A3SGcg N"'T•& M"g@L<"}(:/W*56]ĎS3ձoÕGv]=kw^o5AA;Y\'l=)$"Tl&{k}F[9cD-O&n[]m|%tz&/~ ˟(/'u} w^?ioWv?=MOiޑ9ZСc`LhNt_]Șox%7#Se;$ւ[PY)pڨZ0˧sqG)uRMpYI﵋QCR3` ',IcuצZ^+ {o$?ʼniN .NSdrgk5qb W4࿿4hJL?t33nܱb9w<6Au^- V{":hD># BRJۦ'Ay-VڊZ~^!-ԪFSu؄DR-ۓ' X]~2(:@>0ZSXHCd%SU)UT':^崸.*pMp%i+7Œ4+Kj'qfdr[R gG9$A g <ʢ[T oIfYP "!ZUE,bF2˒7:)-[6J3>k ^\ `͠k :|,Aөi$H8k2(3[/XbSvsL(҈(Plvz#Y&">ZL^-.z(BXdhƩ}#@WkGI3y^!̠6ed6^~a-@_jA+StMSi@o6aR@ڸhk`|u\|P ,YNjr"#m>ꓡq̚ҧ*szȩbrŤ9ߗX/_r)͆1c턛 =/8 MN |~-FFO^PfLIUlAYh(˂wlɩݑ߁"n¡s4\ z3OŸmjДyx Iy M#DKC>²xG@9chƯo0!+$N#reqM(ÆVLj3[k'vaVw Ǥ"8s b-se :Qq@=.})3f'"i3"(0ŹW$Kr[0f?~"t6v7W{>,E]>y}\n}\.6*QUȗ ~;T(VT'B˞ ||P1u6luOBΖV_:6e⒴^.O%ڰU')% Q7::hMKzMͧ!B9w)Op/>%I*Qe6O&\o6j$4*GCF F2(JM=rɪ^FP+\PaA;N!b׷mPmOLNG]0TPqɶOv.ûNSE+bWgH4ޕsM 2`#ZIs׮/)$5qMD:iNLڢ @TaN`u[tR ݳ(*\!>,df:&20?jс$MҀ0 lj8kً7n|+zNrTOVp*[|v>#bbqJ^w޴d : 3OM~AC2~>WԲJ  Del猥_P6u/՛/^@|^@+X!1D=reH<% GA>(hD?; amiJCjc1bZN&{YN)~Hn+IfFmu+7 F`^ .Jܪ#dDzg$zzCSHJqGOi/zqGp^ƄtrI4JT6o s-⣰[cv; Ոhp$Qݛpo5 Nw^` ҹaKǀ*:(E&haBHJ`6)?=&[e[ }]vh}UXcDil\vlH}_ %r2t{CYCAX @o0d0u+%gxQ:oˆ ߻}x㆒o5YP`:91v3TfT}Kzu}ʶd>VJH/{k8 q9س8vQ`_ endstream endobj 898 0 obj << /Length1 2450 /Length2 17980 /Length3 0 /Length 19392 /Filter /FlateDecode >> stream xڌT%l lM8vm:ٶ1ad[mNɚ&Nvs?[}WkU}](HTL ,̼Qy-V33#33+<-?rx =?,DƮ +P f `app23Xyc 3v23d.^V<@mJ` lt25Z@MmV@W Aghll!@Cr]@3_-nfi/3Z]@.nf@g(;@UZܿ W +MM-V@+=/Cc[ ҍcPՅ Ĭ{1pm<}CVfaȤno HGftp033sqN%_ Լ+YzqtpYA?}\݁Wg7?K,,3+SW Oth/'@~,濾>hm}LR::tnJO`oN?-U2wu"Jۛ;xhziߛAkC }3)K+ߊ$lmSGolgeo >_SM.Inh"a 4Sr5@mJ.V=8f9SУ:U@Еߔf=VN<3hX98>,Kj{L 9?3_'`K/0!.0!$XL$L$@(eWC%nPv?ʮ@U(eWCI!P-TDTUf_LlA ;_;?:?T?OPZ? Zῌ m?wpsGx?O!Yz9Za#!3h:6@lxPBq\Ak=;?AUG ;˿3Fv`Aßѳ:wusG|zN@O_3Y@/c` sЛߴ]l],TܟWSuP  h@PX ?@J?/3h6@SEO=(5h|Vܞaij7GQvũoV_}Na#ړ;}_ Tf;~7|'@&td#CƍT1(DA ,K,y|\RWB8ZKOۻ92 t~_؊}tXc׿BޢOP,ɄG,t;בU=6 @ٝ 3Uޡ=UEk*}e1,wQ>|rq=SbHH% >8JY\+?K՘ jct I{53i0Q21KO0Fg9#C6˿@ZOmx#(䜘< !Bl-9.Ugb3yeeXU ju|1A&ZUSfl\Y@aqSzD;8S>جF,wFbG&ٕ N-)wsԴ[h4XZ.\,>3Ļ<k;men*,Ϻg4\-w[P4U=f$ol+ĜP@WDQ]AFrs>{R'!7BN  O^ʿڠr\] }ß'E20|L*Cg]T6 s]rw ;J:vG0dv@1Ϝ>[jQyŇ+< .J_=,Mz٬BtQNU ^ u}0U4>tJC4%Y&Uͯ:[u2[JE O(+ |` co (m+J' jBtGָB2t}F0!*(1,HT8+/p܍s,n \Q,Νsr3wW *RN~@w#v.F`$6ۧu 8F1ߨv˜@Q-ބu^J=5b! RjX}ןK!m>aN% ֣̤U֘x @`ޕًV.JRøgܮ>ܝ[G!/;\nrS&/2^E8~C#!z6/Vtrv!@v\텯s{)}|܍h Weɓ0 >w3Rf]p:T#Ր'L`+YOB(^Ty/t.d;HqpD$cih:ĖS-6 hoKz,2F2#K]OF0peDZ3[ wUYևf,LSLkU'q%*"(nG  rIN{ ܲ"+zuZaQ=s冨Rfc-NU/u63٭׍ӶvջT%" AMFKAfC<m;RŹia7=qֽeO)% p4BW?KnU&GQvx2+buGRn7 bO0綺C?lo#T7"*y|o)AWZZ CUxMi )9.]& pd1DzA6]Oߜd{ލI?`<"&D2%mJ4Lwi&Jyb20DQpU3q4HyIq5H0v) =X,JO9$󧄟0tX:ÿtK^TgIC Z7{zeC_RmgA#c/VyYۋg0|w%ssym=}w1>>ZlՈ2︑A_>)3j;exN4l[9f*Ē! $z^uw "xUW$@Qb1?QWi6 7t翼pLR;cTr#?Gg@E|iSryrb)r&ׄaۙL7ŒKxB^5·L9'a=0YKrh^oUu/kÉMCD4jӲ:XOJq02J<;};p!4]Z-!fP)@,ðY s6pI%`]7)ܼY(uat}w͗:hؿMysK%X O׶-pkgOi-o/n.hP"IXUը\ݟSV-QH;` V!Ւ0MH>9I.JcP}' mUF>&&wZ fDbsZh`ec("sy)/x*eUe?gǭ"s Dqʌ.i'3&+BO𗁛 bP\3af}fH&G'yWwc wҀiՇC[êm^h:&[LH{|2zHO&xU o ?% id\sr+b@ܹw]S+ai^8e׹C%e5rEt[#[>NI3%`7\W v-gИfw&LEkiG Lu×ޣ6|~n0]Y dR/@.-?̉j h%KUX쩃U BpJՋFN}ߒBPh3T6vI/x!O(W>| Ogl"9M1:_13MIz/XJLX-vhYzsCglTvR{)0XduJ?zx^w`k2% }Ldqqׇg_3_qo󽛤Q5@zKN'+b곾ImțvNJ{YMmv'lNte71K74'ϑ.H)iP(4r&AXa{P0~L?p`G=mwHE"6$_}782ާЯic`W\hGqзˣ|xV<˨ K*[41B22%/2)䧾ߥnăN:U AxbX'7+:kZy)zLU *anAҸQgq~j9$E,4KJHv'3iΞPwB}(.O Qt Q:8 NX7όOԦS.o莼ծ PIp[~0lK3ڶteec\쉔Ƴ:n`_Z/դկ؄3`T T--9$,#CWk-!dva]tmon?{cP6Vc'-iRL`CTvn=B+$YNBZ7_(nPqd̍J/՝`z> Y2-z|JAL,%DB3#|'"|7t|>7RS /*|xpu!riG4rfGopDn{#?N$ =ݣY^À2vxm(fZO~蟔ŌP8_䇊9ž/'2h~N%ݰlDo;f1/? EmON~ç-[ZU}J ^cxtӫJt;UI'':`6z=M/|۱z{qWդ%ܞ6q0|ɵ$n_=YsicQZV^Qˁ;9fՄ ܗ-َ01,"su#_E##X~/v~Fg4Ӯi\ypO䛑ReQQT vRdV5_x/{}bZfY#GRXvDy1C:AYKOڬ:T&2&+9Ɣṕ z, @>DV5 ɗSR>ޯKPMҦ$% "hS`핓hE*TIN'g՞"<٤_UX\Od >Ѽ[ w >&n(v4Tf.+:Gx11@ûظ@rAVV]RZ!d&y?$TF\K+}z;vlrR|w%4d"C]MD8R˜׭"d2 T;_,hOñ 0WY!ֻWא6 1SaLJy:-_<$ewpmcWܖ/zJ8vM&֎9dEضop\IrGqfzʓQKs |ě0js]:\~G<;DSyNb,W 6HTp\FQ߬9PZsRWPm?UQl+V{@7셛T-ڰi6_lI?DB@'f^h+O{R2*3"iHEZVfnâeCf=4‡5И$TT]_{7v:m0B)&RϹWOz(Vskr11i ؾ>veۧQwMetݔz u5i'=_jdtFܔ BzJp YZH:u U iv89+rFpU:Ie *(?zq7?ev~^)`\R><ۆd^[*݁up;S,XsTLs/X/?~%-0);c'vUj7HL^TVX"?'fv6=bg"lx VY̋N6-jQNj.xKwqo\X9=^}s ;cȤ܎R3D4'ˁx'8sz`_n]ɮDTd썴_I {%3a[)ѯEsJ՝q<_>\ (*;VY'PR`k~I?%]Xo2a| ;(X' ,> ׏*KwN 9\n2dE",O1KMle3Ɔ5#?1=@ &: ;oR̾;IMHn{y60T[7W͐4.b;TiDܓ Si a " C#Ȃ1 (*#׍Y0)@l>!A"o3zBєe Ou*B#rM])Q]13#R0$Up&YwW7Ow8pqn4,HOwP&n7zx0}&hoҵcGvsW=,x$bz*KɕkY⣰0_ԶR14݄u.b&ZTL(̍:=|CH[v.86{R͡^B3u&^$W`G$iW|FK]([ wMod>g=7OY`rTJ˨gDsUa{fftn|UrZPoEDTQnSA*OKnR4G;.ޤ|u.  M[]u੎j)Ԅ1ܙ.(h 1. Nr $TGK7_wcV9fjҫ pr 6,e}ނϾu8+zA. e44\Ѧ&e]9ti):hi|d3j\<7jߡ=E)tzCW>e*ӹ X'v%mLl:ENq$8.+|#OTi8Cyg"]v+JRk<˜Պ{o:܄RV 'obgqa`b|:*lfʲ|$T)d gi*'*ijG5 BX/rJW!W:+FIdK>`K* 1Z(-3Dwܷ,Y -w}mfnW$q =;n@q6BԸrױsi:79ҴqwKa2yX[g ePE'a2q^KJ19T6Ar:^ ϶cp jFHSTA%/pԠnqRb|䯸n*a)ae ɰظ>kk{ vk]2;@剴! /y Y!ezjȓc{6ɏQ/W^M𞩝ma- ޺Qz5Mj:u&7=^IzN!L社_='.Nn&¹]텍l1=}!Pjdc2taX_宴lRƎ:T{YWM<`(459&Lg!{j |PT8­& EaEAOɨ [dF/`tvSc0_yHzYy(A1uQZ\<4cscv05i(JoeI\DbR,9I 9h2>(˵dfN{FYp7l8ӥkvN%կ64sVhLYuv@k})RM!|NXyFA wfyB࣠4{!F55o3W;2h8+%w/ԶTѷXhFw{q[=l᧮NO?g (t3`[f9lVp 6/Y[}DڝPS(%1L!7ᙷ0VgúT޿|.h*DZ QKU=o&7R6pL!=-\ \Gt~fD,49MY @jtпCY밽CvaTt#iP*Gpߊxb*2m;Og>S${*35#Sp=Zc߲Mz϶ܷyS~A8ܯo#P궲@c4n\5NCk ?A%!n&lKUR_E4;Fm OetjǦ9^tu#!R%7h"r^ %LeXժ+ӝOXiX-ȷw [LVO0]7H haA.^TG\q"o0f^u/9FiSz@ć05C@maY،dQ;\Fǀhv^؊4ᰒ UCz q:ݏ~xrӃf#2 (}uM|"7 g)MK,}c``utѩݯ뢍db+,wa&\no캹%;bɓYP[FsӰyGwzƟ"*pl}w,kb:pYɞ%ŸZ<$XN"ᔑP3~-7u%٠ųLͭ}-jy+yYBõzCQ}+uqv Lۜu[=N;?fYk!Fܢ6a6g~M7O׷ *jH/k{ik*4Pһ=`n~TSܭcYA.9'(_Yler8k!莴Xm\P p5:QGwYDy(e'mL=mr$/3{ zXRڲzjH9"h %^jFm]^SG:a/G!0H]IŘBgGq,f3NJ>]>l48  ]&TnZstnN+÷[c-T,OH=ZT w y))<,x8FgdU+U[`pj|#U¥;"|y$Vȼ ci nNsxѮ#+vWaх/jcёt(=d6Ǥ P;=k[:ЧxJ&$}ʱpIfW^tAPI7I2{> @bխ'eڨޡ䱂ifl%R2ȤAX NHڶyѵܗsI;g!p=۫ѳp{,:1ORs 0zs*ڛͻODtOGJq|.Xel 󁄘Ei@/)Nm{U 8y2MOnZvyҗAQbJNeYoTt>"Smva.x}s[T|w6Qm hrQXԍTj)uGPɋ%:x/_蚽`2Y˨@=p;{^ ϓ]jJ=S$ۄcuHkk׌Zɫf'᩻Q 9mB |(W]`,Y~*ioχ[7$2ҐDoU.,Bp˅" dR;‘-_27`$#AlUjQ) iySh1B[`L,F .='PUȸCgXK5󷔬0*0|9>){_xzen!) R\υD^ʽLSL\iaV̉ Q4vvڡ6)! <΂(߯W)@+:1ZB8g/E]A ْɓˑu^DNl=ےGW}R.e\/|Y{PXlJ-?f-SbޢxrveArCq@Le VZvwU== +]q\IdcOg[Dgf[͌PГppV&ROf]&a p_W}- #W:UYpT^VU{T3Q]6ūOK!a3{lTza S7nV?3B['/`*Xj*swNP&q2*H*"cF118i-F 8[q5p`@sy3jlH}c8SxW ed}$:3fUq[,ު[Hѱ_#h"/G"f9wLԂ:>L'[Ԡ07: T6 wF~;&/DgY~ޞڣ KU:F'奿rڲ!La4fMk]ppwƏi9c܎X ƜuAw.NWcE#?a8 >D_~[ Fke`9q5m k Pn̒LG# @$V$.0T~Gxbo}FFdZUSf u(#ڿJ=}'bd> 0&;9p 3vN+!kG '֚|UH OuT`C̃i 6U }K| KLQJ hE˶+ R=pK4Mק~Ĺ :Dk3Φ-u"D{IQ^+ރ.+U!a-h^w#|D쭘$r Ӵ" ;`H"v ߮ԄwU@]7ehߔ;hQT Sz&gp{l0aC6ȊfS7 %'{-E)k%o9XE}0r'Ł+΀ju騀o4+C.j %3)Fkۮ9vF-́HO8&BsXThfb']"ϒ_X'N} 3C FȎ "2SPῪ8 fYEC1ubNkrǗQ?~9yt!9n1n݇ABy2W:iԯT31i5>Y> NVQw.%2+Lm0#^•A^r%j¨֣'m.95(4%b!RsJFZYHlUd8,\%'(l ?M^#UUwqn #͈' Sg;V br{)%3,5 o3pO>r{͔C}EdɦkWOQ82Ut݆-CJ23//` j|~נD1Q{* zT6{n5/ w^VtK@@bxR:JEһeD n4p꬞k5;{9B@AJ xT7G8\[Qwwi5s2j[J`欆No}YS;:B7M|Bq':0qȹ_LBⶥ d}x)^c q1Zg e;HzrwD h]P(<n62o,.UCC5~ohIw m,b'xġ\\EzLI$+R%98F)s Œ1eϣ҈"% Q]#~>gf!>5@ԥ,.ʏfD  `*LOeFf~&dW S)(CLV#Mzsy5vʠ {8忈S+cu>;_r FK2#Z`c N# yf\䣇9a5#62-/M#c{c+m bg)LޒNmߜ+T#kn#sPP^ 8#DI=\YyɁ}՘̈۞,,?‰qre1,'sWR:ZAP]d%E $9C)fWo$kv`:v&i0&V,eori:ϔ(qY ~N[.dfrјA݄zH* "o":nT_*Ϭ5(6kTĊͥxC<MtɰO6 7e+a4f7EJ©F[Umlܢxo?7׹'% 2_chI5(ٶWku4v7# vJm64kr(@ro=?F?W=4`|ȉ2Z>,SDU"Vc ܮf) sUuizppLH9Md&slj{ŠK1hI1>|NZIoh$.`lQ {)$27MMaN8lrM5|Xw?!t%1ZCb[c':hU'LaO' Y$Y3%;K0#dF@Ot4i;xli錄xcj3>U xj K!& !s\h3 גvL4nn?!wGCp+}#R*zeNpcwu/EaZ4N9BTgªzDGzAl(pmpW}0\lX_L5%S~jzsd&ڈY-JnϬ&-#H#ηU Zdo4VN(Jhd Z26 N_/,lͰ2۵]1ă`Mq(잩v٬z¡.i.ua8~g Lɚ'X3`7/F6Fmd (NG>t7ǚ!~REbdo)k esSk7DzRoˁ3@h&m46Q/.lZ/xm<\y9B֧ li-6_62 ?..F%4DX]Ql~ep @K9[ˎC|,8f51I@5q%hw1B{b`i >Cf"uR{bM R[`t#U=-co]<GA#, M0܉[w\jlJ@>NECќ Y endstream endobj 900 0 obj << /Length1 1384 /Length2 5980 /Length3 0 /Length 6925 /Filter /FlateDecode >> stream xڍW4X%Jzgu轗XUvYD-j%(hѢ$|w{;;g9X H:*[HA QAHaGf0*(.v %n K" _@$6PuZH Gј2=!<@aiiI_@%w #`3Sv#!p_)ehBB`w/A$I G;`^0 Ivf&8ý~ۍh_0  ፀP@LqP  PXPt&#~!G8n0 #?`7/$&0_7Օ ` ? (K 4.!*Hwwy?U8 _d]H_D#uI!d{z4U@0&?6'($%$0O ,3S 8tĐa@Da@XC@'; s} Z0' dY/(|t+fOY  "@IC݀.'& ӼxY ?0 ?oA0_o gkBnnܿ v`V.#BatO ƈC w^p?8ޠfIG ^0> ׉fR\0]R ABND\F1'q`0FP߯ "hLC.D~S$e+/1E:6 fgJCrxgQ/OI3yj/2uίq*1_xݚnvt~7ht 03B;\H `tdZGAűo_COŇuÍZ m1D BG4xhnN_1k?'Z-$L,Txea9$ TҢ,/}^81YvmmoJ+O^P>H2$28~0/ef̱% *K[A ?] xӛtS6blۺtS=-`ֳצBHn_J~>0ؖ2+%PkawZgrޭr߂M1H.l¤}('('M\qFjɭ]`~'Q^#iWG# TwpRM"^K6B\18Gg mR+T܆cW, .3{wFSïzPd"i+%&{J٧ڷ4r$UVx.N3j'/_x}0Dbmɋ! QR|cXhY2}Z w:o%]>:F$(E #!DAPreKK0`UW%4+HUm)ӓ:aCH?bWTӦxVXrgLk/\UkiwyJs~IC=Qے5hxLF&DE3-nkkeqr[&ƦODeb\>q䂗Q>rB:Ŭc_ԣe9Y|$#h|=%ZNq}I2؃Ww.'6:\<|n5<~wXcھxlУJw <@^y<;4"22 RwiXoD˼ͲsG9lvNgt<뎙b4h9 j rx1p,>v~rOǏkI[a)nQH.䈒I<ډ9bCA`2) :0-X3//xyJvSǭ=6vXn.ݖŠ45JBllӶgQn}Bڇj~)"}I*!q+W?L6t@18=7NIzc[1|̭K"Ca/悁T\۱0y Zp<ƬLnRKE]#={c,O˧_UY+/j_Ax&|6QayM4lo^̅(};A;~}gV{HQ) E9;[Iŏ>i%[>2څupOoG ^MN5ϼ{z[ǾnCS +/:76C/zWaf8Urai2Ue%NaL Ϙ1lF[[AIJiҽ:~P+#$&SbfA,(e V7l"UVV^||gj\tRr^ۈ{W0!ż ?y'jrgGAb+#B3-2Փ^Ǥ $EE传O!qK$ U7vfxžT?']l',i x/NXh._Kנأ"!*I(d$!]~dJY}bgɃWB1J6f{"jk@8Tr )#1 I&Q뛳AOkAMsX=>OZW?7Z.&J|ޒH3;(;%{%'hc܎U`m&p:72»/nYV`,6e{8!\UT){OpV9Swe8Fg7fI}-? c`~B7}*0Oeh<1Tl90߆"Tp:l.TҖxs;i:ʙ @7 *&+zYq!>o9|L֠[$1^'F)G^̠AKUڎli?T]aN 7*~Fw}JXz˽p`M [b+Or-ӿdyGbZ%n$v{FFEPϥހ˒Lm9X*wQCD8+dTU~D՛Ѭ.Nq2_vǑUB2` !fM|HdmJ+ 6WN'VH }IwKMiY$WK-Ƣzx]r|^Mc)ߖVQ^LrGayA- e#Obp*+gcZh..7U_b {kg7ʼV'cOkщٻs1D\TU}S'ԅd _?➾ש&[R̛I^'Kt=IO,|k(%Ŏu[pɸU" 2!4j166I4ncf1LXz:g&G2[gC+qZ`c+v}mb(~reMy=VnŐrSɴϪVO^eXԗ&7k[*KdJ=泒 FifnnۦWWRM-+>.:ޑE*$~?&wݻ,Wff-OTDXD9U écP)%38A]-$ YYӝHU͌@A3>>zYt~wtg"WtJ{(#_Nn ~ל ?M1%%}~rF D uڷG1~]X:@}$(cjC`1#rѦuEo>z =-z[L#XLN=73G ufTD?Z_= D̑TtVp8)١[IO.ed z+<:ɱLw\Sre hdݔdJ\},3OWN]hC4O`I6K[ܣSXuXYs,ޖ(ʃ۴VIADP)7qo#U 冯X=i d2BqA aڥď|$,Tcy&eavmrX,pW0/Rzuq7Ynn~ BLXpGiTkGbbߥ{S*bsv(WƏr̬b3>z@+W )1hfp%XUN;h68P|Őc&G #UZ8:+[tcE6&dQ+Y3B3p!EMZiRm bJvfӮD|bY BFXYN57v K}nѵk1sY~H43PN+A@./.J ?L:gqzсu:!Ʋkfu[*1eLTNWjW4Kx]ו kB#piig´J~j<+khwFp--yY0ݽ6R*e&"㻋;5}#CIu4M^~bhntjܬC*2LTm+.Y`=3(q(ͮFɭ}rvv!aF$TYcR),u G>l.)O)"ubUШNk_IkHhW=Z" 5Y!2μ 1sj4\|?xvq~{3#RUyK$ k& ^$1WtV\=u8F"c+a#YRPqQ(֠DF= M Z2D,[@ӗbֹ]n{md=&&fgٿT^\ endstream endobj 902 0 obj << /Length1 1870 /Length2 8430 /Length3 0 /Length 9567 /Filter /FlateDecode >> stream xڍvT6 0@JrtIw7Ҍm nP$E@@钔 AC_|9﹯7V&]9x-@~? /?.+! ӎj Epx( ԍMqB ("@JA0@CqY>HΟ0'(..+ E 8@ rT0 W )Uˋ΋@Ksr`(>B?)A.xqY0? n 00~@5M+܀ߛJ;g"W0 F>0= (kQ쎸y` _rz H+ʝ#47۬( \\p;aH(f}~seC~ҀxanP5>7&ܿmP@_\@TDu@|? B~W hzPHh?p@Fl08oP?7珄yody0#ST4TM/P^ BBQQ@e~jp;@7'=7WF [/ gۑ/A.0g7@ fDu51ZP忨 t3$rp{6 Bta(:n;P];;ͽ~sZ T?aJS|p&pC/`@jۼlű'I1$erp5)ѝϔ^=K̗j;i?H4Twqxȥc#Y,Ԝ*(ؾަ̄sNv7|Bf8\+Vx@'h*ul&tTl6\G=-kܽE_5>FG9iB ;GjU_V|vynq@L0t4Z wlOo4^ݭR{R a@KR%ۆgq'" ;rV.Oz3V$?oK2wptՠQ`wlW5^2ν Zۏ cAϢ $`{Y aps_,,:Լ^XU>Dޢϝ_߯e/_y~S'R`.֌St6n%;WyGn%k&X-~4vϾ{ۗl.tw4*uYdUa5eNiyehWb޺F;?$Vl3=Q*]UPqfzIu0ܵ7kzC^dRN*1g汿> ;9n OL?%-ݭ8e?+- /,_̭p2[ߋA)_@ٷ[HD|"0ꙗUWyT^,mvS, ki%[[Ow 0mbJV  -wO2*WуqKO&&aOQK~Z߮2J?v7 M(PR4_f fIs՝}+v ]NuY@~3KzqrQyW"4y J$!?BY_Z 6rpE{Sh{ձCdNp.Y(f|{ FYg(t]QTz]V,QމJN{#tڰDVb3+nُ)c+CgMsZB1hfsU~ڬ8 onm*{H>MXA"u';s\Uj N^$gdZ_Nw&duZl$` {͌RD&"?6[S+HIm]+^͔]`[x걧q@d=ܷݦl͞mW&sKy̕+GTd Ru(CtPG';yR)ОOCV‡ ^.NRŭZޡjT>.QZ02lJjK!6D 壦o*;h~&fh@8KHQf6jN{y9 izJpᦱ %P8i!eScv=RJi8들A#x*Ⱥ qj=ngi&CζoHirhd( ,$W53-:wv?/?m{> ?D2cH` ihgYk(́p'ΔqFbhk1xfv<ͨ?nJEVu Qfꞹށ]'4Hkę׻>˯0/ /w-,ڐw2墡U{c^o<<>Hv)Z6]oCR*GhMP´\"a3!d߹,\,:5Vxh.޽ V`;ntKSQ 0+#dq="DK(~n nFbࣲ &[DPbYpJ3}^})sQI :tt@r׍JwWS;V.&6V>o6mYaS0 ; _G(?Xuy7Ib S3tmZXWS4Pc2[l y= &*OBuyd 4F0^& "k9W״D,ogTC{1q)V惬<gVymz!挫Slˡl*6BczGj@VcY"U]Bn+H N:D@$ok[ZGj%Tn(V *n(^;z+=u2먴O'GԆ}Ͻrt6ǯNs5ro{R mUm Uۅr&ه6!N9\ e4K$KfUm;nI$CwFv6 Θbhc`ͩLny TCe@n{kHS2ݚ*:/|G{W[r P2~ZS,iɷ*oE {Q[͈S(٫dءi? OYGwYf7}(t %tVdJ^$ J*#AKķ^$Yd,)#jUk>9d=-`Z\[nYR W$K-oWnx[MFKުhߧjY~GlFb<99* >KLχ0{1|WA!E K 9@ܸt5:{xg޽%WU^s E>Yz✀)M2u;Lf0x%75.\'plQ ?28|ƙ(/[}|(,8{3rw|C|!2f-NtXj|mpGR nK#p{gUB޳ ůDpf0IH>dm3ͥxԫ )6sQ^Yp3($ʾ!8tE!nb1;kΈAX+-kX1n1խ'[ʍB+R2y;T;,kxGHh.Z\WFIZPnJ#۶l KOw,M'DMQNeG9>:;}C,tF !慅ÛCo̜]ŪmoWnIuJӑCdZHng #t=zp+9΂,B1R5AE{+ ihVw"c^oo\SdnfoL[4J%^u?wfs@4%;*BR;)516oW[ۢ>ZĔ[ Qۺ')r>kյ1f8_Eppsw ǫW2QJcC+ܡ@/lg|=wʘb=?m.G?$ 2gS$ȃ!f'wId{?՜y@/*>N&F?ė=̚pоݡ0X Jm5&<\ 0A^u9:7R|$^v[-\ lp iJ Xq$sT-4<'8Ezn ,j&\5ٿjrŲb|? 5OFw+Qb#AFkPb@耋ԍO"bPZxh<2`'R%]'ol? AXs?9+Xj25>IVV ~*e>˜y8?8,Hy߿"IQϢ+? p@Xc;p:=Ny%.2>\AW_)u >rv[M\d-^{Mp3k+ÒzkђW/t ͟ NYLg*&ebnW=jiҳyr>=V\BЖem(Ert9M壠r#1^t#~J*}+y+{u#obkzzn# hm9WFG5T)z@LVPў  &pgUDu)apieeq"}#:=CKc8ҞP]/5W~/6ײw p. YѯphݲJyhi~9:1E]M[U,Ia:f&W$)W97ܵFi,\ 8HM压TsvZYF>ncQ9-,Yd9t~`̖߉e6T\R*$<XSӫ/k',H+m~9-zOVnmm]~$ĺp}bNޓ-IP=B `$ġ0ˬn)[.01>lg_SEinÕcJd_YF a'OŹဣŤb2d-^\q T4L<1.H᭖WHZގQf |v}3i]0Pf9,gΩ(i X$WQõ1@?qAdT6X!2!yop@ Qܯ2F2[d?+oxF*$zat)#:ߙ+զ&>. wvgOv`ɑHR5w3&j2T~f+EfV 'qUŻǿUڪN A?rRr?Wd㑃;_d~S~X,+ʊ,){Bg7;|oU/;SiəTHgi.N^Dz֡x[_אQQf|'Ң2rv trPAURfxEezY@? 7ړ&|wUt}g^3ZfC /yyhVŷys1P_{| 64uf1֋ r!OC_gDkq̜Ѥ'&bz-5c,Du)*ōnlO\ d'P!gJK  zc*(I&+|Gc1>^AWj_M$J}%;p5fC3`$G3%ʳ:Mn0:30/}'-.1KdF/?Ҟ "`sC=hΞPM_`zx̦$ endstream endobj 904 0 obj << /Length1 2241 /Length2 17560 /Length3 0 /Length 18901 /Filter /FlateDecode >> stream xڌP]ֆ }ana݃n-hpwsHޢ =cNUԙDMAR`& 3+@\QQ `eegfeeCְہDrqvt &a~3Tttȹ CG>9@ rEwtr#֌f jr63q(@oLf XX<<5yfG M鯋/Y,R`C?`CoQ7EX/EOX[>?OiCoٵ[>?OOiLЛ/z{W&Yog/U rz{߽]7y7}m[s1y c|Sm|m|Sc|c'[vuٟ7IUZo8~lmbgnmG[AwsoqQ o&vv&8l?V?Md{OZd ^LdRd󯷐)>)Z H\ THbл-ԩ|-x`Kq˅u(uvה(jn[M58o'G+eQ t#%{To bɹ]P1$%8૵VPO0}LDNnХ)]Z^~2h <'pZp)(ޏ6_ɋ nJ՗i-ӻ^Mb+&<7&.ar0Q1Ybԯ[E8T4]Ic?A*[ڰYm<VBVyCu0Qܭ34QYKuo}9^:;hc0c7W}J ΁,2kcŽ=n}= K*;9n.`:>wE3EQTGސV@%C+|}t`Gr/}8~>(!95x~Qך*@Zb|%Ԗ(a/:4J=P۶ɋf7qWYʏ k6%[u8(9!Ct5?nh绎r f9'DW9d:^M_p.ĈJ6G.)~@6fn\9I*'х~,>7glUj@XMMEP ѫ ,Gv}15+3 97@jN +Ê@96ib`8o4@dutuvEbMKJնfn WpeLH-`45MκmE0A 09Ƃ\}x3L-c@j7ֱ89H<|X@f!yc6{ @_YMvΕ!dDoQTQǸMi&@:=[b +Q2q4>Nȣӄ ~NlP9%bT! q>TЂNQHw38ts#]M8ڌN@kMaVH:uܶM8{~N+x>VBј.D@&S"]NZEI@C7(*͎?i8N c|}* \t‚Ԝ 6X˩ʦ·L4,+={5Ӓ%5rQ}Q: g306ٺz<'wlwZ2_տ^ԍj$T<)fgovcR &ˤ{O>Hw=~e4V,9rL#y]X`[F7f_U6E)69m)~Ȧ?yWr>z~F>r:BKm"ѠUMPq'q>q^Oq.?3:ڌ1-@痻ݳNeIy}qn1iCAWK)Nއ1V1\!Yۺ:rnΦ¡$b݃ Wv?Hsp5Lf5'1l׀ PmOTEJQzN( ?4% y<)Sg"<݂f R_m K==ÊimJn&t:o^txmyZrMp dD&apW,2j1,d>XB)bQw\IKI<4DIE6D8@TEhG 7.S$%_cpRxվʲP**Ƚw{l(r%yc.g|/ț7FƢ[^RUdtiq՜~}OGeLUg|( |&Vg& _͋lx(@N Ƞ51N ڋL>&j`&HBj+[2-Ģ9㣚R {Ǻ-uąl?0#@^I~]|zzR-m/ xsT Kt_ `~}&P(ozjj|ՖB[ˑQF{t!V̄aޚ7f[u.OZe&nT"~[mJ h?+2;" Ng5E^{ ƼSb7n*i6@\j`ҏ _~<z!cN>d(<O\DWMb[)I#{*TN6݃G}0u/yOom6a~EH`c{L$=@5]&t@a5Qo/OYMk|q$mr8B8q ^ˋIZd)8{ v ڞu+-x&_ сS”ϊ^Qi~ïVt٭ֈ<3Iw"xwүIh'ʿóblw5V;~0Rα<ߪ {>{e W21,Z@NdK}hT95Zk6KЛS26%x:먭zS7 (2Woưr)/1cҒV48!ab*" G}t50)wW{BߚLS{a)k]]O>v }=tf+n.#>J;@Z<&/$Rpӥ/DFt2V?_{qh0^;W脷_b^skQk TzގTdW(rdtu+}icS[Rf*aCMvj笆ٛ+qX]1-76/q$3|CD2lUa̰1w_ TJ_WEB$SԔgG= X ;<QNOͤ>8ul-O L?+ B"v0وl;Δ{AB]V+U~Ing!$r>mUwZjG  6 &hds(ӝkvrA7+գ'65#K{l$EM )JCflOm .k;sb[15؂k.Si9vΕlk]J \Ï$eN߿ 2.Qq0U_^%割i]>,IJx;wBljV86C>ELpLwr}G|"Yzkg[f*p5Ư됗5^G~((Bp+6/Ic$7o W 9%OP(LnG:5D~OD)erJ6 %a(FV\w;-A|0V^k /R?ž|/6o b`]kt=">7=*nxܵf2w=HPWoZ0;x˖r-:YDWZFۏ㴻]hڹAIsYjEr!X, CY-,\Eߚ.|Ac.AX($0 u!}jN~+$N>~$) J6J@7:MxUB㧌4Tg]il2'gie޽pQ1B}-/C4FAO؞ \6b;.uk2L61yMÐ5D615t,D>,*B%'L0 \Tw#mx9a \fNUYb;Ǚn&_bnĽ6-0D,x͔ $=Wzm9{]=Dg ^k~B!+mG23˄ K-Z PJOW{F:51bW\xGDOq 8H+r%vI]"8^G 4"3gW< z!l+ЃTczݠ?J@=[Z)͠=/[u,؂@O3? "2czs. n[c"ZW=z\A_p,t +]yMøVDpB2z)t{oGΐկ)#4}pe%w ¬ kLs; AY%eNNq8'gƯ;QKyil3zykO!c|Cp 0]O0]#4*:\/Rhu;2;_J̅b"QDԕx q[}@^۝U3z\vm8B@TNFyHǃsbt6D@ł.Se3t'UƑiJ㈺rIV~qt3ҪWӭXU|0骪CMGO9R8S BC7#I8鍅դQ6_,w⏝-7_ :9h%I?O0?( y8#6u7Q':">DH|im=c|衊{^8KIsn23Y([kEW.9F +6VLy0RH&5Ǥg=g3=mpBR'fq$s57PP g=k,"bfZv2p"NPEV8h7~>8OƀC&Qlt\ph됟B'L+!\ otk#YG| )]$y.7=:P EFo{%~{g>K*C]ԭZ_AQWA eqqo I W*l0iӕMj,7"yo S"O>Z#j4Ͳ&_2Wwl;vmge }GiTD+qaɜZdFLphjooZ'%·շ.YmꞯяFJXxlW1˂)Ci.cMZ9!W8k HNثP@&1H[W)S^Q#O>@L"v 6v{8axX4N5ѨaM~(ęn76E 0hKj^-1Bm j]X?["fٓ\tBGFy^.-%6z È0mU8X`9Ded6!dD{X@L#&Ǟ5gv]W@=!iyOOj\̵Cۯ2UBA1汗A s.>ʡ+Ircq]+$ }rlTGH,[2>6\i |?AyPuֺ1rcV%r6׀LWVZ < *ּ/}? ةR nq|r lXSjFA*H Zo]j2҇mqZeQ5H8N`~֌[@o@ƨz}q~cNs QwxXϱrG9w0X@nґ>qa줃Q5jyPL$-}teOmV-yŋ3 = gr]$z-<$wtY)H9Yŏs`98"݊'d@BݸߋEMjq`V;ES1PQbZeΣ)6Z,MTqkO2sasq^zu;M;bR}dž=MʴI}k{([#U.y}aPw*زh k#+.y-Ik\% wK>3_*~k 5nHO#?f#Rַ~FʦLXƓ ؟]{e>W,hvA0ۓ:#pAyfoGeM1FV9d2tzM d'Բ^[|xrDd[vZPB nmxV:95goD(;<3V}-Zzb殤.J,;qdQV~/[P _m:N4=dIxm$#b՘E (LR~O98>>zc9-a D=wULOcũ61 3TǦfkаR]JM4#ja>6ζ孏MyW#"6YPBq>&/mqcnfp٤Z-Ř[u0&gKuaknCX>շmؐxT8DՅ\졢IcIWtHS{ mbbOMؠhuF6['5*juXMiNjMO04y-|;Ap %O¾MaeK(G-Vz/Gisluo@.v[v-"B!{憇,AbEתBmd_ya>^Toԝn}4l}ĤhkpZ%8h͢V3):eKE&KK_Np36zU{Sd|VMqt77RG mo0IݳmSWn USōxnR4'H7mTcZ24KΈ-Шg|>ضPGsj$]3?2ؘ#'Q-=bTTJVd`PUw~%/&ă옩i 2r$FdgX [äxJv)Ll)p"d6KȊ߸ KGZ48%¶bIr`kmzoRfx!NGgzB@(q{Kr^ \Bmqx+/k&{q|)^5{^ Wc̊rzJ Wx^ nɠ.^'T p}[Rqz-{~11i"f3bZ |QR͈ _̒Տsx Rz%3ʑ$._88'.KE! QfgϛV=ݨ#|\R P(&j|H#xpPF]^* EPig09T>Blq5ei+lˏ 7-@s&>f}YifA<ޒv(P18 umct#k Sz[.KyPd`י-lnycGf᧧S^:^ĢYD7s}_v PoH3GMO6d:_Mq XzJKz@r}Dtr1Ee(KD|z^XۯCO({Jmķ%1`8HvyQ.OQrmRr=;?.`?\J%XӉ~r7ЖbuG/k0t_1+P/VcE1A6 7MJ!fkE EVcmžˆ`y08 KB (#lٲ:^b^{`@nsKBč( 1j.H֟`:Uhy:AT}#}^Wٓ3)dtCdDT)TI[4>ix:1Q:gi9A){O bȖI[j QޙxJ8`9`!ޭNUWq|z$҃?D{\납M>mq£ǜ?YYbdppՂʨa-\.h%;E0_>O:zS$o6N2B%r@>/j}ca4{}gĚ𽯌 ݜ; ; m:3cV^⾩RkuPp^aApw`7L7LTo? DȰLwyb6Cѻ+{տ$h+QTL1mO{,ټr YgB}GY*EGΣĢyHIFz.1xNfB'ߡqT1tFD2{:ge(Nr% uRN$7n;~G"$C6C/Wҫg⥈kd'{u6xGH[:P]mNaQuBO>Eʛ};b,BH+ז[K atf 3Wc0zr-s1)# jpWtQN &0(EbKNQ | _ÔpE2zM`+,1i=F.lO(߅] #ɜ3@AYߍ>/iNtDgNQ}1>7;WfQ ݍgYYjqAu!Px 6>Ń/,?{V%R7腍ys@̭z]ا-^EhJ/հg AhZTf:4-P}Z%qSQKQkzaK{}0&Z(:e+ȑàK zuL$U,5AD% @\n)R;kqSsElw{by!kf#kUIO˫?:Ê[`Y21i{ըabBW7'W7x/Q|'҄ARlRGWóďԚ:Aiڕ-?o{=L0* $ 1?>\KOK;5aj?(CkHV>EI kxˉww 7X`}a5S7~KKΟM˺[JvWCehFU'aCCnQx we[T!n VmJ29-iC'~,g F1COm Cm@3~b@83}fa* AWdu?>q|rNTM:-Y#LqW'62 U36'T UTN3X {tīP~@MS̘`P)yA:n! q.3hǨ;eD1>irIк4;-{wb`yF[Obfэ5+1Z)gYn/boN=@<hj8k-C+J6/.>ۥ;>'~/UCKmC Xf y5T6o?ۗXrN8h\x$@P)y>-Ih@k9fG)|boL hF(QE)!vf)R&窈dϡ8-!QX|&ackk*'IC$I  '9~A%-}f2zOPn#wMpt({яX`lq/ ci̸5Tqo={z aJgM=K'iTo 9A/=,:0+i]"s,UJd0|"K{%$hh[Tgꠧн/N]w߬&?bNm5O Ĺ0% dOT,L:( [qe7y _FUCӴ{eQ-YD f3Ž-Oz 5v<"ewge]Bݟ%jp "lozT=$@b#֬WYЉ-HlO/ְ/P|En)():A#Ӄ*r"(EHVhOVg _ ogٺYwQmJ008ZjF ,ɀF㘊n:AwZ/DSE(H~!P-`!&IyVλB}2]Fr#!/= 6XD*Ka :J3izQQ}V Ax \rΕ72< s,tŝ񾂙 ZVSCI6Dh%ױ^~me۫CR~GbӾsVEl5]62}L?jxOܻGXӔ)^c)ӑ%︹G%Nۈg9ܱ;*j IT; I (S1'sR>N#ݮ<=}|p8˒a ϛ0z 2;_w)峃o3AIbc7.gJ wpg'znwN\0Ư%^0X1yP_ A%'&&>_^"7HY ֤:?e"Ҿ\Mq b)3D`|v ]%3 CdAw|bi"g!3!$9| -P'puKf=gWҘf?x/~,-;ހ@*<Z\`yȍfR7:{1j:^S$_(o<(~00U|9d5 ᔵ*ZZ~Ncۂy+j^,D7μNk EO}a |N9bh ]05if]Ǡ93 >&wK|WFNL;#D̴ٝD<g ގV♖_ƚ*z`MčqܽDnVSy0 |zV"f22wp *?/>1ݱ8vݵk݆~ sFH"1&W^3)ܶaJIȎAD?fcMmcntQ *ᗲ|wn Œ ){O }TUz}KǦѷPiTFXd4*́>1"ϦA.Y ^g!#4$ARbqJ^T4 kX#aZsYqBrMUîDit2ť{yѸfB>YEqZpk,aOj#u*o0U;> phSYG7/Jj. /~>q] .,Ni #Z?c@?9{DZ~+S% %#?k#j>Lw+RmM=+ω%:*k~H_+8ѭZi 'K2~}.Vw9YB)Xmg Y%D N&6.X 3 bF5Xm^Kʵ#ஒ s5,q)Aye'R/ 4Wt%2>·]qEh/.Mꘋ#.v::gXYik*NlG=n.F P >;ه7MzK_5캎(.:U %?kf6qЛVy'Yr }3 އ܂="ҟÊ'ƞo YZ+z`nDu&Vfp6C`vc5΁,$8ލH]Y:Q"|ج vfevMq}7V=HV'y*WD:3FEti5@d[)%s1O2+٧ hɅ*\8!^Tu/#}Fd;q;[ m%HfD%##%47D$TblgQE~he4e[XraJM63Kp*axksw}n&m1^LЌB@"f/>5kƸbΒ΋vRF2DSPɳ't}ZPqu~=$Rnm"c~\ И7mo Iq/Hߞ!DhX[Q./7^ai>NuY=΍Ji4sIq876Chf^jl.oiR")ǃ*jB:4ҕsbGwMuQ˽EO2O;>hX,طKdo}vWa =0I!C3.V{pSj/a> -! )/(FiA;fBz&8g`ݕ$HsZRP`>a,VOxl\/0_x7T|#p2_Od7v|Yg]$47<`-Ktγz#!%6~eV%]#\j-nv X(XajEzV??lI阐RvQS} rՅEsژ;=GE%DaFfW G3"ṿ&Sf[g}8A;t҅:hj!zx \:hQQoP `=fֆ:A<9?l RqOv C)~,6>bE5pbT5a#Hn*񧛋5\5D/{sv4r8)3b OManO4Kx ;3{}:"pcH@߁vWռeB6G˜OiTt}.ǭ0(MYHP mj #6Z|TtH[,B)˪|WVW 9K$k.=|N ؛=ƉBa0;V/nYtco>wجߖ{w }X(&ŚylD Hr-Pcgqă/ v6rJ.H{WL$g24c7˜?=jlʚN>fGIexbP %@T9TW.6ت\iA[S|>=<6EުUR^[4s[UIt#`dj+ߡZ -`!<WXFzbY(S}7X] (ыmܖ"ABT'W,gX(vLʯLirpHB=YεgMgnM\i*#fnu,k+g1Kp]jMq!3# 0SU/$ѧ %f9^X6JWκ^v'+&oR 3— Ri4T(u31ăig)=,(oF+;!1yN2zQ|` LU.^b&$w;B*?+v <)m6t;@ooSO#")ш9_+pwpf*sm0w]՝ԫYF#琑 @$!0nW덚7 8? -I,lz4a1ktnLqwЄRSGJdU7h.F endstream endobj 906 0 obj << /Length1 1407 /Length2 6093 /Length3 0 /Length 7046 /Filter /FlateDecode >> stream xڍtP[.UNPJ  $B*H$44tA4iJGA|?߽3Nf׳׳6 e(P- %D@qJ>>SDrA `:u紐Bt\ HZ$#ā@ٿQh9:tPH'%pt}@ YY78  _ q8_)0w911Q( $( A`pO8 0 :!p@)Q+/ M|ѿ+¡ӓ(|sMx 6a݌Kqg1=㶋I&938t7|߹@$Ӈϵ\u~G"\uG.ɋ#'i Zrʕ{ 9 s1y_5s9XF'Š9z[KƘ&~f%t mI>UWgustDx|}!Ϯ.IVe>[x,{36^ND)13eZaJ.sNS2&3Mka ~*!v+=ǎO` s`ඦƙI>RmyT|a[hJE|i7M(Il/-B̉"DoAS'LX l|OZC2'$1-op&!s+^{.L{iԗ3xSYXv>Go $0iH>˫y;}rx.ULԡ_6N2Z"˨ ޫ>y5L#I' B]{c⃑IeJ-F637(UT:߻•*'L/@!V;ϱ|4+a{6E\GANU 0J;% ٍRK7~m*抨+iy{]=9o+Γ?fbE}x# IdzBO=\G͓Eja,&MPupFbuϧSf\Jk-i~D$y Ʀ𷚽neL ;n`ATO<[yln~.% ,ޑMRa皈@F[xbR#W(Peg|S]q&-~oo1J>q x,S{7)ilOAQ+B N^۫jA@O@S!z2mŚcOiUY-L(t!L6ۺź##^~|4{DclOC^#쌉-`x)Atk=Qnތ;_LUmxל0B}‡v C ,oKƐ\ub+v6>") G,]n ¿\ogܫvz[}ա]V0ds FϧDeJʏ1r'k7Z8fc{$>6OA:CMCnjGjxl ћؗӽcA}l@}{X]_ohPy=qS"j~^qĕ:]>?=2>+5XLu1bW3]hQ _cubܐ~st0`jib&tP #ټ۬L=}|5ʅ)zAbor^9Jx!}t,7 @MryJk͏ &^q~ X7|}xG,{NVx X,JY<먟3'I#ܙIwf9?M#[QmD^M+l yk+ @ܷeJA\֡DDۍb|\=e_>PFtZ97*ID_q$P`߸}Iev*_B'Z_lJ{y u\oKt@w=1z1 5w- 7ιֳv[KDk_mȋa0Vsn'C D2^;k^1ԕI=["1 l&{MݾIhD LuO3&piNh1ާ\y^{DjQ~Y3N4SpsE 92k Jg!bQ Uw*gP#u o [-]~R>BpY8>T=Y:_;K }6!\~gjm#+i0DH0du)ͷׂFx3JLxwZ޶=œ7<{gA]qŠ% Q3Z̠8MծT8ԷA E[0-5aOsjGV7U[@`9xZ+8{ŸCdy-5/3t 1t~r645("2xhi0:8.MEW4FSc_'dF.Lnpai2"[  7&=7`T~(JjVSv.}?=tAٙ\͹X zWO&.M&Prټ7kgD,_ZqE[&Kjr eMe7.6D'Ģ0\1k+'d+ܒSn>t2u5H@H0%JșEd_}AZ~V,xye]j} LÚ~c[yBmrewPM}PAZ/荩Hj}efn^r7ݑ䙭?""Egv"GZ.aX+#\YHT/aQӭVf}.ޡaIs0.RcaO/ݕD|:xjfH̛{IibSI]}VG!sk%-Ϗ(|k9҅[so?Y5ku zV}f P!H^B${/Z*UThNw<ؠXPE7SMg*D=gko'm՚Pձ1I؆n"qP{& rzÌ;ӎ_ `_{"ߑx֞ l%YOD|qU_ƆdPU.ot%'B3TRP%J2B+uI4f?^^M\3QM/D*>}!"WxX-)84,X9yFdY6SO 3 n]Ax?^]fmK#:8mtEKw$_]<*=gPM5':~ Ӏr0ȣ&Uc6kѲ:yX>̍VB#C3MBT~AZY?2kt4[x3@ y# enD 1H,܆A+!scaY}}!}d^W RcYfkv6x1ԈK/,e$c攎J9V 2Œ-=}z5ХLh@Ms'eݝdSKp8nkI}Suޞ 9J d ޱm(T\"-}[)^ؕ'7)- P /7Ʈ:~!^)k{즎̅+N}0e2 13\ᓟ`>"<՛=N/ߒj]boG1GybfDB2%RES,oeHC?p{hZKNl5:4+Jpm88!N&7&~Tg` &K2htTx{si0;DWgAɋGN/bRs ml1+3Ũ̡I뽩irJVsR릇T[R Z#|w1Kt:>~EOP[J٭8Ttc<wuT/mqCS1~W3јYm(㒴AsΊ2.MJP"}-PdlTMVMW9ּ׺tR&~D\a2Isu!k :\Su&@8Oܛ!羜Ml_'m· șĨXh}In <I,#~>;O$J/,]s.FhRq&qK$p1^N|o/Kyś.WBk&Yѡ+癤O匹:ū!|PF6W͓؜LjN7UOg,29U'֍Z9c{5Np.rPBϱ8k0"2spW9yp5-QU!`|b#Nsr["5z={/NzԮdֆj鶌n=vP?5XѨ"6BSDyz.1QH=*d6ќ#r8 [ee)=|eۻ+]L[%&HcpMVswۤk,v>׵ڼ£[FQCf_NN}wmJ ] 98[2}&FgEob,f{ffYe Ͽh68(oCE@%JISddNŃ1ֿy1(FS(t&q02=_Km}ftI&AedB9aR88LtщRcAS6l|Zm̛XHXح!gr׶P;eq$_7Z+.(..H|;*mL4Z5F4q#+{M!wkB*7ӵ endstream endobj 908 0 obj << /Length1 1742 /Length2 10518 /Length3 0 /Length 11633 /Filter /FlateDecode >> stream xڍP-J  @޸wwwN齎?AIFVBBO넅t̬:f6F#aC8"Jٚ^AC对kgBuAf_ypQo;[[CQm,2xeg׽{5r  gJ9_CuXY[-@&NNzhz12u팭^kT;Gscwbv&בttÿ+bx2 폁09^9{L ['0^A `Pqq#6.`77A&_ `/`| n7ddNѿ- 3^)ٿݿy}_9 dL9 s2v|.;;:zm/(2_^3 z[#J3 }zL7Q/6c"S.$o)/pxH|ߌ(v\fpVvj1Raġٶ "N"qZ982G'sF*3AZ}51(H]KE.X~H$?GF23<=?}S [OgJIY 򧎖Őe͑]Sm^K}}FT",S5rA y}hԮƌ7-L)nAjN>vٔswCBb𝥬vQ\rT"-K?G|rYF"łeIJg|xO9JB ."0d Ѷ w4O9c1ؘ["2jyϽmKt(AYaPКm8 kYZRS:; kEPcY8.խIF>^Ac˃ e`ԍ9E9ʏs=˞fgHF_:onA7pqnpnn(t,}i|>E6ۃL~Q8Z1)8vm=_@$Jϵ=(R/!e|6g5ŽvJJJ.2Eb|Ś1".=պ1(6>YcNK*OFkf mf桓4F' OTl 42r+ZCETi+@ #,0Q#JQz|QaF1Wn8 M loΥǥTx|y>QɽXR }s.]0ͤfhO@S-|X=ݙX9ק &A_mO04`X1oRj]|mL|1}VO6^P>lY&~JmNt߃YBuLCH?IۺSZ 9+~M+"0tm׹M&l-@|膟Nd]zQsf+Iɑv;Z>rOnĢm{]ɳHĊQLNqm{2}brP3[;NW 9J,DVڥpyu9S\X B#Bs#),ԡېnV^n]?VrgGxzpQ5/#r[YZ+[#9fi,B"fwbf $ nktwӰ~XbJVcKi[6k )̣7 EWqSebHkT҆XnzρmEn­;.k7! KʡZ+CV6(VpMPi6tJy. GZ=v1nP8v=5NCt{|Md!^28#GQ \a+zw̱3*eh=޽J$Nz-}甍v™SP79b̊)ʧ٧ |Ryg&wn;/upӬU,^`Ž1N,ɹ[hCLJ!Sl9IlH^`7noEn- XG'g^ f&y+=q͋獖UC".[R *LJF 喁 5fDi{Ttxi:!ŋ`cjU+_ ÚP d`!{h6mZ~Nm,>&37JXuX㍺nZOf8/Nk®ʂ.gOCJ$[E-`_.ܙ,i{Q/Y| i˝l޺8(; }\j3iӉO(n zIHeAuD/D*,rh)xcy@υ@;gGՑ@[wHUч_>Yv'ɬY)A2{JlN$f,ybZ8zhG=Oa qUµ6Q6=&;\yAj"?Pjb?0I!C;qO]M P k"( A_Ҿ/y #%˛N=a>Y䷵i٪w;m$ ѱ;[hp 17+͚r8"V; c8dQg:qA]8AcNDk7'rptSz2D}>Oz{"}?o;㿞r+'W } Ed 3nIү|9I<u6R\hՏj/ZK|V/c۱۽.᝱,&K I֊%IA~G`dy='#ZG/oJ-Q}`z z|N Vw*ڟ p ­E6gY]WЖ{0gI'=κiq$deaa]age䧢_ʍ~%Qmv+%]~W2J=)$Qk}xWa QX7%NM,OmB2yGeʡ]0OA|* 9N$~[eΆ]1ڎﻲj%q#mΎRPOH`13iɇrom& ":"xOa5[ Sֲ 0UF}‡ X}_!0޼sUji׾ Oʎ&Ds0y!tAX*&2Iɖ4|T{}m0{Ci#­US[Tma)ZOНh:ҽTDlFҔ[Lu4&|r i.{ w3I`ȓnKy-ܪ.(+!FFZS:sLV7$FU8mk㯼_Ds,ɨ$)C>Fcr)38fJ3cg]ؘ P.Z/sFq:7d麲l#+E = qaǸR -+PhBC50(Lӿ/RFXo3W m|=eaJ GSJSCs$,HO!.DwrU0e;*,TW\N|kCgDh6g~zUH*}i: [W'ZPmf1)77ZQР/=sg,_oޟ<1+K `샊sHiQzS@8.qBUUm.4y6M,Di`*mXDR A,LQ̐ tM!^%h -o*M4,7x"H1xٹ뼈=+*m 3p D`¼ `gªcbT~L!h\ 7R65WnC@zRE1O*e9E5"8ArJJ 93nr)i.KzmU3[-$3Yh%eUK.IC BZO~)gZP@hO|ۤ}X1N=65q277}jOO!) {4 QSCʡ${ ~u΃(zs iSأAXl֛ӊ'=cH802qү‹%Qkeܜ-wmEg_2% dc^א2MEf UZ X6Kn'/qӨm֣,Rg0ŌU1b:*$J9y6؉Z!_i憱D8W6"UhOu黯5s׆&yBֽIIY dmxStE"V_TuF~C }_N$q^K-vRzy= ^ QUoLt 0^Zz ے`󜳴Q\mQ(\*K\Wˍ-*e+ ]) 7V*}gsJP4s9}=9m l!\[0)kVh(^r6W3ܗ駰w1 e&g0K)uj:Ni` 7h2CvҴx#Gff}cs4DR9  Kt݄۱&)sa '"|LiQ;O?t2lϮ~۠5d?̷3H~p#z1֟#!KV6N¹h()IՉ"Ԕuh)Vן~^С?#qg'B|A}F"sRi~qPnp8:`Q.y&J#pAT9W.hkA6cur/̘SɓڒՊ!ZikgeUXʶiGaMT~f)cZP"2HE%[9ǩŞʥ;p"iF/qd('j)Ӓ&r9y&+s]3ƧV5<:k[} AkGwc5`VT F3A;oDH'cy[kYdӾ1?f -:K(Q-Qe1=F 1%gv9ޘ"0KNs$O5>=-+/3劎W.L6ǍޏY)穭tiHw-:Dű'K[A;kUeiEM[⬞t^yO ;~leT*(N>.К[M Hmy_PŜ'X4>glI(.0x_R0Aq/"5?RO7ajQ9wڻ<8J'<)deuN07IjYNoJP}klr3Q?c\J| z^ U91/ u6ƲֺS\Ј:~O-7;QkX7E;o X2Jg*=ŴZ_ ¦剢3Wg9KmpiF;ސ0(Wn$D0]JVDr=ޱjFEWL~clA I"_֗.Fc=PQs,/nReddbCtȨ%?ayVxtg~>Vg?tL܆ ]swEyXu:܇B[xWpbY3@G@=wm}!Wt2qe9 P|$wm.):šX"ݡգ G++h<'T &|2jO[ 3}vږSsJ:xڞ5}{{mE Pw X:l|^BZ7EJ #`һWU=ڽgDR !F=d6>MCU:5Egn-8 N@^=o mi8 'gp>-u~؁xհ3~,掙*pjsn8ͧx%l~Bӌ}y}F}!BSҒsR.%Yb(>,6o}veF$Eo>wAщ!&k" sQH)3%C)Z~KBIr1s.Wl!5zQ - 7.iq#'ړs^5Z"p"ESl E솞,.%Qcan1V$K I!t׿}t5q?ngu9VI*,q j"GS5H1$n?v\hEWZu׾{eb R SX{YkkMâ휕6.ѽ/G~+C}FuRmYxԞ3x%K&|6zCa.<΍# [2[;8h}<`dE_oR4 i ^R(^/OUYV:é'#t {y#Ԇ6d9z[mGlA쀒h'IEL6LݱʮL#}O$OIxS&Dv Ͱ6d7am q[JG>s}n5/&ǻƦ+wCafn|Zhgl0՞XΝ)!,7b\zz"|]i\9di`ı v٧_ZŽ4/`Y œ7mՌC⛝CF#Ŗ5;~7NI8u0ISޓŒ\bQ,l4 Q٫==R{K\r;sVѽأȷ6l{|܊zRP(d=_wsnriyG'.V5͟0`K'Sau1D+WP< (M5e@t$f:<(% :Rz:Ic٪bNgPWj &k?ȝsS,bz 3>9[Ēq~un@˪Ryu;Gﶥ!Ll;ޛM'yKkz⺅N YΜ[D#Ip׉L({zsw}Jȁ^=,r5tۻFR}IL]ևr>V[f SQ~ 0bیy;^w8Z3F,Cֳjj̮lT9*R:|6F%ķr$9_3u\{gFBw*%2`+r-N Dkz˛ b%'4}w=KiedvLB:f@ ) OSVc"S: KH٦l>AIqz틗mfE~,ٳKhA$lRu*+ >5*%(6oe_HL طTz-u>/2EQ_E$v%`ŸN~%AG4 ^H?-|Av \c/֮z*&ێӰz_cYi> & 1)mNL .5L=<[!9G(QS 'I/{RD/LGUgerq}Tn6Q1{WCane'LVXI n^zz'M\R}NQ7jWf۽9}ԭqB4waBͥ/oຟ?}J[R i4jzҘ? XCJ(zM- N)~ SUa/. h3O80.cO }՛T-!kn_,bQW3⥽(> stream xڍwPk-KAz]@!$ ҋi"JJG@HA{Bs;I޽e=^yMEU1Np- G" u ` )->(? ~K8AD |P|QDHCd`@ P?3`(apo ~ug k#  rr2"U8 C+EB >> [ uQ>;HFP( W9޸_3 'l u:D OB'Ca0'D$ kP/ CH =;R58a>bH/_ep笉vVxx>@b0_w4@8zn^p]@8|.p@ ,+#!'xE'wˍc8"$/<$(  .H4pXd` m d[2g [hZ\?Q55L, DťD" B]#o xUQXo&~-_i8  ؁0[So[{$-_7@/z QApK!'ZZ r1](N&hܪB$Ho-dsLPo|~_/SͿ ja_X,4w8K t H CKƤ˯+\ Ppow? {pm:QL}GD~{/:$.y0jEo4B]gw'U_@-^rnvwyWq,r{VǶ~{- &^#L"^9 MU'Iv( 2JPDUP}?JPeh!̮~q2|b&eO-GҬF+?"Z…L*7&2Nfj00duB}N-[!Vj=G 2gae7M-'X„ a"<bOiF'FN㯜z\z6'Ky1V[,=IR\e.~~UPm$CtJYޮҾ-8Ika~z+`TZjIپo]*EfEZEv+K= idw٩Lv5SJ1mضLns=l}J8ȘQpNxcsתD=p4'.CPhGI;f!7j\Yʌ̤0+[QR?\ƫJ>o2Sny@{83-nhݎ`,rAxIv{^##( =X "-dߕ~޾%4KȄ?ͬu3_,ܸ86fִi>s4ف#lۧ{޷Hz)(LWU t%,%B3Ll=BX0zKھft'5i-9x@DXʴ؈K81.}NNdo1H[ǐ]s3ȼά%2f mgxW/qPHm-[^b<}PX=I,NɒcXC3)1}8U(1squbbEBɉ7 ň7e)Ey ~N k~10퐎<ޱFl% h2J$5-ISe -YLvҮ!#)(ϋRd@bY`5Б{tH_D߿e 0:,$,>S?P8&1Hkj/t jr\c,*MfeFdMW-ՌVHSk'IgqUJ ͙p]hf.c'V'?f#n<@y74)ZgjYrn߭yMdER$Z,_gn0Mjokv!!fOߴ]Eo۴!^3>ZqFut{ޔNQɀk=-_F}/bqArѷD2B򃒰_ԾlhF{n Bze@x]lxTp{5lHXY9͇&:[#?u`{HQ"Iۍӭ$O ~ ?jO7H-s%f b'帯vv?|~xAueQR eɲJehKJ<  {Kcn ~H'4_jKc]2 FuX|$6|9Si}j3r-Ay9vM씃wk80ϗ77G07C B3k^үLf{hj& [cxhf5[_ ʧ_&Kp;#<ƽ%+Sko+rW?[줂.03fBE "gfkpgv"A*e0uϛ!mGY$Z3U7y㟷 圾\9@+x:{EWL0҇#b{7LBڂO̞h2fIzFں<^un uNVra; ƾ\-xJ_/HK.Oi\x O E]~tXΛ1ޫʥAP.vvm+fHHrX˵9|ҭz yw74z<xY^Ncܴ.×& Yel&߸:f9/%1"^WMz|ֻn!FSNK.³/z:/̡?٢|Jɫ~^c>i֜u3OZ0%7Rzɓeyc(_ԖHe/KMbWVkD؏­&ޯa|15#Om@ƃuVd8ٚ  LALJZgI&\T^I43? N;93ʄ)i)(|,Q3ߘ$PtTb=s9X#)AU/x_Kv{slV˖9Himh+" ܲm0QXfl[Q0WǯKey_ʉ߬tq3Fʒ2aݜ]W}o{_J<✄MlVAMڧP Y7:#*+ RS/s8C񙺇x'Dlh/U6ύSRw(N G]DA3po%]m^ԗ-PȢo-uA#3<ՒuIOo3P洐v_7/ʺ gXH(3߶ ^UʩeOeLBXn,;Sik+'~B7?"mLLU҉[~h1}@' {:AgAAnpyR]\3]R&t{lΗkC]Z`-,6눤{6!ValI>|1$~|GW:9 Rg;[&W={Wɍ=+9*_}03%)rlvs |E''R!4S@)dHҰ;_tQkfh13GymlSR9 #gr.y :nirZ{Ɛij>%?b,KYӧZ=%c&:pCp4^q摪mΠ#!Y6Ӌ*&`7 39UH_.ڝTf5>oɥ}' F^C5Z7xBJ['ÖϢZ{c-Mc~І h@9ނ837u[9&^QauFnE&efZ&I-;q! &Zq._Pm#S?vǗEpTpAETo /Rj2.;-_@A( ]gGanVc˃6aB1{ OxqEr /Y') 4u94 ÔK4p=h`] OqJ|a7CmB󆫥r[MN5h;1˥pznEk"Kצ6>A-ӆ% MCEU:+ o49c}x]j=a7{LwGPUD> x~kW4Ո)ܞ6oj}Wم"w)ShkS ȔXQ }k\!£ӕItI" :QSkݧdQOí^k>}EBz9xC} ,`r#.i8Rqɬ %r]yUY~ױHw甂a c tzYnmٶ-i1Z}o^Rt?iZ@2Ic';"<ʽD2+ D?GXm;ܬ&fPwIEl# wس`sx-Wag&dv Q~}T̬=$ wT;]ľNX'>cZFxl\u DIهܒT >9Bj0nzYQ/,0ʩ_Tg (XTt>~C4jPAX4RGͣ}Wb?t~n wiYg+Cn bwzu Vc爛ͅw]}zKgzR I]:Ockc!' Ϻ.[+TIOO8uNiubl=2tFQ5?4^0ux<5&1@:peBzoF oCA4*Vi$ؘ*f ؤ,|ݤxE0h_ȀK ).N*=֜[/9& z;ܳe0X j> z_HH(gHQ>wn xr, "k%rcO (;ϯ}"mb4+S>I]eX݆G%O2 ^f. :]К>$U4dUE~`0Q6ψb_ Kt KΜBTHHz%QjMZ {Hr%uΟtѹ@xA --ѭ <9kgWFjWkE'8vf('_67+ 8ӗ{Ó%I 2ƈ!7-j{~,23dO hV%Bj TcuKⷦ7ϱ5LBIs=qe:> M_xMӔu2̓rG"0{ W^UHdSdQR6pJbRM?%n'XHm'? }z,EpI42A#w +Y;"4W3gˆ63/[E&W=T +iX(LU] uG.:l1SIuLһ\"<]ld\GFi1ҴA/_f]&2*:~xq8c5o"$ksRW~ 4k+ endstream endobj 912 0 obj << /Length1 2874 /Length2 24069 /Length3 0 /Length 25679 /Filter /FlateDecode >> stream xڌP #-!.AK h];ߒ_սEtyw QR67J۹330D33XX)(T-]l)ԁNΖv<:\@61#P@ `aab01q/މ ffi g)D<,-\@e@mB`8@dibd7rڂ*TM,.IAg`d`d.@Cpt:܀ lwOPtۮbon 6&@;g W;ST"-Pt,wM߉,:ldbbo`diig0%\<\FvlA܌,mA17H+@ Ӟ3MYTh 4vOƿ7kmgn035݄+PZ ft311qr̿͠|f&f@xog#7 `ji0[ffc,=:L 1~I$/S{;(^FV{٘,L"}o*YCvf{ }#  AZ_dug%$jc/]]@Bt9o,4t^i#3w@S%K5-X-?l™X(Π]Kۙ؛x,#''#OxA @ `dw;(;Qo`yE ".ؿ6.Fnn (@ђ(Xү (@d_+E r E*-+Ȣ@_Wb@T_+SE vG_ @̘AF& ka1r ]WjzY} u"PW&N&f6 aboT~)1:AdjzK~m$^FH2nl*g]AOYXy42W:cd -(¯7t{%Zw@@PWl-<,vDlgunڂNY@dlLoBvP6;Ѓ?h@txu95GWlX*6P# ڿ 4W?,Ustw+۫UX{l4ײC@[w ݰ8[6mT 33ײ 1C۠)ڱD|@PE? h^|AN{ 0K?׷5 h??col#Rߝ~{b[#{ީ&"êӵp@ۥMq+'ÆjDGMsXcyU=pB;>O>֐ m2َ\JݒU=%á3;%jQ9ƙ?qH] aߡyL_]OeE{kZ.Ueqn%!BK._h'BDa%}]]wV$@0~/V: 'RE̊&Ht@½V3k3 ܓU/i$-Àj^ύu=-t"y ?C@k1-%q=By8ccb&8a9-9Sh]FqG z Px1n|vk*nJ.1g%Jf:l AؓX.a}[z@ X_^}f3A| G-7F._as3$Ή?ղznώKh?-@ږ4zEICáٔ}#(S!U{ҿhKsRx +I"E)aEDQMpT쾋K $U+;x ]^E}}+y\p!7 Pf&@ OjUm WmӠ2kW3ѻhXy>cP^a2eV=uu޹)d$rE/kt\\fBC̳uׄH%e%nUsR[clm;2'ˢIJ~&]3bSfƮ|pTϯ/$8[:Ƥ!{w”}!ⅫzV[ )/M.-gL( A!fj,Px!Ohp_=R6~MX>8NMoг$J;\']N|w%KX{ kSAy*U SgtzЏ#o”/G%s.ΦdHEQVE_sѮSDMm1jw_jzѨVJz5. RF. :Ynx|YD♾uJֱ݁\W=E<p4SեƝ\Krt'[$ދ_vګRo1=g`IDE#M`4kNv֌B̝RL't+F)ޠգؠ#4Ws3 t'Қyy* dtn8h 7J…3>y1 }s[NKSE<$ "^df489Ӎn.BbU#fJlR!٘>0ռD3oIYE./wnץtI@2'+r8p4<]83BDԚS_{`*!op$J:' ,pط(~/O^ȦУ {V+|aś՝E2|FO'b%[3ʚ R(.yep?΅09%5<[ EjU|tVCK,eohP77ڐrHV$l]۱D\_/iϦM!>[M{hm]M/h^\*D+-72߭0n/a0*&l9bB *uF3_áMRdԲ]*3y ibM '뚺zh}Y >HE؁bH޽7dr-Ô,RZ<6Uv %d¥Vc DkWSv+$[4Z4dp#,7l~_N]s59x)Z"hO!pP0$}sWE+c-{Ӳ{#d52VlK_٭!݋@}B gqh,R׽nzIn/!Rںjns`DH^8kC"ў 8嚇kͶ2 XS7RBKqfcAOӯܨlШFT6;Śm<q8rfDzlkk+$] $ank P\ע7>~g. 7xu1+1 '/:3ӟlewfKTLêki@VׯӣI4-bW< D0!.%qt4F%yc:Ӆ/*8ܲ ݪF[A:}A_=HS'4[e+,n7 j'@WsoҊmy*=`nUc?l7tySzD9W֫s,)Bb4dxPGFD9^;䌂|+wFl{jBnۅ9Ǥ0ٽCF.LD:&vy*k(0.4L=Ynp.ltj}.sIypH,vu%=)\|\ąVLkDD*_r}I8f~6AM8"_ir@)j~7 G4yRvq_ ʄ9IB1<]9oENfQ}A`jrr^xONx[C,UB6976jN:Ec !XexE&Q`0G$I}%CYf4F/&ݾnθ[:"*t ҿG.ljUy$Nw^`T4;4Yi@5HY.2UB@Mع>!k+ԋc_V h!DxuN_6Oι??kbK{tDA}L BQy!Kt-3n1 4/T.&)ڂWD|^ȕj x\8ʇG{w3s!Li5S+%p >fg{$xYHIM20m//g_~VGm.f=9SA`Ǎѩ2K|]"*#erx=j<ћ.Y>Q;,I'K:d,I}%..>1]9ZgiOC͇EAkp MK"*ܡAU%_Hf3T5z`#DC`FD%nc(8uiyRb;}67d 􅧷sxB~Ȑe{7(K;9R.\"Iԍսt]5>9,~27.ف]At1@CbM\>~V/_F99 rΆ:Q>>o`B0{b{Xn5o;!_ ~%c5feU|:7yO% exB$ʱweʗDx)\gBvTh5:tsH֣R"dSL~w1%Do>OJ4c_nYyI*mll #[`R"dYfGUöDd4%&GHY枝FZNƏTϣ7QRh#sKЮz7RSwWT f?S|^C]PT|"Lݕgl;][f64@v1 .xdkYD9ZA #RXfpr k,*Ƅ:K7/Do{pD[xw^,l&7}rl,ߡnq ~3GdƐ8j1kHXfo=];v9SGl\U=sF "rM|dct3*b:`KTKw.̒} o|b\8bt(AbZx3.-eZzOJ^2f%tNwxC~4Af=zgoǮ0nFK7b6v+n^r F(\/bjUǧ ; ^s _"dN̞Nd7 Mr߭jȏhM_J}5,C_8D%WI+SIBf]R[Dz[}1w-|FCw̟ZO6&dhX'zQ֚h[5 _d P(v&=!f qÆ҄ڪn"+vf.9{\N \bnn@η^|Fz(EBuNC!lFq+T*Glbarb"Yc=餻:YГsh`0ckcgڷb 5yu+B񣦾#F,2J; d;8"v~.dRׅZZ#5HT,Y~/$ 6Qyoxu?拡ΧYl$/ Qbl'-݁(=VA_CЖX7rWDZ˨ #+*.,Ywj%] \ -;Fs} ,Z%}}B4\SWD;Ӳ# Fag;\4;ݞpNYޛoi)DC;xs#B\ ;oVe⁠"e7NFF[|B_3^MIx ~1 |6AѨ$]g/!踆U+N!m)UL m.TJ(}"֥P(l JB3O{Y(NT<s-}3-2yǪ]Gw4';MJorXg]>*Tܜ>5(#n_mg'^1JP+1x\[:Bs|m==D!+ƿU@(= T)ϯ (Cl#úG5H{妏2MMD9H}wrKܚ}ni1!,Qza*EK-c*ǚ!h)|w+{oBZ >4޳^:[$5c?vt>})[ {-XB~&<ȱ_(^'J} VZF;v+p}7]"݄D6#ţRAgnKcD:~*k 0NNN ([L"RG: 9c7Vq* vcA""G.Q5ҤDnP~c>5Yxwgȧ ĺ0Aa!8*uꐕ8R>'tK/:w'Lw/h|?0砐ih=Kk5"^ A!yжCΉ0 )P!򼢦wף=gQI@pf0ƠUt7Ua4ĂĎ[4jzT[&xG1-~Y 8=M-+8wk/FJOu WjhvO߾ɏyڅlO(,;4 bc8;X}BϽ9p== /WxfodUigkkZN~.K|gtF9$RdX|Jy;.5eY:5JKwbODĸ ^E5;-8Ʒ|+_Ȣ]Uy_Ke#=wfL> Z/HVǯe\Թ,K[3m=lXT;+Dw"ӍoiIMSS;]]sTBu!ʑnv*7/ec8F\RB%DxY䆆584}XQaJzgk Gi1p!)mVN<tm]34ؑ1ݒǢ,^T/ ^OFi Dh6NtY,B$z&+o]1Mk᦬q- ]u NE.(K(*YsAX7COyLE6isBбl"e듹a;9k%!rICfw9J32"'m{x dA DyxR#(۸;Z|:ѳzn~y/t[ \s>>-h"4Oa*)6C,0[!}g%*gp&"&[3 uG$}߫qUWM"7N %7PZwcqrE|vx,x"˧jQ(Ts~.%bbF6i`W y#43*#xdGۮ'SDrtf'. yI7Jq<-1N]6*5w)Xq6eߑ^P~@510_Ax$-_}fxy_&JH۽fZ 23C6\d1ƛ#Ć:O=fYS鮏k݄cHoOma ClM#iNZwsٴʭ}(,6/Q#`}ҍHZHt;/PFМ> m\t %wbNj {!M`Mc˗*e٨{RX). kUkyp]]Δ?&9G YRQ mhnW|a$neͥH6)bEHiiǗ6b|8SH0é l] t&)5G! uvɤH; XRTvAg:y'8 f`чpXh`b~qԫ G.aCimh'+D\Ml#Zb7⎘*F`7_\:v}Y.0$w!]"z%Hw^Z%7ky=$ć'='ᬶb:|ZR#Ͼ@u4]l FRK~8ݯ՗;QWrRW"@˙79 xC~gk:/% l/xJۗRd9mL>|$4M -3 Vjp Wϔ1( kP&`m 9M1CN;c T!(ͼIǮ3aqhk%vDH Lū|6lT?)O n7B~ $+oˑ_ oug<˴g9.{<:nsax֘\b2닓B)hۑ8vi6i*Gs;`<$?~' pW܀<\,E9r (֐MDdi4#Nu+$tLNa0#JAxF@IPcIf!| NĆN /P͑!}"5⨓ܔۜu #@u>bN@^@Ep"-Q;͡3v֌4Gh2wUNmdF?+1kJB7HL3ڱSLT7[}~q# kc^%jTÄ[)+uv졬KoUb X}ōTv 'mW !rK2!|}w|z8,BITMzv:S+aԀ(Pպw>!qtV ̴pV@N<9aeX?/uKӌfv#}QQ9~;3$2z@礬| *ɛMwIb3.C_}˃L&y-e^jIh7|uuRz_'^qd0V1L<VE UN` [Ty7ϋMR|A81#\tp / 7؟3S`:;>zcka^a%y|%Vx:+@9N!Ym8#p8ՁH WYqtT䛗"pG0.5-# RMfy׶8xd,= 'z~Om3ynZ+@%˅k̸8YAL\PxÅM|A|4øL=Жɻ`8`qWXd[&Z?2q+}H1gQ&*X|Pν"Ȳ(p* K 9?|I[){-Rrcnk1e=nay[+KVn3}ٺ[B6&$\l TtӏR,G#hND&sRtL e`b#y]k΃asř6IHb\c|]S+]0 WNS`I$rk2#>#c~&U3ØVRDi~:%9 Hmn&`n/qI0 Jd%ODVkէ;eaqE K?G1:1!D8kxaWR?}&,C֬KKY Q'|i[Ô,9U2l{ʜE+l;qdt[pW_xޮ  T H yBS7r<#LM2c ߄YCM.`4eZ(,yfGS ;.y;ki#8QL90ejX\mi#>=2UqwY.WND ]b.ӂk{\.JbYpa?eԦeq5FDg!8,zlx @$DA]-RLǨywG*CyobgϳjEd#{]j&}ky<~ $P.kFQ--U=wgppш8yqHG7Nя%.F.v_1xު>'?ܳa0 uj~F;>U.6]Ar#_jiRME$lԟHFu۽qn^ ~У)MP1?n?Fsd',M`)(sH3Pt6Oxiэ{h0Oe9}E5GO5}k I&fTg$!oly>\TdIqP"Vz(_ wgaFH1Ӏ~y|$M胈To5%B0q0L!rՖ:SϒL,tĝ_İ?j:qpsg̡cYyfן mI=F5Í zzfEշs;\1zS `ٜƔDiNz˘/qp*ot$V 5NRGgk&\W0$>Nz. K@ޢ=Ry*;+ WI-gccL@YpQgGOC`u k}xj*|6)Ru[̍L:sd':?=gGwf~Q XNMN5b{7,*QI%8v8mo_Qn9im 0/~,-'F6Wt\C7v R=d @x]VK1Ұb=7~_֛!SoTh%@\=^;wIkC鼵hG *;%oU5 `mF%ڧgAj^w KÝ]cG5c1׳Z=OA\ OϜwB72h]DݷoG nctMŸ+#2bGA*o A%pQ_Mglts>7?B5\ûHw{8.9um#;J1CD[ عs(k [$l>Aif ǀcOTwsrZ!hSLi$+S]+rzS{Io$YϛrJ=Y$5J8񫦪`QFƧN+5uT:#5pzg2yՖV .{th]9նP Ӎ WncTB^^, R^+?6|퐫6$/=;piW TX8,OM8ZqcZ`;URo?~ΐZ)B].N"'qFqfryB0>˃P0i3!]2HSij<zc~4aɐ);< JMk=qKIlSSr&S:%'&br`nc &,+ZI|5Ov?/|" o,HQfxaypqo"Mjs]=+kh[ڱKꬤgSv"uVAЌoCWjq :;>MCLkΕ̏DA(Q"8m)ړoBPZa4mw"(fUؤtnxHap?ʿk !nSaqof3* A#ebKtMG"e8f0ౡzfrUNђ3\Jhl ]hm4OY$jti1 b '6xgqSQH<٣T&ElL۴Ә1 f.ʗh]ϊtw;uBvaqZšBӳ̽\G)*&xV,p4XG(.int>}* XPMV:!v x _?yhReypZX#*'IJr#lXOD♙$IĩލTqoq1L{K1 :?}lG`ęl0>uL J@dxlGH3e i7KrLC9wleg_μ5CX5J>Nd̈́>wX?¹U~\Ai:5ߏ#P+ЫU Tqlbm8m4FtTǶ"zwJyXY4NE)JiP'PyqI Oiӟ _OiK.Tܰ|F|?zp<'* kެ7b", :;^jW-U@s!K{`E9d;G 'oOGO%nk~FKxx~DC@H37;;QD&ᚉXe%F Ԩ ȩy2CdcXwCӍp+#+CtuLB+ˉ%ogI q&Ul$h11؋5ֱM[(?mWy@@@ѫN] yr!Gth&#Nz0~$ؗCn못vtH(.Yp@07ru/]X9Phc͟GJjZu00R](,_Uʭ,)gsC$ےk49fQye'|N/m@4Z~N% MX4h 8"k/Q2*WsҹUY6B耄(X: Ls%{3z$},V0g".`\q&fp z@ݗٴyqv-am3Xg&)5yA9WS윣I s.Sڻ_(W ܓgHPeh_QqFk/=DfqD\}8φ-4}R6Bu>U/ٵHEź)tCwmYvdS=eX!]`WJEcSߡǮlEXK#ȵ 7LCXR2M/sJafN0Dy5Tp }D Wwɘ5}ߣXlYaY%:#$jwSWRWY]=Rg;I]MUȁ#'H FQ/8oUƯSqumvŗKRoZRI}Ι DwXOr ai5aS,mBtV6lv4\]b9Yd]A\0%#$, Qzi`+\q-dtbȚam N Saauȉ ]Nx"GѬlb Q ,Z}|L.&HxL ~ ?` _?yq]Ҵ !GSW :^l'm5'xEJ?E ܒXDU"Ζxl(k&ח$/'ب,_;}j(gBEXɀ|We jo9])tYcrgʱ/(гюbO-ueYhHՏxqdZ d2~avsx~8{[^[alȨ_bV>GaTtP#sA6G,Td @^ QUfurVsO&`5EN.CUv]'2 &\XWݷ6]OTAjt!AT2 23HH¹=ЪoP">zn.Sˬ&rKۚi5[dݠjtAVߧL9RIXXr+Z\MI^FTqjfеyvgAOܑ{`ÝYat.6i뱎c>n5JHJ%)9OrБv"wSZq&'jQ'Q.I(TSoH,%vw@hhGGeg7jDxwoJN'ëcŷ{J2+7Rjrs S߂Apꀾ}Ni;{JfUhZEbD&qIlJkoe^$ϺXĜ1˧W$ `Z` _qq:.?[#`|u+kWJi VfT; ghk9~@!~v%(α ̗y[s6Т:˕P$l4XH`5Ovl|Wu)Ώ 0!RhuX_&2ܢ~'bMU-\\~]E5.”nMV˸"0:Pz fA rv.;Gzǽ9RV+='FpcD9.ݧ [ TkPEC0#΂bd:uQ\DUKbϡu;"ɨFoSQYVJr['LDF9Z+E&p?3^OrQj(0 KH_, ?fPL71d!hJeG 3~l7/E }QhPҐ9 jJ‡g-؄"EÕŪd"p-#_:t3wY]E.E(4A)AtqXQmD֑xM#1r|D3N܃/g8 0=sN˨zbǞ מy_.K7NDfZVbS.tk  ]@JotcrzfuўGVy8 `{2a{s}Kާy0iH:_9ʴ 1#"EFlT5T|+$k2^QW(VFc© zc̑c֣N. ,Tq^+;]!Y C5MJVE H@UpJ82bkH67?|~0R9-gnVxh1rqZ1&&!zݔS 3uu ~Ic<gw2M0= XPJx+?'>eE:,Ջ- B$# θg',\7?5btYM SцpD' ?Btc9;3:'>[kMocИ!8g e+~.kϠچL RMUfbtX2dQ҃2/ljvsBYPZi;W eGf͜Q,Flj,,ȋ2  h%{>{U*>N`4`!:i$ܖèY&E(؜a&Z.OuTzPi[\ke%OAXNU!XajS.8 8rEE%5Bb/R:46fn'㸬Annc̺[fUJ@)f7;dW3fPlZow>3mT'MPa{teSp|7 xhO 5>CQ.Je c./)-4dHvV*>1;I63E%O mne_5Xȩ2l?XZ|ξQFgEvp-C. ;M;({ t1O9P$8'mZz0U!J\d)v$~gײ//ո eѽ;-kߢ8R nₖB\W_{Q?Mj7fBZ P ~<."Nہ04} wBeFH[S,=15[We;ZysU«p؍_c0$EC]fa?z.#ڈO$fp`{!5CP7EO=EPgFǠB(-dLZ:6|F9yB4\euI-9a[Wmy LQG涮CX=9[[Ɠy.5c76#tjJXMW-wK(:hV]M& 2#?s!\8O6ö]kce" H[~m!d8\nCژם>~irIx-#}knlӢᕴ8/ŋʃ?;Ƒ~PJ6"C1:/a<[xbR re!W$IcFj_KUmךG1w (ye[ ;Z0ґ}6Y,w7@B2b^,Zi#y;tثFCu%$бy-މk8IaoAUhY%-Cҹ$p߮ݡ{`)Z39Nj.D)zt*> stream xڍT-wwh4N4$84NCw !C 8 @p Gf̽굺{Wթ}jסVd0w0:@8ف) N.rkY;ہ2뀡NHA&6i8@ \@ ?PA9@;K98z@-/Ɍ 8@ 63TLLf`gJ$l(nbe~ pvhPW97a=Of-+k?n&P0`gm8=pMe#g/ ta33{G5`am*;;@99<7q531}s+39A؝~Se R``ks7_bn񛄹#6 XAg?6K3xwZ? |$>T/'W0*''` ?jx |'?gy;@< c:Rj:J2')bqr@~^ 翳?X  O w鯍awUg)L(_ 4{Gd;Mېn?_Jvq~ ݀o.MV[Wy;$ v_;\O g !`u'o >'Nϳ~^.)1s0w\|(,/.^^󂚃P6|L`E=Q>^oӟ!pHsLA ߈YA.?i/pX 8|.k/ܯݿs*?_ߐ繬ӿϕϕ<v3qWk|? }~XYf`393` 271i]Tf6Eh=&Rsuf:Z"i ʶ ӕ/Z^~0ӘmE] /.QGBΦ%띷N-gNEw.xnr}e#sʦآgLfi(YpOݱfqsƟXQ}lpzVhq9uБ!d/cG9+lh,(T[U*.0(ktKܧ2^9ZVBN:L_"*0M sc!+i^F<?b.t&$ k`psqUd) xbO'& wʌc@IAQ{+'z> CC;{O20O1 [דL2r8 _Rd_ڵhڶbvTDsXjy^ t _'ļW97x luxI O,#t+T0B:0GbvU+&,Cz?'1}/B^M17ܲ.R0@UJdX#X?C]d6Z9Tb7㷙7e·kqq"%՛ W-6uozffLӖ, \\6 KŘ`#4ERo/hކɔX~R0T_&O񖚡n==Vm&!%FO\2kL/FJMےQ ͼyne3/͋+.T}zZWQ6S09s*eXVAF]!昆rET`I#tz&5(q~@BW$kB)?]fwĝ߽uT a|}4+VZ+ANN6HfMߨ4#`L&>blˢ Wcm7L呄"5 E"J:›DzA(3v;Q/癢:>%W~ I *x˶+]K#+ݛ\(3Y W٢l;VYviL/Mt 4J̵OOuU1!(a4oX75ҠKv$40r0ݙھ,9pP !Q坿v!{j>7yکCMO<V5yph|BK&$>ƍ"qz PUoK&0(jZ:lLMԊMo:<^PT{ίϳ/#@=gMVn5.V ,栄bXV'wTLrϝe/ueJzyլsfk:q2o_#aԨ+sx!8ɬ$yYS7 T2?՟D[rt WG͐.42Qۼ|[ڍ*7nǞ͆ф_΍Y]F^shWу9z˄)sօOqRX 8^/GUJgQ/fɨjI+?Ls*K֔*6v]<5S8 F0cCqq(KӘ$]Z)p80 r0E)d,!! 7E Kbͫ+^n3ݳl7U:w={:_|˩vVuHAv20fS܏ Xq3YHFܞtH<1CJ:c dM9w.2_f_%Y9lm (QtIJn,yEu GGze(k}Ts.bS#:Ӌ:>!~[װFmBGMi?pɠKC6SlQ[ȑk˙'POƁ2Ӳ]]|X< 0 PևV ]l/ٟ 7Ծ413Y֕\@tϨs&02/""|{ĀއfPx{6mB AtWwFkKDB*wG6v9+$ h|whkClc^:^:z%wijB>%X8Ø#wT-HvE"sXqi^{ҕh7(iȥ\7گ_OTK?q cv(㟏G(RHjhFIE~ I!vk>(xYCTe] \Yҥ-u0+Ȃu2ӡ ?rw,VWWOzcQݻzĵVSz?JO99SXkqm`>c{#MYċJ1cM Oz/0k٧T7~Iz2 `\9(,*^ ?e)P4!>ҵcW;&A%b219)fj%)"a ~5$95 񊑂ND_e˽F XɌL u 6Lȏ2}mpm.iQPٮ`Y/B4b_d(;VŲ~w:Ll'?PQ"$$;G8$ky+4\2>6To!L>G{ZZh*)ꕵ'3yƞQ^'_;ǃTG)rWzDNX5#[#/ 9JYk:Kߦ5F;Y^/ZH b`߈Z;6s}J |\^_W؅Dh.Ϭad%>QȽ ۞gyF –<li QnAkp ?[Ѭcegq;ki15!bhi@#\H\&9a^%vH'R s~Gb"Ek ߻'>JW-f<]ubz: X5ϻvmH[yCs9!T>Íƛ궟J/tKhkң~ }ڳ6J+t}qbLn u8``z0܀4|XBz7?:O|saߢZHmbI c4fciL5٨q%/KPiMy\4rm/ O%dPwKi&j##S6ǸI{Z6q\xOh7GmT {X\ڝ39->!X`%45wG9^/տÏ~B-ҔK\]X~.Y EA"3>KD=Zi@˻w湡/R!BJ4eq ~y;{K%Q0'`a}P窰z7ׄ w " VvO[|+O!q9&ѥ5L6U̓CXrvIbpiYa;w_ƕ2tGZ\0SJaGFǀih~]5n! uu'Max IaI'k_j*ْLZ"i[ʹwj;Ԫ*uX-U_N5r!hL{yJ‡yhαnh?,Pm2m$2Dwȃ VH4<'E,p"o-m$VL%ͅ b^NSc/)RղWrh ~Qxy/ŪdfFE* ;VU@i2/TVQTJSy6 EYBXyZ=fKb&$gգjnKB`3~JH;.*f.QDߔUIsZ*ٍٯ1P³b!V,2X#kßrgVJMͅEu,2+I`T!@ P8Yle~{f:" 8V{d~AWzuZ"I`El]*uUF:@ *xVsA;s HLHn#<eBP+GUopql_P I / rٽc͈/IǗ@llC-눢e@A?z(HQ׫ "ï C&z&v?Jhm4x|&zIhRr4|L6Cљ7Z[d(ŠOI׏ۡ=ohm ;AݜAഩ*h.R5ɍuJDXq=пIld!S Ԥ$L.z7) (U^wWb'+g%fVHyW0}%ɵGcoZI)hbNZ/0d1B17$;tJ; WiLk]G~N)H+u[B5a牆 :i0R }ƺxu]D1+LBR@)W:K[,/_HY UvE@,&1;6 R=mș|yVgЧ \N;l&ӹxU v{n֙3J!j,TIs$3,}k> YϹs#{>XZgS61egbx|8ocE}:)v@7 Eď<.[2QM_ZE'P-ON3փp>`͞ݗ#&n~ p BY/vq^? ׈+"c̜_Wy%­\F4\T7vZJ"ṛ5Hy /q:nn}~gBh)\ 7|e{%qO;/`C]TL*wՁ#qʩz!׀A,l^UrUO~#,;"vf^ uaE٩-{@Úrz$(fm?g;#׍g$>Ex8EGXqwE.t&*Zu}}l(m۩}K܂$dɞxWiȃ,Mf\uo=lA2wWH/yz-LCaq&C9 60^d'XaU=Æx/qukMҡ,=eWD._$TiV30G.m8(/dGyr'y-#CM ̨W2ЦADC.T![}f7kf`u" !SO<2"=д ,_B͎X;wغI5GE*Rȡ5D@؞&١đx#v9q|G)B`/hyj?S/jG_l1הo.{S/fcoҀwoЧI44=܆Ȯ3TƦ+s䭾PWwZt 䈽]wv9kb}Q6]p7m@{_eK0-m[2cZI/\<2T>d#cmHZQPHw$[d۩xg1;6IT :  U W(ȽsT },ޮdigR{0=:7B)v:Z'}/pTCr$q5xNa#j6V&nGiZeE0퀹vn$U8E:b*Q7 pLt- ^1QeQoX[۝VNJWHyK)HbQO_&߷ͼ&e F Jl]r0ejtD-tGvKS~H~E'Z̉pO7zGzS"M^RF-% jiӆ[-۩my9)M~$\ u.l%|˱f%Svn"4d  J3g#:sV;%(ַ]!&Ykcv£~.k%[ZR< j%xJyYL6$>!CJkSR Kj)ڜŠxhaHe*-1kO`45j!Mӱy/=UЌQFNf^TBl}Cĝ<~4da1h%N"΢)t|A$p/Pjbi(t}1rw0/O/*{t,3~0S%k endstream endobj 916 0 obj << /Length1 1430 /Length2 6441 /Length3 0 /Length 7410 /Filter /FlateDecode >> stream xڍwT6 #F)a l86"H "Rt# %! !N=;g{xOnQÐ| )@( J 4 l0cfJ< RR~|B ( (() oq'& vs&8\.oЃcgA ̗yfWe;5o-/C|cl.65ĺG(H0f3anEC H?`»Aa'3K5WSoJRwsBb0!4#1Ak? ĸ0Np~ (/7 " ^˘ ]@@.(g_ACfNkxN̟r!Qd\١ˈon-r+|dni lM5|6hb5qޱmw(_>7 qm?BIRzߕG̬Wi\MśYLӱ G?1E7vͤC/\g"p6Xa"EFoIwrxOiYˈiOinkzF؁cRtԚq˭)%)"9 Zh-)k}7:wwil/O4mʑ d֤*ḓ/V-lyJQ ei]Hg: ,O Lj#PP$Y4GI5D*6⃭-|궋֟j|Գur.Ӳ"$ΝHm-,p0@͉ԞxE!"kZQ}k'tL]5o=7qd8گ\XoF}ҏD͢;R7 v`AlZ{>_D˕zp|a~v?1>ސd`=c/V&if?Kb L񑽊p1X>[S}ceoWu[K*ʆ弼GQ9T x;kWgt%kԸ"(\i? Wm)L2c)h0U@y9f 2 NޓdN5cdL@ʧͣOo [r"WiU}9XCu>rϪJt^+V,vr8zR/2V#ZPgri]z\*_;}1>/nnR+8'kidGQ(NK#c{KS?-Z Ⅱ ݫR^]=qTO7덤#YSylk,S<"{znpe7IVc>+>yɡ{{4BlasX!{L AȬA񊛓mtQBN9ʹ uwA|hih'6_?>vV ^pߢ"l6&wiΟg.r$2W-} k2KNOVZŽU6H&kq|pNC$}~&nQArWs>mǻ &;.q<+ܩ|L=weU.x'\/Ru2eD^ fVP߭jw[m HJz3]Awר&`Fux2P祇u?G"=0+78-7*}Q͚zXosm+F>B6w[\1Fi-A2܂h{lFF֘‚:rOnN?m9bl:!/l '$"XZ@. 7˪lֱ̥r&A7^&Uʿys%JP#Yeu6' sݵM|v IO_\XZ*Cٙ~붍Off&;_tE'xkWLw]s GƓ^LxnM̮N>hn[:YlޙEҷ\{綕TCDlbc}\;޸MH0.~ˠXI5:8Nli(HW2bL7 x^w5x&kHaQm>D*kz%um3i&H P7_:EzkͰSnqQ/eKhj9Xe3]DL%<:YI%sWessgJr'dq7H ExgJ =2fR^i}BVz( cYDQ:s^ZKхsԶ%%~1-b;Wd:8O.ݓtY/oZ< jh.`ߩ ދ8»B%ӟi-3?Q=Z3ɮpߒ=#4KW^*Wc(V JaRʭsz2Z{<Nn3D"Bv[*<# bJPng$jzh<ox,,AУ",gBJϚ߉c^`[`HtڠFpV_Z17R7kV.3 wؑRrtZZ{ZE) eJ|X>m1ثQ+3ՎH)|ΗV$qwq6xRicӝ24K#""6ɦ[S:N=4i7L{ u3'q36g^ۼ8+}.J<eE̡: !f/NJda'r'8+ g{8yi^ylʈ[|9|ĵ ~[YW-`EQ7߱lq]3%:NI fEŷQUvaM)mOnp.VDd7=: {ql6Q;[4دDÎFacli盰[V̊&Gǜ9R礸vCi&쯐_w7s x%^aWd1-nb=k EB&zg^!*®GV]< u3oxpo|.GSip\U&ljMƻwQ=[%۲ͤUc'fAfݼ~X RE[ omWژLg/5:]F u<{Km7mǽuiVmBʋ?kH)Yz|TʵyYGD[GqOH& yKiri1'L <{%q O4(1n35~nGF.tFGbΩZRy~me4ljtЩp!Fa:I[H- ݝ1,@P kvw{?5qb~e' eAڦ)O=J0O3G/)^,M΋Gw@pkGjuN%hj|5Vq\a)(8pʙ* \]%H%4̒>mΜb-8lsV]t K>6g@1qp%CͳsĆa4Li> Ū4]?:+8#DH]H͂3x7&Lۅi;/rldGçTvxJ\hCd>A5jFnp4]--bԆW串StrKG덏XH JOX'oPē",n:S=cSqd4/߯6$&t9/ܽ{&Wa|tˌ5%%d7Fb1{ud(>CJ9\籙h4UJqZ|[=xR4Є]PJ;-<ꮆנCqűDtIHby"b nFcòCv/++Gq=Jb#vwxV·~ouRzqBv"ImQ93^!ESeDtLhYG ~p|ĕHpR ^EB z0xn;զ5 $ + G)[^b"Kl_^9^ԃk7=(_>:I?L#й".;A/( cql`#NQ۝6ogoXp5PXP endstream endobj 918 0 obj << /Length1 1544 /Length2 7256 /Length3 0 /Length 8283 /Filter /FlateDecode >> stream xڍvT>-tH3:FFk`liSiA$Dio|9\w=]g, :ܲpk5D||<||,,bvsa!w[! <$,w(XyBl<58 "wq; Q:m8 11Yg дB8m}  G8/;^ A8`7O-]371\Xnrb# <``726@_U@i{S>!>M=%(Z9C>ʑ]@N&9V} c5"! DlA8@ u_k /rlY"0rRf5sB+77+\d7!9`} H^ /u$A7nb^uAlQa{?z7DCx1 ;{`܅9Dc}XE,ָ ~ n?s<[u;M%YTfkkȶT+kdv܏_ehqh do\B[Qߪz\x+{7 T.Fmn ߿73 ):w MI|Ml8^-/PgƟp9\mMLiLA~J<:'\_yɪh,yغswÜeBT56nM%Ź!K0ڪVkw.ȝ6Tߢ~EvzNFpnFcKMػ[S-F)J*3W+3ɾlA%TpGٽuxu42׿Pes^n/ ʠyNeMFv\>F sy"oz}ҹ9*Qz9JRdeъoe>^V"7KN~gggi9j;IPY WC8twOp1h5=/YrMvZNF3fa&i .&Aqfl6;D6?J^, 0~ī9a&#%_m u #[jY~7!zAacz3YHO2gDa`( ZȮW{{F8U!x)-"qhtE|~漊_.1y2M AM-X Nݘ`݇6:;P}nB #q~MeLh jO+fЉw3RR1CAXL8(%(6 WrFoܯc޿*j('1"-P)߸(B7Iḫ̌ 9_VI-ۙ=J$X?Jz )")rq[ x=NA ȝ[|]/ji)21pٍjInq/XJxڽ<% 9l(d>ytMō9K(ܔ`U(v599:`2@7= YxwX1Sa|JU1;Wr3:}ّrhQg~ ]h%y4CP|]  zR1hwZ#)}7S_j)'PûNH,Z1Oֹhi`wʎf_LUcMkj&ë5ںb=B-ࡒM W4eQǾ_2S~zʥC\5(şku[ūoK}cߖ9{rdv&Qɹ4́p'KXѦw>{Ë )ܒ(K/ZoCUOq8~{etm}XjɶޑBaר&-1بt:Cmr1֥$ppp!DM#2Q~nZX>o/ H+)d|Kb%] 97vJgޏwVuwqoy/ʝIvHrr qqn{~QFvȖ@{O#LvBC3B'߲fRx%l8f]bw= qsWtN-xD57nư1 c&&eәyugByFi=%oovГMdʗ"= }a)#7ԑU>;'+#Izp)0,<I^Źq_yZ!vLꂮw3#6*}vk7קfU*Q(]D R k_k-ʒ٢vD>MM׉ݟlDd),5PB68 ^ RJ@+iSC *&+p2&_|; @or/ ?[5X8}ADt3/%3yU$op[m)=[N*i1OoP˭"s}sO$eǐO=aF m+:3{ufDv{#.![LqӤOqg{\~Q7j&_)) |j9fS ^;ܺbL3ħ`SLB t- @3%;Dp,Ϝ[,35>r0N}'OFK seWQtXۆg(lXg: :|6Ir7!\Sko:oc oCW^VѪl<"eq2`щ4k#yʘP,@/&a3yʊ|`V{s$$IuAF9"+!آN*3  1J.q7yW9xVRB'/Z\!Io/gKOD ䷀S__.*bhW۶YSPC/Ml,|6laUFxuC1+_獺zt @kbdz;У-nD4e(bL6ܰf`=ٜ~v#[zC=6Q3,1*]hSb㖗'743S}8b3_MtX/R1[dWK2|Iƕ׽exvTu&5:cdDNy'Xa ΁\"K>ڦ6`l';"~ ٥hFG3:S$r6asQbz#?eLPڏdx_kWN2:Qm^6`RǧDnjRV?\H`*uyɓ̵Y-:Vxj&\[mSp22V_ij2S<,MvUrI{FhSݻ3=V,׀9DOiQdzXNgʼnFN%hJZt{pڅyHyz[KʮŞ7wUiyN^9\J>&)?UJMjrtDxu6Q?r])zuxF 4 ([qgԳ&m@+TŚ!0B3 e ^879͢PC5eI3I]ꈕ$>ڰdGc2|DC];ĭ'7 oVHPR.(Z޹md0jUbZ,[,A3Sn -~N&x*?\6AzA]]T@WrHޱIR~=ma]2GK =KO׶8 ei|yMPc\ fRXUwUM`lzUMlwa)#߿o%y\}6\*5'kF^k^eO1gBI;|¤3= [oe>/6e]v] -}pװ_Rʌ5j!$B n/$%.¿} T\IQ@69]rAzY'<"gm6} ,|GC'}*w Fv-ݎF=2}Wwh)ח]p.3oVt mBl}3~fD}r6x 7I~>HWK|㙃4YHA-<ѹ Pju>Tb#|av4dp*`wԬqR(\4O(t+ "D8h\c@Uv0ۚ}yUZ$9UdO/"Vw^s#Gf3nE?Yx]JS+3lx$5fiD]x}f0` S;piљӱ5O_iUe*1Nŝta\8VeYTE^?݆5 6/S˳i[ߘO0W6lGɋv#7KBrYc4dz7Fᖅ MԶWsU*vx5rxT3Ch :QB3.O{<<"1R5,(9a80t׌"gJ@fmNJHx\:4o#^;1}p{@d!;}%ι*1?~ XhR8[dxd= t1zbReAX@!g#- TH侈FDEG.6wYdlkFJlӞՏ˗֚41\v$p#E{n8Xw2`rf2 ["~/?2G(U/a{m _OTo8C-JiʦƟx܁,TTN ]-N&a]OvS,n$EHל6^04^?xFx\,AiIsqsb"&[dќ*.̜gvmZ͈ߪ4yFDŽ){s5 ɋ6QK3ﺍn xYu5¾=y$1tjFϭTp&16Q |xcpjUP( [T&pի^Pr7OzGpnyGY[ȍ  cW#aQv?K5 z{Dh۪\H. h)}>%{/O$` rV+6 ewWѴaZ%R'ML6(8D#Ȁl}g=7] gW^!7e//°$ E` ̶}1)zQAcMw=2αP3..1֗K0VzUdVǯIt8Y̟d!M6w L(+vQ޽wU:ʰ櫣wvRE-_, z%NdÚב܈pҍޮIj9 EٳovcTO2%"K7(L]oFAe{=j;e>6^jwW!i S޴=}S#*RAoVOqBo7qlTąbDL]1+v52}/z&n9̛{7%󘮆e fN;/"l> ΒG$oz 2*YE/N} ?0* H?Sy$FvzSc{ Jufe55>EpaǞ$\q!F96+51[k< #bqP)c:_s`i EIҧ*L: n'&Qr-M[XK޸R?k bJv/!4E_enYh"ƨ4J^KL/W}rlM&v`^Iޞwz`lE=ZD7J}݌ޢL\:g&O,N@/(Ov*naY"vgu}!Bzۛ!a]mz[JYZǟ˵k2bTz٥T uID1Vgb`r_-*̤HE yñKE9Qv+(826֮ƦDS frjٛp{5Z=Kǒ74S Tx- ?6&yՍRc_AAuUR, ˉ 9I endstream endobj 920 0 obj << /Length1 2205 /Length2 17171 /Length3 0 /Length 18484 /Filter /FlateDecode >> stream xڌP\ cݝFݥ5;w'w,Xpw8J=\)ITDMv. ,̼1y33#33+<%/)<do]&nn&ooqX8yYx<1w{;3<=Ԧ4."@'@hjo xOj~K^&&wwwFc[gF{' Az;t:(&O P9Kjon l@@;wW;3=7@UZܿ n W Ʀv ; 9Pctpۙehllof 16y7pc2߿9:\A61d+{%mmv.'rwݓcw׳9/ fLv GW-Ed@333+zZ2\/{w @_9 pqrzS`2u-@v'2 g߇ˤ$I7DE= l<Vf 3'-U26?<޻pLP{]hA}?clyv7E[Z?Zc[S{aM5Zbyj]7CM9K?={_gd27N _9{ss?@wj|gj`~x?;G?_wBv#;?ޝG^;WG^ܟ^qn^om-=˟n-L.Nt?c7?ןj]N?+i|߉@~)_U}p}; ENGdNERlKP /x5„}KRny6LPm_=4Yt,0HGȠ&h -CʍTq> 0X<kWySb!F=Z/t2${ څe zLI [kÜjs.-A μwYЂG1I.} *kf H%ʮmle'/`c'ЉL0 åHte.[*pg 0ET>ۃȖ[$~>^tEZjOEMltLp.bYS6Mߊ>,HBĔlqL6c dѥA9G~֮DBկ^PLm{Ɲ[߻Y]&l/c:%"^`jÜ.b&moe)[H"Jħi%Ԛ&Vd;"tdrzj'!aS|TdbU!k*ۍ[D _QY3:ٓ!BGgcjM/6{nF%uu$?ח)xM[$ӊduZͦ;F/kSi5}~Ymmu8f9"8p&J@?YږI*_= KU;Ky;R7},U"x=a+* bu߫'rTVNC1zp$dBYS)oH6k 5Saؒ( O ]O n .aՍc)4 eȩ8(^uZW=6R4V=A҉Uȿ,Q-ٹZhlC 8qB_?v~QsqTq]{KzEQG92oo&槙8lH,ҝb2}15zϮ̔07m>=[xa=$[!5$_*0sP}UtNK85a:mh}6/[\U=Cr)E[N><cI&%:L#k5dc*,a9D^qlT{J5SύʛsLLUPq.<0wkxfCg'9Bd1"u]k薆+{}+ԚG V|qk]ٕdULGM跧V+2rw4>Y4-s}*T($`q#̦JKN,--%936<ܪ,-Q0)ŪHr- ?$8%$=qn-6y`Dr3-HywT0G,+>u!d)mL` GHʃ|@D_\hHWN,0yj_ SSo[ycG[^򗮺,-A[ *T3c2B^y7Sk4l#Y/_rk&!_rC}Je꣬ J.Vlc3qdßo}^jܯ1]] 5wFE݇0FȄsӭE%2ٗ9i qֳ cy큊facLQ!mCL{Ǧbf<pMX/+0k8ksgGoPwEEʑыNLVr "k_'2'nk5:o+=74?ѨK?&r7[7 E#1qЈ٭ug[^g{^reT%[ϝB"?;2yaL~9V-؄^w hEĽ4m"a%폟sXb@Qh.nJCU1eZV=6 +,bW'Ry`9ڷ}>+Qi0gUud4k=TۺOJ1crbhg!~ⱈ)|Xd׬IJ l)a%KlaX*ߪ_UIӰO6eP듷G>ju-EޠtKIf]lT8e.·ɟM ~sGjCF+xPIcć) ch}gh{Z:-AcY) ć߯]_1U%e~#x7^צ4Hًb#sa&͖L# y67ܯXooA=q%nqD D@eNq_[qB]$px!*fh*G6]ERks}j+4 'nT,m ~1CWߛmfHykȉU0?wF:cTN8_4Ey]fypx%"ιHֽ ;} ru7|8Bm/BV_HZ=s LEj֛z0R)ÖƦ& cpFUf j!U`\ˡsY੭UOpMIC&؅wHOv2?L":Q_;IiIChd*AaI1 ZͿ Qp6qkw!<8fُ&Y$Zmeogu)_PB8v\3k'뱑IG拫(?=^w.~(/R1>&_띠تq[OYg}I<>ظ-w9"EvkĹZ8&жx']x`ꝶHU T.9$I*\[y%#F6.|@瘠 EbQN>R`G-9 !~נ}2]d` B7p5 /u-C U5n٤qU/igF,zbs3aŒ_ `!hX5Vb|sq#QTFbyEIgvC7Qjq-2:Ksz#UߒA _&Blg ke'G@& {ޙBP[o:rX/KB7KS&8J#6{{GOj9I}"C1];%N} Լ?LhUBQ|R9=*Bau.C.pGހ듛9fF 0P?ZP%y}HNU#bH#ɯbf=0/6D! oZļ[ggtcۄcG&ԋa"nيڞeu((zIR3m0_,/H]zSB;u(qO/%\;F!ƷNP3*]" MrιBcwODױ;SQuQFV4${3}ϽS3egĽpCU (ڒKA bLY6AB/b! &ȟ̵D^0.3gIJݚGU[r8}'msl[̱3;m/s0)RUJ ɺZ1pbl菼`Fºx@8X7V"[NFjRFX;Flh>i:]sL%6GYDF_.) ?V.&W`_T[Y#1"=r7Z4ui.^5hoV4:YRr&%N+)M(JD`}@93؞0UQl7"T'W! 1qERjn(d,*><9x:jзKi2]r:< u^s;FCW59Bx{A}TqnCY3mYz*lLϐ. Ȑ&W1CAȏj.m>)mIrI&3O((|' 'Ŋ.!A䘎b䠖|Ě co.ZStLW#-:%"9rGZEhlWWs7At#8T( zS=& kXg̉q6qv310bNDh'ʨP;` [cٚM b -|-.ٺՑ:hVC>ڐ$#{bX:Ʌ3G@^5ÂL]°Ŗt{#PϨebLa:*-|chI;$łf7 ;HߟĦ#[زI[DŽQi;z$?|Oa,U/7\f}d4ߦڈ>}-v^TA(]'+DkgZEu]?>Cʍq P$!v!tb1}z09aCT;5=Z:&-u{Se'G-81s^|7\!tQN^G]Лx'_7R|HVi4@ ?& cpͯfs1>2qnerޙQ{V@PzU߽2n ny;ӲU@jnEw+aT ?dGǜkzcgi9ZO"b܄Ij&~)bkؒ> 1dFx05­HmnCO~,['/TZ[`n$&x̿f2;\lw4<×(Zq`nCZA!yCr-^9iN> )vZDjyG-*IR%alHcrl7Ӫ2eSδX9S⛹ؖJ~λ˛ 799w"\Rs21a6oM/Վ2ap \BYRnk?]Ţ%h{4ߊmVvJ<2Y1F8gH!BM;,Mg%܂q'Bj}1R#}v _zU߾_Vf:W*{ǩ;ѣ~Mg򷭎LC5o0J/P%79w+pAM GXHrhI, GǷsioWؗꍙSs(sj4aI4=ubqik?!ưl$i~5& 1Sbnp2dnW@{ft܀W;M.ؤe%<+i J<ulFW ^>/ThRKF n'Aw( x8NHX !-;;I#l4i=?:. qL.n_KVS1pF q2guFֲd^|^!2%P*zLcML^'p^Z0`"j%0s G.oęh=;+C9i<]~LڷMLeq#pfUrt}˴哼}WAz0\/"҅e 6e/mxWMo ddz kcV+qcKCTAjpV^bdةTS7cwr!BbiU%vk> R(rb^J`Ɓ֐хKaZ;w1rD(޾ᧉ!BrΗAuh}E(^+J›&*dFn8E&O |e8{aМ<8 b Rǡz[YbrAI]h\HFR,\ =2_Ս>Ѯ\!{JV\bo) Tɛe(]?o):./Z_N@4zrW ?B>V꧄F;w ס;7,0kLd"|YDg8TQhl 7E_V}jޝR;xd,T<6i3(Z6;\;'GMnk.o+$ʪycWSO vj01)!-T$6(_70#tqTS3AN?*b?ӻpk VR&&c߁TMVA)U ) ?RZʅ$^gڱ!a۝^YVZOǒXcyq}f°pk q6Qp*QR ZB?TVw~5 ƌ0%=Zݲc?/y .7S\pG0"L$Qq mSUDGa^rXw'1Lׁ(D?;4Z':,k^O'⌎!:|֦:TSq_Mz@FH窪}$㔲N[V2yF%dJ:i4eӒU';y2MyYX˓ 8L!+nZ&@GsO_AҤH{6P+| Ʒkb6wqy&o6$K.eS;{ J*d }K i&@<9iZEkk\,)ˆ@؎K?bȨ>s`| W&"<&|2RCҪ]$118Ep; >p+hSB`bDj B'i?&hs]C5䦉y?ǭ} 2UR6 Z?5l[fI٥axn!#dGLoL \##|_$54H>_*XLII~rDJ_IG5G 9fcIn܍Gz YtybsK&U(| 3gX uz|i'yyAjJ n!ڄ8<cu7r$JvW%3PpEGO5r.6kR׹YID+~IhJwLa}XÖ:I̺\jrprњbds}B) L"d 5!GԹ'x&lkH$ɣs@1?FŘu~qYܠ7I{t& q# n=}(o$\N7ٲ,9Y4Eڅ02` c4wC'^RÔ P50UMK1,D }[Zw`Q?q\AP`>k5{rGʼnwH;8YŸ\4qvWM4bNd9aXɈHb!եAP#k'xnؼ~Ņ H_CճT2)CR`.= Ԙ9]ɏ9XBH*By]t[.X«ϗr%GU(3۝q5pzoG"TPkͯU ]q3Oՙۯ0"ܢi- 9d O]Xsd[I}pܧy8>ﴦ's{$Rq&XzQA-'`Wꖬ7t+>tKw>a 3ho#޽_:'Z ࠔ! ֱ~w"V,븇MMV(qqgj8Lb3Yr"&X?ZE403EQΖ4v A+VSV?9uwXIxJ:69We<_NZ_ʋ#iS;#?$:/Ǒ!$εcKHʉzwI2v<|yScBnChEbO?!G@OmF=}c+U/:|tB BD Y")xB1$~Mu׺y=m?Ǜשw5b2asStQvWt2\66J!$ntZ[+YFq>д߻J EvMЈvN<~'QBc-tp ](΃i.m8Usz /Z*bip]ImgKfr72XӁX_Bg zs>x̐E1ͽB 6ֆP%Ch4XGdW(Ib?}E/JQ(YUܖ7r̝vb43F> =:\ {:Ǜ}"H^Aĸ~vW5n]p{&iOc+Aģ61TQ\P]#WXzQ:-HqZ| 78MO /<$~EhBx݊&ؔ :<463C|ڞ:E%C_-{䂿A<Ęi!ḧ9W6H(sgqe_e$ xt J.hzjS2~jh]qUHqc[@ó*F?[/N8Hn|Ok8. N[oUXbY rNLd<ǨŴt3gtL-jd(dphQi?@(gBC/Eop F2unLۋWG!tF~w><}=;5ׄ0:hD:+Yq1%Ea'!"~T&gu|sd:Ԕ GdRKʆف'skҷALJT{ъ\*0 iF,k>*sj; Z+lӖ~ OY\ZnIx<ړ-emeAeP@ُmxB 0Q{T{ q4_b aikorHB8dlIeR~[\c |(m݁2ưVtF*Zd13qL+AYwtv_=,+off%oECjb݌/XvvHNpᓡZcr {H )rBQl|.Ry4Jk*$Nt|2챳e>ܹs%޾d<-\& 2Luv+r 0wIz0UՓ /b~_>ȄÃcI@O:p6 ԾL"hkR`iܝ8D?4ѩ~.+,k$Qafl?i#l,^է j͗+ߎ߶dnB[ d $y[#īeO"Z4Ř}#{c@ׄU6mvKꄄsNDbT &jXLRBDŁANfLx|L, a"У8;G?a /3djw~&v_LBF@?Ÿ2S-6BC$ՅfNS"Iv&iC}. vIWB>{upםd`ꡚ%xo.ZpLX,>kqޝz&&4"]F5.+xC@ƘX0JW$l-2AwcÑ jKJёKlM1=tNˀ&,ƨ' S )*fX`0b:vpƃlvEDCLn6}"UQ~Py2Tj3Q_mi_?yR]KYuPz{yfӏz:WcemOX% ~gبL!M~up\7;ךDrEhiQئR݌XmG eX݆8HOcV&6, B# K>UaM";U)oNF%QAը#dFjfzO=f74{%~ug:SV}`?|B+]ꄎx֥` PYQB˗ Ѻ6@zn#eL#&cij}&vq3$X{I`xk}N@jbSed.^e3:뗢Hv5-sWb%G[c[G H+ _6I X2(? >{~3\&=y\ ͿMqllj{כ(<b=Э*~$dthq^&os7嶒O[.nG%j+ȗܫ61>m(?T dan"S2'KT rjS҈H3j`J1q*0" >g )Ǜ$#`^H|)21㱻b1Udz)3! uNy'=3Ë *&DaOnz29bRu؃۳Lc`V |V\ʝKHd~! N[Z7B34Vͻ,?\mXfθw|,@H&F0K[y&rؙRThϨ [| HfǶNX5}6֡la'AeYO;x6nGen/C^ ?9AI e6ўOY+'D}(F=^~J(gY$4RylX̟ bPǴUKr*ToO9/ʺ}bIH?_x<@1jx,oG5췌B]ъfc3'ڂJۧ \AnoN#WWd_,ae(Qf)7`*AWRC~bPMUٴYia.Wg?A Kۮ%;) g%%&{˛ 0FiZYC:00MH0sWGw{Fo'tq44.,R׮j|E胃Sl %y~dž rX$|> stream xڌP 5Bpw\wwww;?9'9﫺 tt3KȈhl 6֎t \!%iF3<%?vx2U5B@}GMX(cc t02ٸٹL ;d6@x2![7{3SGP|PR99i^ڛ[dMV%C31ut墧wqqӷr7ᣤ9@{g/Y}+ʦf8l]hZdm$r@ #Df/74շv36Yrt4}k-l@, @o] *)W_Jj  A}wp-m\=CfF0rW6sJ2 jhJWe7[Nƿ ^6c 1 Apwzy_gd: &f𿳃@tfM1'mЄX[$U%Ue_6Z6&-+yہ*o(amlG{dP{m([A4@b`e0uD,-S׷2t74N!c!7T υ9Y_>Z朖+HQYJXYmzv ytbeE mLl}{{}7xF@׿'@OgmZIulzLob &oЋ@/⿉@/X T]7&Pu._UMz TO7)&v@~oU/q"(7" K/:>wHo,o+72odGzPJh_d5;d Hn[yߩXAKAwubqvo Jf Z Vi#&ۂ߭g)tr#?bzGAE@?: w=``G .~ ;8$G?r8:qծ (j́2)?={??w; 4_Y14 l$pݝdbA UsWyfΏXߋxD?f*ykPfRelM9t Ĵ'EYqF`rw!PSs7s:Dɨ\fD̎5s&OEƘXрm!JdKMvzEpc)o( ƕI$vįβQfbBiP9u0wdd,"ﱆYZ aT4Z#ֹCy2 |Q b$Wo^!?9;)(,%~RP1rϷR!;7@GG B]m·094X$FBbƤ`$4f7ƔA=cʚ!:.D9&V"hPW$A6ݦD';KA~ZVo(G%ۃ@5j-z ';<&h5ʱkySWϽ_:9dqZ-# |Xf[mXm X,,f|x^g)%b |MOG ۂ&nxXy3ч1Rۭ; 9`]],ym 暟0k}ۇW:*9-{[`u,u^* WEӣRY0 ׳hȐسjuap}h&`u 3YXxawoВ;~ٻoV޸Y. Co:+ {![aL/,:nlٲʡ:lJ~Q1A|pje ӱwKC8"1.MB- oA;U]*G `)lFGCs5I7N_PZ6ZHJ:WpZ"̺1W[8~>G_A8,/ 4ަȀ#Bj`Q MDYX^Bn~ć.9}٥M"_cn:.M_u 3Kf/Z TZ 8yBfi!qwAy*wB>msm@SYBnNE%ž9:Yx?mڣ'1>d<#ŤkMX}bOҧ!&xcm\f(@.W#9>? , ]u_33LS7/?.n#ae:9`#Xjm椢68B'W9;B:KgI1ɚPr%Č:Ψ a\VbT)CKp1j*|)p@9*{Jj׷שͱ'47|v*$h!R@s`rKyvЏ{{Ft>lMU[8P苡L/ӕ`e@wyj 蚒 wZqvJ|Ƨ6sڂ%yFyY#xIþ =^wvGSOワ )r%ힱd^Ve.ΜVjjc[MhZy{] QE_#h>YRO"JksΈZaPCnxt"~qG3w9T63k &}م(?_AXV~,.U;Ȉp3A)o_[{)k$&RQyR`H+%7x.1hI0CFs[U>gVY l9>Uic #􀰉2vQn"q#вo-7 @@ARѦ}#}{r2ݰWqg8ԢqC(ə?#5l޾(y)7AzpvrNJdc94'bՊB Y{R.Aaӓ@6je%䉇KZ>P_EDj۳TK.ҙ7=Q{CkL,L_wx:! +71MM6g#]Zq^&ufOӻ~50wɯ:_lzuqs{7y]\KR\wB˖YJYBt2O.K;xtӈKl OI'D)LD;7܈'v SXa |3ӯxkNviq]KXٕgy_v?ǻFD.ikh.߽IxcrH S/C{P䛍 jo$ n+wZpǪo o lf ~܃-,jqa6>Sd @:L^Sj}B6cru&81VO3ʊWH+H&Sme۲(%AgA"8>f\|8]!oU`jMYbkm,FKӰ;\S_dqp+ny!|j:5cq'u;x_yg&ʧkĪT2Ը~vPM{sݷI}43+u2`.֔b"*zO5Rs\F*P>%fP{8CB}9c~dL9 l3e*A / 6brP(bUjQRJbsÈUMƴoK&>L#P uNGF_\~ڛ"+"z9XDM$N>nt755z3_AtmOFdGiSD?d?l&i7`rQձOoHnW=ۘw9"ˬҸZ7'Tj2:9}+.Vh%keReuP{Eܷ}O?.Fk{8\ +=l,VO.{Paxʭľff:2VoON.] %ָ&dt[$8)NMO/BS@h4ǯVScnPkGdy̘e ű1%601>,hbG{朠oJ@Be"Q1׳'E0(0K6Ij2_>vTw&r*j&ud$FJhպ(sʽxqz42Afk*% g wT%m͞W[M"MML}9ņk[M7w%7mĩkV, W@ՔlWL*UYxS*VݣDYX?]ʹh)I r>XۅT2}E \uDMoOX,fT7*bxqAXug|.?5x_y }As YΣ DHёZsLG,zL><Yre|m迟m/hجhV"Mh ;NzOnrѰR._"p7vNVOFpu s 9g+]ap.|*RA؁ HYvюuKyfmNEKG6 VsʏjQ;(G"_`UУqM=1 n'fy}fL${'=1cw U$v<2ؓn*_:A)a!aׇ2w o *JGv!.#j(sfqT Gu11ûFt!m]'A"ȧǔl8vVǯMu9k%اv=];e,0Bvi*ʔzO4Q]mԵ^#U4v!#2N뱐՘.1$U?y~)Jocg5]nfWfYUU}79W*5WFp8IΎ"3@P1Z|ޒu aX6 >>JEs'v$uzJ﹆]yBWpQOt?idrau+L:֓ܙa58fu|uʛLؽʼE)6kyQ9_:B]M<-8PdU0ɗOSIy~ë74!ԳP݄$g8cmV5-; 4E~:hAq@l=dZZnd i始KFMO}zha갹}:PB_?S0wcOba-AoSD+:7%`bx ƝcTIH=;DF]!p~ `ñrÈ৹tx ,Y]3~G^oڊ5)}u@6.(ܱx]D*zFA߅v9ir"Cߘ4a_-MI: *"LT$V]zK+f]|8=2#dlBHBnn4WMGV:O‘@\rD| wx<YxʄdK%W5m81ې"s:gV#^ڟ`0$рE0;]ë/Rco/6T!zL&u3`970p Nto<{=Ѵ)H翿JCqGr[{+ |Q4[b@ -Y}~ 8cdyUE .o?HB#vs#'ϡ폚1/')[9pyzm\C-rXӭ񿾡R>1cex?-UwN/fɵU;2)v|0 ģJ|(vPNp ,peř5ۥ%yˮtmw'g8FFŕL[6=_ j::G?IlͣPQqh<Ͻdoz`mK.iXN`%dU5p{Hm?'{1[d21RX9B5-O>o0wK;g[d5 á{=Ltv=ˉkHp+}jbYŰGa] >3Mol+4OTEtm+c#-E}1O1ޏ(n&VMC`8qۡ~InCMWb/9PM$[`D|epNJ8NHG4'I ߰V8}2eF9MORn;:[Q;_RI`I8I|1E;B}-Vl#.r+MJsѪ >Jk):Svb_ÃLz4 oӺF:v|;Pw'-Յtπ躘`~jŋT0mR2Od볟, "fѾN͍?)Y/1H1(`ɤ\2 )X*3BjQ D">Ӡ[uE(M>?ࡣnv]h"^m^ȺWF[`[7"UbATv4T*Rm>骥o\^aQRǘCO܈N@,*.y@HF}lNM*x-HUZsbcFS~|)z ǜLƵ<'*C"Z7i۰Oq\ %Y!*TdPqRi2eCR8A̯#Y x+Zڭv ?-s,Eg Zͧ,:gJ.ty:^Lي}Lk0vc[ižZ/+y٨qOaxF-Fs RN& }Nn L>9/Zn#q1OjU{3Kʠ Is^O쒓R3Tҁ8k'؅Ya0nndî.+WV>!$8L?aS::Kn)!QʵVP:7;hz:a2(P w}phDs6ϭq!B99 6 5nvP JJrw[T!pPb `\j!{qWSAU])t]fք br^!K' 1Õl$s`X_ET3˨<v=b~nz}"cxu}]-j-5!tJ뀭 к:ukcaFu+:ݵwNbUzl[p2gk21 $r驌S fW M^/yLU^5}_zkdc428:ػz{b aWW zCQw1t +5BMޚ"u-R>+^aF 縦iӹ7F"<ݫd֛^ޑ%E b*cIbJ$rq0EҝNG|{9OݟHNp h[\= ķ⫾He/1f 8녜WT$+!Ue5A\HbPX dC DT-g[_u\<%0C/=6UPQL)}Q;iOWrtw2"3|w^kI=~&ް=PTLYA֛F咖 eV OzFRዴUghoZ|1bd?uY^(ܯVdȜPʤasCl &R㒵&+ގWMTh'Nn/%*?u9ڴ<"+-t!d E5Z4ꪹĉ+=RFUȋrbv3ҹ( }Mw^<.܏FP=[*EȽT]Xu[mcIC,qGpK#K%@ϊ;/+TKJM@UCCi^>ro@FGa{pl%[Ko( 璩2u`\+ F8 8?1R-I5,khTkă:L" dϲf:կ^7WP3gkMh}b"a%yaMx~uyvl\JstX+ۃT YEL׶K%mQB'9KMpir"z檝3GVh< )n3dX +0ӭYT{qKScz|JW>DH獺:xj)Wlb$CF/֛VDQ5q`VK_r1^!_r3`IW:kNk=U˃Ua+P @KX\Sδn凇LoCIůD,O;2ֵD: ڲp+1/a /q3}ILxfhw[9Vw1}Nv`SEBp ٩}2uYẢ?J}ΰzxb^~8ӌ5.d˻VO#(mazG}c\2i+ڨMk-DsoEWmH هר4_Zr}5b&5Fl+vߢ Ah0o!ݢ[~!VoAyłEНCq<}4]ZۻZh`Oz=Wy1 5ɯ_I,rX.2+08qO9D? V6kh-4il=8$1u.3׳p\y^҂Ħ`.ZtyY1܃-;r |T{u JӠAR=Tc ]cAGq7KhV?M bGr mŸ8&cxO,d2ugS8Hz.J}fl,28[[sƟd#>6׬A~ciGxݟ÷SrOki~PO Jʹ,p#oV3Y&ʘ8qUD}A-QqcwdvK})ע/\6|JmyͬVr[pvkB n iة%N918sנ<`=CB_V)|Xq~̗iL,+52I[r' n?ô}]tn4|I"dӲ:bd}:ɨ!?ffi}h=)i!w˜|$5i=`]~0+u+Ȑ JO=Dr+@s23Ԍ-5Á]vNp&|y-*`A[\ZStQFS \>2AYl.䰪w L/ac}z{K0-"!R?\Z+b{@Xq^`.-b\NX Va褰lLJ؎qCd =0v~,3C_,M~T:osfSs˿i·@.| O8]iz|Ѫ D+Q#9CK'ym*Ǧ yJTD%l)U>:%}3SZk<RF{ ¢ApwkEi*̩X{Tnl_13Y(mƕw tBOت ip*zQU)kgu%l).F@G)IVC3j [-92@ ^U"jD<}@a#(IЍw*RU), dQS#+Jw1^"bs\"+u#]7c`rtMÒ!:-L(yʞxrWKW2{z'ȑD}M1ׅB#Z,UVmm)P Ef0vm2FYxhvt#kQcXYITu9υe/5f'դޑ`v_{V̓)iS/=cuw*WjJ^ȍW9vR8 MT*˩{|Ԥ/-+q(;^@4(oj-]T{zxΰ\^.!/{$X^Wp ۠FހC{=%!RiIFs<lKW_V5˵F&pQ6QªӦ%|*rC%}1`7EuF\r2dLYU8MPB̡x㗷Iv{ީ 4ip:@BUM#o9&ibȗd1Oq fK ;>\K$tvV4 Tno`%Yv8G i(ȝ͙΃Ѿ8 PVi9\#4H;0N"@*_myb"K*\lvT]^ߖ[Kѧz 5_pR aN~cJk!_de'gTpk$IIn[8%W=ri:fDYἎ(Ad|1m@ީK5&|Ț1ޠ0~_|\UJSIdԌ[)Z[8F P{pM=j&ke*_5'F۟OU#fg&]mjf19HS8pH;6"L p+|Dofɀ]QɹFyWtX;0iK=!$ug,bb{'hB׎]`_߿疾F&ڎht%ɱ~3$fN~1U[5ÌW]hD<7f}06/59iw~#ցf}R~JEjV)7C`8kr~^lKh)+8R]8%d5Wj*aa|{Pf6XfR  j7yig ~JcߣQiqI<7 Ӯ\͖9akzݽ\\eA(l6;INypS('L%P{+a @T^k\9hW&o{!>/$%Mz*c5m.4q/]VX\Jy&[rSj6#ֲkߺSKک$QkUք$[ͩF)I4Oo6(^D̼fÉw%DxHpD-݄?s2L{SΗKԘ,ۼ)׮*Fd$JQH{a;.HtX"10%_~d?ޤ@ @ܲʖ6$rv쑄i n1bO2i=~/u^.n4^] /qfB4K;J$s2/%挦.j*c޴PP-:Km,2Y"<]iPQZCb圐4%&+2dŴPMyQE!Bʈ}6-Up ^j/993pARwm 1̪3c16"ah<(«-J~!"UчBeELo>uX: մJ.+yng'X:9]~آɴ8]Rp|ͭAmS ʉr!J^Re0L%"-t4 f+!9m7O6y 92V;R<cI"IHʽqlKp"FfOGFV9WLCOH89xHnf%4Ah>?[M4&/sfkwdͣ(Nh)\~b֝{/3iHAf}(S^CfvvZ^ =ݚxّbXAieJ!aC"5xV\ƌ=y-K^9efT7ͻ-hR¦qia4|v?L {Y^RPsxv`zTnf vڑޱnG2xw^'\'g]' |ega+q+Ǧնݨ $m O6`bg{,^45g}A"{1a4s~* Id[,F\|_{7(lQ 6,4"emإY;Qp-?ǛU؂9L }Htk5}"诺®1;,IMsV_j7GW-.scJn' ꉉUxݻ"NT(Z&{s#ǚO=9~%9jAbU(vM$( p[@,HE6gm3EuOUU28у^s5Ժ_@(JE=Nf|mrJ"=׳,)OBԪ.d"]Ok܋|]N*Fo\~`B9? }B↴#L`ӓ{J#6tye41P{mRwY/-/ruK⻲pW걨M;h|""Jv@ /[sTFSD MDWS}-캎U抇U3k&:=xV=g.&*&E1 <[ C;U(Ws6J͒eVso4ދ6aދg._Zd ߩsC+/6ҬВ_mjqttYW0x6/ZY'zz/{\Afr#0p229+p4sr~X IJ?9%l jq4t#3e srz '[Ok+JvE kdYǤR%$iSfj+'ڠG0xa36yG&j]Pj9GPҕ%H"d*D-V5cдzA6&B@X ",9Ц W$X[ Bab/emQ j+˫[-n lQ.f]_ZilA{s&iTY&.Þ;AbcqgYOTv o{g'WF-<޶å)bcv|̼Tޕ 3>nu%/đY6Đtcc#|@Ng\x롣8T0$8j3ӆ[7tS+ݸ`YlL!tykԘQcm(옡˿\)TA‹ DlD?Ut (r;|8Q'oZ?*;ħ,h}#hա" =d( P*MIq#>n (J5pk4:Oo鑙uۡqRTAsw5`\>a> m8ԒZ˽WO fR "yjei'bsjaM!o(Tʛ&o<_/VvU-/?{Z}ng-uQ 0?}uk1C0akYgk_/e{f\qB1aH'o^ػaϿÅRl "c r# 爝kb!ci'qM$F2PBDo)//SObL%kX/{.{s7`^5Ŝw@%9qɇdC<,ݣUSަMs?bO`cD◇$&]UKS?WIyJ$:Sso[%Ny$\q<{שZյ%V=EB zF.'vc;ƥe鸣ɶ̺G`Dr(Cj+_RT5G&CcZsRJU JMƨTac~\d^LV1Ŝ}bbML޶ Np'Vi77 `֥GDŠ2'YTmN{I D{$gT߿/73sHDq`dj݄`pN/KhNnV?EDRzR̰@. ,%FdYt]2_^834?N?].De,Co强e&?2مb͗|Op tÚ'R8Mܴ БȈ>͒!1A5Mzɧ5>ᄹ-${!==]?/pYG#yg3dd\5y,|2E ccƔdG4xγ(X o<'AG$L`[ [W~2xbRyY sv9 B\Jg{Щ+A^ncLc^0X  *(!|s?Z3tr.j"d$.q陓^7a>)G21_'ƫQ wxc@S1pPmYi}ф{"% ͋[PŁO?BVo YA 3W(9\,4 /uֱ.V8 endstream endobj 924 0 obj << /Length1 2650 /Length2 14372 /Length3 0 /Length 15872 /Filter /FlateDecode >> stream xڍT #4ҡiM7HJwwm`݈tw!Hg;3yosk)ם])Hm Ab6֎L @n0̈`GK {5 GLb(cc t0ع8@3?C{n3 9 RغكM!y#5/wld` 1p4YA2Xl Gxkh```coOMp;A {g1WY+?1 R+lL] Alv8Y% i-oc 4o[l`ddcek`6-A91iGWG:/CKbuR?9كmjdfQkca++/~"`{n lml c'[FkHB`@r52c@R-R l` 8;IY!  v15 %Y /rڿ '$%dKbeۯc4BR~Osomb`& :K;/s'?C LfC&efk"!3B`4R ݲH'~GfZCN! 0!1mbjH['?deGiBl 揥BN 8 - Ldž|D@VQf3:ك~71:ǎA]n@HDr?=} _ʀ@ #Y#@JABְhP6Gf/S?L  %ϕOzҜ܎jw$g9Bl ]tmL86_(EׂբS} d٭ju:X I #3[5H5#1쵒%Tƞ7B͟6"S{{X~Ju}a/r$ǎIsb.c9%,CL|>!|"H2= 5_fY[8Ǟ+7#V䮺vaNyٞSSx\_Zķ4-I pIˡ®2:ښ%7M3bޟ6.gAS5ih|L,H0vXu洺CE)SHe&=mžS5vך]\QW3Ta TSPso{ǟi Y,,k&3|X /"~:.Q.ip5OAuwj;zv,]R8&.*=S$2+Iq\c}32_IIS J= WM/m.qxcRzH_8[h0RV)0cv d˼lN򷾖%Dы<NSu-{G>=Ti@#_$l5g]eʨ*;_X ҇ tT6vTy^y5䵵=5avPMZJnn`߇۪JL]vHt3>3%)56P7i E_~ͺB;ugVk/ [9}^YlrsETCQ`߱,TWVc[Lx)'-PXCsZ2[2m7OD3.W-jl/ *>nپ Z)]80E>MPM\-W@bقYݴ`辕 Qe2آ@n`< ܲC&5כ,l);K.ӓlGuMr0أlZ3󲽫Cqa;t@H|Oj["q,/Hx)c:\Axəm_&K IZ~{"[d]>Ǻʈh}*u#x怛`L<%żu25 OM3% ؘlH!G+}{+NBUa N7^0G7~9cor9#Oܢ߫JhY(k8P;ݍv mJrj0d.|}GӵyK\J'׿&Ge.f&~R2\Q?]ԥS0otTUfE-iJV8:#u4Ŷ[7IMa1V`H&(xro{*rKw [ eg!wDʥyd_бKؚF LsGf`e VĦ)⮝ԣٚ䍨 ЬFW &!v棢^<_z8<=mVKE(g@dp|P 2^^ؕcq^ϰӋMkxN*뷵HZpr%2kqq峪__,WBc >ȃWɗxh@venP2e #Ue]8s۪"]AnFOCWڄ(igS紛$TfܳoIB5.{KF<%}QkB̄[^`(_"9d( <͋5·o6}"j,$Xc-^֣v ZJ^Ԗ]6+ϘBt{ϔ*)6T$,DMs.D7S., ?ϢfD+U euwKM{т<;{h+uEfh geu.H*~* j5{'189^xu.l~F r޿?%P3!vX15! :j‹8X^D :{;KIĮM'L؍=$@/e&Z#H\$ʽRZ9&|Eͮj#IRkwHpG'u5U~gW絺ҼpvgXD["k$:lt%'e =weI:3ٟq `ǯ$J:Uª };^ 1@ x>4D6sf~X!J,j=,%Q@&V6tR8( 5Ŭ€+ Z0餟A7~b@LeQ# ɨ$EQ8~?,n$Os>aZ $1?-3x95.j٨^XQ͎s,_Aaߖ礊qDo?Ī ÿ ioN tI6>:g:+ܖժ瓷+(fWC +IƗc c+IM\qyhHi_ ^+m}h*>1{nnė 'W *Z)c%͜szʏ=G{ lsu$'>ˠA@_%(gh~Ѥ2Fa߿RRZy8GmY`v(Ȍ!W?iu^$&ʺeN|Ոc~p+ Xr@Lp[>.@a5oтEznFomhi[S i,x=4,h3@'wx}dLU8+,}dO񏇼8s:%7__Ɨ:I%jp;w KPG>Ja@+/.m$w[Alk*jB$btFI늺auIKD/g>Jҝ5^}g!׃{r9\8-T$ib.F4ԷQ N~u篌ԥ"g_ϼ-DScipnP?eCtT []'W F^}"ཬ?ӄ]v?Rݩ"=wG)laOGa^R~mD2/ _fTVdp-w k@oT^uZ}_e&bGN=tNi]ꈽ݅;͸AәG@e+9yJqC~z+*A\ɖMceq u$^"DmR ӂnD=Y%ip1|K<7'=ۼ\ciCQPEy,KuR5͛Zw ~7s_q